Ogre中材质过滤技术

材质过滤知识:http://baike.baidu.com/view/49989.htm

简介

当材质被贴到屏幕所显示的一个3D模型上时,材质处理器必须决定哪个图素要贴在哪个像素的位置。 由于材质是2D图片,而模型是3D物件,所以通常图素的范围与像素范围不会是恰好相同的。此时要解决这个像素的贴图问题,就得用插补处理的方式来解决。而 这种处理的方式共分三种:“近邻取样”、“双线过滤”、“三线过滤”以及“各向异性过滤”。


近邻取样

1.Nearest Neighbor (近邻取样)   又被称为Point sampling(点取样),是一种较简单材质影像插补的处理方式。会使用包含像素最多部分的图素来贴图。换句话说就是哪一个图素占到最多的像素,就用那个图素来贴图。这种处理方式因为速度比较快,常被用于早期3D游戏开发,不过材质的品质较差。

双线过滤

2.Bilinear Interpolation (双线过滤)   这是一种较好的材质影像插补的处理方式,会先找出最接近像素的四个图素,然后在它们之间作差补 效果,最后产生的结果才会被贴到像素的位置上,这样不会看到“马赛克”现象。这种处理方式较适用于有一定景深的静态影像,不过无法提供最佳品质。其最大问 题在于,当三维物体变得非常小时,一种被称为Depth Aliasing artifacts(深度赝样锯齿),也不适用于移动中的物件。

三线过滤

3.Trilinear Interpolation (三线过滤)   这是一种更复杂材质影像插补处理方式,会用到相当多的材质影像,而每张的大小恰好会是另一张的 四分之一。例如有一张材质影像是512×512个图素,第二张就会是256×256个图素,第三张就会是128×128个图素等等,总之最小的一张是 1×1。凭借这些多重解析度的材质影像,当遇到景深极大的场景时(如飞行模拟),就能提供高品质的贴图效果。一个“双线过滤”需要三次混合,而“三线过 滤”就得作七次混合处理,所以每个像素就需要多用21/3倍以上的计算时间。还需要两倍大的存储器时钟带宽。但是“三线过滤”可以提供最高的贴图品质,会 去除材质的“闪烁”效果。对于需要动态物体或景深很大的场景应用方面而言,只有“三线过滤”才能提供可接受的材质品质。

各向异性过滤

4.Anisotropic Interpolation (各向异性过滤)   它在取样时候,会取8个甚至更多的像素来加以处理,所得到的质量最好。   2-sided (双面) 在进行着色渲染时,由于物体一般都是部分面向摄像机的,因此为了加快渲染速度,计算时常忽略物体内部的细节。当然这对于实体来说,不影响最终的渲染结果; 但是,如果该物体时透明时,缺陷就会暴露无遗,所以选择计算双面后,程序自动把物体法线相反的面(即物体内部)也进行计算,最终得到完整的图象。

Ogre中的应用:



//各向异性过滤
Ogre::TextureFilterOptions tfo = Ogre::TFO_ANISOTROPIC;
unsigned int aniso = 8;
//三线过滤
tfo = Ogre::TFO_TRILINEAR;
aniso = 1;
//双线过滤
tfo = Ogre::TFO_BILINEAR;
aniso = 1;
//无过滤
tfo = Ogre::TFO_NONE;
aniso = 1;
//设置
Ogre::MaterialManager::getSingleton().setDefaultTextureFiltering(tfo);
Ogre::MaterialManager::getSingleton().setDefaultAnisotropy(aniso);

Ogre内部定义:
/** High-level filtering options providing shortcuts to settings the
minification, magnification and mip filters. */
enum TextureFilterOptions
{
/// Equal to: min=FO_POINT, mag=FO_POINT, mip=FO_NONE
TFO_NONE,
/// Equal to: min=FO_LINEAR, mag=FO_LINEAR, mip=FO_POINT
TFO_BILINEAR,
/// Equal to: min=FO_LINEAR, mag=FO_LINEAR, mip=FO_LINEAR
TFO_TRILINEAR,
/// Equal to: min=FO_ANISOTROPIC, max=FO_ANISOTROPIC, mip=FO_LINEAR
TFO_ANISOTROPIC
};

enum FilterType
{
/// The filter used when shrinking a texture
FT_MIN,
/// The filter used when magnifying a texture
FT_MAG,
/// The filter used when determining the mipmap
FT_MIP
};
/** Filtering options for textures / mipmaps. */
enum FilterOptions
{
/// No filtering, used for FILT_MIP to turn off mipmapping
FO_NONE,
/// Use the closest pixel
FO_POINT,
/// Average of a 2x2 pixel area, denotes bilinear for MIN and MAG, trilinear for MIP
FO_LINEAR,
/// Similar to FO_LINEAR, but compensates for the angle of the texture plane
FO_ANISOTROPIC
};

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值