unity怎样让unity 透明贴图 阴影的物体投射阴影

unity3d中,阴影如何设置?_unity3d吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:61,031贴子:
unity3d中,阴影如何设置?收藏
unity3d中,camera离物体近的时候阴影能显示,一旦离开一定的距离阴影就看不见了,请问如何调试阴影可视距离?还有阴影的边缘化如何处理的更好看一些?
unity3d,学习专业的游戏引擎-unity3d.达内游戏主程培训,一般要4-16周,就可掌握.变高端游戏达人-薪资翻番.unity3d费用根据培训课时定,上海官方咨询-unity3d.
阴影可视距离我倒真不知道。。。请无视免费版的用户。。。。不过阴影的边缘化你可以用LightMapping来处理。。会让阴影边缘变得自然一点。。。(这个免费版里也有~~~液~)
那就烘焙一下,就可以永久看到阴影了。
Edit/Project Setting /QualitySetting/ Shadows/ShadowDistance 把ShadowDistance 这个设置大些ShadowDistance
灯光选择soft shadows
登录百度帐号推荐应用
为兴趣而生,贴吧更懂你。或经检测你所在的网络可能存在爬虫,因资源限制,我们只能拒绝你的请求。
如果你是推酷的用户,可以以继续访问使用。
如有疑问,可将IP信息发送到
请求解封。结合Projector和Rendertexture实现实时阴影及软阴影效果 - 简书
<div class="fixed-btn note-fixed-download" data-toggle="popover" data-placement="left" data-html="true" data-trigger="hover" data-content=''>
写了2675字,被10人关注,获得了6个喜欢
结合Projector和Rendertexture实现实时阴影及软阴影效果
说到实时阴影的实现,一般比较容易想到使用ShadowMap,通过投射灯光空间的深度图,并在投射物体上进行深度比较,判断是否处于阴影的范围,以此来渲染阴影。深度图投射到接受阴影的物体上的效果如图所示:
深度图投射
你所需要做的就是在灯光空间渲染一张深度纹理,并投射到接受阴影的物体上,并和接受阴影的物体上对应像素位置的深度(灯光空间)进行比较,来确定当前像素是否处于阴影即可,此外还要考虑深度图的精度以及以此会造成的ZFighting等,当然这并不是本文讨论的重点。本文主要介绍一种直接投射灯光空间摄像机的Rendertexture来实现阴影的方法,并将在稍后将其和projector结合。当然同时熟悉这两项技术的开发者应该已经清楚,使用projector实现阴影意味着你将会消耗额外的drawcall,实际上被投射projector并且未在shader中使用"IgnoreProjector"="true"的物体都会在自身shader渲染完(也可能是渲染前,具体看自身渲染队列和projector的shader的渲染队列的先后顺序)后再次使用projector的shader渲染一次。首先比较一下这种技术和shadowmap技术,实际上个人感觉很大程度上两者的技术其实差不多,都需要用到屏幕投影,只不过shadowmap投射的是深度图(深度缓冲),而本文介绍的是直接投射屏幕纹理(帧缓冲),因此投射的纹理是带Alpha通道的,
注意灯光空间的摄像机背景颜色的Alpha因为0,否则会把背景色也投射到接受阴影的物体上
和shadowmap不同的是,灯光空间的摄像机应该只看到投射阴影的物体:
此时投射后的效果大致如图所示:
当然使用这种方式投射rendertexture必然造成的一个问题是,由于没有投射接受阴影的平面,导致一旦投射阴影的物体穿透接受阴影的物体时会造成阴影的穿帮:
阴影投射物体穿透阴影接受物体
接受阴影物体Shader主要实现代码:
其中viewMatrix为灯光空间摄像机的worldToCameraMatrix,projMatrix为灯光空间摄像机的投影矩阵。当然使用这种方式实现阴影的不足之处在于需要明确的知道投射阴影的物体和接受阴影的物体。接下来将尝试将其与Projector结合,注意之前已经讨论过,使用projector意味着额外的drawcall,尤其是场景中物件很多且全部都是分离的物体时,不建议使用这种方式。当然如果场景中只有极少部分物体需要接受阴影,比如只有主要地形,则不妨可以尝试使用这种方式,因为使用projector,你可以很方便的在shader中加入IgnoreProjector标签来忽略投影机的作用,或者直接在projector上修改projector影响的层。从unity标准资源包中的projector shader我们大致可以了解,projector shader中需要两个4阶矩阵,分别为_Projector和_ProjectorClip,其中后者主要用于近远裁面的淡入淡出,并不是必须的。而前者的_Projector,注意这个矩阵应该区别于摄像机的projection矩阵(尽管摄像机和projector在很多参数上很相似),原因是官方的projector shader中直接通过:o.uvShadow = mul (_Projector, vertex);计算得到投影纹理坐标,这意味着_Projector矩阵应该同时实现将vertex转换到世界空间,再转换到projector的局部空间,最后转换到projector的投影空间的功能,所以其性质应该类似UNITY_MATRIX_MVP矩阵,所以使用projector实现投射rendertexture的效果,只需要添加一个脚本,其会创建一个摄像机,并使用projector的参数,并将这个摄像机的rendertexture传递给projector的material,具体实现如下:
其中_FadeTex是一张表示阴影衰减的贴图,其r、g通道效果如下:
这是实现后的阴影效果:
这里由于使用的RT是原始摄像机尺寸的1/2所以阴影质量有所下降
另外由于投射的是带Alpha通道的Rendertexture,意味着可以方便的对其使用模糊shader完成模糊效果,这里是我自己编写的模糊脚本效果图:
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
被以下专题收入,发现更多相似内容:
欢迎进入Unity的3D世界,本专题做为Unity技术开发者的交流与分享平台,欢迎各界人事投稿。
加入Unity3D的开发技术交...
· 119人关注
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
选择支付方式:阅读:10733回复:196
使用Vuforia在Unity3d实现阴影效果
发布于: 00:18
先上效果图:
500 || this.offsetHeight>500){if(this.offsetWidth/500 > this.offsetHeight/500){this.width=500;}else{this.height=500;}}" style="max-width:500max-height:500" title="点击查看原图" onclick="if(this.parentNode.tagName!='A') window.open('/attachment/1509/thread/21_2_e2c.png');" />500 || this.offsetHeight>500){if(this.offsetWidth/500 > this.offsetHeight/500){this.width=500;}else{this.height=500;}}" style="max-width:500max-height:500" title="点击查看原图" onclick="if(this.parentNode.tagName!='A') window.open('/attachment/1509/thread/21_2_7bed56ed197da9f.png');" />500 || this.offsetHeight>500){if(this.offsetWidth/500 > this.offsetHeight/500){this.width=500;}else{this.height=500;}}" style="max-width:500max-height:500" title="点击查看原图" onclick="if(this.parentNode.tagName!='A') window.open('/attachment/1509/thread/21_2_16d49c66c10bcdc.png');" />
再上源码:
链接: 密码:本部分内容设定了隐藏,需要回复后才能看到
以下内容摘自:
1. (我的demo使用Unity4.6.4f1)
2. (Vuforia 5.0.5 ImageTarget案例)
将上面准备好的 Unity Package 导入到 Unity 中,设置 ARCamera 与 ImageTarget 中得参数。创建一个简单的 Cube 对象。注意不要忘记在 ARCamera 中设置 App License Key。
500 || this.offsetHeight>500){if(this.offsetWidth/500 > this.offsetHeight/500){this.width=500;}else{this.height=500;}}" style="max-width:500max-height:500" onclick="if(this.parentNode.tagName!='A'&&this.width>screen.width-461) window.open(this.src);" />
最后通过编译运行,我们就能看到结果了。
500 || this.offsetHeight>500){if(this.offsetWidth/500 > this.offsetHeight/500){this.width=500;}else{this.height=500;}}" style="max-width:500max-height:500" onclick="if(this.parentNode.tagName!='A'&&this.width>screen.width-461) window.open(this.src);" />
在 Unity 中我们通常给物体添加阴影来增加真实感。
500 || this.offsetHeight>500){if(this.offsetWidth/500 > this.offsetHeight/500){this.width=500;}else{this.height=500;}}" style="max-width:500max-height:500" onclick="if(this.parentNode.tagName!='A'&&this.width>screen.width-461) window.open(this.src);" />
但是我们直接这么做的话会在画面中也看到一个白色的平面。所以我们需要一个透明的平面,但能够接收阴影。为了达到这个目的,我们需要一个自定义的着色器。
Shader &FX/Matte Shadow& {
Properties {
_Color (&Main Color&, Color) = (1,1,1,1)
_MainTex (&Base (RGB) Trans (A)&, 2D) = &white& {}
_Cutoff (&Alpha cutoff&, Range(0,1)) = 0.5
SubShader {
Tags {&Queue&=&AlphaTest& &IgnoreProjector&=&True& &RenderType&=&TransparentCutout&}
Blend Zero SrcColor
#pragma surface surf ShadowOnly alphatest:_Cutoff
struct Input {
float2 uv_MainT
inline fixed4 LightingShadowOnly (SurfaceOutput s, fixed3 lightDir, fixed atten)
c.rgb = s.Albedo*
void surf (Input IN, inout SurfaceOutput o)
fixed4 c = _C
o.Albedo = c.
o.Alpha = 1;
Fallback &Transparent/Cutout/VertexLit&
}
使用 Matte Shadow 制作材质球,再将它拖拽到我们的平面上,就得到了我们期望的效果。注意如果没看到阴影的话,很可能是 Scale 或者 Project Quality 设置的问题。(如果不出现阴影,将scale全部设置为1试试)
500 || this.offsetHeight>500){if(this.offsetWidth/500 > this.offsetHeight/500){this.width=500;}else{this.height=500;}}" style="max-width:500max-height:500" onclick="if(this.parentNode.tagName!='A'&&this.width>screen.width-461) window.open(this.src);" />
从识别对象中浮现
要实现这个效果,我们需要使用 [Depth Shader](/s/1fLnFC)。原理是我们将使用一个透明但看不到内部的盒子将低于物料的物体隐藏起来。
500 || this.offsetHeight>500){if(this.offsetWidth/500 > this.offsetHeight/500){this.width=500;}else{this.height=500;}}" style="max-width:500max-height:500" onclick="if(this.parentNode.tagName!='A'&&this.width>screen.width-461) window.open(this.src);" />
在透明盒子上加上 DepthMask.shader,将 SetRenderQueue.cs 加在需要影藏的物体上。最终我们获得视频中的效果。
500 || this.offsetHeight>500){if(this.offsetWidth/500 > this.offsetHeight/500){this.width=500;}else{this.height=500;}}" style="max-width:500max-height:500" onclick="if(this.parentNode.tagName!='A'&&this.width>screen.width-461) window.open(this.src);" />
最新喜欢:
AR学院(),从这里感触未来!
发布于: 11:02
发布于: 15:42
不错看看先
发布于: 18:11
不错!感谢水哥!小弟前来学习学习
发布于: 18:13
感谢楼主分享!!!!
发布于: 00:46
dfafafasdfasfgfdsg 规范的公司打工
发布于: 11:49
我用的是unity5.1阴影怎么弄也出不来,不知道是不是版本问题
发布于: 10:14
,不知道是不是版本问题
发布于: 10:34
很不错的功能看上去3d效果更加的真实,赞
发布于: 15:25
学习一下 &看看
发布于: 16:31
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
发布于: 16:41
:,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, ??说点啥不好么
AR学院(),从这里感触未来!
发布于: 20:56
发布于: 12:23
:??说点啥不好么 我不这样说。。。你会回复我????
发布于: 12:36
:我不这样说。。。你会回复我???? 哈哈,机智~
AR学院(),从这里感触未来!
您需要登录后才可以回帖,&或者&经检测你所在的网络可能存在爬虫,因资源限制,我们只能拒绝你的请求。
如果你是推酷的用户,可以以继续访问使用。
如有疑问,可将IP信息发送到
请求解封。

我要回帖

更多关于 unity 球投射 的文章

 

随机推荐