115 lines
3.7 KiB
Python
115 lines
3.7 KiB
Python
|
|
"""NoiseSource Parameters Demo
|
||
|
|
|
||
|
|
Demonstrates: hurst (roughness), lacunarity (frequency scaling), octaves
|
||
|
|
Shows how parameters affect terrain character.
|
||
|
|
"""
|
||
|
|
import mcrfpy
|
||
|
|
from mcrfpy import automation
|
||
|
|
|
||
|
|
GRID_WIDTH, GRID_HEIGHT = 64, 48
|
||
|
|
CELL_SIZE = 16
|
||
|
|
|
||
|
|
def value_to_gray(h):
|
||
|
|
"""Simple grayscale visualization."""
|
||
|
|
h = (h + 1) / 2 # -1..1 to 0..1
|
||
|
|
h = max(0.0, min(1.0, h))
|
||
|
|
v = int(h * 255)
|
||
|
|
return mcrfpy.Color(v, v, v)
|
||
|
|
|
||
|
|
def run_demo(runtime):
|
||
|
|
panel_w = GRID_WIDTH // 3
|
||
|
|
panel_h = GRID_HEIGHT // 3
|
||
|
|
|
||
|
|
# 3x3 grid showing parameter variations
|
||
|
|
# Rows: different hurst values (roughness)
|
||
|
|
# Cols: different lacunarity values
|
||
|
|
|
||
|
|
hurst_values = [0.2, 0.5, 0.8]
|
||
|
|
lacunarity_values = [1.5, 2.0, 3.0]
|
||
|
|
|
||
|
|
for row, hurst in enumerate(hurst_values):
|
||
|
|
for col, lacunarity in enumerate(lacunarity_values):
|
||
|
|
ox = col * panel_w
|
||
|
|
oy = row * panel_h
|
||
|
|
|
||
|
|
# Create noise with these parameters
|
||
|
|
noise = mcrfpy.NoiseSource(
|
||
|
|
dimensions=2,
|
||
|
|
algorithm='simplex',
|
||
|
|
hurst=hurst,
|
||
|
|
lacunarity=lacunarity,
|
||
|
|
seed=42
|
||
|
|
)
|
||
|
|
|
||
|
|
# Sample using heightmap for efficiency
|
||
|
|
hmap = noise.sample(
|
||
|
|
size=(panel_w, panel_h),
|
||
|
|
world_origin=(0, 0),
|
||
|
|
world_size=(10, 10),
|
||
|
|
mode='fbm',
|
||
|
|
octaves=6
|
||
|
|
)
|
||
|
|
|
||
|
|
# Apply to color layer
|
||
|
|
for y in range(panel_h):
|
||
|
|
for x in range(panel_w):
|
||
|
|
h = hmap.get((x, y))
|
||
|
|
color_layer.set(((ox + x, oy + y)), value_to_gray(h))
|
||
|
|
|
||
|
|
# Parameter label
|
||
|
|
label = mcrfpy.Caption(
|
||
|
|
text=f"H={hurst} L={lacunarity}",
|
||
|
|
pos=(ox * CELL_SIZE + 3, oy * CELL_SIZE + 3)
|
||
|
|
)
|
||
|
|
label.fill_color = mcrfpy.Color(255, 255, 0)
|
||
|
|
label.outline = 1
|
||
|
|
label.outline_color = mcrfpy.Color(0, 0, 0)
|
||
|
|
scene.children.append(label)
|
||
|
|
|
||
|
|
# Row/Column labels
|
||
|
|
row_labels = ["Low Hurst (rough)", "Mid Hurst (natural)", "High Hurst (smooth)"]
|
||
|
|
for row, text in enumerate(row_labels):
|
||
|
|
label = mcrfpy.Caption(text=text, pos=(5, row * panel_h * CELL_SIZE + panel_h * CELL_SIZE - 20))
|
||
|
|
label.fill_color = mcrfpy.Color(255, 200, 100)
|
||
|
|
label.outline = 1
|
||
|
|
label.outline_color = mcrfpy.Color(0, 0, 0)
|
||
|
|
scene.children.append(label)
|
||
|
|
|
||
|
|
col_labels = ["Low Lacunarity", "Standard (2.0)", "High Lacunarity"]
|
||
|
|
for col, text in enumerate(col_labels):
|
||
|
|
label = mcrfpy.Caption(text=text, pos=(col * panel_w * CELL_SIZE + 5, GRID_HEIGHT * CELL_SIZE - 20))
|
||
|
|
label.fill_color = mcrfpy.Color(100, 200, 255)
|
||
|
|
label.outline = 1
|
||
|
|
label.outline_color = mcrfpy.Color(0, 0, 0)
|
||
|
|
scene.children.append(label)
|
||
|
|
|
||
|
|
# Grid lines
|
||
|
|
for y in range(GRID_HEIGHT):
|
||
|
|
color_layer.set(((panel_w - 1, y)), mcrfpy.Color(100, 100, 100))
|
||
|
|
color_layer.set(((panel_w * 2 - 1, y)), mcrfpy.Color(100, 100, 100))
|
||
|
|
for x in range(GRID_WIDTH):
|
||
|
|
color_layer.set(((x, panel_h - 1)), mcrfpy.Color(100, 100, 100))
|
||
|
|
color_layer.set(((x, panel_h * 2 - 1)), mcrfpy.Color(100, 100, 100))
|
||
|
|
|
||
|
|
|
||
|
|
# Setup
|
||
|
|
scene = mcrfpy.Scene("noise_params_demo")
|
||
|
|
|
||
|
|
grid = mcrfpy.Grid(
|
||
|
|
grid_size=(GRID_WIDTH, GRID_HEIGHT),
|
||
|
|
pos=(0, 0),
|
||
|
|
size=(GRID_WIDTH * CELL_SIZE, GRID_HEIGHT * CELL_SIZE),
|
||
|
|
layers={}
|
||
|
|
)
|
||
|
|
grid.fill_color = mcrfpy.Color(0, 0, 0)
|
||
|
|
color_layer = grid.add_layer("color", z_index=-1)
|
||
|
|
scene.children.append(grid)
|
||
|
|
|
||
|
|
scene.activate()
|
||
|
|
|
||
|
|
# Run the demo
|
||
|
|
run_demo(0)
|
||
|
|
|
||
|
|
# Take screenshot
|
||
|
|
automation.screenshot("procgen_21_noise_parameters.png")
|
||
|
|
print("Screenshot saved: procgen_21_noise_parameters.png")
|