显卡特效中的各向异性过滤是啥

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了显卡特效中的各向异性过滤是啥相关的知识,希望对你有一定的参考价值。

RT

Bilinear Interpolation (双线过滤)

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

Trilinear Interpolation (三线过滤)

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

Anisotropic Interpolation (各向异性过滤)

它在取样时候,会取8个甚至更多的像素来加以处理,所得到的质量最好。

-----------------------------------
在 OpenGL 里我尝试使用 三线过滤 ,出来的画面平滑感觉比 各向异性过滤的还要好点。哈,我就觉得三线过滤效果比各向异性过滤效果好点。在国内的网站上很少关于 OpenGL 使用这三线过滤和各向异性过滤的文章,有的都是理论,没有代码,我看了一个国外的代码。其实就是在加载纹理的时候把代码改为:

// <<<三线过滤>>>
//设置纹理缩小时采用的过滤方法,这里设置的是三线性过滤
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
//设置纹理放大时采用的过滤方法,这里设置的是线性过滤
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
//用OpenGL实现支持的最大各异向程度设置最大各异向程度参数
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, 1.0f);

// <<<各向异性过滤>>>
//设置纹理缩小时采用的过滤方法,这里设置的是三线性过滤
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
//设置纹理放大时采用的过滤方法,这里设置的是线性过滤
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
//用OpenGL实现支持的最大各异向程度设置最大各异向程度参数
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, xxx);
// 注意:这里的 xxx 代表 各向异性过滤 的异向程度参数
// 你可以设置为:4 , 8 , 16 等。这里也可以在 InitGL() 驱动 OpenGL 函数里写上
int LrgSupAni;
glGetFloatv(GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT, &LrgSupAni);
那么 xxx 就得小于或等于 LrgSupAni。
参考技术A

      各向异性过滤指是用来过滤、处理当视角变化导致3D物体表面倾斜时造成的纹理错误。

      通俗得法说就是,在3D游戏里,设置各向异性过滤后,游戏镜头随着鼠标不断移动,物体的显示依然很清晰,画面显示稳定、真实。

      显卡全称显示接口卡,又称显示适配器,是计算机最基本配置、最重要的配件之一。显卡作为电脑主机里的一个重要组成部分,是电脑进行数模信号转换的设备,承担输出显示图形的任务。

参考技术B 各向异性过滤 (Anisotropic Filtering ):各向异性过滤是最新型的过滤方法,它需要对映射点周围方形8个或更多的像素进行取样,获得平均值后映射到像素点上。对于许多3D加速卡来说,采用8个以上像素取样的各向异性过滤几乎是不可能的,因为它比三线性过滤需要更多的像素填充率。但是对于3D游戏来说,各向异性过滤则是很重要的一个功能,因为它可以使画面更加逼真,自然处理起来也比三线性过滤会更慢。

提高 CSS 特异性的最高效的方式是啥?

【中文标题】提高 CSS 特异性的最高效的方式是啥?【英文标题】:What is the most character-efficient way to increase CSS specificity?提高 CSS 特异性的最高效的方式是什么? 【发布时间】:2013-10-24 08:14:55 【问题描述】:

如果我想增加规则的 CSS 特异性,我倾向于使用html 作为前缀,但我想知道是否有更简洁的方法可以做到这一点?

(这似乎是一个微不足道的问题,但在我的样式表定义响应式网格的过程中,将特异性前缀减少一个字符将节省几百字节)

【问题讨论】:

你为什么要打扰html ?样式是否被覆盖?如果他们使用相同的选择器,为什么不在其他样式表之后包含该样式表 定义“字符效率”。然后告诉我们为什么它很重要。 @EJP 所说的字符效率是指使用尽可能少的字符,我已经解释了好处是什么 @SmokeyPHP 好电话 - 我在发布后不久意识到 2 个样式表的顺序很愚蠢,现在它可以工作而不必担心具体性。虽然我仍然很想知道html 是否可以改进 【参考方案1】:

这实际上取决于您要达到的目标。一种增加特异性的廉价方法是简单地重复选择器。例如,如果这是您的标记:

<figure id="myId" class="myClass"></figure>

这是你的 CSS:

#myId.myClass  color:red; font-weight:bold;       /* Specificity: 110 */

您可以简单地重复 classid 选择器而无需修改您的标记:

#myId.myClass.myClass  color:green;               /* Specificity: 120 */
#myId#myId  font-weight:normal;                   /* Specificity: 200 */

JSFiddle demo.

这是完全有效的,正如 W3C 选择器级别 3 建议在其Calculating Specificity section 中所述:

注意:允许重复出现相同的简单选择器并且确实会增加特异性。

【讨论】:

+1 - 在大多数情况下,文件大小会比前缀 html 更大,但同样是一个巧妙的小技巧 不确定该链接是否以任何方式相关。这里每条规则只有一个选择器,所以从右到左没有什么可读取的。此外,如果您要链接到另一个 Stack Overflow 答案,just link directly to the answer。 我从研究中找到了这个链接,但没有参考任何 SO 答案。如果我能建立一个答案,我肯定会把答案联系起来。 @Nathan Lee:我是说那篇文章本身链接到 SO,所以不是链接到文章,而是链接到该文章链接到的答案,让每个人都毫无意义额外的点击。 是的@BoltClock。事实上,我在 SO 中读到了同样的内容,但回去看看他们是否有任何其他信息,然后继续从我获得链接的地方链接它。如果下次遇到任何此类类似情况,应直接链接到 SO。谢谢。值得一提。【参考方案2】:

最少字节,但具体多少?

在我看来,对于选择器,在大多数情况下,你不能得到任何短于两个字符加上空格的字符,特别是如果我们正在谈论添加特异性的“全局”使用(这似乎是因为你使用html)。因此,为了节省 CSS,您需要在 html 上使用单个字符 id。我会说一个 id (而不是一个类),因为你想保持它的唯一性。所以你在 html 中像这样实现:

<html id="A">

这允许在 CSS 中添加尽可能短的选择器:

#A .whateverYour [OriginalSelector] string .was 

然后使用 James Donnelly 所说的(顺便说一下,我从来不知道相同选择器的重复),您可以使用最少的字符不断添加越来越多的特异性,如下所示:

#A#A#A .whateverYour [OriginalSelector] string .was 

免责声明

按照我的回答,我不建议这一定是做 CSS 的好方法,也不是处理特殊性问题的好方法。但我确实相信,将短的一个字符 id 添加到 html 元素是可以用来增加任何选择器的特异性的最少字节数,这回答了这里的问题。

【讨论】:

+1 很好的答案,但这也让我意识到我真正想要回答的问题是如何少量增加特异性。使用类而不是 id 会有所帮助(但也会更容易受到其他地方使用的类的影响)。尽管这确实回答了最初的问题,但我不会纯粹将其标记为答案,因为正如您所说,实际使用它是一个坏主意,我根本不想推广它。 @wheresrhys:也许你应该改变你的问题。另外,我不想将其标记为答案有点困惑,因为“实际使用它是一个坏主意,我根本不想推广它”,而我的答案是 完全相同的事情 (除了特异性差异之外)您已经在使用 html 加法,只少了两个字符(这是您要解决的原始问题)。因此,对于您提出的有关如何做的问题,不想宣传您已经在做的事情似乎很奇怪。 简单地说,如果它旁边有一个绿色的勾号,人们可能不会阅读所有的警告,而是继续使用你自己说的,不是你推荐的东西。 @wheresrhys:我明白这一点。那么这让我想知道,你是否应该删除整个问题,因为整个前提是错误的? 我认为不是,因为这是一个有效的问题,可以确定是否可以更有效地提高特异性,并且您的答案和另一个答案都可能有有效的用例。还有一些人为这个问题加注了星标,所以我会听从人群【参考方案3】:

我见过一个 postcss 库使用 :not(#\9),它很短,增加了 1 的特异性,并且基本上适用于所有东西。不适用于 ie8 或更低版本,但来吧,这是 2020 年

【讨论】:

谢谢!这是一个很好的答案,因为它不需要额外的设置。 +1! \9 是什么意思? 不知道 ? ASCII 9? 实际上是ascii 9,它是一个,所以整个选择器是“任何id不是制表符的元素”

以上是关于显卡特效中的各向异性过滤是啥的主要内容,如果未能解决你的问题,请参考以下文章

opengl 三线性和各项异性过滤

如何使各向异性过滤扩展工作?

CSS 特异性过滤器

AngularJS 中的状态过滤是啥?

Mipmap导致模型黑色接缝问题。

布隆过滤器在 cassandra 中的作用是啥?