カワリモノ息子の技術メモ的な~

カワリモノ息子とその母の技術メモ的な〜

学校が苦手な息子くんの作品とその母の作品、はたまた日常などいろいろを在宅エンジニア母が綴る

中1息子くんパーリンノイズで地形が作れることを知りRobloxで実装

パーリンノイズとは

つい先日、息子くんに教えてもらいました。みなさんパーリンノイズってご存知ですか?

パーリンノイズ(英: Perlin noise)とは、コンピュータグラフィックスのリアリティを増すために使われるテクスチャ作成技法。擬似乱数的な見た目であるが、同時に細部のスケール感が一定である。
(中略)
パーリンノイズは、コンピュータグラフィックスで炎や煙や雲を表現するのによく使われている。また、メモリ使用量が少ないため、メモリ容量が小さい場面でのテクスチャ生成にも使われ、パソコンゲームでのリアルタイムCG生成時にGPU上で使われることが増えている。
--Wikipediaより引用

へーこんな技術があるんですねえ。

地形なんかが作れるんですが、固定のパラメータを渡せば必ず同じ地形が作れるんです。

あっ、これって!
ひらめきましたぞ!

子供たちみんな大好きMinecraft(マインクラフト)です。

Minecraftの地形生成にパーリンノイズが使われている

マイクラは、広大な敷地の中で狩りをしたり建築をしたりサバイバル生活を送ったり、いろいろな遊び方ができるゲームです。

マイクラでは「シード値」というのを設定すると、固定の敷地のワールド(マップ)に入れるんです。
「マイクラ シード値」でぐぐると、いろいろなおススメシード値がありますよ。

↓ マイクラでシード値を指定する画面
f:id:toriko0413:20200730202727p:plain

たとえばシード値に「-9065479248748140566」を入れると、下記のような地形のワールドに入れます。
f:id:toriko0413:20200730203354p:plain

マイクラでは単純に地形だけでなく村や洞窟などいろいろあるので単純なパーリンノイズではないもののそれを拡張したものみたいです。
シード値はパーリンノイズに与える要素になっているのだろうと推測できます。

シード値って上にも書いたように「-9065479248748140566」とか桁数が多いもの半端なくて、1から順に地形が設定されてるの!?だとすると作った人大変だ!ってひそかに思ってましたが、そういうことではないみたい^^;;

またマイクラユーザーならわかると思いますが、ワールドの奥に行くとさらに奥の新たな地形が描画されます。
あくまで現在の地点を中心とする決まった範囲の描画しか行わず移動時に新たな地形を計算して描画する、これもパーリンノイズの技法ということみたいです。

f:id:toriko0413:20200730213844p:plain

それと、マイクラの描画は上記画像の四角で囲まれた部分の「チャンク」単位で描画されると息子くんに教えてもらいました。

パーリンノイズを実際に使ってみる

そんなわけでパーリンノイズ技術を知った息子くん、早速使っていました。

パーリンノイズのサンプルプログラムはたくさん転がっているそうです。
そして見つけてきていたのがこちらのluaのコード↓

Perlin Noise in Lua · GitHub

ロブロックスの開発言語はluaベースなので、このコードを拝借してロブロックス用に書き換えて組み込んだそうです。

youtu.be

なんか動画最後のほう泳いでますねえ。動画途中から描画される水のグラフィックが綺麗。

おもしろいなー!
今後、もっと拡張して木を生やしたりするー!って言ってます^^

f:id:toriko0413:20200730214455j:plain

って今見てみたら、地形の上に自分でブロックが置けるように息子くんが作りこんでいた♪
白いブロックが自分で置いたブロック。

f:id:toriko0413:20200730213631j:plain