美文网首页
一、Shader基础:5、表面着色器Surface Shader

一、Shader基础:5、表面着色器Surface Shader

作者: GameObjectLgy | 来源:发表于2021-01-13 01:32 被阅读0次

    表面着色器是通过Unity给我们制定好的一套标准,计算出需要填充输入什么,输出什么等相关信息,并产生真实的顶点(vertex)&像素(pixel)着色器,以及把渲染路径传递到正向或延时渲染路径。

    输出结构

    struct SurfaceOutput 
    {
        half3 Albedo;            //反射率,也就是纹理颜色值(r,g,b) 
        half3 Normal;            //法线,法向量(x, y, z) 
        half3 Emission;          //自发光颜色值(r, g,b) 
        half Specular;           //镜面反射度 
        half Gloss;              //光泽度
        half Alpha;              //透明度
    };
    

    我们需要做的就是对结构提供的变量进行赋值,赋值示例:

    void surf (Input IN, inout SurfaceOutput o)
    {
           //从主纹理获取rgb颜色值
           o.Albedo= tex2D (_MainTex, IN.uv_MainTex).rgb;
           //从凹凸纹理获取法线值
           o.Normal= UnpackNormal (tex2D (_BumpMap, IN.uv_BumpMap));
           //从_RimColor参数获取自发光颜色
           halfrim = 1.0 - saturate(dot (normalize(IN.viewDir), o.Normal));
           o.Emission= _RimColor.rgb * pow (rim, _RimPower);
    }
    

    最基本的表面着色器

    Shader "Custom/BasicSurfaceShader"
    {
        SubShader
        {
            Tags { "RenderType"="Opaque" }//大多数不透明着色器。
            LOD 200
    
            CGPROGRAM
            
            #pragma surface surf Lambert  //1、光照模式声明:使用兰伯特光照模式 
            #pragma target 3.0
    
            sampler2D _MainTex;
    
            struct Input
            {
                float4 color : COLOR;
            };
    
            fixed4 _Color;
            void surf (Input IN, inout SurfaceOutput  o)
            {
                //反射率
                o.Albedo = float3(0.5, 0.8, 0.3);//(0.5,0.8,0.3)分别对应于RGB分量
            }
            ENDCG
        }
        FallBack "Diffuse"
    }
    
    

    相关文章

      网友评论

          本文标题:一、Shader基础:5、表面着色器Surface Shader

          本文链接:https://www.haomeiwen.com/subject/tvkcaktx.html