The Art and Technology of Whiteout

http://developer.amd.com/media/gpu_assets/ArtAndTechnologyOfWhiteout(Siggraph07).pdf

 

挺不错的文章,siggraph07的,涉及了很多比较高端的效果。

 

但是也有很多没啥意思的,直接跳过,挑好的来:

 

 

Lighting Environment

 

1, PRT

存在vertex里面的信息,包括

  • sub surface scattering
  • bounced lighting

2, 环境光投射到SH系数:4级系数(似乎有点多,其他的都用3级),保留低频信息。

The Art and Technology of Whiteout

 

之前一个版本用的是irradiance volume,但是这次升级到动态构建cubemap然后动态投射到SH系数,最后使用。(好大气)

 

3,PRT skinning

和normal map一样,tangent_to_model矩阵需要跟着skinning matrix旋转。

PRT的SH 系数也要跟着skinning matrix旋转,但是最后以视觉效果为准,不旋转但是看着也很赞,就算了。

 

4,Lighting cards

dynamic cube map精度太低64*64的。

所以很小的光源会出问题。

这样就人为地在构建cube map的时候放一些大的lighting card,来代替小光源,这样一切和谐多了。

 

5,冰的渲染,截图很赞:

 

The Art and Technology of Whiteout

 

冰的渲染要包括:

  • 反射
  • 折射
  • subsurface scattering
  • 和雪比较好的结合,还有背后的depth信息要比较好

解决方案:

  • 反射比较hack,实际应用中某些情况下有可能,就是算冰面和boundingbox相交,相交的话就加一些红色(主人物的颜色)。
  • refraction和distortion的做法基本一致,计算sample back buffer的uv,然后sample就可以
  • depth和refraction,这个是多层material做法,在tangent space计算eye direction,偏移出一个新的uv,sample背后物体的texture(比如是岩石的texture)。结合parallax mapping,效果更好。

 

 

 

particle的volume rendering是亮点,可惜前面文章说过了。。。

 

 

 

衣服的褶皱效果大赞

 

The Art and Technology of Whiteout

 

基本思想是判断出一个fragment这里的褶皱程度,然后sample一个褶皱的nromalmap,做lerp。

 

至于褶皱程度怎么做,里面提供一个做法是dx10的geometryshader看vertex的triangle呗压缩多少(多的话褶皱就大)。

 

实际应用中,artist打上标记,然后从animation中读取数据应该也是可以完成的。

 


原文链接: http://blog.csdn.net/ccanan/article/details/5124580

你可能感兴趣的:(The Art and Technology of Whiteout)