慢慢移动精灵时会产生“闪烁”的效果

如何在缓慢移动精灵的时候去掉这个“g </s>”的效果?

我曾尝试调整Unity编辑器中的QualitySettingsImportSettings中的滤镜模式中的抗锯齿值,但不会改变任何内容。

在这里输入图像说明

理想情况下, 我想保持滤波器模式Point (no filter)和抗混叠打开到2倍

在这里输入图像说明

Sprite位于GameObject的Sprite Renderer组件内部。

我在这里上传了我的Unity项目: http : //www.filedropper.com/sprite

我真的不知道如何解决这个问题…任何人都可以帮助我的个人项目?

我制作了一个快速animation来演示这里发生了什么:

动画展示波纹的来源

网格代表显示器的输出像素。 如果我们可以使用无限的子像素分辨率来渲染它,我们已经在它上面覆盖了我们想要采样的滑动精灵。

每个网格单元中心的点代表它们的采样点。 因为我们使用的是Nearest-Nieghbour / Point滤镜,所以这是他们关注的纹理中唯一的一点。 当新颜色的边缘穿过该采样点时,整个像素立即改变颜色。

源素材网格不与我们的输出像素alignment时,会出现麻烦。 在上面的例子中,精灵是16×16 texels,但我已经缩放到显示器上占用17×17像素。 这意味着,在每一帧的某个地方,一些纹理必须重复。 发生这种情况时,我们移动精灵周围。

由于每个纹理元素都比一个像素略大,所以有一个时刻它完全桥接了两个相邻像素的采样点。 两个采样点都位于同一个放大的纹理元素内,因此两个像素都将该纹理元素视为最接近的一个纹理元素,并且纹理元素在两处获取输出到屏幕。

在这种情况下,由于只有十六分之一的尺度差异,所以每个纹理元素只在这个奇怪的情况下才会出现一帧或两帧,然后它转移到它的邻居,从而产生一个双倍像素的波纹,看起来在图像上滑动。

( 人们可以把它看作是由于纹理网格和采样网格的相互作用而产生的莫尔图案的一种types )

解决的办法是确保缩放像素图,使每个纹理元素以像素整数倍的大小显示

或者1:1

以1:1的比例显示无涟漪渲染的动画

或2:1,3:1 …

动画以3:1的比例显示无涟漪渲染

使用更高的倍数可以使精灵以比其自己的文字尺寸更小的增量移动,而不会局部拉伸,从而影响艺术的预期外观。

因此:密切关注您的输出的分辨率和应用于您的资产的缩放比例,以确保您保持它们之间的整数倍关系。 该CAD97链接的博客文章,您可以采取实现这一步骤。

编辑:为了在你已经上传的Unity项目中演示这个,我修改了相机设置,以便将你的像素匹配到单位设置,并且进行了以下testing。 顶部的马里奥有一个稍微非整数纹理像素比例(1.01:1),而马里奥在底部有1:1。 你可以看到只有顶级马里奥展品涟漪的文物:

两个Marios,一个展出文物

你可能对这篇关于在Unity中制作“像素完美”2D游戏的博客感兴趣。

一些相关的摘录:

如果您在Unity中使用所有默认设置来启动像素游戏,那看起来会很糟糕!

让你的像素化游戏看起来不错的秘诀是确保你的精灵呈现在一个很好的像素边界上。 换句话说,确保精灵的每个像素都在一个屏幕像素上呈现。

这些其他设置对于尽可能使事物变得非常重要。

在精灵:

  • 确保你的精灵正在使用无损压缩,如真彩色
  • closuresmipmapping
  • 使用点采样

在渲染质量设置中:

  • closures各向异性过滤
  • closures反锯齿

通过创build一个使用Sprite / Default着色器并将其附加到SpriteRenderer的自定义材质来打开精灵着色器中的像素贴紧。

另外,我只想指出, 除非你使用物理,否则使用FixedUpdate 。 另外,如果你的精灵有一个对撞机,并且正在移动,那么即使你永远不会使用物理,它也应该有一个运动的刚体,以告诉引擎对撞机将要移动。

Interesting Posts