Unity Shader之雙面材質和多Pass渲染
通過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"}
不過似乎看不出來哪個是正面哪個是反面,如果我們描述的是對稱的物體是不需要區分的。然而也有的時候是需要區分,比如我們是做的一塊布的效果,布的正面是一些花花綠綠的圖案,背面只是簡單的紋理,這種需要對正反面進行不同方式的渲染的情況,需要用到多個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"}
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70016819/viewspace-2895954/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Cesium渲染模組之Shader
- Unity Shader 00 - 梳理 Unity Shader 的基本結構Unity
- unity2022.3.9+Pico更換渲染管線後打包,人物材質不可顯示問題Unity
- Unity Shader之磨砂玻璃與水霧玻璃效果Unity
- unity 統一替換shaderUnity
- 材質
- unity shader 溶解,上下左右,cutoffUnity
- Battle Pass的本質BAT
- 圖形學之Unity渲染管線流程Unity
- Unity Shader 入門精要 筆記(1)Unity筆記
- Unity3D 透明物體ShaderUnity3D
- Unity 的 Surface Shader有關記錄Unity
- 修改材質
- 材質最佳化:如何正確處理紋理和材質的關係
- 3DMAX模型匯出到Unity之中如何確保材質不丟失3D模型Unity
- Unity3D學習筆記3——Unity Shader的初步使用Unity3D筆記
- 材質不夠渲染湊——九流美術的自我救贖之路
- Unity Shader-後處理:Bloom全屏泛光UnityOOM
- Unity&Shader常用函式的使用方法Unity函式
- Unity Shader 實現雨天的水面漣漪效果Unity
- Unity的Flutter元件渲染UnityFlutter元件
- 技術筆記(7)Unity匯入人物和場景資源,出現的材質顯示問題筆記Unity
- blender材質屬性:
- 卡西歐將釋出生物質塑膠材質PRO TREK手錶,採用雙層LCD
- SpringBoot之整合thymeleaf渲染Web頁面Spring BootWeb
- Threes.js入門篇之8 - 材質與紋理JS
- Unity Shader基於視差對映的雲海效果Unity
- Unity Shader- UV動畫原理及簡易實現Unity動畫
- 在Unity中渲染一個黑洞Unity
- GPU精粹與Shader程式設計(四):真實感渲染GPU程式設計
- 從頭學ShaderGraph:雪材質
- 從頭學ShaderGraph :溶解材質
- katana材質的製作2
- JMonkeyEngine——材質檔案備註
- ThreeJs-03材質進階JS
- Unity Shader 基於光照圖的簡易晝夜變化Unity
- Flutter渲染之Widget、Element 和 RenderObjectFlutterObject
- Unity中的三種渲染路徑Unity