アセット
シーンの構成要素の作成アセットとはレンダリングに必要なシーンの構成要素のことを指します。 レンダリングされるオブジェクトの形を定義するために「三角形メッシュ」が必要ですし、 そのオブジェクトに関連づいたマテリアルとして、反射特性を表す「BSDF」が必要です。 また「光源」や「センサー」がなければそもそもレンダリングされた画像に画像に何も映りません。 このように、レンダリングを行うためにそれぞれのアセットの役割を理解することは重要です。
前節で説明した通り、シーンファイルにおいてアセットを定義するためにassets
要素が用いられます。
本節では基本となるアセットのカテゴリーと、その具体的な種類について解説します。
三角形メッシュ
三角形メッシュは3次元空間上に定義される三角形の集合で、複雑な表面形状を定義するために用いられます。 3DCGにおいて、三角形メッシュは様々なファイルフォーマットによってサポートされます (例えば、obj format, ply format等)。多くのDCCツールは三角形メッシュによってモデルを作成する機能が備わっています。 本フレームワークではそのような三角形メッシュを読み込むことができます。
直接指定
インターフェース / 種類
trianglemesh
/ raw
説明
Raw meshはもっともプリミティブな三角形メッシュの指定方法で、 直接頂点情報を指定することでメッシュを定義します。 このアセットはDCCツールを用いずに、単純な形状を定義するのに役立ちます。
パラメータ
positions
: 頂点位置を表す3Dベクトルのリストです。normals
: 頂点に関連づいた法線ベクトルのリストです。texcoords
: 頂点に関連づいたテクスチャ座標のリストです。 (オプション)faces
: 三角形を表す頂点インデックスのリストです。
例
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を用いて三角形メッシュを読み込みます。 複数のメッシュがファイルに含まれる場合、最初のものを使用します。 メッシュに関連づいたマテリアル情報は無視されます。
パラメータ
path
: モデルファイルへのパスを指定します。シーンファイルがあるディレクトリからの相対ディレクトリを指定します。
例
この例ではobjファイルを読み込みます。
シーンファイルと同じディレクトリにあるbunny.obj
を読み込みます。
mesh_bunny:
interface: trianglemesh
type: assimp
params:
path: bunny.obj
テクスチャ
2次元テクスチャを定義します。
テクスチャはオブジェクト表面に関連づいた情報を表します。
本アセットはほかのアセットから参照されて使用されます。
例えば、bsdf
インターフェースのアセットは
パラメータとしてテクスチャの参照を受け取ります。
ビットマップテクスチャ
インターフェース / 種類
texture
/ bitmap
説明
画像ファイルからテクスチャを読み込みます。
jpg
やpng
等のLDR (low dynamic range) 画像フォーマットや、
exr
やhdr
等のHDR (low dynamic range) 画像フォーマットをサポートします。
ファイルフォーマットはファイルの拡張子から自動的に判断されます。
パラメータ
path
: 画像ファイルへの相対パス
例
tex_kamen:
interface: texture
type: bitmap
params:
path: kamen.png
BSDF
BSDF は光の反射特性を表します。 物理ベースレンダリングにおいて、BSDFは物体表面のマテリアルを表現するために用いられます。 本フレームワークでは、diffuse, specular, glossyの3種カテゴリーからなるのBSDFを実装しています。
拡散反射 (Diffuse)
インターフェース / 種類
bsdf
/ diffuse
説明
理想的な拡散反射表面を表す、ランバート反射を実装したBSDFです。 拡散反射面は光を多数の方向に反射し、ラフな見た目の表面を表します。 特にランバート反射は光が入射した点のまわりの半球に等しく反射が起こると仮定します。 定式化のシンプルさからランバート反射はレンダリングでよく用いられます。
パラメータ
R
: 反射率。RGB色を表す3Dベクトル。TexR
: 反射率を表すテクスチャアセットへの参照。R
とTexR
の双方が指定されていた場合、TexR
が優先されます。- 直感的には、
R
やTex
は物体の「色」を表すと考えることができます。
例
この例では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)を実装します。
パラメータ
R
: 鏡面反射率
例
bsdf_S:
interface: bsdf
type: reflect_all
params:
R: 1 1 1
フレネル反射・屈折 (Flesnel)
インターフェース / 種類
bsdf
/ flesnel
説明
ガラスや水面を通して反射、屈折したシーンを見ることができます。 たとえば、プールの水面から水底を見ることができる一方で、 反射した周りのオブジェクトを見通すことができます。
このような現象はフレネル方程式によって記述することができます。 フレネル方程式によって別の屈折率をもつ媒質を通る光の反射、屈折の割合を記述することができます。 このBSDFでは絶縁体境界におけるフレネル方程式を用いました。
パラメータ
R
: 鏡面反射率eta1
: 入射側媒質の屈折率eta2
: 反射側媒質の屈折率
例
bsdf_S:
interface: bsdf
type: flesnel
params:
R: 1 1 1
eta1: 1
eta2: 1.5
Cook-torranceモデル
インターフェース / 種類
bsdf
/ cooktorrance
説明
光沢反射を表すモデルの一つであるCook-Torrance modelを実装します。 マイクロファセットの分布としてベックマン分布を用いました。 フレネル項として電導体に対するフレネル方程式を用いました。
パラメータ
R
: 鏡面反射率eta
: 屈折率k
: 吸収係数
例
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
説明
面光源は三角形メッシュに関連づいた光源を表します。 このアセットを用いることで、自己発光するオブジェクトを再現することができます。 関連させる三角形メッシュはこのアセットのパラメータではなく、 シーン定義で指定することに注意します。
パラメータ
Le
: 光源から発される放射輝度
例
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
説明
方向光源は一方向からくる光を再現します。 方向方向は無限遠に巨大な光源があると仮定することができます。 よって物体と光源までの距離が非常に遠い、太陽光などの現象を再現するのに使用することができます。
パラメータ
Le
: 光源から発される放射輝度direction
: 光の方向。 この方向はシーン定義中で指定されるトランスフォームによって回転させることができます。
例
light_directional:
interface: light
type: directional
params:
Le: 1 1 1
direction: -3 -1 -1
点光源 (Point light)
インターフェース / 種類
light
/ point
説明
点光源はシーン内の一点から発される光を再現します。 光源から発生した光は点からすべての方向に等しく照射されます。
パラメータ
Le
: 光源から発される放射輝度position
: シーン中の位置。 この位置はシーン定義中で指定されるトランスフォームによって移動させることができます。
例
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
)をサポートしています。
パラメータ
w
: 出力する画像の幅h
: 出力する画像の高さtype
: 出力画像の種類。 オプション:radiancehdr
: Radiance HDR (.hdr
) (デフォルト)openexr
: OpenEXR (.exr
)
例
film_1:
interface: film
type: hdr
params:
type: openexr
w: 500
h: 500
センサー
光源から照射され、シーンによって反射した光は
カメラ中のセンサーによって測定されます。
人間の目に当てはめると、網膜上の光受容細胞がセンサーの役割を果たします。
本アセットではカメラのセンサーや人間の目の網膜を再現します。
センサーは画像を記録するためにfilm
アセットへの参照が必要となります。
ピンホールカメラ
インターフェース / 種類
sensor
/ pinhole
説明
ピンホールカメラはレンズのない、有限の絞りを持たないシンプルなカメラモデルを実装します。 シーンで反射をした光は点(ピンホール)を通ってセンサープレーンに投影されます。 定式化のシンプルさから、ピンホールカメラはレンダリングにおいてしばしば用いられます。
パラメータ
We
: インポータンス (センサーの感度)fov
: 上下方向の視野角film
:film
アセットへの参照
例
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