PBR相关资料汇总

概念理解

  • BRDF,双向反射分布函数。大致就是在给定表面点上,输入入射向量和出射向量,算出出射辐射率和入射辐照度的比率。
    • ,这样定义能够配平渲染方程。

资料

  • 汇总讲解PBR https://www.cnblogs.com/timlly/p/10631718.html
    • 非常棒,文末还介绍了一些工具。
  • 讲了0.04的使用,提到一个基于物理的Blinn-Phong。https://zhuanlan.zhihu.com/p/21961722
  • 补充阅读(很多被第一篇引用了)
    • LearnOpenGL的PBR章节【非常适合全部读一遍】
    • 分析了BRDF怎么推导的 https://zhuanlan.zhihu.com/p/21376124
    • 讲了很多数学理论 https://blog.selfshadow.com/publications/s2013-shading-course/hoffman/s2013_pbs_physics_math_notes.pdf
    • 一些数学公式 http://graphicrants.blogspot.com/2013/08/specular-brdf-reference.html
    • Unreal 的实现 https://blog.selfshadow.com/publications/s2013-shading-course/karis/s2013_pbs_epic_notes_v2.pdf
    • CSDN 上 idovelemon 的blog,也挺有用的,主要讲了IBL(基于图像的光照)
      • Diffuse https://blog.csdn.net/i_dovelemon/article/details/79091105
      • Specular-1 https://blog.csdn.net/i_dovelemon/article/details/79251920
      • Specular-2 https://blog.csdn.net/i_dovelemon/article/details/79598921
      • 他的github https://github.com/idovelemon
    • Disney PBR https://blog.csdn.net/poem_qianmo/article/details/88936992

球谐光照&光照探针方面的资料

  • Stupid Spherical Harmonics Tricks http://twvideo01.ubm-us.net/o1/vault/gdc08/slides/S6469i1.pdf
  • Spherical Harmonic Lighting: The Gritty Details http://silviojemma.com/public/papers/lighting/spherical-harmonic-lighting.pdf
  • Unity的具体使用
    • LightProbe原理实现以及对LightProbe数据的修改 https://www.cnblogs.com/murongxiaopifu/p/8997720.html
    • Unity custom shader中调用内置Lightmap和Light Probes https://www.jianshu.com/p/6dfe403f75f6

Unity

  1. 如何在Unity中造一个PBR Shader轮子 https://zhuanlan.zhihu.com/p/68025039
  2. 扩张Unity PBR https://blog.uwa4d.com/archives/USparkle_PBR.html
    1. 作者github https://github.com/chenyong2github

PBR工作流(SubStance+Unity)

  • SubStance 用的 GGX BRDF,有两套workflow
    • https://academy.substance3d.com/courses/the-pbr-guide-part-2
    • Metal/roughness
      • base color tex 叫做 albedo 同时包含绝缘体的漫反射颜色和导体的反射率(镜面反射)(base color 用的sRGB的方式存储的)
      • Metal map 用起来像一个黑白二分图,黑色绝缘体(非金属),白色导体(金属)
        • 只是像,因为还有半导体来着。
          • 当metal gray value 低于 235 sRGB 时,需要降低base color对应的反射率
        • 绝缘体也有4%的反射率,这个0.04可以写死在shader里,
          • 具体实现应该是类似这个优化:https://zhuanlan.zhihu.com/p/21961722
          • diffuse = albedo * (1 - metalness)
          • specular = lerp(0.04, albedo, metalness)
        • Substatance提供了一个 SpecularLevel 来控制绝缘体的反射率,
      • roughness tex 粗糙度贴图,1是最粗糙
      • 优点:使用广泛,不容易弄错绝缘体的反射率(多数情况下写死0.04),纹理内存用的少。
      • 缺点:不能控制绝缘体的反射率,边缘副作用更加明显。
    • Specular/glossiness
      • diffuse map 颜色贴图,金属部分颜色是黑色(只有高光颜色没有反射颜色)
      • specular map 反射率贴图,非金属也有单独的反射率设置,而不是定死0.04
      • glossiness map 光泽度贴图,1是最光滑
      • 优点:边缘副作用不明显,可以控制非金属的反射率
      • 缺点:容易搞错非金属的反射率导致光照过亮,纹理内存用的多,据说是用起来更麻烦。
    • 两种worlflow公共的部分
      • Normal map 法线贴图,丰富光照细节
      • AO(ambient occlusion) map 主要作用于环境光,乘法运算
      • Height map 可以做一些视差效果,最好是用低精度的模糊高度图,细节部分让normal map 控制
        • 一般不真的移动顶点,意味着边缘部分还是原来的几何边缘。但是可以做到移动顶点。
      • 其他
        • 按理来说粗糙度和光泽度应该也可以是公共的。
    • 其他
      • 反射率分布:金属70%-100%,大部分非金属2%-5%,有效范围0%-8%
    • 副作用
      • 金属会有白色边缘,原因是纹理插值导致的,Metal workflow的albedo的金属区域是白色的(镜面反射率靠近1)。
        • Specular worlflow 金属会有黑色边缘,但是感官不明显。
        • 提高纹理像素密度能减轻这个问题。
  • Unity 的两种物理shader standard + standard(specular setup)
    • https://docs.unity3d.com/Manual/StandardShaderMetallicVsSpecular.html
    • 大致和substance的两种工作流对应
    • 额外的贴图,相对于上面 subtance
      • Emission map 自发光贴图
    • Unity 提供了第二套贴图
      • 目的是当镜头靠近时有更多的细节,有些像lod。一般是缩小重复平铺
        • 可以用于:皮肤毛孔
      • Second Normal Map 提供更细力度的法线信息,
      • Second albedo map
    • Unity一个简单的设计参照表格
      • https://docs.unity3d.com/Manual/StandardShaderMaterialCharts.html
  • Substance与PBR工作流总结:https://blog.csdn.net/linuxheik/article/details/81914184
    • 比较简单。

你可能感兴趣的:(PBR相关资料汇总)