UnityShader_Object2WorldとUNITY_MATRIX_MVPが置き換えられました



Unityshader _object2world



1._Object2Worldモデル空間から世界空間へ

Unity 5.5バージョンでは、_Object2Worldはunity_ObjectToWorldになり、_World2Objectもunity_WorldToObjectになりました。

ただし、Unityの下位互換性により、Unityはエラーなしで自動的に書き換えます。以下は、自動変更後のプロンプトで、コードの上部に表示されます。



//アップグレード注:「_ Object2World」を「unity_ObjectToWorld」に置き換えました

2.UNITY_MATRIX_MVP頂点をモデル空間からクリッピング空間に変換するために使用される行列

また、頂点シェーダーでは、最初の行でUNITY_MATRIX_MVPを使用することがよくあります。mul(UNITY_MATRIX_MVP、v.vertex)これは、頂点をモデル空間からクリッピング空間に変換するためのものです。スペースを手動で変更する必要はありませんが、これはunity5.6では次のように変更されています。UnityObjectToClipPos(v.vertex)UnityShaderUtilities.cgincでは、このファイルは5.6以降でのみ使用可能であることに注意してください。正式な実装は次のとおりです。



// Tranforms position from object to homogenous space 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))) }

3.例

v2f f //f.position=mul(UNITY_MATRIX_MVP,v.vertex) version 5.5 f.position=UnityObjectToClipPos(v.vertex) //fixed3 normalDir =normalize(mul((float3x3)_Object2World,v.normal)) version 5.5 fixed3 normalDir =normalize(mul((float3x3)unity_ObjectToWorld,v.normal))