アセット

シーンの構成要素の作成

アセットとはレンダリングに必要なシーンの構成要素のことを指します。 レンダリングされるオブジェクトの形を定義するために「三角形メッシュ」が必要ですし、 そのオブジェクトに関連づいたマテリアルとして、反射特性を表す「BSDF」が必要です。 また「光源」や「センサー」がなければそもそもレンダリングされた画像に画像に何も映りません。 このように、レンダリングを行うためにそれぞれのアセットの役割を理解することは重要です。

前節で説明した通り、シーンファイルにおいてアセットを定義するためにassets要素が用いられます。 本節では基本となるアセットのカテゴリーと、その具体的な種類について解説します。

三角形メッシュ

三角形メッシュは3次元空間上に定義される三角形の集合で、複雑な表面形状を定義するために用いられます。 3DCGにおいて、三角形メッシュは様々なファイルフォーマットによってサポートされます (例えば、obj format, ply format等)。多くのDCCツールは三角形メッシュによってモデルを作成する機能が備わっています。 本フレームワークではそのような三角形メッシュを読み込むことができます。

直接指定

インターフェース / 種類

trianglemesh / raw

説明

Raw meshはもっともプリミティブな三角形メッシュの指定方法で、 直接頂点情報を指定することでメッシュを定義します。 このアセットはDCCツールを用いずに、単純な形状を定義するのに役立ちます。

パラメータ

4つの頂点を用いて、2つの三角形からなる四角形を定義します。

mesh_quad:
  interface: trianglemesh
  type: raw
  params:
    positions: >
      -1 -1 0
      1 -1 0
      1 1 0
      -1 1 0
    normals: >
      0 0 1
      0 0 1
      0 0 1
      0 0 1
    texcoords: >
      0 0
      1 0
      1 1
      0 1
    faces: > 
      0 1 2 
      0 2 3 

Assimpローダー

インターフェース / 種類

trianglemesh / assimp

説明

Assimpを用いて三角形メッシュを読み込みます。 複数のメッシュがファイルに含まれる場合、最初のものを使用します。 メッシュに関連づいたマテリアル情報は無視されます。

パラメータ

この例ではobjファイルを読み込みます。 シーンファイルと同じディレクトリにあるbunny.objを読み込みます。

mesh_bunny:
  interface: trianglemesh
  type: assimp
  params:
    path: bunny.obj

テクスチャ

2次元テクスチャを定義します。 テクスチャはオブジェクト表面に関連づいた情報を表します。 本アセットはほかのアセットから参照されて使用されます。 例えば、bsdfインターフェースのアセットは パラメータとしてテクスチャの参照を受け取ります。

ビットマップテクスチャ

インターフェース / 種類

texture / bitmap

説明

画像ファイルからテクスチャを読み込みます。 jpgpng等のLDR (low dynamic range) 画像フォーマットや、 exrhdr等のHDR (low dynamic range) 画像フォーマットをサポートします。 ファイルフォーマットはファイルの拡張子から自動的に判断されます。

パラメータ

tex_kamen:
  interface: texture
  type: bitmap
  params:
    path: kamen.png

BSDF

BSDF は光の反射特性を表します。 物理ベースレンダリングにおいて、BSDFは物体表面のマテリアルを表現するために用いられます。 本フレームワークでは、diffuse, specular, glossyの3種カテゴリーからなるのBSDFを実装しています。

拡散反射 (Diffuse)

インターフェース / 種類

bsdf / diffuse

説明

理想的な拡散反射表面を表す、ランバート反射を実装したBSDFです。 拡散反射面は光を多数の方向に反射し、ラフな見た目の表面を表します。 特にランバート反射は光が入射した点のまわりの半球に等しく反射が起こると仮定します。 定式化のシンプルさからランバート反射はレンダリングでよく用いられます。

パラメータ

この例では2つのbsdfアセットを定義しています。 ひとつはRを用いて、もう一つはTexRを用いてアセットを定義しています。

bsdf_red:
  interface: bsdf
  type: diffuse
  params:
    R: 1 0 0

bsdf_tex:
  interface: bsdf
  type: diffuse
  params:
    TexR: tex

完全鏡面 (Perfect mirror)

インターフェース / 種類

bsdf / reflect_all

説明

鏡のようなマテリアルを定義するBSDFです。 すべての入射光を鏡面反射する、完全鏡面 (perfect mirror)を実装します。

パラメータ

bsdf_S:
  interface: bsdf
  type: reflect_all
  params:
    R: 1 1 1

フレネル反射・屈折 (Flesnel)

インターフェース / 種類

bsdf / flesnel

説明

ガラスや水面を通して反射、屈折したシーンを見ることができます。 たとえば、プールの水面から水底を見ることができる一方で、 反射した周りのオブジェクトを見通すことができます。

このような現象はフレネル方程式によって記述することができます。 フレネル方程式によって別の屈折率をもつ媒質を通る光の反射、屈折の割合を記述することができます。 このBSDFでは絶縁体境界におけるフレネル方程式を用いました。

パラメータ

bsdf_S:
  interface: bsdf
  type: flesnel
  params:
    R: 1 1 1
    eta1: 1
    eta2: 1.5

Cook-torranceモデル

インターフェース / 種類

bsdf / cooktorrance

説明

光沢反射を表すモデルの一つであるCook-Torrance modelを実装します。 マイクロファセットの分布としてベックマン分布を用いました。 フレネル項として電導体に対するフレネル方程式を用いました。

パラメータ

bsdf_G:
  interface: bsdf
  type: cook_torrance
  params:
    R: 1 0.64705882352 0.60784313725
    eta: 0.140000 0.129000 0.158500
    k: 4.586250 3.348125 2.329375
    roughness: 0.1

光源

光源は光を発する発光体を表すアセットです。 光源から発された光はシーン表面で反射を繰り返し、 センサーへと達します。 光源がなければ、シーン中の何も見ることはできません。 本レンダラでは様々な種類の光源を実装しています。

面光源 (Area light)

インターフェース / 種類

light / area

説明

面光源は三角形メッシュに関連づいた光源を表します。 このアセットを用いることで、自己発光するオブジェクトを再現することができます。 関連させる三角形メッシュはこのアセットのパラメータではなく、 シーン定義で指定することに注意します。

パラメータ

assets:
  light_1:
    interface: light
    type: area
    params:
      Le: 1 1 1
  ...
scene:
  nodes:
    - light: light_1
      mesh: mesh_quad
      bsdf: bsdf_black
    ...

方向光源 (Directional light)

インターフェース / 種類

light / directional

説明

方向光源は一方向からくる光を再現します。 方向方向は無限遠に巨大な光源があると仮定することができます。 よって物体と光源までの距離が非常に遠い、太陽光などの現象を再現するのに使用することができます。

パラメータ

light_directional:
  interface: light
  type: directional
  params:
    Le: 1 1 1
    direction: -3 -1 -1

点光源 (Point light)

インターフェース / 種類

light / point

説明

点光源はシーン内の一点から発される光を再現します。 光源から発生した光は点からすべての方向に等しく照射されます。

パラメータ

light_point:
  interface: light
  type: point
  params:
    Le: 3 3 3
    position: 1.5 1 0

フィルム

フィルムにレンダリング画像が記録される構造を定義します。 フィルムはレンダリング中のピクセル情報を保持して、レンダリング後は画像を何らかの方法で出力します。

HDRフィルム

インターフェース / 種類

film / hdr

説明

HDRフィルムはレンダリング画像をHDR (high dynamic range)画像として書き出します。 HDR画像は多くのレンダラの出力として用いられます。 HDR画像で出力することによって、トーンマッピングなどの処理を後処理として分離できる利点があります。 出力できるHDR画像のフォーマットとして、 Radiance HDR (.hdr) と OpenEXR (.exr)をサポートしています。

パラメータ

film_1:
  interface: film
  type: hdr
  params:
    type: openexr
    w: 500
    h: 500

センサー

光源から照射され、シーンによって反射した光は カメラ中のセンサーによって測定されます。 人間の目に当てはめると、網膜上の光受容細胞がセンサーの役割を果たします。 本アセットではカメラのセンサーや人間の目の網膜を再現します。 センサーは画像を記録するためにfilmアセットへの参照が必要となります。

ピンホールカメラ

インターフェース / 種類

sensor / pinhole

説明

ピンホールカメラはレンズのない、有限の絞りを持たないシンプルなカメラモデルを実装します。 シーンで反射をした光は点(ピンホール)を通ってセンサープレーンに投影されます。 定式化のシンプルさから、ピンホールカメラはレンダリングにおいてしばしば用いられます。

パラメータ

sensor_1:
  interface: sensor
  type: pinhole
  params:
    We: 1 1 1
    fov: 45
    film: film_1

film_1:
  interface: film
  type: hdr
  params:
    type: hdr
    w: 500
    h: 500