Tips > POV-ray

POV-ray tips



名前:
コメント:
  • 左手系に合わせたview.incを整備しました。頃合を見てuploadします。 -- matui (2008-05-26 13:05:25)


Introduction

3Dgraphicsを生成(rendering)するソフトです。本来UNIX系のソフトであったものが現在いくつかのプラットホームに移植されています。 freewareでありながら、正確な立体図を比較的簡便に描けるので、科学論文の図作製に重宝するソフトです。ここでは、物理化学の分野での図の作成例について紹介します。他に、周辺のソフトとしてPOV-Rayを出力先に利用した3D-CADなどがあります。

Download

official web pageにて最新の情報が得られます。パッケージをdownloadしてくるとインストーラーが付属してきますので、自動的にインストールをすることできます。

概要

例1:球の描画

まずは球を例に図描画マクロの最小限の構成について説明します。 POV-Rayのマクロ(*.povファイル)は通常のテキストファイルです。付属のエディタでマクロを記述します。
camera{location <1,1,1> look_at <0,0,0>}
light_source{<1,1,0>*30 color rgb<1,1,1>}
sphere{<0,0,0> 0.5 pigment{rgb<1,1,1>} }
上記の三行で球の立体図を描くことができます。半径0.5、中心 <0,0,0> の白球を <30,30,0> から白色光で照らし、 <1,1,1> から <0,0,0> を観る、という記述です。 camera{}、 light_source{}、 sphere{}といったobjectの後の {}括弧内に位置や大きさ、色などの情報を並べます。位置は直交座標系で、色はrgb指定で入力します。 light_source{}や background{}の色には colorを、 sphere{}や plane{}には pigmentや textureを用います。カメラ(視点)、光源、物体が最低限必要な構成要素です。実際にはいくつかの基本図形の組み合わせにカメラと光源の設定を付け加えることによって図を作成していきます。基本図形には、例えば sphere、 box、 prismなどの3D物体と plane、 disk、 triangleなどの2D物体があり、 scale、 rotation、 translateなどの移動操作ができます。また前者は union、 intersection、 differenceなどの和差演算ができます。
renderに先立ち上記のマクロファイル*.povの保存を求められます。画像出力は*.bmpファイルでoptionでの指定先に保存されます。 *.bmpファイルのドット数を指定することができます。下図はrender実行の出力です。
blankimgプラグインエラー:ご指定のファイルがありません。アップロード済みのファイルを指定してください。
半径1の球を座標[1,1,1]から見た。

数値、ベクトル、物体を#declare文を使って新たに定義したり、 #if #end文や #while #endループを使ってプログラムを組んだりすることもできます。 #open #read #write #close文を使って外部から数値を読み込むことができるので、実験データを立体表現する際に役立つでしょう。
また適宜、準備された*.INC定義ファイルをHeaderで指定することによって color.incやtexture.incのライブラリを使用することができます。 animation機能もあります。

例2:BCC格子

詳細は充実したHelpファイルが添付されているのでそちらに委ねることにして、ここで、 #if #end文や #while #endループを使用した例を示すこととします。繰り返し構文を用いてBCC格子を作図してみました。今回は背景を白くしました。

camera{location <1,0.5,0.5>*5 look_at <0,0,0>}
light_source{<1,1,0>*30 color rgb<1,1,1> shadowless}
background{color rgb<1,1,1>}

#declare XCount =-1; #while (XCount < 2)
#declare YCount =-1; #while (YCount < 2)
#declare ZCount =-1; #while (ZCount < 2)
#declare atom=sphere{x*0 0.5 translate x*XCount+y*YCount+z*ZCount}
object{atom pigment{rgb<1,0,0>}}
#if (XCount>-1&YCount>-1&ZCount>-1)
object{atom pigment{rgb<0,1,0>} translate <1,1,1>*-0.5}
#end
#declare ZCount = ZCount+1; #end
#declare YCount = YCount+1; #end
#declare XCount = XCount+1; #end

blankimgプラグインエラー:ご指定のファイルがありません。アップロード済みのファイルを指定してください。
半径1の球を並べて作ったBCC格子。

view.inc

POV-rayのプログラミングにおける強力な点は、 #declare / #macro - #end / #include #といったコマンドによる置き換えにあるといえます。これを用いて新たなコマンドや物体の定義が行えるほか、こうして蓄積したコマンド群を.incファイルとして保存し、適宜読み込んで使うことができる点です。こうしてすっきりした判りやすいコードを記述することができます。

さて、立体を手にとっていろいろな角度から眺めてみるように、実際にその立体図がもっとも分かりやすい視点、照明を試行錯誤して探していきます。 POV-Rayでは直交座標系を使用しますが、上記の目的のためには視点や光源の位置を曲座標系で入力し、直交座標系に変換する方が、使用上ずっと楽です。そのためのview.incを作製しました。これを他の.incファイル(POV-ray本体のフォルダの/include/の下にあります)と一緒の場所に保存することでいつでも使用することができるようになります。なお、極座標系の変換についての pdf file (28 kB)もご覧になれます。

POV-rayの自作のinclude file(view.inc)の内容を紹介します。

Header:

// ======================================================== 
// Persistence of Vision Ray Tracer version 3.6 Include File 
// File: view.inc 
// Author: Fumihiko Matsui 
// Description: light and camera setups
// ======================================================== 
#include "colors.inc" // Standard Color definitions 
#include "metals.inc" 
colors.incとmetals.incを読み込んでいます。 Red、Green、Blueやいくつかの模様が予約語として使えるようになります。

光源の設定(極座標系):

まずは極座標系を用いた光源の設定です。
ZPl: Polar angle of Light (in rad)
ZAz: Azimuth of Light (in rad)
ZDi: Distance of Light
ZPos: position of light
#macro Light(ZPl, ZAz, ZDi,Zr,Zg,Zb)
#declare ZPos
=<-sin(ZPl)*sin(ZAz),cos(ZPl),sin(ZPl)*cos(ZAz)>*ZDi;
light_source{0*x 
color red Zr  green Zg  blue Zb 
translate ZPos shadowless}
background {White}
#end

立方根の求め方:

これはPOV-rayで強度計算の変換式に立方根が出てきてために作ったマクロです。以前「立方根の求め方」をwebで探していて電卓で簡単にできる方法が紹介されていたのを見つけ、いたく感動しました。それを基にしています。 
#macro Cubrt(Val) 
#if (Val=0) #declare Out=0; #end
#if (Val<0) #declare Val=-Val;
#if (Val>0)
#declare Out=sqrt(sqrt(Val*
sqrt(sqrt(Val*
sqrt(sqrt(Val*sqrt(sqrt(Val*Val)) )) )) ));
#end
Out
#end 

注意とヒント

思いつくままに引っかかりやすい注意点とヒントを並べてみました。

文法関連


  • 大文字、小文字は別として認識される。
  • //以降はcomment文として無視される。複数行は/* ... */ではさめばよい。
  • #declare節で数値代入をする際には最後にセミコロン(;)が必要であるが、 objectを代入するときはいらない。
  • 予約語x, y, z, pi, sphere, ...は#declare節での宣言名に使えない。
  • xは<1,0,0>と定義されている。したがってx*0=<0,0,0>である。
  • 定義したobjectを描画する際はobject{atom}というようにobjectであることを明示する。objectの色や移動操作などは後からも付け加えることができる。
  • 角度の単位はradianを用いる。例えばcos(pi/2)など。ただし、回転操作にはdegreeを用いる。例えば、y軸周り45^{\circ}はrotation y*45など。
  • box{ }のようにベクトルを二つパラメータとして要求するobjectがある。
  • <1,1,1> <2,2,2>は二つのベクトルと認識されるが <1,1,1>-<1,1,1>は演算を行い、一つとみなされるので間に,を入れる必要がある。

出力関連

  • 座標は左手Cartesian系。y軸が画面上方になる。次節参照。
  • 3次元物体同士は和差操作 union intersection differenceができるが、2次元物体はできない。
  • 文字表示も可能。いくつかのフォントが用意されている。
  • 物体の色pigmentでの指定で rgbの代わりに、 rgbtを用いることができる。物体を透明にするには TRANSPARENT=1とすればよい。

last modified:0000-00-00 00:00:00

以下は本サイト@wikiのスポンサー広告です。

最終更新:2008年05月26日 13:05