设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 3165|回复: 27
打印 上一主题 下一主题

[已经解决] rm能否调用配色板

[复制链接]

Lv5.捕梦者

梦石
0
星屑
35186
在线时间
4169 小时
注册时间
2007-12-15
帖子
10067
跳转到指定楼层
1
发表于 2018-8-14 08:13:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
本帖最后由 89444640 于 2018-8-14 15:28 编辑

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

Lv5.捕梦者 (版主)

梦石
1
星屑
23999
在线时间
3339 小时
注册时间
2011-7-8
帖子
3926

开拓者

来自 7楼
发表于 2018-8-28 01:55:54 | 只看该作者
本帖最后由 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 了

点评

本来写在某个函数里面,懒得一个个换参数了……  发表于 2018-9-6 22:33
一堆 global 差评  发表于 2018-9-6 21:53

评分

参与人数 1星屑 +250 +1 收起 理由
RyanBern + 250 + 1 猫叔怎么什么都会.jpg

查看全部评分

熟悉rgss和ruby,xp区版主~
正在填坑:《膜拜组传奇》讲述膜拜组和学霸们的故事。
已上steam:与TXBD合作的Reformers《变革者》
* 战斗调用公共事件 *
* RGSOS 网络脚本 *
回复 支持 反对

使用道具 举报

Lv5.捕梦者 (版主)

梦石
1
星屑
23999
在线时间
3339 小时
注册时间
2011-7-8
帖子
3926

开拓者

2
发表于 2018-8-14 09:20:44 手机端发表。 | 只看该作者
按说是可以对像素进行操作的,比如说你已经很确定要改哪些像素点的话……大概是这种流程

读取图片bitmap,设置部分像素点的rgb值(比如把xx色批量换成xx色),返回新的bitmap给sprite用

点评

给几个图片素材说明一下方案,我试试看……  发表于 2018-8-14 18:16
由于角色图形是一样的,用另外一个调好配色的角色,对应位置取色呢?感觉上mugen是这么干的,提取图时候发现每个角色都有个单独配色用的图  发表于 2018-8-14 10:43
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
35186
在线时间
4169 小时
注册时间
2007-12-15
帖子
10067
3
 楼主| 发表于 2018-8-14 20:12:00 | 只看该作者
guoxiaomi 发表于 2018-8-14 09:20
按说是可以对像素进行操作的,比如说你已经很确定要改哪些像素点的话……大概是这种流程

读取图片bitmap, ...

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

其他配色色板



2P配色


点评

行走图能用就行。动画因为我配色中途有变化而且颜色有重复的不好说啊。  发表于 2018-8-16 10:06
我有一个绝妙的idea……实施中……  发表于 2018-8-15 12:10
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
4598
在线时间
1206 小时
注册时间
2016-4-7
帖子
982

开拓者

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

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

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

点评

确实还存在个效率问题,另外,除非是连特效都像素化,存在粒子特效与人物动作在一起的图像,存灰度图特效就完了  发表于 2018-8-15 09:13
附庸的附庸不是我的附庸,女儿的女儿还是我的女儿。CK2沉迷ing
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
14629
在线时间
2152 小时
注册时间
2016-9-20
帖子
861
5
发表于 2018-8-18 18:24:50 | 只看该作者
本帖最后由 ppspssss 于 2018-8-18 20:23 编辑

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

点评

楼主就是89444640  发表于 2018-8-19 15:08
我发的贴子大多未经整理是草稿抱歉
回复 支持 反对

使用道具 举报

Lv5.捕梦者 (版主)

梦石
1
星屑
23999
在线时间
3339 小时
注册时间
2011-7-8
帖子
3926

开拓者

6
发表于 2018-8-27 23:13:39 | 只看该作者
本帖最后由 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实现?今天是没时间写了……


大图效果:
参考图

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


评分

参与人数 1+1 收起 理由
SixRC + 1

查看全部评分

熟悉rgss和ruby,xp区版主~
正在填坑:《膜拜组传奇》讲述膜拜组和学霸们的故事。
已上steam:与TXBD合作的Reformers《变革者》
* 战斗调用公共事件 *
* RGSOS 网络脚本 *
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
35186
在线时间
4169 小时
注册时间
2007-12-15
帖子
10067
8
 楼主| 发表于 2018-8-30 09:04:55 | 只看该作者
本帖最后由 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

点评

RM逐个修改像素点的效率太低,我正在考虑一些别的东西……特效那个我其实是比较自信能有好的效果……  发表于 2018-9-6 23:46
嗯明白了改了一下文件名①文件名为 1 的原始色图像,文件名为 2 的欲更改色。②准备原始色行走图 文件名为3。③运行文件main.m得到结果  发表于 2018-8-31 07:44
不用拆,你把images文件夹删了,运行一遍就明白了  发表于 2018-8-30 19:07
把原始图像还得拆成单张的,然后按照从上到下排序命名吧?第一列1234第二列5678……这样,然后mergeImg(4, 4);拼成行走图,省去了拼接的步骤  发表于 2018-8-30 18:28
就在main.m里,你看一下上面楼层的更新  发表于 2018-8-30 17:36
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-11-30 20:23

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表