GPU Instancing优点
1,大大降低Draw Calls 并且接受光照和阴影
2,同一材质可以通过改代码实现颜色不同而且可以进行批处理操作
第一个 废话不多说直接讲使用,首先我们创建100个Cube 让它旋转 Draw Calls达到了300多
我们用的是同一个材质,在材质中把GPU Instancing打勾 然后看效果
效果 很直观的可以看到 批次降低到9次
第二个 改颜色 先看效果
代码 首先是Shader 先创建一个脚本
更改这两处
更改C#代码
这个脚本是挂Cube的
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CubeColor : MonoBehaviour
{
[SerializeField]
MeshRenderer meshRenderer;//此处通过拖拽已经有了 也可以手写获得MeshRenderer
// Start is called before the first frame update
void Start()
{
//材质属性块
MaterialPropertyBlock prop = new MaterialPropertyBlock();
Color color = new Color(Random.Range(0f,1f), Random.Range(0f, 1f), Random.Range(0f, 1f));//创建一个color 随机颜色
prop.SetColor("_Color2",color);//设置
meshRenderer.SetPropertyBlock(prop);//赋值
}
// Update is called once per frame
void Update()
{
}
}
//以下是创建100个Cube的
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Optimize : MonoBehaviour
{
[SerializeField]
Transform tra;//节点
[SerializeField]
GameObject prefab;//预制体
bool run;
// Start is called before the first frame update
void Start()
{
for (int i = 0; i < 100; i++)
{
GameObject game = Instantiate(prefab, tra);
game.transform.position = new Vector3(Random.Range(-9, 9), Random.Range(-4, 4), Random.Range(-5, 5));
}
run = true;
}
// Update is called once per frame
void Update()
{
if (run)
{
tra.eulerAngles += tra.up * 120 * Time.deltaTime;
}
}
}