這篇文章主要介紹Unity3D中Projector怎么用,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!
站在用戶的角度思考問題,與客戶深入溝通,找到龍山網(wǎng)站設(shè)計與龍山網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗,讓設(shè)計與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個性化、用戶體驗好的作品,建站類型包括:成都做網(wǎng)站、網(wǎng)站設(shè)計、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣、主機域名、網(wǎng)絡(luò)空間、企業(yè)郵箱。業(yè)務(wù)覆蓋龍山地區(qū)。
Projector
【原理】
Projector能將一個Material投影到所有在設(shè)定的平截頭體內(nèi)的物體上。通常包含兩張貼圖Cookie和Falloff。Cookie就是投影的圖案,F(xiàn)alloff的作用主要是根絕距離來決定投影的Alpha即明暗。Falloff左邊為白色,alpha值為1,對應(yīng)投影距離最近時最亮,右邊接近全黑,alpha值為0,表示投影距離變遠時投影會漸漸接近透明甚至看不見。
【可以實現(xiàn)】
0 角色選擇光圈
1 普通圓點陰影(blob shadow)
2 偽動態(tài)陰影(Fake Dynamic shadow)
3 光的投影
4 投影儀(根據(jù)Meterial的貼圖,可以是圖片,視頻,另一個相機看到的景象)
5 3D或者2D手電筒的效果
【使用步驟】
一. 創(chuàng)建Projector.
可以創(chuàng)建空GameObject,然后從Component處添加Projector組件如下圖
也可以Import Package-> Projector,導(dǎo)入Projector包。包內(nèi)容如下
二:注意事項
1.確保Cookie Texture一定要設(shè)置為Clamp
2.為了避免projector bleeding, Cookie Texture 開啟Border Mipmaps選項, 或者直接禁用Mipmap
3 FallOff
不管是orthographic還是不是。
如果不用FallOff, 投影下來的都是最亮即alpha為1的cookie,并且會向frustrum的正反2個方向投影,造成我們并不想看到的“雙重投影”的效果。用系統(tǒng)包帶的Falloff貼圖的話。投影會隨著距離變淡。
【實例演示】
例0:角色腳下的光圈
projector所使用的shader如下,再加上腳本控制projector旋轉(zhuǎn)即可。
Shader "Custom/Circle" {
Properties {
_ShadowTex ("Cookie", 2D) = "gray" { TexGen ObjectLinear }
}
Subshader {
Tags { "RenderType"="Transparent-1" }
Pass {
ZWrite Off
Fog { Color (1, 1, 1) }
AlphaTest Greater 0
ColorMask RGB
Blend DstColor Zero
SetTexture [_ShadowTex] {
combine texture,texture
Matrix [_Projector]
}
}
}
}
或者用Vertex&Fragment
Shader "Custom/Circle" {
Properties {
_ShadowTex ("Cookie", 2D) = "" { }
}
Subshader {
pass {
ZWrite off
Blend DstColor One
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
sampler2D _ShadowTex;
float4x4 _Projector;
struct v2f {
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
{
float4 c=tex2Dproj(_ShadowTex,i.texc);
return c;
}
ENDCG
}//endpass
}
}
例1: 普通圓點陰影(blob shadow)
加在角色下面,記得把角色的layer加進 projector設(shè)置下的'Ignore Layer'即可。
Shader "Projector/Multiply" {
Properties {
_ShadowTex ("Cookie", 2D) = "gray" { TexGen ObjectLinear }
_FalloffTex ("FallOff", 2D) = "white" { TexGen ObjectLinear }
}
Subshader {
Tags { "RenderType"="Transparent-1" }
Pass {
ZWrite Off
Fog { Color (1, 1, 1) }
AlphaTest Greater 0
ColorMask RGB
Blend DstColor Zero
Offset -1, -1
SetTexture [_ShadowTex] {
combine texture, ONE - texture
Matrix [_Projector]
}
SetTexture [_FalloffTex] {
constantColor (1,1,1,0)
combine previous lerp (texture) constant
Matrix [_ProjectorClip]
}
}
}
}
2 偽動態(tài)陰影(Fake Dynamic shadow)
就是用3d Max或者 Maya或者Unity,先把動畫對應(yīng)的陰影烘焙好, 做成序列幀。然后用projector的材質(zhì)做對應(yīng)的幀動畫即可。
3 光的投影
基本是就把黑的blob cookie換成 中間是白色的cookie即可。
4 投影儀(根據(jù)Meterial的貼圖,可以是圖片,視頻,另一個相機看到的景象)
另一個相機繪制到RenderTexture,然后projector的材質(zhì)使用RenderTexture即可
5 3D或者2D手電筒的效果就是projector的方向和范圍設(shè)置和手電一致。把電筒的光顏色投出去即可。
以上是“Unity3D中Projector怎么用”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關(guān)知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!