找回密码
 立即注册
查看: 668|回复: 3

[笔记] 能否通过读别人的GLSL代码来提升自己的物理渲染方面的能力?

[复制链接]
发表于 2021-7-4 12:42 | 显示全部楼层 |阅读模式
我是引擎制作这个岗位的程序员, 目前不是游戏方向的.
发表于 2021-7-4 12:44 | 显示全部楼层
我觉得理解基于物理的渲染(PBR)可以按自顶向下的方法,由浅入深逐渐加深理解,不至于在各种繁杂的理论和算法细节中迷失方向。
首先,从使用上、从美术角度、从感观上先有一个直观的印象,熟悉一些概念,这些概念对渲染效果有着什么样的影响,尝试着做一些物理材质。这方面可以参考 Substance 、八猴、和知乎上的一些参考,比如:
    PBR指南-1,PBR指南-1(译文)PBR指南-2,PBR指南-2(译文)Basic Theory of Physically-Based RenderingPBR基础原理 八猴教学翻译 美术向
然后,尝试看一些理论对这些概念在物理上怎么解释,建立了怎样的数学模型,进一步理解各个数学模型在效果上的影响,漫反射模型是什么样的效果,镜面反射中的 F、D、G 函数分别是什么样的,作用是什么,决定着效果的哪些成分,这部分的参考就比较多了,其中最重要的参考就是SIGGRAPH 的几篇论文,可以结合知乎上的笔记一起理解,其他资料自行搜索。下面是一些我看过的,认为比较有价值的资料:
    SIGGRAPH 2013 Course: Physically Based Shading in Theory and PracticeUnderstanding the Masking-Shadowing Function (对理解几何函数很有帮助)Physically Based Shading at Disney, 基于物理的渲染—迪士尼的渲染模型Real-Time Rendering, 4th Edition, Chapter 9Maple 基于物理着色:BRDF毛星云【基于物理的渲染(PBR)白皮书】如何看懂这些"该死的"图形学公式冯乐乐 第18章 基于物理的渲染
这时,理论可以结合 glTF Viewer 查看各个参数、数学模型的可视化
PBR各项目参数、模型可视化
最后,是实践。可以学习一些优秀引擎的代码实现及论文,一个可选的参考是 Unity 的 Standard Shader 的实现,并尝试在 Unity 中自行实现 PBR 渲染。一些个人认为比较重要的参考:
    Real Shading in Unreal Engine 4Moving Frostbite to PBRFilament
整个过程可能会非常漫长,需要在一遍一遍的“直观-理论-实践”的反复循环中,带着疑问回过头看去理解,来提升这方面的能力。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
发表于 2021-7-4 12:53 | 显示全部楼层
  这些都有文档的啊,可以翻翻 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,然后这是她写书的经历《一本技术书籍是如何出版的……》。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
发表于 2021-7-4 12:55 | 显示全部楼层
主要是原理懂了,公式懂了,各个参数知道其意义,也就通了。告诉你个比较好的教程,filament 的材质文档,堪称教程级别的文档。搞引擎也分几个方面吧,不是啥都通,处处通。当然你做到啥都懂,也就是大神级别了。这东西说实在都懂了,没个几年功夫苦研究理论是不行的。
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-11-23 12:26 , Processed in 0.096438 second(s), 27 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表