Skip to content

sselecirPyM/NekoPainter

Repository files navigation

猫画家

自由、开源、基于节点和图层的画图软件。

你用过一个又像ps又像houdini、sp的画图软件吗?不如试试这个软件。你可以使用CSharpScript扩展节点种类,编写json添加笔刷(支持任何节点)。

功能

  • 画图
  • 节点编辑器
  • 时间线

使用

描述一个全新的绘画软件

本文描述一个全新的、不存在于世界上的画图软件。此软件的目标用户是一般艺术家,与它类似的软件有ps、sai、csp、krita等。本文会简单介绍这个不存在的软件的概念和功能,并与它的同类软件做对比。

简单概括

这是一个为普通画手设计的软件,特点是拥有可编程的笔刷,同时拥有图层式和节点式合成图像,以及从文档创建时开始的的笔迹记录。

软件将会有多个套壳版本,以满足人们对不同UI的需求。

基本概念

节点图

类似于houdini的节点图。

图层

软件拥有类似于ps的图层,具有混合模式。以及用于图像合成的合成节点图。

混合模式:不同于PS和其他画图软件,此软件使用代码来控制混合,但并不需要艺术家掌握编程,艺术家只需使用程序员写好的混合模式即可。

合成节点图:每个图层拥有一个节点图,可以将一个节点设为输出节点。这看起来有点像程序化生成图像,但艺术家并不需要掌握它。

笔刷

从技术上说,此软件的笔刷完全不同于传统画图软件。此软件将用户的一划视为一个“笔迹”,而不是一个绘画过程。笔刷的作用就是将“笔迹”转换成具体的像素。因此凡是能够直接或者间接将“笔迹”转换成图像的操作和算法,都可以作为笔刷使用。

绘画

可以使用笔刷在图层上绘画。软件会使用一个笔迹节点记录你的绘画内容,使用一个转换节点(笔刷节点)将你的笔迹转换成图像,然后把它附在当前图层的合成节点上。

是否担心画错图层?如果艺术家真的不小心画错了图层,那么艺术家只需要在当前图层的合成节点图上选中所有画错的笔迹和笔刷,将其移动到正确的图层并连接到合成节点上即可。

是否需要高分辨率图像?当艺术家完成创作后,所有的笔迹和笔刷都仍然保存在文档中。艺术家可以选择重新渲染图像,得到高清的作品。

软件界面,设计几种界面以满足不同的用户,但它们共享同一个核心。

可能存在的概念(尚未明确的概念)

物体

与各种三维软件/游戏引擎兼容的物体。

摄像机

允许进行2D或3D拍摄。

功能

画图

画图是软件的核心功能。艺术家使用极高自由度的笔刷,方便操作的笔迹记录,可回溯任意时刻的图层来创作。兼具图层的直观和节点的方便。

动画

细节未知,以合成节点图为主。通过加入时间节点来控制,相比于其他画图软件使用难度可能较大,但拥有更高的自由度。

回放

整个文档可能会通过合成节点图的记录重新播放。

可读笔迹

也许笔迹和笔刷可以用于训练人工智能。

相比于其他画图软件难以实现/难以兼容的功能

选区/矩形选区/套索/魔棒

这些工具是完全针对图像进行设计的,软件无法完全兼容。这是因为这个软件的文档会保存所有的笔迹,而画手可以修改已经存在的笔迹和笔刷,这就造成了图像的不确定性,而无法保证修改后再使用这些工具的结果是正确的。但是可以考虑将图层转换为确定的图像,之后再进行操作。

油漆桶

理由同选区。

合并图层

基于节点的图层很难合并,要么将一个图层的节点完全复制到另一个图层上然后通过合并节点合并,要么将图层转换为图像后合并。这两种合并方式都会造成原图层数据损失,会影响到回放功能。

部分复制

如果把图层的某一个部分复制到其他图层的话,要么复制整个图层或者引用某个图层,要么复制图层的图像,或者裁剪不在复制区域内的合成节点之后复制。软件需要同时支持这几种复制。

参考线/尺

每次绘画会把参考线和尺加入笔迹节点与转换节点之间。但对于参考线和尺混用的情况下,可能需要做更多的工作。

目前进度

我确实在设计这样的软件:链接

至2021年9月19日,完成一部分UI的设计,UI全球化本地化,节点图雏形,图层雏形,混合模式雏形,画图雏形,文档创建保存。

未完成:节点图可视化,节点图操作,文件格式设计,数据结构设计,动画等。(可以说啥都没有)

软件需要某种编译或者解释的机制来执行节点图。

软件目前存在严重的性能问题。

技术细节

我正在设计的这个软件使用C#和.Net5开发,使用ImGui.NET作为界面,使用Vortice.DirectX11渲染。

目前混合模式和笔刷使用hlsl编写,且自由度相当低,仅为验证可行性。软件会在运行时生成shader代码并编译,然后使用它们。目前使用compute shader进行图像的处理。

考虑到跨平台兼容性,以后会切换到vulkan。