但是大部分实用的shadow map算法,都不是直接拿深度缓冲,而是经过PS处理后的数据
....... images/back.gif
这里说的shadowmap只是指在lighting space里得到的那张depth texture。因为只需要depth,所以PS确实只是走个过场。然后在后续计算shadow的pass里使用这张depth texture,至于你是poisson noise,PCF,还是ESM等等都是后话。 引用第38楼鸡蛋灌饼于2013-05-02 01:28发表的:
谁艹谁啊……
PS4被艹太正常了,处理器不行,农企的OpenGL实现又出名的烂,UE4测OpenGL总没DX测得多。怎么说都赢不了 images/back.gif
ps4还没实机,早期开发机运行的东西你觉得能算数?
而且sony什么时候直接用过opengl 引用第39楼roadcross于2013-05-02 10:04发表的:
hlsl我不懂,但是NV的Cg的shadowmap demo也是直接用深度纹理,tex2Dproj可以直接访问深度纹理,这函数在hlsl里也可以这么做
锯齿问题显然和纹理精度无关,与纹理尺寸有关,与渲染阴影纹理时的投影矩阵范围有关
方差阴影贴图和普通的阴影贴图差别很大,不能一概而论,而且这东西的漏光问题不是一般的要命,而且浮点纹理的开销 images/back.gif
尺寸跟精度都有关啊。。。
depth texture的尺寸导致的锯齿就是pixel 跟 texel的比例相差太大,另外depth精度也会导致aliasing,比如shadow acne。
最后吐个槽,这个其实跟用啥shader 语言没啥关系。。。 引用第27楼鸡蛋灌饼于2013-05-01 16:02发表的:
从硬件角度来看没什么“不可避免”一说
图形API瞎JB抽象的后果 images/back.gif
。。。不是JB抽象,目前阶段从硬件角度来看render pipeline里面PS是必经的阶段。DX11的compute shader可以输出到buffer里作为终结,但那是通用计算的pipeline 引用第43楼Hiro3D于2013-05-02 10:29发表的 :
。。。不是JB抽象,目前阶段从硬件角度来看render pipeline里面PS是必经的阶段。DX11的compute shader可以输出到buffer里作为终结,但那是通用计算的pipeline images/back.gif
别搞笑了,什么“从硬件角度来看render pipeline”,你先确认硬件上真存在这么个pipeline吧
引用第41楼roadcross于2013-05-02 10:11发表的:
ps4还没实机,早期开发机运行的东西你觉得能算数?
而且sony什么时候直接用过opengl images/back.gif
Sony的那堆以反开发者出名的东西谁没事研究它啊 绕开API是先直接和内核打交道的话,DSA什么的不过是一块显存,直接mmap出来用CPU读写都可以
Evergreen系内存操作很繁琐,SI上你还可以蛋碎的直接用BUFFER_LOAD/STORE直接在随便哪个程序里访问内存。
看看指令集手册就知道图形API折腾出多少麻烦事 color write mask也不能阻止ps
你这个片段要不要discard?ps里改不改深度,gpu是没办法判断的 引用第46楼hourousha于2013-05-02 21:29发表的 :
绕开pixel shader直出depth buffer,如果是为了省fillrate和shader power,直接设置color write mask再关闭alpha test不就成了么?别把驱动程序想得那么傻。
如果连同color rendertarget耗费的显存空间都想省,这个ATI也早就支持了。用个fourcc hack format(NULL format)就成了嘛。 images/back.gif
PS是必须跑的,参考HD6900 ISA第18页
但如果你直接跟SI硬件打交道的话,有太多的方法可以在其他Shader里面访问DSA了 引用第45楼鸡蛋灌饼于2013-05-02 18:18发表的:
绕开API是先直接和内核打交道的话,DSA什么的不过是一块显存,直接mmap出来用CPU读写都可以
Evergreen系内存操作很繁琐,SI上你还可以蛋碎的直接用BUFFER_LOAD/STORE直接在随便哪个程序里访问内存。
看看指令集手册就知道图形API折腾出多少麻烦事 images/back.gif
纯粹的蛋疼,绕开API直接和内核打交道当然自由度高。问题是你绕开图形API的话是打算怎么做日常开发呢?所有操作自己实现一遍?那不就是自己山寨一套么,你能做得更好?光会喷有啥用,提不出更好的整套方案,咱就在现实方案的基础上好好讨论呗。
之前说道pipeline我还是在基于DX考虑,没想到你的意思是直接绕过去。。。 引用第41楼roadcross于2013-05-02 10:11发表的:
ps4还没实机,早期开发机运行的东西你觉得能算数?
而且sony什么时候直接用过opengl images/back.gif
开发机比实机的性能更强嘛。而且,你能找到比山猫差的cpu? 引用第46楼hourousha于2013-05-02 21:29发表的:
绕开pixel shader直出depth buffer,如果是为了省fillrate和shader power,直接设置color write mask再关闭alpha test不就成了么?别把驱动程序想得那么傻。
如果连同color rendertarget耗费的显存空间都想省,这个ATI也早就支持了。用个fourcc hack format(NULL format)就成了嘛。 images/back.gif
恩,一般都是会把color write mask跟alpha test关闭的,但是理论上PS还是要跑一遍,所以之前oz01在说PS4能完全跳开PS可以秒杀PC。 引用第54楼hourousha于2013-05-03 00:56发表的:
理论上怎么就需要跑一遍呢?即使基于DX这个抽象层考虑,也没这个必然限制,例子就是X360的DX接口组织形式和DX9 for PC有七八成相似,而在不调用任何独有接口(比如BeginZPass)情况下,也可以轻松实现跳过PS的方式。
而且前面都说了double Z时连fragment Attribute interpolater之前的Scan Converter都由于只处理position属性所以吞吐量翻倍,即使想跑PS用什么数据跑啊?
其实,即使要跑一遍,也没想出PS4怎么就秒杀PC了,PS3由于不是Unified Shader所以跳不跳PS无大所谓(填充率带宽才是瓶颈)。比这更BT的功能在X360上都用烂了,比如单周期64 z pixel(8rop + double Z + 4 MSAA ZSample)之类的功能,也没见X360怎么秒杀PC。 images/back.gif
因为pipeline要跑完PS再经过output merger才算完,所以理论上是要跑PS的。
话说我也不觉得这个就能秒杀PC。。。 引用第49楼hourousha于2013-05-02 21:41发表的:
所以我后面加了‘关闭alpha test(DX10后被discard代替了)’
还是那话,别把驱动程序想得那么傻,别忘了,若干年以前驱动程序就是可以根据ps输出深度与否,存在discard/texkill与否,决定是否启动early-z cull的。
我突然想到,其实这玩意不就是从NV3X开始的double Z(RSX中称作fastZ,C1中称作double speed mode)吗?本质上就是关闭颜色相关操作从而使从rasterazation(scan converter)开始的吞吐率倍增。在G80/C1之前的显卡,由于不是Unified Shader,所以没多少人关心是否跳过pixel shader,但仔细一想,既然rasterazation都拿来做Z/Stencil相关了,那color运算就成无米之炊了,想执行也没得执行啊。
....... images/back.gif
early-z你得把深度缓冲设只读才有效
引用第51楼囧囧囧于2013-05-03 00:27发表的:
开发机比实机的性能更强嘛。而且,你能找到比山猫差的cpu?
images/back.gif
开发机不是测试机,你似乎搞混了 引用第53楼newdasemo于2013-05-03 00:37发表的:
那么巨硬想再次碾压ps的话该怎样呢? images/back.gif
价格关键游戏发售时的硬件损坏率 http://developer.amd.com/wordpress/media/2012/10/AMD_HD_6900_Series_Instruction_Set_Architecture.pdf
第18页都自己己去看吧
另外理论都别说了
实际开发的时候那就是另一回事
目前在pc上彻底不存在正常的单独写深度缓存不折腾ps的办法
而且似乎大家对单独深度写入的玩法还不太清楚,可不光是用来渲染shadowmap这么单调 引用第56楼hourousha于2013-05-03 08:09发表的:
那个我说,您不会看到在pixel shader stage夹在rasterazation stage和output merger stage之间,于是就认为无论如何一定要跑一个pixel shader吧? images/back.gif
那您告诉我夹在中间的不跑怎么往下走呢?
GS跟tessellation能跳过的,这个大家都知道。但PS能跳过,你确定? 引用第50楼Hiro3D于2013-05-03 00:12发表的 :
纯粹的蛋疼,绕开API直接和内核打交道当然自由度高。问题是你绕开图形API的话是打算怎么做日常开发呢?所有操作自己实现一遍?那不就是自己山寨一套么,你能做得更好?光会喷有啥用,提不出更好的整套方案,咱就在现实方案的基础上好好讨论呗。
之前说道pipeline我还是在基于DX考虑,没想到你的意思是直接绕过去。。。 images/back.gif
你总不会连我在喷啥都看不出来吧:
OpenGL和DX的抽象很糟糕,不能充分利用现代GPU的硬件
整套方案也有人在做,你以为农企折腾那么久HSA是打算干什么?最早喷DX和OpenGL的也是农企的人。
引用第63楼hourousha于2013-05-03 13:15发表的 :
很简单的问题,通常情况下Z-buffer的值是在PS中计算的吗?对应framebuffer中的位置是在PS中生成的么?
因此不执行PS,怎么就死路一条了?early-z需要fragment的z值与ZBuffer的值决定是否在执行pixelshader之前cull掉fragment,这功能如果按照您的想法那是显然不可实现的不是?
有些功能对于开发人员是透明的,但不代表硬件的执行方式和API里面的流程完全一致,它只要和API里所示流程不发生冲突从而产生预料之外的结果即可,Double Z,或者EarlyZ都是这样。连hack(比如R2VB on DX9,QuadBuffer On pre-DX11.1)都不需要。
Direct to metal的API,比如DX for X360,可以切实决定硬件的运行,因此在那里面SetPixelShader(NULL)即代表无PixelShader执行。在构建于抽象层之上的API,比如DX for PC。它的具体实现有赖于驱动的具体实现,在不同硬件,甚至不同版本驱动,有些功能的内部实现流程可能都不尽相同,但就如同上面说的,诸如‘跳过PS’并非属于和API所述流程相冲突的问题,所以不存在不能实现的情况,前面也举了实际的Double Z的例子。所以关于跳过PS这个东西,退一步讲属于‘软件开发人员无法确定在某个硬件某版驱动上,是否确实跳过了不必要的PS操作’的情况。 images/back.gif
别猜了,下套Radeon的ISA好好看看Cayman和SI的Shader是怎么工作的直接就能出结论了。
顺便吐槽下顶楼文章,64个Ring也要拿出来说是创新的话恐怕得被黄老板笑死,这功能人家NV30就有了。 引用第65楼hourousha于2013-05-03 17:34发表的:
我暂时没时间去看这个white paper,主要是这玩艺和对我来说没什么用。
我就想问问,为何一个pixel shader bound的全屏quad的渲染,如果按照Double Z的方式设置(关闭Color Write,关闭Alpha Test,保留Z Write),这种情况下帧率的大幅提升来自于什么? images/back.gif
你不会以为内存访问不算开销的吧 引用第65楼hourousha于2013-05-03 17:34发表的:
我暂时没时间去看这个white paper,主要是这玩艺和对我来说没什么用。
我就想问问,为何一个pixel shader bound的全屏quad的渲染,如果按照Double Z的方式设置(关闭Color Write,关闭Alpha Test,保留Z Write),这种情况下帧率的大幅提升来自于什么? images/back.gif
建议试试看在ps里采样100次512*512的无mipmap纹理 GPU根本不需要统一内存寻址啊,人家一直按摩尔定律在玩,两年后光显存就比你PS4整个8GB DRAM大很多了 引用第69楼pzgr43于2013-05-04 04:52发表的:
GPU根本不需要统一内存寻址啊,人家一直按摩尔定律在玩,两年后光显存就比你PS4整个8GB DRAM大很多了 images/back.gif
@hourousha
@鸡蛋灌饼
@Hiro3D
你们谁来调教一下这位,我已经吐槽无力了 引用第63楼hourousha于2013-05-03 13:15发表的:
很简单的问题,通常情况下Z-buffer的值是在PS中计算的吗?对应framebuffer中的位置是在PS中生成的么?
因此不执行PS,怎么就死路一条了?early-z需要fragment的z值与ZBuffer的值决定是否在执行pixelshader之前cull掉fragment,这功能如果按照您的想法那是显然不可实现的不是?
有些功能对于开发人员是透明的,但不代表硬件的执行方式和API里面的流程完全一致,它只要和API里所示流程不发生冲突从而产生预料之外的结果即可,Double Z,或者EarlyZ都是这样。连hack(比如R2VB on DX9,QuadBuffer On pre-DX11.1)都不需要。
Direct to metal的API,比如DX for X360,可以切实决定硬件的运行,因此在那里面SetPixelShader(NULL)即代表无PixelShader执行。在构建于抽象层之上的API,比如DX for PC。它的具体实现有赖于驱动的具体实现,在不同硬件,甚至不同版本驱动,有些功能的内部实现流程可能都不尽相同,但就如同上面说的,诸如‘跳过PS’并非属于和API所述流程相冲突的问题,所以不存在不能实现的情况,前面也举了实际的Double Z的例子。所以关于跳过PS这个东西,退一步讲属于‘软件开发人员无法确定在某个硬件某版驱动上,是否确实跳过了不必要的PS操作’的情况。 images/back.gif
是我2了,early Z这个这么明显的跳过PS的例子你在前面提过了我还没反应过来,而且从一开始感觉就想歪了。
Hiro3D是上班的时候刷S1的号,懒得换了。 引用第64楼鸡蛋灌饼于2013-05-03 16:43发表的:
你总不会连我在喷啥都看不出来吧:
OpenGL和DX的抽象很糟糕,不能充分利用现代GPU的硬件
整套方案也有人在做,你以为农企折腾那么久HSA是打算干什么?最早喷DX和OpenGL的也是农企的人。 images/back.gif
知道你在喷啥,就是觉得你喷的有点远。。。 引用第72楼bbtt2007于2013-05-04 13:05发表的:
知道你在喷啥,就是觉得你喷的有点远。。。
....... images/back.gif
按Console的尿性和日企蛋疼的习惯,开放底层访问还真不是不可能的……
再说了,PS4这代都是农企的片子,开放了也差不到哪去,就是API方面两边可能要扯皮好久
引用第68楼hourousha于2013-05-03 20:24发表的:
我能说您思路广吗?前面已经说了是一个pixel shader bound的quad,不存在overdraw。那么这个ColorWrite导致的直接内存访问能有多少?用这个情况就是为了容易看出性能瓶颈的变化。
根据LS的建议改了一下,pixel shader1(称为PS1)中有100次tex指令。Pixel shader2为一条简单指令(return float4(1.0f,1.0f,1.0f,1.0f) )测试数值如下
1:PS1,开启ZBuffer,关AlphaTest,开Color Write,400-600fps(因为shader里有一些动态分支)
2:PS1,开启ZBuffer,关AlphaTest,关Color Write,4500fps
....... images/back.gif
1. PS1的TEX是可能被优化掉的
2. 跳没跳PS抓command stream看它怎么设置register怎么dispatch就知道,不需要盲人摸象的从性能上猜。当然你说我舍本逐末本来就是为了性能跳不跳PS无所谓那我也认。
3. 最近忙没工夫折腾这个,要看结果那就等跳票吧 引用第73楼鸡蛋灌饼于2013-05-04 16:01发表的:
按Console的尿性和日企蛋疼的习惯,开放底层访问还真不是不可能的……
再说了,PS4这代都是农企的片子,开放了也差不到哪去,就是API方面两边可能要扯皮好久images/back.gif
PS4的研发主要是美国这边在搞,console的对底层的开放性历来就比PC强,毕竟是游戏专用机器。 不明觉厉。。。这货以后能装win7?
——— 来自Stage1st Reader Evolution For iOS 也许可以装win8 绝对没可能装win
硬件都不支持了
页:
1
[2]