Blender(ver 2.46)を使った簡単なラジオシティによるレンダリング

いろいろなサイトを参考にしてトライしてみたが、休みを二日潰した。疲れた…思ったことは操作方法そのものを探すのは間違いかもしれないということ(とはいえ、これは厳しい現実)。Blenderの場合は仕様変更が激しいのでネットのリソースが古くなりがちなんですわ。


ラジオシティ
ラジオシティとは物体全ての表面のエントロピー計算を行って、光の吸収・反射・乱反射をシュミレートするものだそうで、これを用いることによって実世界に近いものを表現できるらしい。現実世界でも我々が目にする物は物体に反射した光を視覚的に捕らえることで認識してるわけで、そうした自然現象を計算だけで再現してるんでしょうな。ちなみにRadiocityでなくRadiosityなんだよね、前者だとかなりヤバイよね。

ラジオシティによる計算結果はカメラの向きなどの方向には影響を受けないデータなので、オブジェクトを編集しない限り、好きなアングルのレンダリングラジオシティの計算結果を用いて比較的早く行えるメリットがある(らしい)。そこまで使いこんどらん。


Blenderで試してみる

■シーンの作成

非常に簡単なシーンを作ってラジオシティによるレンダリングを試してみた。

シーンは、箱の中に立方体(Mesh->Cube)と球体(Mesh->icosphere)を配置、光源は四角形の板(MeshPlane)ととした。あとは、他にカメラだけですな。ちなみに光源はメッシュポリゴンを用いるのでLampなどの光源オブジェクトはいらんです。

マウス操作によるオブジェクトの移動が苦手な人(私のような人)の場合は"Nキー"を押して"Transform Properties"ウィンドウを呼び出してそれを使って制御するとよい。ちょっと、ちまちまとした作業で手間ではあるが。"Loc"は位置、"Scale"は相対比、"Rot"は向き、"Dim"は実寸でいいのかな。なんとなく使ってるが。

部屋となるCubeはカメラからみて正面となる一面を取り払って5面になっている。モデリングはこの章の目的から離れるので省略するが、面の削除は。
対象のオブジェクトを右クリックでアクティブにしてEditモード(Tabキーを押す)に入り、消したい面を構成する4頂点をマウス右クリックで選択(Shiftキーを押しながらだと複数選択できる)してから"Xキー"でEraseメニューを出して"Faces"を選択すると削除できる。終わったら、Tabキーを押してObjectモードに復帰する。

基本的な操作はこちらのチュートリアルから。
nsf.tc
もしくはこちらのリンクをたどって各種リソースなどを参考に。
Blender.jp


■マテリアルの設定

部屋となるCube, 被写体モデルとなるCubeとicosphere, そして光源となるPlaneにマテリアルの設定をする。ぶっちゃけ着色するわけだ。どれか対象を適当に選んで…

WinsowType"ButtonsWindow"のメニューアイコンより"Shading(F5)"をクリック、サブメニューアイコン群の"Material buttons"もクリック。ちなみに"WindowType"っていうのはここからクリックで呼び出せるWindow群のことね。(右の方にあるのが"Shading(F5)"アイコンね)


マテリアルがまだ設定されてないだろうからそっけない項目しかないが、"Links and Pipeline"項目より"Add New"ボタンをクリック。(名称が分からないときはマウスをアイコンに乗せておくとバルーンヘルプが出るのでそれを参考に)

一気に賑やかになったところより、"Material"項目のR,G,Bスライダを使って好きな色にする。原色系やビビッドな色合いの方が結果を確認するには都合が良いでしょうな。暗い色はラジオシティの特性上、全体の明るさが暗くなってしまう傾向があるらしい。Planeについてはここでは光源になって貰うために、別の設定である光源設定も行う(次で説明)。


■メッシュ光源の設定

簡単。"Shaders"項目のEmit値を"0"以外にすれば発光する。シーンによるがだいたい"0.3〜0.5"くらいあればいいんじゃないかな。ちなみに、光源の強さは、このEmit値の大小の他、そのオブジェクトの大きさにも影響する。オブジェクトの大きさを変えることによって光源の強さの調整も可能。


■法線の向きの設定

ポリゴンには表と裏があって、裏だとラジオシティの特性で正しい計算結果を導けない。これを修正する。

法線の向きは -
部屋となるCube: 内向き
光源となるPlane: 下向き
被写体モデルとなるCube, icosphere: 外向き

まあ、分かるよね。光源が上を向いてたら天井を照らすだけになるし、部屋のCubeの法線が外向きだと内部は影響しないことになるんだから。

上記のどれかのオブジェクトを右クリックでアクティブにして、WinsowType"ButtonsWindow"のメニューアイコンより"Editing(F9)"をクリック。"Tabキー"を押してEditモードに入る。

"Mesh Tools More"項目より"Draw Normals"ボタンをチェックして法線を表示させる。法線が判別しにくい場合はその上の"Nsize"の値を大きくすると法線表示も大きくなる。

各々の法線の向きだがおそらく、部屋となるCubeが外向きになっており光源となるPlaneが上向きになってるはずだ。向きを変えるにはそのオブジェクトのEditモードで"Ctrl+N"を押せばよい。…のはずなんだが、私の環境ではそうはならない…ので、"Aキー"を押して頂点を全選択にしてから、"Wキー"でSpecialメニューを呼び出し、そこの"Flip Normals"を実行する。こいつでオーケー。


ラジオシティのテスト

一応、最低限の準備としてはこれでラジオシティが実行できる。試しにやってみることにする。

WinsowType"ButtonsWindow"のメニューアイコンより"Shading(F5)"をクリック。、サブメニューアイコン群の"Radiosity buttons"もクリック。まだ、Editモードなら"Tabキー"でObjectモードに戻って"Aキー"を押す。全てのオブジェクトが紫になったら全選択完了。さて。

"Radio Render"項目の"Max Iterations"を"200"にする。これは拡散反射回数を示す物で大きくすればそれだけ反射回数が増えるけど計算量も増大する。ただ、こんな簡単なシーンだと計算時間が増えるだけでたいして代わりはない。あと、明るくしたいだけのためにこれを増やすのも考え物でたいして効果はない。(追記.1)光源の大きさや、Emit値を検討した方が良いと思う。

(追記.1)そうでもなさそうで、"Max Iterations"を使うとかなり変わる。光源が強いと50ぐらいでも十分の光量を得られることもあるようだ。

さらに詳しいラジオシティのそれぞれのボタンの説明は下記のサイトのリソースに任せる。もちろん他の内容も若干古いが充実してる。
http://f11.aaa.livedoor.jp/~hige/index.php?%5B%5B%A5%EC%A5%F3%A5%C0%A5%EA%A5%F3%A5%B0%A5%C4%A1%BC%A5%EB%A4%C8%A4%B7%A4%C6%A4%CE%A5%E9%A5%B8%A5%AA%A5%B7%A5%C6%A5%A3%5D%5D

次に"Radio Tool"項目の"Collect Meshes"を押す。解説には'Converts selected visible meshes to Patches'となってるが、Blenderでいうところのパッチとは'エネルギーを放出する三角形や四角形'となっているので、まあそういうことなんでしょう(よく分からん)。

最後に"Calculation"項目の"GO"を押す。ラジオシティの計算が始まりまる。内部がどんどんと明るくなっていくのがあなたに目にも確認できるはず。結果はBlenderのコンソールでも確認できる。

Rad elems: 6785 emittors 1
Unshot energy:1,520307
Radiosity solving time: 23227ms

ちなみにこのシーンでこちらの環境の'AthlonXP 1800+' & 'nForce2オンボードチップ' で上記のような結果。
23秒かかってる。


■再編集するときはラジオシティの計算結果は破棄

さて、計算結果だが…
何か明るすぎるし、メッシュのフェイスの分割(以降メッシュ分割と表現)が大きすぎて影の輪郭も綺麗に描かれてないのでもう少し編集して手を入れることにする。そこでRadiosityの計算を"Radio Tool"の項目の"Free Radio Data"ボタンを押して破棄する。


■周囲光が明るくなりすぎた…

これは、光源のEmit値を下げても良いが、Planeが大きすぎる感じがしたのでスケールを半分にした。


■影の輪郭が不自然

結論から言うと影を受ける側 - つまり部屋になるCubeのポリゴンメッシュ分割を上げればよい。
せっかくなので、モデルとなるCubeとicosphereも少しメッシュ分割を増やしてやろう。

対象としたいオブジェクトを右クリックでアクティブにして、WinsowType"ButtonsWindow"のメニューアイコンより"Editing(F9)"をクリック。"Tabキー"を押してEditモードに入る。

"Aキー"で頂点を全て選択して"MeshTools"項目より"Subdivide"を押せばそのオブジェクトの分割数ががんがん上がっていく。あまり調子に乗って押しすぎるとデータ数が増大して重くなりますよ。JDBDのマニュアルによると影を受ける側は4回、作る方は3回ぐらいが目安と言っているので今回はそれに従う。まあ、PC環境依存の問題ではあるが。

Subsivideをかける回数 -
部屋となるCube: 4回
被写体モデルとなるCube, icosphere: 3回

さて、光源となるオブジェクトのメッシュ分割数を上げて何か意味があるのかという問題だが、結論を言うと「私には分かりません」。光源の複数分散配置は計算量が増大するが、よりリアルな質感を得る効果的な方法とはある。しかし、単体の分割数を上げて光源としてのメリットはちょっと確認できなかった。今回は放置課題として保留だな。


■再度ラジオシティの計算

Radiosity solving time: 30317ms

7秒増えてしまったが、影の具合もずっと良くなった。これで行こう。


レンダリング

WinsowType"ButtonsWindow"のメニューアイコンより"Scene(F10)"をクリック。
"Render"項目で少なくとも"Radi"ボタンがチェックされてないとお話にならない。
あとは適当に。



まあ、こんな感じ。


自分自身は、チュートリアルを書くには知識も技量も何もあったものじゃないが、思ってた以上にラジオシティをあつかった物が少なく、ネタも現状のBlenderと比較して若干古くなりつつあるようあのでほんの入り口ではあるけれど、ネットリソースの何かの足しになればと思い記事にしてみた。
悪意はないので、嘘・大げさそういうところは平にご容赦を。


■Blednerのラジオシティで参考になるサイト(順不同):

http://f11.aaa.livedoor.jp/~hige/index.php?%5B%5B%A5%E9%A5%B8%A5%AA%A5%B7%A5%C6%A5%A3%5D%5D
http://blender2ch.hp.infoseek.co.jp/data/FAQ.htm#21
http://blog.r3c7.net/?p=123
http://xzr.dyndns.org/blender/index.php?cmd=read&page=%BC%AB%BA%EE%A5%C1%A5%E5%A1%BC%A5%C8%A5%EA%A5%A2%A5%EB%2F%A5%E9%A5%B8%A5%AA%A5%B7%A5%C6%A5%A3%A1%CA2.28c%CC%A4%CB%FE%A1%CB
http://xzr.dyndns.org/blender/index.php?cmd=read&page=%BC%AB%BA%EE%A5%C1%A5%E5%A1%BC%A5%C8%A5%EA%A5%A2%A5%EB%2F%A5%E9%A5%B8%A5%AA%A5%B7%A5%C6%A5%A3%A1%CA2.28c%B0%CA%B9%DF%A1%CB

(2008/09/15)痛い誤字を修正。ラジオ指定→ラジオシティとか。あと、本文の■ラジオシティのテストの項目の記述に誤りがあったので修正。