Blender Custom Maid 3D 2 Converter
Python

README.md

Blender-CM3D2-Converter

 3Dアダルトゲーム「カスタムメイド3D2」で使用されるモデルファイル形式(.model)を
 フリー3D統合環境である「Blender」で扱うためのアドオンです。
 ある程度Blenderの基本操作をできる人を対象にしています、
 初めての人はBlenderのチュートリアルなどから始めましょう。
 慣れてきたらCM3D2 Converterのチュートリアルもやってみましょう。

インストール (Installation)

 まず、Blender2.7以上(2.76b推奨)がインストールされており日本語化している事が前提です。
 画面右上の緑色の「Clone or download」→「Download ZIP」からファイルをダウンロード・解凍し、
 Windows7なら「C:\Users\ユーザー名\AppData\Roaming\Blender Foundation\
 Blender\2.75\scripts\addons\CM3D2 Converter\*.py」となるように配置してください。
 もしかしたらフォルダが存在しないかもしれませんが、その場合は作成してください。
 配置
 Blenderを起動しユーザー設定のアドオンタブで「cm3d」等で検索、
 「Import-Export: CM3D2 Converter」をオンにすれば一時的に有効になります。
 次回起動時からも有効にしておきたい場合は「ユーザー設定の保存」をクリックして下さい。
 有効化
 一度インストールしてしまえば、アドオン設定画面かヘルプメニューからアップデート可能です。
 更新

使い方 (How to Use)

 各種ファイルは.arcファイルからCM3D2 Tool等で取り出しておいて下さい。
 
 .modelの読み込みは
  ファイル > インポート > CM3D2 Model (.model)
 .modelの書き出しも同じように
  ファイル > エクスポート > CM3D2 Model (.model)
 model入出力手順
 
 .texの読み込みは
  UV/画像エディター > 画像 > texファイルを開く
 .texの書き出しも同じように
  UV/画像エディター > 画像 > texファイルを保存
 tex入出力手順
 
 .mateの読み込みは
  プロパティ > マテリアル > mateから
 .mateの書き出しは
  プロパティ > マテリアル > フォルダアイコンのボタン
 mate入出力手順
 
 どれもファイル選択時の左下にオプションがあります。

メモ (Note)

ボーン

 ボーン情報は「BoneData」と「LocalBoneData」というテキストデータ、
 テキスト
 もしくは、オブジェクトかアーマチュアデータ内のカスタムプロパティに保存されています。
 カスタムプロパティ
 エクスポート時にどれを参照するかを選ぶ事が可能です。
 これらを編集すればボーン設定を変更することも可能ですが、慣れない内は変えない事をおすすめします。
 なお、有志のアドオンによってボーン情報を簡単に編集可能になったようです。

オブジェクト

 読み込んだモデルによってはオブジェクトの中心点が3D空間の中心とズレている場合があります。
 その場合は出力時にもその位置に中心点を合わせてからエクスポートして下さい。

メッシュ

 四角ポリゴンがあっても自動で三角ポリゴンに変換して出力しますが、手動で三角化した方が綺麗です。
 五角ポリゴン以上でも一応出力できますが、予想した形状とはならない可能性が高いのでこちらも手動で三角化を推奨。
 ウェイトが割り当てられていない頂点があった場合、エラーを出して中止します。
 ウェイト値の合計が1.0でなくても、エクスポート時に自動的に調整します。
 ウェイトの数が5つ以上でも、自動的に割り当てが大きい順で4つ選ばれます。
 頂点数は65535未満でないと中止します。
 (UVが分離されている頂点は重複してカウントされるので、65535未満でもエラーを出す可能性あり。)

マテリアル

 マテリアル情報は、マテリアルとテクスチャと画像の設定値によって保管しています。
 シェーダーの種類(CM3D2/Toony_Lighted_Outlineなど)は、
 マテリアルタブの上部で変更可能です。
 マテリアルタブ上部
 
 またマテリアル情報をテキストでも保管しているので(名前は「Material:0」等)出力時に設定を変えれば
 そちらを参照する事も可能です。自分が編集しやすい方を活用して下さい。
 
 インポート時にマテリアルの見た目が変更されることがありますが、エクスポート時には関係ありません。

テクスチャ

 テクスチャタブ
 テクスチャタブでマテリアルの見た目についての詳細設定を行います。
 設定値の種類には大きく分けて3種類あります。

「テクスチャ」タイプ

  テクスチャタイプ
  唯一、画像を指定します。
  テクスチャパスは一致していなくても動作に問題ありませんが、
  テクスチャ名は.texファイル名をきちんと指定しましょう。

「色」タイプ

  色タイプ
  名前の通り色を指定します。

「値」タイプ

  値タイプ
  小数も指定可能な数値を設定します。

設定値の一例

  _MainTex
    面の色を決めるテクスチャ。
  _ShadowTex
    面が陰になった部分の色を決めるテクスチャ。
  _Color
    追加の色。おそらく乗算なので白で無効。
  _ShadowColor
    影になった部分の色。おそらく乗算なので白で無効。
  _RimColor
    メッシュの縁にできる反射光の色。黒で無効。
  _OutlineColor
    輪郭線の色。
  _Shininess
    光沢の強さ(Blenderでいうスペキュラー)。
  _OutlineWidth
    輪郭線の太さ。
  _RimPower
    メッシュの縁にできる反射光の濃さ・強度。
  _RimShift
    メッシュの縁にできる反射光の幅。

その他

 元の.modelに上書きする必要はありません。
 データ名が「○○.001」のように末尾に連番が付いていても自動的に削除されます。

おまけツール (Misc Tools)

  このアドオンで追加された機能はアイコン「専用アイコン」で統一されています。

CM3D2用マテリアルを新規作成

  このアドオンで使える仕様のマテリアルを新規作成できます。
  「マテリアル」タブ > 「CM3D2用マテリアルを新規作成」ボタン。
  出来るだけ汎用的な初期値にしていますが、細かい調整は必要になると思われます。
  CM3D2用マテリアルを新規作成

クイック・ウェイト転送

  メッシュデータの転送(ウェイト転送)を使いやすくしたものです。
  参考にするモデル → 割り当てるモデル の順で選択し、
  「メッシュデータ」タブ > 「頂点グループ」パネル > 「▼」ボタン > 「クイック・ウェイト転送」ボタン。
  オプションを変更しなければ、不要な頂点グループを削除してくれます。
  クイック・ウェイト転送

頂点グループぼかし

  頂点グループ(ウェイト)をぼかしてスムーズにします。
  モデルを選択し、「メッシュデータ」タブ > 「頂点グループ」パネル >
  >「▼」ボタン > 「頂点グループぼかし」ボタン。
  ウェイト転送でコピーしたウェイトがガタガタの時などにどうぞ。
  頂点グループぼかし

シェイプキー強制転送

  最も近い面(頂点)からシェイプキーをコピーします。
  参考にするモデル → 割り当てるモデル の順で選択し、
  「メッシュデータ」タブ > 「シェイプキー」パネル > 「▼」ボタン > 「シェイプキー強制転送」ボタン。
  あらかじめ参考にするモデルを分割しておくことで、コピーの精度を上げることが可能です。
  シェイプキー強制転送

シェイプキーの変形を拡大/縮小

  シェイプキーの変形を強くしたり、もしくは弱くできます。
  モデルを選択し「メッシュデータ」タブ > 「シェイプキー」パネル >
  > 「▼」ボタン > 「シェイプキーの変形を拡大/縮小」ボタン。
  シェイプキーを転送したにも関わらず身体が服を突き抜ける場合などに、
  これで変形を大きくすると修正できるかもしれません。
  シェイプキーの変形を拡大/縮小

シェイプキーをぼかす

  シェイプキーの変形をぼかしてスムーズにします。
  モデルを選択し「メッシュデータ」タブ > 「シェイプキー」パネル >
  > 「▼」ボタン > 「シェイプキーをぼかす」ボタン。
  「シェイプキー強制転送」でコピーした変形がガタガタの時などにどうぞ。
  シェイプキーをぼかす

ボーン/頂点グループ名をCM3D2用←→Blender用に変換

  ボーンと頂点グループの名前をBlenderで左右対称編集できるように変換したり元に戻せます。
  メッシュを選択し「メッシュデータ」タブ > 「頂点グループ」パネル >
  > 「▼」ボタン > 「頂点グループ名を~」ボタン。
  もしくはアーマチュアを選択し「アーマチュアデータ」タブ > 「ボーン名を~」ボタン。
  ボーン/頂点グループ名をCM3D2用←→Blender用に変換

規約 (Agreement)

公式のMOD規約を厳守して下さい。

.modelのフォーマット (.model Format)

  • (String) 「CM3D2_MESH」固定
  • (Int) バージョン番号
  • (String) モデル名
  • (String) 基点ボーン名
  • (Int) ボーン数
  • for ボーン数
    • (String) ボーン名
    • (Char) フラグ?
  • for ボーン数
    • (Int) 親番号
  • for ボーン数
    • (Float×3) ボーン位置
    • (Float×4) ボーン回転
  • (Int) 頂点数
  • (Int) メッシュ数 (マテリアル数)
  • (Int) 使用ボーン数
  • for 使用ボーン数
    • (String) ボーン名
  • for 使用ボーン数
    • (Float×16) ボーン変換行列
  • for 頂点数
    • (Float×3) 頂点位置
    • (Float×3) 法線方向
    • (Float×2) UV位置
  • (Int) 不明な数 (0もしくは頂点数と同じ)
  • for 不明な数
    • (Float×4) 不明な数値
  • for 頂点数
    • (Short×4) 割り当てるボーン番号×4
    • (Float×4) 割り当てるウェイト×4
  • for メッシュ数
    • (Int) 面数
    • for 面数
      • (Short) 頂点番号
  • (Int) マテリアル数 (メッシュ数)
  • for マテリアル数
    • (String) マテリアル名
    • (String) 使用シェーダー
    • (String) 使用シェーダー
    • while
      • (String) 設定値タイプ
      • if 設定値タイプ == "tex"
        • (String) テクスチャ名
        • (String) テクスチャタイプ
        • if テクスチャタイプ == "tex2d"
          • (String) 画像名
          • (String) 画像パス
          • (Float×4) 色 (RGBA)
      • else if 設定値タイプ == "col"
        • (String) 色名
        • (Float×4) 色 (RGBA)
      • else if 設定値タイプ == "f"
        • (String) 値名
        • (Float) 値
      • else if 設定値タイプ == "end"
        • break
  • while
    • (String) 設定値タイプ
    • if 設定値タイプ == "morph"
      • (String) モーフ名
      • (Int) 変更頂点数
      • for 変更頂点数
        • (Short) 頂点番号
        • (Float×3) 頂点位置
        • (Float×3) 法線方向
    • else if 設定値タイプ == "end"
      • break

課題 (Assignment)

  • ボーン情報を人力で編集可能な形にする(有志のアドオンにより実現)
  • 一部のmodelに含まれる「頂点数xFloatx4」分のデータを解析、入出力可能に
  • モーションファイル(.anm)関係の完全対応