汽车和飞船的各角度精灵
俯视赛车游戏里的汽车,或小行星风格射击游戏里的飞船,可以转向任意方向。在引擎里旋转一张精灵会破坏它的像素;手绘 32 个角度要花好几天。从 3D 模型出发,每个角度都是一次渲染。

为什么载具需要这么多角度
俯视 RPG 里的角色按四个或八个方向行走,所以只需要四个或八个朝向。载具不一样:它要转向。汽车转弯,或飞船在摇杆下旋转,会经过中间的每个朝向,如果精灵只能显示八个,它就会以 45 度的可见台阶从一个朝向跳到下一个。
游戏有三种解决办法:
- 在引擎里旋转一张精灵。省事,但旋转像素画会重新采样。除了 90 度的倍数以外的任何角度,线条都会断开,单个像素会变成双份或消失,开了平滑之后边缘会发软。它就不再像像素画了。
- 手绘每个角度。效果对,工作量也大:一辆车 32 个角度,加上它的受损版本,再加每种队伍颜色。设计每改一次,就得全部重画。
- 用 3D 模型渲染每个角度。1990 年代的赛车和射击游戏就是用预渲染精灵这样做的,Pixor 用的是一圈摄像机。
需要多少个角度
| 角度数 | 阶梯 | 适合 |
|---|---|---|
| 8 | 45° | 转向慢的坦克和单位,策略游戏 |
| 16 | 22.5° | 大多数俯视赛车和射击游戏,炮塔 |
| 32 | 11.25° | 转向平滑,可自由旋转的飞船 |
| 64 | 5.6° | 大型载具精灵,缓慢而精确的转向 |
精灵越大,需要的角度越多:16 像素的飞船在两个相近朝向之间几乎看不出变化,64 像素的汽车则会明显跳变。
俯视,垂直向下
对于从上方看的飞船或汽车,用俯视视图和一圈朝向来渲染:
pxr render race-car.glb --preset selout --view top-down --size 40 --ring 16 \
--clip none --export png,json -o car.png

--ring 16 在模型周围放 16 台摄像机,从正面起逆时针排列,每个朝向一台,全部共用一个尺寸和一个每米像素数比例,所以汽车在每个朝向上大小相同,并绕同一个固定轴心转动。精灵表每个朝向一行;JSON 给每一行命名,游戏据此按朝向选帧。--ring 的范围是 1 到 64;--sides 0,10,20,... 则接收你自己的角度列表。
在应用中,用大纲里的 + 添加摄像机,选择用于…的摄像机 › 俯视射击(垂直向下,16 个朝向,32 像素),或者在南摄像机上设置视图,再用绕模型一圈得到 4、8、16 或 32 个朝向。
竞速视图
街机时代的俯视赛车游戏常常斜着向下看,所以每个角度还能看到车的侧面。竞速摄像机就是这样:向下 12°,16 个朝向,64 像素。
pxr render race-car.glb --preset selout --camera racing --clip none -o car-racing.png

光固定不动,或随车转动
默认情况下,主光跟随摄像机:它在每个视图中都位于同一侧。对俯视游戏来说,这往往正是你想要的,因为每个朝向的光照都一样,精灵无论朝哪里看起来都相同。
如果光应该固定在世界里,让背对太阳的汽车把阴影面朝向玩家,请在主光上关闭跟随摄像机(--light-space world)。上面的动画用的是第三种方式:--turntable 32 让模型本身在一台摄像机下转一圈,作为一个 32 帧的动作,所以车身转动时光会在上面滑过。
每个角度都有动画
载具往往一边转向一边运动:车轮转动、引擎闪烁、炮塔跟踪。给它一个片段,每个朝向就会得到每一帧:
pxr render spaceship.glb --preset selout --view top-down --size 48 --ring 32 \
--clip all --export png,json,godot
32 个朝向时精灵表增长很快;--max-height 4096 把过高的精灵表拆成多页,整个片段放在一页,--dedupe 则让相同的帧只存一次。库中的 宇宙飞船、赛车 和 警车 是免费的 CC0 模型,可以拿来试。
免费得到变体
因为每个角度都来自同一个模型,变体几乎不花绘制成本。--variant hit-flash 写出受伤用的闪白版本;--team 配合 --variant team:blue 重新给队伍颜色上色;--material-colour 给汽车换一套涂装。手册的调色板变体一节列出了全部。对于向屏幕上方飞行而不是旋转的飞船,参见横版射击精灵。
问题
俯视汽车精灵需要多少个旋转角度?
平滑转向的通常最低要求是 16;32 在大多数速度下看起来平滑,64 适合大精灵或缓慢精确的转向。小行星风格游戏里的飞船常常是 16 或 32。少于 16 会显得一顿一顿。
为什么不在引擎里旋转一张精灵?
把像素画旋转 90 度以外的任何角度都会重新采样:线条断开,单个像素变成双份或消失,开了过滤后边缘变模糊。在每个角度各渲染一次,则在每个朝向都保持干净的单像素线条。
载具在每个角度上也能有动画吗?
可以。有了片段,每个朝向都会得到每一帧:飞船推进器的闪烁或汽车转动的车轮,在 16 个朝向下就是一张每个朝向一行的精灵表。