2013年3月28日木曜日

Particleのスプライトに関するメモ知識

数日ぶりの更新です。

今回はParticleのSpritesに関するエクスプレッションの簡単なメモ。


普段はParticleのSptitesはほぼ使わないというか、全く使わないのですが
今回仕事でどうしても必要になったのでその事をメモしていきます。


まず、Sptitesの簡単な説明。
Particle1つ1つがプレーンの状態になって、どんな角度からでも自分のカメラ(パースビューとか関係なく)の方向に向いてきます。

それを使うとradiusPPなどが使用できなくなります。
radiusではなく、scaleXとscaleYを使用するからです。

なので、radiusPPの代わりにアトリビュートの追加でscaleXPPとscaleYPPを追加してそこに同じエクスプレッションを入れてあげれば良いという事になります。



例)

Particleのサイズを徐々に上げて一定で止める場合。
※スプライトの場合


--------------------------creation----------------------------



//--------------size--------------
spriteScaleXPP = 0.1; //0でも可
spriteScaleYPP = 0.1;

-------------------------------------------------------------



-------------------------Runtime after dynamics----------------

//--------------size--------------
if(spriteScaleXPP <= 0.1) //X方向のスケールが0.1より小さい場合、
spriteScaleXPP += 0.01; //0.01が毎フレーム加算される。

if(spriteScaleYPP <= 0.1)
spriteScaleYPP += 0.01;

-------------------------------------------------------------

こんなノリです。



Particleのタイプはほとんどスフィアかメタボールしか使ってこなかったんで、初めて知りました。
そして少し苦戦しました。

あと他にも色々書きたい事があるんですが、少しまとめるのに時間がかかりそうなので今回はこの辺りにしておきます。


次回はSpriteに貼り付けるテクスチャを分けるやり方を書きたいと思います。




・・・毎回思うけど、こんな簡単なメモばかりで良いのかなぁって思います。。
が、どんな事でも1歩からという事で小さい事でもどんどん書き殴っていってやろうかと思います。

2013年3月19日火曜日

FumeFX for 3dsMax

FumeFXで軽く煙を作りました。

https://vimeo.com/62144382

レンダリング含めて2時間程度です。

基本はopacityとかをいじっただけです。
色々調整するべき点はあるけど、一先ずMayaFluidと作りやすさを比較してみた感想は。。。


Fume超楽ですね。

いや、本格的にディティールに凝ったり難易度高い動きをしようと思ったら超難しいと思うけど、
簡単にリアルな煙を作るんだったら100%こっちですね。

Mayaを4年触って、MaxFumeを1ヶ月程度触ってこの感じだもん。
抜群にFumeのが良いとどうしても思ってしまうよ。

ただ、やはり一長一短はある感じで、多分浮いている雲とかの表現は難しそうです。
流動感のある煙は得意ぽいけど、重量感のある煙は苦手なのかもなー、と感じました。

まぁ簡単に触っての感想だから一概に言えないですけどね。
とりあえずこれからこういう仕事も来るかもしれないし、ぼちぼち触っていこうと思います。

その際にメモしたい事や気になった事があればすぐ書くと思います。

noise関数

noise関数というのは、-1~1の値をランダムに返すコマンドです。

使用例は以下の通り

noise(time) 1秒毎にランダムな数値を返す。
グラフで言うとスムースの状態になり、滑らかな動きを作成。

noise(frame) 1フレーム毎にランダムな数値を返す。
グラフで言うとリニアの状態になり、1フレーム毎にカチカチと変化の激しい動きを作成。


以前、opacityを変化させてキラキラさせるParticleを紹介しましたが、
今回はそれを更に使いこなす豆知識みたいなものです。

-1~1だと、-1~0までの間が全て負の値になってしまい完全な透明となって消えてしまいます。
キラキラさせる場合は光の変動が激しくしなければならない事が多いと思うのですが、完全に消えてしまうと不都合な場合もあると思うんです。


その場合に使える単純な計算式です。

ようは、-になるのなら、それを+にすれば良いだけの話です。
その為の計算式を使えば良いという事ですね。

noise(time) / 2 + 0.5;

こうすれば返す値の全てが+になります。

また、0の値を無くしたいという場合には以下のような感じで調整していけば良いです。




単純ですね。
言われるまで気づきませんでした。

確か以前、負の値と正の値に変換するコマンドとか使った記憶があるのですが完全に忘れてしまっていて色々な人に聞いた結果こういう感じの計算式が良いとなりました。


こういう風に忘れてしまう事が多いので、このブログでメモ書きしていこうと思ったんですけどね。



どなたか負の値を正の値で返すようなコマンドを知っていたら教えてください。。。

2013年3月15日金曜日

最近気になったゲームムービー「アサシンクリード4」

こんにちわ。


ブログ始めてからMayaやAEの事ばかりでしたので、たまには息抜きに最近気になったムービーでも紹介します。

といってもCG屋さんであればご存知の方も多いのですが(笑)


アサシンクリード4です。



すごいですよね、シリーズのムービーを見る度に思いますがこのクオリティどうやって出してるんだろう。。
戦闘シーンのアニメーションとか毎回見直してしまいます。


一体このシリーズのムービーに何人が制作に携わってきたんでしょうか・・・
基本実写ベースのCGを作っている僕ですが、こういったゲームムービーにもとても興味があります。



やっぱり地道な作業を効率良くクリアするしかないんだろうなー。

2013年3月14日木曜日

チャンネルボックスからエクスプレッション制御する方法

エクスプレッションを打ったあと、数値を変更するのが面倒な時ありますよね。

今回はそんなメモです。



CreationとRuntime afterとRuntime beforeで同じエクスプレッションを打ち込む事が時々ありますが、たまに数値を片方入力し忘れる事があるので、これを統一化する方法です。

以下に手順を記載します。


・Add Dynamic AttributesのGeneralをクリック。
・Long nameにRadiusmaxと打つ。
・Date TypeをVectorにしてAttribute TypeをPer Particle(array)にしてAdd initial state attributeにチェックを入れてOK。

・同じ手順でRadiusminを作成。

この二つがrand関数の最大値と最小値になります。
radiusmaxとradiusminの名前は解ればなんでも良いです。

以下のようなエクスプレッションを打ち込む。

----------------------------------------

radiusmin = 0.001;
radiusmax = 1;


if (frame == 1)
    seed(1);


radiusPP = (randradiusmax,radiusmin);

----------------------------------------

こうすればradiusminとradiusmaxの値を変えるだけでよくなります。
ただそれでも毎回エクスプレッションエディタを開かなくてはいけないので面倒ですよね。

手順が少し増えますが、チャンネルボックスでrand関数を調整するやり方もあります。


・対象のParticleを選択し、channel boxでEdit>Add attributeを選択。
・Long nameにradiusMaxと入力し、Date TypeをFloatにしてOK
・同じようにradiusMinを作成。
※これを入力してrand関数をいじくりたいと思います。

・radiusMaxを選択してEditからexpressionを選択。
エクスプレッションエディタが表示されるので、Select Object and Attributeの部分をコピー
・radiusmaxにコピーしたものを入れ込んでください。
 以下に例を記載します。

----------------------------------------


radiusmax = radiusMax; //左がアトリビュートの値で、右がチャンネルボックスの値です。
radiusmin = radiusMin;


if (frame == 1)
seed(1);


radiusPP = rand(radiusmax,radiusmin);

----------------------------------------

こうすればチャンネルボックスの値からrand関数を調整する事が出来ます。


エクスプレッションを扱う方々には当然の知識かと思いますが、これから勉強する人や勉強中の方に知って頂ければと思いメモ致しました。

いやまぁ、当然自分が忘れっぽいのでその為でもありますが。。。

expression 基礎の中の基礎

expressionもまだまだ基礎レベルでしか扱う事が出来ないヘッポコエフェクターな僕ですが、気をつけてる点、忘れがちな点をメモしていこうと思います。

といっても今思い出せる分だけでそんな数ないと思うので簡単な事だけ書きます。


・文章の終わりの「;」

1文だけだと問題ないと思いますが、忘れがちなので普段から付ける癖を作るようにしています。
これは人それぞれだとは思いますが。。。


・rand関数とかに付け足すseed

seed();

randの数値を固定化するものです。
ここで注意する点は以下例のように関数の手前にただ打ち込むだけでは上手くいかない事です。

----------------------------------------

seed(1);

radiusPP = rand(2); //0~2の値のランダム

----------------------------------------

理由は
・アニメーションを巻き戻すと、radiusPPはseedで決まった値を受け取り、アニメーションで再生した際にエクスプレッションが実行する度にseedで同じ値が代入され続けるせいです。

簡単に言うと結果的にrand関数を使ってるのにランダムにならないという事ですかね。


なので、スタートフレームに戻った時に固定させるようにしてください。

----------------------------------------


if (frame == 1) //この場合スタートフレームは1です。
   seed(1);


radiusPP = rand(2);


----------------------------------------

こうすればアニメーションを再生する度に同じ値が代入されます。

盲点でもなんでもないですが、最初ドはまりしてしまったので書いておきました。

※AutodeskさんのMaya Helpを参考しました。むしろそのまんまに近いです。

http://me.autodesk.jp/wam/maya/docs/Maya2009/index.html?url=Useful_functions_seed.htm,topicNumber=d0e168048


毎回シミュレーションする際に変わるrand関数を固定化するので、誰かに見せたいけど、そういやキャッシュ取ってねーやって時とかに役立ちます。(ズボラですいません)


たったこれだけですが、他にも多分あるのでその時は追記で追加していきたいと思います。

2013年3月13日水曜日

AE Depth of Fieldについて

本日3度目の更新。

初めてのメモ書きで面白がってるだけですので、普段はこんなに更新しないと思います。



表題にもある通り、AfterEffectsでFrischluftさんのプラグイン「Depth of Field」についてメモ書きします。

僕が今回メモ書きするのは、Irisのfacetsについての注意点です。
要するにボケを6角形とかにしたい場合ですね。

まず、ボカす対象が小さいものである必要があります。
中途半端に小さいものだと多角形かどうかわからないので、対象物は極端に小さくした方が良いかもしれません。

--------------------------------------------------------------------------------------------------------------

・まず、Irisのfacetsで多角形の数を決めて下さい。3角形なら初期数値の3、6角形なら6と。

・そして、その2つ下にある値のrounded facetsを1から0にしてください。
これは丸みの事で、1にすると完全な丸、0にすると多角形になるという感じです。
0にする程丸みを帯びていきます。

--------------------------------------------------------------------------------------------------------------

ちなみに僕の場合、前回の記事の水玉に使っていたりするので、単体で使用するのですが背景などに適用すると街頭などが多角形になったりすると思われます。(やったことないですが)


たったのこれだけですが、毎回引っかかってしまうのでメモしておきました。



基本的な使用方法は大体解ると思い、スルーしましたが、念の為簡単に。
・Depth layaerをボカしたいレイヤーに選択して、radiusでボカし度合いを変更します。
多分それだけだと思いますが、細かい調整したい場合は別途で調べて頂ければと思います。

Maya ParticleのOpacityをランダム明滅させる方法

カメラに水玉みたいな光の反射が入り込んだりする時とかに使います。
その他にも色々使えるけど、よく方法忘れるのでメモ。

-----------------------------------------------------------------

MayaでParticleを適当に作り、フワフワさせる。(Turbulenceとかで)

あまり数多く作ると面倒なのでRateは少な目に。

Particle AttributeからAdd Dynamic AttributeのOpacityを選択。
・Add Per Parti le Attributeを選択。

Per Particle(Array)AttributesにOpacityが現れるのでエクスプレッションエディターで選択。
・CreationとRuntime after dynamicの両方に下記エクスプレッションを加える。

seed(particleId);
opacityPP = (noise(time * 1 + particleId *1000) - 0.66) * 3 * rand(0,1);

-----------------------------------------------------------------

解説していくと。。。

seed(particleId); //値を確定するもの

opacityPP = (noise(time * 1 + particleId *1000) - 0.66) * 3 * rand(0,1);
        *1              *2                *3               *4

*1 ノイズ 明滅させる為
*2 明滅の速度
*3 Particleの1粒1粒で明滅度合いを変えるもの。
*4 明滅速度のランダム度合い

更に詳しく説明付け加えると、、


ノイズを時間×速度をParticle毎に変化を付け加え、1000はParticleの明滅に同じ値を出さないようにする為に値を増やす為で、-6.6は明滅に差をつける為。

* 3 * rand(0,1);は3の速度で1~0のランダム値を付けてParticle毎に差を出す為。


多分こんな感じです。

これをレンダリングして使う場合はParticle sampler nodeでシェーダーに繋げば良いです。

多分というのは、実はこのエクスプレッション、よく使うには使うのですが、最初に書いた人は先輩で行き詰った時に一瞬で作って頂いたものだからです。

それを自分なりに回答してみた感じなので、解説もあってるかはわかりません。
あくまで自分なりの解釈です。。すみません。

もっと自分で勉強してこういうの一瞬で作れるようにならないとですね。
頑張ります。



※もし間違っていたらご指摘頂けると大変有難いです。

こちらを参考にする方がいれば完全に正しい知識ではなく不確定な知識である事を認識してご参考下さるよう宜しくお願い致します。


あと先ほど作っている最中に気になった事を一つ。


このエクスプレッションをシェーダーに繋ぐ場合には
Particle SamplerのOpacityPPをシェーダーのTransparencyに突っ込めばOKのはずなのですが、それでは上手くいかなかったので
Particle SamplerのoutTransparencyをシェーダーのTransparencyに突っ込んだら上手くいきました。

これもOpacityPPにエクスプレッションを入れてそれを繋いだはずなのに、何故上手くいかなかったのかイマイチわかりません・・・
何かご存知の方がいらっしゃればご教授頂けると大変有難いです。


Maya レンダリングのFile name prefixについて

あくまで基礎ですが、たまにド忘れしてしまうので基本的な所からメモしていきたいと思います。
知らない人もたまにいるので。

Mayaでレンダリングする際、ファイル名を簡単につけるコマンドのようなものです。


ファイル、シーン名をファイルにつけたい場合
<Scene>、または%s

レイヤー名をファイルにつけたい場合
<Layer>、または%l

使用しているカメラをファイルにつけたい場合
<Camera>または%c

個人的にこの辺りをよく使います。

フォルダで整理して出力していきたい場合は/(スラッシュ)で区切ると良いです。

例として、

シーン名:Sample.mb
カメラ名:camera1
レイヤー名:Layer1
と設定したとして


%s/%c/%l/%l

と書き、出力形式をsgiで出すとこうなります。

Samplp      フォルダ
 >camera1     フォルダ
  >Layer1     フォルダ
   >Layer1.sgi  ファイル


表とか図ではないので少し解り辛いかもしれませんが、こういった形で出力されます。

あとバックバーナーになげる時のスクリプトとかありましたが、2年ほど使っていなくて完全に忘れてしまったので、次回使う事があったらメモしようと思います。

2013年3月8日金曜日

初投稿

はじめまして、東京でDigitalArtistでご飯食べてるフリーランスです。

DigitalArtistというのは3DCGデザイナー(または3DCGクリエイター)の事で、CGソフトを使ってゲームムービーやらCMやら映画やらパチンコの映像を作る人たちの事です。

日本では3DCGデザイナーという表記が多いですが、作業内容的にデザイナーという感じではないので、海外での呼び名であるDigitaruArtist(デジタルアーティスト)を使っています。


・・・なんかカッコイイからねw


そんな仕事をしていると、メモしておきたい事や覚え書きしておきたい技術などに遭遇する事が多々発生します。

そういった技術や豆知識などをブログに残していこうかなと思って今回新たにブログを立ち上げました。


今後どういったブログになっていくかは不明ですが、何卒ヨロシクお願い致しますm(_ _)m