http://blog.csdn.net/garuda/article/details/6541579

ATI 的头发渲染方案:

1.       在网格制作阶段对三角形排序,使头发的三角形大致按从下到上排序。

2.       渲染时使用需要以下 4 个 pass

3.       最终的渲染效果

此方案不需要实时的三角形排序,效果也比较理想。但是 4 个 pass 开销比较大。 Pass1 和 pass2 可以合并成一个pass ,最终可能需要三个 pass 。

经试验,此方法非常适合头发这种大部分不透明,少部分半透明的物体渲染。效果相当理想。同时应该也比较适合大面积植被渲染。

参考:

Practical Real-Time Hair Rendering and Shading

hair rendering 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 实现是一个不小的突破。将来有可能成为比较实用的方案。

参考:

Interactive Order-Independent Transparency

Order Independent 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

基于 line primitive 的头发渲染

用 line primitive 作为头发渲染的几何图元,使用 GPU 对图元排序, opacity map 实现自阴影。属于比较前沿的头发渲染研究领域。可以作为将来潜在的研发方向。

参考:

GPU Primitives-Case Study: Hair Rendering

hair animation and rendering in nalu demo

Real-Time Approximate Sorting for Self Shadowing and Transparency in Hair Rendering

shaderX5 2.8 ZT-buffer algorithm

总体思想是用两张 render target ( ZT-buffer )保存每层半透明的透明度和深度。渲染半透明物体时先采样 ZT-buffer ,采样得到的数据和当前渲染的数据放在一起排序。然后再写入 ZT-buffer 。

最后画一个 screen quad 渲染所有透明物体

优点:

1.       简单

2.       无需排序

存在的问题:

1.       需要硬件支持在 ps 中同时读写同一张 render target ( nv 没有明确的文档说可以)

2.       两张 render target 只能实现三层半透明

3.       文中的方法半透明物体只能根据透明度进行混合,无法计算光照。

如果需要计算光照,需要对算法扩展。可能需要三张 render target 。

鉴于以上三点问题,次方法很难用到实际工程中去。

shaderX6 3.7 robust order-independent transparency via reverse depth peeling

总体上是对 depth peeling 算法的改进。将从前到后的绘制顺序,改进为从后到前的绘制顺序。减少 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 routed k-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-sample RT 的 sub-pixel 。)

2.       最多 8 层半透明。

3.       难于实现每层材质各不相同的半透明。

相关参考:

Stencil Routed A-Buffer

http://www.humus.name/index.PHP?page=3D&ID=76

Stochastic Transparency

使用 multi-sampled RT ,每层半透明的颜色随机保存到当前 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

半透明渲染新技术摘录相关推荐

  1. CSharpGL(22)实现顺序无关的半透明渲染(Order-Independent-Transparency)

    +BIT祝威+悄悄在此留下版了个权的信息说: CSharpGL(22)实现顺序无关的半透明渲染(Order-Independent-Transparency) 在 GL.Enable(GL_BLEND ...

  2. Unity shader的StencilTest、ZTest与半透明渲染

    着色器完成顶点编程和片元编程操作之后得到的颜色值,最后像素能不能够渲染出来还要经过最后一步逐片元操作,其中包括模板测试,深度测试等,只有通过了测试的像素点颜色才有资格进入颜色缓冲进行覆盖写入或者与已有 ...

  3. unity 让一个数按一秒累加_万物皆数—深挖UWA Benchmark之渲染篇

    这个世界上的很多问题,其本质上都是数学问题,性能优化就是如此. 在上个月刚刚结束的UWA DAY 2019中,我们提出了UWA Benchmark.这是一个通过大量测试数据,逐步迭代分析出性能指标与性 ...

  4. qt 读取gif一帧_译:Unreal渲染一帧详解(Unreal Frame Breakdown)

    译者前言: 上一篇文章,我补充翻译了"How Unreal renders 1 Frame?"的第三篇,在找资料过程中,又发现了一篇挺好的文章,同样是基于"How Unr ...

  5. 4毛发渲染及着色方法

    一个实用的实时毛发渲染及着色方法 Thorsten scheuermann ATI Resarch,Inc. 翻译:潘曦 (译文里的(pancy:XXX)为译者注) 介绍: 我们提出了一个使用多边形模 ...

  6. 一个实用的实时毛发渲染及着色方法

    一个实用的实时毛发渲染及着色方法 Thorsten scheuermann ATI Resarch,Inc. 翻译:潘曦 (译文里的(pancy:XXX)为译者注) 介绍: 我们提出了一个使用多边形模 ...

  7. 【笔记】unity渲染类名词术语概念总结(30个点)

    1.线性追踪 亮度值是一个空间函数,而光线追踪做的事情其实是求这个函数在视线线段上的线积分 结果为:光线在视线方向上作用值之和 视线上的所有采样点的亮度之和能用来表示光线在介质中散射的效果 2.光线的 ...

  8. 如何用VB实现半透明控件

    本代码演示半透明控件的实现过程.如果是自定义控件,实现起来非常简单,如果是系统控件,则要复杂一些.如果系统控件支持属主画,跟自定义控件思路完全是一样的,只不过代码是写在子类化的过程里. 先建一个标准E ...

  9. 渲染TA实战:眼球的渲染

    哈喽,大家好,我是搜狐畅游引擎部的TA老胡,很高兴有机会和大家分享一下前一段时间工作和学习的成果. 前一阵,我做技术支持的项目提出,想要一个效果好一点的,眼睛的解决方案. Unity自带的渲染部分,包 ...

最新文章

  1. solr异常--Expected mime type application/octet-stream but got text/html.
  2. 【ORACLE】20道Oracle运维常见面试题
  3. 毕业即失业?你到底在焦虑什么
  4. JAVA程序设计----函数基础2
  5. firewall mysql端口_Centos7 firewall开放3306端口
  6. 动态网页开发技术(二):Servlet
  7. 【LeetCode】33. Search in Rotated Sorted Array 解题小结
  8. Vue.js-----轻量高效的MVVM框架(二、Vue.js的简单入门)
  9. Stata | 导入导出文件
  10. H5游戏开发-搭建开发环境
  11. 自动化测试框架基石工程
  12. 程序员毕业去大公司好还是小公司好?
  13. IllegalArgumentException: error Type referred to is not an annotation type:
  14. 服务器设置temp文件夹权限,服务器windows temp 权限设置
  15. 如何用微信小程序,每天给自己赚个鸡腿?
  16. Mac系统升级,降级PHP出现的问题解决办法
  17. 水处理设备网关,生活污水处理设备网关。
  18. 【论文导读】Learning to Localize Sound Source in Visual Scenes
  19. python魔法方法长文详解
  20. 100999凑整到万位进一_大数与凑整教学实录

热门文章

  1. python文件のpandas操作
  2. 睡眠多少分钟一个循环_睡眠分为几个阶段每个阶段大概多少时间?
  3. vlookup使用步骤_使用vlookup出错,看看原因多为这几个!快来看看!
  4. linux rc文件是什么,linux通常使用的 rc 和 .(点)文件
  5. python的调试器_玩转Python调试器
  6. 模数转换实验中断方式c语言,DSP实验报告--模拟信号的AD+FFT变换
  7. 玉林中专计算机专业,玉林最好的中专学校有哪些 十大中专学校排名
  8. 响应信息有json和html,获取HTML响应而不是Json响应
  9. java mapper.readtree_java - 杰克逊的readValue和readTree:何时使用哪个? - 堆栈内存溢出...
  10. 模拟人生畅玩版android,模拟人生畅玩版手机版