基本的なシーンのレンダリング方法
レンダラについて理解してみよう
セットアップでは、最後に実際にLightmetricaレンダラをとりあえず動かしてみるところまで行きました。
レンダラが何かよくわからない人からすると「画像が出たぞ!それで??」って感じですよね。 わからなくても大丈夫!安心して下さい。説明しますよ。
レンダリングが何かについて説明する前にまず私たちがいる実世界について考えてみましょう。
遥か上空に太陽があって、雲があって、空は青くて、建築物や車なんかも走っていますよね。
なんで私たちは車を目で見ることができるのでしょうか?
「そんなの当たり前だろ。太陽の光が車に当たって反射して光が目に入ってきているからだろ」と思いますよね。
この光源からの光の反射などの伝搬行路をコンピューターの計算で求めて画像として出力する。
これがレンダリングになります。
もちろん光の経路(レンダリングでは、これをレイと呼びます)は上図のように1つの経路だけを通るわけではなく無限の経路パターンがあります。その全ての経路を計算することは不可能なので任意のサンプル数をユーザーが選ぶことでそのサンプル数分のレイの経路を計算していくことでレンダリング画像を生成するといった仕組みです。
それでは、簡単な説明はこれくらいにして、実際にexample
フォルダの003
に入っているscene.yaml
というファイルを開いてみましょう。
このソースコードは下図のシーンを定義しているものです。
scene
ファイルは以下のような大まかな構成からなってています。
lightmetrica:
version: 1.0.0
assets:
hogehoge
・
・
・
scene:
hogehoge
・
・
・
renderer:
hogehoge
・
・
・
今はとりあえず途中のコードは無視して、一番最後の
renderer:
type: bdpt
params:
num_threads: -1
render_time: 5
#num_samples: 100000000
max_num_vertices:
と書かれているところまでスクロールして下さい。
このrenderer
と書かれているところから以下がシーンのレンダリング方法を指定する部分になります。
基本的な構造は上図のような形でtype
とparams
以下を記述していきます。
type
では、レンダリングの種類を選びます。各種類については次に説明しますが、今すぐ気になる方は[コチラ] とりあえずはbdpt
のままにしておきましょう。
params
では、レンダリング時間や並列化のスレッド数を変更できます。
例えば、レンダリング時間を5->10に増やすことでより繊細な画像を生成することができます。
また、時間ではなくサンプル数(どれだけのレイを用いるか)で設定したい際にはnum_samples
のところのコメント欄を取り除いて、代わりにrender_time
をコメント化します。
また、上記以外の項目としてparams
以下に以下の項目をつけることができます。
grain_size
: 並列化のサイズを指定できます。例えば1000と設定することで1000サンプル単位で並列化を行います。デフォルトは10000になっています。progress_update_interval
: レンダリング時のプログレスバー(現在何%レンダリング完了したか)の表示間隔を設定できます。例えば、1000と設定すると1000サンプルごとにプログレスバーが更新されていきます。デフォルトは10000になっています。progress_image_update_interval
: この項目を付け加えることで指定した時間間隔でレンダリング途中結果の画像を生成することができます。例えば、render_timeを30に指定しておき、progress_image_update_intervalを10としておくと、10秒時、20秒時、30秒時の3枚の結果が画像として出力できます。defaultは-1で、この場合最終結果の1枚だけを出力画像とします。progress_image_update_format
: この項目をつけることで、出力画像をどのフォルダに置くかと、画像の名前を決定することができます。