← 作品一覧

CASE STUDY / C++ / PERLIN NOISE / VOXEL TERRAIN

Procedural Terrain / C++

C++でノイズからボクセル地形を構成する学習プロジェクト。基本的なOpenGL環境だけでなく、複数のスケールの地形生成と、等角投影表示の処理まで実装しています。

3 layers
大陸・山・細部の異なるスケールを重ねる
Seeded
seedでノイズの置換テーブルを構成
C++
Perlin noise・生成・描画・計測補助を公開

ROLE & CONSTRAINTS

何を、どうつくったか。

個人開発。C++で生成・描画処理を実装。OpenGL用GLFW/GLADに加え、等角投影デモにはSFMLを使用。

単一のノイズに見える地形から、広い地形の起伏・山・細部を持つ地形へ、どう制御の幅を広げるか。
C++OpenGLSFMLPerlin noisefBMMake

DESIGN DECISIONS / SOURCE EVIDENCE

仕組みまで、見せる。

01

Perlin noiseを複数オクターブで合成

seedを用いた置換テーブル、勾配と補間、オクターブ合成を実装。大陸・山・細部の周波数と振幅を変えて高さを合成し、有効範囲へクランプした後にブロック種別を決めます。

src/terrain.cpp / PerlinNoise・generateTerrain ↗
02

描画範囲外でも同じ条件で生成

等角投影表示で保持範囲の外にあるブロックを求める際、同じseedと生成パラメーターから高さを計算。seedが変わるまでPerlinNoiseオブジェクトを保持し、問い合わせごとの再構築を避けています。高速化率の実測値は未掲載です。

src/isometric_terrain.cpp / getBlockAtWorld ↗
03

描画と測定を切り分ける準備

FPSや経過時間を扱うプロファイラーの補助コードがあります。ただし、計測機能があることと、比較実験の結果があることは別です。現在は共通条件のベンチマーク結果を公開していません。

src/performance_profiler.h ↗

LIMITATIONS & NEXT QUESTION

できたことと、次の問い。

  • ノイズ生成の再現性は同じ実装・実行環境を前提とします。C++標準ライブラリのシャッフルまで含む異環境間の一致は未検証です。
  • 地形を生成できることと、移動可能性や遊びやすさは別です。現状の作品には経路探索と組み合わせた評価がありません。
  • 描画速度、メモリ使用量、seedごとの品質の比較データは未公開です。論文や研究成果としては扱っていません。

生成パラメーターを変えたときの到達率や経路長を測り、生成とエージェントの移動を同時に評価する方向に関心があります。研究の前段階として、ブラウザー上の比較デモを新しく作りました。

REPRODUCTION / READING GUIDE

実装を確かめる。

公開Makefileのターゲットです。macOS、clang++、GLFW/GLAD、SFML、GLM、pkg-configなどの環境が必要です。ブラウザーデモはこのC++作品をWeb移植したものではありません。

make terrain
make run-terrain

# SFML isometric view
make isometric
make run-isometric

解説は2026年11月1日に確認した固定コミットの公開ソース・README・記録に基づきます。

FROM SOURCE TO EXPERIMENT

生成した世界を、探索してみる。

地形生成 × 経路探索を試す ↗