home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Phoenix Heaven Sunny 2
/
APPARE2.BIN
/
oh_towns
/
eastray
/
program
/
exten386
/
ray_form.doc
< prev
next >
Wrap
Text File
|
1995-06-20
|
69KB
|
1,284 lines
EASTRAY データフォーマット
<<< Version 1.98 >>>
Presented by EAST
・座標系など
EASTRAYは右手座標系を用いています。回転はベクトルの方向に対して右巻きに回転されます。このマニュアルの内部で「ベクトル」と使うときは正規化したものでなくてもいいようになっています。
・ファイル形式
EASTRAYのソースデータはアスキーファイル形式で与えられます。ファイルの拡張子は特に決めていませんが,現在慣用的に「.RAY」とすることにしています。
・プリプロセッサ機能
EASTRAYのソースデータにおいて,Cライクなプリプロセッサ機能が使えます。サポートしているのは「#include」「#define」です。行頭に「#」を付けることでその行はプリプロセッサの制御行になります。
「#include ファイル名」と記述すると,その位置に別のファイルを読み込む事ができます。このときインクルードするファイルにさらにインクルードをしていてもかまいません。
ファイル名の指定の仕方には二種類あります。一つは「"ファイル名"」という形式で,この場合カレントディレクトリから読み込まれます。もう一つは「<ファイル名>」という形式で,この場合環境変数「EASTRAY」を参照し,EASTRAYで示されるディレクトリから読み込まれます。例えば「SET EASTRAY D:\EASTRAY\」と環境変数が指定してある場合,「#include <usr\usr.h>」というインクルードファイルは「d:\eastray\usr\usr.h」となります。
「#define マクロ名 マクロの内容」と記述すると,マクロ名にマクロの内容を定義することができます。この後,マクロ名はマクロの内容に置換されて読み込まれます。
・データフォーマット
EASTRAYのフォーマットはステートメントを書き連ねて指定するようになっています。ステートメントは
(type1)「ステートメント名」「パラメ-タ列」「終了をあらわすセミコロン;」と
いう形式をとるもの
(type2)「ステートメント名」「[」「パラメ-タ列」「]」という形式をとるもの
という二つの系統に別れます。各々の要素の区切りはスペース・コロン・リターンコードによって区切られます。また,コメントを書くとともできます。コメントは「/*コメント*/」というC言語にならったフォーマットになっています。
例)display 256 240 0 0 255 239 1 1 1 ;
------- ------------------------------- -
↑ステートメント名 ↑パラメ-タ列 ↑終了を表すセミコロン
ステートメント名には以下のようなものがあります。
(type1)
rmode display condition anti camera
mist sky env output voxel
shadow input back_mode output_mode
(type2)
e_light p_light s_light map_data color
obj
・ステートメント詳解
ステートメントのパラメ-タを解説します。
rmode : レンダリングモードを指定する
(書式) rmode レンダリングモード ;
(解説)
レンダリングモードは0と1の二つの値のうちの一つを取ることができます。
1の場合は3Dモードでレンダリングされます。この場合,cameraで指定される視差で2枚の画像を出力します。そのとき,outputで指定されたファイル名に「_r」「_l」という文字を付け加えられたファイルが生成されます。当然ながら計算時間は約二倍になります。
0の場合は3Dモードではなく,一枚だけ画像が出力されます。
(→camera,output)
display : 出力画像の大きさなどを指定する
(書式) display 出力画像のX方向のドット数 出力画像のY方向のドット数
出力画像の計算開始点のX座標 出力画像の計算開始点のY座標
出力画像の計算終了点のX座標 出力画像の計算終了点のY座標
出力画像のX方向のドット粗さ 出力画像のY方向のドット粗さ
出力画像のドットの縦横比 ;
(解説)
「出力画像のドット数」により,出力画像の大きさが決まります。X方向は2048ドットまで,Y方向は無制限となっています。
「出力画像の計算開始点・終了点」によってレンダリングする範囲を指定することができます。以上の6つのパラメ-タには以下のような関係があります。
0 <= 計算開始点X座標 <= 計算終了点X座標 < 出力画像のX方向のドット数
0 <= 計算開始点Y座標 <= 計算終了点Y座標 < 出力画像のY方向のドット数
この関係が満たされない場合には計算は実行されません。
「出力画像のドット粗さ」とは出力する画像を何ドット単位で計算するかを指定します。このドット数は出力画像のドット数の公約数である必要はありません。ドット数を大きくして計算すると計算が早く済むので,主に試作データのチェックに用いられます。
「出力画像のドットの縦横比」は画像を出力したいデバイスによってはドットの縦横比が1でない場合がある時に意味を持ちます。普通,縦横比は1ですから1を指定してください。
condition : 反射の回数などの指定をする
(書式) condition 最大光線追跡回数 最小光線追跡光量 計算誤差丸め値 内部分岐スイッチ ;
(解説)
「最大光線追跡回数」を変えることによって反射・屈折する回数をコントロールすることができます。0にした場合,物体表面が鏡面・透明体であっても反射をしません。1以上の場合,最大光線追跡回数-1回だけ反射・屈折処理をおこないます。当然ながら回数が多いほど計算時間がかかります。
「最小光線追跡光量」は,反射・屈折の時に減衰したレイを打ち切る最小の光量を指定します。レイが始点から出た時の光量は1です。
「計算誤差丸め値」は,計算値を0と見なす値を指定します。絶対値がこれより小さい値だと0と見なされます。これは計算誤差が蓄積され,表面にゴミが出るのを防ぐためのものです。代表値の10^(-5)程度の値を指定してください。
「内部分岐スイッチ」を1にすると,透明体内部に分岐するレイを計算し,0にすると計算しません。0にしたほうが高速になりますが,透明体のイメージが違ってくることがあります。
anti : アンチエイリアジングの指定をする
(書式) anti アンチエイリアジングフラグ アンチエイリアジングレベル ;
(解説)
「アンチエイリアジングフラグ」が0以外の時,アンチエイリアジング処理を行います。1以上の値の時,その回数だけ分配レイトレーシングを利用したアンチエイリアジングを実行します。回数が大きいほど良い結果が得られますが,その分処理に時間がかかります。また,-1の時には分散レイトレーシングを利用したアンチエイリアジングを実行します。こちらは分配レイトレーシングと同じ時間ならば,それよりややよい結果がえられます。
「アンチエイリアジングレベル」は,隣あったドットのRGBどれかの値がこの値以上に変化しているとアンチエイリアジング処理を行う,という値を指定します。値が小さければそれだけ良い結果が得られるでしょうが,その分計算時間が長くなります。
camera : 視点などの指定をする
(書式) camera 視点のX座標 視点のY座標 視点のZ座標
注視点のX座標 柱視点のY座標 柱視点のZ座標
副注視点のX座標 副柱視点のY座標 副柱視点のZ座標
画角(度) 視差パラメ-タ ;
(解説)
「視点」とはその名の通り,目がある位置を指定します。
「注視点」とは目で見る点のことです。出力画像の中心が,視点から見てこの点になります。
「副注視点」と注視点を結んだ線が画面の上下方向を表し,副注視点のある方が画面の上方になります。副注視点と注視点を結ぶ直線は,必ずしも視点と注視点を結ぶ直線と直交する必要はありません。自動的に調整されます。
「画角」は視野の大きさを指定します。画角が15度なら,視線から左右15度づつの範囲が見えることになります。また,縦方向の画角は自動的に調整されます。
「視差パラメ-タ」は,両目の間隔と,視点と注視点の距離との比を指定します。これを大きくするほど立体感が強調されます。また,この値はrmodeが3Dモードでなければ意味を持ちません。
(→rmode,output)
mist : 霞の効果を指定する
(書式)mist 空気中のレイの減衰率 霞効果スイッチ ;
(解説)
「減衰率」は空気中を光が進む時,半分の強さになる距離を指定します。
「霞効果スイッチ」を1にすると減衰した光は空の色に近づいていきます。0にすると減衰しても空の色には近づきません。
(→sky)
sky : 空の色を指定する
(書式)sky 空の色のR成分 空の色のG成分 空の色のB成分 ;
(解説)
「空の色」とはレイが物体と交わらない時に見える色で,また霞効果で光が近づいていく色の事でもあります。RGBはそれぞれ0から1までの間の値をとります。
(→mist)
env : 環境光を指定する
(書式) env 環境光のR成分 環境光のG成分 環境光のB成分 ;
(解説)
「環境光」とは,物体に乱反射され,空間に均等にどの方向からも照らしている光源を意味します。どの物体も一様にこの光源に照らされています。RGBはそれぞれ0から1までの間の値をとります。
output_mode : 出力画像のビット数などを指定する
(書式) output_mode 出力画像のビット数 ディザスイッチ ;
(解説)
「出力画像のビット数」は出力画像ファイルのビット数を指定します。出力ビット数が可変なのは「.tif」ファイルだけで、「.fal」「.ipr」「.hpi」は変化しません。指定できるビット数は
16 → 32k色
24 → 24ビットフルカラー
の2つです。
「ディザスイッチ」は出力する画像にディザリングをほどこし、マッハバンドを目立ちにくくします。ディザリングが行われるのは出力画像のビット数が16ビットのときだけす。指定できる数値は
0 → ディザリングしない
1 → ディザリングする
の2つです。
output : 出力画像のファイル名を指定する
(書式) output 出力画像のファイル名 ;
(解説)
「ファイル名」は必ず拡張子を付けねばなりません。これは,出力画像の形式を拡張子で判別しているためです。拡張子は
.tif → tiff形式ファイル
.fal → RGBベタファイル + FALファイル
.ipr → RGBベタファイル + IPRファイル
.hpi → フルカラーα情報付非圧縮HPIファイル
となっています。実行時に同じファイル名が存在した時は,ファイルの形式・画面のサイズを比較し,同じであればその上から計算した範囲だけをオーバーライトしますが,それ以外の場合はファイルを一旦デリートし,新しくファイルを作り,全て黒でクリアしたあとその上にオーバーライトします。
IPRファイル形式は(株)アンス・コンサルタンツのアプリで使用されている形式です。
HPIファイル形式はHyPER[彩子]で使用されているフォーマットです。HyPER[彩子]は開発元(株)アートファンクション,発売元(株)デジタルアーツです。
(→display)
input : 入力画像のファイル名を指定する
(書式) input 入力画像のファイル名 ;
(解説)
計算した画像の背景に合成する画像ファイルを指定します。合成方法についてはback_modeで指定します。
「ファイル名」は必ず拡張子を付けねばなりません。これは,入力画像の形式を拡張子で判別しているためです。拡張子は
.tif → tiff形式32K色モードorフルカラーモードファイル
.fal → RGBベタファイル + FALファイル
.ipr → RGBベタファイル + IPRファイル
.hpi → フルカラーα情報付非圧縮HPIファイル
となっています。
(→display,back_mode)
back_mode : 画像合成方法を指定する
(書式) back_mode 背景合成モード 反射成分フラグ 透過成分フラグ αモード ;
(解説)
背景に画像を合成する方法の指定や,α情報の出力などの方法を指定します。それぞれの値は以下のとおり。
背景合成モード 0:背景はskyで指定された色になる。無限遠光源の大きさが見える。
1:背景にinputで指定した画像ファイルを合成する。無限遠光源の大
きさは見えない。
2:背景にinputで指定した画像ファイルを合成する。無限遠光源の大
きさが見える。
反射成分フラグ 0:レイが反射した時に,反射方向に物体が無い場合,色をskyで指定
された色にする。
1:レイが反射した時に,反射方向に物体が無い場合,そのレイのパ
ワーを背景分にまわす。背景合成モードだと入力ファイルが透け
て見える。
透過成分フラグ 0:レイが透過した時に,透過方向に物体が無い場合,色をskyで指定
された色にする。
1:レイが透過した時に,透過方向に物体が無い場合,そのレイのパ
ワーを背景分にまわす。背景合成モードだと入力ファイルが透け
て見える。
αモード 0:α成分がRGBの各成分にも反映され,RGBもアンチエイリア
スされる。
1:α成分がRGBの各成分に反映されず,RGBは純粋に物体の色
をあらわす。
(→input,output)
voxel : ボクセル分割の分割数を指定する
(書式) voxel ボクセル分割数 ;
(解説)
「ボクセル分割」とは,効率的に物体を検索するための手法で,物体数が多くなればなるほど効果を発揮します。ボクセル分割数は空間をボクセル分割する個数を指定するためのパラメ-タで,分割数の三乗個に空間が分割されます。大体16位が適当らしいです。 分割数が0のときにはボクセル分割を行わない。初期値は0。
shadow : 影をつけるかどうかを指定する
(書式)shadow 影on/offスイッチ
(解説)
スイッチを1にすると影を計算し,0にすると影を計算しない。影を計算しない場合の方が高速に計算ができるため,形のチェックなどの場合に有効。初期値は1。
e_light : 無限遠光源を指定する
(書式)e_light [
/* 1つ目の光源のパラメ-タ */
無限遠光源の方向ベクトルのX成分
無限遠光源の方向ベクトルのY成分
無限遠光源の方向ベクトルのZ成分
無限遠光源の色のR成分
無限遠光源の色のG成分
無限遠光源の色のB成分
無限遠光源の見掛けの大きさ(度)
無限遠光源の光の集まり方
オプション ;
/* オプション */
n
/* 2つ目の光源のパラメ-タ */
:
:
:
:
:
]
(解説)
「無限遠光源の方向ベクトル」とは,空間のなかのある点から見てその方向に光源があるという意味です。光源からくる光の進む方向ではありません。
「無限遠光源の色」のRGBはそれぞれ0から1までの間の値をとります。
「無限遠光源の見掛けの大きさ」とは,レイが物体に当たらず,空に向かった場合に見える無限遠光源の大きさを,半径が視点から見てどれくらいの度数になるかで指定します。
「無限遠光源の光の集まり方」は,見掛けの無限遠光源でどのくらい中心に光が集まっているかを指定します。この値を大きくすればするほど中心が明るく,外側に行くほど暗くなります。
オプションは「n」が使用できます。「n」オプションをつけるとこの光源による影ができません。そのためその分高速化が望めます。
(→sky)
p_light : 点光源を指定する
(書式) p_light [
/* 1つ目の光源のパラメ-タ */
点光源のX座標
点光源のY座標
点光源のZ座標
点光源の色のR成分
点光源の色のG成分
点光源の色のB成分
点光源の光の減衰率
オプション ;
/* オプション */
n
r 到達距離
/* 2つ目の光源のパラメ-タ */
:
:
:
:
:
]
(解説)
「点光源の座標」とは点光源の光源が位置する座標です。
「点光源の色」のRGBはそれぞれ0から1までの間の値をとります。
「点光源の光の減衰率」は,点光源の光が半分の強さになる距離を指定します。
オプションは「n」「r」が使用できます。「n」オプションをつけるとこの光源による影ができません。「r」オプションをつけるとその距離より離れた場所では影ができません。「到達距離」を-1にすると距離に関係なく影の計算が行われます。これらの指定を適当におこなうと計算量が減るため,その分高速化が望めます。
s_light : スポットライトを設定する
(書式) s_light [
/* 1つ目の光源のパラメ-タ */
スポットライトの光源のX座標
スポットライトの光源のY座標
スポットライトの光源のZ座標
スポットライトを当てる点のX座標
スポットライトを当てる点のY座標
スポットライトを当てる点のZ座標
スポットライトの色のR成分
スポットライトの色のG成分
スポットライトの色のB成分
スポットライトの広がり方
スポットライトの光の減衰率
オプション ;
/* オプション */
n
r 到達距離
/* 2つ目の光源のパラメ-タ */
:
:
:
:
:
]
(解説)
「スポットライトの光源」というのは光を出す点を指定します。
「スポットライトの当たる点」を中心として光が絞りこまれます。
「スポットライトの色」のRGBはそれぞれ0から1までの間の値をとります。
「スポットライトの広がり方」というのは光がどのように絞り込むかを指定します。指定した値が大きいほど光は絞りこまれます。
「スポットライトの光の減衰率」は,スポットライトの光が半分の強さになる距離を指定します。
オプションは「n」「r」が使用できます。「n」オプションをつけるとこの光源による影ができません。「r」オプションをつけるとその距離より離れた場所では影ができません。「到達距離」を-1にすると距離に関係なく影の計算が行われます。これらの指定を適当におこなうと計算量が減るため,その分高速化が望めます。
map_data : マッピングに使う画像ファイルを指定する
(書式) map_data [
/* No.0のマッピングデータのパラメ-タ */
マッピングデータの名前 /* ←省略可 */
読み込むマッピングデータのファイル名
ミップマッピングスイッチ
/* No.1のマッピングデータのパラメ-タ */
:
:
:
:
:
]
(解説)
マッピングデータは定義された順番に0,1,2,3,・・・・というふうにマッピングデータ番号を割り当てられます。色などの定義の時にはこのマッピングデータ番号を指定することになります。
「マッピングデータの名前」はアルファベットで始まり,そのなかに「.」を含まない文字列で,,マッピングデータ番号のかわりに使うことができます。マッピングデータ番号が変化してもこの「マッピングデータの名前」で指定しておけば影響がありません。
「ファイル名」は拡張子でグラフィックの形式を区別するので必ず拡張子が必要です。使えるファイルの形式は次のとおりです。
.tif → tiff形式圧縮対応 2色モードファイル
16色モードファイル(パレット対応)
256色モードファイル(パレット対応)
32K色モードファイル
16777216色モードファイル
.fal → RGBベタファイル + FALファイル
.ipr → RGBベタファイル + IPRファイル
「ミップマッピングスイッチ」というのは,ミップマッピングを使用するマッピング用のマッピングデータを読み込むための処理をするかどうかのスイッチです。0だとこの処理を行わず,1だと処理を行います。このミップマッピングスイッチを0にして読み込んだマッピングデータをミップマッピングを使用するマッピングに使うことはできません。また,このスイッチを1にすると処理に時間がかかり,また0の時の2倍程度多くメモリーを消費します。
color : 色を定義する
(形式)color [
/* No.0の色のパラメ-タ */
色の名前 /* ←省略可 */
物体色のR成分
物体色のG成分
物体色のB成分
< カラーマッピング > /* < ... >は省略可。以下同様。マッピングについては後で述べる。 */
反射率のR成分
反射率のG成分
反射率のB成分
< 反射率マッピング >
透過率のR成分
透過率のG成分
透過率のB成分
< 透過率マッピング >
屈折率
< 屈折率マッピング >
透明度
< 透明度マッピング >
バンプ
< バンプマッピング >
鏡面反射光処理のアルゴリズムの種類
/* アルゴリズムが0のときブリンのシェーディング1 */
ハイライトの強度
< ハイライトの強度マッピング >
ハイライトの広がり方
< ハイライトの広がり方マッピング >
/* アルゴリズムが1のときブリンのシェーディング2 */
反射率のR成分
反射率のG成分
反射率のB成分
< 反射率マッピング >
ハイライトの広がり方
< ハイライトの広がり方マッピング >
フレネルの反射率
< フレネルの反射率マッピング >
/* アルゴリズムが2のとき異方性反射1 */
反射率のR成分
反射率のG成分
反射率のB成分
< 反射率マッピング >
円の中心のX座標
円の中心のY座標
円の中心のZ座標
円の方線ベクトルのX成分
円の方線ベクトルのY成分
円の方線ベクトルのZ成分
パラメ-タA
< パラメ-タAマッピング >
パラメ-タB
< パラメ-タBマッピング >
パラメ-タC
< パラメ-タCマッピング >
/* アルゴリズムが3のとき異方性反射2 */
反射率のR成分
反射率のG成分
反射率のB成分
< 反射率マッピング >
傷の方向ベクトルのX成分
傷の方向ベクトルのY成分
傷の方向ベクトルのZ成分
パラメ-タA
< パラメ-タAマッピング >
パラメ-タB
< パラメ-タBマッピング >
パラメ-タC
< パラメ-タCマッピング >
/* アルゴリズムが4のときCook-Torranceのシェーディング */
反射率のR成分
反射率のG成分
反射率のB成分
< 反射率マッピング >
ハイライト1の割合
< ハイライト1の割合マッピング >
ハイライト1の広がり方
< ハイライト1の広がり方マッピング >
ハイライト2の広がり方
< ハイライト2の広がり方マッピング >
/* アルゴリズムが5のときコンスタントシェーディング */
color1のR成分
color1のG成分
color1のB成分
< color1マッピング >
color2のR成分
color2のG成分
color2のB成分
< color2マッピング >
k
< kのマッピング >
;
/* No.1の色のパラメ-タ */
:
:
:
:
:
]
(解説)
色は定義された順番に0,1,2,3,・・・・というふうに色番号を割り当てられます。物体の定義の時にはこの色番号を指定することになります。
「色の名前」はアルファベットで始まる文字列で,「obj」の中で色番号のかわりに使うことができます。色番号が変化してもこの「色の名前」で指定しておけば影響がありません。
「物体色」はランバートのモデルにもとづく拡散反射光用のパラメ-タです。RGBはそれぞれ0から1までの間の値をとります。マッピングはカラーで行われます。
「反射率」は反射する時の反射率を指定します。RGBはそれぞれ0から1までの間の値をとります。カラーで指定できるので,色のついた金属のようなものも表現できます。マッピングはカラーでおこなわれます。
「透過率」は屈折する時どれくらいが透過するかを指定します。これもカラーで指定できるので,色付ガラスなども表現できます。RGBはそれぞれ0から1までの間の値をとります。3つとも0の時はこの物体は反射体とみなされて,フレネルの公式による反射と屈折の比率の計算は行われず,すべて反射するものとみなします。マッピングはカラーでおこなわれます。
「屈折率」は透明体のとき,その物体の屈折率を指定します。屈折率はガラスだと1.5ぐらいです。1.0だと空気と同じ屈折率となるので屈折して見えません。マッピングはモノクロで行われます。
「透明度」は透明体のとき,物体の中を通る光が半分の強さになる距離を指定します。大きいほど透明になります。マッピングはモノクロでおこなわれます。
「バンプ」は物体の表面を擬似的に凸凹にみせるバンプマッピングを指定します。bumpだけでは何の意味もありません,バンプマッピングをするときには必ずこのあとにマッピングの指定を行わなければなりません。マッピングはモノクロで行われ,その値が大きいと高く,小さいと低いとみなされてバンプマッピングがおこなわれます。
「鏡面反射光処理のアルゴリズムの種類」は鏡面反射のルーチンを指定するパラメ-タです。それぞれのルーチンごとに必要とするパラメ-タが違いますから,必要なパラメ-タを書いて下さい。鏡面反射光とは,プラスチックの表面に見られるようなハイライトを表現するためのものです。パソコン用のレンダラーには普通フォンのシェーディングが多いのですが,フォンでは金属などの表現は難しいので,ブリンのシェーディングと異方性反射とCook-Torranceのシェーディングやコンスタントシェーディングをサポートしています。以下にそれぞれのアルゴリズムの解説をします。
○アルゴリズム0・・・ブリンのシェーディング1
分布関数にcos^nを使ったブリンのシェーディングですが,幾何学的係数を考慮していないのでフォンのシェーディングに近いハイライトになります。プラスチックや鏡のような鋭くて白いハイライトが得意です。
「ハイライトの強度」はハイライトの強さを指定します。0.0から1.0を指定してください。マッピングはモノクロでおこなわれます。
「ハイライトの広がり」は大きいほど鋭いハイライトとなります。マッピングはモノクロでおこなわれます。
○アルゴリズム1・・・ブリンのシェーディング2
幾何学的係数を考慮し,分布関数にガウス分布を使ったブリンのシェーディングです。鈍く光る金属のハイライトを表現するのに適しています。
「反射率」は鏡面反射光のアルゴリズム内で使われるもので,レイの反射の時の反射率とは別物です。RGBはそれぞれ0から1までの間の値をとります。マッピングはカラーでおこなわれます。
「ハイライトの広がり方」はガウス分布の標準偏差を指定します。大きいほど鋭いハイライトとなります。マッピングはモノクロでおこなわれます。
「フレネルの反射率」はフレネルの公式から出した反射率を使うのですが,普通は定数を使うので,値を手で入れるようにしました。値は金で0.5,銀で0.9ぐらいのようです。マッピングはモノクロでおこなわれます。
○アルゴリズム2・・・異方性反射1
金属の表面は普通平らではありません。仕上げにやすりで擦ったりしているので細かな傷が付いていることが普通です。この傷のため,見る方向によって光の拡散の具合が変わってきます。異方性反射というのはこういったことを考慮したモデルで,リアルな金属の表現が可能となります。この異方性反射1は円状に傷が入っている金属を表現します。
「反射率」は鏡面反射光のアルゴリズム内で使われるもので,レイの反射の時の反射率とは別物です。RGBはそれぞれ0から1までの間の値をとります。マッピングはカラーでおこなわれます。
「円の中心の座標」は円状の傷の中心を指定します。
「円の方線ベクトル」はその円の方線が向いている方向を指定します。
「パラメ-タA・B・C」は反射の偏りを表します。B<A<Cとなるように値を決めます。ふつうはA=1;B=0.1;C=1ぐらいにしておけば大丈夫でしょう。
○アルゴリズム3・・・異方性反射2
異方性反射2は直線状に傷が入った金属を表現する時に使います。
「反射率」は鏡面反射光のアルゴリズム内で使われるもので,レイの反射の時の反射率とは別物です。RGBはそれぞれ0から1までの間の値をとります。マッピングはカラーでおこなわれます。
「傷の方向のベクトル」は傷の方向のベクトルが向いている方向を指定します。
「パラメ-タA・B・C」は反射の偏りを表します。B<A<Cとなるように値を決めます。ふつうはA=1;B=0.1;C=1ぐらいにしておけば大丈夫でしょう。
○アルゴリズム4・・・Cook-Torranceのシェーディング
Cook-Torranceのシェーディングは鈍い光を反射する金属を表すのに適しています。このアルゴリズムでは荒く削った金属をさらに細かいヤスリで仕上げた・・・という状況を想定して作られたものです。そのため2つのハイライトの合成として表現されます。
「反射率」は鏡面反射光のアルゴリズム内で使われるもので,レイの反射の時の反射率とは別物です。RGBはそれぞれ0から1までの間の値をとります。マッピングはカラーでおこなわれます。
「ハイライト1の割合」とは,ハイライト1とハイライト2を合成する時のハイライト1の割合を指定します。この場合,ハイライト2の割合は「1.0-ハイライト1の割合」となります。
「ハイライト1の広がり方」は大きいほど鋭いハイライトとなります。マッピングはモノクロでおこなわれます。
「ハイライト2の広がり方」は大きいほど鋭いハイライトとなります。マッピングはモノクロでおこなわれます。
○アルゴリズム5・・・コンスタントシェーディング
光源などの位置に関係なく一定なシェーディングをおこないます。表面の法線と視点の方向のなす角度のcosのk乗に比例して,color1からcolor2まで色を変化させます。つまり球だと,中心付近がcolor1,周辺部分がcolor2になります。このシェーディングと点光源・スポットライトを組み合わせることによって光源が目に見えるかのような表現などが可能になります。
(補足)マッピングについて
マッピングはほとんどの色に関するパラメ-タにかけることができるのでまとめて解説します。パラメ-タにはRGBの三つの成分で与えるものと,一つの成分のものの二種類があります,そのためマッピングにはカラーのものとモノクロの二種類があります。カラーとモノクロといってもモノクロはカラーからコンバートされますのであまり考えることは無いでしょう。
マッピングの一般的なフォーマットは次のようになっています。このようなフォーマットでマッピングをかけたい成分の後ろにマッピングのパラメ-タを書くとマッピングが実行されます。
<
/* No.1 のマッピングデータのパラメ-タ */
移動コマンド /* ←移動コマンドは省略可 */
マッピングデータ番号 or マッピングデータの名前
倍率
マッピングモード
/*マッピングモード0のとき 全方向マッピング*/
k
/*マッピングモード1のとき 平面マッピング*/
u1 v1 u2 v2 u1a v1a u2a v2a
/*マッピングモード2のとき 球面マッピング*/
u1 v1 u2 v2 u1a v1a u2a v2a
/*マッピングモード3のとき 環状マッピング*/
u1 v1 u2 v2 u1a v1a u2a v2a
/*マッピングモード4のとき 円筒マッピング*/
u1 v1 u2 v2 u1a v1a u2a v2a
は
/*マッピングモード10のとき ミップマッピング付き全方向マッピング*/
k
/*マッピングモード11のとき ミップマッピング付き平面マッピング*/
u1 v1 u2 v2 u1a v1a u2a v2a
/*マッピングモード12のとき ミップマッピング付き球面マッピング*/
u1 v1 u2 v2 u1a v1a u2a v2a
/*マッピングモード13のとき ミップマッピング付き環状マッピング*/
u1 v1 u2 v2 u1a v1a u2a v2a
/*マッピングモード14のとき ミップマッピング付き円筒マッピング*/
u1 v1 u2 v2 u1a v1a u2a v2a
/* No.2 のマッピングデータのパラメ-タ */
:
:
:
:
:
>
以上のようになります。それぞれのマッピングモードの意味は次のようになります。
○全方向マッピング
x,y,zの各方向からマッピングを行い,その3つの割合を法線の方向で決めるというものです。石などのランダムに近い模様にしか使えませんが,ヘソができないのが特徴です。ヘソというのは何かと言うと,地球儀を思い出してください,地球儀は球に平面の紙を張りつけたものですが,北極と南極の部分は模様がすぼまったようになってしまいます。こういったことは平面状のデータを立体に張りつける時に必ずおこる問題なのですが,全方向マッピングではこれが起こりません。kはマッピング時に座標に掛ける係数です。模様の大きさを調整する時に使います。
○平面マッピング
平面マッピングはXY平面方向に広がった平面にマッピングされます。マッピングの座標はu方向はX方向,v方向はY方向となっています。マッピングデータの画像はまず左上を(u1,v1),右下を(u2,v2)とする長方形の範囲にマッピングされ,それを(u1a,v1a)-(u2a,v2a)の範囲で繰り返します。(u1,v1)と(u2,v2)を逆にすると画像も逆になります。
○球面マッピング
球面マッピングはZ軸を地軸とした球面にマッピングされます。マッピングの座標はu方向は経度方向,v方向はブラック緯度方向となっています。緯度・経度ともX軸方向が原点となり,-1<=u<=1 , -1<=v<=1の値をとります。マッピングデータの画像はまず左上を(u1,v1),右下を(u2,v2)とする長方形の範囲にマッピングされ,それを(u1a,v1a)-(u2a,v2a)の範囲で繰り返します。(u1,v1)と(u2,v2)を逆にすると画像も逆になります。
○環状マッピング
環状マッピングは原点を中心にしてXY平面上にマッピングされます。マッピングの座標はu方向は円周方向,v方向は半径方向となっています。円周方向はX軸方向が0となり,-1<=u<=1という値をとり,半径方向は0<=v<=1の値をとります。マッピングデータの画像はまず左上を(u1,v1),右下を(u2,v2)とする長方形の範囲にマッピングされ,それを(u1a,v1a)-(u2a,v2a)の範囲で繰り返します。(u1,v1)と(u2,v2)を逆にすると画像も逆になります。
○円筒マッピング
環状マッピングはZ軸を中心にしてXY平面方向を回転方向とする円筒にマッピングされます。マッピングの座標はu方向は円周方向,v方向は軸方向となっています。円周方向はX軸方向が0となり,-1<=u<=1という値をとり,軸方向vはZ軸と一致します。マッピングデータの画像はまず左上を(u1,v1),右下を(u2,v2)とする長方形の範囲にマッピングされ,それを(u1a,v1a)-(u2a,v2a)の範囲で繰り返します。(u1,v1)と(u2,v2)を逆にすると画像も逆になります。
移動コマンドは物体データ設定部と同じものが使われます。移動はマッピングする物体のローカル座標に対して行われます。
倍率はマッピングファイルのデータに掛ける係数です。色合いを暗くしたいとか,屈折率のマッピングなど欲しい値が1.0をこえるような時に使います。マッピングで得られる値はカラーの時はrgbおのおのが0から1,モノクロの時はカラーのrgbを足して3で割った値,つまりこれも0から1となります。例えば2.5にすると読み取られる値は0から2.5までになることになります。
マッピングは何枚も張ることができます。そのときは次のような規則で重ね合わされます。
(1)どのマッピングの範囲に入らない領域は本来の値(マッピングをかけなかった時の値)をとる。
(2)複数のマッピングが重なった領域は,それぞれのマッピングの値を足し合わせた物になる。
ミップマッピング付きのマッピングモード,つまり10番台のマッピングモードを使うとジャギーの無い滑らかなマッピングが出来ます。この時にはマッピングデータをmap_dataのなかでミップマッピング用のデータを指定しなければなりません。
(→obj,map_data)
obj : 物体を定義する
(形式) obj オブジェクト名 [
/* 「 obj[ ... ] 」の中には,物体定義・オブジェクト扱いの無限遠光源・オブジェクト扱いの点光源・オブジェクト扱いのスポットライト・移動コマンド・ORブロック・ANDブロック・RANGEブロック,オブジェクト名を含むことができます。同じ要素をORブロック・ANDブロック・RANGEブロックはその中に含むことができます。 */
/* 物体定義 */
物体の種類
この物体だけに対する移動コマンド /* ← 省略可 */
色番号or色の名前 < 色番号マッピング >
符号
/* 物体の種類が0のとき 2次曲面 */
l m n a0 a1 a2 a3 a4 a5 a6 a7 a8 a9 オプション
/* ↑ 省略可 */
/* オプション */
n
/* 物体の種類が1のとき 平面 */
l m n a b c オプション /* ← 省略可 */
/* オプション */
n
/* 物体の種類が2のとき 球 */
l m n r オプション /* ← 省略可 */
/* オプション */
n
/* 物体の種類が3のとき 楕円面 */
l m n p q r オプション /* ← 省略可 */
/* オプション */
n
/* 物体の種類が4のとき 円錐面 */
l m n a b c r/t オプション /* ← 省略可 */
/* オプション */
n
/* 物体の種類が5のとき 円柱面 */
l m n a b c r オプション /* ← 省略可 */
/* オプション */
n
/* 物体の種類が6のとき 特殊楕円面 */
l m n a b c q r オプション /* ← 省略可 */
/* オプション */
n
/* 物体の種類が7のとき 一葉双曲面 */
l m n a b c r/t d オプション /* ← 省略可 */
/* オプション */
n
/* 物体の種類が8のとき 二葉双曲面 */
l m n a b c r/t d オプション /* ← 省略可 */
/* オプション */
n
/* 物体の種類が10のとき 円錐面1 */
l m n a b c r/t h オプション /* ← 省略可 */
/* オプション */
r 色番号or色の名前 < 色番号マッピング >
t 色番号or色の名前 < 色番号マッピング >
n
/* 物体の種類が11のとき 円錐面2 */
l m n a b c r/t h オプション /* ← 省略可 */
/* オプション */
r 色番号or色の名前 < 色番号マッピング >
b 色番号or色の名前 < 色番号マッピング >
t 色番号or色の名前 < 色番号マッピング >
n
/* 物体の種類が12のとき 二葉双曲面1 */
l m n a b c r/t d h オプション /* ← 省略可 */
/* オプション */
r 色番号or色の名前 < 色番号マッピング >
t 色番号or色の名前 < 色番号マッピング >
n
/* 物体の種類が13のとき 二葉双曲面2 */
l m n a b c r/t d h オプション /* ← 省略可 */
/* オプション */
r 色番号or色の名前 < 色番号マッピング >
b 色番号or色の名前 < 色番号マッピング >
t 色番号or色の名前 < 色番号マッピング >
n
/* 物体の種類が14のとき 一葉双曲面1 */
l m n a b c r/t d h オプション /* ← 省略可 */
/* オプション */
r 色番号or色の名前 < 色番号マッピング >
b 色番号or色の名前 < 色番号マッピング >
t 色番号or色の名前 < 色番号マッピング >
n
/* 物体の種類が15のとき 円柱1 */
l m n a b c r h オプション /* ← 省略可 */
/* オプション */
r 色番号or色の名前 < 色番号マッピング >
b 色番号or色の名前 < 色番号マッピング >
t 色番号or色の名前 < 色番号マッピング >
n
/* 物体の種類が16のとき 直方体 */
l m n a b c オプション /* ← 省略可 */
/* オプション */
1 色番号or色の名前 < 色番号マッピング >
2 色番号or色の名前 < 色番号マッピング >
3 色番号or色の名前 < 色番号マッピング >
4 色番号or色の名前 < 色番号マッピング >
5 色番号or色の名前 < 色番号マッピング >
6 色番号or色の名前 < 色番号マッピング >
n
/* 物体の種類が20のとき ポリゴン */
<
/* 頂点の定義 */
p 頂点番号 頂点のX座標 頂点のY座標 頂点のZ座標
:
:
:
/* 面の定義 */
P 頂点番号1 頂点番号2 頂点番号3 ・・・・・・・・・ ; オプション
:
:
:
/* オプション */
c 色番号or色の名前 < 色番号マッピング >
s
k 倍率
n
>
;
/* オブジェクト扱いの無限遠光源 */
-1
無限遠光源の方向ベクトルのX成分
無限遠光源の方向ベクトルのY成分
無限遠光源の方向ベクトルのZ成分
無限遠光源の色のR成分
無限遠光源の色のG成分
無限遠光源の色のB成分
無限遠光源の見掛けの大きさ(度)
無限遠光源の光の集まり方
オプション ;
/* オプション */
n
/* オブジェクト扱いの点光源 */
-2
点光源のX座標
点光源のY座標
点光源のZ座標
点光源の色のR成分
点光源の色のG成分
点光源の色のB成分
点光源の光の減衰率
オプション ;
/* オプション */
n
r 到達距離
/* オブジェクト扱いのスポットライト*/
-3
スポットライトの光源のX座標
スポットライトの光源のY座標
スポットライトの光源のZ座標
スポットライトを当てる点のX座標
スポットライトを当てる点のY座標
スポットライトを当てる点のZ座標
スポットライトの色のR成分
スポットライトの色のG成分
スポットライトの色のB成分
スポットライトの広がり方
スポットライトの光の減衰率
オプション ;
/* オプション */
n
r 到達距離
/* 移動コマンド */
:mx パラメ-タ :my パラメ-タ :mz パラメ-タ
:rx パラメ-タ :ry パラメ-タ :rz パラメ-タ
:sx パラメ-タ :sy パラメ-タ :sz パラメ-タ
/* ORブロック */
[
:
:
:
:
:
]
/* ANDブロック */
{
:
:
:
:
:
}
/* RANGEブロック */
(
物体の種類
/* 物体の種類が0のとき 2次曲面 */
a0 a1 a2 a3 a4 a5 a6 a7 a8 a9
/* 物体の種類が1のとき 平面 */
l m n a b c
/* 物体の種類が2のとき 球 */
l m n r
/* 物体の種類が3のとき 楕円面 */
l m n p q r
/* 物体の種類が4のとき 円錐面 */
l m n a b c r/t
/* 物体の種類が5のとき 円柱面 */
l m n a b c r
/* 物体の種類が6のとき 特殊楕円面 */
l m n a b c q r
/* 物体の種類が7のとき 一葉双曲面 */
l m n a b c r/t d
/* 物体の種類が8のとき 二葉双曲面 */
l m n a b c r/t d
; /* ←必ず付ける */
:
:
:
:
:
)
/* オブジェクト名による呼出し */
オブジェクト名 ;
]
(解説)
「 obj[ ... ] 」の中には,物体定義・オブジェクト扱いの無限遠光源・オブジェクト扱いの点光源・オブジェクト扱いのスポットライト・移動コマンド・ORブロック・ANDブロック・RANGEブロック・オブジェクト名を含むことができます。同じ要素をORブロック・ANDブロック・RANGEブロックはその中に含むことができます。それぞれの要素について解説します。
○オブジェクト名
「obj」と「[」の間に,アルファベットで始まるオブジェクト名を宣言することができます。これによってこのオブジェクトに名前を付けることができます。物体定義と同じように「オブジェクト名 ;」と指定するとオブジェクト名でしめされるobjグループを呼び出すことができます。一箇所でパーツを定義しておけばあとから何回でも呼ぶことができます。
(例)
obj /* ここがメインのobj */
[
part1 ;
:mx 10
part2 ;
] /* ↑ここはスペースを入れること */
obj part1
[
物体定義など・・・・
part2 ;
]
obj part2
[
物体定義など・・・・
]
ソースデータには必ず1つ以上の「obj」が存在しなければならず,またそのうちの必ず1つはオブジェクト名なしの「obj」がなければなりません。このオブジェクト名なしの「obj」をEASTRAYはメインの物体定義とみなして処理します。その他のオブジェクト名付きの「obj」は全てパーツとみなし,メインのオブジェクト名なしの「obj」,またはその他の「obj」から呼び出されなければ処理されません。
オブジェクト名による呼出しにおいて,互いに呼び会うような呼出し,ループを作るような呼出しはできず,エラーとなります。これは呼出しが無限におこなわれることになるからです。
(例)
obj
[
part1 ;
]
obj part1
[
物体定義など・・・・
part2 ; /* お互いに呼びあっている例 */
]
obj part2
[
物体定義など・・・・
part1 ; /* お互いに呼びあっている例 */
]
(例)
obj
[
part1 ;
]
obj part1
[
物体定義など・・・・
part2 ; /* ループになっている例 */
]
obj part2
[
物体定義など・・・・
part3 ; /* ループになっている例 */
]
obj part3
[
物体定義など・・・・
part1 ; /* ループになっている例 */
]
○物体定義
「物体の種類」は,どの様な物体を定義するかを指定します。これによって「符号」のあとに続くパラメ-タが違ってきます。
「この物体だけに対する移動コマンド」は,この物体だけに作用する移動コマンドです。
「色番号」は,「color」の中で決められた色番号のことで,これによって物体の色が決定されます。「色番号」の代わりに「color」の中で決めた「色の名前」で色を指定することもできます。「色の名前」で指定した方が,「color」の中で順番がかわったときでも変更がいらないので便利です。
色番号に対してもマッピングを行うことができます。「色番号マッピング」というのがそれで,このマッピングは他のマッピングと比べて特殊な処理が行われます。マッピングされる値が0から1までの実数ではなく,その画像の1ピクセルあたりのビット数に対応する整数が使われる,ただしfalなどの24bit系のファイルはRの8ビットだけが使われます。この整数の値を「色番号」に足したものが実際に物体の色として使われます。
マッピングの範囲外は初めの「色番号」を使います。マッピングは複数のデータを重ねて使うことができます。そのときは次のようなアルゴリズムのもとで行われます。まず,一番目のマッピングでマッピングの範囲内でかつマッピングの値が0でないときはその値がマッピングの値とされます。マッピングの範囲外,またはマッピングの値が0のときには2番目のマッピングを評価します。この時は1番目のマッピングと同じアルゴリズムが使われ,値がきまるまで順にマッピングデータを適用していきますが,全てのマッピングの範囲外,または全てのマッピングで値が0のときは色番号が使われます。
つまりこれは「属性マッピング」を意味しているわけです。このマッピングには全方向マッピングモードは使えません。
マッピングや異方性反射などは座標・ベクトル等を使いますが,物体のローカル座標に対して設定されます。
「符号」は物体のどちら側を物質の詰まった「内部」とするかを指定します。この値が1のときは普通の内部,分かりやすく球で言えば球の有限な側が内部とされ,-1だと逆転されます。
このあとに続くパラメ-タは「物体の種類」によって変わってきます。それぞれの物体ごとに解説をします。
〔 物体の種類: 0 〕 2次曲面
〔 パラメ-タ 〕 a0 a1 a2 a3 a4 a5 a6 a7 a8 a9 オプション
/* オプション */
n
直接,2次曲面を指定します。それぞれのパラメ-タは
a0*x^2 + a1*y^2 + a2*z^2 + a3*xy + a4*yz + a5*zx + a6*x + a7*y + a8*z + a9 = 0
という意味を表します。この物体にボクセル分割は効きません。
「n」オプションをつけるとこの物体は影ができません。ただし,他の物体の影はこの物体上にはできます。
〔 物体の種類: 1 〕 平面
〔 パラメ-タ 〕 l m n a b c オプション
/* オプション */
n
中心が(l,m,n)で,法線ベクトルが(a,b,c)という平面を指定します。法線の向いた方が外側で,その反対側が物体の内側となります。この物体にボクセル分割は効きません。
「n」オプションをつけるとこの物体は影ができません。ただし,他の物体の影はこの物体上にはできます。
〔 物体の種類: 2 〕 球
〔 パラメ-タ 〕 l m n r オプション
/* オプション */
n
中心が(l,m,n)で,半径がrの球を指定します。中心がある側が内部です。この物体はボクセル分割が有効です。
「n」オプションをつけるとこの物体は影ができません。ただし,他の物体の影はこの物体上にはできます。
〔 物体の種類: 3 〕 楕円面
〔 パラメ-タ 〕 l m n p q r オプション
/* オプション */
n
中心が(l,m,n)で,中心からX,Y,Z方向がそれぞれp,q,rの長さの楕円面を指定します。中心がある側が内部です。この物体はボクセル分割が有効です。
「n」オプションをつけるとこの物体は影ができません。ただし,他の物体の影はこの物体上にはできます。
〔 物体の種類: 4 〕 円錐面
〔 パラメ-タ 〕 l m n a b c r/t オプション
/* オプション */
n
中心が(l,m,n)で,円錐の回転軸の方向ベクトルが(a,b,c),中心から方向ベクトルの方向にtだけ進んだ時に半径がrになるような円錐面を指定します。r/tとはつまり広がり具合を表します。中心軸を含む側が内部です。この物体にボクセル分割は効きません。
「n」オプションをつけるとこの物体は影ができません。ただし,他の物体の影はこの物体上にはできます。
〔 物体の種類: 5 〕 円柱面
〔 パラメ-タ 〕 l m n a b c r オプション
/* オプション */
n
中心が(l,m,n)で,円柱の回転軸の方向ベクトルが(a,b,c),半径がrの円柱面を指定します。中心軸を含む側が内部です。この物体にボクセル分割は効きません。
「n」オプションをつけるとこの物体は影ができません。ただし,他の物体の影はこの物体上にはできます。
〔 物体の種類: 6 〕 特殊楕円面
〔 パラメ-タ 〕 l m n a b c q r オプション
/* オプション */
n
「n」オプションをつけるとこの物体は影ができません。ただし,他の物体の影はこの物体上にはできます。
中心が(l,m,n)で,中心から方向ベクトルの方向・それと直交方向がそれぞれq,rの長さの楕円面を指定します。中心がある側が内部です。この物体はボクセル分割が有効です。
〔 物体の種類: 7 〕 一葉双曲面
〔 パラメ-タ 〕 l m n a b c r/t d オプション
/* オプション */
n
中心が(l,m,n)で,回転軸の方向ベクトルが(a,b,c),中心から方向ベクトルの方向にtだけ進んだ時に半径がrになるような円錐面に漸近し,中心での半径がdである一葉双曲面を指定します。r/tとはつまり広がり具合を表します。中心軸を含む側が内部です。この物体にボクセル分割は効きません。
「n」オプションをつけるとこの物体は影ができません。ただし,他の物体の影はこの物体上にはできます。
〔 物体の種類: 8 〕 二葉双曲面
〔 パラメ-タ 〕 l m n a b c r/t d オプション
/* オプション */
n
中心が(l,m,n)で,回転軸の方向ベクトルが(a,b,c),中心から方向ベクトルの方向にtだけ進んだ時に半径がrになるような円錐面に漸近し,中心からdだけ離れた回転軸上の点で交わる一葉双曲面を指定します。r/tとはつまり広がり具合を表します。中心軸を含む側が内部です。この物体にボクセル分割は効きません。
「n」オプションをつけるとこの物体は影ができません。ただし,他の物体の影はこの物体上にはできます。
〔 物体の種類:10 〕 円錐面1
〔 パラメ-タ 〕 l m n a b c r/t h オプション
/* オプション */
r 色番号 < 色番号マッピング >
t 色番号 < 色番号マッピング >
n
中心が(l,m,n)で,円錐の回転軸の方向ベクトルが(a,b,c),中心から方向ベクトルと逆の方向にtだけ進んだ時に半径がrになるような円錐面で,中心からhだけ離れた距離で平面でカットされた物体を指定します。円錐は方向ベクトル側だけにできます。r/tとはつまり広がり具合を表します。中心軸を含む側が内部です。この物体はボクセル分割が有効です。
オプションを指定すると各面ごとに色を指定することができます。「r」は円錐の曲面部分,「b」は底面の平面の部分を表します。
「n」オプションをつけるとこの物体は影ができません。ただし,他の物体の影はこの物体上にはできます。
〔 物体の種類:11 〕 円錐面2
〔 パラメ-タ 〕 l m n a b c r/t h オプション
/* オプション */
r 色番号 < 色番号マッピング >
b 色番号 < 色番号マッピング >
t 色番号 < 色番号マッピング >
n
中心が(l,m,n)で,円錐の回転軸の方向ベクトルが(a,b,c),中心から方向ベクトルと逆の方向にtだけ進んだ時に半径がrになるような円錐面で,中心からhだけ離れた距離で平面でカットされた物体を指定します。円錐は両側にできます。r/tとはつまり広がり具合を表します。中心軸を含む側が内部です。この物体はボクセル分割が有効です。
オプションを指定すると各面ごとに色を指定することができます。「r」は曲面部分,「b」は底面の平面の部分,「t」は上面の平面の部分を表します。
「n」オプションをつけるとこの物体は影ができません。ただし,他の物体の影はこの物体上にはできます。
〔 物体の種類:12 〕 二葉双曲面1
〔 パラメ-タ 〕 l m n a b c r/t d h オプション
/* オプション */
r 色番号 < 色番号マッピング >
t 色番号 < 色番号マッピング >
n
中心が(l,m,n)で,回転軸の方向ベクトルが(a,b,c),中心から方向ベクトルと逆の方向にtだけ進んだ時に半径がrになるような円錐面に漸近し,中心からdだけ離れた回転軸上の点で交わる一葉双曲面で,中心からhだけ離れた距離で平面でカットされた物体を指定します。二葉双曲面は方向ベクトル側だけにできます。r/tとはつまり広がり具合を表します。中心軸を含む側が内部です。この物体はボクセル分割が有効です。
オプションを指定すると各面ごとに色を指定することができます。「r」は曲面部分,「b」は底面の平面の部分を表します。
「n」オプションをつけるとこの物体は影ができません。ただし,他の物体の影はこの物体上にはできます。
〔 物体の種類:13 〕 二葉双曲面2
〔 パラメ-タ 〕 l m n a b c r/t d h オプション
/* オプション */
r 色番号 < 色番号マッピング >
b 色番号 < 色番号マッピング >
t 色番号 < 色番号マッピング >
n
中心が(l,m,n)で,回転軸の方向ベクトルが(a,b,c),中心から方向ベクトルと逆の方向にtだけ進んだ時に半径がrになるような円錐面に漸近し,中心からdだけ離れた回転軸上の点で交わる一葉双曲面で,中心からhだけ離れた距離で平面でカットされた物体を指定します。二葉双曲面は両側にできます。r/tとはつまり広がり具合を表します。中心軸を含む側が内部です。この物体はボクセル分割が有効です。
オプションを指定すると各面ごとに色を指定することができます。「r」は曲面部分,「b」は底面の平面の部分,「t」は上面の平面の部分を表します。
「n」オプションをつけるとこの物体は影ができません。ただし,他の物体の影はこの物体上にはできます。
〔 物体の種類:14 〕 一葉双曲面1
〔 パラメ-タ 〕 l m n a b c r/t d h オプション
/* オプション */
r 色番号 < 色番号マッピング >
b 色番号 < 色番号マッピング >
t 色番号 < 色番号マッピング >
n
中心が(l,m,n)で,回転軸の方向ベクトルが(a,b,c),中心から方向ベクトルと逆の方向にtだけ進んだ時に半径がrになるような円錐面に漸近し,中心での半径がdである一葉双曲面で,中心からhだけ離れた距離で平面でカットされた物体を指定します。一葉双曲面の長さは2hとなります。r/tとはつまり広がり具合を表します。中心軸を含む側が内部です。この物体はボクセル分割が有効です。
オプションを指定すると各面ごとに色を指定することができます。「r」は曲面部分,「b」は底面の平面の部分,「t」は上面の平面の部分を表します。
「n」オプションをつけるとこの物体は影ができません。ただし,他の物体の影はこの物体上にはできます。
〔 物体の種類:15 〕 円柱1
〔 パラメ-タ 〕 l m n a b c r h オプション
/* オプション */
r 色番号 < 色番号マッピング >
b 色番号 < 色番号マッピング >
t 色番号 < 色番号マッピング >
n
中心が(l,m,n)で,円柱の回転軸の方向ベクトルが(a,b,c),半径がrの円柱面で,中心からhだけ離れた距離で平面でカットされた物体を指定します。円柱の長さは2hとなります。中心軸を含む側が内部です。この物体はボクセル分割が有効です。
オプションを指定すると各面ごとに色を指定することができます。「r」は曲面部分,「b」は底面の平面の部分,「t」は上面の平面の部分を表します。
「n」オプションをつけるとこの物体は影ができません。ただし,他の物体の影はこの物体上にはできます。
〔 物体の種類:16 〕 直方体
〔 パラメ-タ 〕 l m n a b c オプション
/* オプション */
1 色番号 < 色番号マッピング >
2 色番号 < 色番号マッピング >
3 色番号 < 色番号マッピング >
4 色番号 < 色番号マッピング >
5 色番号 < 色番号マッピング >
6 色番号 < 色番号マッピング >
n
中心が(l,m,n)で,中心からX,Y,Z方向がそれぞれa,b,cの長さの直方体を指定します。中心がある側が内部です。直方体の各辺の長さはそれぞれ2a,2b,2cとなります。この物体はボクセル分割が有効です。
オプションを指定すると各面ごとに色を指定することができます。「1」はxのプラス側の平面部分,「2」はxのマイナス側の平面部分,「3」はyのプラス側の平面部分,「4」はyのマイナス側の平面部分,「5」はzのプラス側の平面部分,「6」はzのマイナス側の平面部分,を表します。
「n」オプションをつけるとこの物体は影ができません。ただし,他の物体の影はこの物体上にはできます。
〔 物体の種類:20 〕 ポリゴン
〔 パラメ-タ 〕
<
/* 頂点の定義 */
p 頂点番号 頂点のX座標 頂点のY座標 頂点のZ座標
:
:
:
/* 面の定義 */
P 頂点番号1 頂点番号2 頂点番号3 ・・・・・・・・・ ; オプション
:
:
:
/* オプション */
c 色番号 < 色番号マッピング >
s
k 倍率
n
>
まず,パラメ-タは「< >」で囲みます。その中の要素は「頂点の定義」と「面の定義」という2種類があります。まず,頂点をすべて定義したあと面の定義を行います。
「頂点の定義」はまず「p」を書いたあとに頂点番号,頂点のX座標,頂点のY座標,頂点のZ座標を書きます。頂点番号は0以上の整数で与えますが,重複してはいけません。
「面の定義」はまず「P」を書いたあとに頂点番号1 頂点番号2 頂点番号3 ・・・・・・・・・というふうに頂点番号を指定していきます。「;」が終了記号です。頂点番号は面にならないので最低でも3つは指定しないといけません。頂点番号1,2,3・・・とたどっていくときに,反時計周りに見える時に視点がある側が外側,その反対側が内部となるように法線が計算されます。
「;」のあとにはオプションをつけることができます。オプションには「c」「s」「k」の3つがあります。この3つは同時に使うことができます。「c」はその面に色を指定します。これを指定しないと「< >」の前に指定した色番号になります。「s」を指定するとその面にスムースシェーディングをかけます。「k」は,スムースシェーディングのときにその面の法線がどれくらい関与するかをしていします。この値が大きいほど周りの面に与える影響が大きくなります。指定しないと1.0になります。「n」オプションをつけるとこの物体は影ができません。ただし,他の物体の影はこの物体上にはできます。
ポリゴンは体積がないため,OR・AND・RANGEといった論理演算の影響を受けません。また,ポリゴンでも屈折する透明体を使うことができます。ただし,ポリゴンで作った物体が閉じていないと保証の限りではありません。
○無限遠光源
「obj」の中でも無限遠光源の定義が出来ます。これは「e_light」とパラメ-タは同一となっています。違いは無限遠光源からくる光の方向を表すベクトルが,移動コマンドによって移動する点です。例えば太陽の位置が変わっているだけの画像を何枚も作りたい,というような場合に使えるでしょう。
○点光源
「obj」の中でも点光源の定義が出来ます。これは「p_light」とパラメ-タは同一となっています。違いは点光源の点の座標が,移動コマンドによって移動する点です。物体に光源が付いていて,物体を回転させると光源も回転してほしいというような場合に有効です。
○スポットライト
「obj」の中でもスポットライトの定義が出来ます。これは「p_light」とパラメ-タは同一となっています。違いはスポットライトの発光している点の座標と光をあてる点の座標が,移動コマンドによって移動する点です。物体に光源が付いていて,物体を回転させると光源も回転してほしいというような場合(例えば自動車のライト等)に有効です。
○移動コマンド
物体を移動するために使います。「:」のあとの文字が移動の種類を決めます。
「m」は平行移動を意味します。このあとに続く「xyz」という文字によってそれぞれの座標軸方向に平行移動をさせます。
「r」は回転を意味します。このあとに続く「xyz」という文字によってそれぞれの座標軸を回転軸として回転を行います。回転の角度は度であらわし,回転は右周りに行われます。
「s」は拡大・縮小を意味します。このあとに続く「xyz」という文字によってそれぞれの座標方向に拡大・縮小を行います。あとに続くパラメ-タが1.0のときは変化がなく,絶対値が1.0より小さい時は縮小,大きい時は拡大,-1.0の時は反転を意味します。
「mtx」は直接移動コマンドの4*4のアフィン行列を指定します。パラメ-タは合計16個になり,以下のようなアフィン変換をおこなうと考えて
|a11 a12 a13 a14| |x| |x'|
|a21 a22 a23 a24| * |y| = |y'|
|a31 a32 a33 a34| |z| |z'|
|a41 a42 a43 a44| |w| |w'|
以下のような順番に実際にはパラメ-タを指定します。
:mtx a11 a12 a13 a14
a21 a22 a23 a24
a31 a32 a33 a34
a41 a42 a43 a44
移動コマンドは物体に近いものから先に処理が行われます。例えば
:mx 100 :ry 20 :sz 2 物体
という状況なら,数学的に演算順序をイメージすると
:mx 100 ( :ry 20 ( :sz 2 ( 物体 ) ) )
という感じになります。
また,OR・AND・RANGEブロックの中で定義された移動コマンドはそのブロック内か,自分の中に含まれるブロック内で有効で,自分より外側のブロックには影響を与えません。
○ORブロック
物体定義・オブジェクト扱いの無限遠光源・オブジェクト扱いの点光源・オブジェクト扱いのスポットライト・移動コマンド・ORブロック・ANDブロック・RANGEブロックを含むことができます。
○ANDブロック
物体定義・オブジェクト扱いの無限遠光源・オブジェクト扱いの点光源・オブジェクト扱いのスポットライト・移動コマンド・ORブロック・ANDブロック・RANGEブロックを含むことができます。
○RANGEブロック
物体定義・オブジェクト扱いの無限遠光源・オブジェクト扱いの点光源・オブジェクト扱いのスポットライト・移動コマンド・ORブロック・ANDブロック・RANGEブロックを含むことができます。
RANGEブロックの初めにはRANGEプリミティブのパラメ-タを書きます。まず「物体の種類」がきてそのあとにそれぞれのパラメ-タがつづきます。このパラメ-タは物体の定義での各物体のパラメ-タとおなじものです。RANGEプリミティブとして使えるのは「物体の種類」が0から8番までの物体です。RANGEブロックの中の全ての物体はこのRANGEプリミティブの中になければなりません。
RANGEブロックを使うと,レイのトレースの際,レイがRANGEプリミティブにあたらない場合はそのRANGEブロック内の全ての物体に当たらないと解釈してそのRANGE内の物体との交点計算をしないので,物体がたくさんあつまっているところをRANGEプリミティブで覆うと高速化が望めます。
(→color)
・終わりに
このマニュアルはEASTRAY本体の配付条件と同じ条件のもとに配付されます。
Copyright (C) T.Higashi 1990,1991,1992,1993,1994