找回密码
 注册帐号

扫一扫,访问微社区

正向渲染路径细节

2015-1-7 19:06| 发布者: 杨炎| 查看: 1528| 评论: 0|原作者: 蛮牛|来自: unity3d脚本manual

摘要: 正向渲染路径细节本页面描述了正向 (forward)渲染路径的细节。根据影响对象的光源的不同,正向渲染 (forward rendering) 路径在一个或多个通道中渲染每个对象。根据设置和强度,光源本身也会受到正向渲染 (forward r ...

正向渲染路径细节

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

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

实施细节

在正向渲染 (forward rendering) 中,影响每个对象的一定数量的最亮光源以全逐像素光照模式" target="_blank" class="relatedlink">光照模式被渲染。然后,最多 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 或法线贴图。

球谐函数光源的频率很低。球谐函数光源无法有明显的照明过渡。它们也只会影响漫反射光照(对高光亮点来说,球谐函数光照的频率过低)。

球谐函数光照不是局部的;靠近某些表面的球谐函数点光灯或聚光灯“看起来别扭”。

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

相关阅读

文章点评
相关文章
Unity大学【第二期】!