Board logo

标题: [其他] 问个科学性问题,关于游戏多边形画面过滤的 [打印本页]

作者: dragonzet    时间: 2012-2-18 20:25     标题: 问个科学性问题,关于游戏多边形画面过滤的

我以前觉得PS2或者WII最大的毛病不是多边形数量和特效,而是分辨率过低。

分辨率一低,某些贴图,像地砖,树,屋顶的瓦砾之类的,只有靠的近才能看清细节,离得远就会因为主机的分辨率不够导致贴图画面有那种马赛克感很重闪烁的现象。而且很多细节会因为离得越远效果越糟糕.最后远处一片沙化
举个例子  WII的 海贼王终极大冒险 路费刚上岛就是那种画面。

PSP也有这个问题,怪猎3代我没玩过,我举2代P2G的例子吧,那个有湖光山色的森林,是不是沙粒感十足?
但是3DS分辨率比PSP还差,却没有这种问题,多边形质量直接上一层楼。

感觉这个应该是各向异性过滤吧?不过记得以前看到的各向异性过滤是指把远处的纹理清晰起来,而这里像3DS的画面则是把复杂的纹理在远处柔化掉,究竟是什么技术,求指点 ~~~

[ 本帖最后由 dragonzet 于 2012-2-18 20:26 编辑 ]
作者: magtree    时间: 2012-2-18 20:27

景深模糊吧……
作者: 安琪拉之歌    时间: 2012-2-18 20:28

家用机的分辨率不是取决于电视和输出线吗?我硬件白痴。
作者: dragonzet    时间: 2012-2-18 20:30

不是景深模糊, 我想起来了,很多人都玩过CS,从1.4 或者更早开始的。
那时候还用GF2MX200之类的卡,你看画面前面不远处会感觉到一道线的存在,靠近屏幕的这端贴图清晰,远离屏幕 也就是视角深处的模糊
这是故意低渲染远处的贴图?
作者: dragonzet    时间: 2012-2-18 20:41

刚才自己找资料

WII PS2 PSP这些都只是
双线性过滤吧

双线性过滤最显著的地方就是没有马赛克。

局限
  在纹理缩减到一半或者放大一倍的范围内,双线性过滤都能够有非常好的精度。这也就是说,如果纹理在每个方向都有 256 个像素,那么将它缩减到 128 以下或者放大到 512 以上的时候,由于会丢掉太多的像素或者进行了过多的平滑处理,纹理看起来就会很差。通常,可以在缩减的过程中使用 Mipmap 来实现较好的性能;但是,在透视图中的纹理上的经过双线性过滤处理的两个不同尺寸的 mipmap 之间的过渡将非常明显。三线性过滤尽管比较复杂,但是可以使得过渡非常平滑。

这一条跟我前面疑惑的比较接近,纹理过于缩小时看起来就会很差,为了解决这个问题,所以这里再加上三线性过滤、

3DS因为支持了三线性过滤,所以画面看起来舒服得多。


MIPMAP应该就是前面提到CS里那条分界的线了。

[ 本帖最后由 dragonzet 于 2012-2-18 20:45 编辑 ]
作者: 昵称无效    时间: 2012-2-18 21:39

posted by wap, platform: iPhone

闪烁应该是像素填充率不够
作者: yang117    时间: 2012-2-18 22:49

贴图有Mipmap的,也就是贴图的LOD,但是会占用内存,某些无良厂家节省内存就用没有Mipmap的贴图,导致画面闪烁。
http://en.wikipedia.org/wiki/Mipmap
加上各向异性过滤消除闪烁

[ 本帖最后由 yang117 于 2012-2-18 22:51 编辑 ]
作者: dragonzet    时间: 2012-2-18 23:52

我前天好奇为啥 3DS的DQM重制版连双线性过滤都省了直接什么都不带,光杆上贴图满屏马赛克。
原来是为了程序开发调用内存的的偷懒和方便啊

不过有些时候确实这样低分辨率的贴图不过滤反而清晰容易辨认。
作者: mieumieu    时间: 2012-2-19 00:13

posted by wap, platform: iPad
引用:
原帖由 @dragonzet  于 2012-2-18 23:52 发表
我前天好奇为啥 3DS的DQM重制版连双线性过滤都省了直接什么都不带,光杆上贴图满屏马赛克。
原来是为了程序开发调用内存的的偷懒和方便啊

不过有些时候确实这样低分辨率的贴图不过滤反而清晰容易辨认。
双线性过滤不会耗贴图内存,mipmap才会
而且双线性过滤要开起来不过是一个函数的事情。。当初nfs8也有类似现象,很烦
作者: cp251    时间: 2012-2-19 13:51

各向异性过滤,个人感觉日厂普遍不能熟练运用此项技术。
作者: 大头木    时间: 2012-2-19 16:11

不开mipmap,贴图绝壁闪烁
作者: hourousha    时间: 2012-2-20 10:53

过滤主要分临近点,双线性,三线性,各向异性几种。
其中,后两种都是和MIP-MAP连用才能达到完整效果的技术。而前两种,既可以和MIP-MAP连用,也可以只在一个纹理平面上使用。而tri-linear其实就是在相邻两个mipmap平面上做bi-linear然后在之间再做linear。
mip-map chain是一系列尺寸成倍缩小的贴图链,作用主要是两个,一个是避免闪烁,另一个是提高性能。
闪烁的发生是因为bi-linear只能在2x2个图素(texel)之间做low-pass filter过滤,所以不适应缩小比率低过1/2的情况,在这种情况下,属于采样点不足所以出现运动中闪烁现象。
而提高性能主要是指降低texture cache miss的概率,因为如果纹理分辨率大大高于像素间UV密度,说明相邻像素需要采样的texel在内存里距离很远,因此可能每个像素的texture fetch都会导致一次cache flush和cache fetch。自然性能降低。
而mip-map的运作原理在于根据uv的dda信息(即相邻像素间uv差值),选择合适的mip-map层进行纹理取样,这样就不会出现上面提到的情况。
我们假设dda=2,代表相邻像素在最大纹理层上跨2个像素,因此此时应该选择比最大纹理层低一级的层做texture fetch,也就是mipmap层的选择是和log2(dda)相关的。
而tri-linear与anisotropic的最大差别在于mip-map的选择逻辑。因为uv一般都有两个方向——u方向和v方向,而这两个方向的dda值往往是不同的,对于tri-linear来说,它会选择ddu,ddv两个值中的较大值作mipmap层次选择,比如dda(u) = 1,dda(v) = 4,那么它会选择4,也就是长宽为1/4的层来做纹理读取,但显而易见,这样一来,u方向就会发生欠采样现象,也就是常说的模糊出现了。
而对于anisotropic来说,它的选择公式是形如max((max(log2(ddu),log2(ddv))-log2(anisotropic_level)),0)这样的,也就是上面那种情况,如果max anisotropic level>=4,它就会选择最大尺寸的纹理层来做纹理读取,同时,它会以8x2个texel来做filter,这样一来同时也就避免了采样不足的闪烁现象。

简单归纳一下,如果只用bi-linear,而贴图尺寸又明显大于像素间uv密度(除了由模型自身制作的因素外,更由输出分辨率,摄像机远近等要素决定)则一动就闪烁。
如果用tri-linear而且mipmap又是完整的,那么如果uv两个方向密度不同,就会在一个方向上发生模糊的现象,这是因为选择了相对另一个方向解析度过低的贴图原因,如果强行调整mipmap_lod_bias使之选择高分辨率纹理层,则又在uv中密度较低的方向上发生闪烁。
只有使用anisotropic filter,同时把anisotropic level定得比较高,才能同时解决闪烁和模糊的现象。
当然,如果原始贴图分辨率就不足,那就怎么折腾都没辙了,或者模型拉得过近,或分辨率过高,那么除了使用完全编程化的像素空间过程纹理外,没有其他办法。

[ 本帖最后由 hourousha 于 2012-2-20 11:08 编辑 ]
作者: 大头木    时间: 2012-2-20 11:25

posted by wap, platform: SAMSUNG (Galaxy S II)

难怪一开mipmap远处贴图就模糊,不开,alpha贴图又闪的厉害
作者: shinkamui    时间: 2012-2-20 17:13

引用:
原帖由 cp251 于 2012-2-19 13:51 发表
各向异性过滤,个人感觉日厂普遍不能熟练运用此项技术。
这要什么技术,sampler里面改一句话而已。不用一般都是出于速度考虑,因为需要多采样。




欢迎光临 TGFC Lifestyle (http://bbs.tgfcer.com/) Powered by Discuz! 6.0.0