91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

Unity Shader雙面材質和多Pass渲染怎么實現

發布時間:2022-01-11 15:41:04 來源:億速云 閱讀:1121 作者:iii 欄目:大數據

這篇文章主要介紹“Unity Shader雙面材質和多Pass渲染怎么實現”,在日常操作中,相信很多人在Unity Shader雙面材質和多Pass渲染怎么實現問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Unity Shader雙面材質和多Pass渲染怎么實現”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

默認情況下,我們編寫的Shader都只對模型的正面進行渲染,因為大多數模型都是封閉的,我們看不到反面。在實際的開發過程中,也經常會遇到需要正反面都渲染的時候,比如開發手游的時候經常需要用一個面片+透明的方式表示遠處的植物和圍墻,如果我們用默認的單面渲染,從另一面就無法看到,只能通過增加一倍面數來實現。

通過Cull語句實現雙面材質

實現雙面渲染最簡單的方法是用Cull Off。“Cull”意為“剔除”,表示去掉看不見的部分(默認是剔除背面)。Cull Off則告訴Unity,這個渲染不需要剔除了,你別多管閑事。下面是一個簡單的例子:

Shader "Custom/DoubleTransparent" {
    Properties {
        _MainTint ("Main Color", Color) = (1, 1, 1, 1)
    }
    SubShader {
        Tags { "Queue" = "Transparent" }
        LOD 200
        Cull Off

        Pass
        {
            Blend SrcAlpha OneMinusSrcAlpha
            ZWrite Off
            CGPROGRAM            #pragma vertex vert
            #pragma fragment frag
            #include "UnityCG.cginc"

            uniform float4 _MainTint;

            float4 vert(float4 vertPos : POSITION) : SV_POSITION
            {                return mul(UNITY_MATRIX_MVP, vertPos);
            }

            float4 frag(float4 vertPos : SV_POSITION) : COLOR
            {                return _MainTint;
            }
            ENDCG
        }
    } 
    FallBack "Diffuse"}

下面是一個正反兩面的渲染效果:

  Unity Shader雙面材質和多Pass渲染怎么實現

不過似乎看不出來哪個是正面哪個是反面,如果我們描述的是對稱的物體是不需要區分的。然而也有的時候是需要區分,比如我們是做的一塊布的效果,布的正面是一些花花綠綠的圖案,背面只是簡單的紋理,這種需要對正反面進行不同方式的渲染的情況,需要用到多個Pass進行渲染。

多Pass渲染

為了實現正反面的不同渲染,我們需要兩個Pass進行渲染。第一個使用Cull Back語句,只渲染正面,第二個用Cull Front語句,只渲染背面。代碼也非常簡單:

Shader "Custom/DoubleTransparent" {
    Properties {
        _FrontColor ("Front Color", Color) = (1, 1, 1, 1)
        _BackColor ("Back Color", Color) = (1, 1, 1, 1)
    }
    SubShader {
        Tags { "Queue" = "Transparent" }
        LOD 200

        Pass
        {
            Blend SrcAlpha OneMinusSrcAlpha
            ZWrite Off
            Cull Front
            CGPROGRAM            #pragma vertex vert
            #pragma fragment frag
            #include "UnityCG.cginc"

            uniform float4 _BackColor;

            float4 vert(float4 vertPos : POSITION) : SV_POSITION
            {                return mul(UNITY_MATRIX_MVP, vertPos);
            }

            float4 frag(float4 vertPos : SV_POSITION) : COLOR
            {                return _BackColor;
            }
            ENDCG
        }

        Pass
        {
            Blend SrcAlpha OneMinusSrcAlpha
            ZWrite Off
            Cull Back
            CGPROGRAM            #pragma vertex vert
            #pragma fragment frag
            #include "UnityCG.cginc"

            uniform float4 _FrontColor;

            float4 vert(float4 vertPos : POSITION) : SV_POSITION
            {                return mul(UNITY_MATRIX_MVP, vertPos);
            }

            float4 frag(float4 vertPos : SV_POSITION) : COLOR
            {                return _FrontColor;
            }
            ENDCG
        }

    } 
    FallBack "Diffuse"}

可以看到兩次渲染用了不同的顏色和不同的Cull方式。實際效果如下:

Unity Shader雙面材質和多Pass渲染怎么實現  

到此,關于“Unity Shader雙面材質和多Pass渲染怎么實現”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

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

AI

疏附县| 安顺市| 正安县| 中山市| 越西县| 五指山市| 平和县| 盘锦市| 宁陕县| 修水县| 抚宁县| 南宁市| 克拉玛依市| 桐柏县| 大荔县| 本溪| 霍林郭勒市| 娄烦县| 兴隆县| 永福县| 阿勒泰市| 万载县| 丹江口市| 德昌县| 平昌县| 汉源县| 新干县| 祁阳县| 四子王旗| 左云县| 武宁县| 乳源| 延长县| 遂昌县| 游戏| 灵川县| 满洲里市| 渭南市| 通渭县| 宿松县| 神木县|