Thread
Now Our Paint dev log
-
GPU画图工具实验Now Our Paint dev log研究了使用GPU的无限画布像素模式画图工具的可行性,简要记录在此,细节参阅160本。
→从对MyPaint研究引出事实上现在看来可能可以复用之前的NUL界面库来做个简单画图程序,在PC机上用,因此可以使用GL等方便地加速,而无需担心在移动设备上运行耗电的问题。
2023/04
-
好得涂可以实现一种多种颜色笔刷。
一个小的抹颜色区域,或者就在画布上按住某个键给笔刷侧面上色(主要是实现起来方便一些),就可以实现花色笔刷。
2023/02
-
导出时图块外背景未转换为对数式,已修复
-
涂抹混合有问题,已修复
-
-
需要在软件菜单里加个版本日志按钮昂。。。
-
2023/01
-
-
→修了个问题
修好了,是涂抹时间超过0-1使得插值超界。
-
-
Windows原生基本上可以了
-
win大多数功能能用了
-
2022/12
-
-
http://scottburns.us/subtractive-color-mixture-5/↗
混色看这里
以及这个是mypaint的https://github.com/mypaint/mypaint/blob/master/doc/spectral/spectral.md
-
-
-
总的来说,还有这些需要实现了才能共享该程序的初步版本:
- 自定义的撤销命令。
- 工程文件打包。
- 切割文件导出。
- 导入导出的选项。
- 文件管理器的文件名以及过滤选项等优化。
-
-
-
-
-
要复现目前使用的MyPaint笔刷形式,还需要:
- 椭圆比例(或者sdf实现,用以更方便地获得方形)
- 跟踪速度输入
- 跟踪方向输入(以及平滑,如何实现)
- 平滑位置(如何实现)
- 随机/噪声
映射挂件的撤销有问题,暂时还没管那么多,但需要修。
空了来
✓ -
-
-
通过 这里↗ 可以下载一个测试icc以检查icc配置是否正常工作。若正常,则会显示错误颜色
-
-
2022/11
-
由于MyPaint储存为8位sRGB,因此再次打开时出现精度丢失,这是不期望的。
研究发现可以使用计算着色器进行混合。可根据这个原理继续制作画图工具。
此外,如果只是简单混合而没有涂抹,则可以考虑使用GL_EXT_shader_framebuffer_fetch↗
-
-
-
2022/05
-
更新:了解到GL_NV_texture_barrier↗可能可以允许同时读写同一张贴图,应该可以实现方便的点点点叠加,应该也容易实现笔划(但没有具体看,好像稍微麻烦些,主要是笔画的情况下如何定义自身叠加和非叠加,使用二级图应当能旁路这个问题,不过在不清楚笔画尺寸的情况下需要画多个块拼接)
2021/12
-
该工具特点
- 无限画布(最终取决于客户机内存)
- 有限撤销步数。(达到撤销步数的笔触合成到最终光栅上,未达到的为GL图元)
- 基于像素而非矢量显示。
主要局限
一些低功耗硬件可能不具备足够显存和内存以运行大图。SurfacePro6的
glxinfo
报GL最大贴图尺寸为16384×8192,显存报3058MB共享,因此目前的大图应该能合理工作,更大的效率就比较低了。无法混合和快速在原地累积,因此半透明刷子可能是很大的问题。
-
主要操作细节
贴图步进尺寸似乎可以设置为128,这也可以作为初始最小贴图的尺寸(但根据初始引用笔刷直接调节至下一个合理尺寸),每次步进就复制到新的上面,同时检查再建立同样大小伪贴图的可行性,不行则表明不能再请求这么多的显存用于贴图复制,此时启用局部高清贴图模式,丢掉未显示的那些(从内存中再读)。
涂抹和取色器采样似乎都只能从两层画完之后的视口FBO采,这样也能采到笔刷自身痕迹?(是期望的行为吗?)
保存就贴图分块读回来存。
时间原始时间每1/60秒更新一次笔刷显示列表,每提笔更新显示列表并应用最后一个撤销栈的笔画到光栅,对于不完整主图,需要重复调用内存里的那个图。
-
额外贴图
- Main Image,超尺寸的用多张Tile,显存无法分配完全的则只分配以屏幕为中心的大于屏幕的尺寸,做笔刷整合时则需要多次切换并从内存中调入完整图(以每图而不是每笔刷为循环基准)。
- 缩小贴图,用于缩小时查看,为每个主图块的小图,尚不知如何生成最好,(可能需要从CPU端生成?这样每应用一笔都需要读回来)。
- 视口FBO,复用GUI的面板FBO,则无需新建,但注意像素格式,可能需要16位。
视口FBO复制,因为需要一并混合到应用好的主图上。似乎可以直接采样底图并画到视口FBO,可以节省一个FBO。
-
其他局限
笔刷的序列混合不好实现,由于是并行提交,没有办法直接访问已工作的方块,所以可能只能以不透明和上次笔触完成后的FBO复制用以采样的方式工作。
检查了之前的GUI截图,序列透明覆盖似乎是正确的,那么非半透明的覆盖应该也是顺序正常的,并且可以使用深度。但由于界面有浮动面板,这里实际不清楚能否去掉那些的FBO因为是二次叠上去的,不同面板不一定同时都刷新。
2023/04/20 20:09:15