PBR(Physically Based Rendering,基于物理的渲染)是指使用基于物理原理和微平面理论建模的着色/光照模型,以及使用从现实中测量的表面参数来准确表示真实世界材质的渲染理念。得益于移动设备硬件性能的不断强大,越来越多的游戏使用了PBR。不止如此,研发者还能让PBR和NPR(非真实感渲染)进行完美的结合,在此基础上开发出了很多优秀的作品。
但是,PBR的知识体系又极为庞大,这就导致好多同学兴致勃勃地进来,但是看到如此繁多的概念和数学公式后,浅尝辄止一番就灰头土脸地走掉,很是可惜。正所谓“师傅领进门,修行靠个人”,本文的目的就在于让这些同学“开开心心地来,高高兴兴地回”。基于此,本文的重点就在于“领进门”,在实现的过程中尽量用比较浅显的语言循序渐进地介绍一些“高大上”的概念——比如球谐、傅立叶等;而在涉及到数学公式的推导上,尽量保证每一步的推导都有据可依,不至于跨步太大让大家不明所以。
当然,从理论到实践,还有一段比较长的路要走,为此,这里把“路”拆开,我们一段一段地走:
第一天,阅读掌握PBR相关基础知识;
第二天,搭建一个简易的SRP框架;
第三天,实现PBR的直接光部分;
第四天,实现PBR间接光的漫反射部分;
第五天,实现PBR间接光的镜面反射部分。
这里稍微多说两句:PBR的基础知识非常重要(当然不一定要会推导,起码要知道参数的物理意义以及在美术中对应的表示,这个我们也会在后续的实现中捎带回顾一下)。好多同学看到密密麻麻的公式就打退堂鼓了,像这种情况我们可以直接从第二天的实现开始,在实践中学习巩固相关知识。当然,我们完全可以在Unity内置着色器的基础上直接实现PBR,并且网上好多教程都是这么做的,只需一到两个Shader就能搞定。那为什么还要自己搭建一个SRP框架,主要有以下两点考虑:
- 可以更加深入了解上下游数据的组织、传递,而不仅限于PBR本身
- 为之后的学习打下基础,可以在框架上自行扩展相关功能,做喜欢做的事情,比如说PCF软阴影、FXAA等各种抗锯齿
图出自基于物理的渲染(PBR)白皮书
本文内容就介绍到这里啦,更多内容可以前往UWA学堂进行阅读。