首页 常见问题 Unity3D中Projector怎么用

Unity3D中Projector怎么用

Mar 01, 2024 am 09:32 AM
unity3d projector

使用方法: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旋转即可。

着色器“自定义/圆形”{
 属性{
    _ShadowTex(“Cookie”,2D)=“灰色”{ TexGen ObjectLinear }
 }
 Subshader {
    标签 { "RenderType"="Transparent-1" }
    通过 {
       Z写掉
       雾 { 颜色 (1, 1, 1) }
       AlphaTest 更大 0
       ColorMask RGB
       混合 DstColor 零
       SetTexture [_ShadowTex] {
          组合纹理,纹理
          矩阵 [_投影仪]
       }
    }
 }
}

或者用顶点&片段

着色器 "自定义/圆形" {
 属性 {
   _ShadowTex ("Cookie", 2D) "" }
 }
 子着色器{
    pass {
       Z写
       混合DstColor 一个
      CGPROGRAM
       #pragma vertex vert
       #pragma fragment frag
       #include "UnityCG.cginc"

       sampler2D _ShadowTex;
       float4x4 _投影仪;

       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);
           返回o;
       }
       float4 frag(v2f i):COLOR
       {
           float4 c=tex2Dproj(_ShadowTex,i.texc);
           return c;
       }
       ENDCG
   }//endpass
 }
}

例1: 普通圆点阴影(blob shadow)

加在角色下面,记得把角色的layer加进 projector设置下的'Ignore Layer'即可。

Unity3D中Projector怎么用

Shader "Projector/Multiply" {
 Properties {
    _ShadowTex ("Cookie", 2D) = "gray" { TexGen ObjectLinear }
    _FalloffTex ("FallOff", 2D) = "white" { TexGen ObjectLinear  }
 }

 子着色器 {
    标签 { "RenderType"="Transparent-1" }
    传递 {
       Z注销
       雾 { 颜色 (1, 1, 1) }
       AlphaTest 大于 0
       ColorMask RGB
       混合 DstColor 零
      偏移量 -1, -1
       SetTexture [_ShadowTex] {
          组合纹理,合一纹理
          矩阵 [_投影仪]
       }
       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

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)