2011年02月24日

武器リグの作成

110223b.jpg

 武器を持たせるためのリグを試行錯誤してみた。

 片手剣みたいなのは、武器を手のボーンの子にしてしまえばそれで済むのだけれど、問題は両手で扱うような武器の場合。
 腕を武器に固定するために片手のみ、もしくは両手共に武器の子にする必要が出てくるのだけれど、もともとのリグの場合、腕全体の動きは手首までのIKゴールで制御して、手自体は腕の子になっている状態なので、IKゴールを動かすコントローラを武器の子にしても固定されるのはIKゴールの位置だけで、手を武器に固定することが出来なかった。
110223c.jpg
 もともとのはこんな感じ。


 手を武器に固定するためにはまず、手が腕の子のままでは出来ないので、腕との親子付けを解除することにしたのだけれど、手のボーンは腕のIKの終端になっているので、元々の手のボーンはそのままIKの終端用にとっておいて、新しくボーンを作成して手のボーンにすることにした。
 で、基本的には付属のチュートリアルのパクリなのだけれど、まず腕のIKの終端のボーンに新しく作った手ボーンを位置合わせして、終端のボーンに位置コンストレイントをかける。これで、位置は腕に合わせて動くようになる。

 次に、武器を持たないときは腕の子のような動作をして欲しいので、前腕のボーンに方向コンストレイントをかける。これによって、手と前腕を親子付けしたのと同じ動作をするようになる。

 武器を持っている時は、腕に従わず武器と同じ回転をする必要があるので、武器に方向コンストレイントをかけたいのだけれど、武器モデルに直接繋いでしまうと使いまわしが聞かないので、武器用にダミーを作成して、これに方向コンストレイントをかけておく。逆の手も同じ武器ダミーにコンストレイントをかける。
 方向コンストレイントを1つではなく、前腕と武器で分けたのは"オフセット初期値を保持"をそれぞれに使いたかったからなのだけれど、他にいい方法があるような気がしないでもない。

 これだけでは、腕に従うか武器に従うかしか出来ないので、オイラーXYZを入れてFKでも動かせるようにしておく。
110223i.jpg

 最後に、腕のコントローラに0〜100のアトリビュートを追加して、実数スクリプトで2つの方向コンストレイントの重みと繋いで、0のときは片方が100でもう片方が0、100のときは片方が0でもう片方が100になるように設定する。このアトリビュートの値を変えることで、腕の子として動く状態と、武器と同じ動きをする状態を切り替えられるようにする。
110223e.jpg
 ただ、実際動かしてみたら、アトリビュートが0か100の時は良いのだけれど、間の中途半端な状態の時にどうも変な動きをしてしまう。出来れば、緩やかに切り替えが出来るようにしたかったのだけれど、解決策が思いつかないのでとりあえず保留。

110223d.jpg
           最終的にこんな感じ。

110223h.jpg
 実際に持たせる際は、まず武器モデルを読み込んで武器ダミーの子にする。
 そして、腕のコントローラを武器を握る位置まで動かして、アトリビュートを武器用に切り替える。切り替えると手の回転方向がおかしくなるので、FKで修正して正しく握れるようにする。で、腕のコントローラを武器ダミーにリンクコンストレイントで親子付けすれば、手がしっかり武器に固定された状態にできる。
 後は、IKゴールが離れないように武器ダミーにモーションを付けて、腕のコントローラは肘の方向にのみ意識してキーを打てば、武器を持ったモーションが作れる。

 ただ作った後で気づいたけれど、このリグの場合両手共に武器の子にするような方法なので、片方の腕が親で武器ともう片方の腕が子になるようにしたい場合、そのまま使うことができない。とりあえず今回は必要ないのでその辺は保留。



 それから前腕のツイストボーンに関して、もともとは手のボーンのオイラーXYZに実数スクリプトで繋いでいたのだけれど、今回手のボーンに方向コンストレイントが入ったため、以前と同じようにオイラーXYZに繋いだのでは方向コンストでの回転が考慮されず、正しく動かせなくなってしまった。
 で、元々手を親子付けしないリグの元ネタはチュートリアルなので、チュートリアルの読み飛ばしていた項目を読んでみたところ、解決策が書かれていた。詳細はチュートリアルの手首のツイストボーンの項目に書かれているのだけれど、どうやら行列を使うらしい。
 行列がなんなのかはいまいち理解できていないのだけれど、どうもワールド座標で移動や回転値を取り出せて、親の行列の逆値を掛け合わせることでローカル座標も出せるようで、オイラーXYZと方向コンストの2つのコントローラが入っていようが、FKだろうがIKだろうが値を参照できるっぽい、、、、ほとんど理解できていないと思う。
 とりあえずチュートリアルに書かれているスクリプトから必要なとこをコピペして、組んでみたのが↓。
------------------------------------------------------------
matParent = inverse Parent.transform ;
matTarget = Target.transform ;
matResult = matTarget * matParent ;
rotQuat = matResult.rotation ;
rotEuler = quatToEuler rotQuat order:3;
twist = rotEuler.z ;
twist = degToRad twist ;
------------------------------------------------------------
 これをツイストボーンのX回転に実数スクリプトで入れてある。
 今回は手のボーンのX回転を取り出したいので、"Parent"は手の親に当たる前腕ボーンにノードの割り当てで割り当てた変数で、"Target"は値を取り出したい手のボーンに割り当てた変数。
 で、最終的にdegtorad twist で、手のボーンのX回転がでるようになっている。

 汎用的にして恐らくこんな感じだろうっていう解説を入れると、
---------------------------------------------------------------------------------
matParent = inverse 親ノードを割り当てた変数.transform ;
matTarget = 値を取り出したいノードを割り当てた変数.transform ;
matResult = matTarget * matParent ;
rotQuat = matResult.rotation ;
rotEuler = quatToEuler rotQuat order:3;
twist = rotEuler.z ;
twist = degToRad twist ;
---------------------------------------------------------------------------------
1行目. 値を参照したいノードの親ノードの変換の逆値を取り出して変数matParentに格納。
2行目. 値を参照したいノードの変換を取り出して変数matTargetに格納。
3行目. 2つを掛け合わしてローカル変換を出す。
4行目. 行列値から回転値を取り出す。
5行目. YZX の順序で回転を評価する(1はXYZ、2はXZY、3はYZX、4はYXZ、5はZXY、6はZYX)
6行目. YZXの順序中、Xにあたるzの値を取得。
7行目. 度数をラジアンに変換。

5行目6行目は、取り出したい値の軸によって変える必要がある。
5行目の評価の順序がいまいち良く解らないのだけれど、実際に試したかぎりでは、X回転の場合はYZX順の、
 rotEuler = quatToEuler rotQuat order:3;
 twist = rotEuler.z ;
Y回転、Z回転の場合はXYZ順の
 rotEuler = quatToEuler rotQuat order:1;
 twist = rotEuler.z ;(Y回転の場合はrotEuler.y)
で評価したらまともに動いた。

 今から組みなおすのは面倒なので今回は放置するつもりだけれど、この行列を使ったスクリプトならIKで動くボーンからも値を取り出せるため、現在組んであるエクスポーズtmを使っている方法は間違いだと解った。次組むときはこの方法を使おう。

ラベル:3DCG
posted by 縦横 at 01:33| Comment(4) | 女剣士 | このブログの読者になる | 更新情報をチェックする

2011年02月17日

動画制作 その2

110217a.jpg

 どうにも手順が決まらなくて、いろいろ中途半端に手をつけている状況。とりあえず現状は↑。これで前半分。
 絵コンテを元に作ろうと思ってたけれど、絵コンテは色々曖昧にしてる部分が多すぎていまいち役に立たなかったので、まずは、モーションは付けず移動のみにキーを打ったキャラを使ってシーンを作って、それにカメラを配置して絵コンテ代わりのベースのアニメーションを作った。
 で、その後それを参考にしつつキャラにモーションを付けて、武器を足して、、、が↑。
 テストレンダリングはマテリアルの置き換えをすれば多少は軽くなるかなぁと思っていたけれど、マテリアルよりレンダラーのサンプル数を下げればシーンはそのままで1フレーム1、2秒でレンダリング出来るので効率がいい感じ。↑のは最小64/1最大4/1。

 キャラのライトは背景の見た目上、真上からのライトがメインライトになるので、背景に配置した真上からのスポットライトをメインに使っているのだけれど、それだけだと暗すぎるので、若干古い手ではあるけれど、
http://www.scriptspot.com/3ds-max/scripts/dome-light
 ↑のスクリプトで球状にオムニライトを配置して周囲光の代わりにしている。今のところ全部均一な設定だけれど、ある程度背景に合わせて色や強さを調整すればもう少し良くなるのではないかと考え中。

 仕方が無いといえば仕方が無いのだけれど、いろいろイマイチな部分が多くて、なかなか気持ちが前に向かない。とりあえずは完成が目標なので、気にしないようにしつつ先に進めるようにしている。

110217b.jpg110217c.jpg

 武器はこんな感じ。
 Zbrushで作ろうかと思ったけれど、結局MAXでハイポリも作ってノーマルも作成。斧の方は↑のアニメーションの通り数秒しか出さないので、極力時間をかけずに作ったのだけれど、割と時間をかけた剣の方もあまり変わらない感じでちょっとションボリ。
ラベル:3DCG
posted by 縦横 at 04:46| Comment(3) | 動画制作 | このブログの読者になる | 更新情報をチェックする

2011年02月07日

動画制作 その1


 動画の作成を開始。
 ノウハウが無いのでどこから手を付けたら良いか解らないのだけれど、まずは見よう見まねで絵コンテを書いて、大まかな流れを決めてみた。

 で、絵コンテを書いてみて追加で必要なものが出てきたので、その一つの↑の花を作成。あまり重要なものでもないのでサクッと。
110207b.jpg

 花びらの動きはボーンで。開く軸に実数スクリプトを入れて、アトリビュートで簡単に操作できるようにした。
 花びらの消え方が大分ショボイのだけれど、モデルの動きとマテリアルアニメーションとパーティクルでちょっとごちゃごちゃしてきたので、一旦現状で放置。

 他に武器やエフェクト等いろいろ必要なので、順次作っていく予定。


 
110207c.jpg

 それとゴブリンのサイズを修正。
 元は肩乗せアニメーション作成時のサイズ比なのだけれど、背景を作っていた際に配置した感じ、サイズ差が大きい方がかっこいい気がしたので、ゴブリンを1.5倍のサイズに変更。
 リグの親をスケールすれば行けるかと思ったけれど、構造上無理があったので、リグは一から組み直し。大分めんどくさかった。
ラベル:3DCG
posted by 縦横 at 04:18| Comment(2) | 動画制作 | このブログの読者になる | 更新情報をチェックする

2011年01月29日

モーション練習 続き

110128b.jpg

[肩乗せ]

 ゴブリンを追加して、2キャラにモーションを付ける練習。基本的には前回やったことを2キャラ分やっただけ。
 ただ今回は、リンクコンストレイントで繋ぐ先が別キャラのボーンなので、若干融通が利かなかったり、後から調整がし辛かったりして、ちょっと面倒だった。
110128d.jpg

 手に乗っている時は、直接ゴブリンの手のボーンにリンクしているのだけれど、肩に乗っている時は、直接繋いでしまうと、ゴブリンが起き上がったときに女キャラが後ろに傾いてしまって調整が面倒なので、座った女キャラの腰に位置合わせしたスプラインをゴブリンに親子付けして、そのスプラインにリンクすることで、女キャラの向きを調整しやすくした。


 それとふと気になって、動画の圧縮についていろいろ調べてみた。
 以前にも何度か挑戦して、XvidやDivXでエンコードを試したのだけれど、↓画像の右側のように彩度が低く微妙に明るい感じになってしまって、どうにもうまくいかなかった。
110128c.jpg
左は無圧縮avi。右はXvidでエンコードしたものをWMPで再生したもの。

 で、今回はmp4のH.264でエンコードを試してみた。
 ググッたらニコ動の投稿用の解説で詳しく説明されていたので、それをそのまま試してみることにした。

ニコニコ動画まとめwiki AviUtlを使ったMP4 (H.264) エンコード
http://nicowiki.com/aviutl_h264.html

 まず、書かれている通りにエンコードしてメディアプレイヤークラシックで再生してみたのだけれど、劣化云々以前にまともに再生されなくて、コマ落ちのような状態にブロックノイズのようなものが出まくりで完全に失敗。一応VLCメディアプレイヤーでも再生してみたけれど、大体同じような状態。
 で、いろいろ設定を変えてエンコードし直してみたのだけれど、さして状況が変わらず、どうしたものかと思っていたのだけれど、↑のリンク先に書かれているFlavieってプレイヤーで再生してみたら全く問題なく再生されて、結局エンコードに失敗していたのでは無く、コーデックやプレイヤーが古かったのが問題だったらしい。
 ffdshowとついでにVLCプレイヤーも最新版にしたら、どちらもコマ落ちやノイズが出るって状態は改善できた。
 ただ、そのままだとXvidのときと同様色味がおかしいままなのだけれど、再生側の設定をいろいろ弄ったら、これも改善できた。変なフィルターがかかっているせいかと思ったけれど、YUVとRGBの変換にうまくいっていなかったらしい。
110128g.jpg110128f.jpg
 左はffdshowの設定。YUVのチェックを外したら色味がおかしくなるのが直った。右はVLCプレイヤー。こっちはハードウェアによるYUV->RGB変換を使用のチェックを外す。
 この設定を弄ったらXvidの方も正しく再生されるようになったので、結局Xvidの方もエンコードは成功していたことが解った。
110128e.jpg
 左は無圧縮avi。右はmp4(H.264)をメディアプレイヤークラシックで再生したもの。
 若干圧縮したほうが細かいとこがぼやけているけれど、パッと見さして違いが無く圧縮できている。

 
ラベル:3DCG
posted by 縦横 at 10:52| Comment(0) | 女剣士 | このブログの読者になる | 更新情報をチェックする

2011年01月22日

モーション練習

110121a.jpg


 モーション付けの練習に、単発の動きをいくつか作ってみた。

[歩きサイクル] [走りサイクル]
 まずは基本的な歩きと走りのサイクル。いざ動きを付けてみたら腰の横のパーツがすごい邪魔なのだけれど、とりあえず無視してそのままつき抜けさせてある。
 自作のリグなので、モーションやポーズをボタン1つで反転コピーみたいなのが出来ないのが難点。片方のポーズを付けたら、カーブエティタで数値をコピーしてもう片方にペーストって方法で対処したけれど、プラグインか何かでぱぱっと反転コピーしてくれるようなのは無いのだろうか。


[ターン動作]
 足を地面に固定する方法を試したかったので、Mt.FJさんの以前の記事を真似てくるっと回る動きも作ってみた。
 足を動かすコントローラにリンクコンストレイントを入れて、別のオブジェクトにリンクするようにしただけ。
 普段はキャラ全体を動かすコントローラにリンクしておいて、地面に固定したいときは、別のオブジェクトにリンクすることで、キャラ全体のコントローラを動かしても地面に固定したままにできる。
 他にも、回転の基点を変えたいってときに、別のオブジェクトにリンクして、そのオブジェクトの基点で回転させたりなんかにも使える。このターンの動きだと、足はつま先で回転させたいのだけれど、足のコントローラの基点は足首にあるので、そのままだとつま先で回転できない。固定用のオブジェクトは基点をつま先側に置いてあるので、固定用オブジェクトを回転して足を動かすことで、つま先で足を回転させることができている。
110121h.jpg
こんな感じ。長方形のスプラインが足のコントローラでボックスが固定用のオブジェクト。


[バク宙]
 こっちは↑のリンクコンストレイントで、キャラ全体のコントローラを別のオブジェクトで動かすテスト。
 基本的な動きは普通に付けて、宙返りの動きは360度回転する動きを付けたスプラインにキャラ全体のコントローラをリンクして動かしている。
110121i.jpg
腰あたりの星型のスプラインが宙返り用。


[蹴り] [歩行移動]
 他、蹴りと歩行サイクルに移動を入れてみたもの。


 まだいろいろぎこちないのだけれど、とりあえずは慣れてしまいたいので、先に進めてしまうことにする。
ラベル:3DCG
posted by 縦横 at 00:36| Comment(0) | 女剣士 | このブログの読者になる | 更新情報をチェックする

2011年01月19日

背景作成 その9



ライトマップ化完了。
試しにレンダリングしてみたのが↑。解りづらいけれど、一応アニメーションしている。水面に入れたノイズモディファイヤをループする方法が解らなかったため、ループ化は妥協。
1フレーム3分かかっていたのが1分ほどに短縮できたので、60フレームをレンダリングするのに1時間ちょいでできた。

110119b.jpg

ライトマップはこんな感じ。↑は岩のマテリアルのライトマップ。実際は1024×1024で作ってある。

一応いろいろ試しはしたのだけれど、現状ライトマップに関してどういうのが正解か解らない。
とりあえず1/7の日記で書いていたことで、自己照明にフォールオフを入れていた岩の部分はなんとか出来た。元の岩のマテリアルは、自己照明にフォールオフを入れて、サイドの部分をライトの影響を受けないようにしていたので、ライトマップに変更時は、ライトマップをフォールオフに入れてもう片方には何も入れないことで、サイドの部分はライトマップを適用しないようにしたら、大体同じ感じの見た目にすることができた。
それとキャラの影が落ちる部分は結局、影だけ落とす方法がわからなかったので、ライトマップのマテリアルにせず普通にレンダリングすることで対処した。

ただ、いざライトマップを入れてみたら、自覚できていなかった問題がちらほらと出てきた。

まずノーマルマップの問題。
鏡面反射は普通にレンダリングするので、ノーマルマップは鏡面反射の要素で表現されれば十分だと思い込んでいたのだけれど、冷静に考えたら陰影にも影響するので、ある程度ライトマップの解像度を割かないとノーマルマップの意味がほどんど無くなってしまうことに気づいた。
しかしほぼ全体をUV展開しているため、ちょっとやそっとライトマップのテクスチャサイズを大きくしたところでさして改善しなかったため、とりあえず目立つ部分はライトマップをやめて、普通にレンダリングすることで対処した。

それと鏡面反射光に関して、ライトマップのマテリアルを適用している部分は、オブジェクトプロパティの影付けのチェックをはずしているため、本来なら影になる部分にも普通にハイライトが入ってしまっておかしなことになることに気づいた。
目立つとことして水面に落ちる円形舞台の影部分が気になったので、そこはライトマップのテクスチャを鏡面反射に入れることで多少ましにできた。ただ、厳密にやろうとしたら、それぞれライトマップに対応した鏡面反射光マップを作るしかないので、かなりでかいテクスチャをマテリアルごとにライトマップと鏡面反射で2枚入れることになって、ちょっと作り方としてどうなんだろうって状態になってしまう。

あとライトマップ用のUV展開に関してもいろいろ問題がある気がするのだけれど、
一回ライトマップを書き出すのに20分くらいかかって、もう試行錯誤する気がしないので、とりあえず今回は現状で妥協することにした。
なので、背景はこれで完成。


次はキャラのモーション周りをやる予定。
今までモーションやアニメーション作りを避けてきたので、一旦モーション付けの練習をいろいろやってみようと思う。
ラベル:3DCG
posted by 縦横 at 02:15| Comment(0) | 背景 | このブログの読者になる | 更新情報をチェックする

2011年01月16日

ちびキャラ背景




110116h.jpg

ちょっと脱線。前に作ったちびキャラ用に背景を作ってみた。
息抜きなので簡単に一区画だけ。

キャラと同様に今回もMAYAでやろうかと思ったけれど、これのためだけに2011の体験版を入れるのはもったいない気がしたので、今回はMAXで。
頂点カラーをがっつり使うのは久々だったけれど、MAXの頂点カラーも思ったほど使い勝手良くなかったことに気づいた。未だver8使ってるので、新しいのではどうなってるか知らないけれど。

110116b.jpg

110116c.bmp

ポリゴン数は背景全体で△1964ポリゴン
テクスチャはそれぞれ16色で全体で256×256×1と128×256×1くらい。

110116d.jpg

110116g.jpg110116e.bmp110116f.bmp

ついでに、少年キャラもいたほうがバランスが良かろうと思ってキャラを1体追加。
△314ポリゴンに128×128が2枚で、前三体とだいたい同じくらい。

ラベル:3DCG
posted by 縦横 at 19:12| Comment(3) | ローポリ ちびキャラ | このブログの読者になる | 更新情報をチェックする

2011年01月07日

背景作成 その8

110106a.jpg

110106b.jpg

110106c.jpg

110106d.jpg

 テクスチャの描き込みを一通り終わらせた。
 いろいろ不満点はあるけれどきりが無いので、基本的な作成はこれで完了。あとはライトマップ。

 現状のままだと1フレームのレンダリングに3分近くかかるので、ライトマップを使ってレンダリング時にライトの要素を鏡面反射以外計算しなくていいようにしようと思う。
 で、初め考えていたのは、別のマップチャンネルにフラッテンでパーツ全体のUVを開いて、そのUVにライトマップを書き出してRGB乗算で乗っけて、自己照明100%にするって方法でやろうとしていたのだけれど、そのままだとパーツによってはちょっと無理があることがわかった。

 柱とかの周りの建物部分は↑の方法で問題ないのだけれど、自己照明を100にするため、キャラが乗る部分にこの方法使ってしまうと、影が落ちなくなってしまうため、通路と円形舞台の部分にはそのままでは使えない。
 影だけ別で入れられないものかと調べているのだけれど、現状わからず。最悪キャラが乗る部分は普通にレンダリングするしかないかもしれない。
 それと青い岩の部分は、自己照明にフォールオフを入れて、サイドが光るように作っているので、自己照明を100にしてしまうとその成分が無くなってしまって、見た目が変わってしまう。これも何か別の方法を考えないといけない。
 さらに水面はノイズモディファイヤでアニメーションしているので、微妙にずれが出てしまう。

 こうして考えると、ほとんどの場所で↑の方法が使えないのだけれど、キャラをのせずに3分は自分的にちょっと長い気がするので、どうしたもんだか。

ラベル:3DCG
posted by 縦横 at 00:59| Comment(0) | 背景 | このブログの読者になる | 更新情報をチェックする

2011年01月03日

2011

110103.jpg

あけましておめでとうございます。



110103b.jpg

18:10 こっそりポーズ直したものに差し替え
ラベル:3DCG
posted by 縦横 at 02:37| Comment(0) | 日記 | このブログの読者になる | 更新情報をチェックする

2010年12月27日

背景作成 その7

101226a.jpg

101226b.jpg

101226c.jpg

 テクスチャを描き込みつつ細々修正中。
 ちゃんとしたテクスチャに切り替えていっているので、より良くなるはずなのだけれど、なんかあまり変わった気がしない。
 円形舞台の上面のデザインがパッとしないので何度も作り直しているものの、未だかっこよくならない。でもキリが無いのでこれで切り上げ。
 
101226d.jpg

101226e.jpg101226f.jpg

 なかなか終わらない上にずっと同じ作業が続いていたので、ちょっと気分転換にZbrushで銅像を作成。あまり重要なモデルではないので、短時間でパパッと。
ラベル:3DCG
posted by 縦横 at 21:45| Comment(0) | 背景 | このブログの読者になる | 更新情報をチェックする