2016-11-12 13 views
0

頂点の色を示すVertexColorShaderを使用して頂点の色をMaya(Image1)で平面に割り当て、Unityにエクスポートしました。頂点の色が期待通りに機能しない

私はImage3のような結果になると思っていましたが、Image2のようになったということでした。

これらの画像をご覧ください。

Image1, Image2, Image3

私のシェーダは非常に簡単です。頂点カラーを可視にするだけです。

vert関数は各頂点カラーを取り、出力変数に格納します。

surf関数は変数から色を取得し、それをフラグメントの色として設定します。

頂点関数は頂点ごとに呼び出されるので、結果はImage3(Photoshopでこの画像を作成しました)のようになりますが、実際はImage2として出力されると思いました。

Image1, Image2, Image3

どのように来ますか?

頂点間の各フラグメントは、頂点関数が頂点間で呼び出されないため、その色を知らないため、プレーンの色は頂点の位置を除いてほぼ白色であると考えました。

これはどうして起こるのか教えてください。

Shader "MyShader/VertexColorShader" { 
    Properties { 
    } 
    SubShader { 
    Tags { "RenderType"="Opaque" } 
    CGPROGRAM 
    #pragma surface surf Lambert vertex:vert 

    struct Input { 
     float4 vertColor; 
    }; 

    void vert(inout appdata_full v, out Input o) { 
     UNITY_INITIALIZE_OUTPUT(Input, o); 
     o.vertColor = v.color; 
    } 

    void surf (Input IN, inout SurfaceOutput o) { 
     o.Albedo = IN.vertColor.rgb; 
    } 
    ENDCG 
    } 
} 

乾杯、

テック

+0

あなたの色に敏感な目のための誇りだが、私は実際に違いは見えない.. ?? – Absinthe

+0

ご返信ありがとうございます。 Image2とImage3の違いは表示されませんか?本当に ?? – tech

+0

2と3はリンゴとナシを比較し、1つはテックスマップであり、1つはバーツです – Absinthe

答えて

0

[OK]を、私は答えを得ました。

頂点関数のout変数に格納されたすべてが補間され、フラグメントまたはサーフェス関数に渡されます。

ありがとうございました。

関連する問題