unity 投影5.1.1,为什么projector不显示投影

【Unity Shader】结合Projector和Rendertexture实现实时阴影
【Unity Shader】结合Projector和Rendertexture实现实时阴影
之前已在简书上发过,这里重新整理了一下,并附上实现代码。
我的热门文章
即使是一小步也想与你分享Unity3D实时阴影-Projector投影器
要在Android端做一个类似投影寻真的Demo,做一个用手电筒动态投影,但是使用Unity3D的Spotlight,各种调试参数,将PlayerSetting的Rendering
path设为Deferred Lighting,并将Camera的Rendering path设为Deferred
Lighting,在pc端能实现Spotlint的投影效果,但是移植到移动端就白瞎了,折腾了好久,使用投影器Projector实现了自己想要的效果,不废话,走起。
1、导入Projector包;
2、给投影目标物体添加一个Camera,让Camera的视觉角度和物体在一条直线上,Camera的视觉方向就是物体的投影方向(因为最后要把Camera的RenderTarget投影到墙上),并将Camera渲染剔除,只让Camera捕获目标物体;
3、创建一个空的OBJ,即:Create
Empty,然后给他添加Projector组件,让其投影方向指向要生成投影的地方;
4、创建一个RenderTexture(MyCameraRender),赋给Camera的TargetT
5、创建一个Material(MyMaterial),把步骤4中的MyCameraRender赋给MyMaterial;
6、选中步骤3中的Projector,将步骤5中的MyMaterial赋给Projector的Material属性,最后将Projector的Shader改为Projector包中自带的Light或Multiply(Shader)即可。
如此,动态投影大功告成!
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。unity&投影&Projector&在人物影子上的例子
一般情况下,假如,没有高低起伏,
人物的阴影,可以用一张图片,来模拟,
这种方式,非常方便,而且,效果也可以。
这种阴影,实际上,是用一个 Plane,模拟影子,
实际上,算是假的影子,因为是 用 Plane模拟的,
所以,如果遇到路面高低不平,或者脚下有凹陷凸起,就穿帮了。
可以用 Projector来实现影子的模拟,好处就是,
路面高低不平,也不会穿帮。
Projector跟现实中的一种儿童玩具很像,
这种玩具,一般,在晚上效果更好一点,将一个图像,投影在墙上。
在unity中,跟这个很像,
就像是把一把玩具枪,放到了人物的头顶,
这里,有一个地方,可能容易误解,
那就是,跟下面的人物,实际上,没什么关系,
下面人物的高矮胖瘦,都不会影响Projector ,
真正将投影出来的图像,显示出来的,是地面,当然也可以是其他物品。
现实生活中,我们拿着这个玩具,往前或者往后,图像就会变大变小,
这里,是一个道理。
这里,我们故意的,不让其投射出来的影响,反应在 人物上面,
我们故意加了一个层,让其 不对这个层起作用
如果不加这个层,
那么,人物的效果可能就变成了这样,
最后,给出Shader的源码,
和在游戏中的效果
Shader "Custom/jarodShadowTest" {
Properties{
& _ShadowTex("Cookie", 2D) = "gray" {}
& _FalloffTex("FallOff", 2D) = "white" {}
& Subshader{
& Tags{ "Queue" = "Transparent" }
& ZWrite Off
& ColorMask RGB
& //Blend DstColor Zero
& Blend SrcAlpha OneMinusSrcAlpha
& Offset -1, -1
& CGPROGRAM
& #pragma vertex vert
& #pragma fragment frag
& #pragma multi_compile_fog
& #include "UnityCG.cginc"
& struct v2f {
& & & float4
uvShadow : TEXCOORD0;
& & & float4
uvFalloff : TEXCOORD1;
UNITY_FOG_COORDS(2)
& & & float4 pos
: SV_POSITION;
& float4x4 _P
& float4x4 _ProjectorC
& v2f vert(float4 vertex : POSITION)
& & & o.pos =
mul(UNITY_MATRIX_MVP, vertex);
& & & o.uvShadow
= mul(_Projector, vertex);
o.uvFalloff = mul(_ProjectorClip, vertex);
UNITY_TRANSFER_FOG(o,o.pos);
& & & return
& sampler2D _ShadowT
& sampler2D _FalloffT
& fixed4 frag(v2f i) : SV_Target
& & & fixed4
texS = tex2Dproj(_ShadowTex, UNITY_PROJ_COORD(i.uvShadow));
& & & //texS.a =
1.0-texS.a;
& & & //fixed4
texF = tex2Dproj(_FalloffTex, UNITY_PROJ_COORD(i.uvFalloff));
//lerp(fixed4(1, 1, 1, 0), texS, texF.a);
& & & fixed4 res
UNITY_APPLY_FOG_COLOR(i.fogCoord, res, fixed4(1,1,1,1));
& & & return
已投稿到:}

我要回帖

更多关于 unity 投影 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信