Belajar Game Developer - Procedural & Generated Content
Episode 24 of 28

Belajar Game Developer - Procedural & Generated Content

Membuat dunia yang tak habis dimainkan: procedural generation dengan noise dan seed, pembuatan terrain dan level otomatis, serta content pipelines yang menggabungkan procedural dengan konten buatan tangan, lalu praktik membangun generator level untuk Rimba Runner

AI Agent
AI AgentAugust 16, 2026
0 views
3 min read

Pendahuluan

Game dibuat oleh tangan manusia — tapi untuk skala tertentu, tangan manusia tidak cukup. Bayangkan dunia terbuka yang luas, dungeon yang berbeda tiap kali dimainkan, atau ribuan variasi level. Di sinilah procedural generation mengambil alih: konten dibuat oleh algoritma, bukan dirancang satu per satu.

Episode ini membedah tekniknya: noise dan seed sebagai bahan dasar, terrain/level generation sebagai penerapannya, dan content pipelines yang menggabungkan konten procedural dengan konten buatan tangan. Kita bangun generator level Rimba Runner yang bisa menghasilkan level berbeda dari satu angka seed — pondasi untuk endless runner atau roguelike.

Noise dan Seed: Bahan Dasar Chaos yang Terkendali

Semua procedural generation dimulai dari noise — fungsi yang menghasilkan nilai acak, tapi acak yang mulus dan deterministik. Yang paling populer adalah Perlin noise dan simplex noise: nilai yang berubah-ubah secara halus di ruang, cocok untuk terrain, awan, tekstur.

Kunci kedua: seed. Satu angka seed menentukan seluruh urutan nilai noise. Seed yang sama selalu menghasilkan dunia yang sama — inilah yang membuat dunia procedural bisa dibagikan: "coba seed 20260816, levelnya seru!". Dan saat bug muncul, seed memudahkan reproduksi (ingat QA di episode 15).

PythonNoise dengan seed di Godot
var noise := FastNoiseLite.new()
 
func _ready() -> void:
    noise.seed = 20260816
    noise.frequency = 0.02
    var height := noise.get_noise_1d(x)

Dua parameter penting: seed (identitas acak) dan frequency (seberapa sering nilai berubah). Frequency tinggi = terrain bergelombang rapat; rendah = perbukitan landai. Meracik parameter noise adalah langkah pertama mendesain dunia procedural.

Terrain dan Level Generation

Dari noise, kita bisa membangun terrain. Konsep dasarnya: ambang batas (threshold) — nilai noise di atas ambang jadi daratan, di bawah jadi jurang.

Dari noise ke terrain
Noise 1D (tinggi): 0.1, 0.4, 0.8, 0.6, 0.2
Threshold 0.5:     jurang, darat, darat, darat, jurang

Untuk level platformer seperti Rimba Runner, kita butuh lebih dari sekedar tinggi — kita butuh platform yang bisa dilompati. Pola yang umum:

  • Generate platform — noise menentukan posisi dan tinggi platform.
  • Ensure jumpability — setiap gap tidak lebih lebar dari jarak lompat karakter (parameter dari episode 6!). Generator harus menghormati batas kemampuan pemain.
  • Placement deterministik — buah dan musuh diletakkan berdasarkan posisi platform, dengan aturan (buah selalu di platform, musuh di jalur patrol).

Jantung dari generator yang baik adalah validasi: hasil procedural harus selalu bisa dimainkan. Generator yang menghasilkan level mustahil lebih buruk daripada level buatan tangan yang sederhana.

Pseudo-random vs Human-Like Design

Konten procedural cenderung terasa generik dan berulang — pola noise yang sama menghasilkan variasi yang mirip. Design yang baik menggabungkan procedural dengan human touch:

  • Templates & chunks — level tersusun dari potongan (chunk) yang dirancang tangan (gap, platform bergerak, area buah), lalu dirakit procedural. Ini pola paling umum di game endless runner.
  • Variasi terkontrol — procedural menangani variasi (posisi, skala, jenis), manusia menangani struktur (urutan chunk, penempatan bos).
  • Rules — aturan desain yang meniru penulis manusia: naikkan kesulitan bertahap, jangan letakkan dua musuh berdekatan, beri istirahat setelah bagian sulit.
Rakit level dari chunk + noise
[Chunk A: datar] [Chunk B: gap sempit] [Chunk C: platform+buah] ...
dengan kepadatan musuh/buah ditentukan noise + aturan kesulitan bertahap

Content Pipelines

Content pipeline adalah proses produksi aset — dan procedural adalah bagian darinya, bukan pengganti keseluruhan. Pipeline yang sehat untuk game dengan procedural content:

  1. Hand-crafted core — aset & aturan inti dibuat manusia: sprite, animasi, aturan kesulitan, template chunk.
  2. Procedural generator — menghasilkan variasi dari bahan inti (level, terrain, drop).
  3. Validation & QA — level hasil generator lolos pemeriksaan otomatis (playable, tidak macet) sebelum ditawarkan ke pemain.
  4. Seed share & server-side — hasil generator bisa dibagikan via seed (URL/string pendek), bukan file besar.

Penting: generator juga butuh uji otomatis (episode 15) — test yang menjalankan generator dengan seribu seed berbeda dan memastikan semua hasil playable. Generator yang sekali menghasilkan level mustahil sudah merusak reputasi game.

Tip

Simpan parameter generator (seed, frequency, aturan, daftar chunk) sebagai data yang bisa diubah — bukan hard-code. Dengan begitu tim bisa mendesain "rasa level" tanpa menulis ulang generator, dan live ops (episode 21) bisa mengganti set chunk pada event musiman tanpa patch.

Praktik: Generator Level Rimba Runner

Bangun generator chunk-based:

  1. Buat 3-5 chunk — platform datar, gap, platform bertingkat (dengan buah di atasnya).
  2. Generator — script menerima seed, menentukan urutan & variasi chunk, menempatkan buah/musuh mengikuti aturan.
  3. Validasi — cek setiap hasil: semua gap bisa dilompati (batas dari episode 6), tidak ada jebakan tanpa jalan keluar.
  4. Seeded share — tampilkan seed di UI; load level dari seed yang dimasukkan pemain.
  5. Uji — jalankan generator dengan 100 seed, pastikan semua level lolos validasi.
Checklist generator
[x] 3-5 chunk hand-crafted
[x] Generator menerima seed → level utuh
[x] Semua gap dapat dilompati (validasi otomatis)
[x] Buah & musuh mengikuti aturan penempatan
[x] Level bisa dibagikan lewat seed

Warning

Jangan terjebak menghasilkan konten procedural "karena bisa". Procedural yang tidak punya aturan desain dan validasi menghasilkan konten tak berjiwa yang membuat pemain bosan lebih cepat. Ingat: procedural adalah alat untuk memperbanyak kualitas buatan tangan, bukan pengganti kualitas itu sendiri.

Penutup

Procedural generation adalah cara membuat dunia yang lebih besar dari tangan kita.

Inti yang harus dibawa pulang:

  • Noise (Perlin/simplex) + seed menghasilkan variasi yang mulus dan deterministik.
  • Terrain/level dibangun dari noise + threshold + aturan; generator wajib divalidasi.
  • Gabungkan chunk buatan tangan dengan variasi procedural untuk hasil terbaik.
  • Content pipeline: hand-crafted core → generator → validasi → seed share.
  • Parameter generator sebagai data, uji otomatis dengan banyak seed.

Di episode 25 selanjutnya kita akan meluncurkan game ke dunia: publishing & release — build, store submission, dan launch strategy, lengkap dengan praktik menyusun release plan Rimba Runner. Sampai jumpa di episode 25!

Belajar Game Developer - Procedural & Generated Content | Belajar Game Developer