Blog?この広告は、90日以上更新していないブログに表示しています。Blender空みたいな青いスイーツは大体着色料ということを全国のちびっこが知ってしまった2017年も終わりが近づいてまいりました。2017に飛び込みでつっこんだ記事です。前にTwitterでホットボンドの芯を使ってレイリー散乱の実験をするというツイートを見かけました。それっぽくて面白かったので、Blenderでこれをやってみましょう。InternalBlenderのInternalレンダラーでもボリュームをレンダリングすることができます。マテリアルノードを利用できないようです。やるならグラデーションのテクスチャを使ってそれっぽく見せるくらいはできるでしょう。それでは光源の位置や数に合わせてテクスチャをいい感じに調整しないといけません。それはとても面倒です。CyclesというわけでCyclesでやりましょう。ボリュームは結構サイズが見た目に効いてくるので、なるべく実物と同じ寸法でセッティングすることにします。検索してみるとホットボンドの芯は直径7mmで長さが10cmの円柱が一般的なようです。それから光源はとりあえず点光源を使います。スマートフォンのフラッシュに使われるLEDくらいのものを想定してサイズを2mmとしておきました。このランプのところにあるサイズの設定は忘れがちで、特に小さなものを作ると光源が物体にめり込んでおかしなレンダリング結果になったりするのはよくあることなので注意です。私だけかもしれませんが。こんなものでしょうか。背景に板を置いたら照り返しがすごかったので光源は黒い筒に入れました。次に本命のマテリアルです。Absorption)"を繋ぐだけです。レイリー散乱の実験だったので、ボリュームの散乱を繋げてみるとこんな感じになりました。レイリー散乱では光の波長が散乱の強さに関わってくるそうですが、残念ながらCyclesは波長を考慮するレンダラーではないのでそのような設定項目はありません。しようかとなりますが、少し使い込んだ方なら似たようなものをキラッとひらめくのではないでしょうか。屈折で起こる光の分散(Dispersion)です。光の分散を再現したガラスのマテリアルはちょっと検索すると簡単に例が見つかります。凝ったものもありますが、基本的な考え方は一旦RGBに分離してそれぞれに違う屈折率を設定し、再び合成するというものです。Cyclesはサーフェスもボリュームも同じ理論の元でレンダリングされるので、同じ考え方がボリュームでも使えるのではないかというわけです。それではボリュームの散乱にRGB単色のカラーを設定して、それぞれの値を適当にずらして合成してみると...割とそれっぽいです。できあがり!CGは科学ですフィーリングでそれっぽいでもいいのですが、物理ベースが流行りの昨今、それなりに根拠のある数値を設定したくなります。そこでまずはレイリー散乱を調べてみるとこんな数式が出てきました。文字がたくさんありますがほとんどは物質の性質によって決まる値です。あとで見やすいようにちょっと変形しておきます。RGBの割合それではとりあえずRGBの各成分の割合を決めたいと思います。そのためには各色の波長が必要です。これはCIE(国際照明委員会)によって決められたものがあります。単位はナノメートルです。次にレイリー散乱の数式から波長によって変化する部分だけを抜き出します。そこでRGBそれぞれの値を計算してみるとこのようになります。Bの波長から求めた値が一番大きいのでこれを基準にすることにします。RとGの波長から求めた値をBの波長から求めた値で割って、各成分との比率を求めます。この値をボリュームの散乱のカラーに設定すれば良いでしょう。位相関数ところでボリュームの散乱に"異方性(Anisotropy)"というパラメーターがあるのが気になります。Cyclesのサーフェスのシェーダーは"****BSDF"という名前がついています。Function)と呼ばれるものに相当します。CyclesではHenyey-Greensteinの位相関数というものを使っているようです。異方性の値が青:0、橙:0.4、緑:0.6。負の値では中心で対称の左側に寄った形になる。