近乎完美的像素画线条:Krita 谷歌暑期编程 (GSoC) 2024 项目简报
不知不觉又一个夏天* 过去了,今年的谷歌暑期编程项目 (GSoC) 也即将结束。
谷歌暑期编程 (GSoC) 项目的简要介绍
谷歌暑期编程 项目 (简称 GSoC),它是谷歌每年都会举办的一项活动。谷歌会向参与者支付报酬,让他们为像 Krita 这样的自由开源软件 (简称 FOSS) 项目贡献新功能和改进。这项活动对于各方来说都是双赢的:对于贡献者来说,这是一份不错的暑期工作和学习经验,还可以鼓励新鲜血液加入自由开源软件的工作中去。理论上它也能强化谷歌等公司所依赖的自由开源软件软件生态。
像许多其他自由开源软件项目一样,Krita 已经连续多年参与谷歌暑期编程活动,这些成功的项目带来了一些有用的改进,比如资源管理器的改进、全新的分镜头脚本面板、录像面板等等。
更重要的是,近年来谷歌向所有人敞开了大门 (不再仅限于高校学生参加),这样来自各行各业和不同背景的人都可以参与进来。我个人非常赞赏谷歌使得这个项目变得更加开放和公平。当然,要想成功被项目选中,你可能需要具备一定的编程基础知识和良好的沟通能力。
所以如果您觉得参与自由开源软件的开发有意思,而且你认为自己有能力,那么谷歌暑期编程活动或许是一个很好的途径,既可以让你获得报酬,又可以为您喜欢的自由开源项目项目做出贡献。
近乎完美的像素画线条
Krita 在今年的谷歌暑期编程活动中有一个项目:Ken Lo 的 Pixel Perfect Lines (完美的像素画线条),其目标是为像素画 (Pixel Art) / 精灵图 (Sprites) 画师创造更流畅的工作流程,让他们可以画出“完美”的单像素线条。
那么什么是一条“完美”的像素线条呢?
绘画的核心价值在于自我表达,所以并真正不存在客观上的好坏对错。不过任何画种都有一些人们普遍认可的惯例和传统,像素画也不例外。对于像素画来说,其中一个惯例就是对干净整洁、清晰明确的单像素线条的偏爱,这种线条常见于用于勾勒出角色或其他物体的轮廓的线条。按照我的个人理解,符合审美惯例的高质量单像素线条应该包含尽可能少的直角转折 (如 L 形、T 形等)。不绘制直角即可画出优美流畅的曲线——这看起来是一件理所当然、不值一提的事情——然而当您在极低的分辨率下绘制像素画时,你会发现做到这一点这并没有想象中的那么简单。
为了解决这个问题,Ken 的谷歌暑期编程项目计划为 Krita 添加了一个新功能,让像素画师能够使用画笔的笔触绘制出平滑、流畅、单像素线条。目前这个项目已经接近完成,笔刷类工具的防抖和平滑方式中新增了一个全新的“像素画”选项 (位于工具选项面板中),它将在很大程度上改善使用 Krita 绘制像素画的工作效率。
示例:
这个平滑模式生成的线条其实还不能算是“完美的像素画线条”,但已经相当非常接近理想的效果了。我和 Ken 在这次谷歌暑期编程项目中为达到这个目标做了许多努力,Ken 进行了大量研究,探讨如何实现这一效果。然而我们最终的结论是,要在 Krita 中实现我们心目中的“完美的像素画线条”可能需要对程序的笔刷逻辑进行较大的更改,而谷歌暑期编程项目的剩余时间不足以完成这些更改。我认为这也是一个很好的教训——最初的计划碰壁之后,与其继续钻牛角尖,我们将不得不调整当初的目标以适应新情况。
也就是说,即便使用了像素画平滑,画出的线条会依然带有少量的直角像素,需要手动擦掉它们。但肯定的是,Ken 已经通过 2024 年的谷歌暑期编程项目大幅提升了 Krita 的单像素线条品质,我相信这将为所有使用 Krita 作为创作工具的精灵图画师、像素画师、游戏开发者等带来更好的使用体验。
当然,我们也不会就这样放弃实现完美像素画线条的目标。如果您有任何能帮助该功能更上一层楼的想法,请随时联系我们!
如何使用像素画平滑功能
前面我们介绍了这项功能的细节,现在让我们看看如何使用它。
要使用全新的像素画笔刷平滑算法,请先选择手绘笔刷工具或类似的工具,然后打开“工具选项”面板,在“防抖和笔画平滑”下拉菜单中选中“像素画”。如果您使用常规笔刷预设在大尺寸画布上绘制,您应该不会发现任何性能或者线条品质的变化。而如果您使用“像素画-1”笔刷预设时,您会发现大动态的笔触可以画出更漂亮的像素画线条。
结语
以上就是 Krita 在 2024 年谷歌暑期编程活动中的项目内容了。
我们衷心感谢谷歌再次与 Krita 这样的自由开源项目合作,为大家带来又一个成功的谷歌暑期编程项目。我们也感谢今年 Krita 谷歌暑期编程项目的参与者 Ken 所做出的贡献。
最后,请让我感谢所有 Krita 的支持者和贡献者——无论是像本期简讯这样通过谷歌暑期编程活动、还是通过 Krita 发展基金 向我们捐款、亦或是 源源不断的志愿者们提交的大量代码贡献,Krita 作为一个自由开源软件项目离不开您的支持。
Emmet
*在北半球是暑期,在南半球应该是冬季