|
这些都有文档的啊,可以翻翻 https://blog.selfshadow.com 这个网站,里面收集了很多 PBR 的文档资料。尤其是2013年的,SIGGRAPH 2013 Course: Physically Based Shading in Theory and Practice,有PPT和PDF文档,有时间可以学习,没时间,那就直接抄吧。各种参数的意义,都有说明。“阿尔法=粗糙度^2”是通过观察总结而来的经验公式。阿尔法SQ=阿尔法*阿尔法,sq是squared,公式里有平方。不要强迫自己去理解,不是什么高深的算法。你也会遇到 Schlick 给出的Fresnel 反射近似公式 ,到时候,也不要问为什么这里是5次方之类的问题,会不会取 5.2 更好?这是结合实验数据分析,拟合得到的比较好的数据而已。
如果不看 SIGGRAPH 文档,不看 Real Time Rendering 书,那就看下面的 PBR 教程和网站了。第一个是 Filament 官网的,然后 learnopengl.com 网站,目前有对应的中文网站翻译。
你不是要去读懂别人的代码,是要把人家研究好的公式,转化成代码,能用就行了。然后有时间熟悉 PBR 这一套理论。毕竟你不是做科研的,是做工程的。
Physically Based Rendering in Filamenthttps://learnopengl.com/PBR/Theoryhttp://pbrt.org/ shader 有很多 #if 很正常,毕竟有些 shader 的内部大部分代码是一样的,可能需要在不同的数量、公式、函数之间切换,还有就是shader 使用的 attribute / uniform (对应 Unity 术语keyword)也不一样,你想想,每个选项至少有2个分支,n个选项就有 个 shader 变体 (对应 Unity 术语 Shader Variant Collection),你如果不用 #if 宏控制,10个配置,shader 文件数量就1024了,代码其实有很多地方是重复的,维护起来也不好,多个地方要跟着改。
#pragma multi_compile A B C
#pragma multi_compile D Emulti_compile 是创建 shader 变体(Shader variant)的指导语句。以上创建了 3x2=6 个 shader 变体——A+D, B+D, C+D, A+E, B+E, C+E。
shader 程序,涉及到很多线性代数、微积分、各种 noise 等数学知识。然后 PBR 理论需要预先查看文档,直接看代码就会陷入题目中一样的纠结,很多公式,然后为什么这里要平方,就出不来了……
物理渲染方面的能力?抱歉差点没看懂。我首先想到的是物理引擎,然后才发现,你应该是要说的是基于物理的渲染(physically based rendering),交流时说 PBR 缩写也行,不要说物理渲染(physical rendering)了。
冯乐乐的书《Unity Shader入门精要》可以看看,里面有章节讲PBR,讲灯光和材质。入门书籍,封面画着一个刚入门的人物。该书围绕 Unity 引擎编写 shader 相关的基础知识、引擎相关知识,是一本非常优秀的着色器入书籍。GitHub 为 candycat1992/Unity_Shaders_Book,然后这是她写书的经历《一本技术书籍是如何出版的……》。 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|