游戏开发论坛

 找回密码
 立即注册
搜索
123
返回列表 发新帖
楼主: moremoretime

[ 问题 ] 如果做个software rendER

[复制链接]

2

主题

50

帖子

58

积分

注册会员

Rank: 2

积分
58
发表于 2004-12-20 17:49:00 | 显示全部楼层

Re: [ 问题 ] 如果做个software rendER

我先那个好像写错了。。似乎应该:

mipmap级别 l = min(p(x), p(y))
计算采样次数才是 max( anisotropy, p(x)/p(y) ).

大概是我没有说清楚,我主要想问是如何实现那个anisotropic filter(比如2x8的texel下的filter kernel)关于anisotropic和mipmap layer的判断不是我问的主要问题。(我觉得这个是相对容易的,就如你所说的,光栅化时求出每个fragment在纹理空间的ddu和ddv然后与透视矫正因数运算一下就可以得到你公式中的偏导数然后接下来的就简单了)
w-buffer之所以被弃用我想大概主要是由于成本问题,精度问题只在其次(32bit的w-buffer效果就应该很不错)。其平均深度值与定点数的平均精度正好相配,换句话说,如果z-buffer使用的是浮点补数方式(也就是说远剪裁面是0,近剪裁面是1,z-buffer使用浮点数)那么估计也会得到不错的效果,糟就糟糕在z-buffer多数使用的是定点数,而几何空间深度的z-buffer表示为非线性……


filter kernel你具体指的是什么?我对AF研究很少。。。

z-buffer用的是定点?。。。

6

主题

444

帖子

457

积分

中级会员

Rank: 3Rank: 3

积分
457
发表于 2004-12-20 18:11:00 | 显示全部楼层

Re:[ 问题 ] 如果做个software rendER

1:filter kernel就是指的如何通过那些texel的颜色(比如4xaf就是2x8个texels)算出该fragment的颜色。
2:嗯,因为定点的成本代价低,而且对于存储0-1之间的数,定点是很不错的选择。

2

主题

50

帖子

58

积分

注册会员

Rank: 2

积分
58
发表于 2004-12-20 18:27:00 | 显示全部楼层

Re: [ 问题 ] 如果做个software rendER

filter kernel就是指的如何通过那些texel的颜色(比如4xaf就是2x8个texels)算出该fragment的颜色。


。。。我跟你的理解好像有分歧。
我认为4xaf指的是:在需要af时(ddu!=ddv 或是说 p(x) !=p(y))最大允许的取样次数。af实现不是在映射到纹理空间的非等宽区域多次对计算好的mipmap取样再平均么?跟texel block有何关系?我理解错了么?

6

主题

444

帖子

457

积分

中级会员

Rank: 3Rank: 3

积分
457
发表于 2004-12-20 22:01:00 | 显示全部楼层

Re:[ 问题 ] 如果做个software rendER

看来我们的理解确实有一些偏差,你认为af的倍数是mipmap的取样次数(希望我没理解错)而我则是认为af倍数代表一个mipmap layer上的texel取样区域的比例。
如果是这样的话,大概我的想法是更加接近于GPU的实现方法的,mipmap-filter和min/mag texel filter是并行的,mipmap filter永远只取一个(point)或两个(linear)mipmap layer。就如同早先ATI的8500上有名的point mipmap filter AF事件和近期的ATI/NV的bri-linear filter AF事件所显示的情况。GPU上的af和mipmap filter是分开的不存在冲突关系,而af和bilinear filter则是同一类事物。

从纹理过滤的最初始情况说起,每一个fragment都会存在一个纹理坐标(u,v),将其映射到纹理空间(texel space)会得到一个新坐标(u',v'),此时如果用point 采样则就是取距离最近的texel的颜色当作最终颜色,这时就是nearest采样,是1 tap采样。而如果取此坐标相邻4个texel做双线性插指,这就是4-taps bilinear。
而mipmap的情况则起源于一个fragment对应多个texel的区域情况,此时,预先构造一个mip-map chain。每一个layer的纹理的长宽依次为上一层的1/2。假设mipmap生成使用的是box filter,也就是这一层的纹理中的4 texels对应下一层的一个texels,这样在纹理取样中其实近似等效于增加了取样,可以减少失真的出现。
接下来就出现了tri-linear。当我们得到了这个一个fragment对应的texels数量,比如u对应1.6个0层texel,v对应3.2个0层texel,这样,如果使用点采样mip方式,则就是取layer2的mipmap layer进行bilinear取样得到颜色,而如果使用线性mip过滤方式,则就同时在第1层和第2层上做4-taps bilinear得到颜色,然后按照mipmap weight(0.6)在两者结果中进行线性插值得到最终颜色,由于一共要做3次linear插值,这就是tri-linear的由来。采用trilinear则会使取样taps倍增。
缺陷很明显,它是按照u,v方向取最大的mipmap层进行计算,自然就会在另一个方向上产生模糊的现象。
而af则是改善这种情况,同样是上面的情况,使用2xaf,则是在第0层和第一层上分别各取2x4= 8taps texels进行运算,然后按照mipmap权重(0.6)进行插值运算得到最终结果,可见,此时的取样taps共为2x4x2=16 taps,是trilinear的两倍,类似,如果是4xaf,则一共是32 taps。8xaf则是64 taps。
和trilinear的区别就在于使用af后mipmap的选取则是选取uv方向中较小的mipmap进行计算,这样可以得到更加清晰的取样效果。
证据:使用colored mipmap测试(不同的mipmap层用不同颜色表示出来),会发现,小角度几何体的mipmap分布明显比trilinear时变小,也就是使用了分辨率更高的较低mipmap层。这个功能在3dmark和3danalyzer中都有提供。
现在我的问题就是不知道如何在2xn的texel 中使用何种filter得到结果,显然bilinear的公式只适合2x2的taps,不适合2x4,2x8等等的taps。

2

主题

50

帖子

58

积分

注册会员

Rank: 2

积分
58
发表于 2004-12-20 23:00:00 | 显示全部楼层

Re:[ 问题 ] 如果做个software rendER

恩,我差不多明白你的意思了。好详细阿,呵呵

看来我的确有些理解错误。af与filter方式无关,我误解了。
这样,书上说,对anisotropy line上平均取点,作为sampling point.大概你说得对mipmap的2*n的tap取样应该是分成几个2*2作bilinear。还有,我认为2xaf,4xaf等,是anisotropy line上平均取点数的最大值(2,4。。。),然后作filter,得到的几个filter后的值再做平均。不论point,bilinear,trilinear。。。

6

主题

444

帖子

457

积分

中级会员

Rank: 3Rank: 3

积分
457
发表于 2004-12-20 23:25:00 | 显示全部楼层

Re:[ 问题 ] 如果做个software rendER

分成几个2x2 taps的话,嗯,是一种思路,可以试验一下。
你说的对,所谓4xaf,就是说最高可以在一层mipmap layer上采用2x8 taps filter。并不是所有fragment都采用2x8,需要有一个ddu/ddv的动作然后再做判断以采用合适的af倍数。

8

主题

553

帖子

560

积分

高级会员

Rank: 4

积分
560
发表于 2004-12-22 13:29:00 | 显示全部楼层

Re:[ 问题 ] 如果做个software rendER

I agree with hourousha.
AF applies only to bilinear & trilinear filtering, it makes no sense with nearest filtering.
The algorithm of AF, I think, depends on hardware implementations, some hardware may not be able to to AF at any direction, such as R200.

1

主题

29

帖子

29

积分

注册会员

Rank: 2

积分
29
发表于 2007-11-27 22:36:00 | 显示全部楼层

Re:[ 问题 ] 如果做个software rendER

我也在写这个,很多新东西还在学习中。

5

主题

755

帖子

757

积分

高级会员

Rank: 4

积分
757
发表于 2007-11-28 12:16:00 | 显示全部楼层

Re:[ 问题 ] 如果做个software rendER

你去把3D游戏编程大师的书找来看一遍他就是全部软模拟
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-6-17 17:03

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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