中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

ShaderLab學習小結(八)在標準表面shader中加入

發布時間:2020-06-21 19:55:09 來源:網絡 閱讀:3827 作者:lreach 欄目:游戲開發

場景中新建cube,和一個plane,新建一個standard surface shader和用此shader的材質賦給cube。
在不改變這個標準表面shader原有元素的基礎上加入頂點程序,實現”ShaderLab學習小結(七)用插值函數lerp漸變顏色“中的顏色漸變,如下圖:
ShaderLab學習小結(八)在標準表面shader中加入

shader代碼:

Shader "Custom/TestCarPaintShader" {
    Properties {
        _Color ("Color", Color) = (1,1,1,1)
        _MainTex ("Albedo (RGB)", 2D) = "white" {}
        _Glossiness("Smoothness", Range(0,1)) = 0.5
        _Metallic("Metallic", Range(0,1)) = 0.0

        //1.以下四個屬性為新加入的實現漸變色屬性(參見學習小結(七))
        _Center("Center", range(-120,420)) = 0
        _R("R",range(0,400)) = 0
        _MainColor("Main Color", color) = (0,0,1,1)
        _SecColor("Second Color", color) = (1,0,0,1)
    }
    SubShader {
        Tags { "RenderType"="Opaque" }
        LOD 200

        CGPROGRAM
        // Physically based Standard lighting model, and enable shadows on all light types
        //#pragma surface surf Standard fullforwardshadows     //2.
        #pragma surface surf Standard vertex:vert                       //3.

        // Use shader model 3.0 target, to get nicer looking lighting
        #pragma target 3.0

        sampler2D _MainTex;
        float _Center;
        float _R;

        struct Input {
            float2 uv_MainTex;
            float x;                       //4.
        };

        half _Glossiness;
        half _Metallic;
        fixed4 _Color;
        fixed4 _SecColor;
        fixed4 _MainColor;

    //5.
        void vert(inout appdata_full v, out Input o)
        {
            o.uv_MainTex = v.texcoord.xy;
            o.x = v.vertex.y;
        }

        void surf (Input IN, inout SurfaceOutputStandard o) {
            // Albedo comes from a texture tinted by color
            fixed4 c = tex2D (_MainTex, IN.uv_MainTex) * _Color;
            o.Albedo = c.rgb;
            // Metallic and smoothness come from slider variables
            o.Metallic = _Metallic;
            o.Smoothness = _Glossiness;

      o.Alpha = c.a;

            //6.
            float s = IN.x - (_Center - _R / 2);
            float f = saturate(s / _R);
            fixed4 col = lerp(_MainColor, _SecColor, f);
            o.Albedo *= col.rgb;
        }
        ENDCG
    }
    FallBack "Diffuse"
}

如上,代碼中用注釋標注了六處

1

四個屬性的聲明,這個參見學習小結(七)

2和3

//#pragma surface surf Standard fullforwardshadows     //2.
    #pragma surface surf Standard vertex:vert                      //3.

原來的標準表面shader中用的是2,為了引入頂點程序,改為3

4

構造體

    struct Input {
            float2 uv_MainTex;
            float x;                       //4.
        };

參照學習小結(七),要實現x坐標或y坐標方向上的顏色漸變,需要一個值記錄坐標,用于計算

5

加入頂點函數

 //5.
        void vert(inout appdata_full v, out Input o)
        {
            o.uv_MainTex = v.texcoord.xy;
            o.x = v.vertex.y;
        }

注意:void,即無返回值,函數的參數變成兩個,輸出Input o
同樣,對o中的元素賦值,o.uv_MainTex,以及o.x。本例還是以y坐標來漸變,所以

o.x=v.vertex.y;

6

//6.
            float s = IN.x - (_Center - _R / 2);
            float f = saturate(s / _R);
            fixed4 col = lerp(_MainColor, _SecColor, f);
            o.Albedo *= col.rgb;

漸變計算,同學習小結(七)。唯一不同的是顏色的設置
o.Albedo,在標準著色器中,o.Albedo賦予的是材質的顏色,即前面

fixed4 c = tex2D (_MainTex, IN.uv_MainTex) * _Color;
            o.Albedo = c.rgb;

再和漸變計算出的顏色rgb相乘,得出最終顏色
我們這里沒有設置材質貼圖,原有的主顏色_Color保持默認的白色,就出來了圖中的效果。
且這個shader保留了原有的表面著色器,包括貼圖、光照、陰影、smoothness、metallic等屬性,是在這些的基礎上做出的顏色漸變。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

汉寿县| 郧西县| 霞浦县| 大城县| 乌拉特中旗| 当雄县| 永仁县| 海口市| 无棣县| 岱山县| 高阳县| 台山市| 林西县| 孟连| 滁州市| 晋城| 莱州市| 河北省| 怀集县| 若尔盖县| 建阳市| 湟源县| 乌兰察布市| 周口市| 云龙县| 贵州省| 陆河县| 福泉市| 汝城县| 黎川县| 阳曲县| 府谷县| 南丹县| 伊金霍洛旗| 化德县| 新绛县| 思茅市| 穆棱市| 萨嘎县| 安溪县| 罗甸县|