曾经流行的,即将流行的几种渲染模式(render pipeline)

1,multi-light with single pass (farcry 1.2及之后的版本在ps3.0中使用这种方式,其实ps2.0也能使用这种方式)
  每个对象最多能计算3-4 (3灯光/ps 2.0, 4灯光/ps 3.0)个灯光,
这样就限制了每个受光照的对象不能太大。
  适用于室外/地形场景 

2,multi-pass  (DOOM3,farcry 1.2之前的版本使用这种方式)
 每light要渲染一个pass, 多light的情况下DP的次数会过高。
  适用于室内/三角形数量较少的场景


3,deferred rendering (killzone2,stalker使用这种方式)
 G-Buffer点的显存大,耗的带宽高,DX9下不能实现MSAA(dx9下MRT不支持MSAA)
  材质受限制(因为是在后处理阶段计算光照,shader算法没办法针对不同的对象区分实现)

4,light indexed deferred rendering
  DP次数比1,3高,比2低,显存带宽适中, 每个对象的shader中必须固定该对象的每个fragment计算的最大灯光数量.

5,light pre-pass rendering (cryengine3使用这种方式,还有若干制作中的游戏/引擎使用这种方式)
  DP次数比1,3高,比2低,显存带宽适中,材质受限制
 (1) 渲染场景,输出depth和normal到一个rendertarget
  rendertarget的格式:R8G8B8A8,R8G8存depth,B8A8存normal.xy
                      R16G16B16A16,R16B16存depth,B16存normal.xy,A16存材质信息(specular power?)
  (2)使用第一个pass生成的depth和normal数据,渲染所有的灯光到light texture, RGB存计算后的光照值,
   A分量存每个象素的specular intensity
 (3)整个场景再渲染一次,使用(2)中生成的light texture,采样纹理(diffuse,specular mask...),计算光照。

posted on 2009-05-27 22:46  chunlin  阅读(1203)  评论(1编辑  收藏  举报

导航