PCEVA,PC绝对领域,探寻真正的电脑知识

标题: DX11,DX12对比---2 [打印本页]

作者: SCE-PhyreEngine    时间: 2016-3-13 23:38
标题: DX11,DX12对比---2
上次从基本原理上说明了DX12和DX11的区别。其实DX12开放了底层的开发性,将以前DX11封闭的受到驱动左右的设备上下文开放给开发者自己决定,确实提升了很大的效率。大家都应该见识过3D Mark那个API功能对比测试。其实DX12的性能表现不只于DrawCall。
    不过话说回来,DX12表现出多少性能提升就和使用DX12的程序人员有很大关系了。因为光ID3D12PipelineState和ID3D12GraphicsCommandList就需要程序人员对这两个有深入理解才行。因为DX12相比DX11对程序开发人员来说是种全新的API。对于DX12不能像DX11那样用什么才去查API文档。
    下面我们对比下DX 12和DX11下的DirectCompute粒子的性能。(不知道DirectCompute是什么意思的自己查下详细的吧
    因为从DX11/Win7时代开始DirectCompute 微软家的GPU通用计算技术(也是开发标准不是私有的)GPU通用计算技术,简单的说就是让GPU(显卡核心)处理图形数据之外的其他数据。越来越越得到业内的认可和重视,DX11时代的一些游戏也用到了DirectCompute 。DirectCompute在游戏中主要用于物理加速和动态模拟。
    这次我们就用DirectCompute Shader分别在DX12 DX11下完成一个银河星爆粒子群,做一个来比对相同粒子数目下(当然同屏)DX12和DX11的各自效率。
    首先我们确保粒子数目都是一样的
DX12    [attach]347360[/attach]DX11 [attach]347361[/attach]
   使用相同的DirectCompute Shader
    [attach]347362[/attach][attach]347363[/attach]
    由于同屏粒子数也不少了,我正好是4K显示器,那就把分辨率锁死
    DX12 [attach]347364[/attach]DX11 [attach]347365[/attach]
    要注意的是,DX12下DirectCompute 的相关流水线状态要单独管理
    [attach]347366[/attach]
      下面是运行结果:
       DX11:
       [attach]347367[/attach]
      DX12:
      [attach]347368[/attach]
DX12 29帧,DX11 18帧,提升不小。
     测试环境:Win10 64Bit  ,i7 5930K+ R9 FuryX
     过两天上传可执行程序,周末上传整理好的代码

   

作者: SCE-PhyreEngine    时间: 2016-3-13 23:42
因为我不确定96000个粒子数目大伙的显卡能否都能跑过,先让fastone用R9 290跑一跑
作者: SCE-PhyreEngine    时间: 2016-3-13 23:43
标题写错了!!!,应该是DX12,DX11对比
作者: SCE-PhyreEngine    时间: 2016-3-13 23:45
下期就会详细讲到为什么DX11和DX12会产生同效果下性能的较大差异。下期开始会讲的很详细,内容会很多
作者: 指原莉乃    时间: 2016-3-14 00:36
用380的c#程序猿路过顶帖
作者: mrplplplpl    时间: 2016-3-14 08:11
顶楼主技术贴,做个记号,慢慢看
作者: fastone    时间: 2016-3-14 09:44
SCE-PhyreEngine 发表于 2016-3-13 23:42
因为我不确定96000个粒子数目大伙的显卡能否都能跑过,先让fastone用R9 290跑一跑 ...

[attach]347435[/attach]
你可以上传 ,目前290是22FPS CPU依然是3770

作者: 笨啦灯    时间: 2016-3-14 09:44
好好看,好好学
作者: NOIP117    时间: 2016-3-14 10:14
发布了exe自己也试试
作者: applelovekula    时间: 2016-3-14 10:41
看不懂。。。。。。。。
作者: fastone    时间: 2016-3-14 10:46
NOIP117 发表于 2016-3-14 10:14
发布了exe自己也试试

你要先下载好VS 2015开发套件,这代码是在VS 2015下生成的,我看了代码了

作者: NOIP117    时间: 2016-3-14 10:50
fastone 发表于 2016-3-14 10:46
你要先下载好VS 2015开发套件,这代码是在VS 2015下生成的,我看了代码了

好吧,不过好久没玩vs了

作者: 蜡笔小新    时间: 2016-3-14 11:04
技术贴 mark一下
作者: johnnyqr    时间: 2016-3-14 11:44
楼主研发哥啊
作者: fastone    时间: 2016-3-14 12:36
本帖最后由 fastone 于 2016-3-14 12:38 编辑
piplpoly 发表于 2016-3-14 11:27
但是目前DX11开发的游戏,有多少能让顶级卡达不到流畅呢?
再说为了降低成本,游戏开发商选择最稳定的开发平台 ...

就目前,国外那几个开发商的新引擎都是针对了DX12做的,包括DICE  CRYTEK等,最主要的不是DX12问题,是你做的游戏足够吸引玩家不,DX12只是一个底层API,和游戏本身是否玩家买涨关系不大,DX12更多的是引擎组和技术支持部门去判断会占用开发成本多少,DX12目前除了专门针对主机和几个大公司的工作室能去搞外,其余的PC游戏开发商肯定不会优先考虑,因为开发难度是很高的,且不友好,程序员自身必须还得去了解硬件设计,这点是以前DX API 开发所没有的

最后DX12 API和DX11 API是两个不同层面的API,DX12加入的很多新特性完全是考虑效率,利用率和特效密度,而不是单纯增加一个技术特效达到什么,这点DX11是比不上DX12,SCE开发工程师在帖子中就已经说明了这点

作者: fastone    时间: 2016-3-14 13:25
piplpoly 发表于 2016-3-14 13:02
dx9c dx10 dx11
DX11 最大的功能体现就是曲面积分,效果就是带来更好的画面
DX9C是HDR 高光渲染

DX12带来的是资源利用率提高,立体平铺资源等很多高级技术,纯硬件编程模式+并行渲染技术,是以前API没有的

作者: fastone    时间: 2016-3-14 13:33
其实微软公布的功能只是面向效率,特效这个是必须看他开发文档的,微软对外只宣传效率,高效性和更好的资源利用,是微软针对DX12的重点宣传点。
作者: 小钻风    时间: 2016-3-14 15:34
DX12最大的优势就是开发者可以直接面对底层进行控制,不必再经过各种负优化的驱动程序,最大提升运行效率
能让你的卡多跑点帧数何乐不为
作者: fastone    时间: 2016-3-14 15:50
本帖最后由 fastone 于 2016-3-14 15:52 编辑

DX12并非单纯提高效率,AO 光照 体素散射这些都是加入,最明显的变化是你程序员直接使用shader加强画质,而不是靠单纯功能去做。DX12让程序员必须掌握的知识面要更广了,其次是对图形渲染技术的理解要求更高了,但是对于开发习惯了主机 的厂商,这个没难点,甚至更轻松了,因为WINDOWS游戏开发相对主机开发环境来说,是开放的。
作者: 马克吐槽    时间: 2016-3-14 16:16
fastone 发表于 2016-3-14 15:50
DX12并非单纯提高效率,AO 光照 体素散射这些都是加入,最明显的变化是你程序员直接使用shader加强画质,而 ...

简单说就是更接近底层开发吧,硬件资源使用效率更高。好像前面有同学这么说过了

作者: ft5555    时间: 2016-3-14 16:27
目前看到的关于dx12和dx11对比  效率上的提升感觉主要是cpu这部分的。

至于gpu效率优化,由显卡驱动优化更加偏向厂商优化了。 不知道对不对?
作者: FlankerWang    时间: 2016-3-14 16:50
小钻风 发表于 2016-3-14 15:34
DX12最大的优势就是开发者可以直接面对底层进行控制,不必再经过各种负优化的驱动程序,最大提升运行效率
...

各种渣优化开发公司焦作人

作者: fastone    时间: 2016-3-14 21:52
马克吐槽 发表于 2016-3-14 16:16
简单说就是更接近底层开发吧,硬件资源使用效率更高。好像前面有同学这么说过了
...

是的,DX12一部分是为了效率,从DX12_0开始到DX12_3是增加渲染技术,虽然听起来不像以前那样增加单独一个特效技术,但是他会让程序员自行判断加入更多的新渲染技术,而不是微软自身来规定应该用那些特效,不应该用哪些特效,最大的好处就是并行渲染技术可以使用延迟渲染,这样整个渲染特别是光照、粒子呈现将是更真实的。

作者: Ericov    时间: 2016-3-15 12:31
劳拉起床开了DX12表现好像更糟糕了
作者: aixiangsui    时间: 2016-3-16 10:58
dx9之后天天谈效率
作者: fastone    时间: 2016-3-16 19:13
Ericov 发表于 2016-3-15 12:31
劳拉起床开了DX12表现好像更糟糕了

渲染质量和密度比DX11好,但是DX12新特性,一个都没用

作者: haierccc    时间: 2016-3-16 19:40
看不懂,但仍然要顶一个!
作者: 大号跳蚤    时间: 2016-3-16 23:12
不懂代码,但原理懂,效率提升楼主也用实例演示了,干货,楼主辛苦了 ,期待下篇 。

楼主在用 @fastone 帐号回复大家吗?
作者: fastone    时间: 2016-3-17 09:33
本帖最后由 fastone 于 2016-3-17 09:34 编辑
大号跳蚤 发表于 2016-3-16 23:12
不懂代码,但原理懂,效率提升楼主也用实例演示了,干货,楼主辛苦了 ,期待下篇 。

楼主在用 @fastone 帐 ...

他要到各个游戏厂家做技术支持,还要维护开发PhyreEngine,他只是发帖而已,不做回复。  只是我们一起在研究DX12和Vulkan而已

作者: fastone    时间: 2016-3-29 15:21
DX12的几个特性:Resource Blinding:实时的数据缓冲处理。。就是将什么顶点了,索引了,纹理了,模型数据直接交给图形流水线让流处理器直接处理,这步以前在DX11的时候是驱动程序来管理的。现在在DX12里程序员自己安排,看谁有本事,谁有本事谁效率就高。同硬件下

Conservative Rasterization:保守光栅。这个功能目前我发现和GI还有AO效果直接挂钩的。这个技术主要不是提升显卡的表现,而是用户能看到的最终显示效果。而且这个特性可以做Hybrid Ray Traced Shadows混合光线追踪阴影,不过我没搞

Raster Order Views:我和一些搞DX12的个人理解是光栅时序,主要影响动态光照效果

Asynchronous compute shaders:就是ACE表现的方面。这个功能对于普通消费者来说相当重要,就是在于提高最终的硬件表现,而且这个提升还不会仅限于最新的显示效果。
DX12和DX11重要的不同点是DX11在处理数据的时候要先将数据信息交给驱动,由驱动程序协管流处理处理。而DX12上面我说了是开发人员直接使用图形流水线让流处理器处理

而且DX12的多线程并行支持力远强于DX11

A卡DX12下效率高不仅是A卡Asynchronous compute shaders方面是全硬件架构支持的,A卡还支持FCR(快速保守光栅化)和UAV Ordering(乱序访问视图排序),前者能提高硬件访问速度,后者可以解决三个问题:顺序无关透明化(OIT)、复杂场景抗锯齿(比如头发或者篱笆)、透明效果阴影。
所以光栅访问速度和相关计算效率很高

DX12不仅可以做到同效果下效率强于DX11,也可以做到同效率下也就是同帧数当然也可以在帧数比DX11还高的情况下实现比DX11更好的效果。这主要取决于开发人员。

国外的开发人员的思想,待遇地位和国内很不一样,国外厉害的程序工程师地位相当高,不像国内程序员大都混得很惨。所以国外的程序开发人员钻研技术的时间更长,他们更喜欢接触使用更底层的API来发挥他们的实力,所以DX12也必然会受到开发人员欢迎(国内端游万年DX9国内早已经除外了)。

作者: fastone    时间: 2016-3-29 15:22
[attach]350267[/attach]
[attach]350268[/attach]

像以上两张图,配合DX12相关低层光栅技术和DX12并行异步技术的PBR效果。R9 380X和GTX 970等级段的显卡就能跑60帧了


作者: 板砖财    时间: 2016-3-29 15:31
fastone 发表于 2016-3-29 15:22
像以上两张图,配合DX12相关低层光栅技术和DX12并行异步技术的PBR效果。R9 380X和GTX 970等级段的显卡就 ...

栏杆外面的焦外效果是贴图吗?


作者: fastone    时间: 2016-3-29 17:41
板砖财 发表于 2016-3-29 15:31
栏杆外面的焦外效果是贴图吗?

那个确实是贴图。。

作者: 板砖财    时间: 2016-3-29 23:48
fastone 发表于 2016-3-29 17:41
那个确实是贴图。。

看来这技术15年前TVB港剧到现在没有本质改变

作者: SCE-PhyreEngine    时间: 2016-3-31 00:18

fastone,谁告诉你的那是贴图,那也是实时渲染出来的好不
作者: SCE-PhyreEngine    时间: 2016-3-31 00:20
Ericov 发表于 2016-3-15 12:31
劳拉起床开了DX12表现好像更糟糕了

N卡保守光栅功能支持的不错,如果古墓崛起花些时间搞个配合DX12光栅的VXAO和GI那么效率和效果都会强一个档次,不过他们貌似没这样做。。。。

作者: SCE-PhyreEngine    时间: 2016-3-31 00:22
piplpoly 发表于 2016-3-14 15:34
所以对于DX11 没有什么画质提升点,对于游戏商和用户来说,速度快了,但是在显卡性能越来越快的条件下,
DX12  ...

DX12画质问题,FastOne帮我贴了一些运行效果图。其实DX12对比DX11一句话总结,虽然俗了点:同效果DX12效率要强于DX11,同效率DX12用好了比DX11效果会好很多

作者: fastone    时间: 2016-3-31 02:22
SCE-PhyreEngine 发表于 2016-3-31 00:18
fastone,谁告诉你的那是贴图,那也是实时渲染出来的好不

别个说的是围栏外的东西,别说实时动态缩镜渲染- -

作者: abble    时间: 2016-3-31 19:42
本帖最后由 abble 于 2016-3-31 19:48 编辑
fastone 发表于 2016-3-29 15:21
DX12的几个特性:Resource Blinding:实时的数据缓冲处理。。就是将什么顶点了,索引了,纹理了,模型数据 ...

国内也应该进步了,毕竟现在主机也支持DX12了,不过最主要还有一点和市场有关的,主流游戏市场要照顾好大多数的机子,所以你没有看有300 500元战LOL的帖子吗?反过来说也是一种跟不上时候的悲哀。

作者: fastone    时间: 2016-3-31 20:04
其实应该说DX12开始学习游戏机开发模式了,游戏机的API都是低级API,全部要靠程序员的自我理解和能力来优化处理,比DX11这种要劳神很多,但是效率是相当明显的,支持DX12的主机也就XBOX ONE  DX12_2,PS4从硬件到软件都是索尼自己设计的那套,硬件主要是找AMD要个授权。
作者: SCE-PhyreEngine    时间: 2016-4-2 13:19
fastone 发表于 2016-3-31 02:22
别个说的是围栏外的东西,别说实时动态缩镜渲染- -

就是实时渲染的,因为使用DX12了,不在乎吧围栏外的实时渲染出来的

作者: fastone    时间: 2016-4-4 15:50
SCE-PhyreEngine 发表于 2016-4-2 13:19
就是实时渲染的,因为使用DX12了,不在乎吧围栏外的实时渲染出来的

计算量如何,我其实很想看下代码





欢迎光临 PCEVA,PC绝对领域,探寻真正的电脑知识 (https://bbs.pceva.com.cn/) Powered by Discuz! X3.2