19.Shader透明效果

目錄:
1.透明剔除
2.透明
3.其他
????3.1透明的渲染混合思路
????3.2開啟深度寫入的半透明效果
????3.3雙面渲染透明度混合
透明剔除+透明完整代碼:
https://github.com/smartgrass/MyCodes/tree/main/ShaderLearning/Transparent.shader
1.透明剔除
使用clip(a)函數(shù), 對(duì)透明度小于a的像素去掉,達(dá)到剔除效果
核心代碼 ?(Texture_uv.shader中修改)
隨意一張透明圖 剔除測(cè)試


2.透明
Queue設(shè)置為Transparent
設(shè)置混合因子 Blend SrcAlpha OneMinusSrcAlpha
片元著色器返回顏色時(shí), a通道設(shè)置為_Alpha, _Alpha為[0,1]的小數(shù)

3.其他
3.1透明的渲染混合思路
先渲染不透明的物體,再渲染半透明的物體。
在半透明物體中,以相機(jī)距離由遠(yuǎn)到近順序渲染。
半透明與不透明進(jìn)行顏色混合
Queue預(yù)設(shè)

混合因子

混合操作

常見混合效果

擴(kuò)展: 其他函數(shù)(需要用到再看)
https://blog.csdn.net/u010494204/article/details/106295571/
3.2開啟深度寫入的半透明效果

原因是, 關(guān)閉深度寫入會(huì)造成錯(cuò)誤排序, 解決方法是開啟深度寫入,但不輸出顏色.
第一個(gè)pass將模型深度值寫入深度緩沖中
第二個(gè)paas進(jìn)行正常的透明度混合
關(guān)閉深度寫入的核心代碼
開啟深度寫入的核心代碼
代碼解釋:
"RenderType"="Transparent" 用來指明該shader是使用了透明混合的(用透明就跟著寫...)
"IgnoreProjector"="True" 忽略投射, 即不會(huì)受到投影器的影響
3.3雙面渲染透明度混合
思路是使用兩個(gè)Pass,一個(gè)Pass用于渲染正面,一個(gè)Pass用于渲染背面。
這樣就可以保證渲染順序的正確性。
原文: https://zhuanlan.zhihu.com/p/112567640
