Unity Shader学习:GPU Instance
稍微了解下关于gpu instance渲染优化的知识,以下是同屏6400个不同贴图的方块,用柏林噪声改变高度,加了阴影和漫反射。
csharp部分:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PerlinNoiseTest : MonoBehaviour {
private float _seedX,_seedZ;
public GameObject cubePrefab;
private MaterialPropertyBlock props;
private MeshRenderer meshRenderer;
void Start () {
_seedX = Random.value * 80f;
_seedZ = Random.value * 80f;
props = new MaterialPropertyBlock();
//生成80*80的方块
for (int i = 0; i < 80; i++)
{
for (int j= 0; j < 80; j++)
{
GameObject cube = Instantiate(cubePrefab);
cube.transform.localPosition = new Vector3(i, 0, j);
cube.transform.SetParent(transform);
//根据perlin噪声赋值高度
SetY(cube);
}
}
}
void SetY(GameObject cube)
{
float height=0;
//采样的参数
float xSample = (cube.transform.localPosition.x + _seedX)/15.0f;
float zSample = (cube.transform.localPosition.z + _seedZ)/15.0f;
//生成perlin噪声图
float noise = Mathf.PerlinNoise(xSample, zSample);
//根据不同的值设定高度以及贴图
meshRenderer = cube.GetComponent<MeshRenderer>();
if (noise<=0.1)
{
height = 0;
props.SetFloat("_Index1", 1);
props.SetFloat("_Index2", 0);
props.SetFloat("_Index3", 0);
props.SetFloat("_Index4", <