<?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; Mental ray</title>
	<atom:link href="http://philosy.com/blog/category/mental-ray/feed/" rel="self" type="application/rss+xml" />
	<link>http://philosy.com/blog</link>
	<description>Philosophy of Hiroshi</description>
	<lastBuildDate>Sun, 25 Mar 2012 09:03:32 +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>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>ちょっと掴めたかも</title>
		<link>http://philosy.com/blog/2009/02/18/%e3%81%a1%e3%82%87%e3%81%a3%e3%81%a8%e6%8e%b4%e3%82%81%e3%81%9f%e3%81%8b%e3%82%82/</link>
		<comments>http://philosy.com/blog/2009/02/18/%e3%81%a1%e3%82%87%e3%81%a3%e3%81%a8%e6%8e%b4%e3%82%81%e3%81%9f%e3%81%8b%e3%82%82/#comments</comments>
		<pubDate>Tue, 17 Feb 2009 15:20:05 +0000</pubDate>
		<dc:creator>chiyama</dc:creator>
				<category><![CDATA[3ds max]]></category>
		<category><![CDATA[CG]]></category>
		<category><![CDATA[Mental ray]]></category>

		<guid isPermaLink="false">http://philosy.com/blog/2009/02/18/%e3%81%a1%e3%82%87%e3%81%a3%e3%81%a8%e6%8e%b4%e3%82%81%e3%81%9f%e3%81%8b%e3%82%82/</guid>
		<description><![CDATA[Surface に Transparency をアサインするんじゃなくて、Transmat を使うのが正解っぽい。
]]></description>
			<content:encoded><![CDATA[<p align="justify">Surface に Transparency をアサインするんじゃなくて、Transmat を使うのが正解っぽい。</p>
]]></content:encoded>
			<wfw:commentRss>http://philosy.com/blog/2009/02/18/%e3%81%a1%e3%82%87%e3%81%a3%e3%81%a8%e6%8e%b4%e3%82%81%e3%81%9f%e3%81%8b%e3%82%82/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>どうにもわからない</title>
		<link>http://philosy.com/blog/2009/02/17/%e3%81%a9%e3%81%86%e3%81%ab%e3%82%82%e3%82%8f%e3%81%8b%e3%82%89%e3%81%aa%e3%81%84/</link>
		<comments>http://philosy.com/blog/2009/02/17/%e3%81%a9%e3%81%86%e3%81%ab%e3%82%82%e3%82%8f%e3%81%8b%e3%82%89%e3%81%aa%e3%81%84/#comments</comments>
		<pubDate>Tue, 17 Feb 2009 14:43:10 +0000</pubDate>
		<dc:creator>chiyama</dc:creator>
				<category><![CDATA[3ds max]]></category>
		<category><![CDATA[CG]]></category>
		<category><![CDATA[Mental ray]]></category>

		<guid isPermaLink="false">http://philosy.com/blog/2009/02/17/%e3%81%a9%e3%81%86%e3%81%ab%e3%82%82%e3%82%8f%e3%81%8b%e3%82%89%e3%81%aa%e3%81%84/</guid>
		<description><![CDATA[3ds max + Mental ray でボリュームレンダリングをする方法がわからなくて散々試行錯誤したのだけれども、やっぱりわからない(涙。
マテリアルを mental ray にして、Surface シェーダに Transparency をアサインして完全に透明にして、Volume に Mist とかを割り当てればボリュームレンダリングっぽい絵ができると思ったのに、なぜかできない。なぜだ。。。
YouTube でみつけた、こんな感じのことがしたいだけなんだけど…



]]></description>
			<content:encoded><![CDATA[<p>3ds max + Mental ray でボリュームレンダリングをする方法がわからなくて散々試行錯誤したのだけれども、やっぱりわからない(涙。</p>
<p>マテリアルを mental ray にして、Surface シェーダに Transparency をアサインして完全に透明にして、Volume に Mist とかを割り当てればボリュームレンダリングっぽい絵ができると思ったのに、なぜかできない。なぜだ。。。</p>
<p>YouTube でみつけた、こんな感じのことがしたいだけなんだけど…</p>
<p><center><br />
<object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/Vv0CsASL1dg&#038;hl=ja&#038;fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/Vv0CsASL1dg&#038;hl=ja&#038;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object><br />
</center></p>
]]></content:encoded>
			<wfw:commentRss>http://philosy.com/blog/2009/02/17/%e3%81%a9%e3%81%86%e3%81%ab%e3%82%82%e3%82%8f%e3%81%8b%e3%82%89%e3%81%aa%e3%81%84/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

