|
- // Tranforms position from object to homogenous space
- inline float4 UnityObjectToClipPos( in float3 pos )
- {
- #if defined(UNITY_SINGLE_PASS_STEREO) || defined(UNITY_USE_CONCATENATED_MATRICES)
- // More efficient than computing M*VP matrix product
- return mul(UNITY_MATRIX_VP, mul(unity_ObjectToWorld, float4(pos, 1.0)));
- #else
- return mul(UNITY_MATRIX_MVP, float4(pos, 1.0));
- #endif
- }
5.4的版本是这样的。
找到一段答案 ,经供参考:
在写Instanced Shader时,通常情况下你并不用在意顶点空间转换,因为所有内建的矩阵名字在Instanced Shader中都是被重定义过的。比如unity_ObjectToWorld实际上会变成unity_ObjectToWorldArray[unity_InstanceID];UNITY_MATRIX_MVP会变成mul(UNITY_MATRIX_VP, unity_ObjectToWorldArray[unity_InstanceID])。注意到如果直接使用UNITY_MATRIX_MVP,我们会引入一个额外的矩阵乘法运算,所以推荐使用UnityObjectToClipPos / UnityObjectToViewPos函数,它们会把这一次额外的矩阵乘法优化为向量-矩阵乘法。
Unity - Manual: GPU instancingUnite 2016|Unity 5.4的GPU Instancing功能简介 |
|