半透明渲染新技术摘录
来源:互联网 发布:淘宝新店如何经营规划 编辑:程序博客网 时间:2024/06/05 04:18
ATI的头发渲染方案:
1. 在网格制作阶段对三角形排序,使头发的三角形大致按从下到上排序。
2. 渲染时使用需要以下4个pass
3. 最终的渲染效果
此方案不需要实时的三角形排序,效果也比较理想。但是4个pass开销比较大。Pass1和pass2可以合并成一个pass,最终可能需要三个pass。
经试验,此方法非常适合头发这种大部分不透明,少部分半透明的物体渲染。效果相当理想。同时应该也比较适合大面积植被渲染。
参考:
PracticalReal-Time Hair Rendering and Shading
hairrendering and shading
depth peeling
1. depth peeling可以实现像素正确的半透明渲染,不需要排序。
2. 开销是需要两张depth buffer。渲染过程需要N个pass,N是半透明的层数。改进的Dual Depth Peeling算法需要N/2+1个pass。
Depth peeling可能带来的问题:
1. 效率降低,且开销不稳定。(pass数量依赖于相机角度,骨骼动画等)
2. 方案本身带来的复杂性。(如何判断当前有多少层半透明,遮挡查询?)
3. 无已有的可参考的产品,只有技术demo。
Depth peeling是近来研究比较热的半透明渲染方案,其中基于链表的dx11实现是一个不小的突破。将来有可能成为比较实用的方案。
参考:
InteractiveOrder-Independent Transparency
OrderIndependent Transparency with Dual Depth Peeling
http://users.cs.uoi.gr/~abasilak/bibs/Depth_Peeling.html
http://www.cs.uoi.gr/~fudos/siggraph2011.html
http://developer.amd.com/samples/demos/pages/atiradeonhd5800seriesrealtimedemos.aspx
基于lineprimitive的头发渲染
用lineprimitive作为头发渲染的几何图元,使用GPU对图元排序,opacity map实现自阴影。属于比较前沿的头发渲染研究领域。可以作为将来潜在的研发方向。
参考:
GPUPrimitives-Case Study: Hair Rendering
hairanimation and rendering in nalu demo
Real-Time Approximate Sortingfor Self Shadowing and Transparency in Hair Rendering
shaderX5 2.8 ZT-buffer algorithm
总体思想是用两张rendertarget(ZT-buffer)保存每层半透明的透明度和深度。渲染半透明物体时先采样ZT-buffer,采样得到的数据和当前渲染的数据放在一起排序。然后再写入ZT-buffer。
最后画一个screenquad渲染所有透明物体
优点:
1. 简单
2. 无需排序
存在的问题:
1. 需要硬件支持在ps中同时读写同一张rendertarget(nv没有明确的文档说可以)
2. 两张render target只能实现三层半透明
3. 文中的方法半透明物体只能根据透明度进行混合,无法计算光照。
如果需要计算光照,需要对算法扩展。可能需要三张render target。
鉴于以上三点问题,次方法很难用到实际工程中去。
shaderX6 3.7 robust order-independent transparency viareverse depth peeling
总体上是对depthpeeling算法的改进。将从前到后的绘制顺序,改进为从后到前的绘制顺序。减少render target的使用,进而节约一些显存。
GPU Pro 3.3 Alpha Blending as a Post-Process
提出一种场景中大量半透明面片的渲染方法,用于游戏Pure。
该方法分为四部步:
1. 渲染场景中不透明的部分
2. 将半透明物体的透明度渲染到一张render target,生成一张屏幕空间的半透明mask。
3. 使用镂空渲染半透明的物体
4. 用半透明mask将不透明的场景和镂空的场景混合起来。
该方法较适合室外大量植被的渲染,可以得到柔和的边缘,效率高。但是得到的半透明不是像素正确的。
shaderx7 2.7 deferred rendering transparency
interlace tranparency 或称 screen door transparency。思想是以像素间隔的方式在G-buffer上保存不透明和半透明物体的信息。然后在shading阶段将相邻像素根据透明度混合起来。
该方法在实现延迟渲染的初期就仔细调研过,它的优点是可以以统一的方式处理半透明和不透明。但缺点也同样比较致命:
如果以4个像素的方块作为一个混合单元,只能支持3层半透明。
如果光照环境和材质细节较复杂,特别是高光较强时,可以看出明显的颗粒感。且透明层数越多效果越差。
Shaderx6 3.5 deferred rendering using a stencil routedk-buffer
使用multi-sample的RT保存最多八层的半透明信息,使用stencil-buffer作为对sub-pixel操作的手段。最后用后处理的方式将多层半透明的像素混合起来。
优点:
1. 只需要一个geometry pass,和一个post-process pass。
2. 效率比depth peeling高。
缺点:
1. 需要dx10支持(在不开msaa的情况下渲染到multi-sample的RT,以及需要在shader中采样单独采样multi-sampleRT的sub-pixel。)
2. 最多8层半透明。
3. 难于实现每层材质各不相同的半透明。
相关参考:
StencilRouted A-Buffer
http://www.humus.name/index.php?page=3D&ID=76
Stochastic Transparency
使用multi-sampledRT,每层半透明的颜色随机保存到当前fragment的若干sub-pixel,随机值与该像素的透明度成正比。最终在整体水平上得到近似正确的半透明效果。
优点:
1. 无需排序
2. 内存占用可控(一张multi-sampled RT)
3. 只需一个pass(有一些改进的方法需多一个全屏pass)
缺点:
1. 随机算法,产生噪点
2. 需要DX 10.1支持(需要存取multi-sampled RT的sub-pixel)
http://enderton.org/eric/pub/StochasticTransparency_I3D2010.pdf
Deep deferred shading
使用多个g-buffer (deep g-buffer),渲染过程与depth peeling相似,渲染一遍,得到一层深度。这一层作为depth buffer,再渲染下一层。不同之处在于deep g-buffer的使用。即使用多个g-buffer保存多层半透明的信息。这样就可以使用延迟光照的方法渲染半透明。但代价是大量的显存占用。
http://www.humus.name/index.php?page=3D&ID=75
- 半透明渲染新技术摘录
- 半透明渲染新技术摘录
- 半透明渲染新技术摘录
- Direct3D 半透明渲染
- 半透明渲染那些事儿
- 延迟渲染技术文献摘录
- 延迟渲染技术文献摘录
- 延迟渲染技术文献摘录
- unity 半透明与不透明对象渲染顺序
- 开启HDR时,半透明渲染画面异常的解决方案
- 新技术
- 新技术
- 新技术
- 新技术
- 半透明AlphaBlend函数简析&SOUI在GDI渲染下text控件不能设置半透明解决方案
- 半透明
- [摘录]How browsers work之页面渲染流程
- 摘录
- 在TAO平台运行一个简单CORBA实例
- 树状数组 求解 逆序数对
- js获得单选按钮的值
- Clustered PHP - DC PHP 2009
- Hadoop源代码分析【RPC】
- 半透明渲染新技术摘录
- jjjj
- Dos下获取日期和时间
- 阴影锥原理与展望—真实的游戏效果的实现
- 使用共享中断
- 最小化当前应用程序
- jni获取mac地址的问题  -  棒槌网@Android开发论坛 - Powered by phpwind
- Container
- 源码网站推荐