UnityShader 学习笔记 1 漫反射

版权声明:本文为博主原创文章,未经博主允许不得转载。如有问题,欢迎指正。 https://blog.csdn.net/qq_37352817/article/details/85113333
  • 逐像素:


Shader "_MyShader/Diffuse/fragment"

{

    Properties

    {

        _Diffuse ("color1",COLOR) = (1,1,1,1)

    }

    SubShader

    {

        pass{

            Tags {"LightMode" = "ForwardBase"}

            CGPROGRAM

            #pragma vertex vert

            #pragma fragment frag

            #include "Lighting.cginc"



            fixed4 _Diffuse;



            struct a2v{

                float4 vertex:POSITION;

                float3 normal:NORMAL;

            };



            struct v2f{

                float4 pos:SV_POSITION;

                float3 worldNormal:POSITION1;

            };



            v2f vert(a2v v){

                v2f o;

                o.pos = mul(UNITY_MATRIX_MVP,v.vertex);

                //将法线转换到世界坐标中

                o.worldNormal=normalize(mul(v.normal,(float3x3)_World2Object));



                return o;

            }



            fixed4 frag (v2f i):SV_Target{

                //环境光的颜色

                fixed4 amb = UNITY_LIGHTMODEL_AMBIENT;



                //得到世界坐标中的光源颜色

                fixed3 worldLight=normalize(_WorldSpaceLightPos0);



                //漫反射

                fixed3 diffuseColor = _LightColor0 * _Diffuse * saturate(dot(worldLight,i.worldNormal));



                //半兰伯特

                //fixed3 diffuseColor = _LightColor0 * _Diffuse * (0.5*dot(worldLight,i.worldNormal)+0.5);



                return fixed4(diffuseColor,1)+amb;

            }



            ENDCG

        }



    }



    FallBack "Diffuse"

}




  • 逐顶点


Shader "_MyShader/Diffuse/vertex"

{

    Properties

    {

        _Diffuse ("color1",COLOR) = (1,1,1,1)

    }

    SubShader

    {

        pass{

            Tags {"LightMode" = "ForwardBase"}

            CGPROGRAM

            #pragma vertex vert

            #pragma fragment frag

            #include "Lighting.cginc"



            fixed4 _Diffuse;



            struct a2v{

                float4 vertex:POSITION;

                float3 normal:NORMAL;

            };



            struct v2f{

                float4 pos:SV_POSITION;

                float3 color:COLOR;

            };



            v2f vert(a2v v){

                v2f o;

                o.pos = mul(UNITY_MATRIX_MVP,v.vertex);



                //环境光的颜色

                fixed3 amb = UNITY_LIGHTMODEL_AMBIENT;

                //将法线转换到世界坐标中

                fixed3 worldNormal=normalize(mul(v.normal,(float3x3)_World2Object));

                //得到世界坐标中的光源颜色

                fixed3 worldLight=normalize(_WorldSpaceLightPos0);



                //漫反射

                fixed3 diffuseColor = _LightColor0 * _Diffuse * saturate(dot(worldLight,worldNormal));



                //半兰伯特

                //fixed3 diffuseColor = _LightColor0 * _Diffuse * (0.5*dot(worldLight,worldNormal)+0.5);



                o.color = diffuseColor+amb;

                return o;

            }



            fixed4 frag (v2f i):SV_Target{

                return fixed4(i.color,1);

            }



            ENDCG

        }



    }



    FallBack "Diffuse"

}




猜你喜欢

转载自blog.csdn.net/qq_37352817/article/details/85113333