secondsen 发表于 2016-7-27 11:18:45

有没有研究纸娃娃的人啊?来来来,一起看看!

先来看看隔壁的一个帖子
自行添加纸娃娃的方法~   >>>>>  http://rm.66rpg.com/forum.php?mod=viewthread&tid=384814

那么。接下来是正题。。

配色是咋配的啊?

我尝试了一下,

以默认的 body 模板为例。

分别去ABC三个区域的颜色。。
分别是
A 251,222,200
B 249,193,157
C 234,151,119
我用RM打开gradients.png
寻找 这三个颜色。。
代码如下

bit = Bitmap.new("gradients.png")

arr = []
arr.push(Color.new(251,220,200))
arr.push(Color.new(249,193,157))
arr.push(Color.new(234,151,119))

file = File.new("a.txt","w")

for index in 0..2
  file.puts("NO. "+index.to_s)
  for y in 0...280
    for x in 0...256
      c = bit.get_pixel(x,y)
      b1 = c.red == (arr).red
      b2 = c.blue == (arr).blue
      b3 = c.green == (arr).green
      if (b1&&b2&&b3)
        file.puts(x.to_s+", "+y.to_s)
      end
    end
  end
end

file.close

但是。。在gradients.png中没有A点的颜色。。。

a.txt的结果是
NO. 0
NO. 1
73, 149
73, 150
NO. 2
99, 148

我没有放弃。。。换个肤色。。我在Mv的角色生成器中奖肤色换成粉色的,保存图片。。如图

选取同样的ABC区域。
在带入RM中寻找
结果如下
NO. 0
29, 200
29, 201
NO. 1
49, 200
50, 200
NO. 2
83, 200
83, 201
83, 203


这回没有问题了。。颜色应该都是出自gradients.png

但是默认的模板怎么就缺少颜色呢。。我仍然没有放弃。。
默认的皮肤颜色。从输出的a.txt来看应该是y=148这一行的颜色上。
我用ps找了找。
发现251,222,200虽然没有。但是
gradients.png中 (42,148)的颜色是251,221,201
(43,148)的颜色是251,220,199
那么251,222,200的颜色应该在这附近
暂时算作 (42.5,148)好了

我们可以将gradients.png这样看待
y坐标代表的哪一条渲染色。
x代表具体的颜色

那么默认模板和粉色的三个点我们已经知道了。。
但是,请观察各自的x坐标。是不一样的。。

那么问题来了
1. 默认模板的颜色缺失(虽然有相近的颜色),那么颜色在计算的时候是如何匹配的?
2.颜色的x坐标不一致,那么目标颜色的x是怎么计算出来的?

有没有研究过的达人,来揭秘一下?

secondsen 发表于 2016-7-27 11:51:41

关于纸娃娃。。国外有人已经指出来了。
https://rpgmakermv.co/threads/how-to-add-eye-colors.1377/

但是程序内部怎么计算出来颜色的,谁有思路啊?

我原以为。模板的所有颜色在gradients.png中都能找到。。进而找到颜色的x值。
换色的话,只是单纯的换y值,这样就能定位颜色了。。

但是现在看,根本就不是那么回事嘛。。

deathdark 发表于 2016-7-27 12:10:41

你这个是什么版本用的纸娃娃?

secondsen 发表于 2016-7-27 12:53:16

就是MV的啊。我下载的1.01版

secondsen 发表于 2016-7-27 13:27:09

发现个好东西

http://forums.rpgmakerweb.com/index.php?/topic/56569-rpg-maker-mv-extended-generator-version-alpha-005/

http://forums.rpgmakerweb.com/index.php?/topic/46840-adding-graphical-assets-to-the-generator/#comment-469229

http://forums.rpgmakerweb.com/index.php?/topic/64412-rpg-maker-mv-character-generator-tutorial/#comment-618138

secondsen 发表于 2016-7-27 18:59:13

现在看来我最初的想法没有错。。。参看顶楼

接着来!!!

只有两个范例,不足以说明问题。于是我决定在实验一次。。这一次我做了一个蓝皮肤的角色,再来看看颜色的分布。。如图所示。。

ABC的颜色分别是
222,241,253
190,227,251
144,211,247

脚本运行的结果是

NO. 0
29, 180
30, 181
29, 182
28, 183
29, 183
30, 183
NO. 1
49, 180
50, 180
49, 181
50, 181
49, 182
50, 182
NO. 2
83, 180
83, 181
83, 182
83, 183

请注意 x坐标与 粉色的角色 是完全一致的!

也就是说,无论选择的角色颜色怎么变,最终颜色在gradients.png中的x值是不变的。

现在只剩一个问题。。
程序是如何根据默认的模板找到gradients.png中的颜色的?要知道有颜色缺失,并且默认模板使用的颜色,其x值与生成的粉色人、蓝色人是不一致的啊。。

这是为什么呢?

deathdark 发表于 2016-7-28 13:38:22

严重支持一下,这个东西真的很方便

secondsen 发表于 2016-7-28 16:17:49

我只是想知道配色的问题。。自己参不透啊。。只能做到这里了。T_T

secondsen 发表于 2016-7-28 16:18:48

我尝试了一下 耳朵的face图。。有好多颜色与 gradients.png上的色条有出入。我也是醉了

secondsen 发表于 2016-7-28 17:02:56

我进行了最后一项测试(有可能是最后一项)

采用的图片是



精灵耳朵的第一个着色(由于模板颜色不在gradient上,不具备比较的价值,所以,需要选择配色图)

RM脚本如下

bit = Bitmap.new("faces2.png")
bitg = Bitmap.new("gradients.png")
c = Color.new(255,255,255)

f2 = File.new("de.txt","w")

carr =
garr = []
for i in 0...256
  garr.push(i)
end

gy = 144

for y in 0...bit.height
  for x in 0...bit.width
    c = bit.get_pixel(x,y)
    c.alpha = 255
    pp = true
    for i in 0...carr.size()
      if c.red == (carr).red && c.green == (carr).green && c.blue == (carr).blue
        pp = false
        break
      end
    end
    if pp
      carr.push(c)
    end
    b = false
    for i in 0...256
      c2 = bitg.get_pixel(i,gy)
      if c.red == c2.red && c.green == c2.green && c. blue == c2.blue
        garr.delete(i)
        b = true
      end
    end
    if b == false && pp
      f2.puts(c.red.to_i.to_s+","+c.green.to_i.to_s+","+c.blue.to_i.to_s)
    end
  end
end

p garr
p carr.size
p carr

bit.dispose
bitg.dispose

f2.close

exit


结果发现,这幅图片一共采用了348种颜色,这是大于256的。要知道gradient的宽度是256,也就是说色条上的颜色一共才256种。
而色条上的颜色也并不是全部都被使用了,大概三四十种颜色是没有被使用的。

而不再色条上的颜色我已经用脚本记录下来了,如下

56,22,5
0,0,0
83,34,6
166,92,46
50,20,4
31,16,3
18,9,0
9,4,0
115,51,14
136,65,23
9,5,0
13,5,0
16,0,0
15,5,0
152,78,33
11,6,0
11,5,0
68,28,6
3,0,0
92,40,9
14,7,0
31,12,0
30,15,0
18,9,3
10,3,3
63,26,6
19,9,3
18,0,0
16,8,0
23,10,3
56,24,4
25,10,3
17,9,0
20,8,3
29,12,1
18,7,2
16,7,0
39,16,4
21,10,0
17,7,2
39,17,4
28,28,0
12,8,0
51,20,4
126,58,19
8,4,0
9,0,0
169,95,52
15,7,0
18,8,3
22,10,2
224,175,140
86,37,8
135,63,22
12,4,0
12,5,2
227,178,147
19,9,0
233,190,163
20,10,3
28,12,2
243,208,180
19,8,4
85,0,0
37,16,2
64,27,4
14,5,0
26,0,0
80,35,6
69,28,5
27,10,2
6,6,0
10,3,0
155,77,34
14,6,2
215,154,122
17,8,2
204,153,112
210,148,113
8,0,0
18,9,2
202,138,100
255,209,185
22,10,1
201,134,107
242,217,191
43,0,0
56,22,4
205,139,100
244,213,191
26,9,0
220,164,133
242,215,188
20,8,4
128,64,0
255,198,198
247,214,192
5,5,0
6,3,0
248,214,192
19,7,2
248,214,194
32,15,2
26,12,2
255,191,191
247,213,191
53,22,3
245,212,191
14,7,4
184,112,69
244,210,186
9,3,0
40,15,4
17,7,3
242,203,179
17,8,3
54,27,0
99,43,9
237,196,169
25,11,4
23,8,0
232,186,157
32,14,4
13,4,0
170,85,43
30,8,0
38,17,3
81,34,5
39,15,0
34,14,2

不在色条上的前4个颜色
56,22,5
0,0,0
83,34,6
166,92,46
我在色条上找到了相近颜色的位置。
(其他的颜色肯定都能找到相近色,因为都是肉皮色嘛)
据此可以推测,配色图的颜色选取不单纯的是在gradient上找取颜色。
应该是根据色条来计算颜色,才对。

当然,不排除行走图和练图,取色原则不一致的可能性。不过,我想不会有人这么无聊,一个程序搞两套取色算法吧。

我觉得有可能是程序内部有一套模板色的色表,然后算法需要根据模板颜色,目标颜色,及色条,来计算目标色(而不是简单的在色条上取色)。。。最终,我们需要的图像就出来了。

以上,只是个人的推测。不作数。。

我最后实验了 精灵耳朵的第二个配色,仍然是这个脚本。。

gy改成148(第二配色)

一种采用的颜色是324种,约三四十种色条中的颜色未被使用。

从侧面印证了我的想法。
页: [1] 2
查看完整版本: 有没有研究纸娃娃的人啊?来来来,一起看看!