アセットの種類


例画像

例画像

アセットとは簡単に言うとレンダリングシーンを構成する視点や光源やオブジェクト(例画像のウサギがそれに当たるよ)などを指します。またオブジェクトの材質が鏡面状のものなのか,diffuse(拡散反射)材質のものなのか等も決定できます。 この各種アセットを設定することで次章のシーンの作成時にそれぞれのアセットを好きな場所に配置して最終的なシーンを作ることができます。
イメージとしてはアセットでは画像のシーンを作る為のカメラやウサギちゃん、床やライトを作ってやって、次章のシーンを記述する際に作ったアセットを好きな配置にセッティングしてやるといった感じです。 アセットの種類はデフォルトで


センサー (sensor)

カメラ(視点)の機能を果たします。 種類は1つで

を選択することができます。 それではsensorアセットのコードを見てみましょう。

    sensor_1:
      interface: sensor
      type: pinhole
      params:
        We: 1 1 1
        fov: 45
        film: film_1
params以下の設定は

これだけでOKです簡単ですね。 後は次章のシーンの定義時に位置を決めてやるだけでカメラが作成されます。 filmについては次で紹介します。


フィルム (film)

filmは出力画像の形式とサイズを指定することができます。 出力画像の形式は

の4種類から選ぶことができます。
HDR形式である.exr又は.hdr形式で幅(w)高さ(h)500×500で出力したい時は

   film_1:
      interface: film
      type: hdr
      params:
        type: radiancehdr or openexr
        w: 500
        h: 500
といった形で書きます。 exr形式を用いたいときはparams以下のtypeopenexr, hdr形式を用いたい時はradiancehdrと記述します。

LDR形式である.png又は.jpg形式で出力したい時は

 film_1:
      interface: film
      type: ldr
      params:
        type: png or jpg
        w: 500
        h: 500
と書きます。 一つ目のtypehdrldrに成っている点に注意してください。

filmの指定はこれだけです。簡単ですね。


ライト(light)

読んで名のごとく光源のことを指します。 種類は

から選ぶことができます。 point(点光源)とは1個の電球のようなもので、
area面光源とは広がりがある面全体から光を発するような照明のことを指します。(テレビのディスプレイみたいなものを連想してもらえるとわかりやすいと思います。)
directional(指向性光源)とは一部の方向に強い光を発している光源のことを指します。イメージとしては傘付きのスタンドライトなんかを想像してもらえるとわかりやすいと思います。
environment(環境光源)は屋外の状況のように太陽(光源)の光が 至る所で物体などによって散乱されて普段光の届かないような部分にも明るさを与えるような光源のことを指します。
日常、外で生活している間は環境光の中で生活していると言えますね。

それではpoint(点光源)の方から見てみましょう。

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

 point(点光源)

point(点光源)

Leは光の強さを表します。 positionは点光源の場所を指定します。

次にarea(面光源)です。

    light_area:
      interface: light
      type: area
      params:
        Le: 1 1 1
 area(面光源)

area(面光源)

先ほど点光源にあったpositionが消えました。area(面光源)は面の形状になるので、その面を表すtrianglemeshを宣言する必要があります。(trianglemeshは次に説明します。)そのためここでは場所を記述する必要がありません。

次にdirectional(指向性光源)です。

light_directional:
      interface: light
      type: directional
      params:
        Le: 1 1 1
        direction: -3 -1 -1
 directional(指向性光源)

directional(指向性光源)

影のパターンが同じ方向に向かって伸びているのがわかりますね。 このように強い指向性の光を用いることができます。 方向はdirectionでx,y,z座標それぞれ記述します。


トライアングルメッシュ (trianglemesh)

trianglemeshはシーン中のオブジェクトの形状を決定する部分にあたります。 Lightmetricaでは

の2つから選ぶことができます。 rawモードを選択すると自分で位置座標を決定することでオブジェクトの形状を決定できます。 例えば面光源(真四角)の形状を作成したいとします。 すると

 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
というように書くことができます。

positionには四角形の各頂点の位置を記述します normalsにはその各頂点の法線情報を記述します texcoordsには facesは、四角形メッシュは実は三角形二つから構成しなくてはいけないので、最初のpositionsで指定した任意の頂点3つを記述してできた三角形二つを元に四角形を構成します。上例では0,1,2番目と0,2,3番目の三角形二つを用いて作成するように書かれています。 これを次章のシーンを作成時に、上で作成したarea_lightのと関連づけることで真四角の形状をした面光源が作成されます。

一方例えば、うさぎのようなオブジェクトを一から座標を指定したりして作成しようのは不可能のように感じますよね? そのような時にはもともとオブジェクトの形状(今の場合ウサギ)が記述されている.objファイルのようなものを取り込むことで簡単に作成できます。 その場合assimpモードを選択することで、

    mesh_bunny:
      interface: trianglemesh
      type: assimp
      params:
        path: bunny.obj
だけで例のようなうさぎ(mesh_bunny)の形状をもったオブジェクトを作成することができます。

ここで一つ注意です。世の中の物体は全てザラザラしたり、滑らかだったりキラキラしたり、材質を持っていますよね。それを定義しないとうさぎは完成しません。 その材質を定義するのが次のbsdfクラスになります。


bsdf (bsdf)

bsdfとは物体の材質のことを指します。 Lightmetricaでは

の5つを提供しています。

例えば、diffuse(拡散反射)を設定すると土や紙のようなざらざらとした光沢のない質感を出すことができます。 reflect_all(完全鏡面反射)を設定すると鏡のような完全に光を反射する反射材質の質感を出すことができます。 cook_trance(光沢反射)を設定するとプラスチックや荒い金属のような質感を出すことができます。 flesnelは屈折と反射両方の光伝搬計算を行います。見た目としては水や水晶のような見た目になります。 詳しくはwikipedia

 bsdf:
      interface: bsdf
      type: diffuse or reflect_all or cook_trance or refract_all or flesnel
      params:
      #Rは全bsdf共通項 diffuseとreflect_allはRだけでいいよ
        R: 1 1 1
      #以降下はcook_trance用のパラメータ
        eta: 0.140000 0.129000 0.158500
        k: 4.586250 3.348125 2.329375
        roughness: 0.1
      #以降下はrefract_allとflesnel用のパラメータ
        eta1: 1
        eta2: 2
といった形で記述します。

 左からcook_trance : diffuse: flesnel

左からcook_trance : diffuse: flesnel

typeで3つのうちから好きなbsdf名を入れるだけで選択できます。
params内のRでは色を選択することができます。
左からRGBで0~1の間の好きな値を指定できます。
またcook_trance選択時にはetakを調整することで屈折率を表します。
roughnessで表面の荒さを設定できます(範囲は0~1)  
refract_allflesneleta1eta2を記述します。これはeta1が外側の屈折率、eta2が内側の屈折率を表します。
これを次章のシーンを定義する際にtrianglemeshアセットと関連づけることで、オブジェクトに質感を与えてあげることができます。


テクスチャ (texture)

textureとは壁紙ようなものをイメージしてください。
真っ白な壁紙があったとして、何か模様付けしたいと思うと解決方法は簡単な話で、そこらへんのホームセンターに行って壁紙を買ってきて貼り付けるだけですよね。
それと同じことをします。
例えば、例のうさぎちゃんが真っ白な姿では物足りない。
何か模様のついたお洋服をつけたいと思ったとします。(思いますよね?うさぎは真っ白が普通ですが思いますよね??)
そんなときにtextureの出番です。

   tex_oyouhuku:
      interface: texture
      type: bitmap
      params:
        path: oyouhuku.png
はい。これでお洋服の完成です。

あとは、このお洋服にも質感(bsdf)を与えることを忘れずに。

oyouhuku:
      interface: bsdf
      type: diffuse
      params:
        TexR: tex_oyouhuku
といったように、bsdfの時に色を指定していたRの代わりにtexRと記述して、先ほど作成したテクスチャtex_oyouhukuを記述してやれば、tex_oyouhuku模様のdiffuse(拡散反射)bsdfが作成されました。

あとは次章のシーンの定義時にtrianglemeshのところで作ったmesh_bunnyと今作ったoyouhukuを関連づけするだけでうさぎちゃんがお洋服を着ちゃった画像を作成できます。

textureを貼り付けたウサギちゃん(あれ???)

textureを貼り付けたウサギちゃん(あれ???)

言いたいことはよくわかります。「明らかにウサギちゃんではない何か他の動物じゃないか!嘘ついたな!」そう思いますよね。そうですこれはクマです。 ウサギちゃんに服は着せれませんでした。
というのもウサギちゃんのobjファイルでテクスチャ座標が書かれたものを見つけることができませんでした。このように、objファイルにテクスチャ座標が書かれたものでないとtexturetrianglemeshに貼りつけることができないので注意してください。 と言うのをいいたかったのでクマにしたんですよ。


これでassetの作成チュートリアルはおしまいです。 それでは次章のシーンファイルを書いてみよう!で最後の仕上げをしましょう。


シーンファイルを書いてみよう!へ