unity3d 自动寻路算法的预计算是算得什么忙

扫一扫,访问微社区
后使用快捷导航没有帐号?
签到成功!您今天第{todayrank}个签到,签到排名竞争激烈,记得每天都来签到哦!已连续签到:{constant}天,累计签到:{days}天
当前位置: &
查看: 3877|回复: 2
【技术分享】详解Unity 5中的全局光照
本帖为抢楼帖,欢迎抢楼!&
16排名3昨日变化主题帖子积分
蛮牛币3041
在线时间2699 小时
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
才可以下载或查看,没有帐号?
本帖最后由 清风 于
18:22 编辑
  在图形仿真和光照特效方面做了重大改变。自从3.0版本开始,Unity的光照效果一直局限于烘焙好的光照贴图。但后续的时间里,我们在全局光照领域有了很大的提升与改进,现在,是时候将其中部分美好的特性从Unity的沙盒中开放出来了。其中之一的新图形特性就是基于新的和极大改善的光照流程基础上的全局实时光照。这也是本文的重点。
  什么是全局光照?
  GI算法是基于光传输的物理特性的一种模拟。他是一种模拟光在3D场景中各表面之间的传输的有效方式,他会极大的改善你游戏的仿真度。不仅如此,他还可以传达一种意境,如果巧妙的使用,可以有效得改善你的游戏体验。GI算法不仅考虑光源的直射光,而且还考虑场景中其他材质表面的反射光。传统上,在游戏中,由于实时性的约束,间接光照的模拟因性能消耗过大而被弃置一旁。
  这些都是源于下面这个浅显的方程:
1.gif (7.16 KB, 下载次数: 0)
18:12 上传
  这个很简单。从某一观察点看到的光是从场景中物体表面点入射的光(Le)与从观察点上方的半球入射的光的叠加。Li描述的是从半球上某一角度w' 入射的光。反射项p描述的是光线如何反射到观察点,这项的取值依赖于入射角w‘和观察者的角度w。
  细心的读者可能已经发现L(x,w)在方程的两边,而且有一个还在在积分式中。如果不是这种情形,我们也许已经计算出全局光照的结果。由于物理规律是不太可能去修改的,研究协会提出了一套解决方案。
  其中最流行(最古老的)的是光线跟踪算法。这个算法从根本上改善了GI算法,在算法最困难的部分使用了一些比较耗时的技巧。光线跟踪在电影或者电视的CGI上使用了很多。尽管该领域涌现了大量的研究成果,但是一张图像的渲染还是要花费数秒的时间(哪怕使用非常先进的GPU)。
  光线跟踪通常使用的是屏幕空间,所以,一张图像每一帧都需要重新渲染。这意味着,他完全支持完全动态的场景:灯光、材料、几何形状自由变换的动画。这也是一个缺点,因为每当摄像机移动的时候,一张新的图片需要被渲染,而这张新图像的收敛融合需要花费数秒钟的时间。这也导致他无法适用于游戏场景。
  一张没有完全收敛融合的图像会有很多噪点,而且他是时间不相干的,所以,图像在完全收敛融合之前会有严重的闪烁。可以使用滤波来降低这种影响,但是不能彻底消除。下面是一些在不同收敛融合程度的图像。
2.gif (64.78 KB, 下载次数: 0)
18:12 上传
  最近,有了很多新的图像混合的算法,其中大部分都在GPU中运行,例如体椎追踪。这些算法中的大部分需要在具有一定内存大小的台式GPU上运行,他们只适合于高端PC系统。为了让全局光照在更多的平台(包括手机)下运行,这里做出了一些妥协。
  Enlighten介绍:
  Enlighten对于该提供了一套很好的解决方案。通过对问题的约束优化,他适用于各种尺度的终端机,从手机到街机,一直到高端的台式机。他已经被运用于Battlefield4,MoH Warfighter等AAA游戏。他是稳定可靠的。
  他的基本思路是如果一些可见光是预计算的(上面那个GL方程右侧的积分体),那么在移动端实现实时光照就是可行的。
  Enlighten允许的动态更改:
  环境光
  材质属性(漫反射率和表面自发光)
  GI仿真中的几何体部分必须被设置为静态的。但是动态的几何体可以使用GI根据静态几何体生成的光探针进行实时渲染。为了实现这个功能,Enlighten预计算GI实时仿真需要的数据。这个数据存储在一个实时模块中,该模块适用于大部分平台:SX, Windows, Linux, iOS, , PS Vita,PS3, PS4, Windows Phone, Xbox360 and XboxOne。WebGL目前正正在开发中,还不确定何时支持。
  Enlighten输出数据如下:
  实时光照
  实时光探针
  实时立体贴图
  Enlighten受限于GI对于漫反射传输的计算。漫反射是最重要的传输方式,因为他包含了全局光照的信息。由于漫反射是低频的,所以实时光照贴图可以是一张实时更新的低分辨率图像。另外通过增加动态更新的立方贴图来实现镜面/光滑面的反射。在Heckbert notation中,Enlighten使用了光线追踪子集L(D)*(S|G)?E。这意味着Enlighten包含了大部分的GI效果。而缺失的效果中最重要的是镜面反射(俗称散焦),你得用些技巧来达到该效果。
  下面是使用Enlighten,两种不同的光线设置渲染图像的例子。这些光线设置是完全动态的,而且之间的切换时瞬间的。
3.gif (86.52 KB, 下载次数: 38)
18:12 上传
  Viking Village – dawn
  接下来的这个镜头,使用了更加明亮的蓝色天空和更高更强烈的阳光:
4.gif (113.96 KB, 下载次数: 33)
18:12 上传
  Viking Village – sunny day
  下面这个镜头降低了阳光的强度,环境光为灰色且不饱和的。主要为环境光照:
5.gif (77.12 KB, 下载次数: 0)
18:12 上传
  Viking Village - overcast day
  最后是一张日落时分温暖静谧的画面:
6.gif (94.78 KB, 下载次数: 0)
18:12 上传
  Viking Village – sunset
  使用这种技术,可以赋予你游戏非常逼真的时间周期。
  Enlighten预计算
  场景中的大部分几何体都必须是静态的,实际上,这些大尺寸的几何体都会参与到GI的计算。在预计算阶段,Enlighten会自动将场景分解为数个子系统。去影响如何生成这些子系统是有可能的。这些系统被用于预计算大量的并行管道。管道之间是深相关的,并解决每一个系统的任务。这里有一个例子用于阐述Viking村落时如何被自动分解成多个子系统。
7.gif (63.44 KB, 下载次数: 26)
18:12 上传
  自动生成的Enlighten系统的编辑可视化
  在预计算完成后,系统之间的相互关系就确定了。这可用于在运行时部分减少对于静态几何体的限制。在运行时,在不同系统之间传输的间接光总量是可以控制的。这可以让你在系统切换之间实现淡入淡出,可以用于实现拆除或者打开们的效果。
  Enlighten运行时:
  Enlighten可以有效地运行于高端移动设备。他在一个线程中异步执行(或多个,如果平台允许)。移动平台中最突出的是直接光照或动态光照的阴影贴图需要在GPU中计算。所以,移动平台中只允许少量的动态光照。但是实时调整几何物体的自发光属性却是几乎无消耗的。Enlighten将自发光的物体作为可见物体计算。这意味着,自发光物体可以产生很好的阴影而不需要什么性能代价,即使在很低的分辨率配置下。
  得益于GPU对于直接光照和阴影投射的支持,Enlighten可以很好的实现动态光照,无论是在台式机系统还是街机,只要是能支持游戏的系统。
  这里是一个在ARM架构的平板上使用Enlighten的例子。
  关于烘焙:
  对于某些游戏来说选择烘焙可能更合适,所以将来也会很好的支持和发展烘焙流程。Unity5中光照的输入参数有:光源、自发光材质及环境光,你可以选择使用烘焙或者实时GI。选择烘焙的光照和Unity之前版本有同样的参数,它将被烘焙成光照贴图,而动态光照则由Enlighten运行库来处理。烘焙和实时GI可以无缝融合。
  Unity5中也有些新的烘焙特性。其中之一就是光照贴图被分散成组件形式。每个图集都包含5个光照贴图,它们分别是直接光照、间接光照、直接方向光、间接方向光和AO图(环境光吸收)。烘焙完成后,它们组合成光照贴图供游戏使用。在编辑器中可以指定这些图的融合参数。你可以调整这些选项来适配你最终的输出效果。例如,你可以很轻易的增加间接照明,这只需要在重新烘焙之前增加一个合成的工作,当然这个工作会花费你数秒钟的时间。
  光照流程
  Elighten不仅仅提供游戏中的实时GI。其中一个很重要的改进就是,Elighten为设计师们提供了全新的光照流程。当设计师们需要看到更高品质的细节的时候,它提供了更快的迭代模式。它使用迭代取代了完全重新的烘焙。不需要用户的干预,场景会被重新预计算与烘焙的效果替换,而这些预计算与烘焙都是在后台完成的。编辑器会自动检测场景的改动,并且执行所需的步骤来修复光照。大多数情况下,对光照的迭代几乎是瞬间完成的。
  什么类型的游戏需要用到Enlighten?
  之前提过,实时GI的局限性在于大规模的场景设定必须是预先确定的。是追求只适用于高端系统完全动态光照的解决方案,还是覆盖尽量多的场景并且可以在移动平台使用从而拥有更广阔的市场的解决方案,我们只能二选一。在5.0中我们选择了后者。下面是使用实时GI会存在一定困难的游戏类型列表:
  Q:可以实现开门效果吗?
  A:上文探讨过,场景会被自动划分为子系统,所以这取决于你的门,某些情况下是可以的。而另外一些就要借助脚本了。 (相关脚本会在5.x的版本中发布)
  Q:支持销毁吗?
  A:Enlighten支持场景中物体的动态透明。这意味着,游戏中要被销毁的物体需要首先被标注。当然这不是最理想的解决方案,他应该支持更多的功能。(该功能会在5.x中提供)
  Q:我可以通过流或者块加载关卡吗?
  A:当然,子系统可以通过流加载。你可以让你的场景块不包括子系统,然后手动或者通过脚本加载。(该特性会出现在5.0)
  Q:可以使用一些预先做好的模块来代码实现游戏场景吗?
  A:可以的,如果预先计算好模块所在位置的不同组合,你可以实现各模块之间的切换。这个就类似于你制作跑酷时的光照烘焙(无缝)。(这里所需要预计算的API会在5.x中提供)。
  Q:可以完全使用代码实现游戏世界吗,类似Minecraft?
  A:长话短说,不可以。然而,我们也在做很多项目,其中使用了ImaginationTechnologies中PowerVRRay Tracing然而来实现GI预览和混合。这可能是一个备选的方案用来解决由程序或者玩家创建场景的问题。PowerVR Ray Tracing技术支持全动态场景的GI。他不是全实时的,而且开始出现的数帧里可能会有噪点(因未融合收敛),但这是一个非常有前景的方向。在允许一定的延迟的情况下,它非常适用于用户自定义场景的光线渲染。(因项目还在研发阶段,暂时还没有案例)
  哪些是Free版,哪些是Pro版所拥有?
  这些特性在Free版和Pro版中的界限目前还不清晰,我们会在后续的博客中公布。
  5.0中有哪些?
  下面是5.0中的主要功能:
  游戏实时GI组件Enlighten
  迭代流程(服务于实时GI与烘焙)
  反射探针
  5.0后续:
  由于我们正对光照流程和生成做了很多的改动,其中一些因存在一些潜在bug可能会导致5.0的崩溃,后续我们会努力修复。下面这些是在5.x系列周期内会出现的特性:
  实时光照和烘焙光照的PowerVR追踪算法
  控制实时GI子系统间切换的API
  Enlighten实时立方贴图
  GI的实时透明支持
  预计算/烘焙的云/集群计算
开门;unity 光照插件;unity 5 如何让天空盒和室内光统一;unity 全局事件; 光照贴图;unity 投射帖图;英宝通 unity 5;5.0全局光照系统;vr支持的unity特效形式;unity 图像修复;unity5.x 3d 游戏开发技术详解与经典案例 光盘;u3d 5.0光照贴图会出错;详解unity 5 全局光照系统enlighten问题;u3d5.0场景烘培室内;最新 unity5 - 实时全局光照测试;unity3d全局照明;unity5 光照;unity 全局光;unity 5 全局光;unity加光照;unity 4个光照;unity5.2 场景烘焙;unity5.2多场景烘焙;unity5 场景烘焙;unity5不同场景烘焙;unity5.0 ;unity 多分辨率适配;unity5天空;unity5.0 天空;unity5.0天空 在哪;unity5.3 发布ao贴图unity ao贴图;unity5 全局光照;unity5.0全局光照;unity5灯光烘焙;unity5.0灯光烘焙;unity5.2灯光烘焙;unity5.0光照贴图;unity5材质贴;unity 5unity5.0unity 多摄像机叠加;unity5 烘焙参数;unity5.3 灯光效果;unity5配置;unity5.0 配置;unity5.3unity5.0灯光渲染;unity powervr ray tracing
本帖被以下淘专辑推荐:
& |主题: 220, 订阅: 9
& |主题: 7, 订阅: 0
每日推荐:
跟我念“站长妹纸萌萌哒!”我说站长,你说YO!爱你们么么哒~
5615/1000排名<font color="#FF昨日变化2主题帖子积分
熟悉之中, 积分 615, 距离下一级还需 385 积分
熟悉之中, 积分 615, 距离下一级还需 385 积分
在线时间104 小时
不错哦!不错哦!不错哦!
每日推荐:
9排名<font color="#FF昨日变化1主题帖子积分
蛮牛币5952
在线时间656 小时
一遇CE化成灰
每日推荐:
社区QQ达人
使用QQ帐号登录论坛的用户
连续签到30天
原创精华达人
原创精华帖子总数量 ≥ 100
突出贡献奖
宣传论坛,介绍更多的朋友加入≥50人
累积数量达到100000蛮牛币
游戏蛮牛QQ群会员
加入游戏蛮牛官方QQ群
在“新人报到 ”版块发过自己的照片
购买游戏蛮牛书籍
游戏蛮牛给予质量较高、影响力较大的unity相关技术开发者的荣誉称号Unity预计算全局光照的学习(速度优化,LightProbe,LPPV)
时间: 23:40:20
&&&& 阅读:120
&&&& 评论:
&&&& 收藏:0
标签:&&&&&&&&&&&&&&&&&&&&&&&&&&&&
1.基本参数与使用
1.1 常规介绍
使用预计算光照需要在Window/Lighting面板下找到预计算光照选项,保持勾选预计算光照并保证场景中有一个光照静态的物体
此时在编辑器内构建后,预计算光照开始生效。
相关的文章有很多,unity官方有一系列文章不错:
在Lighting面板的Scene页签下可以设置全局光照的整体参数,这个是叠加在基本值上的属性
并且你也可以设置统一的光照参数LightmapParameters。这里不多说了
唯一需要注意是分辨率设置
在1单位=1米的情况下,室内场景是2-3,室外场景是0.5-1。
texels是PRGI里的单位,具体unity这篇文章有讲解:
在Lighting面板的Object页签下,可以对单独对象设置光照属性,这个比较重要
这里说一下光照参数:
Scale In Lightmap - 由于预计算光照使用的不是Lightmap,所以这个选项在PRGI中似乎是无效的(测了下,似乎是)
Important GI - 用于标识是否是重要物体,对于自发光物体可以增加它的亮度,确保一些物体可以被其照亮。(Make all other objects dependent upon this object.Useful for objects that will be strongly emissive to make sure that other objects will be illuminated by)
Advanced Parameters - 对光照进行单独的高级设置,会链接到LightmapParameters文件.一会单独说
Preserve UVs - 勾选后可以保持原有UV,不够选uv则会受到改变。
但需要注意自动UV只有在一些特殊情况下才会改变原有uv的形态,如果原有uv本身没有问题,还会保持原状
Ignore Normals - 和手动配置的uv有关,如果出现一些错误情况可以勾选该选项重新烘培。(Do not compare normals when detecting charts for realtime gi.
this can be necessary when using hand authored uvs to avoid unnecessary chart splits.)
Min Chart Size - 有两个选项,2和4,4(Stitchable)是默认状态,如果为了速度可以选择2(Minimumu),但会有效果缺失。
1.2 LightmapParameters
使用LightmapParameters可以将光照参数对单个对象进行单独覆写
创建一个LightmapParameters在Assets-&Create-&Lightmap Parameters
然后在Lighting的Object页签下选择相应的LightmapParameters进行设置
来看一下LightmapParameters
这里只看预计算GI的相关选项
Resolution
Realtime lightmap resolution in texels per world unit.this value is multiplied by the realtime resolution in thelighting window to give the output lightmap resolution.this should generally be an order of magnitude less than what iscommon for baked lightmaps to keep the precompute timemanageable and the performance at runtime acceptable.Note that if this is made more fine-grained,then the irradiance budget will often need to be increased too,to fully take advantage of this increased detail.
这个分辨率是每世界单位的texels值,他乘以原始分辨率的值,如上图的测试,值越高则分辨率越高
注意如果需要更多的粒度,irradiance辐照度也需要适当增加才行。
经过实际测试,这个值是数值越大越精确,烘培速度也越慢
并且这个参数也其他的参数是互相影响的,这相当于一个整体调节吧。
Cluster Resolution
the ratio between the resolution of the clusters with which light bounce is calculated and the resolution of the output lightmaps that sample from these.
可以叫做光照集群,或者丛集?
具体看unity这篇文章
具体大意是,每一个Cluster块都是储存光照信息的具体单元,通过这些单元所存放信息的插值,得到最终效果
所以Cluster块越大越不精确,速度也就越快,反之精确度也就越高。
这个应该和Resolution一样,是乘以的这个值,也是值越大越精确
Irradiance Budget
The amount of data used by each texel in the output lightmap.specifies how fine-grained a view of the scene an output texel has. small values mean more averaged out lighting,since the light contributions from more clusters are treated as one.affects runtime memory usage and to a lesseer degree runtime cpu usage
辐照度预算,会被应用到texel当中,小的值可以得到更平均的光照,并且这个值会影响到运行时内存的占用和cpu占用
在Lighting Optimisation Tutorial这个demo当中,该值被设置的非常低。
Irradiance Quality
the number of rays to cast to compute which clusters affect a given output lightmap texel - the granularity of how this is saved is defined by the irradiance budget. affects the speed of the precomputation but has no influence on runtime performance.
辐照度品质,这个值只影响预计算光照的构建速度,对于运行时并无影响。
Backface Tolerance
the percentage of rays shot from an output texel that must hit front faces to be considered usable.allows a texel it hit back faces(the texel is inside some geometry). in that case artfacts are avoided by cloning valid values from surrounding texels.for example,if backface tolerance is 0.0,the texel is rejected only if it sees nothing but backfaces. if it is 1.0, the ray origin is rejected if it has even one ray that hits a backface.
背面容差,允许射线穿过一些多边形的内部采样到背面,对于遮蔽处,给遮蔽物提高这个值可以得到更明亮的效果。
Modeling Tolerance
Maximum size of gaps that can be ignored for gi
模型容差,最大尺寸的间距能被GI忽略掉
这个值不能设置为0,不然会出错,理论上值越小越不会被GI忽略,最终效果也就越好
这个值在光照不充足的情况下表现的尤为明显,下面就因为这个参数太高而导致‘坏面‘问题:
Edge Stitching
If enabled,ensures hat uv charts(aka uv island) in the generated lighmaps blend together where they meet so there is no visible seam between them.
边缝合。开启后UV接缝会变得不明显,如果想要故意留有接缝效果就关闭它
Is Transparent
If enabled,the object appears transparent during GlobalIllumination lighting calculations.Backfaces are not contributing to and light travels through the surface.This is useful for emissive invible surfaces.
&这个参数好像只对自发光的物体有效,当勾选这个值这个物体会被当作透明的。自发光会穿透它。默认是不勾选。
System Tag
System are groups of objects whose lightmaps are in the same atlas.it is also the granularity at which dependencies are calculated.multiple systems are created automatically if the scene is big enough,but it can be helpful to be able to split them up manually for e.g. streaming in sections of a level. the system tag lets you force an object into a different realtime systrem even though all the other parameters are the same.
这个似乎是图集ID,一般不需要设置。(我个人觉得,如果设置到一个全新的ID上,似乎可以解决某些UV问题)。&
2.光照深入
官方有3个demo演示了unity5光照系统。
The Courtyard&
Corridor Lighting Example&
Lighting Optimisation Tutorial&
前两个demo可以看作是光照参数的使用演示,第三个是真正指导如何对烘培速度进行优化
2.1 光照优化
以unity5.4版本为例,有两个查看GI的重要指标
一个叫做UV Charts()
一个叫做Clustering()
他们分别是不同的网格,在构建预计算光照的时候你可以看见构建中的这些信息。
UV Charts是光照uv自身的大小,包括Albedo,Emissive,Irradiance...之类的通道,都依据这个的大小
而Clustering可以翻译成丛集,这里面每一块包含了一些该区域的光照信息,最后通过这些块与块进行插值,得到具体的光照。
在修改参数的同时,不断的比对这两个通道,才能找到问题。一般远处不可接近的物体分辨率会设置的低一些
在Lighting Optimisation Tutorial这个案例中,unity对远山近处的房屋等用了不同的光照配置
经过优化,将7.5个小时的构建时间变为了2.25分钟
这篇文章翻译版的链接:
2.2&Light Probe Group
光照探头其实算不上新功能,但不管是烘培光照还是预计算光照都需要它
过于平均分布的光照探头是不科学的,实际上应该在光源变化较多的地方放置多的光照探头
在光照平均的地方放置比较少的探头。
选中光照探头,点击编辑图标即进入编辑模式
选中光照点,按Ctrl+D复制,拖拽,即可操作光照探头
虽然unity不支持动态的自发光物体,但通过光照探头烘培保存的信息,动态的物体也可以受到自发光物体的影响
(可以在延迟渲染下尝试自定义光照外形,Adam的demo中就自定义了两种光照)
你也可以在场景中设置多组光照探头,以方便编辑,最后他们都会生效
另外如果需要进一步提升光照构建速度,可以对橡木桶,石块之类的物件设置为非光照静态物体
用光照探头来处理其光照,这样可减少光照图的数量,加快预计算时间。
2.3 LPPV - Light Prober Proxy Volume
这是unity5.4新加入的功能,对于大的物体和粒子对象,应当考虑使用LPPV
unity关于LPPV的文章:
LPPV必须在有光照探头的情况下放置
这里演示如何给粒子添加LPPV
1.首先保证场景中分布有光照探头
2.粒子需要使用自定义shader,并且通过ShadeSHPerPixel拿到一些特殊光照信息
具体看那篇unity的文章,这里列出关键部分
fixed4 frag(v2f i) : SV_Target
half3 currentAmbient = half3(<span style="color: #, <span style="color: #, <span style="color: #);
half3 ambient = ShadeSHPerPixel(i.worldNormal, currentAmbient, i.worldPos);
fixed4 col = _TintColor * i.color * tex2D(_MainTex, i.texcoord);
UNITY_APPLY_FOG_COLOR(i.fogCoord, col, fixed4(<span style="color: #,<span style="color: #,<span style="color: #,<span style="color: #)); // fog towards black due to our blend mode
然后配置好粒子,并为其指定LPPV,然后设置好采样密度信息
总之PRGI还有许多局限性,比如巫师3那样的实时天气。
但对于较为静态的场景,通过配置好参数所达到的效果还是不错的,相信unity未来也会不断完善这套系统
&标签:&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&国之画&&&& &&&&chrome插件&&
版权所有 京ICP备号-2
迷上了代码!1.基本参数与使用
1.1 常规介绍
使用预计算光照需要在Window/Lighting面板下找到预计算光照选项,保持勾选预计算光照并保证场景中有一个光照静态的物体
此时在编辑器内构建后,预计算光照开始生效。
相关的文章有很多,unity官方有一系列文章不错:
/cn/learn/tutorials/topics/graphics/introduction-precomputed-realtime-gi
在Lighting面板的Scene页签下可以设置全局光照的整体参数,这个是叠加在基本&#20540;上的属性
并且你也可以设置统一的光照参数LightmapParameters。这里不多说了
唯一需要注意是分辨率设置
在1单位=1米的情况下,室内场景是2-3,室外场景是0.5-1。
texels是PRGI里的单位,具体unity这篇文章有讲解:/cn/learn/tutorials/topics/graphics/understanding-charts?playlist=17102
在Lighting面板的Object页签下,可以对单独对象设置光照属性,这个比较重要
这里说一下光照参数:
Scale In Lightmap - 由于预计算光照使用的不是Lightmap,所以这个选项在PRGI中&#20284;乎是无效的(测了下,&#20284;乎是)
Important GI - 用于标识是否是重要物体,对于自发光物体可以增加它的亮度,确保一些物体可以被其照亮。(Make all other objects dependent upon this object.Useful for objects that will be strongly emissive to make sure that other objects will be illuminated by)
Advanced Parameters - 对光照进行单独的高级设置,会链接到LightmapParameters文件.一会单独说
Preserve UVs - 勾选后可以保持原有UV,不够选uv则会受到改变。
但需要注意自动UV只有在一些特殊情况下才会改变原有uv的形态,如果原有uv本身没有问题,还会保持原状
Ignore Normals - 和手动配置的uv有关,如果出现一些错误情况可以勾选该选项重新烘培。(Do not compare normals when detecting charts for realtime gi.
this can be necessary when using hand authored uvs to avoid unnecessary chart splits.)
Min Chart Size - 有两个选项,2和4,4(Stitchable)是默认状态,如果为了速度可以选择2(Minimumu),但会有效果缺失。
1.2 LightmapParameters
使用LightmapParameters可以将光照参数对单个对象进行单独覆写
创建一个LightmapParameters在Assets-&Create-&Lightmap Parameters
然后在Lighting的Object页签下选择相应的LightmapParameters进行设置
来看一下LightmapParameters
这里只看预计算GI的相关选项
Resolution
Realtime lightmap resolution in texels per world unit.this value is multiplied by the realtime resolution in the
lighting window to give the output lightmap resolution.this should generally be an order of magnitude less than what is
common for baked lightmaps to keep the precompute timemanageable and the performance at runtime acceptable.
Note that if this is made more fine-grained,then the irradiance budget will often need to be increased too,
to fully take advantage of this increased detail.
这个分辨率是每世界单位的texels&#20540;,他乘以原始分辨率的&#20540;,如上图的测试,&#20540;越高则分辨率越高
注意如果需要更多的粒度,irradiance辐照度也需要适当增加才行。
经过实际测试,这个&#20540;是数&#20540;越大越精确,烘培速度也越慢
并且这个参数也其他的参数是互相影响的,这相当于一个整体调节吧。
Cluster Resolution
the ratio between the resolution of the clusters with which light bounce is calculated and the resolution of the output lightmaps that sample from these.
可以叫做光照集群,或者丛集?
具体看unity这篇文章
/cn/learn/tutorials/topics/graphics/understanding-clusters
具体大意是,每一个Cluster块都是储存光照信息的具体单元,通过这些单元所存放信息的插&#20540;,得到最终效果
所以Cluster块越大越不精确,速度也就越快,反之精确度也就越高。
这个应该和Resolution一样,是乘以的这个&#20540;,也是&#20540;越大越精确
Irradiance Budget
The amount of data used by each texel in the output lightmap.specifies how fine-grained a view of the scene an output texel has. small values mean more averaged out lighting,since the light contributions from more clusters are treated as one.affects runtime
memory usage and to a lesseer degree runtime cpu usage
辐照度预算,会被应用到texel当中,小的&#20540;可以得到更平均的光照,并且这个&#20540;会影响到运行时内存的占用和cpu占用
在Lighting Optimisation Tutorial这个demo当中,该&#20540;被设置的非常低。
Irradiance Quality
the number of rays to cast to compute which clusters affect a given output lightmap texel - the granularity of how this is saved is defined by the irradiance budget. affects the speed of the precomputation
but has no influence on runtime performance.
辐照度品质,这个&#20540;只影响预计算光照的构建速度,对于运行时并无影响。
Backface Tolerance
the percentage of rays shot from an output texel that must hit front faces to be considered usable.
allows a texel it hit back faces(the texel is inside some geometry). in that case artfacts are avoided by cloning valid values from surrounding texels.for example,if backface tolerance is 0.0,the texel is rejected only if it sees nothing but backfaces. if it
is 1.0, the ray origin is rejected if it has even one ray that hits a backface.
背面容差,允许射线穿过一些多边形的内部采样到背面,对于遮蔽处,给遮蔽物提高这个&#20540;可以得到更明亮的效果。
Modeling Tolerance
Maximum size of gaps that can be ignored for gi
模型容差,最大尺寸的间距能被GI忽略掉
这个&#20540;不能设置为0,不然会出错,理论上&#20540;越小越不会被GI忽略,最终效果也就越好
这个&#20540;在光照不充足的情况下表现的尤为明显,下面就因为这个参数太高而导致'坏面'问题:
Edge Stitching
If enabled,ensures hat uv charts(aka uv island) in the generated lighmaps blend together where they meet so there is no visible seam between them.
边缝合。开启后UV接缝会变得不明显,如果想要故意留有接缝效果就关闭它
Is Transparent
If enabled,the object appears transparent during GlobalIllumination lighting calculations.Backfaces are not contributing to and light travels through the surface.This is useful for emissive invible surfaces.
&这个参数好像只对自发光的物体有效,当勾选这个&#20540;这个物体会被当作透明的。自发光会穿透它。默认是不勾选。
System Tag
System are groups of objects whose lightmaps are in the same atlas.it is also the granularity at which dependencies are calculated.multiple systems are created automatically if the scene is big enough,but it can be helpful to be able to split them up manually
for e.g. streaming in sections of a level. the system tag lets you force an object into a different realtime systrem even though all the other parameters are the same.
这个&#20284;乎是图集ID,一般不需要设置。(我个人觉得,如果设置到一个全新的ID上,&#20284;乎可以解决某些UV问题)。&
2.光照深入
官方有3个demo演示了unity5光照系统。
The Courtyard&https://www./en/#!/content/49377
Corridor Lighting Example&https://www./en/#!/content/33630
Lighting Optimisation Tutorial&https://www./en/#!/content/73563
前两个demo可以看作是光照参数的使用演示,第三个是真正指导如何对烘培速度进行优化
2.1 光照优化
以unity5.4版本为例,有两个查看GI的重要指标
一个叫做UV Charts(/cn/learn/tutorials/topics/graphics/understanding-charts)
一个叫做Clustering(/cn/learn/tutorials/topics/graphics/understanding-clusters)
他们分别是不同的网&#26684;,在构建预计算光照的时候你可以看见构建中的这些信息。
UV Charts是光照uv自身的大小,包括Albedo,Emissive,Irradiance...之类的通道,都依据这个的大小
而Clustering可以翻译成丛集,这里面每一块包含了一些该区域的光照信息,最后通过这些块与块进行插&#20540;,得到具体的光照。
在修改参数的同时,不断的比对这两个通道,才能找到问题。一般远处不可接近的物体分辨率会设置的低一些
在Lighting Optimisation Tutorial这个案例中,unity对远山近处的房屋等用了不同的光照配置
经过优化,将7.5个小时的构建时间变为了2.25分钟
这篇文章翻译版的链接:http://forum./thread-.html
2.2&Light Probe Group
光照探头其实算不上新功能,但不管是烘培光照还是预计算光照都需要它
过于平均分布的光照探头是不科学的,实际上应该在光源变化较多的地方放置多的光照探头
在光照平均的地方放置比较少的探头。
选中光照探头,点击编辑图标即进入编辑模式
选中光照点,按Ctrl&#43;D复制,拖拽,即可操作光照探头
虽然unity不支持动态的自发光物体,但通过光照探头烘培保存的信息,动态的物体也可以受到自发光物体的影响
(可以在延迟渲染下尝试自定义光照外形,Adam的demo中就自定义了两种光照)
你也可以在场景中设置多组光照探头,以方便编辑,最后他们都会生效
另外如果需要进一步提升光照构建速度,可以对橡木桶,石块之类的物件设置为非光照静态物体
用光照探头来处理其光照,这样可减少光照图的数量,加快预计算时间。
2.3 LPPV - Light Prober Proxy Volume
这是unity5.4新加入的功能,对于大的物体和粒子对象,应当考虑使用LPPV
unity关于LPPV的文章:/cn//light-probe-proxy-volume-5-4-feature-showcase/
LPPV必须在有光照探头的情况下放置
这里演示如何给粒子添加LPPV
1.首先保证场景中分布有光照探头
2.粒子需要使用自定义shader,并且通过ShadeSHPerPixel拿到一些特殊光照信息
具体看那篇unity的文章,这里列出关键部分
fixed4 frag(v2f i) : SV_Target
half3 currentAmbient = half3(<span style="color:#, <span style="color:#, <span style="color:#);
half3 ambient = ShadeSHPerPixel(i.worldNormal, currentAmbient, i.worldPos);
fixed4 col = _TintColor * i.color * tex2D(_MainTex, i.texcoord);
UNITY_APPLY_FOG_COLOR(i.fogCoord, col, fixed4(<span style="color:#,<span style="color:#,<span style="color:#,<span style="color:#)); // fog towards black due to our blend mode
然后配置好粒子,并为其指定LPPV,然后设置好采样密度信息
总之PRGI还有许多局限性,比如巫师3那样的实时天气。
但对于较为静态的场景,通过配置好参数所达到的效果还是不错的,相信unity未来也会不断完善这套系统
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:9857次
排名:千里之外
原创:26篇
转载:45篇
(window.slotbydup = window.slotbydup || []).push({
id: '4740881',
container: s,
size: '200,200',
display: 'inlay-fix'}

我要回帖

更多关于 unity3d 鱼群算法实现 的文章

更多推荐

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

点击添加站长微信