找回密码
 立即注册
查看: 302|回复: 1

Unity shader MVP变换新版本优化?

[复制链接]
发表于 2024-7-15 18:57 | 显示全部楼层 |阅读模式
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计算的更快么?
发表于 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_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功能简介
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-11-21 22:01 , Processed in 0.286171 second(s), 27 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表