基本的なシーンのレンダリング方法


レンダラについて理解してみよう

セットアップでは、最後に実際に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と書かれているところから以下がシーンのレンダリング方法を指定する部分になります。 基本的な構造は上図のような形でtypeparams以下を記述していきます。
typeでは、レンダリングの種類を選びます。各種類については次に説明しますが、今すぐ気になる方は[コチラ] とりあえずはbdptのままにしておきましょう。
paramsでは、レンダリング時間や並列化のスレッド数を変更できます。
例えば、レンダリング時間を5->10に増やすことでより繊細な画像を生成することができます。
また、時間ではなくサンプル数(どれだけのレイを用いるか)で設定したい際にはnum_samplesのところのコメント欄を取り除いて、代わりにrender_timeをコメント化します。

また、上記以外の項目としてparams以下に以下の項目をつけることができます。


2.レンダリング手法の選択