先上圖片:
重點需要注意的是fragment shader的透明部份
需要如此聲明
Background - 最初的渲染渲染,用來渲染天空盒或背景
Geometry - 默許值,1般的不透明物體
AlphaTest - 渲染經過Alpha Test的像素
Transparent - 渲染透明物體
Overlay - 最后渲染的物體
"IgnoreProjector"="True"(不被Projectors影響)
關于renderType來自這里:
Opaque: 用于大多數著色器(法線著色器、自發光著色器、反射著色器和地形的著色器)。
Transparent:用于半透明著色器(透明著色器、粒子著色器、字體著色器、地形額外通道的著色器)。
TransparentCutout: 蒙皮透明著色器(Transparent Cutout,兩個通道的植被著色器)。
Background: Skybox shaders. 天空盒著色器。
Overlay: GUITexture, Halo, Flare shaders. 光暈著色器、閃光著色器。
TreeOpaque: terrain engine tree bark. 地形引擎中的樹皮。
TreeTransparentCutout: terrain engine tree leaves. 地形引擎中的樹葉。
TreeBillboard: terrain engine billboarded trees. 地形引擎中的廣告牌樹。
Grass: terrain engine grass. 地形引擎中的草。
GrassBillboard: terrain engine billboarded grass. 地形引擎何中的廣告牌草。
這里需要注意的是透明的blend部份官方文檔可詳細查看,
但如果只這么寫透明部份會擋住后面的部份,我們還要在后面的代碼中加上discard,直接拋棄像素,這樣它就不會擋住后面的部份了,
這里渲染的重點還是基于物理的渲染,之前有詳細寫過:
由于資源里有兩種貼圖方案,我就寫了兩種shader進行了不同的計算
1種是specular Texture的1種是GlossTexture的
大芭蕉
玉竹
也能夠引伸1些更好玩的東西比如在vertex shader中寫入被風吹的效果
全部代碼以同享至GitHub
---------- by wolf96 http://blog.csdn.net/wolf96