Forward Rendering 正向渲染

       正向渲染一个基于着色器的渲染路径。它支持逐像素计算光照(包括法线贴图和灯光Cookies)和来自一个平行光的实时阴影。在默认设置中,少数最亮的灯光在逐像素计算光照模式下渲染。其余的灯光计算对象顶点的光照。

       根据影响物体的光源的不同,正向渲染路径用单个或多个通道来渲染物体。在正向渲染中,光源本身也会根据他们的设置和强度受到不同的对待。
实现细节

       在正向渲染中,影响物体的最亮的几个光源使用逐像素光照模式。接下来,最多有4个点光源会以逐顶点渲染的方式被计算。其他光源将以球面调和(Spherical Harmonics)的方式进行计算,球面调和技术计算很快但只能得到近似值。根据以下的规则判断一个光源是否为逐像素光源:

  • 渲染模式被设置为不重要(Not Important)的光源以逐顶点或球面调和的方式进行计算
  • 最亮的方向光源为像素光源
  • 渲染模式被设置重要(Important)的光源为像素光源
  • 如根据以上规则得到的像素光源数量小于质量设置中的像素光源数量(Pixel Light Count),为了减少亮度,会有更多的光源以逐像素的方式进行渲染

用以下的方法渲染每个物体:

  • 基础通道渲染一个逐像素方向光和所有的逐顶点/球面调和光。
  • 其他逐像素光在附加的通道中进行渲染,每个光源都需要一个通道

假设光源A到H都有相同的颜色和强度,且它们的渲染模式都为自动的(Auto),那么它们严格的按照其名字排序。最亮的光源以逐像素光照模式的方式进行渲染(A到D),然后最多有4个光源以逐顶点光照模式进行渲染(D到G),其他光源以球面调和的方式进行渲染(G到H)。

注意不同的光照组间有重叠,如,最后一个逐像素光源也以逐顶点光照模式的方式渲染,这样能减少当物体和灯光移动时可能出现的"光照跳跃"现象。
Base Pass 基本通道
       基础通道用一个逐像素方向光和所有球面调和光渲染物体。此通道还负责渲染着色器中的光照贴图,环境光和自发光。在此通道中渲染的方向光可以产生阴影。需要注意的是,使用了光照贴图的物体不会得到球面调和光的光照。
Additional Passes 附加通道
       附加通道用于渲染影响物体的其他逐像素光源。这些通道中渲染的光源无法产生阴影(因此,前向渲染支持一个能产生阴影的方向光)。
Performance Considerations 性能注意事项
       渲染球面调和光很快。它们只花费很少的CPU计算时间,并且实际上无需花费任何GPU计算时间(换言之,基础通道会计算球面调和光照,但由于球面调和光的计算方式,无论有多少球面调和光源,计算它们所花费的时间都是相同的)。
球面调和光源的缺点有:

  • 它们计算的是物体的顶点而不是像素。这意味着它们不支持投影遮罩和发现贴图。
  • 球面调和光只有很低的频率。球面调和光不能产生锋利的照明过渡。它们也只会影响散射光照(对高光来说,球面调和光的频率太低了)。
  • 球面调和不是局部的,靠近曲面的球面调和点光和聚光可能会"看起来不正确"。

总的来说,球面调和光的效果对小的动态物体来说已经足够好了。

最新文章

  1. HashMap和SparseArray的性能比较。
  2. React-Native 给客户端来个「同音词模糊搜索」
  3. mysql Integer Types (Exact Value) - INTEGER, INT, SMALLINT, TINYINT, MEDIUMINT, BIGINT
  4. leetcode 110 Balanced Binary Tree ----- java
  5. JavaScript学习记录总结(九)——移动添加效果
  6. golang的ssh例子
  7. java多线程的使用1
  8. zend+xdebug单步调试
  9. Ubuntu12.10硬盘安装
  10. php的SQL连接操作的方法
  11. python 网络编程第四版
  12. HDU 1060 Leftmost Digit 基础数论
  13. POJ-2570 Fiber Network---Floyd+二进制表示集合
  14. hdu5601 BestCoder Round #67 (div.2)
  15. FastAdmin笔记~
  16. 一篇你看了就懂的DNS详解
  17. Docker容器学习与分享07
  18. JavaWeb开发之网站实现文件上传功能
  19. keynote代码高亮【转】
  20. with revoked permission android.permission.CAMERA

热门文章

  1. storm是怎样保证at least once语义的
  2. Android获取手机方向
  3. iOS8 Push Notifications
  4. Aspose.cells 读取Excel表中的图片问题
  5. 今日头条Go建千亿级微服务的实践
  6. 获取app-package和app-activity的值
  7. 在 Linux 上如何清除内存的 Cache、Buffer 和交换空间
  8. Oracle 数据库基础 出现invalid username/password; logon denied错误解决方案
  9. LR添加Windows和Linux压力机实战
  10. the art of seo(chapter five)