D3D12渲染技术之灯光

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/jxw167/article/details/82737320

灯光在引擎中占用重要地位,引擎没有灯光就是漆黑一片,见下图,左边我们有一个没有照明的球体,在右边,我们有一个点亮的球体。 正如你所看到的,左边的球体看起来很平坦 - 也许它根本不是一个球体,而只是一个2D圆圈! 另一方面,右边的球体确实看起来是3D - 照明和阴影有助于我们对物体的固体形状和体积的感知。 事实上,我们对世界的视觉感知取决于光线及其与材料的相互作用,因此,产生逼真场景的大部分问题都与物理上精确的照明模型有关。
这里写图片描述
当然,一般来说,模型越准确,计算成本越高; 因此,必须在现实主义和运行效率之间达成平衡。 例如,用于电影的3D特殊场景可以更复杂并且使用非常逼真的照明模型,因为电影的帧是预渲染的,因此它们可以花费数小时或数天来处理帧。 另一方面,游戏是实时应用程序,因此,帧需要以每秒至少30帧的速率绘制。
我们学习灯光要注意哪些方面呢?
1、了解灯光和材料之间的相互作用
2、了解局部照明和全局照明之间的差异
3、为了找出我们如何在数学上描述表面上的一个点“朝向”的方向,以便我们可以确定入射光照射到表面的角度
4、学习如何正确转换法向量
5、能够区分环境光,漫反射光和镜面光
6、了解如何实现定向灯,指示灯和聚光灯
7、通过控制衰减参数来了解如何根据深度改变光强度

光与材质的相互作用

使用灯光时,我们不再直接指定顶点颜色; 相反,我们指定材质和灯光,然后应用光照方程式,根据光/材料相互作用计算我们的顶点颜色, 这样可以使对象更加逼真地着色。

可以将材质视为确定光如何与对象表面相互作用的属性, 这些特性的示例是表面反射和吸收光的颜色,表面的折射率,表面的光滑程度以及表面的透明度。 通过指定材料属性,我们可以模拟不同类型的真实世界表面,如木材,石材,玻璃,金属和水。

在我们的模型中,光源可以发出各种强度的红色,绿色和蓝色光; 通过这种方式,我们可以模拟许多浅色。 当光从光源向外传播并与物体碰撞时,一些光可能被吸收而一些光可能被反射(对于透明物体,例如玻璃,一些光线穿过介质,但我们不考虑这里的透明度)。 反射光现在沿着其新的路径行进并且可能撞击其他物体,其中一些光再次被吸收和反射。 在完全吸收之前,光线可能会撞击许多物体。 据推测,一些光线最终会进入眼睛(见下图)并撞击视网膜上的光受体细胞(称为视锥细胞和视杆细胞)。
这里写图片描述
根据三色理论,视网膜含有三种光受体,每种受体对红光,绿光和蓝光敏感(有一些重叠), 入射的RGB光基于光的强度将其相应的光接收器激发到变化的强度, 当光接受物体受到刺激(或不被刺激)时,神经冲动沿着视神经向大脑发送,大脑基于光受体的刺激在大脑中产生图像。 (当然,如果你闭上/遮住眼睛,受体细胞就不会受到任何刺激,大脑会将其记录为黑色。)

再次看上图,假设圆柱体的材料反射75%的红光,75%的绿光,并吸收其余部分,球体反射25%的红光并吸收其余部分。再假设从光源发射纯白光,当光线照射到圆柱体上时,所有的蓝光都被吸收,只有75%的红光和绿光被反射(即,中高强度的黄色)。然后这种光被散射 - 其中一些光进入眼睛,一些光线向球体传播,进入眼睛的部分主要刺激红色和绿色锥形细胞达到半高度;因此,观察者将圆柱视为半亮的黄色阴影。现在,其他光线向球体射出并撞击它,球体反射25%的红光并吸收其余部分;因此,稀释的入射红光(中高强度红色)被进一步稀释并反射,并且所有进入的绿光被吸收。这剩余的红光然后进入眼睛并主要刺激红锥细胞到较低程度。因此,观察者将球体视为深红色。

和大多数实时应用一样,采用的照明模型称为局部照明模型, 使用局部模型,每个对象独立于另一个对象被点亮,并且在光照过程中仅考虑从光源直接发射的光(即,从其他场景对象反弹以击中当前被点亮的对象的光是忽略), 下图显示了该模型的结果。
这里写图片描述

另一方面,全局照明不仅考虑从光源直接发射的光而且还考虑从场景中的其他物体反弹的间接光来模拟光物体, 这些被称为全局照明模型,因为它们在照亮对象时会考虑全局场景中的所有内容。 对于实时游戏而言,全局照明模型通常过于昂贵(但非常接近于生成逼真的场景)。 寻找近似全局照明的实时方法是一个正在进行研究的领域; 例如,参见voxel global illumination [http://on-demand.gputechconf.com/gtc/2014/presentations/S4552-rt-voxel-based-global-illumination-gpus.pdf]。 其他流行的方法是预先计算静态对象(例如,墙壁,雕像)的间接照明,然后使用该结果来近似动态对象的间接照明(例如,移动游戏角色)。

阅读更多

扫码向博主提问

海洋_

博客专家

非学,无以致疑;非问,无以广识
  • 擅长领域:
  • 3D引擎架构
  • 服务器架构
  • GPU渲染
  • 客户端架构
  • 引擎优化
去开通我的Chat快问
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页