いつも使っている3DCGのソフトMagicaVoxelですが、サイコロを積み木のように積み上げて立体物を作るというものです。基本チクチク手で積み上げていくのですが、滑らかな有機的な曲線などは手では限界があります。その場合、簡単なプログラム(shader:シェーダーと呼ぶ)を書いて、それをソフトの中で実行することで色んな数学的な曲線を持つ立体を作ることができるのです。

 今回作ってみたのが「山がいくつか連結した連峰のようなもの」。実際に使っている動画もTwitterの方に投稿したので、それを貼ってみます。




 書いてある通り、プログラムのベース部分は@mode_visという方が公開していたものを参考にさせていただきました。

 シェーダーはglslというプログラム言語で書きます。割と短いプログラムでできるので、思ったよりも難しくはありません。記述にミスがあってもいわゆる暴走するなんてことはほとんどなく最初から動かないだけで怖くない。今回は参考にさせていただいた元のプログラムの中の「球体を作れ」という部分を「正規分布曲線の山を作れ」という式に変えたのですが、ホントに割とすんなり成功した。

 そもそも(理想上の)山の形がどのような式で表されるのか?という疑問があったのですが、知っている中で山型の曲線といえば正規分布ぐらいしか思いつきません。
そこで一応AI(ChatGPT)に聴いてみると・・・


山の形状は

  • Bagnoldのプロフィール
  • ロジスティック関数
  • ガウス分布

などの形状でモデル化されることがあります。


ということです。3つ目の「ガウス分布」というのが正規分布のことなので「大丈夫だ!」と採用しました。

 今のところ、作った画像(一番上の画像)は色味を白っぽくして山水画の雰囲気にしています。

 プログラムを組んでいるとたまにこの1970年1月1日が出てくることがあります。時刻の変数に何かの拍子でゼロが入った時にこれが出てくるんだなーというのはなんとなく理解していたのですが、よく考えたらなぜゼロが1970年になっているのか?

 これはUnixTimeというもので、コンピュータのOSーUnixで時間を扱う形式です。1970年の1月1日0時0分0秒(Unixエポックというらしい)を0として、1秒ごとの累積ということになっています。今日の今(投稿のちょっと前3月12日PM12:00)のUnixTimeは

1647054000
(日本時間)

 それで、なぜ1970年かということですが、これといった特別な理由はないようです。UnixOSが広まったのがこの頃で、ちょうど切りのいいところをゼロにしたかったという感じらしい。ちなみにそれより前の時刻もマイナスを使って表せばよいので、僕が生まれたUnixエポックの1カ月ちょっと前(1969年11月末)も-3300000(日本時間)とかで表せる。

 ちなみにちなみに、エクセルでは日付形式に「0」を入れると「1900年1月0日」になるんですね。

  • 2 / 2
  • 1
  • 2