unity3d 缓慢移动精灵时获得“咯咯”效果

hmtdttj4  于 2022-11-25  发布在  其他
关注(0)|答案(4)|浏览(174)

如何在缓慢移动精灵时消除这种“咯咯”的效果?
我尝试过在Unity编辑器中调整QualitySettings中的抗锯齿值和ImportSettings中的过滤器模式,但没有任何改变。

理想情况下,我希望将“Filter Mode”(滤波器模式)设置为Point (no filter),并将“Anti-aliasing”(抗混叠)设置为2x

Sprite位于GameObject的Sprite渲染器组件内。
我已经上传我的Unity项目在这里:http://www.filedropper.com/sprite
我真的不知道该怎么解决这个问题......谁能帮我解决一下我的个人项目?

2nbm6dog

2nbm6dog1#

我制作了一个快速动画来演示这里发生的事情:

网格表示显示器的输出像素。如果我们可以用无限的子像素分辨率渲染它,我已经在它上面覆盖了我们想要采样的滑动精灵。
每个网格单元中心的点代表它们的采样点。因为我们使用的是Nearest-Nieghbour/Point过滤,所以这是纹理中它们唯一关注的点。当新颜色的边缘穿过采样点时,整个像素会立即改变颜色。
源纹理像素网格与输出像素不一致时,问题就出现了。在上面的例子中,sprite是16 x16个纹理像素,但是我已经将其缩放到显示器上的17 x17个像素。这意味着,在每一帧中的某个地方,一些纹理像素必须重复。当我们移动sprite时,发生这种情况的位置会发生变化。
因为每个纹理像素的渲染大小都比像素稍大,所以它会在某个时刻完全桥接两个相邻像素的采样点。两个采样点都位于同一个放大的纹理像素内,因此两个像素都将该纹理像素视为最近的采样点,并且该纹理像素会在两个位置输出到屏幕。
在这种情况下,由于只有1/16的比例差异,每个纹理元素只在这种奇怪的情况下一两帧,然后它转移到它的邻居,创造一个双像素的涟漪,似乎在图像上滑动。
One could view this as a type of moiré pattern,当纹理像素网格和采样网格不相似时,由纹理像素网格和采样网格的交互产生)
修复方法是
确保缩放像素图,以便每个纹理元素以像素的整数倍大小显示**。
1:1

或者2:1,3:1......

使用较高的倍数可让Sprite以比其本身的texel大小更小的增量移动,而不会影响预期的作品外观的局部拉伸。
因此:请密切注意输出的分辨率和应用于资产的缩放比例,以确保它们之间保持整数倍关系。CAD 97链接的博客文章提供了实现这一点的实用步骤。

**编辑:**为了在您上传的Unity项目中演示这一点,我修改了相机设置,使像素与单位设置相匹配,并进行了以下测试。顶部的Mario具有略微非整数的纹理像素比(1.01:1),而底部的Mario具有1:1。您只能看到顶部的Mario呈现波纹状伪像:

展开查看全部
1mrurvl1

1mrurvl12#

您可能对this blog post感兴趣,了解如何在Unity中制作“像素完美”的2D游戏。
部分相关摘录:
如果你用Unity中的所有默认设置开始你的像素游戏,它看起来会很糟糕!
使你的像素化游戏看起来漂亮的秘诀是确保你的精灵在一个漂亮的像素边界上渲染。换句话说,确保你的精灵的每个像素都在一个屏幕像素上渲染。
这些其他设置对于使事物尽可能清晰是必不可少的。
在精灵上:

  • 确保您的精灵使用无损压缩,例如真彩色
  • 关闭MIPMap
  • 使用点采样

在“渲染质量设置”中:

  • 关闭各向异性筛选
  • 关闭消除锯齿

通过创建使用Sprite/Default明暗器的自定义材质并将其附加到SpriteRenderer,在Sprite明暗器中启用像素捕捉。
另外,我只想指出除非你应用物理学,* Never Use FixedUpdate*。另外,如果你的精灵有一个碰撞器并且正在移动,它应该有一个运动学刚体附加,即使你永远不会使用物理学,告诉引擎碰撞器将要移动。

展开查看全部
dwthyt8l

dwthyt8l3#

同样的问题在这里。我注意到相机设置和比例也是相当重要的修复涟漪问题。

ercv8c1e

ercv8c1e4#

以下是对我有效的方法:转到项目设置〉质量

  • 在“质量”下,将所有项的默认“质量”设置为“高”。
  • 将“各向异性纹理”设置为“禁用”完成,问题已为我解决。

图像参考:enter image description here

相关问题