POPPUR爱换

 找回密码
 注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

搜索
12
返回列表 发新帖
楼主: Asuka
打印 上一主题 下一主题

Unigine Heaven Benchmark DX11实测

[复制链接]
21#
发表于 2009-11-8 16:23 | 只看该作者
在DX9上是可以实现这个的,不过看看多边形多了多少倍,不下20倍吧,没有Tessellation,性能下降只剩5%,可能动都动不了
xxx2006 发表于 2009-11-8 16:02


没这么多,而且不是所有的部分都用了Tessellation
总共601个部件里面只有23个部件有Height Map
使用量其实不大

另外,5870用了Tessellation以后性能下降也很大,固定大量多边形反而不会占用Shader资源,未必会下降这么多
回复 支持 反对

使用道具 举报

22#
发表于 2009-11-8 16:39 | 只看该作者
29# jhj9 这是说微软是傻子?非要去开发一个吃力不讨好的新技术?
回复 支持 反对

使用道具 举报

23#
发表于 2009-11-8 16:44 | 只看该作者
没这么多,而且不是所有的部分都用了Tessellation
总共601个部件里面只有23个部件有Height Map
使用量其实不大

另外,5870用了Tessellation以后性能下降也很大,固定大量多边形反而不会占用Shader资源,未必 ...
jhj9 发表于 2009-11-8 16:23



你看技术演示的视频,对比下多边形,就算没有20倍的多边形,10+倍也是跑不了的。Tessellation实际是只算少量的关键部分,其他类似于插值而来,就算这样也下降了部分性能。硬算的话,想都不敢想
回复 支持 反对

使用道具 举报

24#
发表于 2009-11-8 16:51 | 只看该作者
29# jhj9  这是说微软是傻子?非要去开发一个吃力不讨好的新技术?
Michal 发表于 2009-11-8 16:39


你认为这一个Demo就把Hull Shader、Domain Shader的所有功能都利用发挥到头了吗?
真正发挥得好,是有动态的LOD的,如果是这样,就不可能靠预计算大量多边形来替代。
正因为它只是非常粗浅的使用,所以现在有其他解决办法
回复 支持 反对

使用道具 举报

头像被屏蔽
25#
发表于 2009-11-8 16:51 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

26#
发表于 2009-11-8 16:54 | 只看该作者
这就是heaven用的hullshader代码,看看有多粗浅:

HULL_CONSTANT_OUT constant(InputPatch<HULL_IO,3> patch) {
       
        HULL_CONSTANT_OUT OUT;
       
        float length_0 = length(patch[1].position.xyz - patch[2].position.xyz);
        float length_1 = length(patch[2].position.xyz - patch[0].position.xyz);
        float length_2 = length(patch[0].position.xyz - patch[1].position.xyz);
        float factor_0 = (patch[1].texcoord_7.w + patch[2].texcoord_7.w) * saturate(length_0 * s_material_tessellation_distance.z);
        float factor_1 = (patch[2].texcoord_7.w + patch[0].texcoord_7.w) * saturate(length_1 * s_material_tessellation_distance.z);
        float factor_2 = (patch[0].texcoord_7.w + patch[1].texcoord_7.w) * saturate(length_2 * s_material_tessellation_distance.z);
        OUT.edges[0] = factor_0;
        OUT.edges[1] = factor_1;
        OUT.edges[2] = factor_2;
        OUT.inside = (factor_0 + factor_1 + factor_2) * (1.0f / 3.0f);
        return OUT;
}

domain shader代码:

DOMAIN_OUT main(DOMAIN_CONSTANT_IN IN,const OutputPatch<DOMAIN_IN,3> patch) {
       
        DOMAIN_OUT OUT;
       
        float4 vertex = patch[0].position * IN.coords.x + patch[1].position * IN.coords.y + patch[2].position * IN.coords.z;
        float4 normal = patch[0].texcoord_7 * IN.coords.x + patch[1].texcoord_7 * IN.coords.y + patch[2].texcoord_7 * IN.coords.z;
        float2 texcoord = patch[0].texcoord_0.xy * IN.coords.x + patch[1].texcoord_0.xy * IN.coords.y + patch[2].texcoord_0.xy * IN.coords.z;
        float offset = pow(saturate(1.0f - (length(vertex.xyz - s_camera_position) - s_material_tessellation_distance.x) * s_material_tessellation_distance.y),s_material_tessellation_factor.y);
        offset *= (s_texture_7.SampleLevel(s_sampler_7,texcoord,0.0f).x - 127.0f / 255.0f) * s_material_tessellation_factor.x;
        vertex.xyz += normalize(normal.xyz) * offset;
        OUT.position = getPosition(vertex);
        return OUT;
}
回复 支持 反对

使用道具 举报

27#
发表于 2009-11-8 17:00 | 只看该作者
羡慕DX11啊
回复 支持 反对

使用道具 举报

28#
发表于 2009-11-8 17:07 | 只看该作者
可惜却是A卡独有。。。。。。。。。。。。。。。
377757701 发表于 2009-11-8 14:49



所以在DX11之前,使用过Tessellation的PC游戏几乎没有,XB360上的也屈指可数


此外这个技术真的能取代NormalMapping???恐怕连AMD自己都不会做这样的美梦。
回复 支持 反对

使用道具 举报

29#
发表于 2009-11-8 20:12 | 只看该作者
动态Lod+视差贴图或者Relief mapping的结果还真不一定比这个差。
回复 支持 反对

使用道具 举报

30#
发表于 2009-11-8 20:16 | 只看该作者
早就看过了,等待dirt2上市
回复 支持 反对

使用道具 举报

31#
发表于 2009-11-8 20:38 | 只看该作者
终于又回到多边形生成上面了,贴图技术只是弥补多边形生成能力不足用的。
回复 支持 反对

使用道具 举报

32#
发表于 2009-11-8 20:40 | 只看该作者
传说中的法线贴图~!
回复 支持 反对

使用道具 举报

33#
发表于 2009-11-8 20:49 | 只看该作者
什么意思,不用NORMAL直接上高模?
回复 支持 反对

使用道具 举报

34#
发表于 2009-11-10 12:57 | 只看该作者
越来越接近真实了 不错不错
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

广告投放或合作|网站地图|处罚通告|

GMT+8, 2025-9-28 09:33

Powered by Discuz! X3.4

© 2001-2017 POPPUR.

快速回复 返回顶部 返回列表