前几篇我们用 AI 出了不少像素素材,也讲了怎么统一风格;但素材在「文件里看着挺好,一跑起来就糊」是另一回事。今天这篇补上这条链路的最后一环——渲染。用的是 Godot 官方两篇文档:《Multiple resolutions》(多分辨率)与《Using Viewports》(视口)。这是像素游戏最容易被忽视、又最影响第一印象的一步。

今日速览

  • 基础分辨率不是「窗口大小」,而是「设计尺寸」:Godot 永远不会替你切换显示器分辨率,Display > Window > Size 里的值只决定编辑器里那块蓝色画布有多大。
  • 像素游戏的关键是「先渲染在小视口,再整数放大」:Stretch Mode 选 Viewport,让画面先按基础分辨率画好,再整体缩放铺满屏幕,而不是让精灵像素去和屏幕像素错位。
  • Stretch Scale Mode 一定要改成 integer:默认的 fractional 会出现 2.133× 这种非整数缩放,直接导致像素不均匀、棋盘格歪斜、文字粗细忽大忽小。
  • 发虚 = 采样没设对,抖动 = 没做像素吸附:贴图过滤要用最近邻(Nearest),相机与节点位置要吸附到整数像素。

核心学习内容

1. 基础分辨率 = 你的「设计画布」

在 项目设置 > 显示 > 窗口 里设的宽高,官方叫 base size(基础尺寸),可以理解为「设计尺寸」——就是编辑器 2D 视图里那个蓝色矩形。它不会去改显示器分辨率。像素游戏通常按低分辨率设计,比如 320×180、640×360(都是 16:9),因为像素美术是在固定格子上一格一格画的。选多少取决于你的像素密度:想更「糙」更有复古味就选 320×180,想细节多一点就 640×360。

2. 三种 Stretch Mode,像素游戏选 Viewport

Stretch Mode 决定基础尺寸怎么被拉伸到真实屏幕,共三档:

  • Disabled(默认):不缩放,1 场景单位 = 1 屏幕像素。像素游戏一般不用,因为换个分辨率画面大小就变了。
  • Canvas Items:直接把内容按目标分辨率渲染,2D 里精灵像素和屏幕像素不再一一对应,容易出缩放瑕疵。
  • Viewport(像素画首选):先把整个场景渲染到「基础尺寸」这个视口里,再把这个视口整体放大铺满屏幕。这样每一帧都是「低分辨率画好 → 整数倍放大」,像素边界干净利落。

3. Stretch Aspect:黑边还是扩视野?

Stretch Aspect 只在 Stretch Mode 非 Disabled 时生效:

  • Keep:锁死宽高比,多余的地方补黑边(letterbox / pillarbox)。最稳,像素画不会变形。
  • Keep Width / Keep Height:一侧锁死、另一侧随屏幕「扩视野」。横版卷轴(跑酷、平台跳跃)常用 Keep Height——屏幕更宽就能看到更多右侧内容。
  • Expand:宽高都不锁,任屏幕更长的那一边扩出去。
  • Ignore:强行拉满,会非等比变形,一般不用。

结论:像素游戏起步用 Viewport + Keep,先把画面做「正」;做横版卷轴再考虑 Keep Height。

4. 整数缩放:像素完美的临门一脚

这是最容易被漏掉、效果又最明显的一步。举例:基础分辨率 640×360,窗口 1366×768。

  • 默认 fractional(分数缩放):缩放因子约 2.133×,铺满全屏,但显示器只能显示「整数像素」,结果就是像素被切得大小不一——棋盘格发歪、logo 线宽忽粗忽细。
  • 改成 integer(整数缩放):因子向下取整到 2×,四边补黑边,每个像素严格对应屏幕上的 2×2 方块,完美均匀。

设置位置:项目设置 > 显示 > 窗口 > Stretch > Scale Mode = integer。代价是牺牲一点屏幕利用率,换来像素画的「干净」——这笔账对像素游戏非常划算。

5. 收尾三件套:采样、吸附、相机

光靠视口还不够,还要:

  1. 最近邻采样:导入贴图时把 Filter 关掉(或设为 Nearest),否则引擎会做双线性插值把像素糊掉。像素画必须用 nearest。
  2. 像素吸附:开启 Rendering > 2D 下的 Snap 2D Transforms to Pixel 与 Snap 2D Vertices to Pixel,避免物体停在半像素位置导致边缘闪烁、抖动。
  3. 相机处理:Camera2D 跟随角色时,把最终位置 round() 到整数像素再赋值,否则平滑跟随会让整个画面「抖」。另外记得 Allow hiDPI 保持开启(游戏用 canvas_items / viewport 拉伸模式即可自动适配高分屏)。

🎯 DeepSeek 提示词

下面 3 条可直接复制粘贴使用,替换 <> 里的内容即可。

提示词 1:生成「像素完美渲染」项目设置清单 + 自检脚本

适用场景:新项目立项、或者画面「明明素材没问题却发虚」时,一次性把设置对齐。

你是一位资深 Godot 4 技术美术。我要做一款 2D 像素游戏,需要你帮我配置「像素完美渲染」,避免画面发虚、抖动、像素不均匀。

【项目信息】
- 引擎版本:Godot 4.x
- 基础分辨率:<例如 640x360>
- 游戏类型:<例如 横版平台跳跃>

【任务】输出两份内容:
1. 一张 Markdown 表格,列出所有需要在「项目设置」里手动修改的项,列为:设置路径 | 推荐值 | 为什么这么设(一句话)。
   必须覆盖:基础窗口尺寸、Stretch Mode、Stretch Aspect、Stretch Scale Mode、
   贴图过滤(Filter)、Snap 2D Transforms to Pixel、Snap 2D Vertices to Pixel、Allow hiDPI。
2. 一段 GDScript 自检脚本(@tool 或 Autoload 皆可),在 _ready() 时用 ProjectSettings 读取上述关键项,
   如果与推荐值不符就用 push_warning() 打印中文警告,帮我快速发现漏配。

【约束】
- 只讲清楚事实,不要编造不存在的设置项;不确定的项标注「请以官方文档为准」。
- 脚本注释用中文,每行不超过 100 字符。
- 不要输出额外的寒暄,直接从表格开始。

使用说明:把方括号里的信息替换成你的项目。跑出来的自检脚本丢进 Autoload 里,每次启动都会提醒你有没有漏设。

提示词 2:写一个「像素完美相机」

适用场景:横版 / 俯视 2D 游戏,角色一移动画面就抖,或者镜头边缘出现闪烁。

你是一位 Godot 4 GDScript 专家。请为我写一个 2D 游戏的「像素完美相机」脚本,挂在 Camera2D 上。

【需求】
- 平滑跟随目标节点(带可调 smoothing 速度),但最终 position 必须吸附到整数像素,避免画面抖动。
- 支持可选的水平/垂直边界锁定(用 Rect2 表示房间范围)。
- 支持可选的 look-ahead(朝移动方向轻微前瞻)。
- 提供一个 shake(intensity, duration) 方法做屏幕震动,震动偏移也要取舍到整数,不要产生半像素偏移。

【输出格式】
1. 一段完整、可直接保存为 camera_2d.gd 的脚本,extends Camera2D。
2. 所有可调参数用 @export,并写中文注释。
3. 脚本末尾用注释列一份「如何在场景里使用」的 3 步说明。

【约束】
- 只依赖 Godot 4 内置 API,不要用第三方插件。
- 不要用已废弃的方法(例如旧的 set_offset / drag margins 写法)。
- 解释控制在 5 行以内,重点是代码本身。

使用说明:直接让 DeepSeek 输出脚本,存成 camera_2d.gd 挂到 Camera2D 上。若你已有相机脚本,可把现有代码一起贴进去,让它「在你现有基础上加整数吸附」。

提示词 3:像素画「发虚/抖动」排查助手

适用场景:画面说不清哪里不对,让 DeepSeek 当排查向导,按症状定位到具体设置。

你是一位 Godot 4 渲染排查专家。我的 2D 像素游戏画面有问题,请按「症状 → 最可能原因 → 具体修复步骤」帮我排查。

【我的配置】
- Godot 版本:<4.x>
- 基础分辨率:<640x360>
- Stretch Mode:<当前值>
- Stretch Aspect:<当前值>
- Stretch Scale Mode:<fractional / integer>
- 窗口分辨率:<例如 1920x1080 全屏>

【症状】(勾选 / 补充)
- [ ] 像素画边缘发虚、模糊
- [ ] 棋盘格、网格看起来不均匀/歪斜
- [ ] 画面整体轻微抖动、闪烁
- [ ] 文字或 UI 线条粗细忽大忽小
- [ ] 换分辨率后画面比例变形

【任务】
1. 针对每个勾选的症状,给出最可能的 1-2 个原因(按可能性排序)。
2. 每个原因给出「项目设置路径 + 应改成的值」,或给出需要改的代码片段。
3. 最后给一个「黄金配置」总结(基础分辨率/Stretch 三项/过滤/吸附)。

【约束】
- 不确定时明确说「需要更多信息」,不要瞎猜。
- 用简体中文,条目式,不要长篇大论。

使用说明:把你的实际配置和症状勾上,DeepSeek 会给出针对性清单。适合在改完设置后仍不满意时做复查。

学习心得

做像素游戏,渲染设置是”看不见的地基”:玩法、美术、音效都做好了,结果画面一放大就糊,玩家第一眼就会觉得「廉价」。而这些问题几乎都能靠三件事解决——Viewport + 整数缩放 + 最近邻采样。更重要的是,这一类”配置 + 校验”的活儿特别适合交给 DeepSeek:它记 API 比我们牢,让它在立项时生成一份设置清单和自检脚本,等于给项目上了个”防呆装置”。对「用 AI 从零做一款能上架 Steam 的游戏」这个目标来说,能在 10 分钟内问对问题、把地基打对,比多写两天代码更值钱。

明日关注

  • 把今天的三项设置(Stretch Mode / Scale Mode / Filter)实际改到项目里,跑 1366×768 与 1920×1080 两个分辨率截图对比。
  • 用提示词 2 生成像素完美相机脚本,接上现有角色控制器,观察跟随是否还抖。
  • 整理一份「像素游戏立项检查清单」放进仓库 README,把今天学到的设置固化成模板。

本文由自动化学习流水线每日生成,坚持即学即记。