使用directx11实现高质量图形效果@CGDC4
2011-08-07 13:12
483 查看
High Quality Graphic Effects using DX11@CGDC4
这个文章是让我感觉到nv诚意的一个文章,巨多的到中国来做presentation的都是把gdc上的文章再讲一遍,nv则讲了不少新的东西。
主力也都到场,也分享了很多知识。
-----------------------------------------------------------------------------------------------------------------------------------------------------
DirectCompute
direct compute是dx11相比之前版本的最根本性的变化。
以更加接近cpu的方式来做运算:需要改变思维了,天空可以说变得更宽了做一些通用运算
可以运行在任意线程上(也就脱离了graphics pipeline的限制)
对d3d资源的访问也没有变少
访问buffer如同访问内存,不再像原来是sampling的方式,不过memory layout和访问地址的计算也要自己搞了
atomic operation支持,但是也是有额外消耗的
用来做thread之间的数据交互
memory的一些东东
内存的效率上和cpu上类似,也要关注cache效率等但是如果读取方式类似texture,那就用texture的方式读取内存是最好的
指令执行的时候遇到branch也会有mask,但不会像cpu做的那么好了
理论上thread是格子运行的,实际上硬件里是论组(叫warp)来执行的nv上warp size是32
context switch&dependency如果数据有dependency的话,会有一些stall来确保之前的数据有被完成写入,后面的会read到正确的数据。
compute mode和graphci mode的切换会造成context switch的开销
-----------------------------------------------------------------------------------------------------------------------------------------------------
HBAO也是一种screen space ambient occlusion,以前nv的ppt里面也介绍了。直接看direct compute的优势吧,graphics pipeline在做高斯blur这种卷积运算的时候texture的访问量是pixel_num*kernel_size但是在direct compute中因为有shared memory的存在,一个thread group中存在大量的可以共享的texture 访问,那么就可以通过shared memory进行共享,那么issue出去的实际sample量就会大大降少。实际做下来的数据是:
可以说优势还是很明显的,这个就是一个典型例子,硬件在频率没有发生变化,但是在算法级别上有提升,仍旧会带来巨大的不同,这个也是pc的硬件能力要超越console很多才会打平手的原因所在。
这样的计算不用经过rasterizer,所以很适合compute shader来做的。
-----------------------------------------------------------------------------------------------------------------------------------------------------
OpacityMapping
这样一个效果,很多particle在里面。
常用技术就略过吧,里面几个做法和思路挺好的:
low res buffer render这个是一个最常用的做high fill rate feature优化的方法,但是大家都受low res depth和high res depth不匹配的困扰,在uncharted2这样的游戏甚至都存在
nv的解决方法是:nearest depth up sampling,把high res depth和low res depth做比较,几个点中肯定会有matching的点,就用这个
使用GatherRed可以很快的sample 2x2的low res depth
-----------------------------------------------------------------------------------------------------------------------------------------------------
StochasticTransparency
主要讲一个order independent transparency算法,当然也是基于dx11 feature的。传统的一个做法是screen door transparency,但是噪点比较严重。stochastic transparency的思路是和screen door transparency一个方向,使用sub pixel来做transparency,但是实践上是使用8xmsaa buffer,使用coverage mask(也就是SV_Coverage)滤掉一部分sub pixel,剩下的比如3个pixel就sum_color*(3.0f/8)即可。效果效率都比较好,实现起来也简单。-----------------------------------------------------------------------------------------------------------------------------------------------------
FXAA&Nsight这个没有太多好说的,fxaa速度比mlaa快,但是实际用下来效果没有mlaa好nsight逐渐变成nv主打,即便有些问题解决也是时间问题,dx9永远不会支持了
这个文章是让我感觉到nv诚意的一个文章,巨多的到中国来做presentation的都是把gdc上的文章再讲一遍,nv则讲了不少新的东西。
主力也都到场,也分享了很多知识。
-----------------------------------------------------------------------------------------------------------------------------------------------------
DirectCompute
direct compute是dx11相比之前版本的最根本性的变化。
以更加接近cpu的方式来做运算:需要改变思维了,天空可以说变得更宽了做一些通用运算
可以运行在任意线程上(也就脱离了graphics pipeline的限制)
对d3d资源的访问也没有变少
访问buffer如同访问内存,不再像原来是sampling的方式,不过memory layout和访问地址的计算也要自己搞了
atomic operation支持,但是也是有额外消耗的
用来做thread之间的数据交互
memory的一些东东
Memory Space | Speed | Visibility |
Global Memory(Buffers, Textures, Constants) | Longest Latency | All Threads |
Shared Memory(groupshared) | Fast | SingleGroup |
Local Memory(Registers) | Very Fast | Single Thread |
指令执行的时候遇到branch也会有mask,但不会像cpu做的那么好了
理论上thread是格子运行的,实际上硬件里是论组(叫warp)来执行的nv上warp size是32
context switch&dependency如果数据有dependency的话,会有一些stall来确保之前的数据有被完成写入,后面的会read到正确的数据。
compute mode和graphci mode的切换会造成context switch的开销
-----------------------------------------------------------------------------------------------------------------------------------------------------
HBAO也是一种screen space ambient occlusion,以前nv的ppt里面也介绍了。直接看direct compute的优势吧,graphics pipeline在做高斯blur这种卷积运算的时候texture的访问量是pixel_num*kernel_size但是在direct compute中因为有shared memory的存在,一个thread group中存在大量的可以共享的texture 访问,那么就可以通过shared memory进行共享,那么issue出去的实际sample量就会大大降少。实际做下来的数据是:
1280x720 | CS | PS | CS/PS |
Full-res AO | 426 fps | 255 fps | 1.67x |
Half-res AO | 593 fps | 496 fps | 1.20x |
1600x900 | CS | PS | CS/PS |
Full-res AO | 311 fps | 168 fps | 1.85x |
Half-res AO | 461 fps | 368 fps | 1.25x |
这样的计算不用经过rasterizer,所以很适合compute shader来做的。
-----------------------------------------------------------------------------------------------------------------------------------------------------
OpacityMapping
这样一个效果,很多particle在里面。
常用技术就略过吧,里面几个做法和思路挺好的:
low res buffer render这个是一个最常用的做high fill rate feature优化的方法,但是大家都受low res depth和high res depth不匹配的困扰,在uncharted2这样的游戏甚至都存在
nv的解决方法是:nearest depth up sampling,把high res depth和low res depth做比较,几个点中肯定会有matching的点,就用这个
使用GatherRed可以很快的sample 2x2的low res depth
-----------------------------------------------------------------------------------------------------------------------------------------------------
StochasticTransparency
主要讲一个order independent transparency算法,当然也是基于dx11 feature的。传统的一个做法是screen door transparency,但是噪点比较严重。stochastic transparency的思路是和screen door transparency一个方向,使用sub pixel来做transparency,但是实践上是使用8xmsaa buffer,使用coverage mask(也就是SV_Coverage)滤掉一部分sub pixel,剩下的比如3个pixel就sum_color*(3.0f/8)即可。效果效率都比较好,实现起来也简单。-----------------------------------------------------------------------------------------------------------------------------------------------------
FXAA&Nsight这个没有太多好说的,fxaa速度比mlaa快,但是实际用下来效果没有mlaa好nsight逐渐变成nv主打,即便有些问题解决也是时间问题,dx9永远不会支持了
相关文章推荐
- 使用directx11实现高质量图形效果@CGDC4
- Android学习笔记_42_各种图形的炫酷效果的实现和使用
- DirectX11 使用Cube Mapping 立方体环境贴图实现天空、物体反射效果
- Android学习笔记_42_各种图形的炫酷效果的实现和使用
- DirectX11 使用几何着色器实现公告板效果
- android学习笔记---59_各种图形的使用介绍,android炫酷效果的实现
- 弹出框使用字符序列表示非字符,实现换行等效果:
- 使用jQuery实现select级联效果
- Android中如何使用ViewPager实现类似laucher左右拖动效果 3ff8
- 使用jQuery实现滑过图片展示信息效果
- 使用javascript和css来实现textbox水印效果
- 使用PHP对象实现分页效果!
- 使用DrawerLayout实现抽屉效果
- Android使用CountDownTimer实现倒计时效果
- 使用CSS3配合IE滤镜实现渐变和投影的效果
- Android 使用Scroller实现绚丽的ListView左右滑动删除Item效果
- 使用ViewPager+Fragment实现选项卡切换效果
- Android中使用ViewPager实现屏幕页面切换和页面切换效果
- 使用DrawerLayout实现QQ5.0侧拉菜单效果
- 使用 jQuery & CSS3 实现优雅的手风琴效果