Unity中Batching优化的GPU实例化(3)
文章目录
- 前言
- 一、UNITY_SETUP_INSTANCE_ID(v);
- 二、在UnityInstancing.cginc文件中,看一下Unity这句话做了什么
- 1、使用了该 .cginc 后,会自动预定义该函数
- 2、需要满足GPU实例化条件,才会执行对应语句
- 3、满足GPU实例化后,主要执行的是如下几个函数
前言
在上篇文章中,我们主要解析了 Unity 中 GPU实例化的定义 实例化ID 步骤干了什么。
- Unity中Batching优化的GPU实例化(2)
我们在这篇文章中,把定义的 实例化ID 给使用起来,使合成一个批次的模型 包含的渲染的对象坐标显示正确。
一、UNITY_SETUP_INSTANCE_ID(v);
UNITY_SETUP_INSTANCE_ID(v); 放在顶点着色器/片断着色器(可选)中最开始的地方,这样才能访问到全局变量unity_InstanceID.
- 修改前(虽然GPU实例化合批成功了,但是对象的位置不对):
- 修改后:(GPU实例化合批成功,且位置正确)
二、在UnityInstancing.cginc文件中,看一下Unity这句话做了什么
- UNITY_SETUP_INSTANCE_ID(v);
1、使用了该 .cginc 后,会自动预定义该函数
2、需要满足GPU实例化条件,才会执行对应语句
- 这句话必须在顶点着色器 和 片元着色器一开始使用,才可以使之后的步骤正确的访问全局变量unity_InstanceID
- UNITY_INSTANCING_ENABLED : GPU实例化能开启的情况
- UNITY_SUPPORT_INSTANCING : GPU实例化硬件支持
3、满足GPU实例化后,主要执行的是如下几个函数
- UNITY_GET_INSTANCE_ID(input) :获取合批前,点的合批ID 函数
- UnitySetupInstanceID(UNITY_GET_INSTANCE_ID(input)) :转化得到合批后点的合批ID
- UnitySetupCompoundMatrices(); : Unity根据全局变量 unity_InstanceID 进行对应的矩阵变换使顶点位置正确
在这篇文章中,我们解决了GPU实例化后,对象位置不对的问题。在下篇文章中,我们实现怎么使每个对象的材质颜色不同。