【cg】【pbr】基于物理的渲染理论与实现

前言

基于物理的渲染是笔者本科时候的毕设。非重点大学的好处就是,对毕设的选题限制比较宽松,学生可以随便选择自己喜欢的课题。于是就选了自己一直想做又没有腾出手(对于爱逛街的女朋友王铁柱同学确实挺无奈的)做的这个东西。

如今离开大学,已经做了整整4个月的社畜,竟然一直没有挤出时间来整理一下这个东西,只能说我厂苦其心智的本领着实不亚于王铁柱同学的逛街能力。

基于物理的渲染,即PBR,是一种有别于传统经验模型的光照模型。折腾这个PBR,一方面是想对渲染管线和流程有更进一步的理解,对GPU编程有一定的认识和经验,另一方面,通过对基于OpenGL的3D游戏引擎的实现做一种尝试,不仅可以锻炼架构能力,还能对c++新的语法有更进一步的认识,了解了一些图形学的基础功能的实现,并锻炼使用了c++宏编程实现了委托机制和反射机制,为进一步实现序列化提供基础。同时编写了自己的数学库,推导了矩阵的各种仿射变换,以及旋转矩阵的推导,利用四元数进行旋转的原理与实现,正交/透视投影矩阵的推导和实现等,加强了图形学知识的数学基础,为进一步学习做准备。

结果

前前后后折腾了两三个月,最后搞下来答辩的时候成了下面这个鬼样子。

源码github地址

源码总共2万行左右,大部分使用c++语言实现,渲染部分使用原生opengl的api,shader使用glsl实现,几乎没有使用第三方库,除了读取模型使用的assimp,自己也写了一个读取obj格式的,但是效果不好。数学库也是自己边推导边实现的,可能有的地方是错误的,待以后查验。

文档

【cg】【pbr】基于物理的渲染理论篇

【cg】【pbr】基于物理的渲染实现篇之直接光照

【cg】【pbr】基于物理的渲染实现篇之间接光照

结语

个人感觉对PBR的基本研究还算认真,从最初的理论一直到最终间接光照的实现,几乎每一步都有仔细地推导了一下,拾人牙慧也要拾的认真才好。

容我展望一下未来。

下一步打算继续补充一些实现中的数学推导的博客,如四元数、投影矩阵等,同时补充一下图形学相关的一些基础实现,如uv mapping、gamma校正、HDR、bloom、法线贴图、立方体贴图、动态环境立方体及动态环境映射等。

再后面,打算阅读一下ue4引擎的渲染相关的代码,看看当前实验性的知识是如何在商业引擎中实现的,也许那到时从课本上学到的东西才能得到印证。

时不我待,少年仍需努力。

\(^o^)/

参考文献

  • [1] Burley B, Studios W D A. Physically-based shading at disney[C]. ACM SIGGRAPH, 2012: 1-10.

  • [2] Alvy Ray Smith. Gamma Correction [J]. Technical Memo 9, 1995.01: 1-4.

  • [3] Erik Reinhard. High dynamic range imaging [M]. Amsterdam, 2010.

  • [4] 连瑞梅. 简单光反射模型(Phong 模型)的导出[J]. 科技广场, 2007.

  • [5] Linus Källberg, Thomas Larsson. Optimized Phong and Blinn-Phong Glossy Highlights [J]. Journal of Computer Graphics Techniques, 2014.03: 1-5.

  • [6] 金伟其, 胡威捷. 辐射度 光度与色度及其测量[M]. 北京理工大学出版社, 2006.

  • [7] Matt Pharr, Greg Humphreys. Physically Based Rendering Third Edition [M]. Elsevier/Morgan Kaufmann, 2004.

  • [8] Naty Hoffman. Background: Physics and Math of Shading [C]. ACM SIGGRAPH, 2012: 1-36.

  • [9] RL Cook, KE Torrance. A Reflectance Model for Computer Graphics [C]. ACM Transactions on Graphics (TOG), 1981.

  • [10] C Schlick. An inexpensive BRDF model for physically‐based rendering [C]. Computer graphics forum, 1994.

  • [11] Michał Iwanicki, Angelo Pesce. Approximate Models for Physically Based Rendering [C]. ACM SIGGRAPH, 2015: 1-45.

  • [12] Kevin Suffern. Ray tracing from the ground up [M]. A K Peters, 2007.

  • [13] Brian Karis, Epic Games. Real Shading in Unreal Engine 4 [C]. ACM SIGGRAPH, 2013: 1-19.

  • [14] Christophe Hery, Ryusuke Villemin, Epic Games. Physically Based Shading at Pixar [C]. ACM SIGGRAPH, 2013: 1-10.

  • [15] 彭群生. 计算机真实感图形的算法基础[M]. 科学出版社, 1999.

  • [16] Tomas Möller, Eric Haines. Real-Time Rendering 4th [M]. A K Peters, 2018.

  • [17] Randi J. Rost. OpenGL 着色语言[M].人民邮电出版社, 2006.

  • [18] Jason Gregory, 叶劲峰译. 游戏引擎架构[M].电子工业出版社, 2014.

  • [19] 浅墨. 基于物理的渲染(PBR)白皮书[EB/OL]. 知乎 , https://zhuanlan.zhihu.com/p/53086060.2018-12-23.


欲知后事如何 且听下回分解
0%