広告

2017年5月11日木曜日

Blenderでシワシワな影

メタセコで作ったモデルをobj経由でBlenderに持って来て、UV展開やり直したり、頂点グループを作ったりしていた。Blenderだとシームが定義できるので、メタセコより便利だ。仮のテクスチャを使っていたのだが、作業中は面が裏返ってることに全然気づかなかった。修正してみたら、今度はシワが入ったような変な影が出る。

法線を再計算させたり、単に反転させても変わらず。テクスチャをやめて単純な赤い色のマテリアルにしてみたが、ダメ。その時の様子が下図。不気味感出てるw



バンプや法線マップのトラブルみたいに見えるが、そんなものは使ってない。どうすりゃいいんだと、何となくBlenderをイジっていて見つけたのがこれ。


存在すら知らなかった"Custom Split Normals"。メタセコでobjを書き出すときに法線も付け、それをそのまま読み込んだのがいけなかったのか?とにかくボタンを押してみたらあっさり問題解決。しかし、UVマップが無くなっているのに気付いた。これは面を反転させたりしたときに消えたのだろう。頂点の順番とか変わるだろうから。またUV展開やり直しだ。

2016年11月6日日曜日

マウスのチャタリング

ロジクールのマウスM705の左ボタンがチャタリングを起こすようになってしまった。2年以上は使っていると思う。シングルリックの筈がダブルクリックになってしまい、エクスプローラーのウィンドウが画面一杯になってしまうとか、とにかく使いづらい。マウスも消耗品だが、左ボタン以外は大丈夫そうで、底面にあるマウスを滑らす部分もそれほど摩耗していない。うーん、"MOTTAINAI"。何とかならないかと思って見つけたのがチャタリング回避ソフト、マウスチャタリングキャンセラ(無料)。

こんな便利なソフトがあるのかと喜んで試してみた。確かにシングルがダブルになってしまうことは無くなったようだが、Poserのダイアルを回そうとすると数値入力のウィンドウが出てきたり、何かおかしい。どうも、左ボタンを押したままマウスを動かすような動作で支障が出るようだ。ゲームを動かしみて分かったが、最初のマウスダウンが認識されないことがあるようで、左ボタンをクリックしたままの動作で問題が出ることが分かった。ただ、ネットを見たりするくらいならこのソフトでも十分そうではある。

「内科的」な対応がダメならもう「外科的」措置を取るしかない。静電気が溜まるとチャタリングを起きる、という説があったので、電池を外してしばらく放電させてみたが、やはり効果はない。こちらのサイトにはマウスを分解し、スイッチに接点復活剤を使うことでマウスボタンを復活させる方法が説明されている。これにならってやってみることにした。ただ、スイッチボックスのケースを開けるのは止めておいた。下手にやると壊しそうなので、横に2つある穴から接点復活剤を注入した。これでも効果はあるようで、今のところ問題なくマウスを使えるようになった。

マウスのスイッチが簡単に交換できるようなものがあればいいのだが、メーカーとしては新しいのを買って貰った方がいいので、そういうのはやらないだろうな。ゲーミングマウスの中にはその手のものがあるようだが、めちゃくちゃ高いw 接点復活剤は近くのホームセンターで500円くらいで入手できたので、非常に安上がりだった。

2016年11月3日木曜日

Master Parameterを追加してみる

ペンギンフィギュアでクチバシをダイアルひとつでパクパクさせられたら便利だな、ということで、Master Parameterを追加してみた。クチバシには上下2つのボーンが仕込んであり、上側には"Upper Beak"、下側には"Lower Beak"という名前をつけてある。

Headでも良さそうだが、Bodyに追加してみることにした。フィギュア全体を選び、ダイアルパレットの三角をクリックして、"Create new Master Parameter"を選ぶ。名前を訊いてくるので、"Open Beak"とした。これからの作業は"Keyed Dependencies"タブで行う。




まず、ダイアルの値を1.0にし、"Start Teaching"ボタンをクリックする。上下のクチバシを開いた状態にしたところで、値を0にセットし、"Next Key"ボタンをクリックする。今度はクチバシを閉じた状態にしたところで"Stop Teaching"ボタンをクリック。これで1.0、0.0のときの状態をセットしたことになる。




下のグラフは直線になっているが、編集できるので、曲線にして緩やかに変化させることも出来る。

"Open Beak"ダイアルが追加されるので、これで値を変えて見ると、クチバシが上下とも開いたり閉じたりするようになった。意外と簡単に出来るので、既存フィギュアでもまとめて操作したい時はMaster Parameterを追加すると便利そうだ。

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がリリースされた。同じようにできるかはまだ分からない。