ゲームで自然な地形を生成したい。
でも、単純な乱数では、不自然な地形になってしまう。
そんな場面で使えるのが、パーリンノイズです。
パーリンノイズは、滑らかで連続的なランダムな値を生成する関数です。
これを使うことで、自然な地形を生成できます。
この記事では、パーリンノイズの仕組みとして、滑らかな地形生成に使う数学的関数を見ていきましょう。
- パーリンノイズの仕組みが分からない…
- 自然な地形を生成したい。
- パーリンノイズの使い方を知りたい。
✨ この記事でわかること
- パーリンノイズとは何かの基本概念
- パーリンノイズの仕組み
- 地形生成への応用
- Unityでの実装方法
- 初心者でも理解できるパーリンノイズの考え方
Unity入門の森をチェック Unity初心者でも安心。動画解説+完成サンプル付きで実装まで進められます
パーリンノイズとは何か(ゲーム制作目線)

パーリンノイズは、滑らかで連続的なランダムな値を生成する関数です。
1985年にケン・パーリンによって開発され、自然な模様や地形を生成するために広く使われています。
パーリンノイズの特徴は、近い位置の値が近い値になることです。
これにより、単純な乱数とは異なり、滑らかで連続的な値を生成できます。
ゲーム開発では、地形生成、テクスチャ生成、エフェクトなど、様々な場面で使われます。
Unityでは、Mathf.PerlinNoise関数が用意されており、簡単に使えます。
ゲームでの具体的な使い道

パーリンノイズが、ゲームでどう使われているか確認してみましょう。
地形生成
パーリンノイズを使って、自然な地形の高さを生成します。
起伏のある自然な地形を生成できます。
雲の生成
パーリンノイズを使って、雲の形状を生成します。
滑らかで自然な雲を生成できます。
テクスチャ生成
パーリンノイズを使って、ランダムな模様のテクスチャを生成します。
自然な木目や石の模様などを生成できます。
エフェクト
パーリンノイズを使って、火や煙などのエフェクトを生成します。
時間に応じてノイズの値を変化させることで、動的なエフェクトを実現できます。
- 地形生成(高さマップの生成)
- 雲の生成(自然な形状)
- テクスチャ生成(ランダムな模様)
- エフェクト(火、煙など)
作り方は分かった。
でも完成まで行けない人へ
当たり判定・移動・カメラ・AIまで、
実装しながら学べる「永久会員チケット」です。
※ まずは内容を見るだけでOK
考え方・仕組みを図解イメージで説明

パーリンノイズは、グリッド上のランダムな勾配ベクトルと、補間を使った計算で実現できます。
基本的な仕組み
パーリンノイズは、グリッド上の各点にランダムな勾配ベクトルを設定します。
任意の位置の値は、周囲の勾配ベクトルを使って補間することで計算されます。
補間による滑らかさ
補間を使うことで、近い位置の値が近い値になります。
これにより、滑らかで連続的な値を生成できます。
スケールによる調整
ノイズのスケールを調整すれば、細かさや粗さを制御できます。
スケールが小さいほど細かく、大きいほど粗くなります。
オクターブの組み合わせ
複数のオクターブを組み合わせることで、より複雑な模様を生成できます。
これにより、より自然な地形やエフェクトを実現できます。
- パーリンノイズは、グリッド上のランダムな勾配ベクトルと補間で実現される
- 補間により、近い位置の値が近い値になる
- スケールを調整すれば、細かさや粗さを制御できる
- 複数のオクターブを組み合わせることで、より複雑な模様を生成できる
Unityで実装する際の注意点(代表例)

Unityでパーリンノイズを実装する場合の注意点を見ていきましょう。
基本的な使い方
UnityのMathf.PerlinNoise関数を使って、パーリンノイズを生成します。
|
1 2 3 4 5 6 |
// パーリンノイズの生成 float noiseValue = Mathf.PerlinNoise(x * scale, y * scale); // 値の範囲を調整 float height = noiseValue * maxHeight; |
地形生成への応用
パーリンノイズを使って、地形の高さを生成します。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
public class TerrainGenerator : MonoBehaviour { public float scale = 0.1f; public float height = 10f; void GenerateTerrain() { for (int x = 0; x < width; x++) { for (int z = 0; z < depth; z++) { // パーリンノイズで高さを生成 float noiseValue = Mathf.PerlinNoise(x * scale, z * scale); float terrainHeight = noiseValue * height; // 地形の高さを設定 terrainData.SetHeight(x, z, terrainHeight); } } } } |
フラクタルノイズの実装
複数のオクターブを組み合わせて、フラクタルノイズを実装します。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
public float FractalNoise(float x, float y, int octaves) { float value = 0; float amplitude = 1; float frequency = 1; for (int i = 0; i < octaves; i++) { value += Mathf.PerlinNoise(x * frequency, y * frequency) * amplitude; amplitude *= 0.5f; frequency *= 2f; } return value; } |
3Dパーリンノイズ
3Dのパーリンノイズを実装する場合、2Dのパーリンノイズを複数回使います。
|
1 2 3 4 5 6 7 8 9 10 11 12 |
public float PerlinNoise3D(float x, float y, float z) { float xy = Mathf.PerlinNoise(x, y); float xz = Mathf.PerlinNoise(x, z); float yz = Mathf.PerlinNoise(y, z); float yx = Mathf.PerlinNoise(y, x); float zx = Mathf.PerlinNoise(z, x); float zy = Mathf.PerlinNoise(z, y); return (xy + xz + yz + yx + zx + zy) / 6f; } |
実装のコツ
スケールを適切に設定することが大切です。
複数のオクターブを組み合わせることで、より自然な模様を生成できます。
パフォーマンスを考慮し、必要に応じてキャッシュを使いましょう。

まとめ

この記事では、パーリンノイズの仕組みについて見てきました。
重要なポイントをおさらいします。
- パーリンノイズは、グリッド上のランダムな勾配ベクトルと補間で実現される
- 補間により、近い位置の値が近い値になり、滑らかで連続的な値を生成できる
- スケールを調整すれば、細かさや粗さを制御できる
- UnityのMathf.PerlinNoise関数を使うことで、簡単に実装できる
- 複数のオクターブを組み合わせることで、より自然な模様を生成できる
パーリンノイズは、ゲーム開発で非常に有用な技術です。
滑らかで連続的なランダムな値を生成するため、自然な地形やエフェクトを実現できます。
UnityのMathf.PerlinNoise関数を使うことで、簡単に実装できます。
実際のゲーム実装とセットで学ぶことで、理解が深まるはずです。
Unity入門の森では、パーリンノイズを含むシェーダーと描画処理を、実際のゲーム実装とともに体系的に学べます。
ぜひチェックしてみてください。
Unity入門の森をチェック Unity初心者でも安心。動画解説+完成サンプル付きで実装まで進められます





コメント