使用方法:1、创建Projector:创建空GameObject,然后从Component处添加Projector组件,也可以Import Package-> Projector,导入Projector包。
Projector原理
Projector能将一个Material投影到所有在设定的平截头体内的物体上。通常包含两张贴图Cookie和Falloff。Cookie就是投影的图案,Falloff的作用主要是根绝距离来决定投影的Alpha即明暗。Falloff左边为白色,alpha值为1,对应投影距离最近时最亮,右边接近全黑,alpha值为0,表示投影距离变远时投影会渐渐接近透明甚至看不见。
【可以实现】
0 角色选择光圈
1 普通圆点阴影(blob shadow)
2 伪动态阴影(Fake Dynamic shadow)
3 光的投影
4 投影仪(根据Meterial的贴图,可以是图片,视频,另一个相机看到的景象)
5 3D或者2D手电筒的效果
使用步骤
一. 创建Projector.
可以创建空GameObject,然后从Component处添加Projector组件如下图
也可以Import Package-> Projector,导入Projector包。包内容如下
二:注意事项
1.确保Cookie Texture一定要设置为Clamp
2.为了避免projector bleeding, Cookie Texture 开启Border Mipmaps选项, 或者直接禁用Mipmap
3.FallOff
不管是orthographic还是不是。
如果不用FallOff, 投影下来的都是最亮即alpha为1的cookie,并且会向frustrum的正反2个方向投影,造成我们并不想看到的“双重投影”的效果。用系统包带的Falloff贴图的话。投影会随着距离变淡。
【实例演示】
例0:角色脚下的光圈
projector所使用的shader如下,再加上脚本控制projector旋转即可。
Shader「自訂/圓形」{
Properties {
_ShadowTex(「Cookie」,2D)= 「灰色" { TexGen ObjectLinear }
}
Subshader {
#Tags { "RenderType "= "Transparent-1" }
## # # #透過{
##
Z寫 # #
# 霧{ 顏色(1, 1, 1) } #
## # AlphaTest 大於0 #
# 顏色遮罩RGB #
# 「混合DstColor 零#o##
## SetTexture [_ShadowTex] { # #
# #> ## 組合紋理,貼圖
# # # # #
# # # Matrix [_Projector]
#
# ### ####}#### # #### ### ### ###}###### ### }###}######或用頂點&片段###
著色器「自訂/圓形」{
##屬性{
##_ShadowTex ( "Cookie", 2D) = "" { }
}
##Subshader {###### # ### ZWrite off
# # # #
Blend DstColor One# Blend DstColor One#One##
# ## # #CGPROGRAM ## #
#pragma vertex vert #
# #pragma # #pragma # #
## fragment frag # #
#include "UnityCG.cginc"include "UnityCG.cginc"##
## sampler2D _ShadowTex;#
> float4x4 _投影機;
# # # struct v2f #{
# # #
float4 #pos:SV_POSITION; float4 #pos:SV_POSITION; #> ##
# float4 texc:TEXCOORD0;
};
## # v2f vert(appdata_base v)
# ## # { ## #
## # # # #v2f o;
# # # # o.pos=mul(UNITY_MATRIX_MVP,v.vertex);
# # ##
# o.texc=mul(_Projector,v.vertex); # ### ### #### # ## ### #### ### ###return ###o;###### ### ### ### ### ### ### ###}
float4 frag(v2f i):COLOR
##o ## ## ## ## ## ## ## ##
## ## ## ## {#
> ## float4 c=tex2Dproj(_ShadowTex,i.texc);
# ##」
return c;#
#
#
#
#
ENDCG
}//endpass #
}//endpass ##}}
範例1: 普通圓點陰影(blob shadow)加在角色下面,記得把角色的layer加進projector設定下的'Ignore Layer'即可。
############Shader "Projector/Multiply" {###### ###Properties {###### ### ###o### ## #_ShadowTex ("Cookie", 2D) = "gray" { TexGen ObjectLinear }###### ### ### ### ###_FalloffTex ("FallOff", 2D) = "white" { TexGen ObjectLinear ### ###}###### ###}####
Subshader {
標籤 { "RenderType"="Transparent-1" }
# # 透過{
# #Z註銷
# ## #Z註銷# #
# # 霧{ 顏色(1, 1, 1) } #
# #AlphaTest 大於0 #
# # ColorMask RGB## # ColorMask RGB
## # ColorMask RGB# # #
#o## #搭配DstColor 零 #
# # ## # # #
偏移-1, -1 # # SetTexture [_ShadowTex] {
# # ### ####組合紋理,一個- 紋理####### # ### #### #### ### ### ##### ### ## # ### ####Matrix [_Projector]###### ### #####Matrix [_Projector]###### ### ##### #### ### ### #### ###}
SetTexture [_FalloffTex] {
## constantColor (1,1,1,0)
# #
# combine previous lerp (texture) constant # #
Matrix [_ProjectorClip]
}#
}
> #
}
}
}
2 偽動態陰影(Fake Dynamic shadow)
就是用3d Max或Maya或者Unity,先把動畫對應的陰影烘焙好, 做成序列幀。然後用projector的材質做對應的幀動畫即可。
3 光的投影
###基本上是就把黑的blob cookie換成 中間是白色的cookie即可。 ######4 投影機(根據Meterial的貼圖,可以是圖片,視頻,另一個相機看到的景象)######另一個相機繪製到RenderTexture,然後projector的材質使用RenderTexture即可######5 3D或2D手電筒的效果就是projector的方向和範圍設定和手電筒一致。把電筒的光顏色投出去即可。 ###
以上是Unity3D中Projector怎麼用的詳細內容。更多資訊請關注PHP中文網其他相關文章!