[グラフィック]グラフィック学習(3)


ここでは色に関する実習を行います.

1.入力出力色


本の中のコードには、入力と出力の色の部分しか残っていません.

学識

  • struct Input{}をクリアするとエラーが発生します.少なくとも1つのメンバー、
  • を含める必要があります.
  • 属性のセミコロンに注意!習慣のようにセミコロンを使って、それから間違いが出て、何の間違いなのか分からず、
  • をうろうろしました.
  • o.Albedoはr,g,bしか必要ないのでtestColorではなくtestColorと書きます.rgb
  • を書く
    Shader "NewShader"
    {
        Properties
        {
            _TestColor("TestColor", Color) = (1,1,1,1)
        }
        SubShader
        {
            Tags { "RenderType"="Opaque" }
    
            CGPROGRAM
    
            #pragma surface surf Standard fullforwardshadows
    
            struct Input
            {
                float4 color : COLOR; // 버텍스 컬러를 받아오는 마법의 주문
            };
    
            float4 _TestColor;
    
            void surf (Input IN, inout SurfaceOutputStandard o)
            {
                o.Albedo = _TestColor.rgb; // o.Albedo는 r,g,b만 필요하므로 _TestColor라고 작성하지 않음            
                o.Alpha = _TestColor.a;
            }
            ENDCG
        }
        FallBack "Diffuse"
    }


    2.R、G、Bを個別に入力して色を設定する


    学識

  • C#の習慣に従って、o.Albedo=new float 3()と書き、新しいキーワードは必要ありません.
  • 変数を作成するとき、属性宣言->CGROGSRAMからENDCGに宣言するプロセスは、
  • にますます熟知しています.
    Shader "NewShader"
    {
        Properties
        {
            _TestColor("TestColor", Color) = (1,1,1,1)
            _Red("Red", Range(0,1)) = 0
            _Green("Green", Range(0,1)) = 0
            _Blue("Blue", Range(0,1)) = 0
        }
        SubShader
        {
            Tags { "RenderType"="Opaque" }
    
            CGPROGRAM
    
            #pragma surface surf Standard fullforwardshadows
    
            struct Input
            {
                float4 color : COLOR;
            };
    
            float4 _TestColor;
            float _Red;
            float _Green;
            float _Blue;
    
            void surf (Input IN, inout SurfaceOutputStandard o)
            {
                o.Albedo = float3(_Red, _Green, _Blue);
                o.Alpha = _TestColor.a;
            }
            ENDCG
        }
        FallBack "Diffuse"
    }
    
    (実際、ここから先はTestColor部分は不要)


    3.色を明るくして暗くする


    1つのfloat値を受け入れ、既存の出力色に基づいて輝度を調整する方法
    float値を加算すると明るくなる方法を考えてみましょう.
    ディスプレイに表示される色は、加えれば加えるほど明るくなる加算ブレンドです.
    これは、既存の色に単純に加えて明るくする方法のようです.
    上のコードに追加されたコードの一部のみを整理し、以下のようにします.
        Properties
        {
            _BrightDark ("Brightness $ Darkness", Range(-1,1)) = 0
        }
         SubShader
        {
        	CGPROGRAM
            float _BrightDark;
    
            void surf (Input IN, inout SurfaceOutputStandard o)
            {            
                o.Albedo = float3(_Red, _Green, _Blue) + _BrightDark;
            }
            ENDCG
        }
    


    リファレンス

  • 技術芸術家のために設計されたUnitizer Start Up(鄭宗弼著)