いつも使っている3DCGのソフトMagicaVoxelですが、サイコロを積み木のように積み上げて立体物を作るというものです。基本チクチク手で積み上げていくのですが、滑らかな有機的な曲線などは手では限界があります。その場合、簡単なプログラム(shader:シェーダーと呼ぶ)を書いて、それをソフトの中で実行することで色んな数学的な曲線を持つ立体を作ることができるのです。
今回作ってみたのが「山がいくつか連結した連峰のようなもの」。実際に使っている動画もTwitterの方に投稿したので、それを貼ってみます。
#magicavoxel で山を生成する #shader を作りました。自動でいろんな山々を生成します。個々の山の稜線は正規分布曲線にしています。@mode_visさんの3D_Metaballs https://t.co/2ywblh4N9x を参考にさせていただきました。ありがとう! pic.twitter.com/b18DlBtkdI
— 斉藤重之 (@shigenokura) 2024年9月9日
書いてある通り、プログラムのベース部分は@mode_visという方が公開していたものを参考にさせていただきました。
シェーダーはglslというプログラム言語で書きます。割と短いプログラムでできるので、思ったよりも難しくはありません。記述にミスがあってもいわゆる暴走するなんてことはほとんどなく最初から動かないだけで怖くない。今回は参考にさせていただいた元のプログラムの中の「球体を作れ」という部分を「正規分布曲線の山を作れ」という式に変えたのですが、ホントに割とすんなり成功した。
そもそも(理想上の)山の形がどのような式で表されるのか?という疑問があったのですが、知っている中で山型の曲線といえば正規分布ぐらいしか思いつきません。
そこで一応AI(ChatGPT)に聴いてみると・・・
山の形状は
- Bagnoldのプロフィール
- ロジスティック関数
- ガウス分布
などの形状でモデル化されることがあります。
ということです。3つ目の「ガウス分布」というのが正規分布のことなので「大丈夫だ!」と採用しました。
今のところ、作った画像(一番上の画像)は色味を白っぽくして山水画の雰囲気にしています。