3.6 Camera


このカテゴリーはカメラとその構成要素との関係で指令を再編成します。
それはカメラ構造体にくわえて幾つかのオプション指令で構成されています。

Camera [
    point Location, point LookAt, vector UpAxis
    FieldOfView float angle
    Format (int xres, int yres)
    FrameAspectRatio float aspect
    Clipping (float near, float far)
    Antialiasing int level
    Undersampling int level
    DepthOfField (float aperture, float distance, int samples)
    Exposure (float gain, float gamma)
    LensModel int model
  PixelFilter (int type, float xwidth, float ywidth)

    (any transformation modifiers)
]

LookAtとUpAxisはオプションではない唯一のパラメータです。
それらはカンマで区切られています。
Locationはワールド座標のカメラの位置を表しています。
LookAtはそのポジションから見る位置を表しています。
UpAxisは上方向(デフォルト時上とはY軸と揃えること(0,1,0)を意味する)表しています。

Camera


FieldOfView float [60]

この値は、列上端中心から列下端中心までの水平方向の視角を度で指定します。
より小さな値は視界の円錐形を小さくし、カメラが見ている方向へズームするという結果をもたらします。


Format (int, int) [320,240]

レンダリングされるイメージの水平方向と垂直方向のピクセルの解像度を設定します。
最初の引数は列数(イメージの幅)、2番目は行数(イメージの高さ)を表します。
Note:コマンドラインからの -r オプションはこのオプションをオーバライドします。


FrameAspectRatio float [4/3]

レンダリングされるイメージの縦横比設定します。
通常、この比率を得る単純な方法は、Format指令で指定された水平方向の解像度を垂直方向の解像度で割り算することです。

e.g.
FrameAspectRatio 320/240


Clipping (float, float) [0.01, 100000]

ビューの方向の先のnear(最初の引数)とfar(2番目の引数)のクリッピング面の位置を設定します。
nearよりも近いかあるいはfarの向こうのどんな交点(intersection )も無視されます。
両方の値は正でなければならず、そしてfarはnearより大きくなければなりません。
一般にはデフォルト値で十分です。


Antialiasing int [0]

デフォルトでは、レンダラはピクセル毎に1つだけのサンプル光線でイメージを作成します。
このようなディジタルのサンプリングは、以下、を取り入れる(introduce)事が出来る
色々なジャギーエラー、スムーズであるべき階段状のライン、干渉の波紋パターンそしてカメラから遠いために細部が失われたオブジェクト。
この問題はエイリアシングとして知られています。
アンチエイリアシングは、エイリアシングあるいは少なくともそれがイメージに与える否定的な影響を軽減する技法です。
VirtuaLightインターフェイスは、適用性がある(adaptive)スーパサンプリングとして知られる、良質のアンチエイリアシング技法を提供します。
なぜなら、オリジナルの周囲に余分な光線を付け加えてオーバサンプリングを行うと、
それはレンダリング速度が遅くなって、そしてレベルに依存するようになり、猛烈にレンダリングの計算時間の増大を必要とします。

Antialiasing が必要とするパラメータはスーパサンプリングレベルです。
0より大きいどのような値もアンチエイリアシングを有効にします。
1と等しい値は、シングルのオーバサンプリング(ピクセル毎にただ4だけの初期サンプル光線)を行います。そしてそれは理論上最も速いアンチエイリアシングモード(背景の大部分がイメージで表現されている場合を除く)です。
1より大きな値は適応性がある(adaptive)アンチエイリアシングを行います。
基本的に、ひとつのピクセルの四つのコーナーを通して光線を送ることでアルゴリズムは開始します。
もしコーナー間に十分なコントラストがあるなら、ピクセル内にもう5つの光線を発射します。(ひとつは中心、そしてそれぞれのコーナー)
この結果は4つのサブピクセルです。
それぞれのレベルの適応性のあるオーバサンプリングはこの手順を繰り返します。
同じく、オプション指令AdaptiveThreshold 適応性のあるオーバサンプリングのパフォーマンスに影響を与えます。

アンチエイリアシングが要求するパラメータはスーパサンプリングレベルです。
この値は1から10の間に含まれていなければなりません。
0より大きなどの値もアンチエイリアシングを有効にします。
より大きな値は、より正確なレンダリングになります。
しかし、1が既に良い結果を与えます。
基本的に、ひとつのピクセルの四つのコーナーを通して光線を送ることでアルゴリズムは開始します。
もしコーナーの間に十分なコントラストがれば、追加の光線がピケセル中で発射されます。
それぞれのレベルの適応性のあるオーバサンプリングはこの手順を繰り返します。


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


Undersampling int [0]

アンチ・エイリアシングがない標準的なレイトレーシングモードより最高8倍速くシーンをレンダリングすることを可能にします。
Undersampling はアンチ・エイリアシングと全く逆になります。
この手法はこのエリア内の少数のものから単なる光線の発射から、ピクセルのエリアの実際の色を差し引く事を可能にします。
これはVirtuaLightによって提供される最も速いレイ・トレーシングモードです。
それはテストイメージのためには重要ですが、最終のレンダリングに使用してはいけません。
もちろんアンチ・エイリアシングは、Undersampling が有効の時には無効になります。
Undersampling 要求するパラメータは品質レベルです。この値は1と10の範囲に含まれていなければなりません。
0より大きいどのような値でもUndersampling を有効にします。
より大きな値は、undersampledなエリアは、最も良好な結果を与えてよりディープでしょう。
しかしレベルが10と等しいものを使用しても、レンダリングは標準的なアンチ・エイリアシングのないレイ・トレーシングより高速です。
注意:コマンドラインからのオプション -u はこのオプションをオーバライドします。



DepthOfField (float, float, int)

デフォルトではレンダラは単純なピンホールカメラモデルを使用します。
それは全てのオブジェクトが、カメラから近いか遠いかに関わらず鮮明なフォーカスであることを意味します。
この指令はフィールド効果深度を有効にするために使用されます。
この機能がオンになった時、特定深度のポイントはview平面上の単体のポイントのイメージに反映せず、むしろそれは錯乱円と呼ばれる円になります。

最初の引数は絞り(aperture)のサイズを設定します。
これはどの程度シーンのフォーカスを合わせるか調節します。
より大きな値は錯乱円を広げ、結果として大きなエリアに焦点がずれます。
このサイズはややシーンの広さに依存しています。
しかし理論上、範囲は0.1から2.0で十分です。

2番目の引数は焦点距離を設定します。
これはシーンのどの部分にフォーカスが合うかをコントロールします。
その値はカメラからの距離だと予想されます。
もしこの距離に0が設定されていたなら、レンダラはLookAtパラメータによって定義されたポイントにフォーカスが合うように自動的にそれをセットするでしょう。
3番目の引数は、レンダリング間にさらにサンプルが追加されることによるスムーズな効果の詳細な調整を可能にします。

大きなサイズの絞りは、イメージに粒状のものが現れるのを避けるために、サンプルの数を増加させる必要があるかもしれません。
これらのサンプルが適応性のあるアンチエイリアシングと相互に作用するだろうということに注意してください。


Exposure (float, float)

フィルム露出プロセスの感光度と非線形性をコントロールするために、イメージの全てのピクセルのフィルタリングをします。
この結果を得るために、各々の色値はゲイン値と掛け算されてそして逆ガンマ関数を通されます。
デフォルトではこの処理は無効です。
最初の引数はゲインで、2番目はガンマ値です。

LensModel int [1]

VirtuaLight インタフェースは6つのカメラレンズモデルを提供します。
アーカイブファイル "statics.vib" 内で、それぞれが静的に宣言されます:

PERSPECTIVE = 1
ORTHOGRAPHIC = 2
WIDE_ANGLE = 3
FISHEYE = 4
PANORAMIC = 5
OMNIMAX = 6

PERSPECTIVE はデフォルトで使用されるものです。(前のバージョンで提供される唯一のものでした)
それは古典的なピンホールカメラをシミュレートします。

ORTHOGRAPHIC は排他的に、シーンのイメージをレンダリングするために平行のカメラを使用します。
ここで与えられたFieldOfView はもはや角度であるとはみなされません。
それはワールド空間でのスクリーンの幅を表します。
遠近法モデルのフレーミングと合わせるために小さな値を維持してください。

FISHEYE  は円形のイメージを得るために球形投影をシミュレートします、
180度の視野は"標準的な"魚眼レンズを作成し、一方360度はスーパ魚眼レンズを作成します。

WIDE_ANGLE はやや魚眼レンズに類似しています、しかしそれは円の代わりに長方形のイメージを投影します。
PANORAMIC はもし視野が180度に近づくなら、PERSPECTIVE 投影の退化的問題を克服します。
それはまずまずの横伸張の歪みの、180度より大きな視野角を使用可能な円筒の投影タイプを使用します。

OMNIMAX は垂直方向の視野角を減らした、180度の魚眼レンズをシミュレートします。
この手法はドームのようなOmnimax映画館で見る事ができる、ムービーを作成するために使用されます。
FieldOfView指令は、この レンズモデルでは効果を持ちません。

PixelFilter (int, float, float)

VirtuaLight は、幾何学図形をフィルタリングあるいは supersampling し、次にピクセルの位置でサンプリングすることにより、アンチエイリアシングを実行します。
PixelFilter は最終的なピクセル色に対して、ユーザが個々のピクセルサンプルの改造に対するコントロールを行うことを可能にします(これはピクセルフィルタリングとして知られています)。
PixelFilter は使用されるピクセル改造フィルタのタイプと幅(x軸およびy軸)を指定します。
フィルタの幅はフィルタカーネルの直径です。その中心の左から右の全てのピクセルをカバーするために、xwidth は3.0に等しくなければなりません。その中心の上から下の全てのピクセルをカバーするために、ywidth は3.0に等しくなければなりません。
異なるフィルタは異なる特質を持っています、また使用する正しいものがどれかは必ずしも明白だとは限りません。

PixelFilter の最初の引数はフィルタタイプです。アーカイブファイル "statics.vib" にはそれらが静的に宣言されています。

BOXfilter = 1
TRIANGLEfilter = 2
CATMULLROMfilter = 3
GAUSSIANfilter = 4
SINCfilter = 5
DISKfilter = 6
BESSELfilter = 7

第2と第3の引数はxwidthとywidthを定義します。両方の値は5.0を以上ではなく1.0未満でもありません。


セクション3.12の1つ以上の変換指令を使用して、カメラを変換することは可能です。
これは回転や傾きの効果を与えることを可能にします。


Example of a Camera structure:
Camera [
    (2,4.5,-5), (2,1,7.5), (0,1,0)
    FieldOfView 45
    Format(320, 240)
    FrameAspectRatio 4/3
    DepthOfField(0.3, 0, 6)
    Exposure(1.5, 2.3)
    PixelFilter(GAUSSIANfilter, 2.0, 2.0)
]




next