レリーフを3Dのオブジェクトとして作るのは、なかなか難しいと思います。
2Dでは、フォトレタッチソフトでレリーフのような効果を出すものもありますが、
実際のレリーフとはほど遠いものです。
モデリングソフトでも、かなり平たい構造なので難しいでしょう。
一番良く思いつくのは、Height Fieldを使う方法だと思いますが、
いまのところ、山のようなランダムなものを作るソフトはありますが、
レリーフのようなものを作れるソフトは見当たりません。(知らないだけかも)
たとえそのようなソフトがあったとしても、Cameoのような形状を
作るのは、かなり難しいでしょう。
と思っていたところ、面白いものを見つけました。
ここにある論文によると、3Dオブジェクトから奇麗なレリーフが
作れるらしいのです。
次元を落としているわけなので、当たり前だと思うかも知れませんが。
その論文によると、
ある点のレリーフの高さ=定数×1/本当のオブジェクトまでの距離
にするといいのだそうです。距離を無限大にすると、上の値は0ですから
無限に向こうにある点は高さ0ということになります。
上のページには、レリーフ生成ソフトもダウンロードできるのですが、
IRIX用なので、僕は使うことができませんでした。
しかし、ソフトを使わなくてもPOVだけでどうにかなるのでは??
と考えて実験してみることにしました。
その方法としては、
始めのテクスチャの設定が少し難しいところです。視線に平行にするのは
いちいち手で計算すると面倒なので、Perlでスクリプトを書きました。
ここ
にあります。このスクリプトの使いかたは、
perl relief.pl camera look_at top bottom file
です。cameraは、カメラの場所です。座標を、20,10,-3のように指定します。
間に空白は開けられません。 look_atは、カメラが狙うポイントです。カメラと同じように指定します。
topと、bottomは視線の直線上で、カメラからどれくらい離れたところを
一番高いところ、低いところに設定するかを決めます。
これは、後のファイルによって違う意味になります。
fileは、オブジェクトのファイル名です。これは指定しないこともできます。
指定した場合、このスクリプトはそのファイルの中の
すべての座標("<xx, yy, zz>")を抜き出して、その点を、視線の方向の直線上に垂直に
投影した時にどこに来るかを計算します。
(詳しく言うと、内積を計算しているわけです。)
topの値は、これで見つかった一番近い値になります。ユーザー指定のtopの値は、
始めのtopの値からどれくらいずらしたいかを指定することになります。
bottomも同様です。
あまり考えて作っていないプログラムなので、<xx,
yy, zz>の形のものはすべて
座標だと思ってしまいます。カラーなどは指定しないようにして下さい。
また、オブジェクトがCSGで出来ているものなど、使われている座標が
実際のオブジェクトの座標に対応していない場合は、この方法は役に立たないので
ファイル指定なしでやって下さい。
指定しなかった場合topとbottomの値は、
指定した通りの値になります。
どちらにしても、最終的なtopとbottomの値は、top<bottomとなっていないと
だめです。また、top>0でもないといけません。
これを実行すると、テクスチャが出力されるので、
これを指定してQuality=0でレンダリングして下さい。
HF_Gray_16 Targaファイルで吐くともっと綺麗にできます。その場合、grobal_settings{hf_gray_16}を加え、Targa24ビットで出力するように、+FTオプションをつけます。すると、こんなものが出来ます。
あとは、これを再びPOVでハイトフィールドとしてレンダリングするだけです。
こんな感じになります。
横から見るとこんな感じ。
高さを調整したりすれば、奇麗なCameoなんかも作れると思います。
今度何かのオブジェクトで試してみる予定。
Quality=0でレンダリングしたものをハイトフィールドに使うところがミソです。
他の方法で、もっと面白いものが出来るかも知れません。
いろいろ試してみると面白いと思います。