質問: Unityでゲーム開発を行っております。MAYAとUnityの連携について質問があります。 MAYAでテクスチャに対して頂点アルファを付けているモデリングデータを作成し、FBX出力されたデータをUnityで読み込んだ時に、テクスチャがそのまま表示されており頂点アルファが反映されません。ネットで調査したところ、Unity標準シェーダーでは頂点アルファは対応していないことが分かったのですが、具体的な対応方法を見つけることができませんでした。 シェーダーの書き方もしくはAssetを使った対応方法などでも構いませんので教えていただけませんでしょうか。 ### 補足情報(FW/ツールのバージョンなど) MAYA2017 Unity2017.3.0f3
回答: Standard shader with vertex colors | Unity Forumに投稿されているものは、落とす影までちゃんと正しい形になっている点などが興味深いと思いますが、いかがでしょうか。 ただ、GitHub - H-man/UnityVertexColorsにある改変バージョンをWindows版2017.4.1f1、DirectX 11で試してみたところ、`'FragmentSetup': cannot convert from 'half4[3]' to 'float4[3]'`などと文句を言われてしまいました。 仕方ないので、UnityVC.cgincを下記のように書き換えてみたところ、とりあえず動作するようになりました。 ``` /* Unity Standard Vertex Color Shader for Unity 2017.1.1f1 (original by defaxer) */ #ifndef UNITY_VC_INCLUDED #define UNITY_VC_INCLUDED // half4配列で受け取ったtangentToWorldをfloat4配列に変えてFragmentSetupに渡し、受け取った結果を返す inline FragmentCommonData FragmentSetupCustom(inout float4 i_tex, float3 i_eyeVec, half3 i_viewDirForParallax, half4 tangentToWorld[3], float3 i_posWorld) { float4 tangentToWorldF[3]; tangentToWorldF[0] = tangentToWorld[0]; tangentToWorldF[1] = tangentToWorld[1]; tangentToWorldF[2] = tangentToWorld[2]; return FragmentSetup(i_tex, i_eyeVec, i_viewDirForParallax, tangentToWorldF, i_posWorld); } // FRAGMENT_SETUP、FRAGMENT_SETUP_FWDADDで上記FragmentSetupCustomを使わせる #undef FRAGMENT_SETUP #define FRAGMENT_SETUP(x) FragmentCommonData x = FragmentSetupCustom(i.tex, i.eyeVec, IN_VIEWDIR4PARALLAX(i), i.tangentToWorldAndPackedData, IN_WORLDPOS(i)); #undef FRAGMENT_SETUP_FWDADD #define FRAGMENT_SETUP_FWDADD(x) FragmentCommonData x = FragmentSetupCustom(i.tex, i.eyeVec, IN_VIEWDIR4PARALLAX_FWDADD(i), i.tangentToWorldAndLightDir, IN_WORLDPOS_FWDADD(i)); // 以降のコードは変更なし ```