打印

[讨论] Kirikiri2系统的txt分割型立绘的合成问题

引用:
原帖由 haibara 于 2010-04-06 14:26 发表
        public int lineardodge(int src, int dest) {
                Sc = Math.min(1D, (src / 255D) + (dest / 255D));
                Dc = dest / 255D;
                Sca = Sa * Sc;
                Dca = Da * Dc;
                return (int) ((Sca + Dca * (1 - Sa)) / Ra * 255);
        }
看不懂你为何将部分blending先算到Sc内...
引用:
        private final long QuantumRange = 65535L;
        private final double QuantumScale = 1D / 65535L;
        private final double MagickEpsilon = 1.0e-10;
你这个是每通道16位的定义
每通道8位的话
QuantumRange = 255
QuantumScale = 1 / 255
MagickEpsilon = 1.0e-6

参考:
http://www.imagemagick.org/RMagick/doc/constants.html
http://www.imagemagick.org/api/M ... type_8h-source.html
引用:
00039 #if (MAGICKCORE_QUANTUM_DEPTH == 8)
00040 #define MagickEpsilon  1.0e-6
00041 #define MagickHuge     1.0e6
00042 #define MaxColormapSize  256UL
00043 #define MaxMap  255UL
00044
00045 typedef double MagickRealType;
00046 #if defined(MAGICKCORE_HDRI_SUPPORT)
00047 typedef float Quantum;
00048 #define QuantumRange  255.0
00049 #define QuantumFormat  "%g"
00050 #else
00051 typedef unsigned char Quantum;
00052 #define QuantumRange  255UL
00053 #define QuantumFormat  "%u"
00054 #endif
引用:
原帖由 haibara 于 2010-04-07 07:12 发表


因为我看blendcomposite是先混合出result再与dest进行blending的

奇怪,我搜索的怎么是那样的(/www/api/MagickCore/magick-type_8h.html),不过即使换成8位,结果仍然很大不同
不是指这段吧...
引用:
// mixes the result with the opacity
dstPixels[x] = ((int) (dstPixel[3] + (result[3] - dstPixel[3]) * alpha) & 0xFF) << 24 |
                           ((int) (dstPixel[0] + (result[0] - dstPixel[0]) * alpha) & 0xFF) << 16 |
                           ((int) (dstPixel[1] + (result[1] - dstPixel[1]) * alpha) & 0xFF) <<  8 |
                                (int) (dstPixel[2] + (result[2] - dstPixel[2]) * alpha) & 0xFF;
我找不到其它先混合出result再与dest进行blending的地方...

IM可能还有其它处理
只用CompositeLinearDodge做不到效果...
引用:
原帖由 haibara 于 2010-04-08 20:53 发表
case SUBTRACT:
                    return new Blender() {
                        @Override
                        public void blend(int[] src, int[] dst, int[] result) {
                            result[0] = Math.max(0, src[0] + dst[0] - 256);
                            result[1] = Math.max(0, src[1] + dst[1] - 256);
                            result[2] = Math.max(0, src[2] + dst[2] - 256);
                            result[3] = Math.min(255, src[3] + dst[3] - (src[3] * dst[3]) / 255);
                        }
                    };

这部是是linearburn

                    dstPixels[x] = ((int) (dstPixel[3] + (result[3] - dstPixel[3]) * alpha) & 0xFF) << 24 |
                                   ((int) (dstPixel[0] + (result[0] - dstPixel[0]) * alpha) & 0xFF) << 16 |
                                   ((int) (dstPixel[1] + (result[1] - dstPixel[1]) * alpha) & 0xFF) <<  8 |
                                    (int) (dstPixel[2] + (result[2] - dstPixel[2]) * alpha) & 0xFF;

这部是alpha blending
我是看不懂你为何做linearburn之后又做alpha blending...
BlendComposite那个alpha你也说是自定义的图层alpha
只做linearburn就可以了...
不过既然你搞定了,也不深究下去了
引用:
不过我看不懂公式怎么计算出Sa + Da的?
我也不明白SVG的plus
f(Sc,Dc) = Sc + Dc
X        = 1
Y        = 1
Z        = 1

Da'  = X.Sa.Da  + Y.Sa.(1-Da)   + Z.Da.(1-Sa)
按理是
Da'  = Sa.Da  + Sa.(1-Da)   + Da.(1-Sa)
     = Sa + Da - Sa.Da
真的不知道如何会变成这样…
Da'  = Sa.Da + Da.Sa + Sa.(1 - Da) + Da.(1 - Sa)
     = Sa + Da
引用:
原帖由 haibara 于 2010-04-09 14:06 发表
sfsuvival, 我想问你的PSD是怎么做

如何正确解析TXT中的合成关系?有什么公式吗
我是写Photoshop的脚本 (Script) 制作psd的
我只作過天神乱漫和メルクリア的psd
也只研究过这两个的txt文件

txt有两种
一种是描述图层的 (*.txt,不包括*_info.txt)
另一种是如何使用图层组成表情的 (*_info.txt)

描述图层的txt
引用:
#layer_type        name        left        top        width        height        type        opacity        visible        layer_id        group_layer_id       
layer_type是该图层是普通图层(ArtLayer) 还是图层文件夹(LayerSet/Group)
0是普通图层,2是图层文件夹
type见本帖1L
layer_id是分割后的图的id
group_layer_id是该图层所在的图层文件夹的id

天神乱漫的比较简单
type只有13和16
而且没有group_layer_id
メルクリア的很麻煩
我看過的type有13,14,16,21
而且有group_layer_id
图层名称混乱
还有些txt写是type=left=top=width=height=0的垃圾图层
(对应的是不透明全白32x32的32位图)


描述如何使用图层组成表情的txt
列大概有三种
1. dress为首的列,描述如何组成服装/身体
引用:
dress        01        base        ダミー
就是ダミー,沒用的…

天神乱漫
引用:
dress        パジャマ        diff        1        パジャマポーズA
dress        パジャマ        diff        2        パジャマポーズA(腕差分)
dress        制服春エプロン        diff        1        エプロン制服春ポーズA
dress        制服春エプロン        diff        2        エプロン制服春ポーズA(腕差分)
メルクリア
引用:
dress        01        diff        a        素体/01a
dress        01        diff        b        素体/01b
dress        01        diff        c        上乗せ/c指_通常
dress        01        diff        c        素体/01c
dress        01        diff        TA        素体/01TA
第二栏+第四栏是该组合的名称
第五栏是图层位置(素体/01a->”素体”图层文件夹下的”01a”图层)

虽说是组合
但不一定将其合并就了事
如上述メルクリア的
dress        01        diff        c        上乗せ/c指_通常
dress        01        diff        c        素体/01c
这个要”素体/01c” +face+”上乗せ/c指_通常” 依次迭上去
因为face会盖过手指
所以要用”上乗せ/c指_通常”盖上去

2. face为首的列,描述如何组成表情
天神乱漫
引用:
face        01        base        通常1
face        02        base        笑顔1
face        03        base        真剣
メルクリア
引用:
face        face01        base        表情/眉/01_02_03_04_14_22
face        face01        base        表情/目/01_02_06_13_21
face        face01        base        表情/口/01
face        face01        base        表情/頬hi/01_02_06_07_08_11_12_13_14_15_16_17_18_21
第二栏是该组合的名称
第四栏是图层位置

3. rename为首的列,用来重命名以上组合
メルクリア
引用:
rename        dress        制服1        01
rename        diff        腕上げ        a
rename        face        通常        face01
第二栏是组合类型(diff是dress列的diff)
将第四栏的名称重命名为第三栏
01->制服1
a->腕上げ
face01->通常

合成基本就是将face的组合迭在dress的组合上
例外就是上面提到的”素体/01c” +face+”上乗せ/c指_通常”

完...

[ 本帖最后由 sfsuvival 于 2010-04-19 20:49 编辑 ]
补充33L的内容,之前忘了说
1. 我看过有些メルクリア描述图层的txt的opacity不是255,是230的
所以opacity也不能忽视
整个txt看来也只有visible栏可以不理…
2. 33L写的 素体/01a->”素体”图层文件夹下的”01a”图层
“01a” 不一定是图层,可以是图层文件夹
素体/01a可以是指”素体”图层文件夹下的”01a”图层文件夹下的所有图层
3.
引用:
face        face01        base        表情/眉/01_02_03_04_14_22
face        face01        base        表情/目/01_02_06_13_21
face        face01        base        表情/口/01
face        face01        base        表情/頬hi/01_02_06_07_08_11_12_13_14_15_16_17_18_21
在组合内出现的先后是图层的次序
“表情/頬hi/01_02_06_07_08_11_12_13_14_15_16_17_18_21” 是底
依次迭上去是” 表情/口/01”
“表情/目/01_02_06_13_21”
最上的是” 表情/眉/01_02_03_04_14_22”

试了一下kirikiri2TXT
kirikiri2TXT没有输出txt记录的整张图的大小
你是交给DirectMuxer根据要合成的图决定合成图的大小?

现在kirikiri2TXT是将分割图根据txt的图层名称,再加上坐标和合成方式重命名吧?
如果*_info.txt没有rename命令
图的名称就只用*.txt内的图层名称
否则根据*_info.txt的rename命名?

kirikiri2TXT根据*_info.txt的rename重命名分割图有问题
rename是用来重命名一组图
不是针对一张图的
而每张图也可以属于多组合内
引用:
face        face01        base        表情/眉/01
face        xface01        base        表情/眉/01
"表情/眉/01"同时出现在face01和xface01
kirikiri2TXT将"表情/眉/01"命名为xface01在rename对应的名称
没有了face01的
解决方法可以是将属于多个组合的图复制多张再命名


用了メルクリア和天神乱漫的txt做测试

メルクリア
引用:

2010/04/19 3:17:21 kirikiri2TXT txt2bat
Warning: matched not definition 表情/その他/06 of Z:\TEMP\k\bst_02日未子_正面_1_7291.png
你应该是没有忽略以#开首的行吧?
所以有这个警告

天神乱漫
引用:
2010/04/19 3:17:15 kirikiri2TXT txt2bat
致命的: matched unknown layer id 498 of Z:\TEMP\a\葵_ポーズa_1_498.png

2010/04/19 3:17:15 kirikiri2TXT txt2bat
致命的: matched unknown layer id 514 of Z:\TEMP\a\葵_ポーズa_1_514.png

2010/04/19 3:17:15 kirikiri2TXT txt2bat
致命的: matched unknown layer id 421 of Z:\TEMP\a\葵_ポーズa_1_421.png
这三张是txt没有记录的图
你是读整个文件夹的所有分割图然后再在对应的txt找图层属性?

[ 本帖最后由 sfsuvival 于 2010-04-20 11:15 编辑 ]
是的
opacity栏的数值指的是该图层的opacity
我说opacity是230的那组立绘
http://u.115.com/file/t12d795f1f
应该是乘吧
如果opacity是[0,1] 的话
Sa = (double) alpha * opacity;
如果opacity是[0,255] 的话
Sa = (double) alpha / 255 * opacity;
opacity是对当前图层而言
不是结果
结果是由最底的图层开始累积得来的
如果opacity是指结果
那只要将一图层的opacity设0
在该图层下的所有图层都废了
试了一下
和我的一样
不过如果info.txt有这样的bug
复制内容到剪贴板
代码:
dress        00        diff        a        素体/00a
dress        00        diff        b        素体/00b
dress        00        diff        RO        素体/00RO
dress        00        diff        RR        素体/00RR
dress        00        diff        TA        素体/00TA

rename        dress        制服2        01
rename        dress        制服1        02
rename        dress        制服1ケープなし        03
rename        dress        制服1破け        04
rename        dress        裸        00

rename        diff        詠唱        a
rename        diff        ロッド無        b
rename        diff        ロッド1        RO
rename        diff        ロッド2        RR
rename        diff        タクト        TA
b错了
应该是b
现在kirikiri2txt因为不能配对?b所以没有复制”素体/00b”
info.txt也有颇多bug的...
查看积分策略说明

快速回复主题

选项

[完成后可按 Ctrl+Enter 发布]  预览帖子  恢复数据  清空内容

当前时区 GMT+8, 现在时间是 2024-03-29 03:07

Processed in 0.014962 second(s), 6 queries.