更详细的渲染逻辑参考Games101 202进行参考比较学习,这里是一个综述性质的概览。

渲染方程以及挑战

  • 参与渲染计算的部分:光线、材质和着色语言

渲染方程

来自JAMES Kajiya提出的基础渲染方程进行实现: 渲染方程及其解释 这个方程中需要参考辐射度量学,很值得研究的部分是BRDF的项选择。

  • 所有的渲染表现都可以遵循上述方程,不过不同材质有完全不同的计算逻辑

渲染上的挑战

  • Shadow Mappping:在Raycasting时有一个很大的挑战,阴影的实现是十分困难,从PCF到PCSS,需要进行大量的Hack来实现阴影效果的良好表现,不过现有的大部分算法都是特例化的,不能解决所有的阴影场景问题。
  • 光源的复杂性:常见的光源类型有平行光(环境光)、点光源、面光源和椎光源。特别的是,面光源的处理有很大复杂度。(ridance:辐出度、irridance:入射辐度)
  • 积分的计算:在硬件层,想要达到实时级别的计算,在进行BRDF项的计算时,我们需要根据方位角进行一个球面的整体积分,但是这对引擎中的计算要求很高。用数值方法结算也会有速度问题。
  • 间接光的复杂度:在真正的现实环境中,所有物体都有类似的光源的效果,因此间接的光照贡献计算保证正确度很艰难。(每一次反射,第二次进行递归的时候会以其为主要光源再次递归,我们只能保证有限的迭代次数以拟合主要的光线部分。)

基础的光照解决方案

simple light solution

定义ambient light+spot light模型作为基础的解决: