Version: Unity 6.0 (6000.0)
言語 : 日本語
ビルトインレンダーパイプラインでの 3 平面テクスチャシェーダーの例
ビルトインレンダーパイプラインのアンビエントライトシェーダー例

ビルトインレンダーパイプラインにおける単純なディフューズライティングシェーダーの例

まず、シェーダーに渡されたライティング情報が実際に必要であることを示す必要があります。Unity のレンダーパイプラインはさまざまなレンダリング方法をサポートしていますが、ここではデフォルトのフォワードレンダリングを使用します。

最初は 1 つのディレクショナルライトのみを使用します。Unity のフォワードレンダリングは、ForwardBase と呼ばれる 1 つのパスで主要なディレクショナルライト、アンビエント、ライトマップ、リフレクションをレンダリングすることにより機能します。シェーダーでは、これはパスタグ: Tags {“LightMode”=“ForwardBase”} を追加することで示すことができます。これにより、ディレクショナルライトのデータがいくつかのビルトイン変数を介してシェーダーに渡されます。

これは、頂点単位の簡単なディフューズライトを計算し、テクスチャを 1 枚だけ使う、簡単なシェーダーです。

Shader "Lit/Simple Diffuse"
{
    Properties
    {
        [NoScaleOffset] _MainTex ("Texture", 2D) = "white" {}
    }
    SubShader
    {
        Pass
        {
            // indicate that our pass is the "base" pass in forward
            // rendering pipeline. It gets ambient and main directional
            // light data set up; light direction in _WorldSpaceLightPos0
            // and color in _LightColor0
            Tags {"LightMode"="ForwardBase"}
        
            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag
            #include "UnityCG.cginc" // for UnityObjectToWorldNormal
            #include "UnityLightingCommon.cginc" // for _LightColor0

            struct v2f
            {
                float2 uv : TEXCOORD0;
                fixed4 diff : COLOR0; // diffuse lighting color
                float4 vertex : SV_POSITION;
            };

            v2f vert (appdata_base v)
            {
                v2f o;
                o.vertex = UnityObjectToClipPos(v.vertex);
                o.uv = v.texcoord;
                // get vertex normal in world space
                half3 worldNormal = UnityObjectToWorldNormal(v.normal);
                // dot product between normal and light direction for
                // standard diffuse (Lambert) lighting
                half nl = max(0, dot(worldNormal, _WorldSpaceLightPos0.xyz));
                // factor in the light color
                o.diff = nl * _LightColor0;
                return o;
            }
            
            sampler2D _MainTex;

            fixed4 frag (v2f i) : SV_Target
            {
                // sample texture
                fixed4 col = tex2D(_MainTex, i.uv);
                // multiply by lighting
                col *= i.diff;
                return col;
            }
            ENDCG
        }
    }
}

これによってオブジェクトにライトの方向が反映するようになります - ライト方向に向いている部分が光り、反対を向いている部分は、全く光りません。

ビルトインレンダーパイプラインでの 3 平面テクスチャシェーダーの例
ビルトインレンダーパイプラインのアンビエントライトシェーダー例
Copyright © 2023 Unity Technologies
优美缔软件(上海)有限公司 版权所有
"Unity"、Unity 徽标及其他 Unity 商标是 Unity Technologies 或其附属机构在美国及其他地区的商标或注册商标。其他名称或品牌是其各自所有者的商标。
公安部备案号:
31010902002961