シーン記述言語解説

Copyright (C) 1998 Jun Mizutani All rights reserved. (2/8/98)

[シーンファイル] [識別子] [浮動小数点数] [ベクトルと演算] [カラー] [文字列] [コメント] [命令]
【注意】POV-Ray 3.02付属のドキュメント(povdoc.txt)とソース(povuni_s.tgz)の一部を見て, 自分なりに理解したつもりの事柄をまとめたものです.間違いや誤解もある(必ず)と思います. お気づきの点をお知らせ頂けると幸いです.


POV-Rayのシーン定義は,拡張子が pov のテキストファイルに記述 しますが,そのシーン定義には「シーン記述言語」を使用します.

この「シーン記述言語」の言語機能を中心として解説します.
識別子の部分以外,通常はあまり使わないと思います :-)

「シーン記述言語」は三次元のシーンの記述とともに,条件分岐,繰り返し, テキスト出力などプログラミング言語としての機能が備わっています.

「シーン記述言語」で記述されたファイルはレンダリング前にインタープリタ が解釈実行(評価)してシーンを確定した後にレンダリングされます.


このページでは「オブジェクト」という語を実際に空間に存在する「物」と いう意味で使用します.「オブジェクト」という単語は興味の対象としてい るものすべてに使用できてしまうので,あいまいになることを避けるため 「存在する物」例えば「球」とか「立方体」とか「カメラ」に限定して使用 します.


シーンファイル

POV-Ray の シーンファイルの記述は,フリーフォーマットであり,空白,改行を自由に 挿入することができます. ただしキーワード,識別子の途中に挿入することはできません.

また // で始まるコメント(後述)においては改行は 意味を持ちます(コメントの終わり).


識別子


日本語では通常は「識別子」と翻訳されていますが,これは何らかの物 (数値,オブジェクト等)につけた名前のことです.コンピュータの言語 では通常, 「変数」と呼ばれるものです.しかしPOV-Rayのシーンファイル では「定数」的な使い方が多くされていますので「識別子」という用語 になったのでしょうか?

POV-Rayでは使用する前に宣言しておく必要はなく,値を代入した時点で 代入された値(オブジェクト)によって識別子の型が決まります.
識別子名は最初の文字が英字で英数字とアンダースコアが続くで40文字まで の長さです.

#declare 識別子名 = 対象

識別子代入できる対象

すべてのオブジェクトに加えて,以下のようにほとんど何でも代入可能です.
浮動小数点数値 ベクトル カラー 文字列
テクスチャ (texture) ピグメント (pigmento) 法線 (normal) 座標変換 (transform)
仕上げ (finish) 光輪 (halo) カラーマップ (color_map) ピグメントマップ (pigment_map)
勾配マップ (slope_map) 法線マップ (normal_map) カメラ (camera) 光源(light_source)
雰囲気 (atmosphere) 霧 (fog) 虹 (rainbow) 天球 (sky_sphere)

識別子のスコープ

すべてグローバルです.スコープという概念はありません.

定義済み識別子

識別子
pi 3.1415926535897932384626
true 1
yes 1
on 1
false 0
no 0
off 0
u <1,0>
v <0,1>
x <1,0,0>
y <0,1,0>
z <0,0,1>
t <0,0,0,1>
version 3.0

浮動小数点数値

数値はすべて浮動小数点数で扱われます.
比較演算で 1.0e-10 より小さい値は 0 として扱われます.したがって2つ数値の比較は, その差の絶対値が1.0e-10 より小さい場合には同じと判断されます.同様に論理式において 絶対値が 1.0e-10 より大きい場合には真,小さい場合には偽となります.

演算子(優先順位の順)

  1. ( ) 括弧内は最優先
  2. +A, -A, !A 単項演算子 -:符号反転,+:何もしない, !:論理否定 "not"
  3. A * B, A / B 積 と 除
  4. A + B, A - B 和 と 差
  5. A > B, A >= B, A < B, A <= B, A != B, A = B 比較演算
  6. A & B, A | B 論理積,論理和
  7. (C ? A : B) Cが真なら A,偽なら B

ベクトルとその演算

< と > に囲まれた浮動小数点数値.2次元から5次元のベクトルが使用できます.
< 1.0 , 2.9, 0.03 >

ベクトルの演算

<1,2,3> + <4,5,6> は <1+4, 2+5, 3+5>と同じです.
<1,2,3> + 2 は <1+2, 2+2, 3+2> と同じです.
同様に <1,2,3> * <4,5,6> は <1*4, 2*5, 3*5>と同じです.
<1,2,3> * 2 は <1*2, 2*2, 3*2> と同じです.

ベクトルの要素の取得

位置を示すベクトルを POINT1 とした場合,1つの要素の取得は,例えば POINT1.x, POINT1.y の形式で取得できます.

カラー

カラーは5つの要素を持つ5次元のベクトルです.
<red, green, blue, filter, transmit>
各要素の値の範囲と意味を示します.
  1. red : 0.0 - 1.0 赤の強度
  2. green : 0.0 - 1.0 緑の強度
  3. blue : 0.0 - 1.0 青の強度
  4. filter : 0.0 - 1.0 透過光の強度
  5. transmit : 0.0 - 1.0 物質の色の影響を受けない透過光の強度
カラーベクトルの指定は以下の方法のどれかで行います.
  1. color rgb < r, g, b >
  2. color rgbf < r, g, b, f >
  3. color rgbt < r, g, b, t >
  4. color rgbft < r, g, b, f, t >
カラーベクトルを COLOR1 とした場合,1つの要素の取得は,例えば COLOR1.red, COLOR1.filterの形式で取得できます.

文字列

2重引用符に囲まれた文字 "STRING"

文字列中の特殊記号

\a 0x07 ベル
\b 0x08 Back Space
\f 0x0c Form Feed
\n 0x0a Line Feed
\r 0x0d Carriage return
\t 0x09 TAB
\v 0x0b VT
\\ 0x5c \
\0 0x00 NULL
\' 0x27 '
\" 0x22 "

コメント


C++と同じ形式が使用できます.つまり,
  1. //から行末まで
  2. /* から */まで(改行を含んでも良い)


命令 (Language Directive)

条件分岐

  1. #if (条件式)
    // 条件式が真の場合に実行される
    #else
    // 条件式が偽の場合に実行される
    #end

  2. #ifdef (識別子名)
    // 識別子が宣言済みの場合に実行される
    #else
    // 識別子が宣言済みでない場合に実行される
    #end

  3. #ifndef (識別子名)
    // 識別子が宣言済みでない場合に実行される
    #else
    // 識別子が宣言済みの場合に実行される
    #end

  4. #switch (値)
    #case (TEST_1)
    // 値が TEST_1 と一致した場合に実行される
    #break
    #range (LOW_1,HIGH_1)
    // 値が LOW_1 と High_1の範囲内ならば実行される
    #break
    #else
    // case や range に一致しないとき解釈される
    #end

繰り返し

#while (条件式)
// 条件式が真の間実行される
#end

テキスト出力

Linuxで使用する場合は #error以外は同じ動作をします.

  1. #debug STRING
    デバッグメッセージ用ストリームに表示します.

  2. #error STRING
    致命的エラーメッセージの出力,表示後 POV-Ray は終了します.

  3. #render STRING
    レンダリング時のオプションを表示するストリームに出力します.

  4. #statistics STRING
    1フレームをレンダリング後の統計情報を表示するストリームに出力します.

  5. #warning STRING
    ワーニングを表示するストリームに出力します.


POV-Rayのバージョンを設定

#version 1.0
互換性の確保のため言語のサポートバージョンを切り替えることができます.定義済み識別子の versionと組み合わせて,部分的に異なるバージョンのシーン を使用できます.
  #declare Temp_Vers = version    // 現在のバージョンを保存
  #version 1.0                    // バージョン 1.0 モードに変更

  ... // この部分はバージョン 1.0 のシーン記述言語を使用できる.

  #version Temp_Vers              // 現在のバージョンを保存

テクスチャのデフォルト属性の設定

POV-Rayは起動時にデフォルトのテクスチャを設定します.このデフォルトテクスチャが オブジェクトにコピーされ,テクスチャを明示的に指定した場合には,その指定した部分が 上書きされます.この起動時のデフォルトテクスチャを#default で変更することができます.

    #default {
        texture {
            pigment {...}
            normal {...}
            finish {...}
        }
    }
指定した部分のデフォルトのテクスチャが変更され,何度も変更すことができます.



[CONTENTS] [PREVIOUS] [NEXT]

[HOME]


ご意見・ご感想は,mizutani.jun@nifty.ne.jp まで.