2008年11月17日

Dstreamer v0.1.0 リリース

龍玉で Eastern Dragon を操れるツール「Dstreamer」を暫定リリースします!
FLASH + Python ですので、Windows だけでなく Macintosh でも OK だと思います。




【必要なもの】
・Poser 7J (6J, 6E, 7E では未確認)
・DAZ フィギュア Eastern Dragon
・Python スクリプト Dstreamer.py-1.0.lzh (約1Kバイト)


【インストール方法】
(1) 上のリンクから Dstreamer.py-1.0.lzh をダウンロードします。
(2) 解凍しますと Dstreamer.py という Python スクリプトが現れます。
(3) これをテキストエディタなどで開き、改竄されて怪しい処理が埋め込まれていないか、ざっと確認します。
(4) 問題がなければ、適当なディレクトリにファイル移動します。
 Runtime/Python/poserScripts/ScriptsMenu/ 配下でも構いません。

これだけです。
アンインストール方法は、上記ファイルを削除するだけです。


【使い方】
(1) フィギュアの呼び出し
まず Poser 上で Eastern Dragon を呼び出します。
インバースキネマティクス(IK) のチェックは入っていても、外れていても構いません。

(2) ポージング
Eastern Dragon に適当なポーズを付けます。そのままでも構いません。
その際に注意事項がありますので、Eastern Dragon のパラメータの扱いの記事は一度ご覧になって下さい。
便宜上、このポーズを「初期ポーズ」と呼び、このフレームを「第1フレーム」と呼ぶことにします。第1フレームは、フレーム番号が1でなくても構いません。

(3) 龍玉の設置
龍玉として、適当な小道具を呼び出します。
龍玉として見るのは中心位置だけです。どこが中心位置なのかは、拡大縮小パラメータを一時的に 10% とかすると判ります。
基本アイテム(Primitives)の「ボール詳細(Ball Hi-Res)」は、見た目の中心に中心位置がありますので、扱いやすいです。

コースになるよう、いくつか配置していきます。
龍玉間の移動方法によって、次のように必要な龍玉の個数が変わってきます。
・線形補間: 最低1個
・スプライン補間: 最低3個
・スプライン近似: 最低2個

第1フレーム以外で操作してしまって、小道具がアニメーションしてしまわないよう注意して下さい。
Poser 7 の複製機能を使用する場合には、次に示す小道具名称を dst_xxxx に前もって変更しておいた方が少しだけ作業が楽になります。

(4) 龍玉の順番付け
いくつか配置した龍玉に番号を振っていきます。
特性パレットで名前 (外部名) を dst_xxxx という名前 (半角) に変更します。
この xxxx という部分が数字で、向かわせる順番に番号を設定していきます。欠番があっても構いません。

番号は1桁でも何桁でも構いませんが、数値順ではなくて、ASCII順 (辞書順) ですので、注意が必要です。
あまり良くない例ですが、dst_02 → dst_1 → dst_20 → dst_3 という順番になります。判りにくいので、桁数は統一した方が良いです。

簡単に順番を確認する方法は後述します。

(5) Python スクリプトの起動
第1フレームにおいて Eastern Dragon を選択状態にします。体の部位はどこでも構いません。
その状態のまま、Dstreamer.py を起動します。そうしますと、Python の出力ウィンドウに色々と表示されます。
2回目の起動ですと、前回の出力内容が残っており、どこからが今回の出力内容なのか判りにくいので、一旦、出力ウィンドウを閉じてから、起動することをお勧めします。

(6) 龍玉の順番チェック
Dstreamer.py の出力内容の最後の方が、龍玉の位置情報です。
過不足がないかチェックして下さい。小道具名称に誤りがありますと、ここに現れません。
また、上から順番に列んでいるかについても確認して下さい。
誤っていた場合には、上記(4)からやり直して下さい。

(7) Python スクリプトの出力内容のコピペ
まず、Python の出力ウィンドウにおいて、今回の出力内容を丸ごとコピーします。
毎回出力ウィンドウを閉じているのでしたら、出力されているのは今回の出力内容だけですので、その場合には右クリックで「すべて選択」した方が早いです。
# から行末まではコメント扱いですので、コピー対象でも対象外としても構いません。

そして、このWebページの FLASH の初期ポーズ欄にペーストします。
前回の入力内容が残っている場合には、一旦「入力のクリア」ボタンを押してから、ペーストします。

(8) パラメータの入力
FLASH での各種パラメータを入力します。パラメータの意味などについては後述します。

(9) アニメーションフレームの生成
「アニメーションフレームの生成」ボタンを押して、生成を開始します。
移動距離の表示は、左側の分子が現在計算中の地点、右側の分母が総距離を示しています。移動計算が終了しても、端数が生じて分母と分子は一致しません。

移動計算中に「中止」ボタンを押すと、そこまでの計算結果の出力処理に移ります。
出力処理中に「中止」ボタンを押すと、計算結果を破棄して終了します。

(10) アニメーションポーズファイル (.pz2) の作成
下の方のテキストボックスに結果が出力されますので、これをコピー&ペーストしてファイルに落とします。
この時のファイル名は、拡張子が .pz2 であれば適当で構いません。
格納ディレクトリは Runtime/Libraries/Pose/ 配下のどこか適当な所にします。

・FLASH Player 7 以降をご使用の場合
まず「右記内容をクリップボードへ」ボタンを押します。このボタンを使用した場合、改行コードは LF として転送されます。
そして、適当なテキストエディタで新規ファイルにペースト後、改行コードはそのままに、文字コードだけ UTF-8 にして保存して下さい。Windows 付属のメモ帳ですと LF という文字が表示されますが、気にせず文字コードだけ UTF-8 にして保存して下さい。

・FLASH Player 7 よりも古い場合
クリップボードへ転送する機能が使えないため、手動でコピーする必要があります。「右記内容をクリップボードへ」ボタンは現れません。
テキストボックス上で、Windows なら右クリックで、Macintosh なら control +クリックでメニューを出して「すべて選択」してコピーします。そして、適当なテキストエディタで新規ファイルにペーストします。
手動のコピーでは、改行コードは CR+LF として転送されます。
保存する時、文字コードを UTF-8 に、改行コードを LF にして下さい。Windows 付属のメモ帳は、改行コードを選べませんが、特に問題は無いようです。

(11) アニメーションポーズファイルの適用
Python スクリプトを起動した時と同じように、まず、第1フレームにおいて Eastern Dragon を選択状態にします。
そして、先ほど作成したアニメーションポーズファイルをライブラリから呼び出します。
この時、フレーム付け足しになるのにも拘わらず「アニメーションを読み込むために、フレームを追加しますか?」というダイアログが出る場合と出ない場合があります。

これで完成です。さっそく再生してみましょう!

(12) 調整
初期ポーズを変えたり、龍玉を再配置したり、パラメータを変えたりする場合は、上記(2)からやり直します。
初期ポーズ、および初期ポーズの存在する第1フレームには Dstreamer は変更を加えませんので、やり直しが利きます。
やり直しによって、アニメーションフレーム数の増減が起き得ますので、減った場合には Poser 上で終了フレームを調整し、余ったフレームをカットして下さい。
ライブラリ上のアイコンは、自動的に更新してくれませんので、ライブラリウィンドウを一旦閉じて、再び開けたりしますと最新になります。


【パラメータの意味】
・龍玉間の移動
直線で進むのか、滑らかな曲線を描いて進むかのを設定します。
それぞれどのような効果が得られるのかは、スプラインの記事をご覧下さい。

・龍玉間の曲線分割数
スプライン補間または近似を選択した場合に、設定できます。
実際には曲線ではなくて、いくつかの直線に分割することで曲線のように見せています。
例えば、この分割数を3に設定した場合、線分の数は3で、途中2回曲がります。
分割数が多いほど滑らかになりますが、その分、移動計算が遅くなったりします。

・1フレームあたりの移動量
1フレームあたりに移動する距離です。単位は、Poser 上で用いられているものと同じです。デフォルトであるフィートから変更していますと、食い違ってしまうかも知れません。
Poser でのフレームレート設定を考慮しながら設定して下さい。

・移動開始前のポーズを、第2フレームとして挿入
ここにチェックを入れますと、移動する前のポーズを、第2フレームとして挿入します。そして、第3フレームから移動を開始します。
チェックを外した場合と比べますと、1フレーム多くなります。
問題がなければ、第1フレームと第2フレームとでは、マクロなパラメータや hip などのパラメータが変化しているにも拘わらず、ピクリとも動かないはずです。(本当!?)
デバッグ目的以外には用途が無いかも知れません。


【既知の問題】
垂直上昇・垂直下降させた場合に、そっぽを向いたり、仰向けになってしまったり、また、頭から尻尾まで体がボロ雑巾のように捻れたりなどの恐ろしい現象が現れたりすることがあります(笑)。
そのような場合には、途中に龍玉を追加したりして回避して下さい。
posted by foilskin at 10:57 | comment (0) | Dstreamer | このブログの読者になる | 更新情報をチェックする

2008年11月16日

Eastern Dragon のパラメータの扱い

Dstreamer での Eastern Dragon のポーズパラメータの扱いについて纏めてみました。
後で使用法を書きますが、表が大きいので先に出して置きますね。

普通に使う分には、次の6点だけ押さえて戴ければ結構です。
・フィギュアの移動には、BODY のx移動、y移動、z移動のみを使う。
・フィギュアの水平方向の回転には、BODY のy軸回転を使う。
・フィギュアの垂直方向の回転には、hip のx軸回転を使う。
・フィギュアのポージングには、BODY のマクロなパラメータのみを使う。
 (TailTwistAllH〜NECKSBend2の計15個のモーフチャネル)
・頭〜尻尾の他のパラメータには触らないこと。
・手足などのパラメータは自由に変更可能。
 ただし、マウス操作時に体が引っ張られたり軸回転しないように注意。


以下は詳しく知りたい人向けです。

部位 パラメータ 第1フレーム
(初期ポーズ)
第2フレーム 第3フレーム以降
ボディ (BODY) 拡大縮小 ユーザ設定可 変化無しを期待
x拡大縮小 100%を期待 変化無しを期待
y拡大縮小
z拡大縮小
TailTwistAllH ユーザ設定可 *1 値0のキーフレームを設定 変化無しを期待
TailSideSideAltH
TailBendAllH
TailSSide2
TailSBend2
ABDTwistAllH
ABDSideSideAltH
ABDBendAllH
ABDSSide2
ABDSBend2
NECKTwistAllH
NECKSideSideAltH
NECKBendAllH
NECKSSide2
NECKSBend2
y軸回転 (水平回転) ユーザ設定可 キーフレームを設定
x軸回転 ユーザ設定可 (非推奨) 値0のキーフレームを設定 変化無しを期待
z軸回転 (軸回転) 0を期待 変化無しを期待
x移動 ユーザ設定可 キーフレームを設定
y移動
z移動
腰部 (hip) テーパー 0%を期待 変化無しを期待
拡大縮小 100%を期待 変化無しを期待
x拡大縮小
y拡大縮小
z拡大縮小
y軸回転 (水平回転) ユーザ設定可 (非推奨) 値0のキーフレームを設定 変化無しを期待
x軸回転 ユーザ設定可 キーフレームを設定
z軸回転 (軸回転) 0を期待 変化無しを期待
x移動 0を期待 変化無しを期待
y移動
z移動
Tail1〜31,
abdomen22〜1,
胸 (chest),
neck1〜10,
頭部 (head)
テーパー 0%を期待 変化無しを期待
拡大縮小 100%を期待 変化無しを期待
x拡大縮小
y拡大縮小
z拡大縮小
軸回転 (zrot) *2 0を期待 変化無しを期待
横屈伸 (yrot) *2 ユーザ設定可 (非推奨) キーフレームを設定
屈伸(xrot)
TwistAftH *3 0を期待 変化無しを期待
SSideAftH *3
BendAftH *3
TwistBefH *3
SSideBefH *3
BendBefH *3
他の部位 一切タッチせず、ユーザは自由に設定可能

*1
Python で各部位の屈伸・横屈伸を読み出す際には、 これらのマクロなパラメータが既に反映された値が読み出されます。 Dstreamer がマクロなパラメータを直接読み取っている訳ではないです。
*2
head, chest の場合は、軸回転=yrot、横屈伸=zrot になります。
*3
いくつかの部位には、パラメータが存在しません。
変化無しを期待
キーフレームを設定せず、直前のキーフレームから値が変化しないようにして下さい。 後続のキーフレームがあり、直前のキーフレームがスプラインや線形である場合、 値が徐々に変化してしまうことになりますので注意して下さい。
非推奨
下記の軸回転についての制約があるため、なるべく 0 のまま使用して下さい。
軸回転の未サポート
軸回転 (roll) のユーザ設定は未サポートです。移動においては常に水平もしくは仰向けを保つように姿勢制御されています。
pitch-yaw-roll のシステムでは、屈伸と横屈伸を組み合わせると軸回転が掛かるため、
屈伸を0以外に設定する場合には、横屈伸を0に
横屈伸を0以外に設定する場合には、屈伸を0にして下さい。
子ボーンが横屈伸のみであっても、親ボーンが屈伸していれば子ボーンはその姿勢を継承しますので、制約事項に該当します。
BODY のy軸回転とx軸回転の組み合わせも、名称が異なるだけで同様です。
フィギュアの向き
上記の軸回転についての制約により、
フィギュアの水平方向の回転 (yaw) には、BODY のy軸回転を
フィギュアの垂直方向の回転 (pitch) には、hip のx軸回転を使用して下さい。

色の意味
意味
読み書きしない
読み出すのみ
読み出すのみ (使用は推奨しない)
読み出さずに (固定値を) 上書き
読み出さずに (計算値を) 上書き


余談
マクロなパラメータを設定しても、Poser の GUI (パラメータ/特性パレット) では変化が見られないので、Dstreamer 側でマクロなパラメータを各部位の屈伸・横屈伸に反映する処理を盛り込んで置いたのですが、Python で各部位の屈伸・横屈伸を読み出すと既に反映された値が読み出されるんですね、GUI と違って。

Dstreamer 側の屈伸・横屈伸の読み取り処理に問題があり、今まで常に 0 に見えていたので、それに気が付きませんでした。orz
posted by foilskin at 09:25 | comment (0) | Dstreamer | このブログの読者になる | 更新情報をチェックする

2008年10月27日

龍の浮き沈み#2

この浮き沈みする問題、解決しました!

Dstreamer 内部で使用している yaw-pitch-roll 表現を、フィギュアの pitch-yaw-roll 表現に変換する際、1番目の yaw の回転軸は傾いていてはダメなのですが、親ボーンの姿勢により傾いてしまっていたのが原因でした。

浮き沈みしないことを確認できましたので、これでスプラインを掛けた動画を作ってアップ出来ます!

TODO
・スパゲッティソースプログラムの整理(笑)
・結果出力時の CPU 占有率の抑制 (計算自体は分割処理化済み)
・初期ポーズの反映 (残りは屈伸だけ)
・第2フレームで BODY のマクロなパラメータなどを 0 にするキーの生成
・龍玉の小道具名の renumber を行う Python スクリプトの作成 (必要?)
・各種ポーズパラメータの扱いの纏め
 (初期ポーズとして参照、参照&更新、Don'tCare、ゼロ固定などに分類)
posted by foilskin at 21:05 | comment (0) | Dstreamer | このブログの読者になる | 更新情報をチェックする
×

この広告は180日以上新しい記事の投稿がないブログに表示されております。