FMod 和 Frac 材质函数导致纹理接缝

问题描述 投票:0回答:2

有什么方法可以消除使用 Frac 或 FMod 造成的插值接缝吗?来自编写实际的片段着色器,我发现这个接缝甚至存在很奇怪(为什么在像素采样中发生插值?)

例如,假设我们有这个超级简单的纹理

我们希望右上角循环而不是整个纹理,这很容易用 FMod 完成。

如您所见,当 UV 从 0.25 跳到 0 时,现在出现了一个伪影,我不确定为什么。有没有办法可以禁用此插值?借助 MSPaint 的强大功能,这是我期望看到的:

unreal-engine4
2个回答
0
投票

我找到了一个不错的临时解决方案。如果您禁用 mip-mapping(通过纹理本身的属性),那么伪影就会消失。很想有另一个答案来描述如何在维护 mipmaps 的同时做到这一点。


0
投票

在不禁用 mipmap 的情况下执行此操作的方法是显式导出 mip 级别而不是自动生成它们。 纹理采样器中有一个设置可以执行此操作。采样器现在将显示 DDX 和 DDY 的输入。

然后,你可以拿一个未改变的纹理坐标节点,把它插入DDX和DDY节点,然后把它们插入采样器的相应插座。

出现这种情况的原因是mips是根据UV坐标的变化率计算的。当您使用数学函数更改 UV 时,变化率可能会变成非线性,并导致引擎认为在短屏幕空间上的 UV 空间中跨越了很长的距离。 这通常表示对象距离较远,因此它会用最低质量的 mip 贴图(通常只是一个超级模糊的像素)遮蔽那些像素,从而导致在相邻像素上使用的高质量 mip 级别出现接缝。 显式推导 mips 允许您使用第二个 mips 覆盖计算。未改变的 tex 坐标将提供很好的线性导数,而不会在 mip 级别上突然跳跃。

© www.soinside.com 2019 - 2024. All rights reserved.