Unity引擎渲染模块知识Tree

Unity引擎渲染模块知识Tree

渲染效果是游戏表现力的核心卖点之一。尤其近几年随着引擎技术的革命翻新,硬件技术的突飞猛进,以及玩家愈发挑剔的要求,游戏的表现力正在进入到崭新的层面。有哪些主流的Shader、自阴影、后处理技术?如何加强人物、画面的表现力?如何结合引擎的特性制作出性能优异的效果?

面对这么多需要深耕的知识点,你是否想问,“我该从何入手比较合适?”

无论对于从业者还是正在读大学的技术萌新,学习的有效时间和个人时间都是有限的。高效学习者最在意的是时间的价值,一个需要体系化的知识地图就显得尤为重要。为此,我们结合UWA学堂和博客上相关的技术博文,归纳总结,分为“初级”、“中级”、“高级”和“图形学理论篇”,欢迎大家按照自己的兴趣和需要参考取阅。


初级

对于初级入门课程,我们希望这一阶段的课程可以很好地帮助在校学生和刚刚入职的技术新人理解Unity引擎的实用技术。我们根据大量研发团队的技术使用和需求情况来设计该部分的课程内容,在渲染方面推出了由UWA学堂制定的技术教案,由海洋老师倾情讲授、手把手进行代码实现的五堂实用基础技术课程,非常体系化地讲解Unity引擎渲染模块的入门知识,以及真实项目研发过程中,研发团队所需的常用技术方案。

这几门基础课程分别是:

《详解Unity引擎渲染模块》
该课从基本的渲染流程入手,学习Unity渲染流程的各个部分及原理,分别从顶点片元着色器及表面着色器了解Unity Shader基本规则及写法。学习使用Unity Shader控制渲染流程各个部分及可编程部分编写,对Unity Shader基础知识做了详细的解释。学完这门课,你已经对Unity引擎的渲染流程、GPU的渲染底层有了初步的感性认识。同时,跟着我们一步一步地将代码实际操作出来,那么你对Shader编程也就算是入门了

《详解Unity引擎基于物理的渲染功能》
基于物理的渲染功能,是目前游戏的必备知识。PC端游戏就不用说了,从两年前开始,已有大量移动端游戏都在尝试使用该项技术来提升画面品质、视觉效果,以求在茫茫的游戏火海中脱颖而出。所以,该课从基于物理的渲染基本概念入手,分别讲解项目研发时所需要掌握的各种原理和实用技术点,主要包括:BRDF漫反射、BRDF高光反射、菲尼尔函数和能量守护等,同时讲解Unity中的PBS实现原理及分析Unity PBS代码。通过海洋老师大量的代码分析,以帮助技术新人高效、正确地掌握其核心技术点。通过这门课,如果你可以认认真真地学习里面的内容和代码操作,那么你对于PBR的理解已经超过大多数研发团队中工作1~2年的技术新手了

《详解Unity引擎Shader Graph功能》
该课程带你全面学习使用Unity最新Shader可视化编辑器——Shader Graph,课程中详细讲解了Shader Graph的使用方法、Shader Graph所有节点解析、使用Shader Graph制作部分效果的案例以及Unity官方Shader Graph案例工程讲解等等。通过它,大家可以直观地构建着色器,可以在图形网络中创建和连接节点,而无需手写代码。所以,非常适合在校学生、职场新人,以及想后续从事TA工作的开发者。通过这门课,我们希望你可以进一步掌握Shader编程,并做出一些很有想法的视觉特效,同时,也是对于TA工作的一个基础入门。

《Unity引擎实用阴影渲染技术全解析》
该课程主要讲解当前中国Unity项目研发过程中最为常用且实用的三种阴影实现方案。我们分别详细介绍了其理论原理及其在Unity引擎中的具体实现和使用细节,基本上认真学完这门课,90%以上的3D移动游戏项目你就知道他们是如何实现的以及你该怎么做了!

《详解Unity引擎的屏幕后处理功能》
该课程主要讲解了部分Unity引擎屏幕后处理的具体实现方法,包括色调调整、屏幕扭曲、抗锯齿、Bloom、景深、高度雾等,通过一步步的代码操作,让大家掌握如何实现屏幕后处理效果和如何灵活使用Unity官方的Post Processing功能。我们希望通过这门课,可以让你理解Post Processing的底层工作原理,以及如何制作那些游戏项目中的“高大上”视觉效果。

《画质与性能的权衡:如何使用可编程渲染管线(SRP)》
该课程是来自于UWA DAY 2019的一堂视频会议,主要讲解如何通过Scriptable Render Pipeline来让用户更加灵活地控制Unity的渲染管线,以实现不同的渲染效果,同时也会带来不同的性能表现。通过案例向大家展示LWRP,HDRP以及Custom SRP的使用,并通过数据来了解不同Pipeline的性能表现,以求让大家理解SRP的适用情况以及使用何种SRP改进所用的管线。SRP是未来Unity引擎开发者的必备技能,通过该视频分享,将大幅降低技术新人上手SRP的难度。

《Unity移动平台下的烘焙使用及优化》
这是一篇来自于UWA Blog的一篇技术文章,作者是西山居的TA大牛文雅老师。文章中详细讲解了Lightmap的烘焙实用技术,以及总结了研发工作经常遇到的疑难杂症,是我们UWA非常推荐的一篇了解Lightmap的技术文章。通过这篇文章的认真学习,你基本上可以胜任绝大多数研发项目中的Lightmap烘焙工作。

通过以上内容的学习,你可以从一个只知道Unity引擎的开发爱好者,变成一位Unity引擎渲染方面的开发者,对于渲染层面的理解可以达到国内2年左右工作经验的游戏开发者平均水平。


中级

通过上述基础课程的学习,你对于Unity引擎渲染模块已经有了基本的掌握,以及对于研发团队中的真实技术需求已经有了基本的了解。当你开始跨过一名技术萌新后,你则需要根据项目的不同需求来打造合适的功能,点亮自己不同的技能点。

下面是国内各大技术团队的技术牛人的实力干货分享,希望你可以通过以下内容更进一步地提升自己的技术实力。

《Unity项目从Gamma转Linear颜色空间的经验分享》
Linear颜色空间的转换是这两年大部分研发团队都在谈论的话题,从如何转变、到转变过程中所需要的工作流转变、再到转变后的各种特殊问题处理(比如UI、特效的半透问题,PBR结合的相关问题等),该篇文章进行了详细的说明和阐述。作者通过自己所经历的大量项目实战,来对Gamma转Linear过程中的关键问题进行了一一阐述和讲解。可以说,通过这一篇文章,你可以快速对行业内该方面的技能需求达到非常深刻和深入的理解。

《如何实现角色的自阴影效果》
该篇文章可以让你理解如何在不使用光源的情况下,如何做出高效的自阴影效果。如果你希望对自阴影效果和代码实现有非常明确的理解,或者项目中恰好有自阴影效果的实现需求(但目前的实现方法又不够高效),那么,该篇文章绝对是你非常好的选择。

《光照贴图Lightmap初探》
光照贴图是游戏中很常用的一个技术,不同引擎都有相似但细节处又有很多不同的实现。本篇文章将从原理出发,梳理Unity/UE4等引擎的不同实现,并着重分析项目开发过程中常见但很容易被忽视的精度问题及解决办法,以及很多实际工程中会遇到的问题及对策。

当你看过了《Unity移动平台下的烘焙使用及优化》一文后,你就需要阅读该篇文章,来进一步理解引擎底层的实现原理,以及当今世界上的主流Lightmap实现方法。

《Reflection Probe 实现伪室内和伪反射效果的改进方案》
如果你想高效实现一些如下所示的“水面反射”效果和“室内”效果时,这篇文章很可能是你的不二选择,读过这篇文章,你会明白,原来渲染方面的很多东西都可以“以假乱真”!




使用了常规的模型渲染


使用了文中所提方法的伪室内和为室外

《如何高效使用GPU Instancing技术来进行草丛渲染》
游戏中经常需要在一个屏幕内渲染大量重复的物体。例如一望无际的广阔草原,郁郁葱葱的原始森林,流光溢彩的满地珠宝等等。在Unity开发中遇到类似需求的时候,很容易碰到性能瓶颈,导致设备卡顿发热。本篇文章以草海渲染需求为例,详细介绍如何使用GPU Instancing技术进行渲染及性能优化。通过这篇文章的学习,你将直接掌握如何对场景中的海量重复物体(比如草海)进行高效渲染,以及在使用GPU Instancing功能时应该注意的方方面面。

《Unity游戏的换装系统优化》
“换装”是大多数游戏项目的必备功能,如何实现一个项目所需的高效换装系统,可以说是对一名初中级开发者的不小的挑战。高效换装,无外乎降低渲染方面的Draw Call和内存方面的使用,该篇文章作者另辟蹊径,给出了一个“我们目前见过的最为高效”的实现方式,确实非常值得研究和学习。

《Unity PBR介绍及经验分享》
该课程来自于UWA DAY 2017年钱康来在会议上的视频讲座。主要讲解了他在当时项目中对于PBR的使用经验,特别是对于Standard Shader的深刻理解和优化经验。如果你希望了解Unity PBR功能的演变历史,以及在真实商业项目中的使用,该视频内容非常推荐你观看。

《详解UGUI DrawCall计算和Rebuild操作优化》
随着你的经验逐渐丰富,你会慢慢接触到项目中的一些性能优化需求。所以,在渲染方面,你开始逐步了解到Draw Call、Material、Triangle、Overdraw等等名词。其中,Draw Call是最近二十年来渲染优化方面提到的最为高频的一个词汇。当然,以后还是不是就两说了。如果你想优化Draw Call,那么首先,你需要了解它是如何计算的。本篇文章就从UGUI出发,来讲解UI系统中的Draw Call计算原理,从而让你对于UI的底层设计有更进一步的理解。同时,对于UI界面的Overdraw问题也进行了详细的分析并给出有针对性的解决方案。相信我,在整个游戏行业,只有5%不到的技术人员是真正明白UGUI的Draw Call是如何计算的。


《如何根据UWA制定技术选型》
以上我们罗列了各种各样的游戏项目研发时所用到的实用、高效技术。同样的,我们在平时也会被各种团队问到:“有没有常用的、好用的工具推荐?”所以,我们在UWA DAY 2019中也整理了下大量团队技术选型时较为推荐的各种工具,其中就有不少与渲染相关,比如Imposter、Lighting Box和Smart Shadows等等,非常推荐观看,在你们的技术选型阶段,很可能帮忙少花费不少摸索时间。

除了UWA学堂中的内容外,UWA Blog中也有一些精品内容非常推荐对渲染模块感兴趣的开发者阅读:

《如何实现更真实的软阴影效果》
作者Luisa讲解在研发过程中创作的更柔和、更真实的高效实时阴影实现,非常推荐学习。

《Unity的Enlighten全局光照实践》
作者CG-Bull在本篇文章中分享了通过Unity Enlighten全局光照明功能来进行场景高质量渲染的实践心得,非常推荐阅读。


高级

在你学习、研究并为项目开发了一个又一个功能模块后,你开始进入到了下一阶段:更为复杂的功能改善、系统搭建和性能优化。在渲染模块中,PBR效果的增强、各种渲染相关系统的搭建(比如天气系统、染色系统、自定义SRP等)都是各大研发团队持续研发的重点。在此,我们先推荐以下几篇 UWA Blog文章进行进一步学习和研究。

《Unity的PBR扩展》
《Unity的PBR扩展——皮毛材质》
作者Young在这篇文章中讲解其在实际项目中对于Unity PBR功能的扩展,特别是其中对于头发、皮肤和毛皮的处理,非常推荐学习。


《基于通道混合的角色染色系统实现》

对于渲染模块的性能优化,我们推荐UWA学堂中的以下几篇课程:

《Unity引擎景深实现原理剖析与优化》
该篇文章从基本的后处理渲染流程入手,学习DepthOfField渲染流程中的各个部分及原理,分别从如何通过深度图计算出模糊圈、计算焦外模糊效果,如何把模糊图与原图混合完成焦点清晰、焦外模糊的景深效果入手,通过剖析其每一步的原理与GPU耗时,分析思考对其进行优化,从而提高渲染效率。通过这篇文章,我们希望你可以理解并掌握后处理性能优化的技巧。

同时,我们在最近几年的UWA DAY大会中,不断将我们在优化各种商业游戏时所遇到的问题进行总结和梳理,并向大家进行分享。另外,我们也邀请各大公司的技术牛人来分享他们在项目研发中所遇到和解决的技术难题。

《Unity引擎渲染效率全解析》
这是UWA DAY 2017的优化相关视频,主要讲解Unity渲染模块中各种渲染效果性能开销总结。

《Unity引擎移动游戏性能优化全解析》
这是UWA DAY 2018的优化相关视频,其中包括在UWA DAY 2017后所遇到的各种疑难杂症总结,其中也包含一些渲染模块的“幺蛾子”问题。

《Unity引擎渲染、UI、逻辑代码模块的量化分析和优化方法》
这是UWA DAY 2019的优化相关视频,其中重点讲解了最新一年的渲染模块的重要参数分析以及优化方法。

《次世代卡通渲染技术》
这是UWA DAY 2017的会议分享视频,由米哈游技术总监贺甲讲解《琪亚娜·极乐净土》的制作过程,揭示了如何在Unity中实现高品质的卡通渲染效果。

《移动游戏的GPU性能优化》
这是UWA DAY 2018的移动游戏GPU性能优化讲解视频。我们从Bandwidth、Fillrate和Shader等几方面出发,结合大量优化过程中的实际案例让大家了解和掌握如何快速定位和分析游戏在GPU端的性能瓶颈,以及游戏开发过程中需要注意的性能点。

《深度剖析大型MMO移动游戏的性能优化》
这是UWA DAY 2019的性能优化相关视频。言丰老师通过具体案例来分享渲染模块的实用优化技巧,主要包括:(1)Shader中的性能优化;(2)高效的图像后处理框架;(3)多人同屏时的Imposter使用。

除上述UWA学堂内容外,我们也推荐你阅读以下两篇UWA Blog文章:

《渲染优化-从GPU的结构谈起》
这是一篇非常好的GPU讲解问题,深入浅出,鞭辟入里!

《万物皆数-深挖UWA Benchmark之渲染篇》
性能优化的本质就是一个数学问题!该篇文章以渲染模块为例,讲解我们如何通过优化问题转化为数学问题进行研究和解决。

以上的内容主要是为了让你学习和掌握各种各样的实用技术。在研究各种技术的过程中,你或早或晚都会接触到很多更为底层的理论知识——图形学理论。在此,我们将UWA学堂UWA Blog中已有的图形学相关内容进行了汇总,希望能够帮你在渲染领域的学习中打下更为坚实的理论基础。


图形学相关的理论研究工作

《自优化的绘制流水线优化》

《三维数字世界的虚与实》

《基于物理的渲染—迪士尼的渲染模型》

《基于物理的渲染-用真实的环境光照亮物体》

《微表面模型-PBR渲染管线的材质》

《基于物理的渲染—更精确的微表面分布函数GGX》

《基于物理的渲染—基于球面调和基的实时全局光照明》

《基于物理的渲染—基于Haar小波基的实时全局光照明》

《基于物理的渲染—HDR Tone Mapping》

以上就是我们本期为大家梳理的Unity引擎渲染模块学习路径图。需要说明的是,这个路径图并不是捷径,相反30多篇文章会更加训练大家的意志力。作为体系化的知识,我们希望大家能掌握背后的逻辑与原理,结合学习方法论并反复实践,未来尝试在自己的项目中创新创造出自己满意的效果。