siggraph08的一个文章:
http://s08.idav.ucdavis.edu/olick-current-and-next-generation-parallelism-in-games.pdf
siggraph09的一个文章:
http://artis.imag.fr/Publications/2009/CNLSE09/GigaVoxels_Siggraph09_Slides.pdf
相当hardcore,令人兴奋程度和crytek的light propagation volume相当。
这个目前看不到真正扎眼的feature,但是这个方向是令人激动的,如果id为首的一帮人真的能引领业界进入这个方向那是很赞。
什么是voxel?
可以对比texel来理解,在2D texture上的一个小单位,叫做一个texture。
引申到3D空间,一个小单位,小cube就是一个voxel。
现在的方式不是挺好的么,为何要用voxel rendering?
olick的文章认为voxel rendering会带来更好的游戏品质和更快的开发周期。
好处包括:
个人觉得,voxel这个方向也适合复杂光照的计算,而且这种表达方式更加简单直接,会带来更多的优良算法的发挥。
voxel rendering一些内容
voxel被组织在稀疏八叉树里,也就是sparse voxel octree(SVO).
渲染的时候从pixel shader的每个pixel顺着camera方向cast一个ray出来,然后输出和octree相交node的index和depth。
这里还涉及到一个取octree哪一级的问题,做法和计算mipmap level的ddx和ddy比较类似,看比较远了或者和旁边的ray比较平行了就可以取大一级的voxel,否则就取更细节一些的level。
voxel里是小mesh,可以理解成把mesh离散化了,然后以voxel为单位存储和被sample。
mesh离散化可以看这个图示:
离散化之后,单位是最小的那个voxel,接下来要生成mipmap,就是更大一级的voxel里面要存储的小mesh。
最后一个mipmap一样的金字塔结构就构建出来了。
那么接下来就是要ray caster->sample voxel octree了。
voxel rendering pipeline
和megatexture一样,voxel rendering会涉及到巨量数据,需要频繁和硬盘交换页面。
基本pipeline:
这里面涉及到的东西可就多了,包括
最后id给出的数据是runtime的52byte一个node,storage的8byte一个node。
遍历octree的时候也很多优化算法,cuda也上了。
dynamic geometry还是很有问题,目前不好弄,但是olick号称可以搞定,怎么弄没说。
开发时间,1年弄tools,3个月engine。
笔记到此为止吧,总之这个方向估计id不是提倡也不会太多人关注,id一说,起码我这种carmack粉丝立刻要研究一番。
也正像文中所说,这个是针对下代主机ps4这样的更强性能设计的算法,目前generation不太会有。
以后学习cuda的时候应该是个很好的练习对象。