首頁  >  文章  >  Unity3D中Projector怎麼用

Unity3D中Projector怎麼用

小老鼠
小老鼠原創
2024-03-01 09:32:221270瀏覽

使用方法:1、创建Projector:创建空GameObject,然后从Component处添加Projector组件,也可以Import Package-> Projector,导入Projector包。

Unity3D中Projector怎麼用

Projector原理

Projector能将一个Material投影到所有在设定的平截头体内的物体上。通常包含两张贴图Cookie和Falloff。Cookie就是投影的图案,Falloff的作用主要是根绝距离来决定投影的Alpha即明暗。Falloff左边为白色,alpha值为1,对应投影距离最近时最亮,右边接近全黑,alpha值为0,表示投影距离变远时投影会渐渐接近透明甚至看不见。

Unity3D中Projector怎麼用

【可以实现】

0 角色选择光圈

1 普通圆点阴影(blob shadow)

2 伪动态阴影(Fake Dynamic shadow)

3 光的投影

4 投影仪(根据Meterial的贴图,可以是图片,视频,另一个相机看到的景象)

5 3D或者2D手电筒的效果

使用步骤

一. 创建Projector.

 可以创建空GameObject,然后从Component处添加Projector组件如下图

Unity3D中Projector怎麼用

也可以Import Package-> Projector,导入Projector包。包内容如下

Unity3D中Projector怎麼用

二:注意事项

1.确保Cookie Texture一定要设置为Clamp

2.为了避免projector bleeding, Cookie Texture 开启Border Mipmaps选项, 或者直接禁用Mipmap

Unity3D中Projector怎麼用

3.FallOff

不管是orthographic还是不是。

如果不用FallOff, 投影下来的都是最亮即alpha为1的cookie,并且会向frustrum的正反2个方向投影,造成我们并不想看到的“双重投影”的效果。用系统包带的Falloff贴图的话。投影会随着距离变淡。

【实例演示】

例0:角色脚下的光圈

Unity3D中Projector怎麼用

Unity3D中Projector怎麼用

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 OneBlend 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;   
  
  
 

 

 

 Unity3D中Projector怎麼用 

 


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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn