http://en.wikipedia.org/wiki/Order-independent_transparency

Order-independent transparency

From Wikipedia, the free encyclopedia
 
 

The importance of blending order. The top produces an incorrect result with unordered alpha blending, while the bottom correctly sorts the geometry. Note lower visibility of the skeletal structure without correct depth ordering. Image from ATI Mecha Demo

Order-independent transparency (OIT) is a class of techniques in rasterisational computer graphics for renderingtransparency in a 3D scene, which do not require rendering geometry in sorted order for alpha compositing.

Description[edit]

Commonly, 3D geometry with transparency is rendered by blending (using alpha compositing) all surfaces into a single buffer (think of this as a canvas). Each surface occludes existing color and adds some of its own color depending on its alpha value, a ratio of light transmittance. The order in which surfaces are blended affects the total occlusion or visibility of each surface. For a correct result, surfaces must be blended from farthest to nearest or nearest to farthest, depending on the alpha compositing operation, over or under. Ordering may be achieved by rendering the geometry in sorted order, for example sorting triangles by depth, but can take a significant amount of time, not always produce a solution (in the case of intersecting or circularly overlapping geometry) and the implementation is complex. Instead, order-independent transparency sorts geometry per-pixel, after rasterisation. For exact results this requires storing all fragments before sorting and compositing.

History[edit]

The A-Buffer[1] is a computer graphics technique introduced in 1984 which stores per-pixel lists of fragment data (including micro-polygon information) in a software rasteriser, REYES, originally designed for anti-aliasing but also supporting transparency.

More recently, depth peeling[2] in 2001 described a hardware accelerated OIT technique. With limitations in graphics hardware the scene's geometry had to be rendered many times. A number of techniques have followed, to improve on the performance of depth peeling, still with the many-pass rendering limitation. For example, Dual Depth Peeling (2008).[3]

In 2009, two significant features were introduced in GPU hardware/drivers/Graphics APIs that allowed capturing and storing fragment data in a single rendering pass of the scene, something not previously possible. These are, the ability to write to arbitrary GPU memory from shaders and atomic operations. With these features a new class of OIT techniques became possible that do not require many rendering passes of the scene's geometry.

  • The first was storing the fragment data in a 3D array,[4] where fragments are stored along the z dimension for each pixel x/y. In practice, most of the 3D array is unused or overflows, as a scene's depth complexity is typically uneven. To avoid overflow the 3D array requires large amounts of memory, which in many cases is impractical.
  • Two approaches to reducing this memory overhead exist.
    1. Packing the 3D array with a prefix sum scan, or linearizing,[5] removed the unused memory issue but requires an additional depth complexity computation rendering pass of the geometry. The "Sparsity-aware" S-Buffer, Dynamic Fragment Buffer,[6] "deque" D-Buffer[citation needed], Linearized Layered Fragment Buffer[7] all pack fragment data with a prefix sum scan and are demonstrated with OIT.
    2. Storing fragments in per-pixel linked lists[8] provides tight packing of this data and in late 2011, driver improvements reduced the atomic operation contention overhead making the technique very competitive.[7]

Exact OIT[edit]

Exact, as opposed to approximate, OIT accurately computes the final color, for which all fragments must be sorted. For complex scenes, sorting becomes the bottleneck.

One issue with the sorting stage is low occupancy, in this case a SIMT attribute relating to the throughput and operation latency hiding of GPUs. Backwards Memory Allocation[9] groups pixels by their depth complexity to improve the occupancy and hence performance of sorting and compositing low depth complexity pixels in the context of a potentially high depth complexity scene. Up to a 3× overall OIT performance increase is reported.

Approximate OIT[edit]

Approximate OIT techniques relax the constraint of exact rendering to provide faster results. Higher performance can be gained from not having to store all fragments or only partially sorting the geometry. A number of techniques also compress, or reduce, the fragment data. These include:

  • Stochastic Transparency: draw in a higher resolution but discard some fragments. Downsampling will then yield transparency.[10]
  • Adaptive Transparency,[11] a two-pass technique where the first constructs a visibility function which compresses on the fly (this compression avoids having to fully sort the fragments) and the second uses this data to composite unordered fragments. Intel's pixel synchronization[12] avoids the need to store all fragments, removing the unbounded memory requirement of many other OIT techniques.

OIT in Hardware[edit]

  • The Sega Dreamcast games console included hardware support for automatic OIT.[13]

See also[edit]

References[edit]

  1. Jump up^ Loren Carpenter. "The A-buffer, an Antialiased Hidden Surface Method", SIGGRAPH '84 Proceedings of the 11th annual conference on Computer graphics and interactive techniques Pages 103-108, July, 1984
  2. Jump up^ Everitt, Cass (2001-05-15). "Interactive Order-Independent Transparency"Nvidia. Retrieved 2008-10-12.
  3. Jump up^ Bavoil, Louis (February 2008). "Order Independent Transparency with Dual Depth Peeling"Nvidia. Retrieved 2013-03-12.
  4. Jump up^ Fang Liu, Meng-Cheng Huang, Xue-Hui Liu, and En-Hua Wu. "Single pass depth peeling via CUDA rasterizer", In SIGGRAPH 2009: Talks (SIGGRAPH '09), 2009
  5. Jump up^ Craig Peeper. "Prefix sum pass to linearize A-buffer storage", Patent application, Dec, 2008
  6. Jump up^ Marilena Maule and João L.D. Comba and Rafael Torchelsen and Rui Bastos. "Memory-optimized order-independent transparency with Dynamic Fragment Buffer ", In Computers & Graphics, 2014.
  7. Jump up to:a b Pyarelal Knowles, Geoff Leach and Fabio Zambetta. "Chapter 20: Efficient Layered Fragment Buffer Techniques", OpenGL Insignts, pages 279-292, Editors Cozzi and Riccio, CRC Press, 2012
  8. Jump up^ Jason C. Yang, Justin Hensley, Holger Grün, and Nicolas Thibieroz. "Real-time concurrent linked list construction on the GPU", In Proceedings of the 21st Eurographics conference on Rendering (EGSR'10), 2010
  9. Jump up^ Knowles Et. Al. (Oct 2013). "Backwards Memory Allocation and Improved OIT"Eurographics Digital Library. Retrieved 2014-01-21.
  10. Jump up^ Enderton, Eric (?). "Stochastic Transparency"Nvidia. Retrieved 2013-03-12.
  11. Jump up^ Salvi Et. Al. (2013-07-18). "Adaptive Transparency". Retrieved 2014-01-21.
  12. Jump up^ Davies, Leigh (2013-07-18). "Order-Independent Transparency Approximation with Pixel Synchronization"Intel. Retrieved 2014-01-21.
  13. Jump up^ "Optimizing Dreamcast Microsoft Direct3D Performance"Microsoft. 1999-03-01.

Wikipedia : OIT history的更多相关文章

  1. CSS History

    Preface 如果只是要写程序,那的确是不需要这么麻烦,上来直接看Syntax,动手写上至少300行代码,做上3个应用程序,这门语言你也就差不多会用了,接下来不过就是模式,特殊的地方以及记住一些函数 ...

  2. Deep Learning in a Nutshell: History and Training

    Deep Learning in a Nutshell: History and Training This series of blog posts aims to provide an intui ...

  3. URI--http://zh.wikipedia.org/wiki/%E7%BB%9F%E4%B8%80%E8%B5%84%E6%BA%90%E6%A0%87%E5%BF%97%E7%AC%A6

    维基百科,自由的百科全书     在电脑术语中,统一资源标识符(Uniform Resource Identifier,或URI)是一个用于标识某一互联网资源名称的字符串. 该种标识允许用户对网络中( ...

  4. HDU 4464 Browsing History(最大ASCII的和)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4464 Problem Description One day when you are going t ...

  5. Geek to Live: Set up your personal Wikipedia

    http://lifehacker.com/163707/geek-to-live--set-up-your-personal-wikipedia Filed to: Wikipedia Captur ...

  6. Linux kernel Wikipedia

    http://en.wikipedia.org/wiki/Linux_kernel Development model The current development model of the Lin ...

  7. Fedora version history --- kernel version

    Fedora version history https://en.wikipedia.org/wiki/Fedora_version_history     Version (Code name)[ ...

  8. History API与浏览器历史堆栈管理

    移动端开发在某些场景中有着特殊需求,如为了提高用户体验和加快响应速度,常常在部分工程采用SPA架构.传统的单页应用基于url的hash值进行路由,这种实现不存在兼容性问题,但是缺点也有--针对不支持o ...

  9. 使用backbone的history管理SPA应用的url

    本文介绍如何使用backbone的history模块实现SPA应用里面的URL管理.SPA应用的核心在于使用无刷新的方式更改url,从而引发页面内容的改变.从实现上来看,url的管理和页面内容的管理是 ...

随机推荐

  1. 禁用SettingSyncHost.exe

    TASKKILL /F /IM SettingSyncHost.exe /T

  2. KMP模式匹配

    http://www.cnblogs.com/wangguchangqing/archive/2012/09/09/2677701.html nextal[j+1]=next[j]+1 KMP算法的实 ...

  3. Ubuntu中root用户和user用户的相互切换

    转:Ubuntu是最近很流行的一款Linux系统,因为Ubuntu默认是不启动root用户,现在介绍如何进入root的方法. (1)从user用户切换到root用户 不管是用图形模式登录Ubuntu, ...

  4. mysql修改表的存储引擎(myisam<=>innodb)

    查看当前数据库的所支持的数据库引擎以及默认数据库引擎 mysql> show engines; +--------------------+---------+----------------- ...

  5. Windows下进程间通信及数据共享

    进程是装入内存并准备执行的程序,每个进程都有私有的虚拟地址空间,由代码.数据以及它可利用的系统资源(如文件.管道等)组成. 多进程/多线程是Windows操作系统的一个基本特征.Microsoft W ...

  6. Java内存访问重排序笔记

    >>关于重排序 重排序通常是编译器或运行时环境为了优化程序性能而采取的对指令进行重新排序执行的一种手段. 重排序分为两类:编译期重排序和运行期重排序,分别对应编译时和运行时环境. > ...

  7. onSaveInstanceState(Bundle outState)的调用时机

    原文摘自: http://handsomeliuyang.iteye.com/blog/1407044 Activity的方法onSaveInstanceState(Bundle outState), ...

  8. BZOJ 1821 JSOI2010 部落划分 Group prim

    Description 聪聪研究发现,荒岛野人总是过着群居的生活,但是,并不是整个荒岛上的所有野人都属于同一个部落,野人们总是拉帮结派形成属于自己的部落,不同的部落之间则经常发生争斗.只是,这一切都成 ...

  9. env

    shell环境变量以及set,env,export的区别 原文链接 一.shell环境变量的分类以及set env export的区别: set:显示(设置)shell变量 包括的私有变量以及用户变量 ...

  10. Xamarin Android提示内存溢出错误

    Xamarin Android提示内存溢出错误 错误信息:java.lang.OutOfMemoryError, Consider increasing the value of $(JavaMaxi ...