无论您是使用 Python 还是 Lua 编程游戏或应用,您可能都在为您的游戏资源使用 PNG 图形。PNG 格式的一个优点(JPEG 不具备)是能够存储alpha 通道。Alpha 本质上是不可见性或透明度的“颜色”。Alpha 是图像中您看不到的部分。例如,如果您要绘制一个甜甜圈,甜甜圈的孔洞将充满 alpha,您可以看到它后面的任何东西。
一个常见的问题是如何找到图像的 alpha 部分。有时,您的编程框架(无论是 Python Arcade、Pygame、LÖVE 还是其他任何框架)都会检测到 alpha 通道,并(在适当的函数调用之后)将其视为透明度。这意味着它不会在存在 alpha 的地方渲染任何新像素,从而使甜甜圈孔洞保持为空。它是 100% 透明或 0% 不透明的,功能上是“不可见的”。
有时,您的框架和您的图形资源在 alpha 通道的位置(或 alpha 通道是否存在)上意见不一致,并且您会得到您想要透明的像素。
本文介绍了我知道的最可靠的解决方法。
色度键
在计算机图形学中,有几个值会影响像素的渲染方式。色度,或 chroma,描述了像素的饱和度或强度。色度键技术(也称为 绿幕)最初是作为一种化学工艺开发的,其中一种特定颜色(最初是蓝色,后来是绿色)在复制胶片负片时被 遮罩 有意遮盖,从而允许用另一个图像替换曾经是蓝色或绿色的屏幕。这是一个简化的解释,但它说明了计算机图形学中称为 alpha 通道的起源。
alpha 通道是保存在图形中的信息,用于识别旨在透明的像素。例如,RGB 图形具有红色、绿色和蓝色通道。RGBA 图形包含红色、绿色、蓝色和 alpha。alpha 的值范围可以从 0 到 1,小数位也是有效条目。
由于 alpha 通道可以用多种不同的方式表示,因此依赖嵌入式 alpha 通道可能会有问题。相反,您可以选择一种颜色,并在您的游戏框架中将其转换为 alpha 值 0。为了使之有效,您必须知道图形中的颜色。
准备您的图形
要使用专门为色度键保留的显式颜色准备图形,请在您喜欢的图形编辑器中打开该图形。我推荐 GIMP 或 Glimpse,但 mtPaint 或 Pinta 甚至 Inkscape 也可以很好地工作,具体取决于您的图形性质以及您将这些说明转换为不同工具的能力。
首先打开这只企鹅 Tux 的图形

(Seth Kenlon,CC BY-SA 4.0)
选择图形
图形打开后,转到窗口菜单,选择可停靠对话框,然后选择图层。在图层调色板中右键单击 Tux 的图层。从弹出菜单中,选择Alpha 到选择。如果您的图像没有内置 alpha 通道,则必须手动创建自己的选择。

(Seth Kenlon,CC BY-SA 4.0)
要手动创建选择,请单击工具箱中的 路径 工具。

opensource.com
(Seth Kenlon,CC BY-SA 4.0)
使用 路径 工具,在图形周围移动鼠标,在其轮廓的每个主要交点处单击并释放(不要拖动)。不必担心跟随曲线;只需找到主要交点和角。这将在每个点创建一个节点,并在它们之间绘制一条直线。您不需要闭合路径,因此当您到达开始点之前的最后一个交点时,就完成了。

(Seth Kenlon,CC BY-SA 4.0)
创建轮廓路径后,转到窗口菜单,选择可停靠对话框,然后选择工具选项。在工具选项面板中,选择编辑 (Ctrl)。激活此选项后,您可以通过单击线条或节点并调整它们以更好地适应您的图形来编辑刚刚绘制的路径。您甚至可以给线条添加曲线。

(Seth Kenlon,CC BY-SA 4.0)
现在从窗口 > 可停靠对话框菜单中选择 路径 面板。在 路径 面板中,单击 路径到选择 按钮。现在您的图形已被选中。
扩展选择
如果您觉得您的选择太紧,您可以通过扩展选择给自己一点余地。当我想在图形周围施加或加粗边框时,我有时会这样做。
要扩展选择,请单击 选择 菜单,然后选择 扩展。输入像素值,然后单击 确定。
反转选择
您已选择图形,但您实际想要选择的是除了图形之外的所有内容。这是因为您正在创建一个 alpha 蒙版来定义图形中将被其他内容替换的内容。换句话说,您需要标记将被变为不可见的像素。
要反转选择,请单击 选择 菜单,然后选择 反转。现在除了您的图形之外的所有内容都被选中。
填充 alpha
选择除了您的图形之外的所有内容后,选择您要用来指定 alpha 蒙版的颜色。最常见的颜色是绿色(正如您可能从术语“绿幕”中猜到的那样)。绿色,甚至特定的绿色阴影,并没有什么神奇之处。之所以使用绿色,是因为人类(图形处理的常见对象)不包含绿色颜料,因此很容易抠除绿色而不会意外抠除中心主题的一部分。当然,如果您的图形是绿色外星人或祖母绿或确实包含绿色的东西,您应该使用不同的颜色。您可以使用任何您想要的颜色,只要它是纯色且一致即可。如果您要对许多图形执行此操作,则您的选择应在所有图形中保持一致。

(Seth Kenlon,CC BY-SA 4.0)
使用您选择的颜色值设置您的前景色。为了确保您的选择准确,请使用颜色的 HTML 或 HSV 表示形式。例如,如果您使用纯绿色,则可以在 GIMP(以及大多数开源图形应用程序)中将其表示为 00ff00
(即 00 红色、FF 绿色和 00 蓝色,其中 F 是最大量)。

(Seth Kenlon,CC BY-SA 4.0)
无论您选择哪种颜色,请确保记下 HTML 或 HSV 值,以便您为每个图形使用完全相同的颜色。
要填充您的 alpha 蒙版,请单击 编辑 菜单,然后选择 用前景色填充。
拼合和导出
如果您在图形周围留下了边框,请将您的背景颜色设置为您要用作边框描边的颜色。这通常是黑色或白色,但它可以是任何适合您游戏美学的东西。
设置背景颜色后,单击 图像 菜单,然后选择 拼合图像。无论您是否添加了边框,都可以安全地执行此操作。此过程会从您的图像中删除 alpha 通道,并用背景颜色填充任何“透明”像素。

(Seth Kenlon,CC BY-SA 4.0)
您现在拥有一张为您的游戏引擎准备好的图像。将图像导出为您游戏引擎喜欢的任何格式,然后使用它需要的任何函数调用将其导入到您的游戏中。在您的代码中,将 alpha 值设置为 00ff00
(或您使用的任何颜色),然后使用游戏引擎的图形变换将该颜色视为 alpha 通道。
其他方法
这不是在游戏图形中获得透明度的唯一方法。查看您的游戏引擎的文档,了解它默认如何尝试处理 alpha 通道,当您不确定时,请尝试让您的游戏引擎在您开始编辑之前自动检测图形中的透明度。有时,您的游戏引擎的期望和图形的预设值恰好匹配,并且您无需进行任何额外工作即可获得透明度。
但是,当失败时,请尝试一下色度键。它在电影行业工作了近 100 年,它也可以为您工作。
1 条评论