前提・実現したいこと
Unity vertex shader です。
スキンメッシュのジョイントによる変換前の [: POSITION]と[ : NORMAL]を取得したいです。
可能でしょうか?
なにとぞよろしくお願いします。
発生している問題
下記のように、[: POSITION]と[ : NORMAL]セマンテイクスで取得した頂点情報はスキンメッシュの変形後の値のようです。
いわゆる、"Tポーズ"である、ジョイント回転のマトリックス変換前を取得できるセマンテイクスはあるんでしょうか?
struct appdata { float4 vertex : POSITION; float3 normal : NORMAL; };
下記はunityの公式ページのサンプルコードです
unity
1Shader "test" { 2SubShader { 3 Pass { 4 CGPROGRAM 5 #pragma vertex vert 6 #pragma fragment frag 7 #include "UnityCG.cginc" 8 9 // vertex input: position, normal 10 struct appdata { 11 float4 vertex : POSITION; 12 float4 normal : POSITION; 13 }; 14 15 struct v2f { 16 float4 pos : SV_POSITION; 17 fixed4 color : COLOR; 18 }; 19 20 v2f vert (appdata v) { 21 v2f o; 22 o.pos = UnityObjectToClipPos(v.vertex ); 23 o.color.xyz = v.normal.xyz * 0.5 + 0.5; 24 o.color.w = 1.0; 25 return o; 26 } 27 28 fixed4 frag (v2f i) : SV_Target { return i.color; } 29 ENDCG 30 } 31} 32}
サンプルは取得したノーマルを色として出力しています。
これをキャラクターに適応し、アニメーションを再生すると、色が変化します。
事前に静的にDCCツールで頂点カラーに焼き付けておくことで求める結果は得られますが、それをしないで結果を得たいです。
試したこと
事前に静的にDCCツールで頂点カラーに焼き付けておくことで求める結果は得られますが、それをしないで結果を得たいです。
補足情報(FW/ツールのバージョンなど)
Unity 2017.3.1

バッドをするには、ログインかつ
こちらの条件を満たす必要があります。