アンモナイトを描こう(第1回)

アンモナイトを描いてみよう!

 美しい螺旋形をしたアンモナイト。その美しい姿を、誰しもが一度は描いてみたいと 思った経験があるのではないでしょうか? 絵心のある人は、手書きで楽しめるでしょうが、絵が下手な私のような人間は コンピュータに頼るしか方法がありません。 最近、映画などではCGが盛んに使われるようになりましたが、私たちが自分で作成 しようとすればひどく難しいものに感じられてしまいます。
 ところが、最近ではPOV-Rayなどのレイトレーシング(光線追跡法)を用いた 素晴らしいレンダリングツールがフリーソフトとして簡単に使えるようになりました。 動画を作成しようと思えば、それなりに大変でしょうが、静的な画像(と言っても、3Dです) を作成するのであれば、思ったよりも簡単です。 ここでは、私が実際に作成したサンプルをもとに、作成方法について紹介してみようと 思います。
 実在した生物を描くので、本来は正確に描写しなければいけないのでしょうが、 そこは素人の単なる楽しみということで、見かけ重視&学術軽視で 行きたいと思います。

 まずは、私がこれらを描くきっかけとなったホームページを紹介しましょう。 「Prehistoric World」さん では、アンモナイトだけでなくアノマロカリスの動画など、素晴らしい作品が 展示されています。螺旋の計算式などは、「Prehistoric World」さんを参考に させていただきました。

ソフトウェア(POV-Ray)をダウンロードする

 POV-Rayは、次の公式ページからダウンロードすることができます。
http://www.povray.org/download/
このページからWindows版とドキュメントをダウンロードします。私が使用したのはVer3.6です。
ダウンロードした“povwin3.exe”をダブルクリックするとインストールが始まります。 詳細については、たくさんのホームページで紹介されていますので、ここでは省略します。

 さて、POV-Rayは一種のプログラミング言語を持っています。と言っても、それほど難しくは 無く、何らかのプログラミング経験のある方なら、1日勉強すればここで必要な機能はある程度 使いこなせるようになる筈です。(ここで使用するのは強大な機能のほんの一部のみです)
 POV-Rayを起動すると、サンプルソースが開きます。「Run」ボタンを押すだけで、きれいな画像が 表示されます。サンプルソースの中に書かれているのが、プログラムです。一見すると難しそうに 思えますが、簡単に言ってしまうと、
・物体(オブジェクト)を定義する
・背景を指定する
・見る方向を指定する
・光を当てる方向を指定する
・実際に物体(オブジェクト)を描画する
ということが書かれているだけです。(かなり乱暴な言い方ですが)
勉強する際には、http://www.arch.oita-u.ac.jp/povjp/ の日本語マニュアル(バージョンが少し古いですが)が便利です。 最新情報は、ダウンロードした英文マニュアルを読むしかありません。

アンモナイトの成長螺旋とは

 一般に、アンモナイトやオウムガイなどの螺旋は「対数螺旋(または等角螺旋)」に従うと言われます。対数螺旋 についての詳しい説明は別のHPに譲るとして、回転角に対する螺旋の半径は、次の式で求められます。
   r = a×e
また、X,Y座標は、
   x=r×cos(Θ) y=r×sin(Θ)
となります。
ここで「Θ」は回転角、「e」は自然対数、「a」と「b」は螺旋の形状を決定する係数です。この「a」と「b」を変化させることで、 さまざまな螺旋が描けます。
また、実際にアンモナイトを描くのに重要なのが、殻口のサイズです。このサイズも回転角に対して指数的に増加する と考えられるので、螺旋半径と同様に、
   r' = a'×eb'Θ
と定義できます。このように螺旋形状と殻口サイズの変化をさまざまに組み合わせることによって、 緩巻きから密巻き、アンモナイトの厚みなどを多彩に表現することができるのです。

最も簡単なアンモナイトもどきを描く

 まずは、最も簡単な例から紹介しましょう。
次の図形は、螺旋に沿って単純に球を並べただけのものです。それでも、なんとなくアンモナイトらしく(ない?) なりますね。
   
これを描くプログラムは次のようになります。
  #include "colors.inc"                         // 色名称の使用を宣言する
  background { color Gray90 }                   // 背景色を指定する
  camera {
    location <0, 0, -70>                  // カメラのある位置(X,Y,Z座標)
    look_at  <2, -6,  0>                  // カメラの向いている方向
  }
  light_source { <0, 3, -120> color White}   // 照明の位置と色
  
  #declare wt=0.0;
  #while (wt <= 8*pi)                        // 回転角0〜8πまで0.05ラジアン単位に回転させる
    #declare wx=1.0*exp(0.13*wt)*cos(wt);       // X座標の計算
    #declare wy=1.0*exp(0.13*wt)*sin(wt);       // Y座標の計算
    #declare ww=1.0*exp(0.1*wt);                // 殻口径の計算
    sphere {                  // 球を描く
      <wx, wy, 0>, ww                     // 球の位置とサイズ
      texture {
        pigment { color Gold }                  // 球の色
        finish { specular 0.5 roughness 0.005 ambient 0.35 } // 仕上げ(光沢など)
      }
    }
    #declare wt=wt+0.05;
  #end
もちろん、カメラの位置を変えてやれば、別の方向から見た姿を描くことができます。

でも、これだけではちょっと寂しいですね。
実際のアンモナイトの殻口はまん丸ではないし、肋があったり、疣があったり・・・
そこで、次回は実際のアンモナイトが成長するように、「成長線」を積み上げて殻を描いて みたいと思います。

第2回へ進む