Lightflowで扱えるInterface

Light

内容

default

レンダリング全般に関する設定を行う

surface-engine
 複雑な幾何学計算を必要とするデータを扱う場合, レンダリング効率をあげる制御データ。

volumetric-engine
 ボリュームレンダリング効率をあげる制御データ。

  Interfaceに関する記述は、別になくてもレンダリングできますが、細かい設定(影やPUSの数など)を行いたいときに指定するもののようです。
  radiosityに関する指定(※)は、ほとんどここでしかできません。 

  ● "radiosity-depth", int diffuse, int specular
            ・・・・radiosityレイトレースの深さ
 
 ● "radiosity-sampling", string type
            ・・・・サンプリングのタイプ

  ● "radiosity-samples", int samples
             ・・・・ステップ数
  
● "radiosity-threshold", float threshold
             ・・・・精度誤差


  詳細はClassドキュメント&Exampleを御参照ください。



Lightflowで扱えるライトの種類

Light

内容

ambient

環境光

conic

円錐型(スポットライト)

directional

並行光源(太陽など)

directional-patch

1つの法線の方向のみ照射する面光源(窓など)

patch

すべての方向に放射する面光源

point

点光源

soft

柔らかい影(zbuffershadow)を作る点光源

soft-conic

柔らかい影を作るスポットライト

soft-directional

柔らかい影を作る並行光源


 Lightflow
のレンダリングは、基本がRay-tracingです。Radiosityも可能で、光子量や精度誤差なども設定できます。
  
  ※光の収差を表現する場合は、スクリプト内に
      s.radiosity()
   の記述を入れ、interfaceで設定を行います。詳細はEXampleデータを参照の事。

 soft系のライトは、影が柔らかく(zbuffershadow)、比較的レンダリング速度は速くなります(・・・とclassドキュメントには書いてありますが、遅くなってるような?)。ただし透過光などは苦手。

※補足・・・・soft系のlightの記述について、hyonさんから「soft系のlightのレンダリングが比較的速いというのは、ソフトシャドウを作りたいならpatchより速い、という意味では?(patchは正確なソフトシャドウを作りますが、レンダリングにえらく時間がかかるようなので)」という御指摘を頂きました。 


Lightflowで扱えるオブジェクト

OBJECT

blob

boundary

box

b-spline

cone

cylinder

disc

hfield

gsurface

mesh

NURBS

patch

solid

sphere

surface-engine

triangle

内容

メタボール

複数のオブジェクトをひとつにまとめる

立方体

bsplineパッチ。surface-engineを使用

円錐

シリンダー(筒)

円盤

高さ情報のみの正方形パッチ

※2.0以降のバージョンでは存在無し

ポリゴンメッシュ

NURBSパッチ。surface-engineを使用

四点からなるパッチ(正方形とは限らない)

CSG。プール演算時に使用。

レンダリング計算効率をあげるための特別なオブジェ。

三角形


 
球や箱などのプリミティブな形状以外のものは、必要に応じて適宜、他のCGソフトでモデリングしたオブジェクト(ポリゴンメッシュモデル、b-splineパッチモデル、NURBSパッチモデル)などを読み込んで使います。
  ちなみにLightflowには、ポリゴンメッシュのみに限り、外部ファイル(.lfm形式)から読み込む機能があるので、スクリプトの記述に関しては、ポリゴンメッシュが、一番スマートではあると思います。

  またb-spline、NURBSなどのオブジェを取り込む場は
surface-engineを適用する事で、レンダリング効率をあげることができます。
  ※ボリューメトリックエフェクトや、displacement関係でも有効。


Lightflowで扱えるマテリアルの種類

Light

内容

blend

複数のマテリアルを、設定に応じてブレンド。

cartoon

セルシェーダー。

diffuse

乱反射のみの単純なマテリアル。

general

基本、汎用的なマテリアル。

geomview

複雑なひびなどの変形を行う。
(displacementとbumpでのみ設定可能)

matte

ライトの影響を受けない(フラットシェード)。

physical

generalより忠実に、物理計算を行う。

standard

標準的なアトリビュートを持つ。

transparent

透過設定用(Interior用マテリアル)



Material namegenericstandardphysicaldiffusematte
環境光 ka ka ka ka kc
拡散反射光 kdr kc×kd kr×kd kr -
拡散透過光 kdt×kt kt×kd kt×kd - -
スペキュラー反射光 ksr kc×(1-kd) kr×(1-kd) - -
スペキュラー透過光 kst×kt kt×(1-kd) kt×(1-kd) - -
レイトレース反射光 kr kr kr×(1-kd) - -
レイトレース透過光 kt kt×(1-kd) kt×(1-kd) - -
スペキュラーの滑らかさ - -
スペキュラーの強さ - - -
曇り(blur) - -
屈折率 - -
フレスネルの効果 - -
輝き(shinyness) - -
ラジオシティのon/off - -
擬似コースティクス - -
コースティクス - -
影の濃さ(transmission)
visibilityの設定
trace-depthの設定 - - - -
glitterの効果 -


Lightflowで扱えるボリュームレンダリング

Interior

内容

cloud

dust

塵&ほこり

emit

ガス、炎など

fog

霧(フォグ)

glow

発光している物体

halo

ハロー効果

Hyper

Hyper Texture surfaceの融合

standard

透明感のある物体(水・ガラスなど)



ボリュームレンダリング(cloud)■ 雲(INTERIORs)の表現  ■

 ボリューメトリックのcloudに関する設定項目は、色・密度・放出量・減少量などです。
設定項目の多く(密度など)には、他のマテリアルやインテリア同様、数値以外にも、任意でパターンを割り当て&組み合わせができます。
 また放出エリア指定は、boxや球以外にもポリゴンメッシュとかも可能なので、全体的には、かなり細かく設定を行う事ができます。  もちろん、ライトの影響もちゃんと受けます(^^)

※上の画像は、付属のcloud.pyを少し変更したものです。
 2つのパターン(graniteとradial)を組み合わせ(compose)インテリアのcloudに適用し、放出エリア指定をboxにして、マットなマテリアルの球(半径1000)の中に入れてレンダリング・・・という感じです。



<設定項目>

"kaf", float | vector3 kaf

 減少の要因(度合い)。この値が大きいと、薄くなります。

"ke", vector3 | pattern ke

  粒子の放出量。この値が大きいと、濃くなります。

"kr", vector3 | pattern kr

  反射率を指定します。

"density", float | pattern density

  密度を指定します。 ここがデフォルトだと、非常に均等でプリミティブな感じになってしまうので、雲を表現する場合は、なんらかのパターンを組み合わせたものを指定するのが望ましいと思います。

左はradial(放射状)のみを適用。
右はgranite(かこう岩状)のみを適用。

 これだけだと、少し不自然な感じですね。この2つを組み合わせると、付属のcloud.pyのようになります。

"sampling", float sampling,
int supersampling = 6, float threshold = 0.1

 サンプリングの正確さを指定します。

"shadow-caching",
vector3 b1, vector3 b2

  影の計算時に使う、キャッシュの量を指定・・だと思います(^^;) 各環境に応じて、適正な値を設定すれば、レンダリング時間の短縮を測れるようですが、メモリ関連の項目はまだよくわかりません。

"density-caching", int memorysize, vector3 b1, vector3 b2

  密度の計算の時に使う、キャッシュの量を指定・・だと思います(^^;) う〜む?
デフォルトで、レンダリング速度に不都合を感じて無ければ、設定する必要はないと思います。





<その他>

どういうオブジェクトに適用するか?

  放出エリア指定に使えるオブジェクトは、boxや球などオーソドックスな形のもの以外にも、ポリゴンメッシュモデルなども可能です。 試していませんが、たぶんB-splineモデルとかでもできると思います。
 「空に漂う雲」などでなく、ある程度、任意の範囲に雲を配置したい場合は、使えそうですね。


●左はメタボールをポリゴン化したモデル。
●右はそれに、interior(cloud)を割り当てた例です。

 

 ※cloud自体の設定値より、オブジェクトが小さい場合は、当然、境界ははっきりします。
  また、オブジェクトの大きさに応じてcloudの密度も変わるようなので(?)、cloud自体の設定以外にもオブジェクトの設定も大切なようです。 このへんは難しいですね。





ボリュームレンダリング(smoke)

※付属のSMOKE.PYをレンダリングしたものです。



<Patternの設定項目・・・位置・数量・動き関係の設定項目>

"value", float value

  煙の値を指定します。数値に比例して粒子の量が増えます。 デフォルト(省略時の)値は1,0。 

"color", vector3 color

 煙の色を指定する(だと思います) 。 デフォルトの値は(1,1,1)。
 ※SMOKE.PYのように、Interiorのcloudに割り付けている場合は、Interiorでの色情報が適用され  るので、ここは設定する必要はないです。

"depth", float depth

  煙の深さを指定します。 デフォルトの値は0,1。

"source", vector3 source

  煙のソース(発生源)の位置を指定します。 省略時の値は(0,0,0)。

"dispersion", float dispersion

 煙のコラムの散らばりの要因を指定 します。デフォルトの値は0,05。

<実験例>
左から
●"value",5.0
●"value",5.0、&
 "depth",5.5
"dispersion",1.5
●kr(1.5,0.5,0.5)

"speed", float speed

煙のコラムの縦方向(上昇する)の速度を指定します 。 デフォルト(省略時)の値は3,0。

"swirling", float radius,
float r-speed, float v-speed

 煙の螺旋形の詳細を指定します。 radiusは螺旋体の半径, r-speedは回転速度を指定し, v-speedは縦の速度 を指定します。 ディフォルト値は 0,18,2*PI,1,。



<Patternの設定項目・・・時間関係の設定項目>

"start", float start, float end

 煙がソースから排出され始まるフレームを指定します。 startが開始の瞬間 、endがピークに達した瞬間(だと思います)。 デフォルトの値はそろぞれ0.0、0.3。

"end", float start, float end

 煙がソースから排出され終わるフレームを指定します。 startがピークの瞬間(排出ストップし始める瞬間) 、endが排出され終わる瞬間を指定。 だからendから後、数フレーム間(最後に排出された粒子が大気中に拡散するまでの間)は、まだ煙が見える事になります。 デフォルトの値はそろぞれ0.7、1.0。

"time", float time

 レンダリングされるフレーム。現在の時間ですね。 デフォルトの値は0.5。
ここの経過時間を変えるだけでも、こんな感じ(※)で簡単なアニメーションを作成する事ができます。
※010から111までのフレームを指定し、手動でレンダリング、30フレーム/秒でムービーにしています。

 本当に煙らしくするには、他の項目(ゆらぎやスピードなど)も細かく変化させる必要があるので、フォースや重力の概念がないLightflowの場合は(エリアの指定はできます)、手動で設定する事になり・・・
かなりしんどいかも(^^;) 



<Patternの設定項目・・・煙の形状の設定項目>

shape
  "shape", float radius, float thickness, float border

  煙のコラムの形を指定します。 ちなみにコラムは、筒(empy tube?)状の形をしています。
radiusは筒の半径、thicknessは密度の最も高い部分の範囲、borderは境界(煙のある部分とない部分の)の範囲・・
だと思います。 下の図を参照ください(^^;) デフォルトの値はそれぞれ、0.11, 0.03, 0.0。
radius(0.5) 太い! thickness(0.9)濃い! border(0.5) ぼやぼや?



<Patternの設定項目・・・turbulence関係の定項目>
※turbulence = ゆらぎ・乱れ・乱気流の意味。

"turbulence.amount", float amount

  乱れの量を指定します。  デフォルトの値は0,1。 

"turbulence.frequency", float freq
 乱れの頻度を指定します。  デフォルトの値は1,0。

"turbulence.omega", float omega

 乱れのフラクタル次元を指定します(?)。  デフォルトの値は0,5。

"turbulence.lambda", float lambda

 乱れの各スケール間の周波数の 変更を指定します(?)。 乱れは別の頻度の騒音の層の総計に よって得られます。 この値は次の1つを得なるために各層に適用なされる頻度のスケールを表現します(?)。 デフォルトの値は2,0。 (1.0以上の値を設定すること)



 ちなみに、ボリュームオブジェクト(この場合は煙の部分ですね)は、αマップとして描かれません。一番上の画像のαチャンネルだけを取り出すと、こんな感じになります。




Lightflowのレンダリングにおける処理

Imager

内容

dof

カメラの被写界深度(depth of field)。

film

フィルムの粒子の設定(フィルムグイン)。

gitter

gitterを設定したsurfaceを光らせる。

halo

ライトをハロー付きで視覚化(レンズフレア)。

saver

Lightflow Texture Format(lft)の出力像を保存。

tga-saver

TARGAフォーマット(tga) での
出力像を保存する。

┏━━━━━━━━━━━━━━━━━━━━━━━━━┓
 おおまかに分けると
  レンダリング時における視覚的処理(dof,film,gitter,halo)と
 出力に関する設定項目(saver.tga-saver)に分かれます。
  ※αチャンネルつき画像で出力する時は、以下を記述。

        "alpha", int switch
  <例>saver = s.newimage("tga-saver",["file","name.tga"),"alpha,1"])

   1だとあり、0だとなし。 省略時(デフォルト)の値は1なので、   ふつうは、αチャンネルつきのTGA画像が出力されます。 

  ※デプスバッファつき画像で出力する時は、以下を記述。
        string "depth", int switch, string filename
┗━━━━━━━━━━━━━━━━━━━━━━━━━━┛



Lightflowでの テクスチャとパターン

※classドキュメントの記述からの想像のみで、実際に試していない
項目もありますので、間違っているかもしれない部分もあります。
?のついているものは、よくわかりません(>_<)
┏━━━━━━━━━━━━━━━━━━━━━━━━━┓
 
基本は、パターンを設定しそれをマテリアルに内包して、
オブジェクトに割り当てる・・・
という 感じで使います。"map"で行います。
 サポートしているテクスチャの形式は「.lft形式」「.tga形式(24bit)」の2種類。 マッピングについては
こちらへ。
┗━━━━━━━━━━━━━━━━━━━━━━━━━━┛


パターンの働きは「オブジェクトの見た目をどう装飾するか?」という事なわけですが、大きく分けて3つタイプがあるようです。
  ●surfaceパターン(実際の形状は変化しない。bumpなど
  ●displacementパターン(実際の形状も変化する)
  ●volumetricパターン(実際の形状も変化する)

 ※「複数のパターンの合成」タイプのうち、mod,mul,not,subの違いはフォトショップのレイヤーの合成(乗算とか差の絶対値)の違いみたいなものだと思います。

Patterns

内容

add

2つのパターンの追加を行う。

agate

瑪瑙(めのう)状の模様を設定に応じて生成。

angular

乱流状のパターン(z軸回転)。

blend

複数のパターンを設定に従ってブレンド。

blob

球状の塊っぽい質感を設定に応じて生成。

blotches

しみ状の模様を設定に応じて生成。

bubbles

泡状の質感を設定に応じて生成。

bump

バンプ生成。

check

チェック生成。

compose

?2つのpatternの合成法の1種みたいです

cracle

?石の設定のひとつみたいです

cracle-uv

racleのsurfaceパターンバージョン。

dents

凹んだようなパターンを生成。

directional
-displacement

 ?方向変位パターン(形状の形に応じて変化する) を生成。BRICEについてあるものみたいな?

directional
-ellipse

?directional-displacementの軸線2つバージョン 軸線が3つになるとdirectional-ellipsoid。

displacement

ディスプレースメント。

div

2つのパターンを分ける。

envmap

環境マッピング(球状&表面のみ)

envcube

環境マッピング(立方体&)

gradient

グラデーション生成。

grantie

花コウ岩のようなパターンを生成。

greater-than

?2つのパターンの条件ステートメントを計算 する。

identity

?識別。 入力をもどす

liner-u

U方向にのびる線状勾配を生成。

liner-v

v方向にのびる線状勾配を生成。

liner-z

ローカルz軸方向にのびる線状勾配を生成。

less-than

map

テクスチャマッピング(カラー)。

mix

複数のパターンを混合。

marble

大理石状のパターンを生成。

mod

2つのパターンの合成。

mul

not

multifractal

フラクタルパターン作成。

multifractal
-3d

フラクタルパターン作成
(displacementのみ)。

multifractal
-RGB

フラクタルパターン作成。

pits

ランダムに凹んだパターンを生成。

oldwood

古い木目のような波形パターンを生成。

projection

プロジェクションマップ。

radial

放射状に広がる線形上を生成。

scales

ヘビのウロコのような表面を生成。

shingles

鉄片を生成。

smoke

煙を生成。

sub

threads

ネジ筋のような凸凹を生成。

tint

均一な色合い。

wood

単純な木目パターン。