基础且直白的Unity渲染-如何利用烘焙得到的lightmap和 ...
度假小屋
https://www.zhihu.com/video/1475606598101561345
Lightmap和实时灯光的关系:
GI是什么:
GI是在制作unity场景中我们经常遇见的问题,经常会听到美术人员说画面不够通透,暗部颜色很脏,色彩跳跃度太大等等比较主观的问题。其实这些问题很大程度上都和GI相关,GI可以说是在场景设计和制作中最难把控和理解的一个点。而且在初接触unity的人员也会因为unity本身渲染设置的琐碎而产生错误的理解。
GI = 直接光照 (主要方向光,主要灯光)+ 间接光照(弹射光照,非重要灯光)+ 环境光照 + 反射光(区域反射,环境反射)。
可以在unity的lighting设置中看到Environment下的设置。天空球的设置会影响到(环境光照)EnvironmentLighting的颜色。和(环境反射)EnvironmentReflections的信息。这几个属性是可以手动设置和修改的。一般都会根据天空球的设置来处理比较方便。unity本身的环境设置已经做得非常的完善了,除非是因为需要进行优化性能的处理,推荐还是使用unity本身提供的方式去做。
特别注意:制作好场景后最好先烘焙一次。让环境设置里拿到天空球的信息形成反射球给与场景里的环境反射进行采样。这样方便后续可以准确地制作。
反射探针:这个主要用来帮助制作人员抓取到准确地环境反射,并将其给与到场景内需要的物件,这个其实就是类似区域反射的效果,可以大批量分布,但最好使用bake模式,而且需要限制一下数量,不然会造成性能的大量浪费。
灯光:此场景中只使用了撩撩几盏灯光而已。且都是主要灯光,其实在真正的项目制作中会发现有经验的制作人员会不停的进行补灯处理。更甚者整个场景会打满灯光,这是因为现实在手游制作中,环境光和环境反射以及区域反射会进行大量削减,甚至于全部砍光。
关闭环境光,环境反射,区域反射的效果,是不是变成了颜色非常死板且脏的样子了。
因此烘焙完成的场景往往便是上图的样子。因此制作人员为了在烘焙完成后也尽量能保留实时光的效果会进行大量的补灯处理。其实依旧是杯水车薪,因为除非是打满了灯光点阵否则是无法模拟到非常漂亮的环境GI的。更何况随着项目场景设计的逐渐扩大。工作量也会成量级增加。纯粹的手工是极其不现实和低效的方法。
lightmap可以做到哪些方面的工作:
Shadowmask:此种烘焙方式是工作中遇见最多的烘焙方式。会在烘焙出lightmap的基础上多给与一张shadowmap的图片。shadowmap是用来标识出场景内静态物件的阴影的形状和大小,其和lightmap共享同一套UV进行区分。
[*]打开 Lighting 窗口(菜单:Window > Lighting > Settings),单击Scene选项卡,导航到Mixed Lighting并将Lighting Mode设置为Shadowmask。
[*]接下来,打开Quality Settings(菜单:Edit > Project Settings > Quality),导航到Shadowmask Mode并将其设置为Shadowmask。
在Quality Settings中可以设置为shadowmask 或者Shadow Distance。
在Shadowmask模式下:
[*]静态游戏对象通过阴影蒙版从其他静态游戏对象接收阴影,而不管阴影距离如何(菜单:编辑>项目设置>质量>阴影)。它们还接收来自动态 GameObjects 的阴影,但仅限于Shadow Distance内的阴影。
[*]动态游戏对象通过阴影贴图从阴影距离内的其他动态游戏对象接收阴影。它们还通过 Light Probes 接收来自静态 GameObjects 的阴影。阴影保真度取决于场景中 Light Probes 的密度,以及在 Mesh Renderer 上选择的Light Probes模式。
此模式下可以观察到场景内烘焙完成的lightmap信息。
此模式下可以很清晰观察到烘焙得到的shadowmask
shadowmask已经烘焙完毕的效果。
实时光照下关闭环境反射和区域反射的效果。
未烘焙前实时光照的效果。
通过对比可以很明显的法线第一张图和第二张图房屋身体上的阴影效果几乎是一样的。但是植物,草地乃至路灯的自发光都有了较大的偏差。这是因为,风格化制作的物件由于进行了shader内部计算方式的修改,lightmap会有意或者无意的被删减乃至更改计算方式,并非是因为灯光不够亮造成的原因。此时则需要根据实时光的效果进行shader内部运算的修改。
注意:unity提供的lightmap烘焙并不存在所谓的光线偏暗或者精度不高之类的问题。日常工作经常遇到烘焙效果和实时灯光效果出现较大区别的时候多多去观察frame Debug中的信息来做对比,基本出现问题的地方都是在环境光照,环境反射,区域反射的丢失问题上。如果是使用了程序提供或者是自己自行修改的shader。则多在运算方式上寻找问题。一般都能得到很好的解决。
在moblie游戏场景的制作中由于性能的钳制。很多时候是没法运用到大量的lightmap的,此时就需要进行lightscale的细致设置。
lightmapScale的比例一般会根据模型在当前scene的大小自行分布。如果要精确控制可以自行分配2U。
在ASE中的Sufaceshader的默认设置里可以额关闭此处的变体设置。这样就无法让scene的物件抓取到lightmap和shadowmask了
ASE本身提供的lightmap转码并不提供shadowmap的获取功能。此时需要我们进行手动采样处理
ASE全称Amplify Shader Editor 是市面上最流行的一类shader可视化编辑插件。相较于unity本身所提供的ShaderGraph和早前的ShaderForge更加全面且在长期更新,但其缺点是对使用者的要求很高,如果没有深入的学习过shader语言和对渲染流程比较精通的话,所制作出来的shader会相当的复杂且难以阅读。后期优化也会相当难处理。
利用ASE插件修改自定义shader:
风格化的shader一般都会利用sufaceshader的模板进行编译。因此想要在此基础上进行进一步修改几乎是不可能实现,因为unity内置的surfaceshader内置包含了很多已经编译好的变体和各类计算。使用者只有调用的权利没有修改的权利,因此,unitshader才是我们工作中使用的最多的一个模板。
此为编译完成后的烘焙完成的效果。可以自行调配整阴影的颜色。基本可以保证和原始实时光效果类似。而且性能上相较于实时光有了不错的优化。
unitshader内为了抓取shadowmask用到的变体。
shadowmask的可优化也是有限的。如果仅仅为了获得可调整阴影处颜色的功能的话其实
相当好处理。仅仅需要找到TA或者前端程序同事要求他帮忙写一个工具去配合shader内的功能来实现即可。
但shader内书写的功能越多。所造成的的渲染压力也就越大。我们确实可以解决掉阴影和光照的计算压力。但是哪怕仅有一盏方向光照也是有着很大的计算压力的。而且shader内的算法的复杂会大量的增加低端手机的渲染压力。因此类似动态高光,动态反射,实时全局GI之类的光照效果能节省就节省。
重点注意:shader的计算优化是需要有专门的TA或者程序员参与制作的,门外汉或者初学者最好不要在项目初期就花费大量的时间在shader的制作上,而且随着项目的增大,制作专门的CGINC组合。或者变体以及keyword是每一个管理渲染模块的人员的必要工做,为自己也是为了让同事都能少加班。当场景量级越来越大的时候,会影响到渲染的因素也会越来越多,越来越繁杂,因此专业人员的参与必不可少。
最后版本渲染展示:
和实时光版本对比看起来对比度有点儿高,还是有美术效果上优化的空间的。
shadowmask模式烘焙的度假小屋
https://www.zhihu.com/video/1478143506963734528
结语和示范scene链接:
lightmap的烘焙是每个unity游戏开发者都必须跨过的一道坎。老版本的烘焙仅仅是依靠灯光和制作人员的经验去尽量模拟实时光照的效果。
但随着手机性能的慢慢提升,能给于美术制作人的发挥空间也会越来越大。因此,最近这些年技术美术TA的需求也自然水涨船刚,都希望能在技术上给与自家的产品更高的品质和更广的平台适配。
个人看来研究手机画面的效果的提升对于个人发展来讲并没有多大的意义,其实花大量时间去研究手机上如何如何实现PC效果的移植其实属于资源和人力的浪费。手机游戏本身就属于娱乐性非常强的行业最重要的还是要偏重玩法和玩家间交互的畅快和体验,仅仅为了一个小小的效果而去花大量的人力物力乃至财力实在是得不偿失。
还是希望云游戏时代能快点儿到来吧,这样美术就可以不用再为了一款7.8年前的破手机天天熬夜调性能做无意义的优化了。
范例工程仅供学习使用。Shader没有做过性能优化。版本Unity2020.3.9f1c1
http://zhstatic.zhihu.com/assets/zhihu-components/file-icon/zhimg_answer_editor_file_other.svghouse.unitypackage
242.5M
· 百度网盘
页:
[1]