2008/08/14

Scalingのワナ

Scalingには、トラップが仕掛けてあります。

何にも知らないで、ほかのソフトでアニメーションを付けXSIで、再現しようとして、Importすると

んじゃコレっ?!

てな結果があったりします。
そのほか、nullの軸が90度になっておらず、変な形になっている?

・・・まいっか。


という経験がある方もいらっしゃると思います。

XSIのScalingには、2つのモードがあるのはご存知でしょうか?
Kinematics Local のScalingタブの、Scaling Computationという欄に

Hierarchical (Softimage) Scaling

とうものが存在します。
通常は、オンになってます。

下図は、

上オフ
下オン

になっていて、左のnullが親で、右のnullを子供にしていてposX:3、rotY45がそれぞれ入っています。



親のnull(左)をぞれぞれ、Xに0.5スケールしてみます。
するとこんな感じです。



スケールの印象からすると、オフ状態の上が正しい結果なんでしょうね。
見た目に、nullが親の形状に沿って変形しています。
反面、Defaultの、Hierarchical (Softimage) Scalingをオンにした状態のnull(下)では、子供のsclxのみにしか変換がかかりません。

これは、Rotationをかえて、どんどんと階層を作った場合、Scaleの変換が正しく行われないことを意味します。

ということで、オフにして、作業すればOKです。

気をつけなければならないことは、MotionBuilderなどで、作ったFBXをImportして、骨に流し込むときには、Hierarchical (Softimage) Scalingは、オンにしていないとうまくきません。
MotionBuilderのScalingのモードは、Hierarchical (Softimage) Scalingがオンのときと一緒です。
なので、Importするときは、オンにして、読み込みましょう。

バチコン来ます!

2008/08/12

XSI 7 and Python Install Tips



遂に、我がマシンにも導入されました。
いじり倒してやるっ。

と思ったのも束の間、ICEの敷居の高さに、正直ビビリマシタ・・・。

はっきり言って、デザイナーが気軽に覚えられるものでは到底ありません・・・。
スクリプトをちょっと書けるレベルだけじゃ全然ダメです。
CGソフトのことを心底愛していないと使いこなすことは出来ません。

た・だ、そこを克服することが出来れば、レベルはまた一段階上がることでしょう。
ICE MASTERの道は、かなり果てしないものに見えますが、一歩一歩上がって行けば、大丈夫です。(きっと)



そんでもって、やっとわが社にもPythonが導入される兆しが見えました。
やっりぃ。
XSIで、Pythonを使うには、ActivePythonをサーバーに入れるってのが
一番楽でしたが、ActivePythonは、あくまで擬似らしくPythonとは違うみたいです。

なので、Pythonじゃなきゃいやじゃ!

とゴネて、無理クリやってもらいました。

そもそも、XSIで、Pythonを使えるようにするには、

http://www.python.org
本家から、Python本体をDownloadする。

http://sourceforge.net/projects/pywin32
から、さらに、Python for Windows ExtensionsをDownloadして
Installしなくてはなりません。

このExtensionsが曲者でして、Pythonが、ローカルマシンにInstallされていないと
Installerが機能しない点にありました。
全てのデザイナーが使える環境にするには、一台一台入れていかないといけない状態です。

ですが、この手順で、サーバーにPythonをおいて、それを見に行けるようすることが可能です。

1. 一旦ローカルにInstallしてしまい、XSIを一度起動して、すぐ落とします。

2. %PythonPath%\Lib\site-packages内の拡張モジュール類を、サーバーPythonのsite-packagesフォルダ内にコピー。

3. ローカルにある、PythonのDLL類も全てサーバーにコピー。
(python25.dll、pythoncom25.dll、pywintypes25.dll←コレたちだけかな?エラーが出たらスミマセンそれもコピーで)

4. 環境変数のPython Pathをサーバーに指定。ついでにPathもPythonフォルダに通しておきます。

5. %PythonPath%\Lib\site-packages\win32comext\axscript\client\pyscript.pyを実行。
(レジストリを書き換えるスクリプトなので、Admin権限が必要です。)

で、出来ました♪

一部、気をつけなければいけないことは
%PythonPath%\Lib\site-packages\win32com\gen_py
ここの中身は、ユーザーが書き込めるようにしなければならないので

%PythonPath%\Lib\site-packages\win32com\__init__.py
内のgen_pathを書き換え

__gen_path__ = os.getenv('TEMP')

などにして、Localに作るようにします。

コレで、たくさんのマシンにインストールしまくることなく、サーバーをアップデートなりで
一括で管理出来る事になります。

ううーん。スバラシイ!

というわけで、JScriptとは、オサラバ。サヨウナラ。
Mayaも、MotionBuilderも、Pythonなので、Python一筋です。

がっつり行きましょうー。

2008/08/07

XSIのトップをひたすら走る方々

同じXSIとして、心強いですねー。

psyop - HP Maestro

psyopの作るものはいつ見てもホレボレします。
めちゃくちゃカッコいいス。



The Mill - Behind the Scenes of Mitsubishi Eclipse Robot Factory

The Millは、ワタクシ外部に対してとても弱いので、この前のセミナーで初めて知りました。
うひっ。1000万ポリゴンすカ。レベルの違いを感じます・・・。

2008/08/06

Manage Device Drivers



んん~?またしても、全然知らなかった機能が・・・。

Animation -> Tools
-> Devices -> Manage Device Drivers

今日、初めてボタンを押しました・・・orz
一体何年使ってるんだ・・・。

コレってなんだか、SIにもあったような気がする・・・。
全然覚えて無いけど。



使い方は、Addから、Mouseを選択。
MouseプロパティをInspectして、そのままActiveをOn。

Mouseの動きがキャプれます。
コレは使えるカモ!!!
(って思った人は、何人居るんだろう・・・。)

Defaultでは、Mouse-xが、選択されたもののposxにバインドされていますな。rotにも出来るのが嬉しいですな。

中クリックで、キャプチャー開始。右クリで、キャプチャー終了。

左クリックは、なんも入っていないので、Command - FirstFrameとか入れておけば、スタートフレームに戻れますね。

早速、カメラの画ブレモーションに入れてみよう。上手くいくかなー?

2008/08/05

mental ray の基本中~の基本。

アンチエイリアシングの設定をどうすればいいのか分からない?
そんなの簡単だよ。こうやってこうやってこうすりゃいいじゃん。
なるほどね。こういうふうに設定すればいいのか。

でも、設定した値の意味は、分からないまま。

現状では、分かっている人が、分かっていない人に仕様書を渡せば良かったのです。
それでほとんどエラーなく、すんなりレンダリングが出来たはずでした。

だけど、近年、データの巨大化が進む中、同じ設定では、レンダリングが出来る出来ないが顕著になってきました。

Hair、FG、SSSなどなどなど・・・。管理職泣かせの技術たち。

そこで、エラーで止まってしまうフレームが出てきた場合どのようにしてレンダリングをかけられるようになるのかを結構はしょりで説明したいと思います。

今回は、エイリアシングの設定から。

Aliasing ( Raytracing & Scanline Only )とSampling Contrastには、常に密接な関係があります。

まず、Sampling Contrastから説明することにしましょう。
この設定の値はカラーです。RGBAの4つの値から成っています。
この値は、レンダリングされる絵のピクセルとピクセルの差を見ています。

■□
↑ピクセルのつもり

例えば、上記のようにピクセルが、RGBAが0(つまり真っ黒)と1(真っ白)の様な絵があったとしましょう。2ピクセルの絵と考えてください。
その場合、ピクセルとピクセルの色の差は、1-0の1になるわけです。
現在のSampling Contrastの設定は、全て0.2ですので、Aliasing ( Raytracing & Scanline Only )のMax Levelでアンチエイリアシングがかかります。
この場合、Max Levelの1が適用されます。

■■

次の例は、真っ黒なピクセルが隣り合った場合です。
この場合は、ピクセルとピクセルの色の差は、0-0の0です。
Sampling Contrastと比較して差が許容範囲なので、Aliasing ( Raytracing & Scanline Only )のMin Levelでアンチエイリアシングがかかります。
この場合は、Min Levelの-1が適用される訳です。(ほんとは、もうちょっと複雑な判定をします)

画像でコントラストの差を視覚的に見てみましょう。



ま、だいたい、0.05だと人間視覚的に限界なんじゃね?ということが分かります。
ということは、最終レンダレベルだと、Sampling Contrastは0.05くらいで良さそうですね。
プレビューなら、0.2とかにして、Min Levelの面積を大きくしてあげれば、プレビュー時間を短くすることが出来ます。

これで、色の差のコントラストが少ないときにはレベルを下げて、色の差が大きい場合はレベルを上げてレンダリング時間を効率よく使う事が出来ます。

例えば、真っ黒な部分の計算をしようとしたとき、全てのLevelが2の高い状態で計算するのは時間の無駄だという事です。
なぜ、時間の無駄かといのは、次の説明を読めば分かることでしょう。

Aliasing ( Raytracing & Scanline Only )のレベルとは、どういう意味なのか。
0の場合は、そのピクセル単体をそのまま計算します。



アンチエイリアシング無しの状態です。ギザギザ。

1の場合は、ピクセルを4分割して、サブピクセルとして計算します。



ちょっとまだ、アンチエイリアシングが甘いかな?という状態です。
でも、ブラーがかかるのなら、このくらいで十分いけるし、0でもいいんじゃね?って感じです。

2の場合は、ピクセルを16分割して、サブピクセルとして計算します。



これくらいなら、ほぼジャギる事は無いでしょう。
これ以上上げると時間が重くなり過ぎて、自分の首を絞めることウケアイ。

つまり、Levelが1の場合は、単純に解像度を2倍で計算している事とだいたい同じになります。
Levelが2の場合は解像度4倍です。

逆に、-1の場合はどうなるかというと、4ピクセルに対して、1回しか計算しようとしません。
つまり、Levelが-1の場合は、なんと解像度1/2で計算している事と同じになるのです。
こんな設定仕事では、使ってはいけません(結構居るんだな。コレが。※ちなみに、Vrayでも大体同じ)

ようするに、最終レンダリングをする場合、-1という値を入れて計算をするというのは、得策ではありません。
当然、ジャギーが発生する事になります。
ただし、Sampling Contrastの設定次第では、うまくいくかもしれません。
0.005の様な、肉眼で分からないくらいの色の差であれば、-1で計算しても良いかもしれません。
けれど、4ピクセルに対して1回しか計算できないので、細い剣の様な物をレンダリングする場合や、テクスチャがとても細かい場合、レイがヒットすることなく真っ黒なピクセルとして計算されることが多々あります。

逆に、Levelが2であって、16ピクセル分の計算をしたとしても、それ以上のテクスチャの解像度がある場合、ちらつきが発生してしまいます。
意味無さ杉くん。
テクスチャの解像度がデカければデカいほど良い訳では無いことを十分理解しておいてください。
キャラクターがどのくらいのサイズでレンダリングされるのかを判断して、テクスチャのサイズを小さくする事が必要になります。
テクスチャのサイズを小さくすることで、メモリの確保も出来るほか、ちらつきを抑える事が出来るでしょう。

ちなみに、メモリに関して、マニュアルにはこんな事が書いてありました。

メモリ要件の計算で使用される標準規則では、サーフェイス上の三角形1000個につき1MBのメモリが割り当てられます。
512× 512のテクスチャごとに、1MBの追加メモリが必要になります

だそうです。
つ・ま・り、1Triangleで、1B消費するってことだから、100万Triangleで、1GBのメモリを消費するってことです。

分かりやすっ。

(でも、結構長い間、知らずに過ごして来ました・・・。)

でもこれ、ギガポリゴンコアって、どうなるんだろう・・・。
ギガポリゴンコアだから、大丈夫なのか?!
IIになるし、大丈夫なのか?!

最後に、アンチを決定する際、熟練の技として

まず、これで、いいだろうと思われる値をセットします。
次に、3枚だけレンダリングします。
3枚をループ再生します。

コレだけで、ちらついているかが分かるようになります。

だいたい。

だいたいね。

だいたいだかんね。

だから、全フレ計算するなんて、アホなことすんなよっ。

2008/08/04

ぴくショー克服

Syflexなど、Simlationしたオブジェクトで、Collisionに挟まれると、ポリゴンが暴れてしまう、四面楚歌ぴくぴく現象(略してぴくショー)が起きるかと思います。
ぴくショーを直すのは至難のワザですし、時間がかかりまくります。
モーションキャプチャーのアニメーションも、ノイズと呼ばれる、ガコッとなるキーが入る場合も多々ありますが、その場合は、その部分のキーをがっつり消去するなどで、簡単に直すことが出来ます。
ですが、Defomationなのでポイントのアニメーションは、通常見ることが出来ません。
ましてや、相手はcache。ファイルの中身をエディットする気にもさらさらなりません。

そこで、ポイントのアニメーションが編集出来ればいいなーと思うので
ポイント相手に、ひとつひとつnullをplotして、アニメーション編集をしてみることにしましょう。

問題点を挙げます。

  • まず、1つは、Defomerを生かした状態で、デザイナーが編集しやすいように、その上になんらかのConstruction Stackを付け、外部にRigを作る必要があります。
  • 次に、そのRigは、視覚的にPointと同期して欲しいことでしょう。
  • 最後に、大量のPointに対して処理を行うには、Scriptを書いたほうがいいでしょう。

この3つをクリアするだけで、OKです。



ポイントClusterを作りnullにアニメをObject to Clusterで、くっ付けます。
そのnullをplot。このnullは見れなくていいので、IconをNoneにします。コンストも抹殺しましょう。

そのnullの子供にnull1を作り、SRTを0に設定。このnullがコントローラーになります。
IconをCircleなどにしておきます。

さらに、null2を作り、null1にTranslationのXYZにそれぞれExpression = で繋ぎます。このトランス情報が、Deformerの差分として、加えられればいいので今度は、逆に、null2を先ほどPlotしたCluster PointにCluster CenterでDeformを加えます。
null2も見えなくていいので、IconをNoneにします。

これで、Rigプロセスは、完了しました。

あとは、コントローラーのnull1をGlobal Trans Plotして、ギザギザしているアニメーションをなだらかにするだけです。
Plotしないで、オフセッターとしても使い道はあります。

あとは、履歴などをたどって、Scriptにするだけです。

このプロセスの弱点は、Clusterが死ぬほど出来ることと、nullが物凄くたくさん出来ることと、元のオブジェクトにSRTのアニメーションが入っている場合は、うまくいきません。
あと、研究が足りないのでcageしたものに対してこのプロセスをすると失敗します。

ICEで、もしかしたらもちっと楽に出来るのかなー?と思いつつ淡い期待を抱く今日この頃。
の前に、もっと簡単なフローがあるかもなー?と思ったりもして。

というわけで、また新たなワザ見つけたら、書いてみます。

2008/08/01

Nullちゃんで、ライティングしてみた。

Scene内に、ひとつもライティングが無い状態で、Nullのみでライティング。
やってみました。



Scene内には、オブジェクトは、SphereとNullとカメラのみです。
後は、Nullの位置を見るShaderを作ればOK。

というわけで、繋いで見ます。



普段は見慣れないノードがたくさん刺さってますね。
ワタクシも仕事では、一度も使った試しがありません。

やることは、サーフェイスの向きとライティングの向きの内積を出せば拡散反射になるということです。

まずは、二股に分かれている上の部分。

XSI_Model_Mapノードを使用して、オブジェクトのNormal情報をゲット。
XSI_Model_Mapノードは、0から1の範囲で、サーフェイスの表面の向きをRGB値として取得します。
上を向いている面なら、( 0.5, 1, 0.5 )を返します。
左を向いている面なら、( 0, 0.5, 0.5 )を返します。
このままだと、ベクトルの向きにはならないので、Vector_math_vectorノードを使って2倍して1引きます。
すると、範囲は-1から1の正しい向きの値が取得出来ます。
上なら、( 0, 1, 0 )
左なら、( -1, 0, 0 )です。

次に、下の部分。

Color2vectorノードのColor InputにNullのポジション情報をExpressionで繋ぎます。
このままだと、長さが1ではないベクトルが返ってくるので、Vector_math_vectorノードでNormalizeして1の長さにします。
これで、ライティングの向き情報が取得出来ました。

二つの情報が出揃ったので、Vector_math_scalarノードを使い、Dot Product(内積)を取得します。

このスカラー値こそが、世に名を轟かせているかの有名なLambertです。

特にこんなこと知らなくても、仕事出来ますし、意味ねーじゃんと思いますが
CGソフト作るってものすげー大変なんだなーって思いました。

いやいや、開発者には頭が上がりません。

人体ミクロの世界のトテモキレイな demo reel

キモくないと思いますが、臓器のとってもキレイなデモムービー。

Hybrid Medical Animation
http://www.hybridmedicalanimation.com/demoReel.html

BGMも、トッテモカワイイですね。
ちなみに、MOGWAIの他の曲のクリップはこちら。
Friend Of The Night
http://jp.youtube.com/watch?v=K_NrZCZwlhc

うーん、たまらんっ。たまんねーなっ。
CGじゃなくてもいいものはいいねぇ。

Perforce: 複数のワークスペースを更新するバッチ

batを叩けば全部更新。 @echo off set P4PORT=x.x.x.x:xxxx set P4USER=user set P4PASSWD=password echo %P4PORT% echo %P4USER% echo %P4PASSWD% echo %P4PAS...