『MikuMikuDance Ver.7.23 では物理演算の同一結果出力不能に?』→大丈夫っぽい!

italic;">追記:結果MikuMikuDance 物理演算の同一結果出力不能、回避方法は分かったのですが…。 - つちのこ、のこのこ。(はてな番外地)


id:penciler(ダサツマP)さんから

MMD7.24&MME0.22で確認しましたが出力結果は一致しましたが…。
MMEは入っているだけでfxはなし。モデル一体を読み込んで適当に動かした場合です。fpsは30。

http://d.hatena.ne.jp/kadotanimitsuru/20101220/mmd#c1292846745

ご指摘いただきましたので、とり急ぎ MMD7.08 & MME0.11 30fps の環境で再度検証してみましたら……OK でした!

ううっ。良かった。良かったよ。
しかしこうなると、

こういう風にズレた画像が出たことの方が分からない……。うちの環境だと AVI 出力は 1度目しか成功しない(2度目からは最初の画で静止したままの AVI が出力されてしまう)ので、常に MMD を立ち上げ直して AVI 出力しているのですが……他の要因でもズレるのだろうか?(心当たりとしては、ずっと電源入れっぱなしだったのを今回再確認するため再起動したことくらいだけれども)

いずれにしても。これで(最悪でも MME7.08 で) VMDView での物理演算Fix に頼らずに作業続けられそう。ダサツマPさんありがとうございました。

以下余談

これ前にも書いた

って物理演算Fixしないと鞭だのツインテールだのは無理だっけか。VMDView を試してみて……あああああっ! (;_;)

むっちむちなアリスで Nostalogic 立体視テスト。 - つちのこ、のこのこ。(はてな番外地)

けれども、VMDView(今使っているのは PMDEdirot_0099 同梱のもの)での物理演算Fix が難物で、アリスの鞭が鞭というよりも蛇みたいにうねったり天を指して立ち上がったままになったりと散々なことに。キーが30万超えて読み込めない、みたいな事態になっている物理演算部分を手付け仕直すなんて不可能だし、諦めてこのままリリースしようかと観念していました。

そもそもその巨大 VMD 読み込むだけでも、うちのしょんぼりな環境だと無茶苦茶時間がかかるし、手作業で分割なんて現実的でないので

# -*- coding: utf-8 -*-

def main(START, STOP, SOURCE, DEST):
    f = open(SOURCE, 'rb')
    L = f.readlines()
    f.close()
    header = L[0:2]
    motions = int(L[2].strip())
    print 'motions:%d' % motions
    motion = []
    for i in L[3 : 3 + motions]:
        frame = int(i.split(',')[1])
        if START <= frame <= STOP:
            motion.append(i)
    print len(motion)
    hyoujyous = int(L[3 + motions].strip())
    print 'hyoujyous:%d' % hyoujyous
    hyoujyou = []
    for i in L[4 + motions : 4 + motions + hyoujyous]:
        frame = int(i.split(',')[1])
        if START <= frame <= STOP:
            hyoujyou.append(i)
    print len(hyoujyou)
    cameras = int(L[4 + motions + hyoujyous].strip())
    print 'cameras:%d' % cameras
    camera = []
    for i in L[5 + motions + hyoujyous : 5 + motions + hyoujyous + cameras]:
        frame = int(i.split(',')[1])
        if START <= frame <= STOP:
            camera.append(i)
    print len(camera)
    lights = int(L[5 + motions + hyoujyous + cameras].strip())
    print 'lights:%d' % lights
    light = []
    for i in L[6 + motions + hyoujyous + cameras:
               6 + motions + hyoujyous + cameras + lights]:
        frame = int(i.split(',')[1])
        if START <= frame <= STOP:
            light.append(i)
    print len(light)
    data = header
    data.append('%d\r\n' % len(motion))
    data += motion
    data.append('%d\r\n' % len(hyoujyou))
    data += hyoujyou
    data.append('%d\r\n' % len(camera))
    data += camera
    data.append('%d\r\n' % len(light))
    data += light
    f = open(DEST, 'wb')
    f.write(''.join(data))
    f.close()


SOURCE = 'alice_fix.csv'
START = 0
STOP = 4100
DEST = 'alice_cut1.csv'
main(START, STOP, SOURCE, DEST)
START = 4000
STOP = 8000
DEST = 'alice_cut2.csv'
main(START, STOP, SOURCE, DEST)
SOURCE = 'lilyrain_fix.csv'
START = 0
STOP = 4100
DEST = 'lilyrain_cut1.csv'
main(START, STOP, SOURCE, DEST)
START = 4000
STOP = 8000
DEST = 'lilyrain_cut2.csv'
main(START, STOP, SOURCE, DEST)

(VMDConverter で出力した CSV をフォーマット保ったままフレーム数で切り出す Python スクリプトです)
こんなやっつけ Python スクリプト作って分割する羽目になるわで、これだけで 1日分くらい潰れてました。*1

なにはともあれ、これで

こんな天頂向いて降りてこないような鞭動画公開せずに済みそう。ありがとう。(^_^)/

*1:このスクリプトはさておき VMD <-> CSV 変換にもそれの MMD の読み書きにも時間単位でかかってしまう。高速なマシン使ってる所なら数分で終わる作業なのかもしれませんが。