前回の続きです
dhero.hatenablog.com
今回はこちらをなぞっていきます
nn-hokuson.hatenablog.com
最小限のシェーダ
Shader "Custom/sample" { SubShader { Tags { "RenderType"="Opaque" } LOD 200 CGPROGRAM #pragma surface surf Standard fullforwardshadows #pragma target 3.0 struct Input { float2 uv_MainTex; //使わないんだけど、空っぽだとsurfに入力を渡せない }; void surf (Input IN, inout SurfaceOutputStandard o) { o.Albedo = fixed4(1.0f, 1.0f, 1.0f, 1); //outputのAlbedoに色を指定している } ENDCG } FallBack "Diffuse" }
Unityのサーフェイスシェーダにおいて、surfシェーダの位置づけは次のようになっています。Vertexシェーダから出力された値(Input構造体)を入力に取り、オブジェクトの表面色(SurfaceOutputStandard)を出力します。
【Unityシェーダ入門】20行から始めるUnityミニマルシェーダ - おもちゃラボ
Surfがないので再現できないが、こういうことだろうか…
今回のミニマルコードの例でいえば、surfを使うにあたって空のInputを渡せないので、とりあえずUVは入れているが、surfの中では入力は使わず中身ではLightingに渡すoutputの色情報のみ与えている…とのこと
surfベースで始めたのよくなかったかな…