Hamalガイド
概要
HamalはPython 3スクリプトで、ポイントセット、無方向図、カーブ、ベクトルフィールド、メッシュサーフェスなどの3 DジオメトリデータをPOV-Rayシーンファイルに変換します.つまり、Hamalはデータを生産せず、グラフィックレンダリングも担当せず、POV-Rayを理解し、POV-Rayを使用して上記の3 Dジオメトリを光線追跡レンダリングしたい人向けのデータフォーマット変換器としか言えません.
インストール
ポイントセット
レンダリングされる3 Dポイントセットデータは、ASCII符号化テキストファイルに格納されるべきであり、ファイルの各行のテキストは、3 Dポイント座標のフォント値である.たとえば、次のようにします.
3 Dポイントセットのデータファイルがfooであると仮定する.ascは、以下のコマンドによりPOV-Rayシーンファイルfooに変換することができる.povとfoo.inc:
このコマンドは現在のディレクトリでfooを生成します.povとfoo.incは、前者がビューファイル、後者がPOV-Rayモデルファイルであるpovrayコマンドを用いるfooに基づくことができる.povとfoo.incでポイントセットをレンダリングするには:
レンダリング結果は、現在のディレクトリの下にあるビットマップファイルfooである.png.例:
Hamalのデフォルトのポイントのサイズは0.0025です.次のコマンドでは0.005に設定できます.
新たに生成するfooをpovrayで再処理する.png、結果は以下の通りです.
注:実際、ポイントのサイズをxとすると、ポイントのPOV-Rayにおける実際のサイズはx*r、rはポイントセットのほぼ最小の外接球の半径となります.
ポイントセットは、後述する無方向図、ベクトルフィールド、およびメッシュの「ソリッド」です.
むきず
ポイントセットデータファイルfooについて.asc,対応点セットのユークリッド最小支持ツリー(EMST)を算出したと仮定すると,EMSTはツリーであり,無方向図でもある.EMSTのデータがfoo-graphに保存するとする.ascファイル、このファイルの各行はEMSTの1辺の2つの端点で、ただ記憶するのは点座標ではなくfooである.ascファイルの対応点座標の行番号はfooにすぎない.ascの最初の行の行番号は0から始まります.foo.ascはC言語のn行3列の2次元配列と見なすと理解しやすいかもしれません.例:
無方向図を描くには、無方向図データをPOV-Rayに変換するときに、ポイントセットデータファイルと無方向図データファイルをロードする必要があります.
次にpovrayを使用して新しいfoo.povで処理すると、EMSTのレンダリング結果が得られます.
結果は、点セットが非常に密集しているため、上述した点セットモデルのレンダリング結果とあまり差がないようです.修正するとfoo.povは、カメラをポイントセットに近づけることで、EMSTの局所分岐を見極めることができます.
fooを開きます.pov,将
次のように変更します.
上記の変更は、カメラがz軸正方向に2*model_移動したことを意味します.radiusユニットは、カメラをEMSTに近づけることを繰り返します.povrayでfooを再処理する.pov,得られる:
ポイントのサイズと最初の幅が大きすぎるようです.サイズを小さく設定できます.たとえば、hamalを使用してPOV-Rayシーンファイルを生成するときにサイズを小さく設定できます.
結果:
曲線
1つのカーブを離散化して、先頭と末尾に接続されたセグメントのセットを形成します.これにより、無方向図を構成し、前のセクションで無方向図をレンダリングする方法でカーブのレンダリングを行うことができます.
次の図は、3回のBezierカーブのレンダリング結果です.
ベクトル場
ベクトルフィールドは、fooのような上記の点セットファイルの始点であるベクトルのセットである.ascは、foo-vector-fieldなどのベクトルフィールドファイルに格納される.asc.ベクトルフィールドファイルのフォーマットはポイントセットファイルと同じです.
次のコマンドは、ベクトルフィールドをPOV-Rayシーンファイルに変換します.
前節のようにfooを修正する.povファイルは、カメラとモデルの間の距離を近づけ、結果は次のようになります.
メッシュ(Mesh)
プレゼンテーションを容易にするために、次のコマンドでは、qhullを使用してランダムなポイントセットのセットにバンプを構築し、バンプデータ(三角メッシュファイル)をPOV-Rayシーンファイルに変換してpovrayでレンダリングします.
hamalの
次のようなレンダリング結果が得られます.
内幕
「Python出会いPOV-Ray」と「腹ばいに行け!」を見ます.
HamalはPython 3スクリプトで、ポイントセット、無方向図、カーブ、ベクトルフィールド、メッシュサーフェスなどの3 DジオメトリデータをPOV-Rayシーンファイルに変換します.つまり、Hamalはデータを生産せず、グラフィックレンダリングも担当せず、POV-Rayを理解し、POV-Rayを使用して上記の3 Dジオメトリを光線追跡レンダリングしたい人向けのデータフォーマット変換器としか言えません.
インストール
$ git clone https://github.com/liyanrui/hamal.git
$ cd hamal
$ chmod +x hamal
$ sudo install hamal /usr/local/bin
ポイントセット
レンダリングされる3 Dポイントセットデータは、ASCII符号化テキストファイルに格納されるべきであり、ファイルの各行のテキストは、3 Dポイント座標のフォント値である.たとえば、次のようにします.
1.2 3.3 5.4
0.1 2.2 8.5
... ... ...
3 Dポイントセットのデータファイルがfooであると仮定する.ascは、以下のコマンドによりPOV-Rayシーンファイルfooに変換することができる.povとfoo.inc:
$ hamal foo.asc
このコマンドは現在のディレクトリでfooを生成します.povとfoo.incは、前者がビューファイル、後者がPOV-Rayモデルファイルであるpovrayコマンドを用いるfooに基づくことができる.povとfoo.incでポイントセットをレンダリングするには:
$ povray foo.pov
レンダリング結果は、現在のディレクトリの下にあるビットマップファイルfooである.png.例:
Hamalのデフォルトのポイントのサイズは0.0025です.次のコマンドでは0.005に設定できます.
$ hamal --point-size=0.005 foo.asc
新たに生成するfooをpovrayで再処理する.png、結果は以下の通りです.
注:実際、ポイントのサイズをxとすると、ポイントのPOV-Rayにおける実際のサイズはx*r、rはポイントセットのほぼ最小の外接球の半径となります.
ポイントセットは、後述する無方向図、ベクトルフィールド、およびメッシュの「ソリッド」です.
むきず
ポイントセットデータファイルfooについて.asc,対応点セットのユークリッド最小支持ツリー(EMST)を算出したと仮定すると,EMSTはツリーであり,無方向図でもある.EMSTのデータがfoo-graphに保存するとする.ascファイル、このファイルの各行はEMSTの1辺の2つの端点で、ただ記憶するのは点座標ではなくfooである.ascファイルの対応点座標の行番号はfooにすぎない.ascの最初の行の行番号は0から始まります.foo.ascはC言語のn行3列の2次元配列と見なすと理解しやすいかもしれません.例:
0 1
1 15677
15677 12881
12881 12849
... ...
無方向図を描くには、無方向図データをPOV-Rayに変換するときに、ポイントセットデータファイルと無方向図データファイルをロードする必要があります.
$ hamal --graph=foo-graph.asc foo.asc
次にpovrayを使用して新しいfoo.povで処理すると、EMSTのレンダリング結果が得られます.
結果は、点セットが非常に密集しているため、上述した点セットモデルのレンダリング結果とあまり差がないようです.修正するとfoo.povは、カメラをポイントセットに近づけることで、EMSTの局所分岐を見極めることができます.
fooを開きます.pov,将
camera {
location <0, 0, -2 * model_radius> + model_center * z
look_at <0, 0, 0>
translate view_center
}
次のように変更します.
camera {
location model_center * z
look_at <0, 0, 0>
translate view_center
}
上記の変更は、カメラがz軸正方向に2*model_移動したことを意味します.radiusユニットは、カメラをEMSTに近づけることを繰り返します.povrayでfooを再処理する.pov,得られる:
ポイントのサイズと最初の幅が大きすぎるようです.サイズを小さく設定できます.たとえば、hamalを使用してPOV-Rayシーンファイルを生成するときにサイズを小さく設定できます.
$ hamal --graph=foo-graph.asc --point-size=0.001 --line-width=0.0005 foo.asc
結果:
曲線
1つのカーブを離散化して、先頭と末尾に接続されたセグメントのセットを形成します.これにより、無方向図を構成し、前のセクションで無方向図をレンダリングする方法でカーブのレンダリングを行うことができます.
次の図は、3回のBezierカーブのレンダリング結果です.
ベクトル場
ベクトルフィールドは、fooのような上記の点セットファイルの始点であるベクトルのセットである.ascは、foo-vector-fieldなどのベクトルフィールドファイルに格納される.asc.ベクトルフィールドファイルのフォーマットはポイントセットファイルと同じです.
次のコマンドは、ベクトルフィールドをPOV-Rayシーンファイルに変換します.
$ hamal --vector-field=foo-vector-field.asc --point-size=0.001 --line-width=0.0005 foo.asc
前節のようにfooを修正する.povファイルは、カメラとモデルの間の距離を近づけ、結果は次のようになります.
メッシュ(Mesh)
プレゼンテーションを容易にするために、次のコマンドでは、qhullを使用してランダムなポイントセットのセットにバンプを構築し、バンプデータ(三角メッシュファイル)をPOV-Rayシーンファイルに変換してpovrayでレンダリングします.
$ rbox 100 W0 > points.asc
$ qhull QJ i < points.asc TO hull.asc
$ sed -i '1,2d' points.asc
$ sed -i '1d' hull.asc
$ hamal --object=hull --mesh=hull.asc --point-size=0.03 points.asc
$ povray +P hull.pov
hamalの
--object
オプションは、POV-Rayモデルのファイル名を設定するために使用されます(拡張子は含まれません).次のようなレンダリング結果が得られます.
内幕
「Python出会いPOV-Ray」と「腹ばいに行け!」を見ます.