Project1

标题: rm能否调用配色板 [打印本页]

作者: 89444640    时间: 2018-8-14 08:13
标题: rm能否调用配色板
本帖最后由 89444640 于 2018-8-14 15:28 编辑

限定像素类敌人。
一般街机act和ftg 都有个敌人配色版,同一个造型的敌人,更改配色表现是另一种更厉害的敌人。
rm的更改敌人配色,颜色总变得十分诡异,所以不同敌人我只能增加配件重新调节,效率不高。
请问能实现配色版功能吗,包括行走图和战斗中。

作者: guoxiaomi    时间: 2018-8-14 09:20
按说是可以对像素进行操作的,比如说你已经很确定要改哪些像素点的话……大概是这种流程

读取图片bitmap,设置部分像素点的rgb值(比如把xx色批量换成xx色),返回新的bitmap给sprite用
作者: 89444640    时间: 2018-8-14 20:12
guoxiaomi 发表于 2018-8-14 09:20
按说是可以对像素进行操作的,比如说你已经很确定要改哪些像素点的话……大概是这种流程

读取图片bitmap, ...

试试就好~如果实现麻烦不如直接手动,想法挺好实际上我配色很多时候不太靠谱因为时间太长了,应该画角色时候每个颜色一种,结果我0·0·0的黑色,不但封边用了,连头发、眼睛也用了。
行走图应该靠谱些,战斗图,像素动画和特效在一起,可能够呛,先试试只有战斗动作没特效的吧

其他配色色板



2P配色



作者: shitake    时间: 2018-8-14 21:06
理论上是可以做到 但是rm绘图相关的效率很低
一个办法是将图像存成灰度图
然后再给配一个额外的调色板文件 运行时载入图后再根据调色板文件的信息来“上色”

还有一个办法是黑掉bitmap的载入,先读取图片数据然后改掉调色板部分 然后再把数据喂给bitmap的初始化方法

但是很显然这样的成本还不如你在外部的绘图/图像编辑软件里自己调整好 反正现在又不是上古时期每点内存都要斤斤计较的时代

作者: ppspssss    时间: 2018-8-18 18:24
本帖最后由 ppspssss 于 2018-8-18 20:23 编辑

我是我PS CS6 調了色彩范圍 , 再弄一張新的,最簡單
NPC自动说话测试黑板 今年的正好找到一个好像是調色板 , 你看看有没用
你找一下@89444640 他本人問

作者: guoxiaomi    时间: 2018-8-27 23:13
本帖最后由 guoxiaomi 于 2018-8-28 13:28 编辑

本楼只是展示效果,具体的方案在下面楼层。


这是一个用来给RM素材配色(换风格)的程序,需要以下几种资源文件:
原配色的图片 p1.png

大量和p1相似的图片 p1_01...16.png
新配色的图片 p2.png

运行后就会生成一大堆 p2_01...p2_16.png,其配色和 p2 一致 ,但是不一定非常好,需要稍微调整参数,或者在生成的图片上手动修改

这是 octave 的程序,进入文件夹后执行 main 就行了。相关的参数在 main 里可以看到~

具体做法以及可能的ruby实现?今天是没时间写了……


大图效果:
参考图

生成图,头发把眼睛遮住了是因为原来的发色和眼睛颜色非常接近,并且位置也非常接近,以至于区分不开,这里就需要手动改一下像素了:



作者: guoxiaomi    时间: 2018-8-28 01:55
本帖最后由 guoxiaomi 于 2019-8-14 02:31 编辑

2019/8/14 更新:
参见此贴https://rpg.blue/thread-478354-1-1.html,已经打包成单exe,无需安装octave即可运行

2018/8/30 更新:
现在支持对素材图片进行划分与合并,附件已更新

2018/8/28 更新:
修正了一个错误,附件已更新
此代码已经上传到GitLab上https://gitlab.com/gxm/rm-palette

脚本范例在此,比上面做了一些细节上的修改: rm-palette.zip (88.75 KB, 下载次数: 105)
Octave 下载地址:https://www.gnu.org/software/octave/download.html

先说一下思路:假设现在有1p.png和1p_01.png,两张图,其中2p.png已经画好了,需要根据1p->2p的颜色变化关系,获得2p_01.png这张图。
这里是这样做的:
1. 对 2p.png 这张图进行分区,把位置、颜色相似的像素点分类到一起,使用的方法是K-均值聚类算法
2. 在上一步中,会获得 m 个聚类,其中心分别是 c1 .. cm
3. 对 2p_01.png 这张图中的每一个不透明的像素点进行处理
  3.1 首先寻找 c1.. cm 中离这个像素点最近的聚类中心 ci
  3.2 在第 i 个聚类中寻找离这个像素点最近的像素点(x, y)
  3.3 将这个像素点的颜色替换成 1p.png 中像素点(x, y)的颜色

这里的最近,同时包括颜色差别和距离,相关的权重可以调整,然后上面这个算法是我自己编的,反正能用,也不知道是不是做了多余的部分。

使用方法:
1. 准备好原始图片和画风转换后的对比图,底色必须是透明的
2. 准备好跟原始图片相近的大量图片放在 images 文件夹里
3. 修改 main.m ,反复调试参数直到结果满意为止

main.m 里要修改的地方:

文件开头约13行处:
MATLAB 代码复制
  1. # parameters
  2. # cluster numbers must >= 2
  3. global c_num = 2;
  4. # color weight: [R, G, B, Y, X]
  5. global color_weight = [1, 1, 1, 0.5, 0.05];
  6. # train iteration times
  7. global iteration_max = 30;
  8.  
  9. # splitImg(filename, x_slice, y_slice)
  10. splitImg('135-Maid03.png', 4, 4);
  11.  
  12. # palette(fn_before, fn_after)
  13. palette('red.png', 'green.png');
  14.  
  15. # merge(x_slice, y_slice)
  16. mergeImg(4, 4);


# 开头的内容是注释
c_num 是聚类的个数,一般不要太大,看情况从2试起
color_weight 表示计算像素之间的距离的时候,Red, Green, Blue, Height, Width 各自的权重,后面的建议小一点
iteration_max 训练模型的最大迭代次数,别太小就行,太大意义也不大
splitImg,会把文件分成若干小块放入images文件夹里,第 1 个数字是横向分割的数量,第 2 个数字是纵向分割的数量
palette,第 1 个文件是转换前的参考图,第 2 个文件是转换后的参考图,输出结果会放在 result 文件夹里
mergeImg,将 result 文件夹中的图片合并成 result.png

关于权重,值越大说明这个属性越需要区分开。比如说,程序老是把图片上面的黑色和下面的黑色混到了一起,但是这两个本来对应的就不是同一种颜色,需要被区分开,增大 Height 的权重可以解决这个问题。cluster文件夹里会展示图片的分区。

打开 octave,切换到当前的目录。或者双击 main.m。
执行
MATLAB 代码复制
  1. main

显示:
MATLAB 代码复制
  1. split image...
  2. start training...
  3. best solution find at 1 / 30, perp = 0.8477
  4. best solution find at 2 / 30, perp = 0.9772
  5. save clusters...
  6. show new pictures...
  7. images\01.png done.
  8. images\02.png done.
  9. images\03.png done.
  10. images\04.png done.
  11. images\05.png done.
  12. images\06.png done.
  13. images\07.png done.
  14. images\08.png done.
  15. images\09.png done.
  16. images\10.png done.
  17. images\11.png done.
  18. images\12.png done.
  19. images\13.png done.
  20. images\14.png done.
  21. images\15.png done.
  22. images\16.png done.
  23. merge image...
  24. Elapsed time is 4.2108 seconds.


然后就可以查看生成的 result.png 了
作者: 89444640    时间: 2018-8-30 09:04
本帖最后由 89444640 于 2018-8-30 09:36 编辑
guoxiaomi 发表于 2018-8-28 01:55
2018/8/28 更新:
修正了一个错误,附件已更新
此代码已经上传到GitLab上https://gitlab.com/gxm/rm-palett ...


操作步骤
1、准备图像1=red (简称图像1)图像2=准备替换成的颜色(简称图像2)两个图像大小一样图片中角色所在的位置一样
2、准备大量和1一样的图片放在imge文件夹里
这一步有疑问,我是否需要把图像1缩需要转换的所有动作,都裁切成和图像1一样大的图,才可以执行操作?我如果只准备一张行走图的拼接图像,就是图像1拼接成行走图呢?
3、
这里的c_num=n是要同时修改吗?这里的%意思是和rm里面的#一样吧?注销了,上面加上%的行不执行?
上面的main去掉以后是执行完自动关闭。不去掉也能执行
那么这段是啥?输出结果?
start training...
best solution find at 1 / 100, perp = 0.8249

目前没有显示输出结果。
现在软件操作不便的地方就是,要把所有整合好的图像都拆成单一的原件,然后再改色,因为rm动画文件的那张只能是192*192,所有部分战斗动画是做成这样的,

位置不固定,格子不固定,大小不固定,拆了再拼接就相当麻烦了
而行走图,16个动作,除去一样站立姿势,也得有12个,先要拆成透明原件然后再拼接,也是略显繁琐
能再稍微智能化一点吗XD,就是行走图用已经拼接好的这种

直接放到images里,根据图2直接替换成以整张的,面得再拼接一遍
(其实就是懒- -b,能自动化的话自动化最好)

用动画试了一下,4色过度的2P配色灵梦





效果还是可以的就是操作略微麻烦,不过,图像和特效有叠加的的估计就完蛋了。

说起来,这个软件是挺好用的,不过……好像和标题的目的有点差别……这个改完色不能再RM里面直接调用吧……还得单独弄个图像导入进去。

这个特软件可以做成个插件让RMXP直接读取该好色的调色板?然后用变量控制,让玩家可以选择角色战斗图的的配色吗?角色其实不好处理,因为动作太多了……配色也不是太一致,最根本目的还是给杂鱼用ORZ




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1