steking 发表于 2024-7-15 18:57

Unity shader MVP变换新版本优化?

Unity 的新版本定点的坐标变换不再是直接mul MVP而是换成了inline float4 UnityObjectToClipPos(in float3 pos)
{
    // More efficient than computing M*VP matrix product
    return mul(UNITY_MATRIX_VP, mul(unity_ObjectToWorld, float4(pos, 1.0)));
}
上面说More efficient than computing M*VP matrix product ,我想问这么做为什么会更有效率,是因为这么做让GPU计算的更快么?

axlezt 发表于 2024-7-15 18:58


[*]// 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_MATRIX_MVP会变成mul(UNITY_MATRIX_VP, unity_ObjectToWorldArray)。注意到如果直接使用UNITY_MATRIX_MVP,我们会引入一个额外的矩阵乘法运算,所以推荐使用UnityObjectToClipPos / UnityObjectToViewPos函数,它们会把这一次额外的矩阵乘法优化为向量-矩阵乘法。
Unity - Manual: GPU instancingUnite 2016|Unity 5.4的GPU Instancing功能简介
页: [1]
查看完整版本: Unity shader MVP变换新版本优化?