Unity3D自带功能:灯光及光照烘焙

上传人:奇异 文档编号:48174446 上传时间:2022-01-01 格式:DOCX 页数:25 大小:24.97KB
收藏 版权申诉 举报 下载
Unity3D自带功能:灯光及光照烘焙_第1页
第1页 / 共25页
Unity3D自带功能:灯光及光照烘焙_第2页
第2页 / 共25页
Unity3D自带功能:灯光及光照烘焙_第3页
第3页 / 共25页
资源描述:

《Unity3D自带功能:灯光及光照烘焙》由会员分享,可在线阅读,更多相关《Unity3D自带功能:灯光及光照烘焙(25页珍藏版)》请在装配图网上搜索。

1、Unity3D 自带功能:灯光及光照烘焙这一篇比较偏重于功能介绍,具体的实例操作请参考其他文章:未完成游戏场景中灯光照明的构成现实生活中的光线是有反射、折射、衍射等特性的。对这些基本特性的模拟一直以来都是计算机图形图像学的重要研究方向。在CG中,默认的照明方式都是不考虑这些光线特性的,因此出来的效果与现实生活区别很大。最早期的时候,人们利用各种方式来模拟真实光照的效果,比如手动在贴图上画上柔和阴影,或者用一盏微弱的面积光源去照明物体的暗部以模拟漫反射现象等等。然后出现了所谓的高级渲染器,用计算机的计算来代替我们的手工劳动来进行这个“模拟”的工作。在漫长的发展过程中,出现过很多很多计算方案,总体

2、上分为这样几类:直接模拟光线从被光源发出到最终被物体完全吸收的正向过程,也就是常说的 GI (Global Illumination );不直接模拟光线,而是反向搜集物体表面特定点的受光照强度来模拟现实照明效果,也就是常说的 FG( FinalGathering ) ;完全不考虑光线的行为,单纯基于“物体上与其他物体越接近的区域,受到反射光线的照明越弱”这一现象来模拟模拟现实照明(的一部分)效果,也就是常说的 AO( AmbientOcclusion ) ;将场景光照结果完全烘焙到模型贴图上,从而完完全全的假冒现实光照效果,也就是我们所说的 Lightmap 。不论是GI还是FG计算量都是非常

3、大的,一帧图片需要几十分钟甚至几十小时来渲染,所以很难被应用在游戏设计领域。因此在游戏设计领域,光照贴图技术依然是目前的主流方式。由于光照贴图需要事先烘焙( baking )出来,且仅支持静态物体( Static Object ) ,而我们的游戏场景中几乎不可能全都是静态物体,所以通常游戏场景中的灯光照明是多种照明方式的混合作用。对于静态物体来说,大多使用光照贴图来模拟间接光的照明效果,然后加上直接光源的动态照明效果;对于运动物体来说,则仅用直接光源的动态照明效果,或者使用光照探针来模拟间接光的照明效果。随着技术的发展以及计算机计算能力的提高,也许在未来,我们能够直接在游戏场景中进行动态的全局

4、光照模拟也说不定呢。新版Unity3D 中就已经出现了 Realtime GlobalIllumination ,虽然这个技术还处于雏形阶段,所需要的计算量依然庞大,但确实为我们展示了一个令人激动的前景。当然,技术是技术,产品是产品。技术是为产品服务的,再先进的实时全局光照系统,对于像素风格的游戏场景的提升也是几近于 0。“选择合适的技术来完善我们的产品和制作流程” , 以及 “根据现有技术来设计产品和制作流程” ,说的其实是同一个意思。1. 直接照明( Direct Lighting )Unity3D 中的直接照明主要来源于各种灯光物体,而灯光物体本质上是空物体加上灯光组件。直接照明可以产生

5、阴影,但光线不会反射、 也不会折射, 但可以穿透半透明材质物体。1.1 灯光类型( Lights )Unity3D 中默认可以创建这么几种灯光:聚光灯、点光源、平行光、面积光,另外还可以创建两种探针( Probe ) :反射探针( Reflection Probe )和光照探针组( Light ProbeGroup ) 。 Unity 中可以创建的灯光类型物体平行光平行光通常用来做阳光, Unity3D 新建场景后会默认在场景中放置一盏平行光。平行光不会衰减。unity_lighting04.pngType :灯光类型,所有类型的灯光都其实共用一个组件,本质上是一样的。Color :灯光颜色M

6、ode:灯光照明模式,每种模式对应Lighting 面板中一组设定Realtime :对应 Realtime LightingMixed :对应 Mixed LightingBaked: 对应 Lightmapping SettingRealtime Lighting 是新出现的一种烘焙光照技术,它并不像传统的烘焙技术一样直接烘焙间接光照颜色和亮度信息到光照贴图上,而是烘焙物体和物体之间的关系信息,比如A面对B面有漫反射效果,B 面对C 面有漫反射效果等等。这样一来,只要物体之间的关系不变(也就是所有的静态物体都不移动位置) ,就不需要重新烘焙,从而使得我们可以在场景中随意运用动态光源( dy

7、namic lights ) 。而传统的 Lightmapping 光照贴图方式则不支持动态光源效果(改变光源不会改变场景光照) 。Realtime Lighting 比 Lightmapping 要更耗费系统资源,所以手游上就不要考虑了。 Intensity :灯光强度Indirect Multiplier :在计算该灯光所产生的间接光照时的强度倍乘Shadow Type:阴影贴图的类型No Shadows:无阴影贴图BakedHard Shadows :硬阴影贴图Soft Shadows:光滑阴影边缘(也就是阴影模糊效果)Shadow Angle :烘焙阴影的角度Realtime Shad

8、ows Strength :实时阴影强度Resolution :阴影贴图分辨率Bias :阴影偏移,通常适当增加这个值来修正一些阴影的artifactNormal Bias :法线偏移,通常适当减少这个值来修正一些阴影的 artifact (不同于 Bias 的使用场合)Near Plane :阴影剪切平面,对于与摄影机距离小于这个距离的场景物体不产生阴影Cookie : Cookie 相当于在灯光上贴黑白图, 用来模拟一些阴影效果,比如贴上网格图模拟窗户栅格效果Cookie Size :调整 Cookie 贴图大小Draw Halo :灯光是否显示辉光,不显示辉光的灯本身是看不见的Flare

9、 : Flare 可以使用一张黑白贴图来模拟灯光在镜头中的“星状辉光”效果Render Mode :渲染模式Culling Mask :点光源点光源模拟一个小灯泡向四周发出光线的效果,点光源在其照亮范围内随距离增加而亮度衰减unity_lighting01.pngRange :光线射出的范围,超出这个范围则不会照亮物体聚光灯聚光灯模拟一个点光源仅沿着一个圆锥体方向发出光线的效果,聚光灯在其照亮范围内随距离增加而亮度衰减unity_lighting02.pngSpot Angle :灯光射出的张角范围面积光面积光模拟一个较大的发光表面对周围环境的照明效果,通常面积光的灯光亮度衰减很快,阴影非常柔

10、和。Unity3D 的面积光仅在烘焙光照贴图时有效, 并不像 Maya 的Area Lights 一样能动态照亮场景。unity_lighting03.pngWidth :面积光宽度Height :面积光的高度总的来说, Unity3D 中自带灯光比较简单,根据我们在Maya中使用灯光的经验,可以很快熟悉这些灯光类型的使用。1.2 阴影类型(Shadow)Unity3D 的灯光可以设置不同的阴影类型, 分别是: 无阴影、硬阴影、软阴影。要注意的是,不论是硬阴影还是软阴影,本质上都是用阴影贴图模拟的阴影效果,而不是真实光照而自然形成的暗色区域。unity_lighting05.png灯光上阴影设

11、置部分会随着Mode参数的不同而变化,Realtime Lighting Mode 对应的选项很多,而 Baked Mode仅对应 Baked Shadow Angle 一项。无阴影灯光不产生阴影,新建场景后默认生成的平行光就是无阴影的。硬阴影阴影边缘清晰软阴影阴影边缘柔和,有过渡效果阴影质量设置虽然我们在灯光的阴影设置中可以调节 Resolution 以提高阴影质量,但真正的阴影质量调节应该在Quality 面板中来进行,灯光中的阴影 Resolution 参数默认设置是UseQuality Settings ,就是从 Quality 面板的设定中来选择。unity_lighting06.p

12、ng从菜单 Edit Project Settings Quality打开 Quality面板,这里可以针对不同质量等级设置不同的参数。unity_quality02.png我们现在先不在这里对Quality 面板做全面介绍,仅介绍关于阴影的那一部分设置内容:Shadows:在当前质量下是不渲染阴影,还是只渲染硬阴影,还是软硬阴影都渲染Shadow Resolution :在当前质量下阴影贴图分辨率,这就 对应了灯光面板中的 Resolution 参数。Shadow Projection :阴影贴图的投影方式, Close Fit 方式会优化近处的阴影质量,缺点是运动状态下可能会出现一些波动,

13、 Stable Fit 方式不会有波动,但质量比较差有的时候阴影贴图会出错,比如无缘无故多出一条亮缝之类,通常可以选择切换到 Close Fit 方式来解决,如果不想切换的 Close Fit方式,可以适当降低灯光阴影参数中的Normal Bias 参数,或者将对应场景物体设置成双面显示。Shadow Near Plane Offset :很近处不渲染阴影ShadowCascades :阴影贴图叠加方式,可以是单层、2 层或者4层Cascade Splits :不同层所对应场景区域的比例分配划分Shadow Cascades 是一种阴影贴图算法,比如我们选择4 层叠加,那么实际上会计算4 次阴

14、影贴图,每次对应距离摄影机一定距离范围以内的场景物体,而这个距离范围的划分就通过 Cascade Splits 中所显示的紫、绿、黄、红四种颜色区域所占比例来区分。紫色代表最近处的区域,而红色代表最远处的区域。紫色条越窄代表其对应的那一层阴影贴图所对应的场景区域越小,这样一来该区域的阴影贴图精度就很高了。我们可以看到这里的 Shadow Resolution 就对应了灯光面板中的 Resolution 参数。 unity_lighting07.png1.3 渲染路径( Rendering Path )Unity3D 提供两种渲染路径( Rendering Path ) ,对于初学者来说,渲染路

15、径这个概念不是很好理解,大家可以理解成是两种不同的渲染器,分别有利弊就好了。1.3.2 Forward在 Forward 渲染路径下,每个物体会被每个光源渲染成一个“通道” ,因此物体受到越多灯光的影响,其渲染次数就会越多。Forward 渲染路径的优势在于,在灯光比较少的情况下,Forward 方式的渲染速度会非常快, 处理透明贴图也非常快,还可以使用诸如“多重取样抗锯齿(MSAA”这样的硬件处理技术技术。但 Forward 渲染路径的渲染速度会随着灯光的增多而迅速变慢,在一些有很多灯光照明的特定场景中(比如高科技室内环境)并不适合使用 Forward 渲染路径。1.3.3 Deferred

16、使用 Deffered 渲染路径,渲染时间不会随着灯光的增多而提高,而是会随着受整体光照影响区域的扩大而提高(也就是说,场景中越多像素被照亮,渲染速度就越慢,但全屏被照亮的情况下,灯光设置复杂度不会进一步影响渲染速度了) 。Deffered 渲染路径在整体上需要更多的计算量, 对于一些移动设备, Deffered 渲染路径还不能支持。新版 Unity3D 的默认渲染路径是Deffered 渲染,如果场景非常简单, 或者希望使用MSAA, 可以自行修改成Forward 渲染路径。2. 间接照明天光,也就是环境光( Ambient Light ) ,特指来自于天空的漫反射。在Unity3D 中可以

17、继承“天空球”的颜色作用环境光颜色,也可以自行指定环境光颜色。反射光, 特指天空漫反射之外的所有环境漫反射。 在 Unity3D中主要通过光照贴图或灯光探针来模拟。自发光物体。在Unity3D 中自发光物体本身的亮度仅使用颜色来模拟,自发光物体对于环境的影响则通过光照贴图或灯光探针来模拟。2.1 天空盒(Skybox)与环境光(Ambient)Unity3D 的天空盒类似于 Maya 中的天空球的概念, 都是在场景外围生成一个封闭并正面向内的环境,用来模拟天空的颜色和照明效果。但Unity3D 的天空盒采用的是Box 形状的天空环境而非球形,用 6 张不同的贴图而非1 张全景贴图来作为天空贴图

18、。我们可以将Maya中常用的全景HD/境贴图转换为适用于Skybox 的方形贴图,来创建我们自己的 Skybox 。这种转换可以在贴图设置中完成:将Default 类型的贴图的TextureShape 从 2D改为 Cube,然后修改 Mapping 为 6 Frames Layout (Cubic Environment),点击 Apply 就可以了。Skybox 的贴图都是高动态颜色深度的 .exr 图片格式(也就是俗称的HDRffl片)。最好不要使用.jpg或者.png这种传统8 位色深的图片来做Skybox ,除非我们确认不需要对场景进行贴图烘焙(这样的话天空盒就只起到环境贴图的作用了

19、)简单的场景(或者刻意追求一种纯粹的效果)可以不使用Skybox 而使用纯色天空, 甚至游戏不需要看到天空的, 可以直接设置成None。天空盒对于场景的照明影响主要来源于其对于环境光的影响。天空盒贴图所产生的环境光肯定比纯色环境光要更为丰富,也更为契合天空颜色一些。环境光所需要的计算量很小,所以是很有效的照明手段,大家不要忽视了。2.2 光照贴图( Lightmap )与烘焙( Baking )简单来说, Lightmap 就是用贴图来模拟全局照明的效果, 但当今游戏引擎的 Lightmap 的功能却远远不是一张贴图那么简单。 按照官方的说法, Lightmap 中不仅可以包括物体表面的光照颜

20、色信息(传统的 Lightmap 功能) ,还可以包括物体和物体之间的光线渗透关系信息(新版中的 RealtimeLighting 功能) ,也就是说,动态光源也可以对于烘焙了光照贴图的静态场景物体产生正确的光照。光照贴图需要将所有参与的场景物体的UV重新排列组合成互不重叠且尽量少形变的方形结构,然后再把光照信息烘焙到一张或几张较大尺寸(最大到4K)的贴图中。这些烘焙好的贴图会被储存在场景文件所在目录下与场景文件同名的子目录中,所以烘焙光照贴图之前需要保存场景。光照贴图烘焙参数设置unity_lighting09.pngEnvironment :关于环境的参数设置Skybox Material

21、 :设置天空盒材质Sun Source :设置太阳,可以指定一个平行光作为太阳,然后该平行光的旋转角度会影响其亮度和颜色Environment Lighting :关于环境光照的设置Source :环境光照来源- Skybox :来源于天空盒- Gradient :来源于一个从地平线到穹顶的颜色渐变- Color :来源于单色Intensity Multiplier :环境光照明强度强化Ambient Mode :环境光照明模式- Baked :烘焙在光照贴图中- Realtime :实时Environment Reflections :关于环境反射的设置Source :环境反射来源- Sky

22、box :来源于天空盒- Custom :来源于一个自定义的Cubemap(方盒贴图)Resolution :环境反射贴图分辨率Compression :是否压缩环境反射贴图Intensity Multiplier :环境反射强度强化Bounces:环境反射计算次数Realtime Lighting :关于实时光照烘焙的设置Realtime Global Illumination:是否进行实时光照烘焙Mixed Lighting :关于混合光照烘焙的设置Baked Global Illumination :是否进行混合光照烘焙Lighting Mode :光照模式Baked IndirectD

23、istance ShadowmaskShadowmaskSubtractiveLightmapping Settings :关于光照烘焙的通用设定Lightmapper :选择光照烘焙器Enlighten :这是常用的一种烘焙器Progressive (Preview) :这是新版的一种烘焙器,还处于预览状态,它会先烘焙摄影机可见区域,再烘焙其他区域,所以预览较快Indirect Resolution :间接光照分辨率(每单位长度多少体素( texel ) ) ,数值越高,光照细节越高Lightmap Resolution :光照贴图分辨率(每单位长度多少体素) ,通常设置为 Indirect

24、 Resolution 的 10倍左右Lightmap Padding :修正两个物体的 Lightmap 之间的距离,以避免颜色渗透Lightmap Size :光照贴图大小(最大4096)Compress Lightmaps :是否压缩光照贴图Ambient Occlusion :是否烘焙环境光遮罩Final Gather :是否对最后一次GI 光线反射后的光照结果再进行一次FG计算,勾选上会有较好的质量表现,但烘焙时间会增加Directional ModeIndirect Intensity :间接光照的强度Albedo BoostLightmap Parameters :设置详细的光照

25、贴图参数(可以使用几个默认值,或者创建新设置,应该是给熟手用的吧)Other Settings :其他设置Fog:添加场景雾效Color :雾效颜色Mode:雾效衰减模式Density :雾效密度设置完成后别忘了点击 GenerateLighting 按钮烘焙光照贴图!光照贴图的烘焙( baking )是很需要时间的,新版Unity3D提供了自动烘焙的功能: Auto Generate 选项,可以让我们在调试场景的时候无需频繁手动点击Bake 按钮,但自动烘焙的结果并不会被储存起来,所以最终发布前还是需要手动烘焙光照贴图的。注意,从名字上,很容易将“自动烘焙”和“实时全局光照”这两个设置等同起

26、来,这是非常大的误解。定义光照贴图比例既然所有的场景物体都被Pack 成一个大的贴图,那么一个多边形面片上的光照信息精度就受限于这个多边形面片所对应的UV在贴图中所占据的面积大小了。由于场景优化考虑,我们当然希望将有限的光照贴图面积尽量多的分配给更需要的物体咯,所以 Unity3D 在 Mesh Render 组件中提供了修改物体所占光照贴图比例的参数:unity_lighting10.pngScale In Lightmap 就是控制该物体的UV在Lightmap的重排中比例缩放的,数字越小占比越少。怎么决定哪些物体的UV占比低哪些物体的UV占比高呢?通常远景物体占比比近景物体低,表面很平滑

27、的物体占比比表面细节丰富的物体占比低,处于内部不太可见的模型占比通常要尽量低,地面或者地形这种很大面积的物体,占比中等就好了,否则就挤占了其他物体的灯光贴图细节了。2.3 灯光探针( Light Probes )光照烘焙对于动态物体( Dynamic Object ) ,也就是没有被设置成 Lightmap Static 的物体来说都是不起作用的,如果希望动态物体也能被正确的照明,则需要创建Light ProbeGroup。Light Probe 可以被认为是在场景中的一个小“光源” ,而多个 Light Probe 组成的网络,就是 Light Probe Group 。这些小光源通过烘焙得

28、到场景中该点的亮度信息,然后整个网络用这个信息来照明动态物体。同一时间内只会有最靠近动态物体的那些Probes 会起作用,而且 Light Probe 离运动物体越近,其照明效果越强。我们可以根据场景光照环境特征来设置合适的Light ProbeGroup。为场景添加 Light Probe Group 可以很好的将动态物体与静态场景融合,尤其是在光照环境复杂的室内场景中,尤其需要添加 Light Probe Group 。3. 如何提高图像的渲染质量Unity3D 中图像质量是由很多因素共同决定的,而且默认的参数设置常常都不是最佳的。而我们在制作游戏的时候,需要在游戏运行效率和游戏画面质量上

29、做出选择。有些游戏(比如2D游戏)的游戏画面基本与渲染质量无关,这时候就可以关闭一些影响性能的功能或选项来提高运行效率。但有些游戏(比如 3D游戏,或者仿真应用如虚拟楼盘效果图之类)对于图像渲染质量有较高要求,我们也需要知道可以通过哪些手段来增强画面效果,同时明白这样做会牺牲多少运行性能。设置质量等级( Quality Level )Unity3D 允许用户设置多个质量等级,并在各个等级中运用不同的质量参数,前面讲阴影的时候涉及过这方面的内容。对于新手来说,常常会犯错的地方是明明设置好了高等级的图像质量,却在较低等级预览场景,或者明明需要输出成WebGL(默认使用中等质量等级),却不停地调整最

30、高质量等级的参数。选择渲染路径简单来说, Deferred 渲染路径的图像质量比较高, 但 Forward渲染路径在灯光不多的情况下速度比较快。阴影质量阴影出现 Artifacts 的时候请调整Bias 参数和 Normal Bias参数。复杂场景的阴影质量需要手动调整Cascade Splits 参数中多个层的占比,以保证近处阴影有足够的质量。光照准确性使用反射探针( Reflection Probe )Unity3D 中并没并真实的 Raytrace 反射, 而是通过反射贴图来模拟所有的反射效果。如果我们在场景中放置一个非常强反射的小球,我们就能看到这个小球上实际反射的是我们的 Skybo

31、x , 完全不会反射场景物体。这样一来不仅影响到场景中反光物体的反射正确性,同时也会严重影响整体场景的光照准确性。我们可以为场景添加 Reflection Probe 来矫正不正确的反射贴图。Reflection Probe 可以看做是一个带有6 个摄影机的点,它会渲染该点的 6 个方向(前后左右上下) ,将渲染结果拼成一个Cubemap并应用给一个特定方框范围内的所有物体作为反射贴图。对于比较复杂的环境,比如有多个区域的大房间,我们可以放置多个 Reflection Probe 并手动设置其影响范围。unity_reflect_probe.pngReflection Probe 默认不会计算

32、动态物体, 仅计算烘焙物体,我们可以修改属性让其将动态物体也包括在内,同时还可以修改属性为Every Frame 使其每帧更新以准确反射动态物体的运动过程,还可以增加LightingSetting 中的 ReflectionBounces 提高反射次数(这样就不会出现强反射物体在另一 个反射物体中是黑色的情况了) 。但要注意,这些修改都会占用更多的系统资源,尤其是每帧更新反射贴图这样的设置。4. 如何提高烘焙效率烘焙效率虽然不影响最终游戏的表现,但对我们制作过程有很大的影响。没人会希望每次修改了场景布局或者灯光布局之后都要花费几个小时甚至几十个小时的时间来烘焙光照贴图。一个小技巧是不要将所有物体都设置成 Lightmap Static 参与光照贴图的烘焙。很多细碎的物体(比如地上的小碎石)并不需要很精确的间接光照效果,而且也可能根本没有足够的光照贴图精度来对应这些细碎物体,这时候用灯光探针可能比用光照贴图更有效率。在 Unite 2017 关于灯光烘焙的专场演讲中,演讲者通过将细小物体设置为动态物体,并添加简单的 Light Probe ,让渲染时间从3.5 分钟下降到 20 秒。

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!