第3節 言語構成要素の記述(Description language components)

このセクションでは、2.3に記載したシーンを記述する全ての文字列について説明します。
説明は文字列に分類に重きをおいているので、順番どおりではありません。

1) 定義(Definitions)
2) 実行時(関数)変数(Run-time (functional) variables)
3) タイミング(Timing)
4) オプション(Options)
5) 一般(General)
6) カメラ(Camera)
7) 光源(Light sources)
8) 幾何学図形(Geometry)
9) シェイプ修飾(Shape modifiers)
10) パーティクルシステム(Particle system)
11) 組込関数(Built-in functions)
12) シェイプ、シェーダとエリアライト変形修飾(Shape, Shader and Area Light transformation modifiers)
13) シェーダ(Shader)

多くの事例では、それぞれのVirtuaLightインターフェイスのは例で記述されます。
同じように、指令あるいは関数の式のタイプを記述します。

int 整数
float 浮動小数点の値または式
point 空間位置を表現する (x,y,z) の浮動小数点3点
vector ベクトル方向または速度を表現する (x,y,x) の浮動小数点3点
rgb 色を表現する 'r,g,b' の浮動小数点3点
rgbexpr 色を表現する 'r,g,b' 式
string "string" 形式の文字列

NOTE:

インタフェースの多くの指令のために、レンダラはシーン解析の前に予め定義された値を使用します。
次に述べる説明で、デフォルト値が指令のために存在するとき、それは指令の次の角カッコ [ ] の間に書き込まれます。
換言すれば、もしオプションの指令が入力ファイルで与えられるなら、レンダラはその引数の値を使うでしょう。
もしそうでなければ、デフォルト値を使用します。

e.g. AdaptiveThreshold float [0.0005]


3.1 定義(Definitions)


定義と名付けられたものを使用する能力はVirtuaLight インタフェースの一部です。
定義はいくつかの形式をとることが可能です。
基本的にはどのような式も、シェイプ、ソリッド、パーティクルシステム、変形、サーフェイスあるいはシェーダを定義可能です。
これはエンティティと呼ばれます。
いくつかのタイプのエンティティが同じ名前を参照するのは不可能です。
もし名前が一度以上定義されるなら、その名前に対する全ての参照は最後の定義へのポイントを使用するでしょう。


3.1.1 宣言(Declare)


このリクエストはいくつかのエンティティを定義する最も一般的な方法です。
宣言は次の形式の1つをとることが可能です:

Declare name = expression
Declare name = Shape [ ... ]
Declare name = Solid [ ... ]
Declare name = ParticleGenerator [ ... ]
Declare name = any transformation directive
Declare name = PlainSurface || PatternSurface || FunctionalSurface [ ... ]
Declare name = Shader [ ... ]
e.g.
Declare cube = Shape [ Box ((-1, -1, -1), (1, 1, 1)) ]

宣言された幾何学上プリミティブを使うふたつの方法、シェーダあるいはサーフェイス、があります。

1)名前単独で指定することで、そのままでインスタンスを作成出来ます。
(それはちょうどひとつを定義したのと同じ)

e.g.
cube

2)あるいはそれはインスタンスを作成できて、フォームで修正できます。

name [ modifiers ]
e.g.
cube [ Rotate(0, -45, 0) ]


3.1.2 スタティック(static)


このリクエストはスタティックなエンティティを定義可能です。
それは Declare のようにいくつかの形式を持つ事が可能です。

static name = expression
static name = Shape [ ... ]
static name = Solid [ ... ]
static name = ParticleGenerator [ ... ]
static name = any transformation directive
static name = PlainSurface || PatternSurface || FunctionalSurface [ ... ]
static name = Shader [ ... ]

スタティックの定義はアニメーションでもまたとても有用です、なぜならそれらはシーケンスの最初のフレームでただ一度だけ解析されるからです。
これはふたつの理由から興味深い事です。
-それらは全てのアニメーションの間、同じ値に保たれます。
-解析ステージで多くの処理時間が掛かる重いエンティティ(シェイプ、ソリッド etc.)がスタティック定義が可能なら、それらは最初のフレームのみで処理され、その後の各フレームでは簡単にインスタンスが作成可能です。
もちろん、スタティックエンティティはアニメーションで最初のフレームから使用可能です。

NOTE:

シェーダが割当てたスタティックシェイプあるいはソリッドはそれ自身がスタティックでなければならないことを、忘れない事は重要です。
この詳述に従わないことは、避けられないエラー(ある場合のinternal failure)を引き起こさせるでしょう。
これはバグ(プログラムのミス)ではありません、それはターミノロジーの一部です。


3.1.3 new


このリクエストは、アニメーションで使用する、式の定義の特殊なかたちです。
単に式の結果を適当な変数に格納するだけのDeclareとは反対に、newの格納は
解析時間を節約するために、いつも全ての式を評価することはありません。
それは、式はそれぞれのフレームごとに再評価されるだろうことを意味します、そしてそれが時間値に基づいて式の正確な値を見いだす最も良い方法です。
シンタックスは:

new var_name = expression

もし VIB 入力ファイルがアニメーションを記述しないなら、この種類の式の定義を使う必要はありません。
同じ様に、時間あるいはパーティクルシステムとの関係のない変数で、このリクエストを使用しなければならないことはまれです。
しかしそれは、特にもし変数がパーティクルシステムで使用されるなら、時間値に基づいて変数を定義するために非常に推奨されます。

e.g.
static start=0
static end=100
static len=(end-start)
Sequence [ FirstFrame start AnimationLength len ]
new cT = (CurrentFrame - start) / len

Sequenceと CurrentFrame について説明はセクション3.3を参照。


3.1.4 let


このリクエストは基本的に以前に定義された変数をオーバロードするために使用されます。
シンタックス:
let var_name = expression
e.g.
Declare t = sawtooth(x)
Declare k = 0.0
...
...
if (t < 0.5)
     let k = k + t
else
    let k = (k + t) / 2.0


3.2 Run-time variable


VirtuaLightインタフェイスはレンダリングステージの間に幾つかのキーとなる関数変数へのアクセスを許可します。
これらの予約された変数はリードオンリーと考えられます。
それらの大部分は光線とサーフェイスの相互作用に関する情報を与えます、それらは進歩したカスタムシェーダを作成するために非常に有用です。


VLight

I - 光線入射方向(View位置から-サーフェイスの-交点位置)
N - P位置のサーフェイスシェーディング法線(ワールド座標)
P - 交点(ワールド座標)
Po - 交点(オブジェクト座標)
x,y,z - 交点の要素x,y,z(オブジェクト座標)
Puv - 交点(u/v座標)
u,v,w - 交点のuvw座標要素(サーフェイスパラメータ)
Color - 交点のカレント関数サーフェイス色
Opacity - 交点のカレント関数サーフェイス不透明度
E - カメラ位置


CurrentFrame - レンダリング中のカレントフレーム番号
FirstFrame - シーケンスの最初フレーム番号
LastFrame - シーケンスの最後のフレーム番号
AnimationLenght - シーケンスの長さ(フレーム数)


Age - パーティクルの世代
(*) P - パーティクルの位置
(*) x,y,z - パーティクルのを表す点の要素
V - パーティクルの速度

パーティクルシステムジェネレータ(3.10)内のとき、そのシンボル(*)は、その値がその記述のみに対応する変数から読み込まれたことを意味します。

上記のテーブルには3種類の座標が指定されています。

-オブジェクト(object)座標
カレントの幾何学図形プリミティブがもともと定義されたローカルな座標系
変形修飾(回転-Rotate,移動-Translate etc.)はオブジェクト座標からワールド座標に変換します。

-ワールド(world)座標
標準的な参照座標系(このシステムからのオブジェクトの全ての点がシーン空間内でのリールロケーションに対応する)

-u/v
特定の幾何学図形プリミティブをそのまま表す点の座標系(e.g. 球の緯度、経度)。
これらの変数はおのおのの形のタイプのための特有のものです。
基本的に、uは形の周囲で0.0から1.0まで変化するにつれて、vは形の下部から上部まで0.0から1.0まで変化します。


3.3 アニメーションタイミング


このカテゴリーはアニメーションタイミングとの関係で指令を再編成します。
レンダラでアニメーションを作成する2つの方法が存在します。

最初のは、アニメーションシーケンスの各々のユニークなフレームを描く、幾つかのVIB入力ファイルを作成することです。
どのような3Dプログラムやコンバータでも、VIB/VSフォーマットでそれらのファイルに書き出せる、シーンの記述を出力する事が可能です。
バッチ処理は、おのおののイメージをひとつひとつ処理する毎にレンダラをコールして使用することができます。(あるいは単に *.vib と指定する)

2番目が、ユニークなVIB入力ファイルの、インターフェイスによって提供された数学関数を使った手続き上のアニメーションの記述によるものです。
その時レンダラは、入力ファイルから番号が割り振られたフレームのシーケンスを作成しなければならない事を知るでしょう。

最初のケースでは、Sequence構造を使用することができません、なぜならレンダらはこれらのVIBファイルが実際はアニメーションを作成すると知ることはできないからです。
それはそれぞれがひとつの異なったファイルであるとして処理されるでしょう。

しかし2番目のケースでは、アニメーションは調整されなければなりません。
VIB入力ファイルで、Sequence構造の存在がアニメーションを有効にします。
シンタックス:

Sequence [
  FirstFrame int first
  AnimationLength int length
  LastFrame int last
]

FirstFrame

シーケンスのレンダリングされる最初のフレームの番号を指定する。

AnimationLength

シーケンスのフレーム数の合計を指定する。

LastFrame

シーケンスのレンダリングされる最後のフレーム番号を指定します。
もし AnimationLength がすでに指定されているなら、この指令は必要ではありません。
( LastFrame = FirstFrame + AnimationLength )

なぜならこれらの指令は自身が関数変数と同等のもを持つので、算術式で使う事ができるのと同様に、カレント値はシーケンスのどの瞬間でも利用可能だからです。
あるフレームから他のフレームへの変更を作成するために、
どのアニメーションのための計算もCurrentFrame値に基ずくべきです。
なぜならこれがレンダラにより自動的に増加させる唯一のものであるからです。

e.g.
Sequence [ FirstFrame 0 AnimationLength 50 ]
new i = CurrentFrame / (AnimationLength - 1)
...
Declare phase = 2.0 * PI * i
...
Declare sy = v * cos(u+phase)
...


3.4 オプション


オプション構造は全般的なパラメータを設定したり有効したり、モンテカルロ照射、フォトンマッピング、アンチエイリアシング etc.のような特別なレンダリング機能で使用するため内部値の設定を可能にします。
この構造体のなかの全ての指令はオプションです。

Options [
  AdaptiveThreshold float threshold
  AdaptiveDepth int depth
  ShadowBias float bias

  BitsPerPixel int bpp
  OutputTo string namefile
  ZChannelDepth int depth

  GammaCorrection (float dg, float g)

  SunGlow float sg

  IrradianceBlendingArea float radius

  IrradianceBounceLevel int level
  IrradianceMaxDistancePixel float dist

  IrradianceMaxError float maxerror
  IrradianceSamples int samples
  IrradianceDistribution int method
  IrradiancePhotons (int samples, int max)
  LoadIrradianceCache
  SaveIrradianceCache
  or
  SaveIrradianceCache string namefile

  LoadPhotonMap
  SavePhotonMap
  or
  SavePhotonMap string namefile
  PhotonsAccelerator (float Caustics, float Media, float Irradiance)
  PhotonsGatherRange (int min, int max)

  MaxRayLevel int maxlevel
  MaxBlurLevel int level
  MaxBlurSample int sample

  ParallelSunRays

  SunLightRotation vector rotation

  SoftShadowSamples int samples

  HenyeyGreenstein float eccentricity
]


AdaptiveThreshold float [0.0005]

RGB立方体空間のあるピクセルとその隣の間の、アンチエイリアシングステージを適応させる最小限の許容した距離をコントロールします。
もし距離がこの引数よりカレントピクセルの方が大きいのを見つけたら、その時はオーバサンプリングを適応させるそのピクセルの平均された色を決定するための命令が、実行されるでしょう。
値が短い場合は、レンダリングはより長く掛かるでしょう、なぜならこの値はアンチエイリアシングの適応のパフォーマンスに直接影響するからです。
アンチエイリアシングについてより知りたい場合は、セクション3.6を参照してください。

Note:
デフォルト値は大部分のケースに必要なだけ充分にあるべきです。

e.g.
Options [ AdaptiveThreshold 0.0004 ]


AdaptiveDepth int [1]

新しい適応性のあるアンチエイリアシングの方法は、バージョン 1,1 から装備されました。
それは以前のバージョンのインターフェイスよりより速くそしてレンダリング品質をより良くします。
AdaptiveDepth  はアルゴリズムの適用できる奥行きレベルを設定します。
4つのレベルが指定可能で:1,2,3そして4です。デフォルトではそれは 1で、大部分のケースではそれで十分でしょう。
3あるは4のような値はレンダリングが意味ありげに遅くします。
古い指令である AdaptiveThreshold は、今ではメインのアンチエイリアシングでは使用してはいけません。
しかし、その適応するレベルの細分化が与えられた時には、ローカルなフラットエリアライトのアンチエイリアシングではまだ使用します。


ShadowBias float [0.001]

影がどれくらい光源からオフセットするかをコントロールします。
影を置く位置が見えない場所である場合やレンダラが複合のシェイプで正しく影を決定するのが困難な場合などの状況を除いては、一般にはデフォルト値は捨てるべきです。
それは時々第4のサーフェイス、特定のNURBSパッチや一部の微妙なサーフェイスの回転、の時に起こります。
その結果はサーフェイス上の黒点になります。
これはアルゴリズム上で避けられない数値の不正確さのためです。

e.g.
Options [ ShadowBias 0.01 ]


BitsPerPixel int [24]

出力イメージでピクセル毎のビットの数を設定します。
これは24(RGB)あるいは32(RGB+A)です。


OutputTo string

出力イメージあるいは出力シーケンスイメージの名前セットします。
拡張子は必要ありません。
アニメーションの場合には、この文字列は主な名前として使用されるでしょう。
レンダラは別個のファイルを作成するために、この文字列に順番にフレーム番号(4桁)を付け加えます。
Note:コマンドラインからのオプション -o はこのオプションをオーバライドします。

e.g.
Options [ OutputTo “flyby” ]


ZChannelDepth depth

Zチャネルのダンプを有効にし、そしてディスクに書き込むフォーマットのタイプを設定します。
パラメータ depth は次の値の5つの内のひとつを採る事が可能です。

8 - チャネルをグレイスケール 8 ビット Targa イメージでダンプします(拡張子 .Z8.tga)。
16 - チャネルを 16 ビット Targa イメージでダンプします(拡張子 .Z16.tga)。
24 - チャネルを 24 ビット Targa イメージでダンプします(拡張子 .Z24.tga)。
32 - チャネルを 32 ビット Targa イメージでダンプします(拡張子 .Z32.tga)。
64 - チャネルを 64 ビット浮動小数点バイナリイメージでダンプします(拡張子 .Z64.vlight)。

Note: コマンドラインからのオプション -z はこのオプションをオーバライドします。

e.g.
Options [ ZChannelDepth 8 ]


GammaCorrection (float, float)

ガンマコレクションは、もしコンピュータスクリーンにイメージを正確に表示することに少しでも興味があるなら、重要です。
このコレクションはイメージの全体の輝度をコントロールします。
適切に調整されていないイメージは白っぽく見えるか暗すぎるかのどちらかでしょう。
色を正確に再現しようとすることはガンマについての知識も必要とします。
ガンマコレクションの量を変化させることは輝度だけではなく、赤と緑と青の比率も変えることです。
この指令を使用することはガンマコレクションを有効にします。
デフォルトではそれは無効です。
最初の引数はガンマコレクションを設定します。
もし 2番目が0より大きいなら、それはディスプレイのガンマ(モニタ)を設定します。
たいていのモニタは1.8から2.6の範囲の固定のガンマ値を持っています。

e.g.
Options [ GammaCorrection(1.8, 2.2) ]


SunGlow float

sunglow 効果のスケールを設定します。
このオプションはレンダリング処理(Section3.7.5)でSkyLightとSunLightが使用されているときに意味を持ちます。
このサイズは、太陽とカメラ位置に関しての距離に依存しています。
そして、これは絶対値ではありません。
デフォルトでは、このスケーリング量は仮想の空を表現する半球の1/4と同じです。
そして、多くのケースでは、glowを手動で決定する必要はありません。

e.g.
Options [ SunGlow 0.5 ]


SunLightRotation vector

x,yそしてz軸に関してる太陽の位置を回転させます。回転の量は各軸に対し度で指定されます。SkyLightとSunLightがレンダリングプロセス(セクション 3.7.5)で使用される時にのみ、このオプションは意味を持っています。


ParallelSunRays

デフォルトでは、VLightの太陽は球状の放射線を放射する巨大なエリアライトのように見えます。
この特徴は(太陽のソフトシャドウが有効である時)ある面白い影の働きを与えますが、現実的であるには遠すぎます。
ParallelSunRaysは太陽の位置から並列の光線を放射することをレンダラに強いることを可能にします(全ての影にシャープなエッジを与える)。

注.強烈な太陽(
glowing sun)は parallel sun rays で利用可能ではありません。


IrradianceBlendingArea float [0.85]

新しい補間挿入値を作成するために評価する、―カレントの交点周辺の位置する―混合領域の最小半径を設定します。
このエリアの最終半径はIrradianceMaxErrorに依存して変化するでしょう。指定されたIrradianceMaxError 内でフィットした、その領域内で見つかった全ての以前の値は、irradiance 値を決定するために寄与するでしょう。
より大きな値はより正確な結果になりますが、より長いレンダリング時間を必要とします。リクエストされる値は0.1と2.0の間に含まれていなければなりません、しかし継ぎだらけでむらのあるサーフェイスになる事を回避するために0.5より低くすることは推奨されません。


IrradianceBounceLevel int [1]

どれだけの,、サーフェイス間の拡散相互反射光(diffuse inter-reflection)を評価する
再帰レベルが使用されるかを決定します。
これは、拡散相互反射光が通常作用する暗い領域を持つのを避けることを許します。
値は1と6の間に含まれていなければなりません。
より大きい値がより良い結果をもたらします、しかしレンダリング時間は際立って増加します。 (especially from 1 to 2)
この再帰レベルもまたSkyLightで使用されます。


IrradianceMaxDistance float [0.0]

irradiance 情報を考慮する距離が越えることを制限します。
より正確にはそれは、エラーが100%に達することを保証するサンプルからのモデル単位での距離を設定します(IrradianceMaxError >= 1.0の時)。
サンプルは、オリジナルの計算ポイントからこれ以上の距離では再使用されません。
シーンでオブジェクトのサイズに依存する唯一のチューニング値です。
デフォルト値(0.0)を維持することにより、レンダラはカメラと交点間の距離から直ちにこの距離情報を計算するでしょう。
大部分のケースではそれが優れた結果になります。しかしアニメーションが有効な場合はこの値を設定するほうが良くなり得ます。
より小さな値はより高品質ですが、より多くのメモリとレンダリング時間を必要とするでしょう。


IrradianceMaxError float [0.9]

モンテカルロ照射計算(global illumination)でのエラーの許容差を設定します。
このオプションは、ComputeIrradiance(あるいはコマンドラインで -g オプション) あるいは/そして SkyLight レンダリング中にアクティブの時にのみ意味を持ちます。
もしこの指令が無視されたなら、SkyLightは0.5を使いComputeIrradianceは0.9をデフォルトで使用します。
より小さな値は再計算がしばしば起こる原因となります。
より大きな値はレンダリングを速くします、しかし不正確な結果になることを意味います。
しかし、小さすぎる値は、おのおののサンプルの近くで斑点の形状の人工物を集める
傾向を持ちます。
許容できる値は0.2から1.0までです。
値が1.0と等しい場合のこのエラーの境界の用途を解釈するために、レンダラは、最後のエラーを100パーセント(1.0=100パーセント)と同じくらいに評価するまで、新しいサンプルを計算できないでしょう。
Note:この機能のバリエーションがコマンドラインの -e オプションに存在します。

e.g.
Options [ IrradianceMaxError 0.4 ]


IrradianceSamples int [100]

新しいサンプルを計算する時、照射を評価し順序正しく計算するために分配光線サンプルの合計数を設定します。
このオプションは、ComputeIrradiance(あるいはコマンドラインオプション -g)がレンダリング中にアクティブの時のみ意味を持ちます(そしてSkyLightでないとき)。
レンダリング時間はこの値に直接に比例します。
それはイメージのレンダリングの品質にもまた直接の強い影響を与えます。
大きな値はノイズを少なくしますが、より多くの計算時間を必要とします。

e.g.
Options [ IrradianceSamples 200 ]


IrradianceDistribution int [6]

照射を評価する命令を使うための半球体のサンプリング方法を設定します。
このオプションはComputeIrradiance(コマンドラインの -g オプション)あるいはSkyLightがレンダリング中にアクティブの時のみ意味を持ちます。
レンダリングでは、半球体は基本的にサーフェイス上のにいる時の位置から見る事ができる全ての方向からなります:水平線からずっと天底まで、そして回り中を見る事ができます。
基本的に、正しいglobal Illuminationを決定するために、レンダラが行うひとつの事は、それらの方向を計算するためにそれぞれの周りに半球を使い、交点からシーンの他の場所へ新しい光線のチャンクを送ることです。
これらの分配方法の目的は、半球体を覆うおのおののサンプルのベストエリアをカバーする位置を決定するためです。
これは常にサンプルの合計数の関数です(IrradianceSamples)。
分布がより均一であると、それだけ照射がより良く評価されるでしょう。
6つの異なった分配方法があります。アーカイブファイル "statics.vib" 内にそれぞれの方法の名前が静的に宣言されています。

REGULAR = 1
GRID = 2
HAMMERSLEY = 3
ADAPTIVE_U = 4
RANDOM = 5
N_ROOK = 6

Note:下のイラストは200そして1000の照射サンプルです。
このようなハイレベルのサンプルを使用する必要は決してありません。
この数はただサンプルの分布による現実の相違を示すために選ばれています。


1)REGULAR

regular

上のイラストが示すように、(赤の)サンプルは規則的に(青の)半球体を覆って分配されます。
これは十分なレベルのサンプルの良い結果です。


2)GRID

grid

上のイラストが示すように、(赤の)サンプルは交代で(青の)半球体を覆って分配されます。 この方法は他のよりずっと速いがサーフェイス上に時々ノイズパターンを作り出します。


3)HAMMERSLEY

hammersley

上のイラストが示すように、(赤の)サンプルはHammersleyの決定論的なポイントセットシーケンスに従って(青の)半球体を覆って分配されます。
なぜならサンプルの間の距離の平均は全体的に接近していて、これは多くの場合良い結果です。
このシーケンスのベースは2です。


4)ADAPTIVE_U

adaptive_u

上のイラストが示すように、(赤の)サンプルはサンプルの数に基づいて均等に(青の)半球体を覆ってに分配されます。
そのエリアは一番上から覆われています。
これはおそらくローレベルのサンプルで最も良い結果を得る方法です。
なぜならそれらのポジションが戦略上最も良い領域をカバーするために計算されるからです。
サンプル数が多い場合、結果は特に効率的です。


5)RANDOM

random

上のイラストが示すように、(赤の)サンプルはランダムに(青の)半球を覆ってに分配されます。
この結果は大きなレベルのサンプルでサーフェイスの自然な拡散光になりますが、もし非常に少ないサンプルが指定された場合は非常に粒子が粗くなります。


6)N_Rook

N_Rookサンプリングはデータの多次元統合の技法です。
階層化サンプルは最小の首尾一貫性で半球を覆うランダムなポイントから構築されます。
この技法はほとんどのケースで最良の結果を与えます。
それはデフォルトで採用されます。


e.g.
Options [ IrradianceDistribution REGULAR ]


IrradiancePhotons (int, int) [0, 0]

モンテカルロ照射計算の間に光線のサンプルを分配するためにフォトンマッピング技法を使用します。

この方法はIrradianceDistributionより正確な結果を与えます。しかしながら、それは、SkyLightで単独で作動しません、しかし、SunLightがSkyLightと共に使用される場合、それは作動します。影を投げかける少なくとも1つの光源はシーンに要求されます。

最初の引数は照射フォトンマップを作成するために光源から放たれるフォトンのおおよその数を設定します。開始の良い推測は50000フォトンかもしれません。
実際のフォトンの発射された数は、このカウントよりも少ないか多いはずです。
2番目の引数は、レンダリングステップ中に照射を評価するための命令でそれぞれの光線のサンプルでいくつのフォトンが使われるかを指定します。
それは、50000フォトンのためにあよそ500を意味する、照射フォトンの数の1/100のが良いようです。

e.g.
Options [ IrradiancePhotons (100000, 1500) ]


LoadIrradianceCache

カレントシーンのために現在の前の照射データファイルをロードし、global illuminationを有効にします。
このデータファイルは、その前のレンダリングの間に作成されそしてSaveIrradianceCacheでセーブされていなければなりません。
このファイルは.VIC(VirtuaLight Irradiance Cache)の拡張子を持っています。
SaveIrradianceCache指令は自動的にファイルの名前をコントロールします、しかしそれもまた指定可能です。
irradiance data cacheをロードした時、レンダラはプライマリのglobal illuminationグリッド(あるいはDiffuseSolarRadiation初期化)を計算する必要はありません。
しかし、幾何学と光源は正確に同じでなければなりません。ただカメラの位置はどこでもあり得ます。
LoadIrradianceCache と SaveIrradianceCache は同時に使用可能です、しかしSaveIrradianceCache は最初に書かれていなければなりません。

Note:コマンドラインからのオプション -l 2 が同じ効果を持ちます。


SaveIrradianceCache
or
SaveIrradianceCache string filename

このオプションが指定された時、組み立てられたカレントの照射データのキャシュがレンダリングの終わりにディスクのファイルに書き出されるでしょう。
もしこの指令にファイル名が与えられなかった時は、シーンファイルと同じ名前、しかし拡張子は.VIC(VirtuaLight Irradiance Cache)を持つでしょう。
これは、もし次回にシーンをレンダリングする場合にオプション構造でLoadIrradianceCache指令がある場合に主に有用です。
LoadIrradianceCacheとSaveIrradianceCache同時に使用することが出来ます、しかしSaveIrradianceCacheが先に書かれていなければなりません。

Note:コマンドラインからのオプション -s 2 が同じ効果を持ちます。


LoadPhotonMap

カレントシーンのために現在の前のフォトンマップをロードします。このフォトンマップは前のレンダリングの間にSavePhotonMapでセーブされたものでなければなりません。
まさしくそのシーンのために、全てのサーフェイスとフォトンメディアを含むフォトンマップファイルは、シーンファイルと同じ、しかし拡張子は.VPM(VirtuaLightPhotonMap)の名前を持っていなければなりません。
とにかく、SavePhotonMap指令はフォトンマップのファイル名を自動的にコントロールします。
もしフォトンマップをロードしたなら、レンダラはそれを構築する必要はありません、それは指定のみを使用します。
しかし幾何学と光源は正確に同じでなければなりません。ただカメラの位置はどこでもあり得ます。
LoadPhotonMapとSavePhotonMapはアニメーションの間に同時に使用可能です、、しかしSavePhotonMapは最初に書かれていなければなりません。

Note:コマンドラインからのオプション -l 1 が同じ効果を持ちます。


SavePhotonMap
or
SavePhotonMap string filename

このオプションが指定された時、フォトンマップが構築され(サーフェイスフォトンとメディアフォトン、もし存在するなら)ファイルがディスクに書き出されるでしょう。
もしこの指令でファイル名が与えられていないなら、このファイルはシーンファイルと同じ名前、しかし拡張子は.VPM(VirtuaLight Phton Map)を持つでしょう。
これは主に、もし次回に、オプション構造でLoadPhotonMap指令でシーンをレンダリングする時に有用です。
LoadPhotonMapとSavePhotonMapはアニメーション間に同時に使用可能です、しかしSavePhotonMapが最初に書かれていなければなりません。

Note:コマンドラインからのオプション -s 1 が同じ効果を持ちます。


PhotonsGatherRange (int, int) [40, 100]

causticを評価するために、それぞれのポイントでレンダリングステップ中にいくつのフォトンが集められるかを指定します。
最初の引数は集める最少数で、一方2番目は集める最大数です。
デフォルトは大部分のケースのために良い値です。
フォトンマッピングに関してより知りたい場合はセクション3.5.7を参照してください。

e.g.
Options [ PhotonsGatherRange(60, 120) ]


PhotonsAccelerator (float, float, float) [0.25, 0.25, 0.25]

ユーザがVLightのphotonマッピングの全体的な質をコントロールすることを可能にします。
それは通常、質を犠牲にしてphotonのトレーシングスピードを改善するために使用されますが、さらに速度を犠牲にしてphotonマッピングの精度と質を改善するために使うことも可能です。
floating point の値は 0.01 と 1.0 の間に含まれていなければなりません。より大きな値はphotonトレーシングが正確に(かつ遅く)なります。
最初の引数は causticsマップに関係し、2番目のものは media マップに、最後のものは irradiancephotons マップに関係します。
0.2 以下の値を使用することは、迅速なテストの場合を除いては推奨しません。
photonマッピングに関してもっと知りたい時は、セクション3.5.8を参照してください。

e.g.
Options [ PhotonsAccelerator(0.4, 0.4, 0.4) ]


MaxRayLevel int [6]

シーンの反射そして/あるいは屈折の再帰の量の最大を指定します。
もし反射や屈折するオブジェクトがシーンにないならこれは役に立ちません。
しかしglobal illumination が有効なら、この値は常にIrradianceBounceLevelより大きいくなければなりません。

e.g.
Options [ MaxRayLevel 4 ]


MaxBlurSample int [4]
MaxBlurLevel int [3]

全面に渡って反射あるいは光線を伝達したことは、反射または屈折にある量の統計のノイズを導入するでしょう、各反射あるいは送信のために1つ以上のジッタのある光線をトレースする事は可能です。
光線によって見出された色は平均化されます、それは反射をスムーズにする助けになります。
これはMaxBlurSample指令によりコントロールされています。デフォルトでは4が設定されます。
この値はblurモデルの反射と屈折の両方で使用されます。
より多くのサンプルを与えた場合、より計算に長い時間が掛かります。
他の指令 MaxBlurLevel は MaxRayLevel のローカルバージョンです。
それは、ただトレースするべきblurの反射と伝達の再帰レベルに関係するだけです。
デフォルトでは、それは3が設定されます。


SoftShadowSamples int [16]

シーン中の全てのエリアの光源が投げかける主要な影の光線の正確な数を設定します。
大きな値はスムーズで拡散された影を作成します、しかしより多くの計算時間を必要とします。
しかし良質のソフトな影を作成するために、サンプル数はエリアの光源と関係を持つ必要があります。
例えば、1.5ユニットのエリアの光源のためには8サンプルで充分です、しかし25ユニットのエリアの光源のためには充分ではありません。

e.g.
Options [ SoftShadowSamples 20 ]


HenyeyGreenstein float [0.0]

関係メディアの離散モデルHENYEY(4)で使用する離心率変数を設定します。
値は-1.0と1.0の間に含まれていなければなりません。詳細はセクション3.5.8を参照してください。

e.g.
Options [ HenyeyGreenstein 0.8 ]

Example of an Option structure:

Options [
  BitsPerPixel 32
  EnableAllLightsIrradiance
  IrradianceSamples 150
  IrradianceDistribution HAMMERSLEY
  SoftShadowSamples 10
]





next