スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

[3ds max PFlow] Data Operatorで稲妻エフェクト

キャラクター物のエフェクトでよく稲妻表現が求められるので、使い回しがし易いようにData Operatorで組んでみました。悩んでいたところがあったのですが、そこが解決したので簡単にですが解説してみたいと思います。

WIPですが、現状は動画のようになっています。翼のように広がっているオブジェクトがエミッターです。下側の青いオブジェクトがターゲットです。そこへ向かって稲妻が伸びます。パーティクルの発生位置から最も近い場所を目指すように設定しています。右端の稲妻はインスタンスしているオブジェクトです。

PFlowの全体の構成は次のようになっています。
PFlow

悩んでいたのは、ランダムに発生させたパーティクルをそのままエミッター上に留める方法です。それをData Operator上でどう設定すれば良いのかが分かっていませんでした。このエミッターのサーフェス上で稲妻が10F ほど留まっているのが分かると思います。エミッターでは固定している一方で、地面側では常に動きつづけるようにしています。PFlowではよくあることですが、分かってしまえば簡単でした。

まず、ランダムに発生するようにします。ポイントは、このときにOutput Newオペレータで各パーティクルに対してサーフェス上の位置を出力しておきます。発生時の位置のみを出力しています。
Initial Position

次のData Operatorで発生以降のパーティクルの位置を決めます。構造は上記とほぼ同じですが、違う点は上記で出力した位置を入力しているところです。先ほど出力した位置はローカルな情報なので、移動してもそれを参照して位置が更新されパーティクルが固定されているように見えます。
Lock Position

以上、エミッター上での固定の仕方でした。長くなるので全体の解説はありませんが、個人的に一番困ったところを書いてみました。また、未検証ですがもしかしたらエミッターの形状が変化する場合は今回の方法では不十分かもしれません。

スポンサーサイト

テーマ: 3DCG - ジャンル: コンピュータ

[3ds max] maxscriptをSublime Textで書くためのちょっとした注意点

sublimeに興味があったので、maxscriptで使えないかと調べてみました。
インストールの手順などは以下にまとめられていました。

AREA: Enabling MaxScript Support in the Sublime Text Editor

ただし、このリンクの方法だけでは"Send to 3dsmax"ができないことがあるかもしれません。
私がそうでした・・・

解決のコツは、環境変数の設定でした。Windowsの環境変数、システム環境変数のpathのところにpythonまでのパスを追記してください。これで、”Send to 3dsmax”できました。

結局のところ私の環境では、3dsmax2015では使えたのですが2014ではダメでした。maxscript用パッケージの中身を見ると、pythonからSendしているようでしたので、2014にExtension(pythonに対応したので) をインストールしてみたのですが、Sendがうまくいきませんでした。

2015以外での使い方が分からずじまいですが、ご参考まで。

テーマ: 3DCG - ジャンル: コンピュータ

[3ds max PFlow] Data OperatorでSpawnしてFumeFXのSourceにする

引き続きData Operatorです。

前回の記事でSpeedからParticle Scaleを調整しましたが、これをFumeFXでそのまま利用することはできませんでした。 お恥ずかしい・・・。以前仕事でダメだったことがあるような気はしていたのですがすっかり忘れてしまったので、またあれこれ試してみましたが以下の状況でダメでした。
  1.PFlow-ABurnオペレータからParticle SourceでFumeFXのエミッターにしたものの、Scaleの値は無視されたので活かせず。
  2.MesherでPFlowパーティクルをメッシュに変換し、Object Sourceでエミッターにしたものの以下の画像ようにスケール0の部分からも煙が。
20140809_01_mistake.jpg

TPがあれば何か方法があるんでしょうか・・・? 分かりません。
とりあえず、前回の手法はここで諦めて、SpawnされたパーティクルをSourceにする方法を試しました。
結果は以下の動画のようになりました。

PFlowの中身は以下のように変わりました。

  1. Position Objectでキャラの表面にパーティクルを配置します。ここは前回記事と同じです。Lock On Emitter, Animated Shape, Subframe Samplingのチェックを入れました。
  2. Data Operatorでは、しきい値以上のスピードが出ているパーティクルから、新たにパーティクルを発生させるようにしています。
  3. Data Testでは、Spawnしたパーティクルのみを判定して、それを別のEventに送っています。(ここでは分けていますが、2のData Operatorの内容をData Testにまとめてしまうこともできます)
  4. Event 002に送られたパーティクルは、Spawn時のSpeedで飛び散ってしまうのでDragで減速するようにしました。
  5. パーティクルの寿命を設定しました。パーティクルが存在し続けるとFumeFXで煙が出続けてしまうので適当なところで消えるようにしました。
  6. このEvent上のパーティクルだけをFumeFXのSourceとして使いたいので、PFlow-ABurnオペレータを置きます。このオペレータを置くと、FumeFXのParticle Sourceから特定のEventのパーティクルだけをSourceにすることができます。

    20140809_02_PFlow.jpg

次にData Operatorの内容を見ていきます。(前回の記事と重複するところもあります)

  1. まずは、Speedの値が小さくて、数値をビューポートに表示したときに見にくかったので、1つ目のFunctionで10倍にしました。(ここは無くてもOK)
  2. Speedのしきい値を1.3にして、Conditionで1.3以上のパーティクルはtrueを返すようにしました。Spawnするパーティクルの判定に使います。
  3. Output Newを1つ作っておきます。Is Spawnという名前にしていますが、これをカスタムチャンネルとして利用します。 (マニュアルのAmount Changeのページに載っていた手法を応用しています)
  4. Amount ChangeのタイプをSpawnにし、Integer As Additiveにします。Conditionが下三角形に接続させていますが、これはフィルターと言います。接続された条件に合う時だけSpawnが行われるようになります。
  5. Scalarが値1で接続されていますが、これでSpawnされたときに条件にあったパーティクルから1つだけパーティクルを発生せます。
  6. Amount ChangeのIs Current Spawnにチェックを入れ、ここに先に作っておいたIs Spawnというカスタムチャンネルを割り当てます。こうすることで、Spawnで発生したパーティクルには、Is SpawnというチャンネルにTrueが付与されます。

20140809_03_DataOperator.jpg

Data Operatorでは、実行順序、優先順序というものがあります。Outputするデータについて出力順を設定することなのですが、Data Operatorを理解する上でとても重要な仕組みです。画像の例では、Is Spawnの実行順を1に、Spawn Additiveの実行順を2にしています。Is SpawnをSpawn Additiveで利用しているので、このような順序にしています。Data Operatorでは先にOutputしたデータを、そのまま続けて再利用するということが頻繁に起こりますが、実行・優先順序がきちんとしていないと正しいデータを受け取れません。

と、ここまで説明しておいてなんですが、上の画像の例では実行順が逆でも問題は生じませんでした。Is Spawnで入力データがないので、順序が逆でも値が更新されなかったためと思われます。

続いて、Data Testです。
Output TestサブオペレータではTrueかFalseの値を入力し、Trueの場合は別のEventに送られます。パーティクルには先ほどIs Spawnというカスタムチャンネルが付与されています。SpawnされたパーティクルはTrueになっているので、Event 002に送られます。それ以外はfalse(扱い?)になるので、元のEventに留まります。
20140809_04_DataTest.jpg

Event 002に送られたパーティクルは、減速しつつ8Fで消えるように設定され、FumeFXのParticle Sourceとして利用しています。動画では、赤いパーティクルがPosition Objectで配置されたパーティクル、Ticks表示されている水色のパーティクルがSpawnされたパーティクルです。

以上です。

テーマ: 3DCG - ジャンル: コンピュータ

[3ds max PFlow] Data OperatorでSpeedが速いところにパーティクル

今回は、Data Operatorを使って、キャラクターの動きの速いところだけパーティクルで強調されるようにしてみました。
もうひと工夫必要ですが、FumeFXなどのエミッターとして使うようなことを想定しています。

キャラクターが前転しているときに、足など動きの速いところでパーティクルが表示されるようにしました。 (動画は下の方に)
20140806_01_speedToScale.jpg

キャラクターはAXYZ designのものを使っています。アニメーションデータは3ds max 2014のサンプルデータに入ってたやつを流用しました。

PFlowのEventについて、ポイントは2つあります。いろいろ試したのですが、今回はData Operatorでパーティクルをキャラに配置することはせずに、Position Objectでパーティクルを配置しています。Data Operatorでテストしたところ、キャラクター表面に配置して、キャラクターの動きに追従させつつ、なおかつ、Speedの値も保持させるという方法がちょっと分かりませんでした。必ず方法はあると思うのですが、時間かかりそうだったので今回は諦めました。

一方、Data Operatorでは、Speedを参照して、一定値以上の値を拾い、その値の大小をスケールに流し込む、ということをしています。 
20140806_02_pflow.jpg

一例ですが、Data Operatorの中身は以下のようにしてみました。

  1. まずは、Speedの値が小さくて、数値をビューポートに表示したときに見にくかったので10倍にしました。(ここは無くてもOK)
  2. Speedのしきい値を1.1にして、Conditionで1.1以上のパーティクルはtrueを返すようにしました。
  3. 2つ目のFunctionでは、しきい値が1.1の時にパーティクルのスケールが0になるように、Speedから引いています。
  4. パーティクルのサイズが小さかったということと、後からサイズを調整できるように3つ目のFunctionで15を掛けています。
  5. 4の値をそのまま使いたいところですが(Floatのまま行こうとしたら落ちたので)、Vectorに変換。4つ目のFunctionでVectorと乗算します。
  6. Pipeで条件分け?をしました。2でtrueが返ったときは5の値を使い、そうでないときは、スケールが0になるようにしました。
  7. 最後は、Output StandardのScale Vectorに流し込みます。


    20140806_02_pflow.jpg

前後しますが、パーティクルをキャラ表面に追従させるときは、以下3箇所にチェックを入れてください。今回のシーンでは、Subframe Samplingのチェックが外れていると、1frame遅れてパーティクルが表示されるというトラブルが生じました。 
20140806_04_positionObject.jpg

動画にしたものは以下になります。

以上です。

スケール値0というのが何か悪さをした気がするので、そのままではFumeFXなどでは使えないかもしれません。Spawnさせるなどして工夫できる気がします。試したらまたブログに書きたいと思います。

テーマ: 3DCG - ジャンル: コンピュータ

[3ds max PFlow] WIP 2d3d変換用のデプスを客観的に評価したい

今回もData Operatorです。
実は作りたいものがありまして、Data Operatorを集中的に検証していました。

立体視の2d3d変換でデプスを作ることがありますが、このデプスの評価をもっと手軽にできないかなと考えていました。アイデア自体は誰でも思いつくようなちょっとしたものですが、プログラマではないのでそれを形にすることができませんでした。そういえば、Data Operatorならイケそうな気がすると思い立ちまして、Data Operatorで構築できるかどうか検証してみました。未完成ではありますが、形になってきました。

カラーとデプスを用意します。デプスは分かりやすいように横方向のグラデーションでテストしています。 左側の素材は、素材辞典のものを利用しました。
20140801_01_wip_sample.jpg

以前のブログで描いたものの応用なのですが、Data Operator上で、
  1.パーティクルを整列させて、
  2.色を拾って、
  3.デプスも色を拾って、
  4.パーティクルを左右にズラして、
  5.ディスプレイ前後の空間に配置
というようなことをしています。
20140801_06_wip_PFlow.jpg

結果はこうなりました。デプスが単調なグラデーションなので、パーティクルが斜めに並んでいます。視聴者からの見え方をシミュレーションするように設定してあるので、ディスプレイサイズや視聴者の距離などを変えればそれに連動してパーティクルの位置が変わるようになっています。
20140801_02_wip_viewerSim.jpg

maxでサンプルシーンを作って、デプスを書き出してみました。
20140801_03_wip_3dcg.jpg

Data Operatorを通すとこのようになりました。
20140801_04_wip_viewSim2.jpg

トップビューから見るとこのようにパーティクルが配置されています。
20140801_05_wip_topView.jpg

デプスを使った2d3d変換は多数のスタッフで作業をするのですが、各スタッフが赤青メガネだけで自己チェックしているところが多いと思います。ところが、赤青メガネだけではなかなかデプスが良いのか悪いのか判断が難しいんですよね。今回のような表示方法があれば、各デプスアーティストが客観的にデプスを評価できます。目標としてはこれを3D アニメーション ソフトMayaとAfterEffectsで手軽に表示できるように構築できればさらに良いのですが。

以上です。

テーマ: 3DCG - ジャンル: コンピュータ

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。