游戏纹理抖动的成因分析和解决方案

本文深入探讨了Unity中游戏纹理抖动的成因,包括屏幕采样和奈奎斯特定理的影响,并提供了两种解决方案:降低图像频率和确保对象按整数倍像素移动。Unity的Pixel snap选项和自定义脚本可以帮助有效解决抖动问题。
摘要由CSDN通过智能技术生成

 

游戏纹理抖动的成因分析和解决方案

 

 

最近试用了下Unity,在开发的过程中发现了一个问题,在相机随主角移动的过程中,发现地图的细节部分不停的闪烁,非常讨厌,于是对这一问题进行研究。遂成此文。

 

一、问题

视频很好的展示了这个问题。我们用草地图片做背景,图片滤波模式设置为point,然后让摄像头沿着X轴缓慢移动,可以看到在移动过程中,图片的某些部分抖动得很厉害,这种程度的抖动对于一般游戏来说都是不可以接受的,因此网上也有些解决方案,但大部分人对抖动的成因理解不够,这篇文章将先分析抖动的成因,然后简单介绍下抖动的解决方案。

 

 

 

二、成因

我总是喜欢把结论写在前面,这样没有兴趣的同学就可以直接略过后面的大部分分析:抖动的成因:

1. 屏幕实际上是一个采样器,它对图像采样

2. 而根据奈奎施特采样定理,采样频率必须至少是图像频率的两倍,采样后的图像才能完整的代表原图像。

 

从这里我们可以知道,屏幕分辨率越低、图片高频信号越高,越容易产生抖动现象,比如把上图的图像代替成一个单色图像,显然是不会发送抖动的。

 

OK,下面开始具体的分析了,我们把图像经过屏幕显示的过程数学建模,图像经过屏幕显示呈现到人们面前,实际上是分成了两个步骤:

 

1. 采样:图像处理器从图像中选取一个或多个点平均,得到一个RGBA值,采样在shader中用tex2D函数实现,OpenGL有几种采样方式GL_NEAREST, GL_LINEARGL_LINEAR_MIPMAP_LINEAR,分别对应Unitypoint, bilineartrilinear三种采样模式。

 

2. 滤波:采样后的RGBA值通过像素发光,这是一个低通滤波器,把一个没有大小的RGBA值显示为一个像素大小的光点,可能大家对这步体验不够清楚,然而这确实有一个低通滤波的过程,不然人们只能在屏幕上看到一个个

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值