社区应用 最新帖子 精华区 社区服务 会员列表 统计排行 道具中心
主题 : 有没有研究纸娃娃的人啊?来来来,一起看看!
secondsen 离线
级别: 总版主
显示用户信息 
0  发表于: 2016-07-27   

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

先来看看隔壁的一个帖子
自行添加纸娃娃的方法~   >>>>>  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
寻找 这三个颜色。。
代码如下

复制代码
  1. bit = Bitmap.new("gradients.png")
  2. arr = []
  3. arr.push(Color.new(251,220,200))
  4. arr.push(Color.new(249,193,157))
  5. arr.push(Color.new(234,151,119))
  6. file = File.new("a.txt","w")
  7. for index in 0..2
  8.   file.puts("NO. "+index.to_s)
  9.   for y in 0...280
  10.     for x in 0...256
  11.       c = bit.get_pixel(x,y)
  12.       b1 = c.red == (arr[index]).red
  13.       b2 = c.blue == (arr[index]).blue
  14.       b3 = c.green == (arr[index]).green
  15.       if (b1&&b2&&b3)
  16.         file.puts(x.to_s+", "+y.to_s)
  17.       end
  18.     end
  19.   end
  20. end
  21. file.close


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

a.txt的结果是
复制代码
  1. NO. 0
  2. NO. 1
  3. 73, 149
  4. 73, 150
  5. NO. 2
  6. 99, 148


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


选取同样的ABC区域。
在带入RM中寻找
结果如下
复制代码
  1. NO. 0
  2. 29, 200
  3. 29, 201
  4. NO. 1
  5. 49, 200
  6. 50, 200
  7. NO. 2
  8. 83, 200
  9. 83, 201
  10. 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-07-27 11:42重新编辑 ]
评价一下你浏览此帖子的感受

精彩

感动

搞笑

开心

愤怒

无聊

灌水
我就是你们的神,庶民们,追随我吧!跟着我一起拖后腿!
拖后腿的人发勋章!
secondsen 离线
级别: 总版主
显示用户信息 
1  发表于: 2016-07-27   
关于纸娃娃。。国外有人已经指出来了。
https://rpgmakermv.co/threads/how-to-add-eye-colors.1377/

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

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

但是现在看,根本就不是那么回事嘛。。
[ 此帖被secondsen在2016-07-27 11:56重新编辑 ]
我就是你们的神,庶民们,追随我吧!跟着我一起拖后腿!
拖后腿的人发勋章!
deathdark 离线
级别: 总版主
显示用户信息 
2  发表于: 2016-07-27   
你这个是什么版本用的纸娃娃?
欢迎有爱的新人老鸟来空想场所畅谈!
点击进入
secondsen 离线
级别: 总版主
显示用户信息 
3  发表于: 2016-07-27   
就是MV的啊。我下载的1.01版
我就是你们的神,庶民们,追随我吧!跟着我一起拖后腿!
拖后腿的人发勋章!
secondsen 离线
级别: 总版主
显示用户信息 
4  发表于: 2016-07-27   
我就是你们的神,庶民们,追随我吧!跟着我一起拖后腿!
拖后腿的人发勋章!
secondsen 离线
级别: 总版主
显示用户信息 
5  发表于: 2016-07-27   
现在看来我最初的想法没有错。。。参看顶楼

接着来!!!

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


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

脚本运行的结果是
复制代码
  1. NO. 0
  2. 29, 180
  3. 30, 181
  4. 29, 182
  5. 28, 183
  6. 29, 183
  7. 30, 183
  8. NO. 1
  9. 49, 180
  10. 50, 180
  11. 49, 181
  12. 50, 181
  13. 49, 182
  14. 50, 182
  15. NO. 2
  16. 83, 180
  17. 83, 181
  18. 83, 182
  19. 83, 183

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

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

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

这是为什么呢?
我就是你们的神,庶民们,追随我吧!跟着我一起拖后腿!
拖后腿的人发勋章!
deathdark 离线
级别: 总版主
显示用户信息 
6  发表于: 2016-07-28   
严重支持一下,这个东西真的很方便
欢迎有爱的新人老鸟来空想场所畅谈!
点击进入
secondsen 离线
级别: 总版主
显示用户信息 
7  发表于: 2016-07-28   
我只是想知道配色的问题。。自己参不透啊。。只能做到这里了。T_T
我就是你们的神,庶民们,追随我吧!跟着我一起拖后腿!
拖后腿的人发勋章!
secondsen 离线
级别: 总版主
显示用户信息 
8  发表于: 2016-07-28   
我尝试了一下 耳朵的face图。。有好多颜色与 gradients.png上的色条有出入。我也是醉了
我就是你们的神,庶民们,追随我吧!跟着我一起拖后腿!
拖后腿的人发勋章!
secondsen 离线
级别: 总版主
显示用户信息 
9  发表于: 2016-07-28   
我进行了最后一项测试(有可能是最后一项)

采用的图片是




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

RM脚本如下
复制代码
  1. bit = Bitmap.new("faces2.png")
  2. bitg = Bitmap.new("gradients.png")
  3. c = Color.new(255,255,255)
  4. f2 = File.new("de.txt","w")
  5. carr = [c]
  6. garr = []
  7. for i in 0...256
  8.   garr.push(i)
  9. end
  10. gy = 144
  11. for y in 0...bit.height
  12.   for x in 0...bit.width
  13.     c = bit.get_pixel(x,y)
  14.     c.alpha = 255
  15.     pp = true
  16.     for i in 0...carr.size()
  17.       if c.red == (carr[i]).red && c.green == (carr[i]).green && c.blue == (carr[i]).blue
  18.         pp = false
  19.         break
  20.       end
  21.     end
  22.     if pp
  23.       carr.push(c)
  24.     end
  25.     b = false
  26.     for i in 0...256
  27.       c2 = bitg.get_pixel(i,gy)
  28.       if c.red == c2.red && c.green == c2.green && c. blue == c2.blue
  29.         garr.delete(i)
  30.         b = true
  31.       end
  32.     end
  33.     if b == false && pp
  34.       f2.puts(c.red.to_i.to_s+","+c.green.to_i.to_s+","+c.blue.to_i.to_s)
  35.     end
  36.   end
  37. end
  38. p garr
  39. p carr.size
  40. p carr
  41. bit.dispose
  42. bitg.dispose
  43. f2.close
  44. exit


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

而不再色条上的颜色我已经用脚本记录下来了,如下
复制代码
  1. 56,22,5
  2. 0,0,0
  3. 83,34,6
  4. 166,92,46
  5. 50,20,4
  6. 31,16,3
  7. 18,9,0
  8. 9,4,0
  9. 115,51,14
  10. 136,65,23
  11. 9,5,0
  12. 13,5,0
  13. 16,0,0
  14. 15,5,0
  15. 152,78,33
  16. 11,6,0
  17. 11,5,0
  18. 68,28,6
  19. 3,0,0
  20. 92,40,9
  21. 14,7,0
  22. 31,12,0
  23. 30,15,0
  24. 18,9,3
  25. 10,3,3
  26. 63,26,6
  27. 19,9,3
  28. 18,0,0
  29. 16,8,0
  30. 23,10,3
  31. 56,24,4
  32. 25,10,3
  33. 17,9,0
  34. 20,8,3
  35. 29,12,1
  36. 18,7,2
  37. 16,7,0
  38. 39,16,4
  39. 21,10,0
  40. 17,7,2
  41. 39,17,4
  42. 28,28,0
  43. 12,8,0
  44. 51,20,4
  45. 126,58,19
  46. 8,4,0
  47. 9,0,0
  48. 169,95,52
  49. 15,7,0
  50. 18,8,3
  51. 22,10,2
  52. 224,175,140
  53. 86,37,8
  54. 135,63,22
  55. 12,4,0
  56. 12,5,2
  57. 227,178,147
  58. 19,9,0
  59. 233,190,163
  60. 20,10,3
  61. 28,12,2
  62. 243,208,180
  63. 19,8,4
  64. 85,0,0
  65. 37,16,2
  66. 64,27,4
  67. 14,5,0
  68. 26,0,0
  69. 80,35,6
  70. 69,28,5
  71. 27,10,2
  72. 6,6,0
  73. 10,3,0
  74. 155,77,34
  75. 14,6,2
  76. 215,154,122
  77. 17,8,2
  78. 204,153,112
  79. 210,148,113
  80. 8,0,0
  81. 18,9,2
  82. 202,138,100
  83. 255,209,185
  84. 22,10,1
  85. 201,134,107
  86. 242,217,191
  87. 43,0,0
  88. 56,22,4
  89. 205,139,100
  90. 244,213,191
  91. 26,9,0
  92. 220,164,133
  93. 242,215,188
  94. 20,8,4
  95. 128,64,0
  96. 255,198,198
  97. 247,214,192
  98. 5,5,0
  99. 6,3,0
  100. 248,214,192
  101. 19,7,2
  102. 248,214,194
  103. 32,15,2
  104. 26,12,2
  105. 255,191,191
  106. 247,213,191
  107. 53,22,3
  108. 245,212,191
  109. 14,7,4
  110. 184,112,69
  111. 244,210,186
  112. 9,3,0
  113. 40,15,4
  114. 17,7,3
  115. 242,203,179
  116. 17,8,3
  117. 54,27,0
  118. 99,43,9
  119. 237,196,169
  120. 25,11,4
  121. 23,8,0
  122. 232,186,157
  123. 32,14,4
  124. 13,4,0
  125. 170,85,43
  126. 30,8,0
  127. 38,17,3
  128. 81,34,5
  129. 39,15,0
  130. 34,14,2

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

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

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

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

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

gy改成148(第二配色)

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

从侧面印证了我的想法。
[ 此帖被secondsen在2016-07-28 17:20重新编辑 ]
我就是你们的神,庶民们,追随我吧!跟着我一起拖后腿!
拖后腿的人发勋章!
描述
快速回复

认证码:

验证问题:
22-5=?,答案:17 正确答案:17
按"Ctrl+Enter"直接提交