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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【Unity3D Shader程式設計】之二 雪山飛狐篇:Unity的基本Shader框架寫法&顏色、光照與材質Unity3D程式設計框架
- Cesium渲染模組之Shader
- Unity網格合併_材質合併[轉]Unity
- Unity Shader 00 - 梳理 Unity Shader 的基本結構Unity
- Unity 之渲染管線初探Unity
- 材質
- unity2022.3.9+Pico更換渲染管線後打包,人物材質不可顯示問題Unity
- 修改材質
- 材質優化:如何正確處理紋理和材質的關係優化
- Unity Shader之磨砂玻璃與水霧玻璃效果Unity
- Battle Pass的本質BAT
- unity 統一替換shaderUnity
- 圖形學之Unity渲染管線流程Unity
- 3DMAX模型匯出到Unity之中如何確保材質不丟失3D模型Unity
- unity shader 溶解,上下左右,cutoffUnity
- Ticwatch 2智慧手錶高畫質圖賞 多材多技
- blender材質屬性:
- 【Unity Shaders】Mobile Shader Adjustment—— 什麼是高效的ShaderUnity
- Unity Shader 入門精要 筆記(1)Unity筆記
- Unity 的 Surface Shader有關記錄Unity
- Unity3D 透明物體ShaderUnity3D
- 【Unity Shader入門精要】— 高階篇Unity
- 技術筆記(7)Unity匯入人物和場景資源,出現的材質顯示問題筆記Unity
- Unity3D 的物理渲染和光照模型Unity3D模型
- Unity的Flutter元件渲染UnityFlutter元件
- Unity3D Shader官方教程翻譯(三)----Shader語法:屬性Unity3D
- Unity3D Shader官方教程翻譯(四)----Shader語法:SubShaderUnity3D
- 卡西歐將釋出生物質塑膠材質PRO TREK手錶,採用雙層LCD
- Unity3D學習筆記3——Unity Shader的初步使用Unity3D筆記
- Threes.js入門篇之8 - 材質與紋理JS
- Unity Shader 實現雨天的水面漣漪效果Unity
- Unity&Shader常用函式的使用方法Unity函式
- Unity Shader-後處理:Bloom全屏泛光UnityOOM
- Unity3D Shader官方教程翻譯(一)Unity3D
- Unity3D Shader官方教程翻譯(二)Unity3D
- SpringBoot之整合thymeleaf渲染Web頁面Spring BootWeb
- Unity Shader基於視差對映的雲海效果Unity
- Unity Shader- UV動畫原理及簡易實現Unity動畫