<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>philo式 &#187; Maya</title>
	<atom:link href="http://philosy.com/blog/category/maya/feed/" rel="self" type="application/rss+xml" />
	<link>http://philosy.com/blog</link>
	<description>Philosophy of Hiroshi</description>
	<lastBuildDate>Wed, 21 Jul 2010 02:47:17 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>PyQt on Maya</title>
		<link>http://philosy.com/blog/2009/12/08/pyqt-on-maya/</link>
		<comments>http://philosy.com/blog/2009/12/08/pyqt-on-maya/#comments</comments>
		<pubDate>Mon, 07 Dec 2009 16:26:01 +0000</pubDate>
		<dc:creator>chiyama</dc:creator>
				<category><![CDATA[CG]]></category>
		<category><![CDATA[Maya]]></category>

		<guid isPermaLink="false">http://philosy.com/blog/?p=311</guid>
		<description><![CDATA[CG業界の標準スクリプティング環境が Python+Qt でほぼ確定っぽいので、私も今後はこの環境で開発をしていくことにしました。個人的にはスクリプト言語は Ruby、GUI ツールキットは fltk が好きなんですけど、そこでわざわざマイノリティになっても仕方ないですからね。。。。
ここで問題になるのが、標準で配布されている PyQt には 64bit 版が存在しないことです。将来的には Maya にも標準で PyQt が添付されるようになるでしょうが、今のところは各自用意する必要があるようなので syoyo さんの記事を参考に自前ビルドをしてみました。
結論から言えば、時間はかかったもののアッサリと動きました。Maya 上の Python から Qt のサンプルを動かすのもバッチリです   ・・・と言いたいところですが、一つ致命的な問題があることに気づきました。
スクリプト実行中は Maya が固まる
はい、ちょっと考えれば当たり前ですねw しかし、このままでは使い物になりません。
どうしたものか。。。と悩みながらドキュメントを読んでいると、pumpThread というものを使えば解決するようです。これは Maya の devkit に含まれています(devkit/other/PyQtScripts/qt/pumpThread.py)。
pyQtScripts/userSetup.py を実行すると Maya のメニューバーに pythonScripts という項目が追加されて、サンプルを試すことができます。・・・が、これもまたきちんと動いていないようで、相変わらず Maya が固まってしまいます。
また、標準でついてくる pumpThread にはいろいろ問題があるらしく、改良版が python_inside_maya という ML の &#8220;PyQt in Maya examples&#8221; というスレッドに掲載されていました。ソースはまだ読んでいないので内容については何とも言えないものの、こちらを使用したほうがいいのかもしれません。
今のところ私がわかっているのはこれくらいです。PyQt on Maya についてはまだまだ調査を始めたばかりでわからないことだらけなので、何か情報をお持ちの方はぜひ教えてください  [...]]]></description>
			<content:encoded><![CDATA[<p>CG業界の標準スクリプティング環境が Python+Qt でほぼ確定っぽいので、私も今後はこの環境で開発をしていくことにしました。個人的にはスクリプト言語は Ruby、GUI ツールキットは fltk が好きなんですけど、そこでわざわざマイノリティになっても仕方ないですからね。。。。</p>
<p>ここで問題になるのが、標準で配布されている PyQt には 64bit 版が存在しないことです。将来的には Maya にも標準で PyQt が添付されるようになるでしょうが、今のところは各自用意する必要があるようなので <a href="http://lucille.atso-net.jp/blog/?p=928">syoyo さんの記事</a>を参考に自前ビルドをしてみました。</p>
<p>結論から言えば、時間はかかったもののアッサリと動きました。Maya 上の Python から Qt のサンプルを動かすのもバッチリです <img src='http://philosy.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  ・・・と言いたいところですが、一つ致命的な問題があることに気づきました。</p>
<p><strong>スクリプト実行中は Maya が固まる</strong></p>
<p>はい、ちょっと考えれば当たり前ですねw しかし、このままでは使い物になりません。<br />
どうしたものか。。。と悩みながらドキュメントを読んでいると、pumpThread というものを使えば解決するようです。これは Maya の devkit に含まれています(devkit/other/PyQtScripts/qt/pumpThread.py)。</p>
<p>pyQtScripts/userSetup.py を実行すると Maya のメニューバーに pythonScripts という項目が追加されて、サンプルを試すことができます。・・・が、これもまたきちんと動いていないようで、相変わらず Maya が固まってしまいます。</p>
<p>また、標準でついてくる pumpThread にはいろいろ問題があるらしく、改良版が python_inside_maya という ML の &#8220;<a href="http://www.mail-archive.com/python_inside_maya@googlegroups.com/msg01923.html">PyQt in Maya examples</a>&#8221; というスレッドに掲載されていました。ソースはまだ読んでいないので内容については何とも言えないものの、こちらを使用したほうがいいのかもしれません。</p>
<p>今のところ私がわかっているのはこれくらいです。PyQt on Maya についてはまだまだ調査を始めたばかりでわからないことだらけなので、何か情報をお持ちの方はぜひ教えてください <img src='http://philosy.com/blog/wp-includes/images/smilies/icon_biggrin.gif' alt=':-D' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://philosy.com/blog/2009/12/08/pyqt-on-maya/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>64bit Mayaプラグイン開発環境を無料で構築する</title>
		<link>http://philosy.com/blog/2009/08/31/64bit-maya%e3%83%97%e3%83%a9%e3%82%b0%e3%82%a4%e3%83%b3%e9%96%8b%e7%99%ba%e7%92%b0%e5%a2%83%e3%82%92%e7%84%a1%e6%96%99%e3%81%a7%e6%a7%8b%e7%af%89%e3%81%99%e3%82%8b/</link>
		<comments>http://philosy.com/blog/2009/08/31/64bit-maya%e3%83%97%e3%83%a9%e3%82%b0%e3%82%a4%e3%83%b3%e9%96%8b%e7%99%ba%e7%92%b0%e5%a2%83%e3%82%92%e7%84%a1%e6%96%99%e3%81%a7%e6%a7%8b%e7%af%89%e3%81%99%e3%82%8b/#comments</comments>
		<pubDate>Sun, 30 Aug 2009 15:27:30 +0000</pubDate>
		<dc:creator>chiyama</dc:creator>
				<category><![CDATA[CG]]></category>
		<category><![CDATA[Maya]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://philosy.com/blog/2009/08/31/64bit-maya%e3%83%97%e3%83%a9%e3%82%b0%e3%82%a4%e3%83%b3%e9%96%8b%e7%99%ba%e7%92%b0%e5%a2%83%e3%82%92%e7%84%a1%e6%96%99%e3%81%a7%e6%a7%8b%e7%af%89%e3%81%99%e3%82%8b/</guid>
		<description><![CDATA[64bit 版の Mayaプラグイン開発環境を作るためにやった作業メモ。ほとんど memlog さんからのコピペですwww

・Mayaのインストール
普通にインストールします。
・開発環境構築
無料で手に入る環境をインストールします

Visual Studio 2008 Express Edition
Windows SDK

・プラグインウィザードの設定
Maya のドキュメント通りにやってもうまくいきません。ガッデム!!
というか、いろいろ試しても Wizard はまともに動きませんでした。どうせ使わないのでこれは放置の方向でwww
・開発環境起動
1)スタート &#62; Microsoft Windows SDK v6.1 &#62; CMD Shellを起動
2)起動させたコマンドプロンプトから以下を実行
start VCExpress /useenv
これで、64bit環境が設定された Visual C++ 2008 Express Edition が起動します。
・環境設定
ツール/オプション で環境を設定します
プロジェクトおよびソリューション/VC++ ディレクトリ で、ディレクトリを表示するプロジェクトから インクルードファイル を選び、
 C:\Program Files\Autodesk\Maya2010\include
C:\Program Files\Autodesk\Maya2010\include\maya
この二つを追加。同様に、ライブラリファイルに
 C:\Program Files\Autodesk\Maya2010\lib
を追加します。
・サンプルプラグインをビルド

適当なサンプルのプロジェクトを開きます
プロジェクト→プロパティ から、構成プロパティ/リンカ/詳細 を選んで、対象コンピュータを &#8220;MachineX64&#8243; にします
ビルド!!

これでエラーが出なければ無事にプラグイン開発環境が整ったことになります。…が、正直ここまでするなら製品版を買ったほうが楽ですwwww
Standard なら 25000円くらいです。社会人の貴重な空き時間を買うと思えば安いものです。
もう一つの選択肢は、Windowsでは 64bit 環境で開発しないとか。Mac も Linux も、無料で開発できますからねぇ。
 結局、製品版の Visual Studio を購入しちゃいました。見事に Microsoft [...]]]></description>
			<content:encoded><![CDATA[<p>64bit 版の Mayaプラグイン開発環境を作るためにやった作業メモ。ほとんど <a href="http://blog.taikomatsu.com/2008/12/05/maya-plug-invcexpress%E3%81%A764bit%E3%83%97%E3%83%A9%E3%82%B0%E3%82%A4%E3%83%B3%E3%81%AF%E4%BD%9C%E3%82%8C%E3%82%8B%E3%81%8B%E3%80%82/">memlog さんからのコピペ</a>ですwww</p>
<p><span id="more-248"></span></p>
<p><strong>・Mayaのインストール</strong><br />
普通にインストールします。</p>
<p><strong>・開発環境構築</strong><br />
無料で手に入る環境をインストールします</p>
<ul>
<li><a href="http://www.microsoft.com/japan/msdn/vstudio/express/">Visual Studio 2008 Express Edition</a></li>
<li><a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=7614FE22-8A64-4DFB-AA0C-DB53035F40A0&amp;displaylang=ja">Windows SDK</a></li>
</ul>
<p><strong>・プラグインウィザードの設定</strong><br />
Maya のドキュメント通りにやってもうまくいきません。ガッデム!!<br />
というか、いろいろ試しても Wizard はまともに動きませんでした。どうせ使わないのでこれは放置の方向でwww</p>
<p><strong>・開発環境起動</strong><br />
1)スタート &gt; Microsoft Windows SDK v6.1 &gt; CMD Shellを起動<br />
2)起動させたコマンドプロンプトから以下を実行</p>
<blockquote><p>start VCExpress /useenv</p></blockquote>
<p>これで、64bit環境が設定された Visual C++ 2008 Express Edition が起動します。</p>
<p><strong>・環境設定</strong><br />
ツール/オプション で環境を設定します</p>
<p>プロジェクトおよびソリューション/VC++ ディレクトリ で、ディレクトリを表示するプロジェクトから インクルードファイル を選び、</p>
<blockquote><p> C:\Program Files\Autodesk\Maya2010\include<br />
C:\Program Files\Autodesk\Maya2010\include\maya</p></blockquote>
<p>この二つを追加。同様に、ライブラリファイルに</p>
<blockquote><p> C:\Program Files\Autodesk\Maya2010\lib</p></blockquote>
<p>を追加します。</p>
<p><strong>・サンプルプラグインをビルド</strong></p>
<ul>
<li>適当なサンプルのプロジェクトを開きます</li>
<li>プロジェクト→プロパティ から、構成プロパティ/リンカ/詳細 を選んで、対象コンピュータを &#8220;MachineX64&#8243; にします</li>
<li>ビルド!!</li>
</ul>
<p>これでエラーが出なければ無事にプラグイン開発環境が整ったことになります。…が、正直ここまでするなら製品版を買ったほうが楽ですwwww</p>
<p>Standard なら 25000円くらいです。社会人の貴重な空き時間を買うと思えば安いものです。</p>
<p>もう一つの選択肢は、Windowsでは 64bit 環境で開発しないとか。Mac も Linux も、無料で開発できますからねぇ。</p>
<hr width="50%" /> 結局、製品版の Visual Studio を購入しちゃいました。見事に Microsoft の戦略にハマってますねぇ。</p>
]]></content:encoded>
			<wfw:commentRss>http://philosy.com/blog/2009/08/31/64bit-maya%e3%83%97%e3%83%a9%e3%82%b0%e3%82%a4%e3%83%b3%e9%96%8b%e7%99%ba%e7%92%b0%e5%a2%83%e3%82%92%e7%84%a1%e6%96%99%e3%81%a7%e6%a7%8b%e7%af%89%e3%81%99%e3%82%8b/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Volume rendering with Mental ray on Maya(2)</title>
		<link>http://philosy.com/blog/2009/07/27/volume-rendering-with-mental-ray-on-maya2/</link>
		<comments>http://philosy.com/blog/2009/07/27/volume-rendering-with-mental-ray-on-maya2/#comments</comments>
		<pubDate>Sun, 26 Jul 2009 21:10:48 +0000</pubDate>
		<dc:creator>chiyama</dc:creator>
				<category><![CDATA[CG]]></category>
		<category><![CDATA[Maya]]></category>
		<category><![CDATA[Mental ray]]></category>

		<guid isPermaLink="false">http://philosy.com/blog/2009/07/27/volume-rendering-with-mental-ray-on-maya2/</guid>
		<description><![CDATA[完全にプライベートタイムを使って調べているのでなかなか捗らない(という言い訳をして数週間放置w)ですが、Twitter やコメント欄でいろいろな方に助けて頂きながら少しづつわかったことがあるのでまとめてみます。
・シェーダの割り当て
ボリュームシェーダを使用する際にも、サーフェースシェーダは指定する必要があります。ここでは、&#8221;何もしない&#8221; シェーダ、transmat を割り当てます。
・parti シェーダについて
Maya には parti シェーダのソースが付属しています(devkit/mentalray/shaders/physics/partishade.cpp)。
このソースの Description を読むとわかるのですが、parti シェーダは GI の使用が前提になっています。この時点で用がないなと見切りますwww
・raymarcherシェーダについて
parti シェーダ同様、ray marcher のソースも付属しています(devkit/mentalray/shaders/base/baseraymarch.cpp)。
コードを眺めてみると、拍子拔けするぐらい単純な構造になっていることがわかります。
ザックリと説明すると

mib_ray_marcher() から  raymarch() 関数を呼ぶ。これが ray marcher の本体
二点の mi_call_shader_x() で得られた値を比較する
最大分割数未満かつ、値の差が閾値以上なら recurse() 関数を呼ぶ
2と3を繰り返す
得られた結果を加算する(ここまでが raymarch())
最後に値を正規化してやる

これだけです。教科書に出てくる ray marcher そのものです。そして、このコードを読むと幾つか発見もあります。

最後に正規化してしまっているので、計算結果がそのまま得られない
結局単なる ray marcher なので、mi_call_shader_x() で呼ぶシェーダ次第
シェーダの計算結果をそのまま足してしまっているので、多分綺麗な結果が得られない

1,2 に関してはコードを読んだそのままです。1 は正規化しないようにすれば解決できます(多分。mental ray のシェーダが、正規化した値しか返せない仕様だったりすると困ります)。2 は、コードを読めば一発でわかりますが、日本語読解力の弱いわたしにはドキュメントを読んだだけじゃわかりません(ぇ。
3 は、ライトを考慮したシェーダネットワークを組もうとすると問題になるのかなと思います。ライトの場合、ray marching した結果の color と alpha を使って光源の値を&#8221;削る&#8221;(マスクする)必要があると思うので、これ用の仕組みを別途作ってやる必要があります。まあ、サンプリングポイント毎に馬鹿正直に計算していたら重いと思うので Deep Shadow Map のようなものを使って計算するのが無難なのでしょう。
・結論
いろいろ書きましたが、結局 raymarcher はレイ・マーチングを正直に実装しただけのシェーダだったということです。
これだけで何かできるというわけではなく、シェーダネットワークを組むための部品の一つとして使うために存在するものなので、これを元に Phenomena を作るか自分でシェーダを書くのが正しいアプローチなんだろうなーと、至って普通な結論に逹しています。
]]></description>
			<content:encoded><![CDATA[<p>完全にプライベートタイムを使って調べているのでなかなか捗らない(という言い訳をして数週間放置w)ですが、Twitter やコメント欄でいろいろな方に助けて頂きながら少しづつわかったことがあるのでまとめてみます。</p>
<p><strong>・シェーダの割り当て</strong><br />
ボリュームシェーダを使用する際にも、サーフェースシェーダは指定する必要があります。ここでは、&#8221;何もしない&#8221; シェーダ、transmat を割り当てます。</p>
<p><strong>・parti シェーダについて</strong><br />
Maya には parti シェーダのソースが付属しています(devkit/mentalray/shaders/physics/partishade.cpp)。<br />
このソースの Description を読むとわかるのですが、parti シェーダは GI の使用が前提になっています。この時点で用がないなと見切りますwww</p>
<p><strong>・raymarcherシェーダについて</strong><br />
parti シェーダ同様、ray marcher のソースも付属しています(devkit/mentalray/shaders/base/baseraymarch.cpp)。<br />
コードを眺めてみると、拍子拔けするぐらい単純な構造になっていることがわかります。</p>
<p>ザックリと説明すると</p>
<ol>
<li>mib_ray_marcher() から  raymarch() 関数を呼ぶ。これが ray marcher の本体</li>
<li>二点の mi_call_shader_x() で得られた値を比較する</li>
<li>最大分割数未満かつ、値の差が閾値以上なら recurse() 関数を呼ぶ</li>
<li>2と3を繰り返す</li>
<li>得られた結果を加算する(ここまでが raymarch())</li>
<li>最後に値を正規化してやる</li>
</ol>
<p>これだけです。教科書に出てくる ray marcher そのものです。そして、このコードを読むと幾つか発見もあります。</p>
<ol>
<li>最後に正規化してしまっているので、計算結果がそのまま得られない</li>
<li>結局単なる ray marcher なので、mi_call_shader_x() で呼ぶシェーダ次第</li>
<li>シェーダの計算結果をそのまま足してしまっているので、多分綺麗な結果が得られない</li>
</ol>
<p>1,2 に関してはコードを読んだそのままです。1 は正規化しないようにすれば解決できます(多分。mental ray のシェーダが、正規化した値しか返せない仕様だったりすると困ります)。2 は、コードを読めば一発でわかりますが、日本語読解力の弱いわたしにはドキュメントを読んだだけじゃわかりません(ぇ。<br />
3 は、ライトを考慮したシェーダネットワークを組もうとすると問題になるのかなと思います。ライトの場合、ray marching した結果の color と alpha を使って光源の値を&#8221;削る&#8221;(マスクする)必要があると思うので、これ用の仕組みを別途作ってやる必要があります。まあ、サンプリングポイント毎に馬鹿正直に計算していたら重いと思うので Deep Shadow Map のようなものを使って計算するのが無難なのでしょう。</p>
<p><strong>・結論</strong><br />
いろいろ書きましたが、結局 raymarcher はレイ・マーチングを正直に実装しただけのシェーダだったということです。<br />
これだけで何かできるというわけではなく、シェーダネットワークを組むための部品の一つとして使うために存在するものなので、これを元に Phenomena を作るか自分でシェーダを書くのが正しいアプローチなんだろうなーと、至って普通な結論に逹しています。</p>
]]></content:encoded>
			<wfw:commentRss>http://philosy.com/blog/2009/07/27/volume-rendering-with-mental-ray-on-maya2/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Volume rendering with Mental ray on Maya</title>
		<link>http://philosy.com/blog/2009/07/09/volume-rendering-with-mental-ray-on-maya/</link>
		<comments>http://philosy.com/blog/2009/07/09/volume-rendering-with-mental-ray-on-maya/#comments</comments>
		<pubDate>Wed, 08 Jul 2009 15:16:05 +0000</pubDate>
		<dc:creator>chiyama</dc:creator>
				<category><![CDATA[CG]]></category>
		<category><![CDATA[Maya]]></category>
		<category><![CDATA[Mental ray]]></category>

		<guid isPermaLink="false">http://philosy.com/blog/2009/07/09/volume-rendering-with-mental-ray-on-maya/</guid>
		<description><![CDATA[Maya の Menta ray 上でボリュームレンダリングをするテストをしているのですが、これがなかなか一筋縄にいかなくて苦労しています。
・できたこと

parti_volume シェーダを使ってボリュームライト的な表現をする→できたけど、目的とは違う
mib_rey_marcher を使ってボリューム的な表現をする→こちらが目的に近い

・できてないこと

ray_marcher を使ったとき、ボリュームの向こうにあるジオメトリがレンダリングされない(シェーダが起動しない?)
セルフシャドウ

ray_marcher の資料が意外となくて、ほとんど手探り状態で進めています。英語でも全然使用例が見つからないんですよね。。。
とにかく、今できていない二点は何とか解決したいものです。はてさて、どうやってやればいいのやら。。。
]]></description>
			<content:encoded><![CDATA[<p>Maya の Menta ray 上でボリュームレンダリングをするテストをしているのですが、これがなかなか一筋縄にいかなくて苦労しています。</p>
<p><strong>・できたこと</strong></p>
<ul>
<li>parti_volume シェーダを使ってボリュームライト的な表現をする→できたけど、目的とは違う</li>
<li>mib_rey_marcher を使ってボリューム的な表現をする→こちらが目的に近い</li>
</ul>
<p><strong>・できてないこと</strong></p>
<ul>
<li>ray_marcher を使ったとき、ボリュームの向こうにあるジオメトリがレンダリングされない(シェーダが起動しない?)</li>
<li>セルフシャドウ</li>
</ul>
<p>ray_marcher の資料が意外となくて、ほとんど手探り状態で進めています。英語でも全然使用例が見つからないんですよね。。。</p>
<p>とにかく、今できていない二点は何とか解決したいものです。はてさて、どうやってやればいいのやら。。。</p>
]]></content:encoded>
			<wfw:commentRss>http://philosy.com/blog/2009/07/09/volume-rendering-with-mental-ray-on-maya/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>RBD simulation using proxy model on Maya</title>
		<link>http://philosy.com/blog/2009/05/23/rbd-simulation-using-proxy-model-on-maya/</link>
		<comments>http://philosy.com/blog/2009/05/23/rbd-simulation-using-proxy-model-on-maya/#comments</comments>
		<pubDate>Sat, 23 May 2009 08:02:56 +0000</pubDate>
		<dc:creator>chiyama</dc:creator>
				<category><![CDATA[CG]]></category>
		<category><![CDATA[Maya]]></category>

		<guid isPermaLink="false">http://philosy.com/blog/2009/05/23/rbd-simulation-using-proxy-model-on-maya/</guid>
		<description><![CDATA[Maya 標準のリジッドボディシミュレーションは、シミュレーションしたいオブジェクトの形を真面目に計算してしまうので結構重いです。Physx や ODE であればサクサク計算できてしまうようなシーンでもスムーズに計算できなくてイライラしている人が全国に百万人ぐらいいることと思います。
Physx や ODE が軽いのは、ジオメトリを単純な箱や球形状に置き替えて計算しているからです。この方法であれば、数千ポリゴンもあるような複雑なオブジェクトでも簡単に計算ができます。
しかし、Maya ではこのような proxy オブジェクトを計算する方法が用意されていません。困りました。proxyオブジェクトで計算させてコンストレインでハイモデルを動かすようなことをしてもいいのですが、あまり cool な方法とは言えません。
そこで、 rigidBody ノードに入力するメッシュを差し替えることで proxyオブジェクトを使ってリジッドボディシミュレーションを行う方法を考えました。
もしかしたら、この方法は FAQ に載っているようなアタリマエな方法かもしれません。
max から乗り移るために Maya の勉強をしていて、自分で見つけた嬉しさの余り書いた記事なので、やさしく見守って(そして、コッソリ教えて)ください  

シーンのセットアップ
まずは、普通にシーンをセットアップします。 Plane を Passive Rigid body にして床にし、 Helix を Active Rigid body にした上に重力をアサインします。
proxy オブジェクトの用意
今回は、わかりやすくするために Cube を proxy として使います。 Cube を作って Helix の子供にし、Helix を囲うぐらいの大きさに調整します。



rigidBody ノードにproxyをアサインする
Helix の rigidBody の &#8220;Allow Disconnection&#8221; にチェックを入れます。これをしないと proxy に差し替えることができません。続いて、Helix と [...]]]></description>
			<content:encoded><![CDATA[<p>Maya 標準のリジッドボディシミュレーションは、シミュレーションしたいオブジェクトの形を真面目に計算してしまうので結構重いです。Physx や ODE であればサクサク計算できてしまうようなシーンでもスムーズに計算できなくてイライラしている人が全国に百万人ぐらいいることと思います。</p>
<p>Physx や ODE が軽いのは、ジオメトリを単純な箱や球形状に置き替えて計算しているからです。この方法であれば、数千ポリゴンもあるような複雑なオブジェクトでも簡単に計算ができます。</p>
<p>しかし、Maya ではこのような proxy オブジェクトを計算する方法が用意されていません。困りました。proxyオブジェクトで計算させてコンストレインでハイモデルを動かすようなことをしてもいいのですが、あまり cool な方法とは言えません。</p>
<p>そこで、 rigidBody ノードに入力するメッシュを差し替えることで proxyオブジェクトを使ってリジッドボディシミュレーションを行う方法を考えました。</p>
<p>もしかしたら、この方法は FAQ に載っているようなアタリマエな方法かもしれません。</p>
<p>max から乗り移るために Maya の勉強をしていて、自分で見つけた嬉しさの余り書いた記事なので、やさしく見守って(そして、コッソリ教えて)ください <img src='http://philosy.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p><span id="more-210"></span><br />
<strong>シーンのセットアップ</strong><br />
まずは、普通にシーンをセットアップします。 Plane を Passive Rigid body にして床にし、 Helix を Active Rigid body にした上に重力をアサインします。</p>
<p><strong>proxy オブジェクトの用意</strong><br />
今回は、わかりやすくするために Cube を proxy として使います。 Cube を作って Helix の子供にし、Helix を囲うぐらいの大きさに調整します。<br />
<center><br />
<a href="http://philosy.com/blog/wp-content/uploads/2009/05/rbdwithproxy.png" title="rbdwithproxy.png"><img src="http://philosy.com/blog/wp-content/uploads/2009/05/rbdwithproxy.png" alt="rbdwithproxy.png" height="50%" width="50%" /></a><br />
</center></p>
<p><strong>rigidBody ノードにproxyをアサインする</strong><br />
Helix の rigidBody の &#8220;Allow Disconnection&#8221; にチェックを入れます。これをしないと proxy に差し替えることができません。続いて、Helix と Cube を選択して Hypergraph のコネクション表示にします。この中から pCube1 を探して、中ボタンを押しながら Helix までドラッグアンドドロップします。メニューからは Other を選択します。すると Connection Editor が開きます。Left Display と Right Display 共に Show Hidden をオンにします。pCube1 の WorldMatrix と rigidBody の Rigid World Matrix を接続します。<br />
<center><br />
<a href="http://philosy.com/blog/wp-content/uploads/2009/05/connectwithproxy.png" title="connectwithproxy.png"><img src="http://philosy.com/blog/wp-content/uploads/2009/05/connectwithproxy.png" alt="connectwithproxy.png" height="50%" width="50%" /></a><br />
</center></p>
<p><strong>まとめ</strong><br />
これで、計算は proxy で行い、その結果を使って Helix のアニメーションを見ることができるようになりました。<br />
今回は全て手作業で行いましたが、これをツール化すればかなり使えるテクニックになると思います。</p>
]]></content:encoded>
			<wfw:commentRss>http://philosy.com/blog/2009/05/23/rbd-simulation-using-proxy-model-on-maya/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Mayaのお勉強</title>
		<link>http://philosy.com/blog/2009/02/11/maya%e3%81%ae%e3%81%8a%e5%8b%89%e5%bc%b7/</link>
		<comments>http://philosy.com/blog/2009/02/11/maya%e3%81%ae%e3%81%8a%e5%8b%89%e5%bc%b7/#comments</comments>
		<pubDate>Wed, 11 Feb 2009 11:13:32 +0000</pubDate>
		<dc:creator>chiyama</dc:creator>
				<category><![CDATA[CG]]></category>
		<category><![CDATA[Maya]]></category>

		<guid isPermaLink="false">http://philosy.com/blog/2009/02/11/maya%e3%81%ae%e3%81%8a%e5%8b%89%e5%bc%b7/</guid>
		<description><![CDATA[ずーっと使っていなくて、すっかり忘れてしまったので Maya の勉強をしてみました。
今日のテーマは &#8220;Maya内部でのパーティクルの扱われ方&#8221;。

1.パーティクルを作ってみよう
オンラインレッスンを参考に、パーティクルを作成します。 ボリューム軸フィールドまで作成したら Hypergraph で観察します。
2.ノードの繋りを確認してみよう
ここまでで作られたノードの繋りを確認します。



nurbsCurve の形状を元に emitter でパーティクルを生成して particleShape1 に送っているのがわかります。ここで注目するのが particleShape1 と volumeAxisField1 ノードです。それ以外はとりあえず気にしないでおきます。
particleShape1 と volumeAxisField1 で繋がっているのは fieldData、ppfieldData と outputForce です。
それぞれの内容をマニュアルで確認してみます。
まずはparticleノードから。
fieldData: パーティクルデータをまとめて保持しているパラメータです。この中にあるパラメータは実体へのポインタを差しているようです。
ここで注目したいのが、パーティクル一つ一つがデータを保持しているわけではなく、あるパラメータの配列に各パーティクルの値が格納されていることです。
コードで書くとこんな感じ:
 struct particle {
vector3 pos;
vector3 vel;
double mass;
time_t time;
};
こうではなく、
 vector3 pos[numParticles];
vector3 vel[numParticles];
double mass[numParticles];
time_t time[numParticles];
となっているということです。
オブジェクト指向的には前者の方が気持ちいいですが、パーティクルのようなデータの場合、後者の方が計算する時の効率が良さそうです。
ppFieldData: 特殊なアトリビュートの配列らしいです。よくわかりませんが今回は関係ないのでパス。
次にField。
outputForce: 入力されたパーティクルそれぞれに対応する外力を配列で返しています。
3.中のデータを確認してみよう
実際にノード間でやりとりされるデータを確認してみます。
それぞれの値を確認してみます。

vector $v[] = `getAttr particleShape1.fieldData.fieldDataPosition`;
print $v;
vector $v[] = `getAttr volumeAxisField1.outputForce[0]`;
print $v;

particleShape1.ppfieldData は genericArray という型らしく、情報の確認方法がわかりませんでした。ご存知の方がいらしたら教えてください。
この結果を見てわかる通り、particleShape から全てのパーティクルのパラメータが配列として渡され、volumeAxisFieldからはそれぞれのパーティクルに対応した Force の値が返されています。
4.結論
Maya 内部でのパーティクルの処理は以下のようになっているようです
データの格納場所:

particle [...]]]></description>
			<content:encoded><![CDATA[<p>ずーっと使っていなくて、すっかり忘れてしまったので Maya の勉強をしてみました。</p>
<p>今日のテーマは &#8220;Maya内部でのパーティクルの扱われ方&#8221;。</p>
<p><span id="more-170"></span></p>
<p><strong>1.パーティクルを作ってみよう</strong><br />
<a href="http://me.autodesk.jp/wam/maya/docs/Maya2009/index.html?url=Particles_emitters_and_fields.htm,topicNumber=d0e28441">オンラインレッスン</a>を参考に、パーティクルを作成します。 <a href="http://me.autodesk.jp/wam/maya/docs/Maya2009/index.html?url=Particles_emitters_and_fields_Creating_volume_axis_fields.htm,topicNumber=d0e28604">ボリューム軸フィールドまで作成</a>したら Hypergraph で観察します。</p>
<p><strong>2.ノードの繋りを確認してみよう</strong><br />
ここまでで作られたノードの繋りを確認します。</p>
<p><center><br />
<a href="http://philosy.com/blog/wp-content/uploads/2009/02/hypergraph.png" title="hypergraph.png"><img src="http://philosy.com/blog/wp-content/uploads/2009/02/hypergraph_s.png" alt="Hypergraph" /></a><br />
</center></p>
<p>nurbsCurve の形状を元に emitter でパーティクルを生成して particleShape1 に送っているのがわかります。ここで注目するのが particleShape1 と volumeAxisField1 ノードです。それ以外はとりあえず気にしないでおきます。</p>
<p>particleShape1 と volumeAxisField1 で繋がっているのは fieldData、ppfieldData と outputForce です。<br />
それぞれの内容をマニュアルで確認してみます。</p>
<p>まずは<a href="http://me.autodesk.jp/wam/maya/docs/Maya2009/Nodes/particle.html">particleノード</a>から。</p>
<p>fieldData: パーティクルデータをまとめて保持しているパラメータです。この中にあるパラメータは実体へのポインタを差しているようです。</p>
<p>ここで注目したいのが、パーティクル一つ一つがデータを保持しているわけではなく、あるパラメータの配列に各パーティクルの値が格納されていることです。</p>
<p>コードで書くとこんな感じ:</p>
<blockquote><p> struct particle {<br />
vector3 pos;<br />
vector3 vel;<br />
double mass;<br />
time_t time;<br />
};</p></blockquote>
<p>こうではなく、</p>
<blockquote><p> vector3 pos[numParticles];<br />
vector3 vel[numParticles];<br />
double mass[numParticles];<br />
time_t time[numParticles];</p></blockquote>
<p>となっているということです。</p>
<p>オブジェクト指向的には前者の方が気持ちいいですが、パーティクルのようなデータの場合、後者の方が計算する時の効率が良さそうです。</p>
<p>ppFieldData: 特殊なアトリビュートの配列らしいです。よくわかりませんが今回は関係ないのでパス。</p>
<p>次に<a href="http://me.autodesk.jp/wam/maya/docs/Maya2009/Nodes/field.html">Field</a>。</p>
<p><a href="http://me.autodesk.jp/wam/maya/docs/Maya2009/Nodes/field.html#attroutputForce">outputForce</a>: 入力されたパーティクルそれぞれに対応する外力を配列で返しています。</p>
<p><strong>3.中のデータを確認してみよう</strong><br />
実際にノード間でやりとりされるデータを確認してみます。</p>
<p>それぞれの値を確認してみます。</p>
<blockquote><p>
vector $v[] = `getAttr particleShape1.fieldData.fieldDataPosition`;<br />
print $v;<br />
vector $v[] = `getAttr volumeAxisField1.outputForce[0]`;<br />
print $v;
</p></blockquote>
<p>particleShape1.ppfieldData は genericArray という型らしく、情報の確認方法がわかりませんでした。ご存知の方がいらしたら教えてください。</p>
<p>この結果を見てわかる通り、particleShape から全てのパーティクルのパラメータが配列として渡され、volumeAxisFieldからはそれぞれのパーティクルに対応した Force の値が返されています。</p>
<p><strong>4.結論</strong><br />
Maya 内部でのパーティクルの処理は以下のようになっているようです</p>
<p>データの格納場所:</p>
<dl>
<dt>particle ノード </dt>
<dd>各パーティクルの実体を保持 </dd>
<dt>Fieldノード </dt>
<dd>各パーティクルに与える Force の値を保持 </dd>
</dl>
<p>ノード間でデータをやりとりするときは、ポインタを渡すだけで済ませていると推測できます。</p>
<p>データ処理:</p>
<ol>
<li>particle ノードから、保持している全パーティクルデータを Field ノードに渡す</li>
<li>Field ノードは受け取ったパーティクルデータを元に、各パーティクルの Force を計算して particle ノードに返す</li>
<li>1,2 の処理を、particleノードに繋っている全 Field ノードに対して行う</li>
<li>集まったデータを元に particle ノード内でパーティクルの情報を更新する</li>
</ol>
<p>これ以上細かい挙動が知りたかったら SDK を調べる必要がありそうですが、力尽きたので今日はここまで。</p>
<p>ふー。疲れた。MELの書き方とかすっかり忘れてて、いろんなところでつまづいてしまいました。この文章もいろいろ試しながら書いたので、嘘を書いてしまってる可能性大です。間違いを見つけたら教えてください(汗</p>
]]></content:encoded>
			<wfw:commentRss>http://philosy.com/blog/2009/02/11/maya%e3%81%ae%e3%81%8a%e5%8b%89%e5%bc%b7/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
