細節慢慢補充,有幾個需要注意的地方,必須要有接收投影的pass也就是name是shadowcollector的,必須新增#pragma multi_compile_fwdbase,物體的著色器必須有tag 裡面的 。處理投影要在接收投影的物體shader裡。
隨後是三個巨集。
shadow_coords這個巨集後面的引數是指第幾個通道,不要和其他的出現衝突,也就是要改變投影的顏色話必須要占用乙個通道。
在頂點處理器裡呼叫transfer_shadow。
然後畫素著色器呼叫shadow_attenuation,返回的就是這個畫素是否存在陰影中。
可改變投影顏色的範例如下。
shader "example/shadowcolor
" subshader
pass
cgprogram
#pragma multi_compile_fwdbase#include
"unitycg.cginc
"#include
"lighting.cginc
"#include
"autolight.cginc
"#pragma vertex vertexmain
#pragma fragment fragmentmainfixed4 _maincolor;
fixed4 _shadowcolor;
struct
vertextofragment
;fixed4 fragmentmain (vertextofragment i) : color0
endcg
}pass
fog
zwrite on ztest lequal
cgprogram
#pragma vertex vert
#pragma fragment frag
#pragma multi_compile_shadowcollector
#define shadow_collector_pass#include
"unitycg.cginc
"struct
struct
v2f ;
fixed4 frag (v2f i) : sv_target
endcg}}
}
Unity中的Shader的形態
unity通過shaderlab來組織shader 作為一款號稱跨平台性最好的遊戲開發引擎,unity使用自定義使用mono這個開源的.net來實現。對於要適應不同的gpu的shader來說,unity使用自定義shaderlab來組織shader的內容,並會針對不同的平台進行編譯。1.關鍵字sha...
unity中shader的Cutout問題
unity中自帶的shader裡有cutout型別的shader,今天發現這種型別很詭異,先 貼幾種自帶的 shader transparent cutout diffuse cutoff alpha cutoff range 0,1 0.5 subshader lod 200 cgprogram ...
unity螢幕空間座標shader
螢幕座標效果不受物體在空間位置的影響,只受到物體本身和視口的影響,有時候可以做一些特殊效果 比如2d遊戲平鋪紋理,除錯螢幕位置,螢幕特效等等 下面是根據官方例子修改的 shader unlit show uvs subshader sampler2d maintex struct ccc v2f v...