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模型的低分辨率贴图放大后, 表面的纹路

质感会完全丢失, 变成"光面"
相关推荐
ۓ明哲ڪ3 小时前
Unity功能——创建新脚本时自动添加自定义头注释
unity·游戏引擎
熬夜敲代码的小N3 小时前
Unity大场景卡顿“急救包”:从诊断到落地的全栈优化方案
java·unity·游戏引擎
派葛穆5 小时前
Unity-realvirtual-S7通讯快速配置(未完结)
unity·游戏引擎
w-白兰地16 小时前
【Addressable远端加载资源】
unity·addressable·资源加载
小张不爱写代码19 小时前
[Unity 技巧] 如何自定义 Inspector 变量显示名称 (CustomLabel)
unity·游戏引擎
Sator119 小时前
Unity开发中常用的随机方法扩展
unity
dzj202119 小时前
Unity中使用LLMUnity遇到的问题(五)——主要脚本的继承关系+用DuckDB对知识库升级的思考
unity·向量数据库·向量搜索·duckdb·llmunity
地狱为王1 天前
Unity使用Spleeter分离人声和伴奏
unity·游戏引擎·spleeter
在路上看风景1 天前
26. Texture和Sprite
unity