unity怎么让unity灯光阴影只渲染人物的阴影

结合Projector和Rendertexture实现实时阴影及软阴影效果 - 简书
结合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完成模糊效果,这里是我自己编写的模糊脚本效果图:扫一扫,访问微社区
后使用快捷导航没有帐号?
签到成功!您今天第{todayrank}个签到,签到排名竞争激烈,记得每天都来签到哦!已连续签到:{constant}天,累计签到:{days}天
当前位置: &
查看: 1471|回复: 6
unity3d灯光怎样只影响一个物体
本帖为抢楼帖,欢迎抢楼!&
61111/1500排名<font color="#FF昨日变化2主题帖子积分
蛮牛粉丝, 积分 1111, 距离下一级还需 389 积分
蛮牛粉丝, 积分 1111, 距离下一级还需 389 积分
在线时间528 小时
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
才可以下载或查看,没有帐号?
本帖最后由 alean 于
11:04 编辑
我一个场景里面就想让灯光只作用于一个物体,像3Dnax那样剔除其他物体,请问怎么实现,,感激不尽,,,如图 图一创建一个平面一个灯光还有一个正方体,,,正方体的层设置为cube,,然后灯光影响如图三,影响cube,但是还是把平面也照上了,求帮忙
(85.02 KB, 下载次数: 0)
11:02 上传
(43.25 KB, 下载次数: 0)
11:02 上传
(132.11 KB, 下载次数: 0)
11:02 上传
每日推荐:
61111/1500排名<font color="#FF昨日变化2主题帖子积分
蛮牛粉丝, 积分 1111, 距离下一级还需 389 积分
蛮牛粉丝, 积分 1111, 距离下一级还需 389 积分
在线时间528 小时
在线等,,,在线等,,,在线等,,,在线等,,,在线等,,,在线等,,,在线等,,,在线等,,,在线等,,,在线等,,,在线等,,,在线等,,,在线等,,,在线等,,,在线等,,,在线等,,,在线等,,,在线等,,,在线等,,,在线等,,,在线等,,,在线等,,,在线等,,,
每日推荐:
5943/1000排名<font color="#FF昨日变化2主题帖子积分
熟悉之中, 积分 943, 距离下一级还需 57 积分
熟悉之中, 积分 943, 距离下一级还需 57 积分
蛮牛币1455
在线时间259 小时
平面的layer是defult& &那你在灯光属性面板里的culling mask&&只勾选保留cube&&其他把选项勾掉。
每日推荐:
7排名<font color="#FF昨日变化主题帖子积分
蛮牛币3866
在线时间781 小时
灯光剔除方式只能排除至多4层。最好的办法还是让不被灯光影响的物体采用unlit系列的shader
每日推荐:
7排名<font color="#FF昨日变化主题帖子积分
蛮牛币4267
在线时间1231 小时
culling mask 设置不同的层啊
每日推荐:
5677/1000排名<font color="#FF昨日变化2主题帖子积分
熟悉之中, 积分 677, 距离下一级还需 323 积分
熟悉之中, 积分 677, 距离下一级还需 323 积分
蛮牛币3559
在线时间180 小时
layer是defult& &那你在灯光属性面板里的culling mask&&只勾选保留cube&&其他把选项勾掉。
每日推荐:
61111/1500排名<font color="#FF昨日变化2主题帖子积分
蛮牛粉丝, 积分 1111, 距离下一级还需 389 积分
蛮牛粉丝, 积分 1111, 距离下一级还需 389 积分
在线时间528 小时
& && & 解决了,谢谢大家
每日推荐:Unity灯光效果及设置详解 _达内Unity3D培训
400-111-8989
Unity灯光效果及设置详解
Unity已经成为游戏程序员中越来越受欢迎的游戏引擎。这是因为Unity直接支持多种平台,如移动、桌面和控制台环境。此外,对于低收入开发者或工作室来说,它是免费使用的。
Unity支持多种技术和组件。一些关键部件是灯光和照明技术。在Unity中,你可以通过模拟复杂的灯光行为或者通过简单的灯光模型来照亮场景。
本教程将重点讲解如何在Unity 5使用照明工程,照明类型和属性,以及如何使用它们来创建丰富的照明效果。
首先,确保你有最新版本的Unity。在本教程中,我们使用的版本5.5.0f3。确保您使用的是最新的Unity版本,否则您可能会在教程中使用物理连接后出现问题。
下一步,下载LightingIn-Starter文件,解压并在Unity中打开项目。Demo场景应该能够自动打开,如果不行,可以从Assets文件夹中打开。
定向和非定向光
在现实世界中,你有两种类型的照明效果:直接和间接照明。直接照明,顾名思义,是直接从光源照射的灯光(灯,太阳或其他)。另一方面,间接照明是来自另一物体的光。
在场景中的Action中你就可以看到直接照明,正如你能注意到的一样,场景中有一个直接光源叫做Directional Light
直接光源主要用于太阳以及月亮等户外光源,他们影响场景中所有物体的表面。他们也是开销最小的图形处理器
你可以在检视面板中选择Directional
Light并查看其属性。你会注意到一些有趣的属性,比如类型,颜色以及敏感度等等。你可以改变颜色和旋转属性并实时查看结果。通过改变这些值,你可以直接改变你的定向光。
这时候,你的3D场景中没有任何的非定向光。你可以通过将球体移动至贴近红色或者绿色的墙来检查,发现球体颜色没有改变,说明场景中没有非定向光。
使用非定向光的方法之一就是使用静态对象。请记住,静态对象的使用可以提高游戏渲染的性能,但也会降低游戏质量,所以你必须在游戏中找到最佳的平衡。
在场景中添加一个方块,将它放置到球体的旁边,并命名为Cube
选中这个Cube,并在细节面板中启用静态属性
当启用静态属性时,Unity将自动为该对象创建一个光照贴图,并应用正确的光照模型。现在你可以将相机移动到Cube并发现非定向光开始起作用了。绿色或者是红色的光现在蔓延到了立方体上。
如果你改变定向光的方向,你会发现Unity将会自动更新光照贴图。
被施加到立方体上的间接照明不适用于球体,因为球体不是静态的。你可以通过使球体静态(检视&静态)来解决这个问题。
这个时候,你可以添加和配置定向以及非定向光到静态对象。然而,3D大多都是由动态对象组成。因此,我们如何将这些效果应用到那些动态对象呢?我们接下来将具体说明
光照探测器
当你的场景中包含非静态的物体,你需要使用特定的照明技术,正确地照亮他们,使他们看起来不像从场景中断开
通过使用光探针及其位置,可以在场景中采样点。每个光探针可以采样特定区域,然后计算该特定区域的照明。这些计算足够快,可用于游戏期间。光探针的使用避免了移动物体的照明和场景中的静态光映射对象之间的连接断开
球体是一个动态物体,因此,与它看起来的相反,它没有被正确地照亮。如果你把定向灯关闭,你会注意到,唯一影响球的照明是环境光。要正确地照亮球体,你需要使用光探测器
要添加光探针,你需要在Component & Rendering & Light Probe
Group下打开。这样会在场景中创建一个光探针组
下一步是将探头放在正确的位置。你现在要将他们放在盒子的每个角落
最好的办法是改变一个视图(单击在场景右上角的立方体)。然后,选择每个光探测节点并将其拖到每个框角
重复上述步骤,直到你在所有的角落中安装了光探头
有些场景需要额外的探针正确地照亮物体。为了添加更多的探针,您可以选择一个探头,然后在检视面板中,单击重复选定按钮。
复制之后,您需要将新节点放置在正确的位置(复制的一个节点将与所选的位置处于同一位置)
如果你仔细查看界面的督察,你会注意到,您还可以添加自定义探针(添加探针),删除探针(删除选定),或选择所有的探针从组(选择所有)。
在运动中观察光探头,选择球体,并为它添加一个刚体(添加组件&刚体)。然后,给对撞机分配一个材质。您可以使用橡胶材料。
现在,把球体放在盒子的顶部并按下播放键,现在你可以看到球体的适当光照了。要观察差异,禁用光照探头,并且再次播放
点光源是游戏中最常见的光源。它们通常用于爆炸和灯泡。因为它们在各个方向发光,所以它们在图形处理器上有一个平均成本。然而,计算阴影时使用点光源更昂贵。
通过选择对象&光&点光源加一点光源。然后,将点光源放在靠近顶部的盒子内。
选择点光源,并查看检视面板中的参数
第一个参数是类型。这里可以设置要使用的光类型。您可以选择点,方向,点,或区域。每个提供了特定的光效果。您可以选择任何选项,并看到结果的实时。然而,对于本教程,您将使用点选项。这将创建一个灯泡效果(光照所有方向相同)。
第二个参数是Baking。您可以将其设置为实时、烘焙或混合。将值作为默认值。范围参数定义光从点光源的中心发射多远。颜色参数定义发出的光的颜色
Intensity定义了光的亮度,并且Bounce Intensity定义了间接光强度倍数。 Shadow
Type定义了阴影属性和阴影类型。你可以设置它 No Shadows, Hard Shadows,或者是Soft
Shadows。记住,电光源的阴影对于引擎来说开销是最大的,所以要小心选择此选项。
如果选择Hard Shadows 或Soft
Shadows,你会看到球体和点光源产生的阴影。当你改变强度值时,阴影也会减轻或加重。该分辨率允许您定义阴影的详细级别。最后, Bias 和Normal
Bias让您在配置偏移时被使用来比较像素位置在光空间与阴影贴图。
cookie是一个可选的参数,它代表一个纹理的alpha通道,用来确定不同位置的光的亮度。因为这是一个点光源,必须使用一个立方体贴图纹理
Draw Halo选项只在光源周围呈现光晕。耀斑定义了一个在光的位置呈现的耀斑的引用。当调试3D场景和可能的瓶颈时,耀斑和Draw
Halo可能是有用的
Mode定义了当渲染器渲染场景时照明是多么重要。更重要的是,渲染将更密集。渲染模式可以设置为自动的,重要的,或不重要的。最后,剔除遮罩用于选择或排除,由点光源影响的对象组。
点光源从特定区域的光源发射光。它们只照亮一个特定区域内的物体,一个由三维圆锥体分隔的区域。基本上,他们的工作就像汽车的前灯。你可以想象,他们是完美的手电筒,汽车大灯,或灯柱。他们在图形处理器中也是开销很大的。
现在让我们把点光变成聚光灯。选择您创建较早的点光源并将其类型更改为聚光灯。下一步,旋转的光线,以便它可以照亮地板的盒子。重命名为聚光灯。
正如你可能已经注意到的,在检视面板中,聚光灯的参数和点光源的参数是很相似的。但是,有一个新的参数叫做Spot Angle
Spot Angle决定光锥度数的角度
无论直接和间接照明,聚光灯工作完全像点光源。你有同样的局限性和优势。因此,在游戏中设置灯光平衡时必须小心。
注意,你可以总是使用阴影和烘烤以平衡外观和性能
区域光是在一个平面的矩形区域的所有方向上发出的光。这个矩形是定义在宽度和高度属性。区域光仅在光贴图烘焙时可用,这意味着它们在运行时不会对对象产生影响。
选择点光源并将其类型更改为区域,并将其名称改为区域光。下一步,把灯放在盒子里,然后在检查员里面改变宽度和高度,以盖住盒子里面的整个区域。
通过查看区域灯光参数,你会发现大多数的参数都类似于以前的,例如,Draw Halo, Flare, Render Mode, 以及Culling
真正的新参数是宽度和高度。两者都用来设置矩形光区的大小。
如果你按播放,你会看到该地区的光是投在其范围内的所有对象的光。矩形的大小由宽度和高度属性决定。光被投射的一侧是平面的法线,与光的正z方向相同。光从矩形的整个表面发射出去。正因为如此,阴影和阴影从受影响的对象往往是比点光源或定向光源要柔和得多。
区域光的照明计算相当处理器密集型,所以它们在运行时不可用,只能被烘烤成光贴图。
这结束教程关于照明Unity 5。你了解了几种照明效果和配置。有了这方面的知识,您现在可以应用几个照明效果到您的游戏或应用程序。
转载自网络 如有侵权请联系我们感谢您的关注
作为一款开放性较强的引擎,Unity虽然没有内置UE4一样全面的材质编辑器,但是可以导入一些方便编辑,如shader(着色器)的第三方插件。下面结合实例介绍一款通用性较强的着色器编辑器Shader Forge。
适当为游戏场景添加光照效果,能够有效增强场景氛围,让玩家体验更佳,今天这篇文为大家分享在Unity中调整光照特效的7个技巧,让整个游戏场景氛围更引人入胜。
感谢大家阅读由unity3d培训机构分享的“Unity Prefab 脚本修改教程”希望对大家有所帮助
Unity引擎编译后的程序是如何运行在iOS和Android上的?不是很系统的了解这里的原理?今天unity3d培训机构到就带我们来看看具体的技术原理解答。
Copyright (C)
All Rights Reserved
选择城市和中心
达内北京亦庄大学生实训基地
达内北京网络营销中心
达内北京会计中心

我要回帖

更多关于 unity 阴影 的文章

 

随机推荐