25. 屏幕像素和纹理像素不匹配

1.一个屏幕像素对应多个纹理像素

2.一个纹理像素对应多个屏幕像素


1.一个屏幕像素对应多个纹理像素

csharp 复制代码
1).先明确核心场景

一张1024×1024的纹理贴在3D地面上:

a.当地面离相机很近时, 纹理在屏幕上占满几百上千个像素, GPU能逐个采样纹理像素, 画面清晰

b.当地面离相机很远时, 这张1024×1024的纹理在屏幕上只占10 × 10甚至2 × 2个像素, GPU需要从纹理的1024 × 1024个原

始像素里, 挑出少数几个来填充屏幕上的这几个像素, 问题就出在这个"挑像素"的过程
csharp 复制代码
2).出现的问题

a.闪烁: 侧重"视角微移后的采样突变"

当这个情况出现在"纹理的非边缘区域", 比如布满细密图案的地面、墙面时, 就会出现闪烁; 单个屏幕像素覆盖纹理上的一

大片密集像素区域(比如: 100个纹理像素), GPU会从这一片里随机/固定采样少数几个像素来代表屏幕像素的颜色

相机只要轻微移动一丢丢, 这个屏幕像素对应的纹理区域就会完全切换成旁边另一批像素, GPU采样的颜色会突然剧变, 比如

从浅灰变深灰、从有图案变无图案; 最终视觉上就是远处纹理忽明忽暗、跳来跳去, 也就是闪烁(也叫纹理走样)
csharp 复制代码
b.锯齿: 侧重"纹理边缘的采样不连贯"

这个情况出现在纹理的清晰边缘, 比如黑白交界、图形轮廓时, 就会出现锯齿; 单个屏幕像素覆盖的纹理区域里, 既有边缘一

侧的颜色比如黑, 也有另一侧的颜色比如白; GPU无法同时显示两种颜色, 只能硬选其中一种, 导致边缘的屏幕像素要么全黑、

要么全白, 没有中间过渡; 最终视觉上就是边缘呈现阶梯状的锯齿, 而非平滑的线条

2.一个纹理像素对应多个屏幕像素

csharp 复制代码
1).先明确核心场景

这个情况出现在纹理的物理分辨率 < 显示区域的像素分辨率时, 简单说就是纹理被放大了, 比如一张256 × 256的低分辨率

纹理, 贴在1024 × 1024的UI背景/3D 模型面上, 屏幕上显示的区域需要1024 × 1024个像素, 而纹理只有256 × 256个像素 

就会出现1个纹理像素需要填充4 × 4 = 16个屏幕像素

GPU的处理逻辑: 没有额外的像素信息可以采样, 只能把单个纹理像素的颜色, 直接填充给对应的多个屏幕像素, 问题就出在

这个"无信息填充"的过程
csharp 复制代码
2).出现的问题

a.最明显: "像素化/马赛克效果"

这是最核心的问题, 用生活化的比喻就是: 把一张小尺寸的手机照片, 强行放大成海报贴在墙上, 照片里的每个小像素点,都

会变成海报上的一个大色块, 画面全是密密麻麻的方块, 边缘清晰的格子感就是马赛克

- Unity场景举例: 用128 × 128的低分辨率Sprite做手机端的全屏UI背景, 会看到整个背景都是大块的颜色方格,没有细腻

的过渡

- GPU逻辑: 单个纹理像素的颜色被直接复制到多个屏幕像素, 形成颜色一致的"像素块", 纹理的平滑感完全消失
csharp 复制代码
b.次明显: 边缘生硬/阶梯感

这里也会出现锯齿, 但和之前"单屏幕像素对应多纹理像素"的锯齿成因、表现都不同; 前者的锯齿是采样不连贯,边缘无过渡

后者的锯齿是纹理本身分辨率不足, 边缘的纹理像素被放大后, 形成更粗的阶梯状边缘

举例: 一张低分辨率的圆形纹理, 放大后边缘不是平滑的曲线, 而是一格一格的方形阶梯, 圆形看起来像"圆角正方形"
csharp 复制代码
c.隐性问题: 纹理细节完全丢失

如果纹理上有细密的细节, 比如文字、小图案、纹理纹路, 放大后这些细节会直接被抹平/消失

比如一张带文字的128 × 128纹理, 放大后文字会变成模糊的色块, 根本看不清; 3D模型的低分辨率贴图放大后, 表面的纹路

质感会完全丢失, 变成"光面"
相关推荐
xcLeigh15 小时前
Unity基础:Instantiate实例化——在运行时动态创建游戏物体
游戏·unity·游戏引擎·教程·instantiate
流浪打工人1 天前
Unity3d TimeLine中audio track的使用
unity
淡海水2 天前
02-07-原理篇-GC暂停时间的本质
开发语言·unity·c#·gc·暂停时间
WarPigs2 天前
UI路径配置SO>字典json工作流
ui·unity
淡海水2 天前
02-06-原理篇-增量式GC与并发GC
算法·unity·c#·并发·gc·增量
阿松爱学习2 天前
【Unity开发】Aspose.PDF的使用
unity·pdf·c#
淡海水2 天前
02-04-原理篇-GC Roots与对象图遍历
算法·unity·c#·图·gc·遍历·roots
Martina_03217 天前
AI生成3D场景导入 Unity/Unreal 后,NPC 总串层?用6步检查导航高度与跨层连接
人工智能·游戏·数学建模·3d·unity·自然语言处理·aigc
小贺儿开发7 天前
Unity 局域网遥控幻灯片展示工具 3.0
科技·http·unity·工具·ppt·通信·网页
WarPigs9 天前
Unity对象不应该使用null传播的问题
unity