zoukankan      html  css  js  c++  java
  • PBR技术简介(一)

    最近在学习LearnOpengl,经过不懈的努力,终于阅读到了PBR的章节,接下来会写一系列博客来总结自己从中学到的理论,并尝试实现其中的算法。
    PBR,全称为Physically Based Rendering,是一套尝试用物理的方式来描述现实中渲染效果的技术。相比于前人提到的Phong光照模型,利用PBR的方式可以渲染出更为真实的场景。
    利用Phong模型和PBR的效果有一个很直观的对比,上图是古剑奇谭一的游戏截图,它的人物渲染是利用的很基础的Phong模型(甚至可能没怎么看到高光的成分),下图是古剑三的效果,采用了PBR后可以明显看到人物身上闪烁的配饰、衣服布料的材质,相比于古剑一是翻天覆地的变化,甚至在一定程度上逼近了真实的物理世界。

    微面元模型

    关于PBR,最基础的概念就是微面元模型(Microfacet Model)。该理论将一个物体的平面看作是一个个极其微小、凹凸不平的表面所构成。越是平滑的面,它的微表面就越是朝着同一个方向;相反表面越是粗糙,它的微表面就越是面对不同的方向,如下图所示:

    我们利用一个参数:粗糙度(roughness)来描述平面的的各个微表面朝向的离散程度。根据之前提到的Blinn-Phong模型,我们可知随着平面越朝着h向量(视角向量和光线向量的和),则高光的部分越强,再结合粗糙度,我们可以完整地描述模型的高光反射:

    可以看到,在同样的视角下,随着粗糙度降低,则平面越来越平滑,则高光越来越强,且高光的区域越来越聚焦。

    反射与折射

    在之前的Phong模型中,我们知道除了高光反射,还有漫反射。PBR理论指出,深入研究光打到物体平面上的运行后可以发现,有一部分光会直接从表面反射出去,这其实就是我们前面提到的高光发射。与此相对,有一部分光则会进入物体表面,产生折射,这一部分光有一些会被吸收,产生热能,另外一些则会和在物体内部进一步碰撞、反射,最终以随机的方向再次反射出去。是不是觉得似曾相识?没错,这其实就是漫反射。PBR理论假设这个折射并反射出去的过程发生在一个非常小的范围内(相对应的,有一种理论叫做“次表面散射”,它没有局限于上面的假设,进一步研究了光线折射后的行为,在皮肤、蜡烛等物体上有着更为真实的渲染效果)。下图展示了光线在打到平面上时所发生的反射和折射现象:

    不过有一种物体是需要特殊对待的,就是金属。对于金属来说,它只有高光反射而没有漫反射。
    另外需要注意的一点是,PBR模型实际上省略了由于碰撞转化为热能的那一部分光的能量,那么根据能量守恒定律,就可以得知入射能量和出射能量是相等的,并且出射光反射部分的能量和折射部分的能量是互斥的。
    因此,对于出射光,我们设kd为漫反射比例,ks为高光反射比例,那么必然可得:

    kd + ks = 1.0
    
  • 相关阅读:
    SWFUpload说明文档
    Ubuntu中root用户和user用户的相互切换
    不用IF比较两数大小
    Linux服务器下验证码图片不显示问题
    常用CSS语法
    常用CSS语法
    漫谈DataList的用法
    Session丢失浅析
    浅谈C#托管程序中的资源释放问题
    C#2.0 泛型详解
  • 原文地址:https://www.cnblogs.com/wickedpriest/p/13338144.html
Copyright © 2011-2022 走看看