返回介绍

正向渲染路径细节

发布于 2021-06-20 00:15:07 字数 1889 浏览 966 评论 0 收藏 0

本页面描述了正向 (Forward) 渲染路径的细节。

根据影响对象的光源的不同,正向渲染 (Forward Rendering) 路径在一个或多个通道中渲染每个对象。根据设置和强度,光源本身也会受到正向渲染 (Forward Rendering) 的不同处理。

实施细节

在正向渲染 (Forward Rendering) 中,影响每个对象的一定数量的最亮光源以全逐像素光照模式被渲染。然后,最多 4 个点光灯会逐顶点被计算。其他灯根据球谐函数 (SH) 进行计算,这种计算方式更快速,但只能得到近似值。根据以下内容判断某个光源是否是逐像素光源:

  • 渲染模式 (Render Mode) 设置为不重要 (Not Important) 的光源通常是逐顶点或球谐函数。
  • 最亮的方向灯通常为逐像素。
  • 渲染模式 (Render Mode) 设置为重要 (Important) 的光源通常是逐像素。
  • 如果以上内容导致光源数量小于当前像素光源数量 (Pixel Light Count) 质量设置,则为了降低亮度,会有更多的光源以逐像素的方式进行渲染。

用以下方法渲染每个对象:

  • 基础通道 (Base Pass) 应用一个逐像素方向灯以及所有逐顶点/球谐函数光源。
  • 其他逐像素光源在其他通道中进行渲染,一个通道对应一个光源。

例如,如果某个对象受到若干光源的影响(下图中的圆圈受到光源 A 到 光源 H 的影响):

假设光源 A 到 光源 H 具有相同的颜色和强度,且他们的渲染模式都为自动 (Auto) 模式,则他们在该对象上将严格按照这种顺序进行排序。最亮的光源将以逐像素光照模式进行渲染(A 到 D),然后最多 4 个光源以逐顶点光照模式进行渲染(D 到 G),剩下的光源以球谐函数进行渲染(G 到 H):

请注意不同的光照组间有重叠。例如,最后一个逐像素光源混合有逐顶点光照模式,这样能减少对象和光源移动时可能出现的“光照跳跃”现象。

基础通道

基础通道用一个逐像素方向灯和所有球谐函数光源渲染对象。该通道还从着色器中添加任何光照贴图、环境光照和放射性光照。该通道中渲染的方向灯可以有阴影 (Shadows)。请注意,使用了光照贴图的对象不会获得来自球谐函数光源的光照。

附加通道

附加通道为影响该对象的每个附加逐像素光源进行渲染。这些通道中的光源不能有阴影(因此,正向渲染 (Forward Rendering) 支持一个带阴影的方向灯)。

性能注意事项

球谐函数光源渲染地快。它们只耗费很少的 CPU,并且实际上无需耗费 GPU(换言之,基础通道通常计算球谐函数光照,但由于球谐函数光照的运行方式,无论有多少球谐函数光源,耗费都是完全相同的)。

球谐函数光源的缺点有:

  • 它们计算的是对象的顶点,而非像素。这意味着它们不支持灯光 Cookies 或法线贴图。
  • 球谐函数光源的频率很低。球谐函数光源无法有明显的照明过渡。它们也只会影响漫反射光照(对高光亮点来说,球谐函数光照的频率过低)。
  • 球谐函数光照不是局部的;靠近某些表面的球谐函数点光灯或聚光灯“看起来别扭”。

总的说来,球谐函数灯对小的动态对象来说已经足够好了。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文