広告

2016年10月30日日曜日

簡単なPoser用フィギュアを作る(2)

ペンギンフィギュア作成の続き。書き忘れたが、使用しているPoserはバージョン11,英語版である。

1)回転順序の設定
マニュアルによると、Joint Editorを使って各ジョイントの回転順序を設定する必要がある。例えば尾羽根なら、twistはZ軸回り、bendはX軸回りなので、"ZYX"と設定する。Hierarchy Editorには"Apply Std. Rotation Order"というボタンがあり、"標準的なフィギュア"なら自動設定してくれるらしいのだが、標準的、というのが人型なのか、あるいは前回書いた予約語を持つようなものなのかよく分からない。今回はボーンが少ないので一つ一つ設定した、と言ってもデフォルトの設定で済む場合が多かった。

2)影響範囲の設定
次にボーンの影響範囲を設定する。スキニング作業というやつだ。羽以外はJoint Angleの調整のみで済ませた。


Joint Angleを左脚に設定したらFigureメニューの"Rig Symmetry -> Left To Right"(Pro版のみにある)を選ぶと右脚も同じ設定になる。もちろんボーンの内部名をあらかじめ"lLeg"、"rLeg"のように設定し、Poserに左右対称のものであることを認識させておく必要がある。

羽の部分は減衰ゾーン(falloff zone)をカプセル型にしてやってみた。


減衰ゾーンはFigureメニューの"Pose Symmetry -> Left To Right"で左から右へコピーされる。頂点を回転させてるだけなので、どうしてもきれい曲げることは出来ない。JCM (Joint Controlled Morph)を付けることにした。

3) JCM
羽を下ろした状態にし、Morphing Toolで出っ張っている頂点を引っ込めた。新しく作ったMorphダイアルにある三角をクリックして"Edit Dependencies..."を選び、"Value Operations"タブでActorを"Left Wing"、Parameterを"zRotate"にする。羽を下ろす角度は最大-67度にした。1/67≒0.015なので"Scale Factor"に"-0.015"をセットした。これで羽を下ろす(Z軸回りの回転)のに連動してモーフが働く。


あまり滑らかではないが、実験なのでこれくらいでよしとしたい。

2016年10月24日月曜日

Poserの予約語

Poserには体の各パーツ用の、あらかじめ定義された予約語みたいなものがある。頭、とか左の親指、とか。自分でフィギュアを作る場合は合わせておいた方が良さそう。これを使えば英語名が日本語版では対応する日本語に置き換わるのだと思う。ネットで調べたものを表にまとめておく。


体の各部位
Body, Head, Jaw, Neck, Chest, Waist, Abdomen, Hip
Body 1, Body 2, Body 3, Body 4, Body 5
Neck 1, Neck 2, Lower Neck, Upper Neck
頭のパーツ
Left Eye, Right Eye
Left Ear 1, Left Ear 2, Left Ear 3
Right Ear 1, Right Ear 2, Right Ear 3
手の指
Left Finger 1, Left Finger 2, Left Finger 3
Right Finger 1, Right Finger 2, Right Finger 3
指のパーツ
Left Thumb 1, Left Thumb 2, Left Thumb 3
Right Thumb 1, Right Thumb 2, Right Thumb 3
Left Index 1, Left Index 2, Left Index 3
Right Index 1, Right Index 2, Right Index 3
Left Mid 1, Left Mid 2, Left Mid 3
Right Mid 1, Right Mid 2, Right Mid 3
Left Ring 1, Left Ring 2, Left Ring 3,
Right Ring 1, Right Ring 2, Right Ring 3
Left Pinky 1, Left Pinky 2, Left Pinky 3
Right Pinky 1, Right Pinky 2, Right Pinky 3
Left Leg, Left Thigh, Left Shin
Right Leg, Right Thigh, Right Shin
Left Foot, Right Foot
Left Ankle, Right Ankle
足の指
Left Toe, Left Toe 1, Left Toe 2
Right Toe, Right Toe 1, Right Toe 2
Left Claw 1,  Left Claw 2, Left Claw 3
Right Claw 1, Right Claw 2,  Right Claw 3
Tail 1, Tail 2, Tail 3, Tail 4
Tail Fins, Right Pect Fin, Left Pect Fin

無いものは、翻訳されずにそのまま表示されるのだと思う。これで全部か分からないが、追加があれば随時更新したいと思う。

2016年10月23日日曜日

簡単なPoser用フィギュアを作る(1)

試しにPoser用のフィギュアを作ってみようと思った。モデリング、テクスチャー、ボーン構造全てが簡単に作れるものがいいだろう、ということでペンギンにしてみた。メタセコでモデリング、UVマッピングを済ませ、Wavefront obj形式で書き出せばPoserから読み込めるようになるのだが、頂点グループもobj形式を使ってPoserに渡せるのでは?と考えた。メタセコはこれが出来ないので、Blenderで頂点グループを設定し、exportの時に"polygroup"をオンにしておけばいいことが分かった。Poserでもグルーピングはできるが、やはりモデリング機能のあるアプリでやった方が作業は楽だ。

Blenderでモデリングもできれば話は早いのだが、まだ慣れていないw ポリゴンの選択の仕方は今回で少し慣れた。頂点グループに属さない頂点があるかチェックする簡単なスクリプトも作ってみた。これを動かすと、属さない頂点があれば選択状態になる。

import bpy

print("-- start\n")
objs = bpy.data.objects

bpy.ops.object.mode_set(mode = 'EDIT') 
bpy.ops.mesh.select_mode(type="VERT")
bpy.ops.mesh.select_all(action = 'DESELECT')

bpy.ops.object.mode_set(mode = 'OBJECT')

for obj in objs:
 if obj.type == "MESH":
  print(obj.name)
  for v in obj.data.vertices:
   if len(v.groups) == 0:
    v.select = True
    print(str(v.index) + "\n")

bpy.ops.object.mode_set(mode = 'EDIT') 
print("-- end\n")

Poserでobjをインポートし、Setupルームでボーンを入れた。メッシュとボーンが同じ色なので見辛い。。。


頂点グループは要はボーンに連動するスキン。ボーンの内部名とグループの名前を同じにする必要がある。ボーンの内部名(internal name)はプロパティで設定できる。

Poseルームに戻って羽などを動かしてみると、胴体とか余計な部分まで連動してしまう。ボーンの影響範囲を調整しないとダメみたいだが、これは次回の予定。

2016年10月1日土曜日

Mac上でBlenderをPythonモジュールとしてビルド

ネットでBlenderがPythonモジュールとしてビルドできることを知った。短いスクリプトならBlenderを直接起動して試せばいいが、プラグインなどを作る場合はそれなりの開発環境があった方がよさそうだ。と、いうことで、試しにMac上でビルドしてみることにした。(WindowsだとPythonがCygwinを正式にサポートしてないとか、色々面倒そうなのでパスw)

必要なファイル


Blenderのソース)
tarボールのソースを使った方が良さそうなので、以下のサイトからblender-2.77a.tar.gzをDL。

http://download.blender.org/source/

CMake)
homebrewを入れる程ではなさそうなので、以下のサイトからパッケージを導入。

https://cmake.org/download/

CMakeアプリを起動してToolsメニューから”How to Install For Command Line Use”を選ぶと、コマンドのインストール方法が表示されるので、適当なものを選んでコマンドを入れておく。

Python 3.5)
Blender 2.77aはPython 3.5.1を使ってるので、合わせるために3.5.1のパッケージを以下のサイトからDL。

https://www.python.org/downloads/

ビルド


自分が使ってるMacは

  • OS: El Capitan (10.11.6)
  • Xcode: 7.3.1

両方ともまだしばらくは更新しないと思うw 新しい環境は何かしらトラブルがあるので、落ち着くまで待つつもり。それはともかく、以下のサイトを参考にしながらBlenderをビルドしてみる。

https://wiki.blender.org/index.php/Dev:Doc/Building_Blender/Mac

まず、作業用に適当なフォルダを作り、その下にblender-2.77a.tar.gzを展開。blender-2.77aというフォルダができる。同じ階層に'lib'というフォルダを作る。ここからはターミナルを使ってコマンドをパシパシ入れていく。

cd lib
svn checkout https://svn.blender.org/svnroot/bf-blender/trunk/lib/
darwin-9.x.universal

これでビルドに必要なライブラリーは揃った。まずは普通にビルドできるか試してみる。libの上に戻って、

mkdir build_darwin
cd build_darwin
cmake ../blender-2.77a

'ccmake .'を実行するとコンフィグ画面が出てくる。コンパイル出来るか確認するだけなので、CyclesとかをOffにしてやってみた。
設定が終わったら’c'と'g'を押し、'make'してみる。ちゃんとビルドできてBlenderアプリが作られた。動くかどうかは確認しないw

次は本題である、BlenderをPythonモジュールとしてビルドすることに。正式なサポートではないらしいので、ビルドできて使えるかどうかこの時点ではわからない。ネットで調べてもMac上でやってる人は見つけられなかった。

blender-2.77aやlibと同じ階層に、こんどは'build-pymodule'というディレクトリーを作り、そこに移動。また'cmake ../blender-2.77a'をやる。そしてやはり'ccmake .'を実行。これでPythonモジュールの設定もできることが分かった。最後のページにあるのだが、ページ送りのやり方が分からないので、ひたすら下向きカーソルキーを押し続けるw 該当する項目でリターンキーを押すと設定が変更できる。以下のようにした。


WITH_PYTHON_MODULEをONにする。このときWITH_PYTHON_INSTALLはOFFにしておく必要がある。で、'c'キーを押してコンフィグしてみるとエラーが出る。他の項目のON/OFFと関係しているのかと思って色々試したが、結局WITH_PYTHON_MODULEをONにすると必ずエラーになるようだ。やっぱりダメか、と思ったが、一応エラーが出た箇所を調べて見る。blender-2.77a/source/creator/CMakeLists.txtでset_target_propertiesのパラメータが一致しない、みたいなメッセージが出ていた。ファイルをみてみると、ここがダメらしい。

if(APPLE)
 set_target_properties(
  blender
  PROPERTIES
   MACOSX_BUNDLE 
   LINK_FLAGS_RELEASE "${PLATFORM_LINKFLAGS}"
   LINK_FLAGS_DEBUG "${PLATFORM_LINKFLAGS_DEBUG}"
)

cmakeはよく知らないのだが、MACOSX_BUNDLEに値をセットする必要があるように見える。調べて見るとTRUEとかのブール値を入れればよさそうなことが分かった。試しにTRUEを入れ、'c'キーを押してみると...ビンゴ!今度はエラーが出なかった。'g'キーを押してshellに戻り'make'してみると、コンパイルが無事終了(結構時間がかかる)し、binの下に'bpy.so'ができている!一応'make install'してみると、2.77というディレクトリーが作られ、その下にアドオンなどのBlenderを動かすのに必要なファイルが作られた。

Pythonから使ってみる


まずはファイルを移動してみる。Pythonのパッケージをインストールすると、"/Library/Frameworks/Python.framework/Version/3.5"の下にPython関連のファイルが置かれる。さらにこの下の"lib/python3.5/site-packages"にbpy.soと2.77ディレクトリーをコピーし、python3を起動、'import bpy'をすると、bpy.typesモジュールが見つからないとかエラーが出てくる。どうやらbpy.soが必要なファイルを見つけられないようだ。ここでしばらく悩む。出来ればソースを調べるのは避けたいので、何か試せるものはないか考える。そこで思いついたのがMac OSアプリのファイル構成。bpy.soもアプリと同じ設定のままなのではないか?それでは、ということで、'site-packages'と同じ階層に'Resources'フォルダーを作り、そこに2.77フォルダーを入れてみた。再度ビンゴ!今度はエラーもなくbpyをインポートできた。これってもしかしてファイルの相対位置さえ守ればどこにでもおけるんじゃないの?ってことでビルドしたディレクトリーで試してみた。つまりbinと同じ階層にResourcesフォルダーを作り、そこに2.77を入れる。やってみると動く!これでファイルはどこにおいても使えることが分かった。これができるのはMac版だけかも。下の画面はPythonで試してる様子。Blenderを起動すると出てくる'Cube'も入っているw



簡単なことを試した限りでは使えそうだ。ただ、ちょっと問題も。Pythonを抜けるときにメモリーが解放できなかったというメッセージがでる。こんな感じで。
Error: Not freed memory blocks: 8, total unfreed memory 0.008392 MB

微々たるものだが、もっと使い込むと解放されないメモリーは増えるかもしれない。でもまあ使えるだけでもよしとしよう。とりあえず、これでEclipseとPyDevを使った開発環境が構築できるかもしれない。

この記事を書いている間にBlender 2.88がリリースされた。同じようにできるかはまだ分からない。