[gpu pro]MultiFragments Effects on the GPU using bucket sort
来源:互联网 发布:server数据库基础知识 编辑:程序博客网 时间:2024/04/29 07:38
这篇文章牵连的东西比较多,一些思路比较有意思,实用性在realtime game rendering里面比较有限,但是如果用于一些工具对于模型的处理应该会有一些用武之地。
multi fragments effects
这个是指以order independent translucensy为代表的,这种多个fragments之间需要一定交互的效果。
就目前来看最好的算法应该是direct compute使用fragment list来做了。
depth peeling
这个是处理order independent translucency早起经典的算法。
相关的文章可以看:
- file:///F:/drive/SkyDrive/HardCore/render/transparent/order_independent_transparency.pdf
- file:///F:/drive/SkyDrive/HardCore/render/transparent/DualDepthPeeling.pdf
使用多个depth,多个rendertarget,把scene render多遍,一层层这样画过去的方式。
比如,第一遍构建了离camera最近的depth和rendertarget,然后再画一遍,保留比第一遍depth值大的fragments中,depth值最小的,以此类推。
后面硬件能力越来越强,比如在dual depth peeling,nv使用当时最新硬件(g80架构)里面支持floating point mrt, max的blending operation,所以算法得到改进。
dual depth peeling
是从两个方向向中间同时做peeling,
使用一个rgbaf32的rendertarget作为depth peeling buffer,两个rgba8的render target一个记录前到后的,一个是后到前的。
这里会有一个问题就是,我们不能拿一个fragment的depth值和存depth的rendertarget里面的值做比较,如果符合条件就写入depth render target。
这样会造成read-modify-write hazard。
处理的方法是使用max的blending operation。
比较操作仍然在pixel shader里面做,输出的时候使用max的blending operation,这里floating point的威力就显现出来了,由于一个是front to back,一个是back to front,全用理应是一个max,一个是min,那么我们可以把第二个取一个反,输出(depth0,-depth1),这样都用max就可以了。
bucket sort
这里的bucket sort和标准做法的思想是一样的:http://en.wikipedia.org/wiki/Bucket_sort
核心思想是切割。
利用新硬件有更大数量的mrt(bucket sort用到了8个,简直丧心病狂了),把depth区域分成了n等份,一个fragment落到那里,就写到哪里,这样一遍就构建好了。
最后compoe到一起就好。
但是很多情况depth分布不是这么平均,一个做法是对于比较密集的地方,再来一个或多个pass,进行细分。
另外一个做法是做一个叫depth histogram的buffer,一个rgbaf32的rendertarget有32x4个bit,8个就是1024个,这样把depth range分成了1024每一个fragment落在其中的一个,如果再细就不管了。
这样现来一个geometry pass,把depth histogram构建好,再来一遍就可以根据这个histogram来做adaptive(而不是上面这种平均分)的构建了。
总之想法是有点小变态,多种方法融合灵活应用,虽然实战性差点,但是颇有启发性,我喜欢。
- [gpu pro]MultiFragments Effects on the GPU using bucket sort
- Accelerating Computer Vision Algorithms Using OpenCL on The Mobile GPU
- [gpu pro]shadow map for omnidirectinal light using tetrahedron mapping
- Graph Cuts on the GPU解析
- [gpu pro]StylizedRenderingInSpore
- [gpu pro]AlphaBlendingAsPostProcess
- Using+GPU+with+Cuda
- GPU
- gpu
- GPU
- GPU
- GPU
- gpu
- gpu
- AMGCL----AMG ON GPU
- Julia On GPU
- Android 模拟器 GPU ON
- CUDA on NVIDIA GPU
- java 中list按bean某个属性排序
- java 日期和小时相加减处理
- 算法--排序(冒泡,选择,插入,快速)
- hibernate Criteria中or的用法
- Http请求出错返回获取
- [gpu pro]MultiFragments Effects on the GPU using bucket sort
- (转载)ArrayList的contains方法
- 深入理解子类和父类之间关系
- Java 遍历 Map 对象(转)
- Poj 2387 Til the Cows Come Home
- 基于Weblogic8的JMS队列实例配置
- eclipse 没有 run as java application
- JavaSE学习笔记--Annotation
- 程序员的成长