Tooling
This commit is contained in:
@@ -0,0 +1,164 @@
|
||||
/**
|
||||
* Autonomous terrain tuning script.
|
||||
*
|
||||
* Runs the app headlessly with fixed seeds, collects metrics, saves results.
|
||||
* Designed to be driven by Claude Code — modify terrain-config.js between runs.
|
||||
*
|
||||
* Usage: node tuning/auto-tune.mjs [label]
|
||||
* Output: tuning/results/<label>.json with metrics from all seeds
|
||||
*/
|
||||
|
||||
import http from 'node:http';
|
||||
import fs from 'node:fs';
|
||||
import path from 'node:path';
|
||||
import { fileURLToPath } from 'node:url';
|
||||
import puppeteer from 'puppeteer';
|
||||
|
||||
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
||||
const PROJECT_ROOT = path.resolve(__dirname, '..');
|
||||
const RESULTS_DIR = path.join(__dirname, 'results');
|
||||
fs.mkdirSync(RESULTS_DIR, { recursive: true });
|
||||
|
||||
const label = process.argv[2] || `run-${Date.now()}`;
|
||||
|
||||
const MIME = {
|
||||
'.html': 'text/html', '.js': 'application/javascript', '.mjs': 'application/javascript',
|
||||
'.css': 'text/css', '.json': 'application/json', '.png': 'image/png',
|
||||
'.svg': 'image/svg+xml', '.ico': 'image/x-icon', '.wasm': 'application/wasm',
|
||||
'.txt': 'text/plain', '.xml': 'application/xml',
|
||||
};
|
||||
|
||||
function startServer() {
|
||||
return new Promise((resolve) => {
|
||||
const server = http.createServer((req, res) => {
|
||||
let urlPath = decodeURIComponent(new URL(req.url, 'http://localhost').pathname);
|
||||
if (urlPath === '/' || urlPath === '') urlPath = '/index.html';
|
||||
const filePath = path.join(PROJECT_ROOT, urlPath);
|
||||
if (!filePath.startsWith(PROJECT_ROOT)) { res.writeHead(403); res.end(); return; }
|
||||
fs.readFile(filePath, (err, data) => {
|
||||
if (err) { res.writeHead(404); res.end('Not found'); return; }
|
||||
const ext = path.extname(filePath).toLowerCase();
|
||||
res.writeHead(200, { 'Content-Type': MIME[ext] || 'application/octet-stream' });
|
||||
res.end(data);
|
||||
});
|
||||
});
|
||||
server.listen(0, '127.0.0.1', () => {
|
||||
resolve({ server, port: server.address().port });
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
// Seeds chosen for diversity: different plate configs, land coverage, etc.
|
||||
const SEEDS = [42, 100, 200, 300, 400];
|
||||
|
||||
async function runSeed(browser, baseUrl, seed) {
|
||||
const page = await browser.newPage();
|
||||
await page.setViewport({ width: 1200, height: 900 });
|
||||
page.on('dialog', (d) => d.dismiss());
|
||||
page.on('pageerror', () => {}); // suppress
|
||||
|
||||
try {
|
||||
await page.goto(baseUrl, { waitUntil: 'domcontentloaded', timeout: 60_000 });
|
||||
await new Promise((r) => setTimeout(r, 2000));
|
||||
|
||||
// Dismiss overlays
|
||||
await page.evaluate(() => {
|
||||
for (const id of ['tutorialOverlay', 'whatsNewOverlay']) {
|
||||
const el = document.getElementById(id);
|
||||
if (el) el.style.display = 'none';
|
||||
}
|
||||
});
|
||||
|
||||
// Set low detail for speed
|
||||
await page.evaluate(() => {
|
||||
const el = document.getElementById('sN');
|
||||
el.value = 400;
|
||||
el.dispatchEvent(new Event('input', { bubbles: true }));
|
||||
});
|
||||
|
||||
// Patch seed
|
||||
await page.evaluate((s) => {
|
||||
const origPost = Worker.prototype.postMessage;
|
||||
Worker.prototype.postMessage = function(msg, ...rest) {
|
||||
if (msg && msg.cmd === 'generate' && msg.seed === undefined) msg.seed = Number(s);
|
||||
return origPost.call(this, msg, ...rest);
|
||||
};
|
||||
}, seed);
|
||||
|
||||
// Generate
|
||||
const genDone = page.evaluate((timeout) => {
|
||||
return new Promise((resolve, reject) => {
|
||||
const btn = document.getElementById('generate');
|
||||
const timer = setTimeout(() => reject(new Error('Generation timed out')), timeout);
|
||||
btn.addEventListener('generate-done', () => { clearTimeout(timer); resolve(); }, { once: true });
|
||||
});
|
||||
}, 120_000);
|
||||
|
||||
await new Promise((r) => setTimeout(r, 100));
|
||||
await page.click('#generate');
|
||||
await genDone;
|
||||
|
||||
await new Promise((r) => setTimeout(r, 500));
|
||||
const metrics = await page.evaluate(() => window.__terrainMetrics);
|
||||
return { seed, metrics: metrics || { _error: 'no metrics' } };
|
||||
} finally {
|
||||
await page.close().catch(() => {});
|
||||
}
|
||||
}
|
||||
|
||||
async function main() {
|
||||
const { server, port } = await startServer();
|
||||
const baseUrl = `http://127.0.0.1:${port}`;
|
||||
const browser = await puppeteer.launch({
|
||||
headless: true,
|
||||
args: ['--no-sandbox', '--disable-setuid-sandbox', '--enable-webgl',
|
||||
'--use-gl=angle', '--use-angle=swiftshader-webgl', '--enable-unsafe-swiftshader'],
|
||||
});
|
||||
|
||||
const results = [];
|
||||
const t0 = performance.now();
|
||||
|
||||
try {
|
||||
for (const seed of SEEDS) {
|
||||
const r = await runSeed(browser, baseUrl, seed);
|
||||
results.push(r);
|
||||
process.stdout.write(` seed ${seed}: ${r.metrics._error ? 'ERROR' : 'OK'} (${(r.metrics._metrics_ms || 0).toFixed(0)}ms metrics)\n`);
|
||||
}
|
||||
} finally {
|
||||
await browser.close();
|
||||
server.close();
|
||||
}
|
||||
|
||||
const elapsed = ((performance.now() - t0) / 1000).toFixed(1);
|
||||
|
||||
// Compute cross-seed averages for key metrics
|
||||
const validMetrics = results.filter(r => !r.metrics._error).map(r => r.metrics);
|
||||
const avg = {};
|
||||
if (validMetrics.length > 0) {
|
||||
const keys = Object.keys(validMetrics[0]).filter(k => !k.startsWith('_') && typeof validMetrics[0][k] === 'number');
|
||||
for (const k of keys) {
|
||||
const vals = validMetrics.map(m => m[k]).filter(v => v != null && !isNaN(v));
|
||||
avg[k] = vals.length > 0 ? +(vals.reduce((a, b) => a + b, 0) / vals.length).toFixed(4) : null;
|
||||
}
|
||||
}
|
||||
|
||||
const output = { label, elapsed_s: +elapsed, seeds: SEEDS, results, averages: avg };
|
||||
const outPath = path.join(RESULTS_DIR, `${label}.json`);
|
||||
fs.writeFileSync(outPath, JSON.stringify(output, null, 2));
|
||||
console.log(`\nResults saved: ${outPath} (${elapsed}s total)`);
|
||||
|
||||
// Print summary
|
||||
console.log('\n=== Cross-seed Averages ===');
|
||||
const highlight = [
|
||||
'continent_count', 'island_count_total', 'flat_ocean_plate_land_fraction',
|
||||
'relief_headroom', 'coast_complexity_index', 'hypsometry_trough_depth',
|
||||
'mountain_boundary_ratio', 'orogenic_elev_correlation', 'erosion_slope_correlation',
|
||||
'coastal_lowland_fraction', 'land_band_500m_plus_frac',
|
||||
'shelf_width_passive_km', 'shelf_width_active_km',
|
||||
];
|
||||
for (const k of highlight) {
|
||||
if (avg[k] != null) console.log(` ${k}: ${avg[k]}`);
|
||||
}
|
||||
}
|
||||
|
||||
main().catch((err) => { console.error(err); process.exit(1); });
|
||||
@@ -0,0 +1,323 @@
|
||||
/**
|
||||
* Headless rendering harness for World Orogen.
|
||||
*
|
||||
* Launches a local HTTP server, drives the app with Puppeteer, generates
|
||||
* planets from fixed seeds/slider combos, and saves globe screenshots to
|
||||
* tuning/screenshots/.
|
||||
*
|
||||
* Usage: node tuning/render-harness.mjs
|
||||
*/
|
||||
|
||||
import http from 'node:http';
|
||||
import fs from 'node:fs';
|
||||
import path from 'node:path';
|
||||
import { fileURLToPath } from 'node:url';
|
||||
import puppeteer from 'puppeteer';
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// Paths
|
||||
// ---------------------------------------------------------------------------
|
||||
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
||||
const PROJECT_ROOT = path.resolve(__dirname, '..');
|
||||
const SCREENSHOT_DIR = path.join(__dirname, 'screenshots');
|
||||
|
||||
fs.mkdirSync(SCREENSHOT_DIR, { recursive: true });
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// MIME types for the static server
|
||||
// ---------------------------------------------------------------------------
|
||||
const MIME = {
|
||||
'.html': 'text/html',
|
||||
'.js': 'application/javascript',
|
||||
'.mjs': 'application/javascript',
|
||||
'.css': 'text/css',
|
||||
'.json': 'application/json',
|
||||
'.png': 'image/png',
|
||||
'.jpg': 'image/jpeg',
|
||||
'.jpeg': 'image/jpeg',
|
||||
'.svg': 'image/svg+xml',
|
||||
'.ico': 'image/x-icon',
|
||||
'.woff': 'font/woff',
|
||||
'.woff2':'font/woff2',
|
||||
'.webmanifest': 'application/manifest+json',
|
||||
'.txt': 'text/plain',
|
||||
'.xml': 'application/xml',
|
||||
'.wasm': 'application/wasm',
|
||||
};
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// Static file server
|
||||
// ---------------------------------------------------------------------------
|
||||
function startServer() {
|
||||
return new Promise((resolve) => {
|
||||
const server = http.createServer((req, res) => {
|
||||
let urlPath = decodeURIComponent(new URL(req.url, 'http://localhost').pathname);
|
||||
if (urlPath === '/' || urlPath === '') urlPath = '/index.html';
|
||||
|
||||
const filePath = path.join(PROJECT_ROOT, urlPath);
|
||||
|
||||
// Security: stay inside project root
|
||||
if (!filePath.startsWith(PROJECT_ROOT)) {
|
||||
res.writeHead(403); res.end(); return;
|
||||
}
|
||||
|
||||
fs.readFile(filePath, (err, data) => {
|
||||
if (err) {
|
||||
res.writeHead(404);
|
||||
res.end('Not found');
|
||||
return;
|
||||
}
|
||||
const ext = path.extname(filePath).toLowerCase();
|
||||
const mime = MIME[ext] || 'application/octet-stream';
|
||||
res.writeHead(200, { 'Content-Type': mime });
|
||||
res.end(data);
|
||||
});
|
||||
});
|
||||
|
||||
server.listen(0, '127.0.0.1', () => {
|
||||
const port = server.address().port;
|
||||
console.log(`Static server listening on http://127.0.0.1:${port}`);
|
||||
resolve({ server, port });
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// Test cases
|
||||
// ---------------------------------------------------------------------------
|
||||
const DETAIL_SLIDER_VALUE = 400; // ~31 000 regions — fast iteration
|
||||
|
||||
const TEST_CASES = [
|
||||
{
|
||||
name: 'default',
|
||||
seed: '42',
|
||||
sliders: {},
|
||||
},
|
||||
{
|
||||
name: 'few-plates-high-land',
|
||||
seed: '100',
|
||||
sliders: { sP: 8, sLc: 0.6 },
|
||||
},
|
||||
{
|
||||
name: 'many-plates-low-land',
|
||||
seed: '200',
|
||||
sliders: { sP: 80, sLc: 0.25 },
|
||||
},
|
||||
{
|
||||
name: 'high-erosion',
|
||||
seed: '300',
|
||||
sliders: { sGl: 0.8, sHEr: 0.8, sTEr: 0.8 },
|
||||
},
|
||||
{
|
||||
name: 'mountainous-sharp-ridges',
|
||||
seed: '400',
|
||||
sliders: { sNs: 0.4, sRs: 0.8 },
|
||||
},
|
||||
];
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// Helpers
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
/** Set a slider's value and dispatch an 'input' event so the app reacts. */
|
||||
async function setSlider(page, id, value) {
|
||||
await page.evaluate(({ id, value }) => {
|
||||
const el = document.getElementById(id);
|
||||
if (!el) throw new Error(`Slider #${id} not found`);
|
||||
el.value = value;
|
||||
el.dispatchEvent(new Event('input', { bubbles: true }));
|
||||
}, { id, value: String(value) });
|
||||
}
|
||||
|
||||
/**
|
||||
* Install a one-shot listener for 'generate-done' on #generate BEFORE
|
||||
* clicking the button, and return a promise that resolves when it fires.
|
||||
* Call this, store the promise, click the button, then await the promise.
|
||||
*/
|
||||
function installGenerationWaiter(page, timeoutMs = 120_000) {
|
||||
// page.evaluate returns a promise that resolves when the inner promise does
|
||||
return page.evaluate((timeout) => {
|
||||
return new Promise((resolve, reject) => {
|
||||
const btn = document.getElementById('generate');
|
||||
const timer = setTimeout(() => reject(new Error('Generation timed out')), timeout);
|
||||
btn.addEventListener('generate-done', () => { clearTimeout(timer); resolve(); }, { once: true });
|
||||
});
|
||||
}, timeoutMs);
|
||||
}
|
||||
|
||||
/** Rotate the globe by dragging horizontally (yaw) and/or vertically (pitch). */
|
||||
async function rotateGlobe(page, yawRadians, pitchRadians = 0) {
|
||||
await page.evaluate(({ yaw, pitch }) => {
|
||||
const canvas = document.getElementById('canvas');
|
||||
const w = canvas.clientWidth;
|
||||
const h = canvas.clientHeight;
|
||||
const cx = w / 2;
|
||||
const cy = h / 2;
|
||||
// OrbitControls maps 2*PI rotation to a full canvas-width/height drag.
|
||||
const dx = (yaw / (2 * Math.PI)) * w;
|
||||
const dy = (pitch / (Math.PI)) * h;
|
||||
|
||||
const pointerDown = new PointerEvent('pointerdown', {
|
||||
clientX: cx, clientY: cy, button: 0, bubbles: true, pointerId: 1,
|
||||
});
|
||||
const pointerMove = new PointerEvent('pointermove', {
|
||||
clientX: cx - dx, clientY: cy - dy, button: 0, bubbles: true, pointerId: 1,
|
||||
});
|
||||
const pointerUp = new PointerEvent('pointerup', {
|
||||
clientX: cx - dx, clientY: cy - dy, button: 0, bubbles: true, pointerId: 1,
|
||||
});
|
||||
|
||||
canvas.dispatchEvent(pointerDown);
|
||||
canvas.dispatchEvent(pointerMove);
|
||||
canvas.dispatchEvent(pointerUp);
|
||||
}, { yaw: yawRadians, pitch: pitchRadians });
|
||||
|
||||
// Let the render loop catch up.
|
||||
await new Promise((r) => setTimeout(r, 1500));
|
||||
}
|
||||
|
||||
/** Take a screenshot of the canvas element. */
|
||||
async function screenshotCanvas(page, filePath) {
|
||||
const canvas = await page.$('#canvas');
|
||||
if (!canvas) throw new Error('Canvas not found');
|
||||
await canvas.screenshot({ path: filePath });
|
||||
console.log(` Saved: ${path.relative(PROJECT_ROOT, filePath)}`);
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// Main
|
||||
// ---------------------------------------------------------------------------
|
||||
async function main() {
|
||||
const { server, port } = await startServer();
|
||||
const baseUrl = `http://127.0.0.1:${port}`;
|
||||
|
||||
const browser = await puppeteer.launch({
|
||||
headless: true,
|
||||
args: [
|
||||
'--no-sandbox',
|
||||
'--disable-setuid-sandbox',
|
||||
'--enable-webgl',
|
||||
'--use-gl=angle',
|
||||
'--use-angle=swiftshader-webgl',
|
||||
'--enable-unsafe-swiftshader',
|
||||
],
|
||||
});
|
||||
|
||||
try {
|
||||
for (const tc of TEST_CASES) {
|
||||
console.log(`\n=== Test case: ${tc.name} (seed ${tc.seed}) ===`);
|
||||
let page;
|
||||
try {
|
||||
page = await browser.newPage();
|
||||
await page.setViewport({ width: 1200, height: 900 });
|
||||
|
||||
// Suppress dialogs / permission prompts
|
||||
page.on('dialog', (d) => d.dismiss());
|
||||
|
||||
// Forward page console and errors for debugging
|
||||
page.on('console', (msg) => {
|
||||
if (msg.type() === 'error') console.log(` [PAGE ERROR] ${msg.text()}`);
|
||||
});
|
||||
page.on('pageerror', (err) => console.log(` [PAGE EXCEPTION] ${err.message}`));
|
||||
|
||||
// Navigate and wait for initial load
|
||||
await page.goto(baseUrl, { waitUntil: 'domcontentloaded', timeout: 60_000 });
|
||||
// Wait for ES modules and Three.js to initialize
|
||||
await new Promise((r) => setTimeout(r, 2000));
|
||||
|
||||
// Close any overlay that may be showing (tutorial / what's new)
|
||||
await page.evaluate(() => {
|
||||
for (const id of ['tutorialOverlay', 'whatsNewOverlay']) {
|
||||
const el = document.getElementById(id);
|
||||
if (el) el.style.display = 'none';
|
||||
}
|
||||
});
|
||||
|
||||
// Set detail slider low for fast iteration
|
||||
await setSlider(page, 'sN', DETAIL_SLIDER_VALUE);
|
||||
|
||||
// Set any custom sliders for this test case
|
||||
for (const [id, val] of Object.entries(tc.sliders)) {
|
||||
await setSlider(page, id, val);
|
||||
}
|
||||
|
||||
// Intercept the Web Worker postMessage to inject our fixed seed.
|
||||
// The generate() function passes seed as `undefined` for fresh builds,
|
||||
// and the worker fills it with Math.random(). We patch postMessage so
|
||||
// the next 'generate' command carries our chosen seed instead.
|
||||
await page.evaluate((seed) => {
|
||||
const origPost = Worker.prototype.postMessage;
|
||||
Worker.prototype.postMessage = function(msg, ...rest) {
|
||||
if (msg && msg.cmd === 'generate' && msg.seed === undefined) {
|
||||
msg.seed = Number(seed);
|
||||
}
|
||||
return origPost.call(this, msg, ...rest);
|
||||
};
|
||||
}, tc.seed);
|
||||
|
||||
// Install the completion listener BEFORE clicking, then click, then await.
|
||||
const t0 = performance.now();
|
||||
const genDone = installGenerationWaiter(page, 120_000);
|
||||
// Small delay so the evaluate above has time to register the listener
|
||||
await new Promise((r) => setTimeout(r, 100));
|
||||
await page.click('#generate');
|
||||
|
||||
// Wait for generation to finish
|
||||
await genDone;
|
||||
|
||||
const elapsed = ((performance.now() - t0) / 1000).toFixed(1);
|
||||
console.log(` Generation completed in ${elapsed}s`);
|
||||
|
||||
// Let rendering settle
|
||||
await new Promise((r) => setTimeout(r, 1000));
|
||||
|
||||
// Extract terrain metrics scorecard
|
||||
const metrics = await page.evaluate(() => window.__terrainMetrics);
|
||||
if (metrics) {
|
||||
const metricsPath = path.join(SCREENSHOT_DIR, `seed-${tc.seed}_${tc.name}_metrics.json`);
|
||||
fs.writeFileSync(metricsPath, JSON.stringify(metrics, null, 2));
|
||||
console.log(` Metrics: ${path.relative(PROJECT_ROOT, metricsPath)}`);
|
||||
if (metrics._error) console.warn(` Metrics error: ${metrics._error}`);
|
||||
} else {
|
||||
console.warn(' No terrain metrics available');
|
||||
}
|
||||
|
||||
// Collapse the side panel to maximize canvas area
|
||||
await page.click('#sidebarToggle');
|
||||
// Let the panel animate closed and Three.js resize
|
||||
await new Promise((r) => setTimeout(r, 800));
|
||||
|
||||
// Take globe screenshots covering the full planet:
|
||||
// 4 equatorial rotations (0°, 90°, 180°, 270°) + north pole + south pole
|
||||
const base = `seed-${tc.seed}_${tc.name}`;
|
||||
|
||||
// Equatorial views — rotate around Y axis
|
||||
for (let i = 0; i < 4; i++) {
|
||||
if (i > 0) await rotateGlobe(page, Math.PI / 2, 0);
|
||||
await screenshotCanvas(page, path.join(SCREENSHOT_DIR, `${base}_eq-${i * 90}.png`));
|
||||
}
|
||||
|
||||
// North pole — tilt camera up
|
||||
await rotateGlobe(page, 0, -Math.PI / 2.2);
|
||||
await screenshotCanvas(page, path.join(SCREENSHOT_DIR, `${base}_north-pole.png`));
|
||||
|
||||
// South pole — tilt camera down (reset first, then go down)
|
||||
await rotateGlobe(page, 0, Math.PI / 1.1);
|
||||
await screenshotCanvas(page, path.join(SCREENSHOT_DIR, `${base}_south-pole.png`));
|
||||
} catch (err) {
|
||||
console.error(` FAILED: ${err.message}`);
|
||||
} finally {
|
||||
if (page) await page.close().catch(() => {});
|
||||
}
|
||||
}
|
||||
} finally {
|
||||
await browser.close();
|
||||
server.close();
|
||||
console.log('\nDone. Screenshots saved to tuning/screenshots/');
|
||||
}
|
||||
}
|
||||
|
||||
main().catch((err) => {
|
||||
console.error(err);
|
||||
process.exit(1);
|
||||
});
|
||||
@@ -0,0 +1,99 @@
|
||||
# Terrain Tuning Session — Findings
|
||||
|
||||
## Current Best: v7 (`config-combined-v7.js`)
|
||||
|
||||
### All Changes from Original Baseline
|
||||
|
||||
```
|
||||
# Mountain Structure
|
||||
FOLD_FREQ_PRIMARY: 120 → 160 # tighter fold ridges
|
||||
FOLD_FREQ_SECONDARY: 300 → 400 # finer secondary folds
|
||||
FOLD_FREQ_MULT_SCALE: 1.5 → 2.0 # more chaotic fold belts
|
||||
RIDGE_STRENGTH: 0.12 → 0.15 # taller convergent ridges
|
||||
DISSECT_THRESHOLD: 0.12 → 0.10 # more mountain valley carving
|
||||
DISSECT_AMP: 0.4 → 0.55 # deeper dissection valleys
|
||||
SUMMIT_THRESHOLD: 0.65 → 0.55 # peaks on slightly lower mountains
|
||||
SUMMIT_STRESS_MIN: 0.05 → 0.03 # peaks with less stress requirement
|
||||
SUMMIT_SPIKE_OFFSET: 0.45 → 0.40 # more frequent summit spikes
|
||||
SUMMIT_STRESS_FLOOR: 0.3 → 0.25 # lower stress floor for peaks
|
||||
|
||||
# Interior Terrain
|
||||
INTERIOR_BASE_SHIELD: 0.10 → 0.14 # higher stable cratons
|
||||
INTERIOR_BASE_BASIN: 0.06 → 0.04 # lower sedimentary basins
|
||||
INTERIOR_TECTONIC: 0.16 → 0.20 # higher tectonic interiors
|
||||
PLATEAU_BOOST: 0.025 → 0.04 # more prominent plateaus
|
||||
CRATON_AMP_SUPPRESS: 0.4 → 0.25 # more texture on stable interiors
|
||||
BASIN_AMP_SUPPRESS: 0.7 → 0.5 # more texture in basins
|
||||
|
||||
# Tectonic Features
|
||||
RIFT_AXIS_DEPTH: -0.15 → -0.18 # deeper rift valleys
|
||||
RIFT_AXIS_VOLCANIC_AMP: 0.04 → 0.06 # more rift volcanism texture
|
||||
RIFT_SHOULDER_UPLIFT: 0.03 → 0.05 # higher rift shoulders
|
||||
BACK_ARC_DEPTH: 0.10 → 0.14 # deeper back-arc basins
|
||||
TRENCH_BASE_DEPTH: 0.15 → 0.20 # deeper ocean trenches
|
||||
TRENCH_STRESS_DEPTH: 0.15 → 0.20 # more trench variation with stress
|
||||
|
||||
# Post-Processing
|
||||
PEAK_COMPRESS_POWER: 0.85 → 0.90 # less peak compression = taller peaks
|
||||
WARP_MAX_AMP_MULT: 0.12 → 0.13 # slightly more domain warp
|
||||
SMOOTH_EDGE_SENSITIVITY: 8 → 12 # more edge preservation in smoothing
|
||||
RIDGE_SHARPEN_CAP: 1.5 → 2.0 # sharper ridge post-processing
|
||||
VALLEY_DEEPEN_FACTOR: 0.4 → 0.5 # deeper valley carving
|
||||
```
|
||||
|
||||
### Metrics Comparison: Baseline → Best (v7)
|
||||
|
||||
| Metric | Baseline | v7 | Change |
|
||||
|--------|----------|-----|--------|
|
||||
| relief_headroom | 0.487 | 0.547 | +12% more dramatic |
|
||||
| coast_complexity | 27.9 | 28.5 | +2% more complex |
|
||||
| hypsometry_trough | 0.79 | 0.78 | ~same (good) |
|
||||
| mountain_boundary_ratio | 0.52 | 0.52 | same |
|
||||
| land_500m_plus_frac | 0.26 | 0.31 | slightly more highland |
|
||||
| flat_ocean_plate_land | 0.65 | 0.59 | -9% improved |
|
||||
| island_count | 286 | 288 | same |
|
||||
| erosion_slope_corr | 0.46 | 0.46 | same |
|
||||
| shelf_width_active_km | 293 | 222 | -24% narrower (more realistic) |
|
||||
| shelf_width_passive_km | 478 | 443 | -7% narrower |
|
||||
|
||||
### Visual Improvements (confirmed at 31K and 90K regions)
|
||||
|
||||
1. **Mountain ridges** more defined with visible linear structure
|
||||
2. **Continental interiors** have more elevation variety (craton vs basin contrast)
|
||||
3. **Rift valleys** more visible as distinct features
|
||||
4. **Ocean floor** more differentiated (deeper trenches, visible ridges)
|
||||
5. **Coastlines** slightly more complex
|
||||
6. **Peaks** more prominent and frequent
|
||||
|
||||
## Saved Config Snapshots
|
||||
|
||||
All in `tuning/results/`:
|
||||
- `config-sharper-mountains.js` — fold freq + ridge + dissection only
|
||||
- `config-sharper-mtn-interior-contrast.js` — + interior contrast
|
||||
- `config-combined-v2.js` — + peak compress + less craton suppress
|
||||
- `config-combined-v3-rifts-summits.js` — + rifts + summits
|
||||
- `config-combined-v4-ocean.js` — + deeper trenches/back-arcs
|
||||
- `config-combined-v5-warp.js` — + subtle warp boost
|
||||
- `config-combined-v6-full.js` — + edge preserve + ridge sharpen
|
||||
- `config-combined-v7.js` — + basin suppress + chaotic folds (**BEST**)
|
||||
|
||||
## Key Learnings
|
||||
|
||||
1. **Elevation thresholds must use quartic mapping** — elevToHeightKm is t^4-based, so 500m = elev 0.40, not 0.0625
|
||||
2. **Hypsometric curve blend has minimal effect** — pre-existing distribution dominates
|
||||
3. **Dissection is the #1 lever** for breaking up blobby mountains into realistic ridges
|
||||
4. **Stress decay is delicate** — 0.5 original is right; 0.6 spreads too wide
|
||||
5. **Deeper ocean features improve shelf differentiation** — more room for gradient
|
||||
6. **Volcanic feature boosts backfire** — more arc uplift = more flat land, not taller islands
|
||||
7. **Hotspot increases reduce island count** — merging features into fewer larger masses
|
||||
8. **Interior shield/basin contrast** creates visual variety on continents
|
||||
9. **Edge sensitivity in smoothing** preserves features that other steps create
|
||||
10. **Fold frequency boost** is most visible at low detail levels (default view)
|
||||
|
||||
## Parameters Still Worth Exploring
|
||||
|
||||
- Glacial erosion parameters (only tested at user-slider level, not internal constants)
|
||||
- Coastal plain width and depression (small effect individually)
|
||||
- Island arc geometry (ARC_DIST_BASE, ARC_SIGMA_BASE_VAL)
|
||||
- Super-plate blend weights (SMALL_W, SUPER_W)
|
||||
- Hydraulic erosion deposit fraction and slope sensitivity
|
||||
@@ -0,0 +1,351 @@
|
||||
// Terrain generation tunable constants.
|
||||
// Grouped by subsystem for iterative tuning.
|
||||
// These are internal algorithm constants, NOT user-facing slider parameters.
|
||||
|
||||
// ── Collision & Stress ──
|
||||
export const COLLISION_THRESHOLD = 0.75;
|
||||
export const COLLISION_DT_BASE = 1e-2;
|
||||
export const COLLISION_DT_REF_REGIONS = 10000;
|
||||
export const PAIR_INTENSITY_BASE = 0.5;
|
||||
export const SUBDUCT_UNDULATION_DENSITY_DECAY = 12;
|
||||
export const SUBDUCT_UNDULATION_FREQ = 6;
|
||||
export const SUBDUCT_UNDULATION_AMP = 0.4;
|
||||
export const SUBDUCT_FACTOR_BASE = 0.5;
|
||||
export const SUBDUCT_FACTOR_TANH_SCALE = 8;
|
||||
export const SUBDUCT_THRESHOLD = 0.55;
|
||||
export const BOUNDARY_TYPE_THRESH_FACTOR = 0.3;
|
||||
|
||||
export const STRESS_PROPAGATE_MIN = 0.01;
|
||||
export const STRESS_PROPAGATE_CUTOFF = 0.005;
|
||||
export const STRESS_DIR_FACTOR_MIN = 0.1;
|
||||
export const STRESS_DIR_FACTOR_BASE = 0.3;
|
||||
export const STRESS_DIR_FACTOR_SCALE = 0.7;
|
||||
export const STRESS_DIR_BLEND_PARENT = 0.8;
|
||||
export const STRESS_DIR_BLEND_TRAVEL = 0.2;
|
||||
export const STRESS_DIR_SMOOTH_PASSES = 2;
|
||||
export const STRESS_DIR_SELF_WEIGHT = 2;
|
||||
|
||||
export const STRESS_DECAY_BASE = 0.5;
|
||||
export const STRESS_DECAY_SPREAD_FACTOR = 0.04;
|
||||
export const STRESS_SUBDUCT_DECAY_MULT = 0.45;
|
||||
export const STRESS_PASSES_PER_SPREAD = 3;
|
||||
|
||||
export const STRESS_PERCENTILE = 0.97;
|
||||
|
||||
// Blend weights for dual-layer orogeny (small plates vs super plates)
|
||||
export const SMALL_W = 0.05;
|
||||
export const SUPER_W = 0.95;
|
||||
|
||||
// ── Distance Fields & Zone Widths ──
|
||||
export const INTERIOR_BAND_BASE = 16;
|
||||
export const TECTONIC_REACH_BASE = 20;
|
||||
export const COASTAL_PLAIN_WIDTH_BASE = 18;
|
||||
export const COAST_BFS_WIDTH_BASE = 8;
|
||||
|
||||
// ── Mountain Profiles ──
|
||||
export const RIDGE_STRENGTH = 0.15;
|
||||
export const RIDGE_SIGMA_BASE = 5;
|
||||
export const RIDGE_PEAK_SHIFT_BASE = 2;
|
||||
export const RIDGE_EXTENT_BASE = 10;
|
||||
export const RIDGE_ASYM_SUBDUCT_NARROW = 0.6;
|
||||
export const RIDGE_ASYM_OVERRIDE_WIDEN = 0.5;
|
||||
export const RIDGE_STRESS_WIDTH_BASE = 0.75;
|
||||
export const RIDGE_STRESS_WIDTH_SCALE = 0.5;
|
||||
export const RIDGE_WIDTH_NOISE_AMP = 0.2;
|
||||
|
||||
export const BASE_SCALE = 0.6;
|
||||
export const ASYMMETRY_FACTOR = 0.8;
|
||||
|
||||
export const SUBDUCTING_SUPPRESSION = 0.42;
|
||||
|
||||
export const STRESS_MAG_SCALE = 0.40;
|
||||
export const STRESS_DEPRESS_FRAC = 0.4;
|
||||
export const STRESS_HEIGHT_VAR_BASE = 0.60;
|
||||
export const STRESS_HEIGHT_VAR_SCALE = 0.8;
|
||||
|
||||
export const SUBDUCTING_REACH_MIN = 0.35;
|
||||
export const SUBDUCTING_REACH_RANGE = 0.3;
|
||||
|
||||
// ── Fold Ridges ──
|
||||
export const FOLD_FREQ_PRIMARY = 160;
|
||||
export const FOLD_FREQ_SECONDARY = 400;
|
||||
export const FOLD_MEAN_OFFSET = 0.36;
|
||||
export const FOLD_PHASE_WARP_AMP = 0.08;
|
||||
export const FOLD_PHASE_WARP2_AMP = 0.12;
|
||||
export const FOLD_AMP_MOD_BASE = 0.6;
|
||||
export const FOLD_AMP_MOD_SCALE = 0.4;
|
||||
export const FOLD_AMP_MOD2_BASE = 0.5;
|
||||
export const FOLD_AMP_MOD2_SCALE = 0.5;
|
||||
export const FOLD_SECONDARY_ALONG = 0.85;
|
||||
export const FOLD_SECONDARY_CROSS = 0.15;
|
||||
export const FOLD_SECONDARY_AMP = 0.18;
|
||||
export const FOLD_NOISE_MAG_SCALE = 0.8;
|
||||
export const FOLD_ELEV_THRESHOLD = 0.05;
|
||||
export const FOLD_ELEV_SCALE = 4;
|
||||
export const FOLD_ELEV_BOOST_OFFSET = 0.03;
|
||||
export const FOLD_ELEV_BOOST_SCALE = 6;
|
||||
export const FOLD_SF_SUPPRESS = 1.5;
|
||||
export const FOLD_FREQ_MULT_SCALE = 1.5;
|
||||
|
||||
// ── Basins & Rifts ──
|
||||
export const RIFT_HALF_WIDTH_BASE = 4;
|
||||
export const RIFT_FLOOR_MULT = 1.5;
|
||||
export const RIFT_SHOULDER_MULT = 2.5;
|
||||
export const RIFT_AXIS_DEPTH = -0.15;
|
||||
export const RIFT_AXIS_VOLCANIC_AMP = 0.04;
|
||||
export const RIFT_FLOOR_DEPTH = -0.12;
|
||||
export const RIFT_FLOOR_TAPER = 0.3;
|
||||
export const RIFT_FLOOR_VOLCANIC_AMP = 0.03;
|
||||
export const RIFT_SHOULDER_UPLIFT = 0.03;
|
||||
export const RIFT_FADEOUT_RESIDUAL = 0.2;
|
||||
|
||||
export const BASIN_FREQ = 1.8;
|
||||
export const BASIN_FACTOR_BIAS = 0.5;
|
||||
export const BASIN_FACTOR_SCALE = 0.6;
|
||||
export const FORELAND_STRESS_THRESH = 0.15;
|
||||
export const FORELAND_WIDTH_FRAC = 0.3;
|
||||
export const FORELAND_BASIN_DEPTH = 0.05;
|
||||
export const FORELAND_PEAK_POS = 0.2;
|
||||
export const FORELAND_BASIN_DEEPENING_BASE = 0.5;
|
||||
export const FORELAND_BASIN_DEEPENING_SCALE = 0.5;
|
||||
|
||||
// ── Back-Arc & Foreland ──
|
||||
export const BACK_ARC_START_BASE = 2;
|
||||
export const BACK_ARC_PEAK_BASE = 3;
|
||||
export const BACK_ARC_END_BASE = 5;
|
||||
export const BACK_ARC_DEPTH = 0.10;
|
||||
export const BACK_ARC_SUBDUCT_THRESH = 0.50;
|
||||
|
||||
// ── Noise Layering ──
|
||||
export const WARP_SCALE = 0.4;
|
||||
export const OROGENIC_FREQ = 1.5;
|
||||
export const NOISE_ACTIVITY_SCALE = 4;
|
||||
export const NOISE_BASE_SCALE = 0.25;
|
||||
export const NOISE_ACTIVITY_CONTRIB = 0.75;
|
||||
export const PLATEAU_SUPPRESS_MIN = 0.30;
|
||||
export const PLATEAU_SUPPRESS_SCALE = 0.60;
|
||||
export const BASIN_AMP_SUPPRESS = 0.7;
|
||||
export const CRATON_AMP_SUPPRESS = 0.25;
|
||||
export const RIDGED_NOISE_AMP = 1.5;
|
||||
export const DETAIL_NOISE_FREQ_MULT = 4;
|
||||
export const DETAIL_NOISE_AMP = 0.5;
|
||||
export const FINE_NOISE_FREQ_MULT = 8;
|
||||
export const FINE_NOISE_AMP = 0.25;
|
||||
export const OCEAN_NOISE_AMP = 0.3;
|
||||
|
||||
// ── Dissection & Summits ──
|
||||
export const DISSECT_THRESHOLD = 0.10;
|
||||
export const DISSECT_AMP = 0.55;
|
||||
export const DISSECT_ELEV_SCALE = 2;
|
||||
export const SUMMIT_THRESHOLD = 0.65;
|
||||
export const SUMMIT_STRESS_MIN = 0.05;
|
||||
export const SUMMIT_SPIKE_OFFSET = 0.45;
|
||||
export const SUMMIT_STRESS_FLOOR = 0.3;
|
||||
|
||||
// ── Interior Elevation ──
|
||||
export const PLATE_BASE_HEIGHT_MEAN = -0.15;
|
||||
export const PLATE_BASE_HEIGHT_STDDEV = 0.025;
|
||||
export const INTERIOR_BASE_SHIELD = 0.14;
|
||||
export const INTERIOR_BASE_BASIN = 0.04;
|
||||
export const INTERIOR_TECTONIC = 0.20;
|
||||
export const COASTAL_DEPRESSION = -0.08;
|
||||
export const COASTAL_DEPRESSION_BASIN_REDUCE = 0.4;
|
||||
export const INTERIOR_UPLIFT_RAMP_FRAC = 0.4;
|
||||
export const INTERIOR_UPLIFT_MOD_AMP = 0.2;
|
||||
export const INTERIOR_FLOOR = 0.008;
|
||||
export const PLATEAU_BOOST = 0.04;
|
||||
export const PLATEAU_START_BASE = 3;
|
||||
export const MOUNTAIN_BOOST_FRAC = 0.3;
|
||||
export const FOLD_BELT_MULT = 3;
|
||||
export const CRATON_TECTONIC_MULT = 2.5;
|
||||
export const BASIN_TECTONIC_MULT = 2;
|
||||
|
||||
// ── Continental Margins ──
|
||||
export const SHELF_NARROW_BASE = 4;
|
||||
export const SHELF_WIDE_BASE = 12;
|
||||
export const SLOPE_WIDTH_BASE = 7;
|
||||
export const SHELF_DEPTH_START = -0.08;
|
||||
export const SHELF_DEPTH_RANGE = 0.08;
|
||||
export const SLOPE_DEPTH_RANGE = 0.19;
|
||||
export const ABYSS_BASE = -0.35;
|
||||
export const ABYSS_NOISE_AMP = 0.03;
|
||||
export const OCEAN_FLOOR_CLAMP = -0.005;
|
||||
|
||||
// ── Mid-Ocean Features ──
|
||||
export const RIDGE_HALF_WIDTH_BASE = 4;
|
||||
export const RIDGE_UPLIFT_NOISE = 0.12;
|
||||
export const RIDGE_UPLIFT_BASE = 0.06;
|
||||
export const FRACTURE_HALF_WIDTH_BASE = 3;
|
||||
export const FRACTURE_DEPTH = 0.03;
|
||||
export const TRENCH_BASE_DEPTH = 0.15;
|
||||
export const TRENCH_STRESS_DEPTH = 0.15;
|
||||
|
||||
// ── Coastal Roughening ──
|
||||
export const COAST_ROUGHEN_BASE = 8;
|
||||
export const COAST_PASSIVE_FREQ = 6;
|
||||
export const COAST_ACTIVE_FREQ = 9;
|
||||
export const COAST_PASSIVE_AMP = 0.08;
|
||||
export const COAST_ACTIVE_AMP = 0.12;
|
||||
export const COAST_WARP_PASSIVE_REACH = 1.2;
|
||||
export const COAST_WARP_ACTIVE_REACH = 1.5;
|
||||
export const COAST_WARP_AMT = 0.35;
|
||||
export const COAST_SUBDUCT_SUP_LOW = 0.45;
|
||||
export const COAST_SUBDUCT_SUP_RANGE = 0.55;
|
||||
|
||||
// ── Island Scattering ──
|
||||
export const ISLAND_DIST_BASE = 4;
|
||||
export const ISLAND_FREQ = 17.5;
|
||||
export const ISLAND_THRESHOLD_BASE = 0.25;
|
||||
export const ISLAND_THRESHOLD_STRESS = 0.2;
|
||||
export const ISLAND_BUMP_AMP = 0.18;
|
||||
export const ISLAND_SUBDUCT_MAX = 0.3;
|
||||
|
||||
// ── Island Arcs ──
|
||||
export const ARC_DIST_BASE = 5;
|
||||
export const ARC_PEAK_DIST_BASE = 1.5;
|
||||
export const ARC_SIGMA_BASE_VAL = 1.5;
|
||||
export const ARC_THRESHOLD = 0.30;
|
||||
export const ARC_UPLIFT_AMP = 0.55;
|
||||
export const ARC_SUBDUCT_THRESH = 0.45;
|
||||
|
||||
// ── Volcanic Features ──
|
||||
export const VOLC_MIN_SPACING = 0.015;
|
||||
export const VOLC_SIGMA_BASE = 0.003;
|
||||
export const VOLC_HEIGHT_BASE = 0.15;
|
||||
export const VOLC_HEIGHT_VAR_BASE = 0.7;
|
||||
export const VOLC_HEIGHT_VAR_RANGE = 0.6;
|
||||
export const VOLC_SIGMA_VAR_BASE = 0.6;
|
||||
export const VOLC_SIGMA_VAR_RANGE = 0.8;
|
||||
export const VOLC_SUBDUCT_THRESH = 0.45;
|
||||
|
||||
// ── Large Igneous Provinces ──
|
||||
export const LIP_SIGMA = 0.025;
|
||||
export const LIP_HEIGHT = 0.04;
|
||||
|
||||
// ── Hotspot Chains ──
|
||||
export const NUM_HOTSPOTS = 5;
|
||||
export const CHAIN_LENGTH = 6;
|
||||
export const CHAIN_DECAY = 0.75;
|
||||
export const CHAIN_SPACING = 0.06;
|
||||
export const DOME_SIGMA = 0.006;
|
||||
export const DOME_STRENGTH = 0.60;
|
||||
export const SWELL_SIGMA_MULT = 2;
|
||||
export const SWELL_STR_MULT = 0.10;
|
||||
export const DOME_OCEAN_BOOST = 1.8;
|
||||
export const DOME_PEAK_THRESH_SIGMA = 5.5;
|
||||
export const DOME_SWELL_THRESH_SIGMA = 3;
|
||||
export const DOME_DRIFT_STRETCH = 1.4;
|
||||
export const DOME_RIFT_BOOST = 0.5;
|
||||
export const DOME_CALDERA_SIGMA_FRAC = 0.25;
|
||||
export const DOME_CALDERA_DEPTH_FRAC = 0.20;
|
||||
export const DOME_CALDERA_STRENGTH_MIN = 0.15;
|
||||
export const DOME_AGE_BROADENING = 0.06;
|
||||
export const DOME_SHAPE_WARP_FREQ = 8;
|
||||
export const DOME_SHAPE_WARP_AMP = 0.4;
|
||||
export const DOME_SHAPE_WARP_DETAIL_FREQ = 20;
|
||||
export const DOME_SHAPE_WARP_DETAIL_AMP = 0.40;
|
||||
export const DOME_TEXTURE_BASE_WEIGHT = 0.7;
|
||||
export const DOME_TEXTURE_DETAIL_WEIGHT = 0.3;
|
||||
export const DOME_TEXTURE_ACTIVE_MIN = 0.4;
|
||||
export const DOME_TEXTURE_ACTIVE_MAX = 1.2;
|
||||
export const DOME_TEXTURE_AGE_MIN_SHIFT = 0.3;
|
||||
export const DOME_TEXTURE_AGE_MAX_SHIFT = 0.2;
|
||||
|
||||
// ── Hypsometry & Isostasy ──
|
||||
export const PEAK_COMPRESS_POWER = 0.90;
|
||||
export const ISOSTATIC_K = 0.07;
|
||||
export const HYPS_BLEND = 0.40;
|
||||
export const HYPS_LOW_BREAK = 0.60;
|
||||
export const HYPS_MID_BREAK = 0.85;
|
||||
export const HYPS_LOW_ELEV_FRAC = 0.25;
|
||||
export const HYPS_MID_ELEV_FRAC = 0.35;
|
||||
export const HYPS_HIGH_POWER = 0.7;
|
||||
export const FILL_LEVEL = 0.005;
|
||||
|
||||
// ── Passive Margin Coastal Plain ──
|
||||
export const PLAIN_TARGET = 0.02;
|
||||
export const PLAIN_SUPPRESSION_STRENGTH = 0.6;
|
||||
|
||||
// ── Domain Warp (terrain-post.js) ──
|
||||
export const WARP_FREQ = 4;
|
||||
export const WARP_OCTAVES = 5;
|
||||
export const WARP_MAX_AMP_MULT = 0.12;
|
||||
export const WARP_BIAS_BASE = 0.25;
|
||||
export const WARP_BIAS_STRENGTH_SCALE = 0.5;
|
||||
export const WARP_HOTSPOT_DAMPEN = 0.8;
|
||||
|
||||
// ── Smoothing (terrain-post.js) ──
|
||||
export const SMOOTH_EDGE_SENSITIVITY = 8;
|
||||
|
||||
// ── Glacial Erosion (terrain-post.js) ──
|
||||
export const GLACIAL_LAT_DIVISOR = 4.5;
|
||||
export const GLACIAL_ELEV_LOW = 0.5;
|
||||
export const GLACIAL_ELEV_HIGH = 0.9;
|
||||
export const GLACIAL_ELEV_FACTOR_SCALE = 0.3;
|
||||
export const GLACIAL_ELEV_FACTOR_LAT_BASE = 0.3;
|
||||
export const GLACIAL_ELEV_FACTOR_LAT_SCALE = 0.7;
|
||||
export const GLACIAL_CARVE_RATE = 0.02;
|
||||
export const GLACIAL_CONVERGENCE_BONUS = 0.01;
|
||||
export const GLACIAL_DEPOSIT_AMOUNT = 0.005;
|
||||
export const GLACIAL_FJORD_CARVE = 0.015;
|
||||
export const GLACIAL_FLOW_THRESHOLD = 0.1;
|
||||
export const GLACIAL_FJORD_THRESHOLD = 0.5;
|
||||
export const GLACIAL_WIDENING_FRAC = 0.4;
|
||||
export const GLACIAL_TERMINUS_RATIO = 0.3;
|
||||
export const GLACIAL_FJORD_ICE_MIN = 0.2;
|
||||
export const GLACIAL_POST_SMOOTH = 0.3;
|
||||
export const GLACIAL_MID_FLOOD_FRAC = 0.75;
|
||||
export const GLACIAL_MID_FLOOD_CARVE = 0.85;
|
||||
export const GLACIAL_INITIAL_CARVE = 0.5;
|
||||
|
||||
// ── Hydraulic Erosion (terrain-post.js) ──
|
||||
export const HYDRAULIC_DEPOSIT_FRAC = 0.5;
|
||||
export const HYDRAULIC_SLOPE_SENSITIVITY = 50;
|
||||
|
||||
// ── Thermal Erosion (terrain-post.js) ──
|
||||
export const THERMAL_TRANSFER_FRAC = 0.5;
|
||||
|
||||
// ── Ridge Sharpening (terrain-post.js) ──
|
||||
export const RIDGE_SHARPEN_CAP = 1.5;
|
||||
export const VALLEY_DEEPEN_FACTOR = 0.4;
|
||||
export const VALLEY_FLOOR_FRAC = 0.5;
|
||||
export const VALLEY_FLOOR_MIN = 0.001;
|
||||
|
||||
// ── Priority Flood (terrain-post.js) ──
|
||||
export const FLOOD_NOISE_AMP = 0.01;
|
||||
export const FLOOD_CARVE_RADIUS_FRAC = 0.3;
|
||||
|
||||
// ── Plate Generation ──
|
||||
export const PLATE_LOW_PLATE_T_HIGH = 80;
|
||||
export const PLATE_LOW_PLATE_T_RANGE = 60;
|
||||
export const PLATE_RATE_MIN_BASE = 0.7;
|
||||
export const PLATE_RATE_MIN_LOW_T = 0.4;
|
||||
export const PLATE_RATE_RANGE_BASE = 2.3;
|
||||
export const PLATE_RATE_RANGE_LOW_T = 2.4;
|
||||
export const PLATE_DIR_BASE_BASE = 0.15;
|
||||
export const PLATE_DIR_BASE_LOW_T = 0.25;
|
||||
export const PLATE_DIR_SCALE_BASE = 0.25;
|
||||
export const PLATE_DIR_SCALE_LOW_T = 0.25;
|
||||
export const PLATE_DIR_STRENGTH_CAP = 0.85;
|
||||
export const PLATE_COMPACT_BASE = 0.3;
|
||||
export const PLATE_COMPACT_LOW_T = 0.22;
|
||||
export const PLATE_AREA_GOVERNOR_BASE = 2.0;
|
||||
export const PLATE_AREA_GOVERNOR_LOW_T = 2.0;
|
||||
export const PLATE_COMPACT_THRESHOLD_MULT = 1.8;
|
||||
export const PLATE_COMPACT_PENALTY_MULT = 4;
|
||||
export const PLATE_OMEGA_MIN = 0.5;
|
||||
export const PLATE_OMEGA_RANGE = 1.5;
|
||||
export const PLATE_SMOOTH_BASE = 3;
|
||||
export const PLATE_SMOOTH_LOW_T = 2;
|
||||
export const PLATE_SMOOTH_FIRST_THRESH = 0.4;
|
||||
export const PLATE_SMOOTH_LATER_THRESH = 0.5;
|
||||
|
||||
// ── Coarse Projection ──
|
||||
export const N_COARSE = 20000;
|
||||
export const COARSE_JITTER = 0.75;
|
||||
export const COARSE_PERTURB_BASE = 1.5;
|
||||
export const COARSE_PERTURB_LOW_T = 1.0;
|
||||
export const COARSE_FBM_BASE_FREQ = 8;
|
||||
export const COARSE_FBM_OCTAVES = 4;
|
||||
export const COARSE_FBM_DECAY = 0.5;
|
||||
export const COARSE_FBM_FREQ_MULT = 2;
|
||||
@@ -0,0 +1,351 @@
|
||||
// Terrain generation tunable constants.
|
||||
// Grouped by subsystem for iterative tuning.
|
||||
// These are internal algorithm constants, NOT user-facing slider parameters.
|
||||
|
||||
// ── Collision & Stress ──
|
||||
export const COLLISION_THRESHOLD = 0.75;
|
||||
export const COLLISION_DT_BASE = 1e-2;
|
||||
export const COLLISION_DT_REF_REGIONS = 10000;
|
||||
export const PAIR_INTENSITY_BASE = 0.5;
|
||||
export const SUBDUCT_UNDULATION_DENSITY_DECAY = 12;
|
||||
export const SUBDUCT_UNDULATION_FREQ = 6;
|
||||
export const SUBDUCT_UNDULATION_AMP = 0.4;
|
||||
export const SUBDUCT_FACTOR_BASE = 0.5;
|
||||
export const SUBDUCT_FACTOR_TANH_SCALE = 8;
|
||||
export const SUBDUCT_THRESHOLD = 0.55;
|
||||
export const BOUNDARY_TYPE_THRESH_FACTOR = 0.3;
|
||||
|
||||
export const STRESS_PROPAGATE_MIN = 0.01;
|
||||
export const STRESS_PROPAGATE_CUTOFF = 0.005;
|
||||
export const STRESS_DIR_FACTOR_MIN = 0.1;
|
||||
export const STRESS_DIR_FACTOR_BASE = 0.3;
|
||||
export const STRESS_DIR_FACTOR_SCALE = 0.7;
|
||||
export const STRESS_DIR_BLEND_PARENT = 0.8;
|
||||
export const STRESS_DIR_BLEND_TRAVEL = 0.2;
|
||||
export const STRESS_DIR_SMOOTH_PASSES = 2;
|
||||
export const STRESS_DIR_SELF_WEIGHT = 2;
|
||||
|
||||
export const STRESS_DECAY_BASE = 0.5;
|
||||
export const STRESS_DECAY_SPREAD_FACTOR = 0.04;
|
||||
export const STRESS_SUBDUCT_DECAY_MULT = 0.45;
|
||||
export const STRESS_PASSES_PER_SPREAD = 3;
|
||||
|
||||
export const STRESS_PERCENTILE = 0.97;
|
||||
|
||||
// Blend weights for dual-layer orogeny (small plates vs super plates)
|
||||
export const SMALL_W = 0.05;
|
||||
export const SUPER_W = 0.95;
|
||||
|
||||
// ── Distance Fields & Zone Widths ──
|
||||
export const INTERIOR_BAND_BASE = 16;
|
||||
export const TECTONIC_REACH_BASE = 20;
|
||||
export const COASTAL_PLAIN_WIDTH_BASE = 18;
|
||||
export const COAST_BFS_WIDTH_BASE = 8;
|
||||
|
||||
// ── Mountain Profiles ──
|
||||
export const RIDGE_STRENGTH = 0.15;
|
||||
export const RIDGE_SIGMA_BASE = 5;
|
||||
export const RIDGE_PEAK_SHIFT_BASE = 2;
|
||||
export const RIDGE_EXTENT_BASE = 10;
|
||||
export const RIDGE_ASYM_SUBDUCT_NARROW = 0.6;
|
||||
export const RIDGE_ASYM_OVERRIDE_WIDEN = 0.5;
|
||||
export const RIDGE_STRESS_WIDTH_BASE = 0.75;
|
||||
export const RIDGE_STRESS_WIDTH_SCALE = 0.5;
|
||||
export const RIDGE_WIDTH_NOISE_AMP = 0.2;
|
||||
|
||||
export const BASE_SCALE = 0.6;
|
||||
export const ASYMMETRY_FACTOR = 0.8;
|
||||
|
||||
export const SUBDUCTING_SUPPRESSION = 0.42;
|
||||
|
||||
export const STRESS_MAG_SCALE = 0.40;
|
||||
export const STRESS_DEPRESS_FRAC = 0.4;
|
||||
export const STRESS_HEIGHT_VAR_BASE = 0.60;
|
||||
export const STRESS_HEIGHT_VAR_SCALE = 0.8;
|
||||
|
||||
export const SUBDUCTING_REACH_MIN = 0.35;
|
||||
export const SUBDUCTING_REACH_RANGE = 0.3;
|
||||
|
||||
// ── Fold Ridges ──
|
||||
export const FOLD_FREQ_PRIMARY = 160;
|
||||
export const FOLD_FREQ_SECONDARY = 400;
|
||||
export const FOLD_MEAN_OFFSET = 0.36;
|
||||
export const FOLD_PHASE_WARP_AMP = 0.08;
|
||||
export const FOLD_PHASE_WARP2_AMP = 0.12;
|
||||
export const FOLD_AMP_MOD_BASE = 0.6;
|
||||
export const FOLD_AMP_MOD_SCALE = 0.4;
|
||||
export const FOLD_AMP_MOD2_BASE = 0.5;
|
||||
export const FOLD_AMP_MOD2_SCALE = 0.5;
|
||||
export const FOLD_SECONDARY_ALONG = 0.85;
|
||||
export const FOLD_SECONDARY_CROSS = 0.15;
|
||||
export const FOLD_SECONDARY_AMP = 0.18;
|
||||
export const FOLD_NOISE_MAG_SCALE = 0.8;
|
||||
export const FOLD_ELEV_THRESHOLD = 0.05;
|
||||
export const FOLD_ELEV_SCALE = 4;
|
||||
export const FOLD_ELEV_BOOST_OFFSET = 0.03;
|
||||
export const FOLD_ELEV_BOOST_SCALE = 6;
|
||||
export const FOLD_SF_SUPPRESS = 1.5;
|
||||
export const FOLD_FREQ_MULT_SCALE = 1.5;
|
||||
|
||||
// ── Basins & Rifts ──
|
||||
export const RIFT_HALF_WIDTH_BASE = 4;
|
||||
export const RIFT_FLOOR_MULT = 1.5;
|
||||
export const RIFT_SHOULDER_MULT = 2.5;
|
||||
export const RIFT_AXIS_DEPTH = -0.18;
|
||||
export const RIFT_AXIS_VOLCANIC_AMP = 0.06;
|
||||
export const RIFT_FLOOR_DEPTH = -0.12;
|
||||
export const RIFT_FLOOR_TAPER = 0.3;
|
||||
export const RIFT_FLOOR_VOLCANIC_AMP = 0.03;
|
||||
export const RIFT_SHOULDER_UPLIFT = 0.05;
|
||||
export const RIFT_FADEOUT_RESIDUAL = 0.2;
|
||||
|
||||
export const BASIN_FREQ = 1.8;
|
||||
export const BASIN_FACTOR_BIAS = 0.5;
|
||||
export const BASIN_FACTOR_SCALE = 0.6;
|
||||
export const FORELAND_STRESS_THRESH = 0.15;
|
||||
export const FORELAND_WIDTH_FRAC = 0.3;
|
||||
export const FORELAND_BASIN_DEPTH = 0.05;
|
||||
export const FORELAND_PEAK_POS = 0.2;
|
||||
export const FORELAND_BASIN_DEEPENING_BASE = 0.5;
|
||||
export const FORELAND_BASIN_DEEPENING_SCALE = 0.5;
|
||||
|
||||
// ── Back-Arc & Foreland ──
|
||||
export const BACK_ARC_START_BASE = 2;
|
||||
export const BACK_ARC_PEAK_BASE = 3;
|
||||
export const BACK_ARC_END_BASE = 5;
|
||||
export const BACK_ARC_DEPTH = 0.10;
|
||||
export const BACK_ARC_SUBDUCT_THRESH = 0.50;
|
||||
|
||||
// ── Noise Layering ──
|
||||
export const WARP_SCALE = 0.4;
|
||||
export const OROGENIC_FREQ = 1.5;
|
||||
export const NOISE_ACTIVITY_SCALE = 4;
|
||||
export const NOISE_BASE_SCALE = 0.25;
|
||||
export const NOISE_ACTIVITY_CONTRIB = 0.75;
|
||||
export const PLATEAU_SUPPRESS_MIN = 0.30;
|
||||
export const PLATEAU_SUPPRESS_SCALE = 0.60;
|
||||
export const BASIN_AMP_SUPPRESS = 0.7;
|
||||
export const CRATON_AMP_SUPPRESS = 0.25;
|
||||
export const RIDGED_NOISE_AMP = 1.5;
|
||||
export const DETAIL_NOISE_FREQ_MULT = 4;
|
||||
export const DETAIL_NOISE_AMP = 0.5;
|
||||
export const FINE_NOISE_FREQ_MULT = 8;
|
||||
export const FINE_NOISE_AMP = 0.25;
|
||||
export const OCEAN_NOISE_AMP = 0.3;
|
||||
|
||||
// ── Dissection & Summits ──
|
||||
export const DISSECT_THRESHOLD = 0.10;
|
||||
export const DISSECT_AMP = 0.55;
|
||||
export const DISSECT_ELEV_SCALE = 2;
|
||||
export const SUMMIT_THRESHOLD = 0.55;
|
||||
export const SUMMIT_STRESS_MIN = 0.03;
|
||||
export const SUMMIT_SPIKE_OFFSET = 0.40;
|
||||
export const SUMMIT_STRESS_FLOOR = 0.25;
|
||||
|
||||
// ── Interior Elevation ──
|
||||
export const PLATE_BASE_HEIGHT_MEAN = -0.15;
|
||||
export const PLATE_BASE_HEIGHT_STDDEV = 0.025;
|
||||
export const INTERIOR_BASE_SHIELD = 0.14;
|
||||
export const INTERIOR_BASE_BASIN = 0.04;
|
||||
export const INTERIOR_TECTONIC = 0.20;
|
||||
export const COASTAL_DEPRESSION = -0.08;
|
||||
export const COASTAL_DEPRESSION_BASIN_REDUCE = 0.4;
|
||||
export const INTERIOR_UPLIFT_RAMP_FRAC = 0.4;
|
||||
export const INTERIOR_UPLIFT_MOD_AMP = 0.2;
|
||||
export const INTERIOR_FLOOR = 0.008;
|
||||
export const PLATEAU_BOOST = 0.04;
|
||||
export const PLATEAU_START_BASE = 3;
|
||||
export const MOUNTAIN_BOOST_FRAC = 0.3;
|
||||
export const FOLD_BELT_MULT = 3;
|
||||
export const CRATON_TECTONIC_MULT = 2.5;
|
||||
export const BASIN_TECTONIC_MULT = 2;
|
||||
|
||||
// ── Continental Margins ──
|
||||
export const SHELF_NARROW_BASE = 4;
|
||||
export const SHELF_WIDE_BASE = 12;
|
||||
export const SLOPE_WIDTH_BASE = 7;
|
||||
export const SHELF_DEPTH_START = -0.08;
|
||||
export const SHELF_DEPTH_RANGE = 0.08;
|
||||
export const SLOPE_DEPTH_RANGE = 0.19;
|
||||
export const ABYSS_BASE = -0.35;
|
||||
export const ABYSS_NOISE_AMP = 0.03;
|
||||
export const OCEAN_FLOOR_CLAMP = -0.005;
|
||||
|
||||
// ── Mid-Ocean Features ──
|
||||
export const RIDGE_HALF_WIDTH_BASE = 4;
|
||||
export const RIDGE_UPLIFT_NOISE = 0.12;
|
||||
export const RIDGE_UPLIFT_BASE = 0.06;
|
||||
export const FRACTURE_HALF_WIDTH_BASE = 3;
|
||||
export const FRACTURE_DEPTH = 0.03;
|
||||
export const TRENCH_BASE_DEPTH = 0.15;
|
||||
export const TRENCH_STRESS_DEPTH = 0.15;
|
||||
|
||||
// ── Coastal Roughening ──
|
||||
export const COAST_ROUGHEN_BASE = 8;
|
||||
export const COAST_PASSIVE_FREQ = 6;
|
||||
export const COAST_ACTIVE_FREQ = 9;
|
||||
export const COAST_PASSIVE_AMP = 0.08;
|
||||
export const COAST_ACTIVE_AMP = 0.12;
|
||||
export const COAST_WARP_PASSIVE_REACH = 1.2;
|
||||
export const COAST_WARP_ACTIVE_REACH = 1.5;
|
||||
export const COAST_WARP_AMT = 0.35;
|
||||
export const COAST_SUBDUCT_SUP_LOW = 0.45;
|
||||
export const COAST_SUBDUCT_SUP_RANGE = 0.55;
|
||||
|
||||
// ── Island Scattering ──
|
||||
export const ISLAND_DIST_BASE = 4;
|
||||
export const ISLAND_FREQ = 17.5;
|
||||
export const ISLAND_THRESHOLD_BASE = 0.25;
|
||||
export const ISLAND_THRESHOLD_STRESS = 0.2;
|
||||
export const ISLAND_BUMP_AMP = 0.18;
|
||||
export const ISLAND_SUBDUCT_MAX = 0.3;
|
||||
|
||||
// ── Island Arcs ──
|
||||
export const ARC_DIST_BASE = 5;
|
||||
export const ARC_PEAK_DIST_BASE = 1.5;
|
||||
export const ARC_SIGMA_BASE_VAL = 1.5;
|
||||
export const ARC_THRESHOLD = 0.30;
|
||||
export const ARC_UPLIFT_AMP = 0.55;
|
||||
export const ARC_SUBDUCT_THRESH = 0.45;
|
||||
|
||||
// ── Volcanic Features ──
|
||||
export const VOLC_MIN_SPACING = 0.015;
|
||||
export const VOLC_SIGMA_BASE = 0.003;
|
||||
export const VOLC_HEIGHT_BASE = 0.15;
|
||||
export const VOLC_HEIGHT_VAR_BASE = 0.7;
|
||||
export const VOLC_HEIGHT_VAR_RANGE = 0.6;
|
||||
export const VOLC_SIGMA_VAR_BASE = 0.6;
|
||||
export const VOLC_SIGMA_VAR_RANGE = 0.8;
|
||||
export const VOLC_SUBDUCT_THRESH = 0.45;
|
||||
|
||||
// ── Large Igneous Provinces ──
|
||||
export const LIP_SIGMA = 0.025;
|
||||
export const LIP_HEIGHT = 0.04;
|
||||
|
||||
// ── Hotspot Chains ──
|
||||
export const NUM_HOTSPOTS = 5;
|
||||
export const CHAIN_LENGTH = 6;
|
||||
export const CHAIN_DECAY = 0.75;
|
||||
export const CHAIN_SPACING = 0.06;
|
||||
export const DOME_SIGMA = 0.006;
|
||||
export const DOME_STRENGTH = 0.60;
|
||||
export const SWELL_SIGMA_MULT = 2;
|
||||
export const SWELL_STR_MULT = 0.10;
|
||||
export const DOME_OCEAN_BOOST = 1.8;
|
||||
export const DOME_PEAK_THRESH_SIGMA = 5.5;
|
||||
export const DOME_SWELL_THRESH_SIGMA = 3;
|
||||
export const DOME_DRIFT_STRETCH = 1.4;
|
||||
export const DOME_RIFT_BOOST = 0.5;
|
||||
export const DOME_CALDERA_SIGMA_FRAC = 0.25;
|
||||
export const DOME_CALDERA_DEPTH_FRAC = 0.20;
|
||||
export const DOME_CALDERA_STRENGTH_MIN = 0.15;
|
||||
export const DOME_AGE_BROADENING = 0.06;
|
||||
export const DOME_SHAPE_WARP_FREQ = 8;
|
||||
export const DOME_SHAPE_WARP_AMP = 0.4;
|
||||
export const DOME_SHAPE_WARP_DETAIL_FREQ = 20;
|
||||
export const DOME_SHAPE_WARP_DETAIL_AMP = 0.40;
|
||||
export const DOME_TEXTURE_BASE_WEIGHT = 0.7;
|
||||
export const DOME_TEXTURE_DETAIL_WEIGHT = 0.3;
|
||||
export const DOME_TEXTURE_ACTIVE_MIN = 0.4;
|
||||
export const DOME_TEXTURE_ACTIVE_MAX = 1.2;
|
||||
export const DOME_TEXTURE_AGE_MIN_SHIFT = 0.3;
|
||||
export const DOME_TEXTURE_AGE_MAX_SHIFT = 0.2;
|
||||
|
||||
// ── Hypsometry & Isostasy ──
|
||||
export const PEAK_COMPRESS_POWER = 0.90;
|
||||
export const ISOSTATIC_K = 0.07;
|
||||
export const HYPS_BLEND = 0.40;
|
||||
export const HYPS_LOW_BREAK = 0.60;
|
||||
export const HYPS_MID_BREAK = 0.85;
|
||||
export const HYPS_LOW_ELEV_FRAC = 0.25;
|
||||
export const HYPS_MID_ELEV_FRAC = 0.35;
|
||||
export const HYPS_HIGH_POWER = 0.7;
|
||||
export const FILL_LEVEL = 0.005;
|
||||
|
||||
// ── Passive Margin Coastal Plain ──
|
||||
export const PLAIN_TARGET = 0.02;
|
||||
export const PLAIN_SUPPRESSION_STRENGTH = 0.6;
|
||||
|
||||
// ── Domain Warp (terrain-post.js) ──
|
||||
export const WARP_FREQ = 4;
|
||||
export const WARP_OCTAVES = 5;
|
||||
export const WARP_MAX_AMP_MULT = 0.12;
|
||||
export const WARP_BIAS_BASE = 0.25;
|
||||
export const WARP_BIAS_STRENGTH_SCALE = 0.5;
|
||||
export const WARP_HOTSPOT_DAMPEN = 0.8;
|
||||
|
||||
// ── Smoothing (terrain-post.js) ──
|
||||
export const SMOOTH_EDGE_SENSITIVITY = 8;
|
||||
|
||||
// ── Glacial Erosion (terrain-post.js) ──
|
||||
export const GLACIAL_LAT_DIVISOR = 4.5;
|
||||
export const GLACIAL_ELEV_LOW = 0.5;
|
||||
export const GLACIAL_ELEV_HIGH = 0.9;
|
||||
export const GLACIAL_ELEV_FACTOR_SCALE = 0.3;
|
||||
export const GLACIAL_ELEV_FACTOR_LAT_BASE = 0.3;
|
||||
export const GLACIAL_ELEV_FACTOR_LAT_SCALE = 0.7;
|
||||
export const GLACIAL_CARVE_RATE = 0.02;
|
||||
export const GLACIAL_CONVERGENCE_BONUS = 0.01;
|
||||
export const GLACIAL_DEPOSIT_AMOUNT = 0.005;
|
||||
export const GLACIAL_FJORD_CARVE = 0.015;
|
||||
export const GLACIAL_FLOW_THRESHOLD = 0.1;
|
||||
export const GLACIAL_FJORD_THRESHOLD = 0.5;
|
||||
export const GLACIAL_WIDENING_FRAC = 0.4;
|
||||
export const GLACIAL_TERMINUS_RATIO = 0.3;
|
||||
export const GLACIAL_FJORD_ICE_MIN = 0.2;
|
||||
export const GLACIAL_POST_SMOOTH = 0.3;
|
||||
export const GLACIAL_MID_FLOOD_FRAC = 0.75;
|
||||
export const GLACIAL_MID_FLOOD_CARVE = 0.85;
|
||||
export const GLACIAL_INITIAL_CARVE = 0.5;
|
||||
|
||||
// ── Hydraulic Erosion (terrain-post.js) ──
|
||||
export const HYDRAULIC_DEPOSIT_FRAC = 0.5;
|
||||
export const HYDRAULIC_SLOPE_SENSITIVITY = 50;
|
||||
|
||||
// ── Thermal Erosion (terrain-post.js) ──
|
||||
export const THERMAL_TRANSFER_FRAC = 0.5;
|
||||
|
||||
// ── Ridge Sharpening (terrain-post.js) ──
|
||||
export const RIDGE_SHARPEN_CAP = 1.5;
|
||||
export const VALLEY_DEEPEN_FACTOR = 0.4;
|
||||
export const VALLEY_FLOOR_FRAC = 0.5;
|
||||
export const VALLEY_FLOOR_MIN = 0.001;
|
||||
|
||||
// ── Priority Flood (terrain-post.js) ──
|
||||
export const FLOOD_NOISE_AMP = 0.01;
|
||||
export const FLOOD_CARVE_RADIUS_FRAC = 0.3;
|
||||
|
||||
// ── Plate Generation ──
|
||||
export const PLATE_LOW_PLATE_T_HIGH = 80;
|
||||
export const PLATE_LOW_PLATE_T_RANGE = 60;
|
||||
export const PLATE_RATE_MIN_BASE = 0.7;
|
||||
export const PLATE_RATE_MIN_LOW_T = 0.4;
|
||||
export const PLATE_RATE_RANGE_BASE = 2.3;
|
||||
export const PLATE_RATE_RANGE_LOW_T = 2.4;
|
||||
export const PLATE_DIR_BASE_BASE = 0.15;
|
||||
export const PLATE_DIR_BASE_LOW_T = 0.25;
|
||||
export const PLATE_DIR_SCALE_BASE = 0.25;
|
||||
export const PLATE_DIR_SCALE_LOW_T = 0.25;
|
||||
export const PLATE_DIR_STRENGTH_CAP = 0.85;
|
||||
export const PLATE_COMPACT_BASE = 0.3;
|
||||
export const PLATE_COMPACT_LOW_T = 0.22;
|
||||
export const PLATE_AREA_GOVERNOR_BASE = 2.0;
|
||||
export const PLATE_AREA_GOVERNOR_LOW_T = 2.0;
|
||||
export const PLATE_COMPACT_THRESHOLD_MULT = 1.8;
|
||||
export const PLATE_COMPACT_PENALTY_MULT = 4;
|
||||
export const PLATE_OMEGA_MIN = 0.5;
|
||||
export const PLATE_OMEGA_RANGE = 1.5;
|
||||
export const PLATE_SMOOTH_BASE = 3;
|
||||
export const PLATE_SMOOTH_LOW_T = 2;
|
||||
export const PLATE_SMOOTH_FIRST_THRESH = 0.4;
|
||||
export const PLATE_SMOOTH_LATER_THRESH = 0.5;
|
||||
|
||||
// ── Coarse Projection ──
|
||||
export const N_COARSE = 20000;
|
||||
export const COARSE_JITTER = 0.75;
|
||||
export const COARSE_PERTURB_BASE = 1.5;
|
||||
export const COARSE_PERTURB_LOW_T = 1.0;
|
||||
export const COARSE_FBM_BASE_FREQ = 8;
|
||||
export const COARSE_FBM_OCTAVES = 4;
|
||||
export const COARSE_FBM_DECAY = 0.5;
|
||||
export const COARSE_FBM_FREQ_MULT = 2;
|
||||
@@ -0,0 +1,351 @@
|
||||
// Terrain generation tunable constants.
|
||||
// Grouped by subsystem for iterative tuning.
|
||||
// These are internal algorithm constants, NOT user-facing slider parameters.
|
||||
|
||||
// ── Collision & Stress ──
|
||||
export const COLLISION_THRESHOLD = 0.75;
|
||||
export const COLLISION_DT_BASE = 1e-2;
|
||||
export const COLLISION_DT_REF_REGIONS = 10000;
|
||||
export const PAIR_INTENSITY_BASE = 0.5;
|
||||
export const SUBDUCT_UNDULATION_DENSITY_DECAY = 12;
|
||||
export const SUBDUCT_UNDULATION_FREQ = 6;
|
||||
export const SUBDUCT_UNDULATION_AMP = 0.4;
|
||||
export const SUBDUCT_FACTOR_BASE = 0.5;
|
||||
export const SUBDUCT_FACTOR_TANH_SCALE = 8;
|
||||
export const SUBDUCT_THRESHOLD = 0.55;
|
||||
export const BOUNDARY_TYPE_THRESH_FACTOR = 0.3;
|
||||
|
||||
export const STRESS_PROPAGATE_MIN = 0.01;
|
||||
export const STRESS_PROPAGATE_CUTOFF = 0.005;
|
||||
export const STRESS_DIR_FACTOR_MIN = 0.1;
|
||||
export const STRESS_DIR_FACTOR_BASE = 0.3;
|
||||
export const STRESS_DIR_FACTOR_SCALE = 0.7;
|
||||
export const STRESS_DIR_BLEND_PARENT = 0.8;
|
||||
export const STRESS_DIR_BLEND_TRAVEL = 0.2;
|
||||
export const STRESS_DIR_SMOOTH_PASSES = 2;
|
||||
export const STRESS_DIR_SELF_WEIGHT = 2;
|
||||
|
||||
export const STRESS_DECAY_BASE = 0.5;
|
||||
export const STRESS_DECAY_SPREAD_FACTOR = 0.04;
|
||||
export const STRESS_SUBDUCT_DECAY_MULT = 0.45;
|
||||
export const STRESS_PASSES_PER_SPREAD = 3;
|
||||
|
||||
export const STRESS_PERCENTILE = 0.97;
|
||||
|
||||
// Blend weights for dual-layer orogeny (small plates vs super plates)
|
||||
export const SMALL_W = 0.05;
|
||||
export const SUPER_W = 0.95;
|
||||
|
||||
// ── Distance Fields & Zone Widths ──
|
||||
export const INTERIOR_BAND_BASE = 16;
|
||||
export const TECTONIC_REACH_BASE = 20;
|
||||
export const COASTAL_PLAIN_WIDTH_BASE = 18;
|
||||
export const COAST_BFS_WIDTH_BASE = 8;
|
||||
|
||||
// ── Mountain Profiles ──
|
||||
export const RIDGE_STRENGTH = 0.15;
|
||||
export const RIDGE_SIGMA_BASE = 5;
|
||||
export const RIDGE_PEAK_SHIFT_BASE = 2;
|
||||
export const RIDGE_EXTENT_BASE = 10;
|
||||
export const RIDGE_ASYM_SUBDUCT_NARROW = 0.6;
|
||||
export const RIDGE_ASYM_OVERRIDE_WIDEN = 0.5;
|
||||
export const RIDGE_STRESS_WIDTH_BASE = 0.75;
|
||||
export const RIDGE_STRESS_WIDTH_SCALE = 0.5;
|
||||
export const RIDGE_WIDTH_NOISE_AMP = 0.2;
|
||||
|
||||
export const BASE_SCALE = 0.6;
|
||||
export const ASYMMETRY_FACTOR = 0.8;
|
||||
|
||||
export const SUBDUCTING_SUPPRESSION = 0.42;
|
||||
|
||||
export const STRESS_MAG_SCALE = 0.40;
|
||||
export const STRESS_DEPRESS_FRAC = 0.4;
|
||||
export const STRESS_HEIGHT_VAR_BASE = 0.60;
|
||||
export const STRESS_HEIGHT_VAR_SCALE = 0.8;
|
||||
|
||||
export const SUBDUCTING_REACH_MIN = 0.35;
|
||||
export const SUBDUCTING_REACH_RANGE = 0.3;
|
||||
|
||||
// ── Fold Ridges ──
|
||||
export const FOLD_FREQ_PRIMARY = 160;
|
||||
export const FOLD_FREQ_SECONDARY = 400;
|
||||
export const FOLD_MEAN_OFFSET = 0.36;
|
||||
export const FOLD_PHASE_WARP_AMP = 0.08;
|
||||
export const FOLD_PHASE_WARP2_AMP = 0.12;
|
||||
export const FOLD_AMP_MOD_BASE = 0.6;
|
||||
export const FOLD_AMP_MOD_SCALE = 0.4;
|
||||
export const FOLD_AMP_MOD2_BASE = 0.5;
|
||||
export const FOLD_AMP_MOD2_SCALE = 0.5;
|
||||
export const FOLD_SECONDARY_ALONG = 0.85;
|
||||
export const FOLD_SECONDARY_CROSS = 0.15;
|
||||
export const FOLD_SECONDARY_AMP = 0.18;
|
||||
export const FOLD_NOISE_MAG_SCALE = 0.8;
|
||||
export const FOLD_ELEV_THRESHOLD = 0.05;
|
||||
export const FOLD_ELEV_SCALE = 4;
|
||||
export const FOLD_ELEV_BOOST_OFFSET = 0.03;
|
||||
export const FOLD_ELEV_BOOST_SCALE = 6;
|
||||
export const FOLD_SF_SUPPRESS = 1.5;
|
||||
export const FOLD_FREQ_MULT_SCALE = 1.5;
|
||||
|
||||
// ── Basins & Rifts ──
|
||||
export const RIFT_HALF_WIDTH_BASE = 4;
|
||||
export const RIFT_FLOOR_MULT = 1.5;
|
||||
export const RIFT_SHOULDER_MULT = 2.5;
|
||||
export const RIFT_AXIS_DEPTH = -0.18;
|
||||
export const RIFT_AXIS_VOLCANIC_AMP = 0.06;
|
||||
export const RIFT_FLOOR_DEPTH = -0.12;
|
||||
export const RIFT_FLOOR_TAPER = 0.3;
|
||||
export const RIFT_FLOOR_VOLCANIC_AMP = 0.03;
|
||||
export const RIFT_SHOULDER_UPLIFT = 0.05;
|
||||
export const RIFT_FADEOUT_RESIDUAL = 0.2;
|
||||
|
||||
export const BASIN_FREQ = 1.8;
|
||||
export const BASIN_FACTOR_BIAS = 0.5;
|
||||
export const BASIN_FACTOR_SCALE = 0.6;
|
||||
export const FORELAND_STRESS_THRESH = 0.15;
|
||||
export const FORELAND_WIDTH_FRAC = 0.3;
|
||||
export const FORELAND_BASIN_DEPTH = 0.05;
|
||||
export const FORELAND_PEAK_POS = 0.2;
|
||||
export const FORELAND_BASIN_DEEPENING_BASE = 0.5;
|
||||
export const FORELAND_BASIN_DEEPENING_SCALE = 0.5;
|
||||
|
||||
// ── Back-Arc & Foreland ──
|
||||
export const BACK_ARC_START_BASE = 2;
|
||||
export const BACK_ARC_PEAK_BASE = 3;
|
||||
export const BACK_ARC_END_BASE = 5;
|
||||
export const BACK_ARC_DEPTH = 0.14;
|
||||
export const BACK_ARC_SUBDUCT_THRESH = 0.50;
|
||||
|
||||
// ── Noise Layering ──
|
||||
export const WARP_SCALE = 0.4;
|
||||
export const OROGENIC_FREQ = 1.5;
|
||||
export const NOISE_ACTIVITY_SCALE = 4;
|
||||
export const NOISE_BASE_SCALE = 0.25;
|
||||
export const NOISE_ACTIVITY_CONTRIB = 0.75;
|
||||
export const PLATEAU_SUPPRESS_MIN = 0.30;
|
||||
export const PLATEAU_SUPPRESS_SCALE = 0.60;
|
||||
export const BASIN_AMP_SUPPRESS = 0.7;
|
||||
export const CRATON_AMP_SUPPRESS = 0.25;
|
||||
export const RIDGED_NOISE_AMP = 1.5;
|
||||
export const DETAIL_NOISE_FREQ_MULT = 4;
|
||||
export const DETAIL_NOISE_AMP = 0.5;
|
||||
export const FINE_NOISE_FREQ_MULT = 8;
|
||||
export const FINE_NOISE_AMP = 0.25;
|
||||
export const OCEAN_NOISE_AMP = 0.3;
|
||||
|
||||
// ── Dissection & Summits ──
|
||||
export const DISSECT_THRESHOLD = 0.10;
|
||||
export const DISSECT_AMP = 0.55;
|
||||
export const DISSECT_ELEV_SCALE = 2;
|
||||
export const SUMMIT_THRESHOLD = 0.55;
|
||||
export const SUMMIT_STRESS_MIN = 0.03;
|
||||
export const SUMMIT_SPIKE_OFFSET = 0.40;
|
||||
export const SUMMIT_STRESS_FLOOR = 0.25;
|
||||
|
||||
// ── Interior Elevation ──
|
||||
export const PLATE_BASE_HEIGHT_MEAN = -0.15;
|
||||
export const PLATE_BASE_HEIGHT_STDDEV = 0.025;
|
||||
export const INTERIOR_BASE_SHIELD = 0.14;
|
||||
export const INTERIOR_BASE_BASIN = 0.04;
|
||||
export const INTERIOR_TECTONIC = 0.20;
|
||||
export const COASTAL_DEPRESSION = -0.08;
|
||||
export const COASTAL_DEPRESSION_BASIN_REDUCE = 0.4;
|
||||
export const INTERIOR_UPLIFT_RAMP_FRAC = 0.4;
|
||||
export const INTERIOR_UPLIFT_MOD_AMP = 0.2;
|
||||
export const INTERIOR_FLOOR = 0.008;
|
||||
export const PLATEAU_BOOST = 0.04;
|
||||
export const PLATEAU_START_BASE = 3;
|
||||
export const MOUNTAIN_BOOST_FRAC = 0.3;
|
||||
export const FOLD_BELT_MULT = 3;
|
||||
export const CRATON_TECTONIC_MULT = 2.5;
|
||||
export const BASIN_TECTONIC_MULT = 2;
|
||||
|
||||
// ── Continental Margins ──
|
||||
export const SHELF_NARROW_BASE = 4;
|
||||
export const SHELF_WIDE_BASE = 12;
|
||||
export const SLOPE_WIDTH_BASE = 7;
|
||||
export const SHELF_DEPTH_START = -0.08;
|
||||
export const SHELF_DEPTH_RANGE = 0.08;
|
||||
export const SLOPE_DEPTH_RANGE = 0.19;
|
||||
export const ABYSS_BASE = -0.35;
|
||||
export const ABYSS_NOISE_AMP = 0.03;
|
||||
export const OCEAN_FLOOR_CLAMP = -0.005;
|
||||
|
||||
// ── Mid-Ocean Features ──
|
||||
export const RIDGE_HALF_WIDTH_BASE = 4;
|
||||
export const RIDGE_UPLIFT_NOISE = 0.12;
|
||||
export const RIDGE_UPLIFT_BASE = 0.06;
|
||||
export const FRACTURE_HALF_WIDTH_BASE = 3;
|
||||
export const FRACTURE_DEPTH = 0.03;
|
||||
export const TRENCH_BASE_DEPTH = 0.20;
|
||||
export const TRENCH_STRESS_DEPTH = 0.20;
|
||||
|
||||
// ── Coastal Roughening ──
|
||||
export const COAST_ROUGHEN_BASE = 8;
|
||||
export const COAST_PASSIVE_FREQ = 6;
|
||||
export const COAST_ACTIVE_FREQ = 9;
|
||||
export const COAST_PASSIVE_AMP = 0.08;
|
||||
export const COAST_ACTIVE_AMP = 0.12;
|
||||
export const COAST_WARP_PASSIVE_REACH = 1.2;
|
||||
export const COAST_WARP_ACTIVE_REACH = 1.5;
|
||||
export const COAST_WARP_AMT = 0.35;
|
||||
export const COAST_SUBDUCT_SUP_LOW = 0.45;
|
||||
export const COAST_SUBDUCT_SUP_RANGE = 0.55;
|
||||
|
||||
// ── Island Scattering ──
|
||||
export const ISLAND_DIST_BASE = 4;
|
||||
export const ISLAND_FREQ = 17.5;
|
||||
export const ISLAND_THRESHOLD_BASE = 0.25;
|
||||
export const ISLAND_THRESHOLD_STRESS = 0.2;
|
||||
export const ISLAND_BUMP_AMP = 0.18;
|
||||
export const ISLAND_SUBDUCT_MAX = 0.3;
|
||||
|
||||
// ── Island Arcs ──
|
||||
export const ARC_DIST_BASE = 5;
|
||||
export const ARC_PEAK_DIST_BASE = 1.5;
|
||||
export const ARC_SIGMA_BASE_VAL = 1.5;
|
||||
export const ARC_THRESHOLD = 0.30;
|
||||
export const ARC_UPLIFT_AMP = 0.55;
|
||||
export const ARC_SUBDUCT_THRESH = 0.45;
|
||||
|
||||
// ── Volcanic Features ──
|
||||
export const VOLC_MIN_SPACING = 0.015;
|
||||
export const VOLC_SIGMA_BASE = 0.003;
|
||||
export const VOLC_HEIGHT_BASE = 0.15;
|
||||
export const VOLC_HEIGHT_VAR_BASE = 0.7;
|
||||
export const VOLC_HEIGHT_VAR_RANGE = 0.6;
|
||||
export const VOLC_SIGMA_VAR_BASE = 0.6;
|
||||
export const VOLC_SIGMA_VAR_RANGE = 0.8;
|
||||
export const VOLC_SUBDUCT_THRESH = 0.45;
|
||||
|
||||
// ── Large Igneous Provinces ──
|
||||
export const LIP_SIGMA = 0.025;
|
||||
export const LIP_HEIGHT = 0.04;
|
||||
|
||||
// ── Hotspot Chains ──
|
||||
export const NUM_HOTSPOTS = 5;
|
||||
export const CHAIN_LENGTH = 6;
|
||||
export const CHAIN_DECAY = 0.75;
|
||||
export const CHAIN_SPACING = 0.06;
|
||||
export const DOME_SIGMA = 0.006;
|
||||
export const DOME_STRENGTH = 0.60;
|
||||
export const SWELL_SIGMA_MULT = 2;
|
||||
export const SWELL_STR_MULT = 0.10;
|
||||
export const DOME_OCEAN_BOOST = 1.8;
|
||||
export const DOME_PEAK_THRESH_SIGMA = 5.5;
|
||||
export const DOME_SWELL_THRESH_SIGMA = 3;
|
||||
export const DOME_DRIFT_STRETCH = 1.4;
|
||||
export const DOME_RIFT_BOOST = 0.5;
|
||||
export const DOME_CALDERA_SIGMA_FRAC = 0.25;
|
||||
export const DOME_CALDERA_DEPTH_FRAC = 0.20;
|
||||
export const DOME_CALDERA_STRENGTH_MIN = 0.15;
|
||||
export const DOME_AGE_BROADENING = 0.06;
|
||||
export const DOME_SHAPE_WARP_FREQ = 8;
|
||||
export const DOME_SHAPE_WARP_AMP = 0.4;
|
||||
export const DOME_SHAPE_WARP_DETAIL_FREQ = 20;
|
||||
export const DOME_SHAPE_WARP_DETAIL_AMP = 0.40;
|
||||
export const DOME_TEXTURE_BASE_WEIGHT = 0.7;
|
||||
export const DOME_TEXTURE_DETAIL_WEIGHT = 0.3;
|
||||
export const DOME_TEXTURE_ACTIVE_MIN = 0.4;
|
||||
export const DOME_TEXTURE_ACTIVE_MAX = 1.2;
|
||||
export const DOME_TEXTURE_AGE_MIN_SHIFT = 0.3;
|
||||
export const DOME_TEXTURE_AGE_MAX_SHIFT = 0.2;
|
||||
|
||||
// ── Hypsometry & Isostasy ──
|
||||
export const PEAK_COMPRESS_POWER = 0.90;
|
||||
export const ISOSTATIC_K = 0.07;
|
||||
export const HYPS_BLEND = 0.40;
|
||||
export const HYPS_LOW_BREAK = 0.60;
|
||||
export const HYPS_MID_BREAK = 0.85;
|
||||
export const HYPS_LOW_ELEV_FRAC = 0.25;
|
||||
export const HYPS_MID_ELEV_FRAC = 0.35;
|
||||
export const HYPS_HIGH_POWER = 0.7;
|
||||
export const FILL_LEVEL = 0.005;
|
||||
|
||||
// ── Passive Margin Coastal Plain ──
|
||||
export const PLAIN_TARGET = 0.02;
|
||||
export const PLAIN_SUPPRESSION_STRENGTH = 0.6;
|
||||
|
||||
// ── Domain Warp (terrain-post.js) ──
|
||||
export const WARP_FREQ = 4;
|
||||
export const WARP_OCTAVES = 5;
|
||||
export const WARP_MAX_AMP_MULT = 0.12;
|
||||
export const WARP_BIAS_BASE = 0.25;
|
||||
export const WARP_BIAS_STRENGTH_SCALE = 0.5;
|
||||
export const WARP_HOTSPOT_DAMPEN = 0.8;
|
||||
|
||||
// ── Smoothing (terrain-post.js) ──
|
||||
export const SMOOTH_EDGE_SENSITIVITY = 8;
|
||||
|
||||
// ── Glacial Erosion (terrain-post.js) ──
|
||||
export const GLACIAL_LAT_DIVISOR = 4.5;
|
||||
export const GLACIAL_ELEV_LOW = 0.5;
|
||||
export const GLACIAL_ELEV_HIGH = 0.9;
|
||||
export const GLACIAL_ELEV_FACTOR_SCALE = 0.3;
|
||||
export const GLACIAL_ELEV_FACTOR_LAT_BASE = 0.3;
|
||||
export const GLACIAL_ELEV_FACTOR_LAT_SCALE = 0.7;
|
||||
export const GLACIAL_CARVE_RATE = 0.02;
|
||||
export const GLACIAL_CONVERGENCE_BONUS = 0.01;
|
||||
export const GLACIAL_DEPOSIT_AMOUNT = 0.005;
|
||||
export const GLACIAL_FJORD_CARVE = 0.015;
|
||||
export const GLACIAL_FLOW_THRESHOLD = 0.1;
|
||||
export const GLACIAL_FJORD_THRESHOLD = 0.5;
|
||||
export const GLACIAL_WIDENING_FRAC = 0.4;
|
||||
export const GLACIAL_TERMINUS_RATIO = 0.3;
|
||||
export const GLACIAL_FJORD_ICE_MIN = 0.2;
|
||||
export const GLACIAL_POST_SMOOTH = 0.3;
|
||||
export const GLACIAL_MID_FLOOD_FRAC = 0.75;
|
||||
export const GLACIAL_MID_FLOOD_CARVE = 0.85;
|
||||
export const GLACIAL_INITIAL_CARVE = 0.5;
|
||||
|
||||
// ── Hydraulic Erosion (terrain-post.js) ──
|
||||
export const HYDRAULIC_DEPOSIT_FRAC = 0.5;
|
||||
export const HYDRAULIC_SLOPE_SENSITIVITY = 50;
|
||||
|
||||
// ── Thermal Erosion (terrain-post.js) ──
|
||||
export const THERMAL_TRANSFER_FRAC = 0.5;
|
||||
|
||||
// ── Ridge Sharpening (terrain-post.js) ──
|
||||
export const RIDGE_SHARPEN_CAP = 1.5;
|
||||
export const VALLEY_DEEPEN_FACTOR = 0.4;
|
||||
export const VALLEY_FLOOR_FRAC = 0.5;
|
||||
export const VALLEY_FLOOR_MIN = 0.001;
|
||||
|
||||
// ── Priority Flood (terrain-post.js) ──
|
||||
export const FLOOD_NOISE_AMP = 0.01;
|
||||
export const FLOOD_CARVE_RADIUS_FRAC = 0.3;
|
||||
|
||||
// ── Plate Generation ──
|
||||
export const PLATE_LOW_PLATE_T_HIGH = 80;
|
||||
export const PLATE_LOW_PLATE_T_RANGE = 60;
|
||||
export const PLATE_RATE_MIN_BASE = 0.7;
|
||||
export const PLATE_RATE_MIN_LOW_T = 0.4;
|
||||
export const PLATE_RATE_RANGE_BASE = 2.3;
|
||||
export const PLATE_RATE_RANGE_LOW_T = 2.4;
|
||||
export const PLATE_DIR_BASE_BASE = 0.15;
|
||||
export const PLATE_DIR_BASE_LOW_T = 0.25;
|
||||
export const PLATE_DIR_SCALE_BASE = 0.25;
|
||||
export const PLATE_DIR_SCALE_LOW_T = 0.25;
|
||||
export const PLATE_DIR_STRENGTH_CAP = 0.85;
|
||||
export const PLATE_COMPACT_BASE = 0.3;
|
||||
export const PLATE_COMPACT_LOW_T = 0.22;
|
||||
export const PLATE_AREA_GOVERNOR_BASE = 2.0;
|
||||
export const PLATE_AREA_GOVERNOR_LOW_T = 2.0;
|
||||
export const PLATE_COMPACT_THRESHOLD_MULT = 1.8;
|
||||
export const PLATE_COMPACT_PENALTY_MULT = 4;
|
||||
export const PLATE_OMEGA_MIN = 0.5;
|
||||
export const PLATE_OMEGA_RANGE = 1.5;
|
||||
export const PLATE_SMOOTH_BASE = 3;
|
||||
export const PLATE_SMOOTH_LOW_T = 2;
|
||||
export const PLATE_SMOOTH_FIRST_THRESH = 0.4;
|
||||
export const PLATE_SMOOTH_LATER_THRESH = 0.5;
|
||||
|
||||
// ── Coarse Projection ──
|
||||
export const N_COARSE = 20000;
|
||||
export const COARSE_JITTER = 0.75;
|
||||
export const COARSE_PERTURB_BASE = 1.5;
|
||||
export const COARSE_PERTURB_LOW_T = 1.0;
|
||||
export const COARSE_FBM_BASE_FREQ = 8;
|
||||
export const COARSE_FBM_OCTAVES = 4;
|
||||
export const COARSE_FBM_DECAY = 0.5;
|
||||
export const COARSE_FBM_FREQ_MULT = 2;
|
||||
@@ -0,0 +1,351 @@
|
||||
// Terrain generation tunable constants.
|
||||
// Grouped by subsystem for iterative tuning.
|
||||
// These are internal algorithm constants, NOT user-facing slider parameters.
|
||||
|
||||
// ── Collision & Stress ──
|
||||
export const COLLISION_THRESHOLD = 0.75;
|
||||
export const COLLISION_DT_BASE = 1e-2;
|
||||
export const COLLISION_DT_REF_REGIONS = 10000;
|
||||
export const PAIR_INTENSITY_BASE = 0.5;
|
||||
export const SUBDUCT_UNDULATION_DENSITY_DECAY = 12;
|
||||
export const SUBDUCT_UNDULATION_FREQ = 6;
|
||||
export const SUBDUCT_UNDULATION_AMP = 0.4;
|
||||
export const SUBDUCT_FACTOR_BASE = 0.5;
|
||||
export const SUBDUCT_FACTOR_TANH_SCALE = 8;
|
||||
export const SUBDUCT_THRESHOLD = 0.55;
|
||||
export const BOUNDARY_TYPE_THRESH_FACTOR = 0.3;
|
||||
|
||||
export const STRESS_PROPAGATE_MIN = 0.01;
|
||||
export const STRESS_PROPAGATE_CUTOFF = 0.005;
|
||||
export const STRESS_DIR_FACTOR_MIN = 0.1;
|
||||
export const STRESS_DIR_FACTOR_BASE = 0.3;
|
||||
export const STRESS_DIR_FACTOR_SCALE = 0.7;
|
||||
export const STRESS_DIR_BLEND_PARENT = 0.8;
|
||||
export const STRESS_DIR_BLEND_TRAVEL = 0.2;
|
||||
export const STRESS_DIR_SMOOTH_PASSES = 2;
|
||||
export const STRESS_DIR_SELF_WEIGHT = 2;
|
||||
|
||||
export const STRESS_DECAY_BASE = 0.5;
|
||||
export const STRESS_DECAY_SPREAD_FACTOR = 0.04;
|
||||
export const STRESS_SUBDUCT_DECAY_MULT = 0.45;
|
||||
export const STRESS_PASSES_PER_SPREAD = 3;
|
||||
|
||||
export const STRESS_PERCENTILE = 0.97;
|
||||
|
||||
// Blend weights for dual-layer orogeny (small plates vs super plates)
|
||||
export const SMALL_W = 0.05;
|
||||
export const SUPER_W = 0.95;
|
||||
|
||||
// ── Distance Fields & Zone Widths ──
|
||||
export const INTERIOR_BAND_BASE = 16;
|
||||
export const TECTONIC_REACH_BASE = 20;
|
||||
export const COASTAL_PLAIN_WIDTH_BASE = 18;
|
||||
export const COAST_BFS_WIDTH_BASE = 8;
|
||||
|
||||
// ── Mountain Profiles ──
|
||||
export const RIDGE_STRENGTH = 0.15;
|
||||
export const RIDGE_SIGMA_BASE = 5;
|
||||
export const RIDGE_PEAK_SHIFT_BASE = 2;
|
||||
export const RIDGE_EXTENT_BASE = 10;
|
||||
export const RIDGE_ASYM_SUBDUCT_NARROW = 0.6;
|
||||
export const RIDGE_ASYM_OVERRIDE_WIDEN = 0.5;
|
||||
export const RIDGE_STRESS_WIDTH_BASE = 0.75;
|
||||
export const RIDGE_STRESS_WIDTH_SCALE = 0.5;
|
||||
export const RIDGE_WIDTH_NOISE_AMP = 0.2;
|
||||
|
||||
export const BASE_SCALE = 0.6;
|
||||
export const ASYMMETRY_FACTOR = 0.8;
|
||||
|
||||
export const SUBDUCTING_SUPPRESSION = 0.42;
|
||||
|
||||
export const STRESS_MAG_SCALE = 0.40;
|
||||
export const STRESS_DEPRESS_FRAC = 0.4;
|
||||
export const STRESS_HEIGHT_VAR_BASE = 0.60;
|
||||
export const STRESS_HEIGHT_VAR_SCALE = 0.8;
|
||||
|
||||
export const SUBDUCTING_REACH_MIN = 0.35;
|
||||
export const SUBDUCTING_REACH_RANGE = 0.3;
|
||||
|
||||
// ── Fold Ridges ──
|
||||
export const FOLD_FREQ_PRIMARY = 160;
|
||||
export const FOLD_FREQ_SECONDARY = 400;
|
||||
export const FOLD_MEAN_OFFSET = 0.36;
|
||||
export const FOLD_PHASE_WARP_AMP = 0.08;
|
||||
export const FOLD_PHASE_WARP2_AMP = 0.12;
|
||||
export const FOLD_AMP_MOD_BASE = 0.6;
|
||||
export const FOLD_AMP_MOD_SCALE = 0.4;
|
||||
export const FOLD_AMP_MOD2_BASE = 0.5;
|
||||
export const FOLD_AMP_MOD2_SCALE = 0.5;
|
||||
export const FOLD_SECONDARY_ALONG = 0.85;
|
||||
export const FOLD_SECONDARY_CROSS = 0.15;
|
||||
export const FOLD_SECONDARY_AMP = 0.18;
|
||||
export const FOLD_NOISE_MAG_SCALE = 0.8;
|
||||
export const FOLD_ELEV_THRESHOLD = 0.05;
|
||||
export const FOLD_ELEV_SCALE = 4;
|
||||
export const FOLD_ELEV_BOOST_OFFSET = 0.03;
|
||||
export const FOLD_ELEV_BOOST_SCALE = 6;
|
||||
export const FOLD_SF_SUPPRESS = 1.5;
|
||||
export const FOLD_FREQ_MULT_SCALE = 1.5;
|
||||
|
||||
// ── Basins & Rifts ──
|
||||
export const RIFT_HALF_WIDTH_BASE = 4;
|
||||
export const RIFT_FLOOR_MULT = 1.5;
|
||||
export const RIFT_SHOULDER_MULT = 2.5;
|
||||
export const RIFT_AXIS_DEPTH = -0.18;
|
||||
export const RIFT_AXIS_VOLCANIC_AMP = 0.06;
|
||||
export const RIFT_FLOOR_DEPTH = -0.12;
|
||||
export const RIFT_FLOOR_TAPER = 0.3;
|
||||
export const RIFT_FLOOR_VOLCANIC_AMP = 0.03;
|
||||
export const RIFT_SHOULDER_UPLIFT = 0.05;
|
||||
export const RIFT_FADEOUT_RESIDUAL = 0.2;
|
||||
|
||||
export const BASIN_FREQ = 1.8;
|
||||
export const BASIN_FACTOR_BIAS = 0.5;
|
||||
export const BASIN_FACTOR_SCALE = 0.6;
|
||||
export const FORELAND_STRESS_THRESH = 0.15;
|
||||
export const FORELAND_WIDTH_FRAC = 0.3;
|
||||
export const FORELAND_BASIN_DEPTH = 0.05;
|
||||
export const FORELAND_PEAK_POS = 0.2;
|
||||
export const FORELAND_BASIN_DEEPENING_BASE = 0.5;
|
||||
export const FORELAND_BASIN_DEEPENING_SCALE = 0.5;
|
||||
|
||||
// ── Back-Arc & Foreland ──
|
||||
export const BACK_ARC_START_BASE = 2;
|
||||
export const BACK_ARC_PEAK_BASE = 3;
|
||||
export const BACK_ARC_END_BASE = 5;
|
||||
export const BACK_ARC_DEPTH = 0.14;
|
||||
export const BACK_ARC_SUBDUCT_THRESH = 0.50;
|
||||
|
||||
// ── Noise Layering ──
|
||||
export const WARP_SCALE = 0.4;
|
||||
export const OROGENIC_FREQ = 1.5;
|
||||
export const NOISE_ACTIVITY_SCALE = 4;
|
||||
export const NOISE_BASE_SCALE = 0.25;
|
||||
export const NOISE_ACTIVITY_CONTRIB = 0.75;
|
||||
export const PLATEAU_SUPPRESS_MIN = 0.30;
|
||||
export const PLATEAU_SUPPRESS_SCALE = 0.60;
|
||||
export const BASIN_AMP_SUPPRESS = 0.7;
|
||||
export const CRATON_AMP_SUPPRESS = 0.25;
|
||||
export const RIDGED_NOISE_AMP = 1.5;
|
||||
export const DETAIL_NOISE_FREQ_MULT = 4;
|
||||
export const DETAIL_NOISE_AMP = 0.5;
|
||||
export const FINE_NOISE_FREQ_MULT = 8;
|
||||
export const FINE_NOISE_AMP = 0.25;
|
||||
export const OCEAN_NOISE_AMP = 0.3;
|
||||
|
||||
// ── Dissection & Summits ──
|
||||
export const DISSECT_THRESHOLD = 0.10;
|
||||
export const DISSECT_AMP = 0.55;
|
||||
export const DISSECT_ELEV_SCALE = 2;
|
||||
export const SUMMIT_THRESHOLD = 0.55;
|
||||
export const SUMMIT_STRESS_MIN = 0.03;
|
||||
export const SUMMIT_SPIKE_OFFSET = 0.40;
|
||||
export const SUMMIT_STRESS_FLOOR = 0.25;
|
||||
|
||||
// ── Interior Elevation ──
|
||||
export const PLATE_BASE_HEIGHT_MEAN = -0.15;
|
||||
export const PLATE_BASE_HEIGHT_STDDEV = 0.025;
|
||||
export const INTERIOR_BASE_SHIELD = 0.14;
|
||||
export const INTERIOR_BASE_BASIN = 0.04;
|
||||
export const INTERIOR_TECTONIC = 0.20;
|
||||
export const COASTAL_DEPRESSION = -0.08;
|
||||
export const COASTAL_DEPRESSION_BASIN_REDUCE = 0.4;
|
||||
export const INTERIOR_UPLIFT_RAMP_FRAC = 0.4;
|
||||
export const INTERIOR_UPLIFT_MOD_AMP = 0.2;
|
||||
export const INTERIOR_FLOOR = 0.008;
|
||||
export const PLATEAU_BOOST = 0.04;
|
||||
export const PLATEAU_START_BASE = 3;
|
||||
export const MOUNTAIN_BOOST_FRAC = 0.3;
|
||||
export const FOLD_BELT_MULT = 3;
|
||||
export const CRATON_TECTONIC_MULT = 2.5;
|
||||
export const BASIN_TECTONIC_MULT = 2;
|
||||
|
||||
// ── Continental Margins ──
|
||||
export const SHELF_NARROW_BASE = 4;
|
||||
export const SHELF_WIDE_BASE = 12;
|
||||
export const SLOPE_WIDTH_BASE = 7;
|
||||
export const SHELF_DEPTH_START = -0.08;
|
||||
export const SHELF_DEPTH_RANGE = 0.08;
|
||||
export const SLOPE_DEPTH_RANGE = 0.19;
|
||||
export const ABYSS_BASE = -0.35;
|
||||
export const ABYSS_NOISE_AMP = 0.03;
|
||||
export const OCEAN_FLOOR_CLAMP = -0.005;
|
||||
|
||||
// ── Mid-Ocean Features ──
|
||||
export const RIDGE_HALF_WIDTH_BASE = 4;
|
||||
export const RIDGE_UPLIFT_NOISE = 0.12;
|
||||
export const RIDGE_UPLIFT_BASE = 0.06;
|
||||
export const FRACTURE_HALF_WIDTH_BASE = 3;
|
||||
export const FRACTURE_DEPTH = 0.03;
|
||||
export const TRENCH_BASE_DEPTH = 0.20;
|
||||
export const TRENCH_STRESS_DEPTH = 0.20;
|
||||
|
||||
// ── Coastal Roughening ──
|
||||
export const COAST_ROUGHEN_BASE = 8;
|
||||
export const COAST_PASSIVE_FREQ = 6;
|
||||
export const COAST_ACTIVE_FREQ = 9;
|
||||
export const COAST_PASSIVE_AMP = 0.08;
|
||||
export const COAST_ACTIVE_AMP = 0.12;
|
||||
export const COAST_WARP_PASSIVE_REACH = 1.2;
|
||||
export const COAST_WARP_ACTIVE_REACH = 1.5;
|
||||
export const COAST_WARP_AMT = 0.35;
|
||||
export const COAST_SUBDUCT_SUP_LOW = 0.45;
|
||||
export const COAST_SUBDUCT_SUP_RANGE = 0.55;
|
||||
|
||||
// ── Island Scattering ──
|
||||
export const ISLAND_DIST_BASE = 4;
|
||||
export const ISLAND_FREQ = 17.5;
|
||||
export const ISLAND_THRESHOLD_BASE = 0.25;
|
||||
export const ISLAND_THRESHOLD_STRESS = 0.2;
|
||||
export const ISLAND_BUMP_AMP = 0.18;
|
||||
export const ISLAND_SUBDUCT_MAX = 0.3;
|
||||
|
||||
// ── Island Arcs ──
|
||||
export const ARC_DIST_BASE = 5;
|
||||
export const ARC_PEAK_DIST_BASE = 1.5;
|
||||
export const ARC_SIGMA_BASE_VAL = 1.5;
|
||||
export const ARC_THRESHOLD = 0.30;
|
||||
export const ARC_UPLIFT_AMP = 0.55;
|
||||
export const ARC_SUBDUCT_THRESH = 0.45;
|
||||
|
||||
// ── Volcanic Features ──
|
||||
export const VOLC_MIN_SPACING = 0.015;
|
||||
export const VOLC_SIGMA_BASE = 0.003;
|
||||
export const VOLC_HEIGHT_BASE = 0.15;
|
||||
export const VOLC_HEIGHT_VAR_BASE = 0.7;
|
||||
export const VOLC_HEIGHT_VAR_RANGE = 0.6;
|
||||
export const VOLC_SIGMA_VAR_BASE = 0.6;
|
||||
export const VOLC_SIGMA_VAR_RANGE = 0.8;
|
||||
export const VOLC_SUBDUCT_THRESH = 0.45;
|
||||
|
||||
// ── Large Igneous Provinces ──
|
||||
export const LIP_SIGMA = 0.025;
|
||||
export const LIP_HEIGHT = 0.04;
|
||||
|
||||
// ── Hotspot Chains ──
|
||||
export const NUM_HOTSPOTS = 5;
|
||||
export const CHAIN_LENGTH = 6;
|
||||
export const CHAIN_DECAY = 0.75;
|
||||
export const CHAIN_SPACING = 0.06;
|
||||
export const DOME_SIGMA = 0.006;
|
||||
export const DOME_STRENGTH = 0.60;
|
||||
export const SWELL_SIGMA_MULT = 2;
|
||||
export const SWELL_STR_MULT = 0.10;
|
||||
export const DOME_OCEAN_BOOST = 1.8;
|
||||
export const DOME_PEAK_THRESH_SIGMA = 5.5;
|
||||
export const DOME_SWELL_THRESH_SIGMA = 3;
|
||||
export const DOME_DRIFT_STRETCH = 1.4;
|
||||
export const DOME_RIFT_BOOST = 0.5;
|
||||
export const DOME_CALDERA_SIGMA_FRAC = 0.25;
|
||||
export const DOME_CALDERA_DEPTH_FRAC = 0.20;
|
||||
export const DOME_CALDERA_STRENGTH_MIN = 0.15;
|
||||
export const DOME_AGE_BROADENING = 0.06;
|
||||
export const DOME_SHAPE_WARP_FREQ = 8;
|
||||
export const DOME_SHAPE_WARP_AMP = 0.4;
|
||||
export const DOME_SHAPE_WARP_DETAIL_FREQ = 20;
|
||||
export const DOME_SHAPE_WARP_DETAIL_AMP = 0.40;
|
||||
export const DOME_TEXTURE_BASE_WEIGHT = 0.7;
|
||||
export const DOME_TEXTURE_DETAIL_WEIGHT = 0.3;
|
||||
export const DOME_TEXTURE_ACTIVE_MIN = 0.4;
|
||||
export const DOME_TEXTURE_ACTIVE_MAX = 1.2;
|
||||
export const DOME_TEXTURE_AGE_MIN_SHIFT = 0.3;
|
||||
export const DOME_TEXTURE_AGE_MAX_SHIFT = 0.2;
|
||||
|
||||
// ── Hypsometry & Isostasy ──
|
||||
export const PEAK_COMPRESS_POWER = 0.90;
|
||||
export const ISOSTATIC_K = 0.07;
|
||||
export const HYPS_BLEND = 0.40;
|
||||
export const HYPS_LOW_BREAK = 0.60;
|
||||
export const HYPS_MID_BREAK = 0.85;
|
||||
export const HYPS_LOW_ELEV_FRAC = 0.25;
|
||||
export const HYPS_MID_ELEV_FRAC = 0.35;
|
||||
export const HYPS_HIGH_POWER = 0.7;
|
||||
export const FILL_LEVEL = 0.005;
|
||||
|
||||
// ── Passive Margin Coastal Plain ──
|
||||
export const PLAIN_TARGET = 0.02;
|
||||
export const PLAIN_SUPPRESSION_STRENGTH = 0.6;
|
||||
|
||||
// ── Domain Warp (terrain-post.js) ──
|
||||
export const WARP_FREQ = 4;
|
||||
export const WARP_OCTAVES = 5;
|
||||
export const WARP_MAX_AMP_MULT = 0.13;
|
||||
export const WARP_BIAS_BASE = 0.25;
|
||||
export const WARP_BIAS_STRENGTH_SCALE = 0.5;
|
||||
export const WARP_HOTSPOT_DAMPEN = 0.8;
|
||||
|
||||
// ── Smoothing (terrain-post.js) ──
|
||||
export const SMOOTH_EDGE_SENSITIVITY = 8;
|
||||
|
||||
// ── Glacial Erosion (terrain-post.js) ──
|
||||
export const GLACIAL_LAT_DIVISOR = 4.5;
|
||||
export const GLACIAL_ELEV_LOW = 0.5;
|
||||
export const GLACIAL_ELEV_HIGH = 0.9;
|
||||
export const GLACIAL_ELEV_FACTOR_SCALE = 0.3;
|
||||
export const GLACIAL_ELEV_FACTOR_LAT_BASE = 0.3;
|
||||
export const GLACIAL_ELEV_FACTOR_LAT_SCALE = 0.7;
|
||||
export const GLACIAL_CARVE_RATE = 0.02;
|
||||
export const GLACIAL_CONVERGENCE_BONUS = 0.01;
|
||||
export const GLACIAL_DEPOSIT_AMOUNT = 0.005;
|
||||
export const GLACIAL_FJORD_CARVE = 0.015;
|
||||
export const GLACIAL_FLOW_THRESHOLD = 0.1;
|
||||
export const GLACIAL_FJORD_THRESHOLD = 0.5;
|
||||
export const GLACIAL_WIDENING_FRAC = 0.4;
|
||||
export const GLACIAL_TERMINUS_RATIO = 0.3;
|
||||
export const GLACIAL_FJORD_ICE_MIN = 0.2;
|
||||
export const GLACIAL_POST_SMOOTH = 0.3;
|
||||
export const GLACIAL_MID_FLOOD_FRAC = 0.75;
|
||||
export const GLACIAL_MID_FLOOD_CARVE = 0.85;
|
||||
export const GLACIAL_INITIAL_CARVE = 0.5;
|
||||
|
||||
// ── Hydraulic Erosion (terrain-post.js) ──
|
||||
export const HYDRAULIC_DEPOSIT_FRAC = 0.5;
|
||||
export const HYDRAULIC_SLOPE_SENSITIVITY = 50;
|
||||
|
||||
// ── Thermal Erosion (terrain-post.js) ──
|
||||
export const THERMAL_TRANSFER_FRAC = 0.5;
|
||||
|
||||
// ── Ridge Sharpening (terrain-post.js) ──
|
||||
export const RIDGE_SHARPEN_CAP = 1.5;
|
||||
export const VALLEY_DEEPEN_FACTOR = 0.4;
|
||||
export const VALLEY_FLOOR_FRAC = 0.5;
|
||||
export const VALLEY_FLOOR_MIN = 0.001;
|
||||
|
||||
// ── Priority Flood (terrain-post.js) ──
|
||||
export const FLOOD_NOISE_AMP = 0.01;
|
||||
export const FLOOD_CARVE_RADIUS_FRAC = 0.3;
|
||||
|
||||
// ── Plate Generation ──
|
||||
export const PLATE_LOW_PLATE_T_HIGH = 80;
|
||||
export const PLATE_LOW_PLATE_T_RANGE = 60;
|
||||
export const PLATE_RATE_MIN_BASE = 0.7;
|
||||
export const PLATE_RATE_MIN_LOW_T = 0.4;
|
||||
export const PLATE_RATE_RANGE_BASE = 2.3;
|
||||
export const PLATE_RATE_RANGE_LOW_T = 2.4;
|
||||
export const PLATE_DIR_BASE_BASE = 0.15;
|
||||
export const PLATE_DIR_BASE_LOW_T = 0.25;
|
||||
export const PLATE_DIR_SCALE_BASE = 0.25;
|
||||
export const PLATE_DIR_SCALE_LOW_T = 0.25;
|
||||
export const PLATE_DIR_STRENGTH_CAP = 0.85;
|
||||
export const PLATE_COMPACT_BASE = 0.3;
|
||||
export const PLATE_COMPACT_LOW_T = 0.22;
|
||||
export const PLATE_AREA_GOVERNOR_BASE = 2.0;
|
||||
export const PLATE_AREA_GOVERNOR_LOW_T = 2.0;
|
||||
export const PLATE_COMPACT_THRESHOLD_MULT = 1.8;
|
||||
export const PLATE_COMPACT_PENALTY_MULT = 4;
|
||||
export const PLATE_OMEGA_MIN = 0.5;
|
||||
export const PLATE_OMEGA_RANGE = 1.5;
|
||||
export const PLATE_SMOOTH_BASE = 3;
|
||||
export const PLATE_SMOOTH_LOW_T = 2;
|
||||
export const PLATE_SMOOTH_FIRST_THRESH = 0.4;
|
||||
export const PLATE_SMOOTH_LATER_THRESH = 0.5;
|
||||
|
||||
// ── Coarse Projection ──
|
||||
export const N_COARSE = 20000;
|
||||
export const COARSE_JITTER = 0.75;
|
||||
export const COARSE_PERTURB_BASE = 1.5;
|
||||
export const COARSE_PERTURB_LOW_T = 1.0;
|
||||
export const COARSE_FBM_BASE_FREQ = 8;
|
||||
export const COARSE_FBM_OCTAVES = 4;
|
||||
export const COARSE_FBM_DECAY = 0.5;
|
||||
export const COARSE_FBM_FREQ_MULT = 2;
|
||||
@@ -0,0 +1,351 @@
|
||||
// Terrain generation tunable constants.
|
||||
// Grouped by subsystem for iterative tuning.
|
||||
// These are internal algorithm constants, NOT user-facing slider parameters.
|
||||
|
||||
// ── Collision & Stress ──
|
||||
export const COLLISION_THRESHOLD = 0.75;
|
||||
export const COLLISION_DT_BASE = 1e-2;
|
||||
export const COLLISION_DT_REF_REGIONS = 10000;
|
||||
export const PAIR_INTENSITY_BASE = 0.5;
|
||||
export const SUBDUCT_UNDULATION_DENSITY_DECAY = 12;
|
||||
export const SUBDUCT_UNDULATION_FREQ = 6;
|
||||
export const SUBDUCT_UNDULATION_AMP = 0.4;
|
||||
export const SUBDUCT_FACTOR_BASE = 0.5;
|
||||
export const SUBDUCT_FACTOR_TANH_SCALE = 8;
|
||||
export const SUBDUCT_THRESHOLD = 0.55;
|
||||
export const BOUNDARY_TYPE_THRESH_FACTOR = 0.3;
|
||||
|
||||
export const STRESS_PROPAGATE_MIN = 0.01;
|
||||
export const STRESS_PROPAGATE_CUTOFF = 0.005;
|
||||
export const STRESS_DIR_FACTOR_MIN = 0.1;
|
||||
export const STRESS_DIR_FACTOR_BASE = 0.3;
|
||||
export const STRESS_DIR_FACTOR_SCALE = 0.7;
|
||||
export const STRESS_DIR_BLEND_PARENT = 0.8;
|
||||
export const STRESS_DIR_BLEND_TRAVEL = 0.2;
|
||||
export const STRESS_DIR_SMOOTH_PASSES = 2;
|
||||
export const STRESS_DIR_SELF_WEIGHT = 2;
|
||||
|
||||
export const STRESS_DECAY_BASE = 0.5;
|
||||
export const STRESS_DECAY_SPREAD_FACTOR = 0.04;
|
||||
export const STRESS_SUBDUCT_DECAY_MULT = 0.45;
|
||||
export const STRESS_PASSES_PER_SPREAD = 3;
|
||||
|
||||
export const STRESS_PERCENTILE = 0.97;
|
||||
|
||||
// Blend weights for dual-layer orogeny (small plates vs super plates)
|
||||
export const SMALL_W = 0.05;
|
||||
export const SUPER_W = 0.95;
|
||||
|
||||
// ── Distance Fields & Zone Widths ──
|
||||
export const INTERIOR_BAND_BASE = 16;
|
||||
export const TECTONIC_REACH_BASE = 20;
|
||||
export const COASTAL_PLAIN_WIDTH_BASE = 18;
|
||||
export const COAST_BFS_WIDTH_BASE = 8;
|
||||
|
||||
// ── Mountain Profiles ──
|
||||
export const RIDGE_STRENGTH = 0.15;
|
||||
export const RIDGE_SIGMA_BASE = 5;
|
||||
export const RIDGE_PEAK_SHIFT_BASE = 2;
|
||||
export const RIDGE_EXTENT_BASE = 10;
|
||||
export const RIDGE_ASYM_SUBDUCT_NARROW = 0.6;
|
||||
export const RIDGE_ASYM_OVERRIDE_WIDEN = 0.5;
|
||||
export const RIDGE_STRESS_WIDTH_BASE = 0.75;
|
||||
export const RIDGE_STRESS_WIDTH_SCALE = 0.5;
|
||||
export const RIDGE_WIDTH_NOISE_AMP = 0.2;
|
||||
|
||||
export const BASE_SCALE = 0.6;
|
||||
export const ASYMMETRY_FACTOR = 0.8;
|
||||
|
||||
export const SUBDUCTING_SUPPRESSION = 0.42;
|
||||
|
||||
export const STRESS_MAG_SCALE = 0.40;
|
||||
export const STRESS_DEPRESS_FRAC = 0.4;
|
||||
export const STRESS_HEIGHT_VAR_BASE = 0.60;
|
||||
export const STRESS_HEIGHT_VAR_SCALE = 0.8;
|
||||
|
||||
export const SUBDUCTING_REACH_MIN = 0.35;
|
||||
export const SUBDUCTING_REACH_RANGE = 0.3;
|
||||
|
||||
// ── Fold Ridges ──
|
||||
export const FOLD_FREQ_PRIMARY = 160;
|
||||
export const FOLD_FREQ_SECONDARY = 400;
|
||||
export const FOLD_MEAN_OFFSET = 0.36;
|
||||
export const FOLD_PHASE_WARP_AMP = 0.08;
|
||||
export const FOLD_PHASE_WARP2_AMP = 0.12;
|
||||
export const FOLD_AMP_MOD_BASE = 0.6;
|
||||
export const FOLD_AMP_MOD_SCALE = 0.4;
|
||||
export const FOLD_AMP_MOD2_BASE = 0.5;
|
||||
export const FOLD_AMP_MOD2_SCALE = 0.5;
|
||||
export const FOLD_SECONDARY_ALONG = 0.85;
|
||||
export const FOLD_SECONDARY_CROSS = 0.15;
|
||||
export const FOLD_SECONDARY_AMP = 0.18;
|
||||
export const FOLD_NOISE_MAG_SCALE = 0.8;
|
||||
export const FOLD_ELEV_THRESHOLD = 0.05;
|
||||
export const FOLD_ELEV_SCALE = 4;
|
||||
export const FOLD_ELEV_BOOST_OFFSET = 0.03;
|
||||
export const FOLD_ELEV_BOOST_SCALE = 6;
|
||||
export const FOLD_SF_SUPPRESS = 1.5;
|
||||
export const FOLD_FREQ_MULT_SCALE = 1.5;
|
||||
|
||||
// ── Basins & Rifts ──
|
||||
export const RIFT_HALF_WIDTH_BASE = 4;
|
||||
export const RIFT_FLOOR_MULT = 1.5;
|
||||
export const RIFT_SHOULDER_MULT = 2.5;
|
||||
export const RIFT_AXIS_DEPTH = -0.18;
|
||||
export const RIFT_AXIS_VOLCANIC_AMP = 0.06;
|
||||
export const RIFT_FLOOR_DEPTH = -0.12;
|
||||
export const RIFT_FLOOR_TAPER = 0.3;
|
||||
export const RIFT_FLOOR_VOLCANIC_AMP = 0.03;
|
||||
export const RIFT_SHOULDER_UPLIFT = 0.05;
|
||||
export const RIFT_FADEOUT_RESIDUAL = 0.2;
|
||||
|
||||
export const BASIN_FREQ = 1.8;
|
||||
export const BASIN_FACTOR_BIAS = 0.5;
|
||||
export const BASIN_FACTOR_SCALE = 0.6;
|
||||
export const FORELAND_STRESS_THRESH = 0.15;
|
||||
export const FORELAND_WIDTH_FRAC = 0.3;
|
||||
export const FORELAND_BASIN_DEPTH = 0.05;
|
||||
export const FORELAND_PEAK_POS = 0.2;
|
||||
export const FORELAND_BASIN_DEEPENING_BASE = 0.5;
|
||||
export const FORELAND_BASIN_DEEPENING_SCALE = 0.5;
|
||||
|
||||
// ── Back-Arc & Foreland ──
|
||||
export const BACK_ARC_START_BASE = 2;
|
||||
export const BACK_ARC_PEAK_BASE = 3;
|
||||
export const BACK_ARC_END_BASE = 5;
|
||||
export const BACK_ARC_DEPTH = 0.14;
|
||||
export const BACK_ARC_SUBDUCT_THRESH = 0.50;
|
||||
|
||||
// ── Noise Layering ──
|
||||
export const WARP_SCALE = 0.4;
|
||||
export const OROGENIC_FREQ = 1.5;
|
||||
export const NOISE_ACTIVITY_SCALE = 4;
|
||||
export const NOISE_BASE_SCALE = 0.25;
|
||||
export const NOISE_ACTIVITY_CONTRIB = 0.75;
|
||||
export const PLATEAU_SUPPRESS_MIN = 0.30;
|
||||
export const PLATEAU_SUPPRESS_SCALE = 0.60;
|
||||
export const BASIN_AMP_SUPPRESS = 0.7;
|
||||
export const CRATON_AMP_SUPPRESS = 0.25;
|
||||
export const RIDGED_NOISE_AMP = 1.5;
|
||||
export const DETAIL_NOISE_FREQ_MULT = 4;
|
||||
export const DETAIL_NOISE_AMP = 0.5;
|
||||
export const FINE_NOISE_FREQ_MULT = 8;
|
||||
export const FINE_NOISE_AMP = 0.25;
|
||||
export const OCEAN_NOISE_AMP = 0.3;
|
||||
|
||||
// ── Dissection & Summits ──
|
||||
export const DISSECT_THRESHOLD = 0.10;
|
||||
export const DISSECT_AMP = 0.55;
|
||||
export const DISSECT_ELEV_SCALE = 2;
|
||||
export const SUMMIT_THRESHOLD = 0.55;
|
||||
export const SUMMIT_STRESS_MIN = 0.03;
|
||||
export const SUMMIT_SPIKE_OFFSET = 0.40;
|
||||
export const SUMMIT_STRESS_FLOOR = 0.25;
|
||||
|
||||
// ── Interior Elevation ──
|
||||
export const PLATE_BASE_HEIGHT_MEAN = -0.15;
|
||||
export const PLATE_BASE_HEIGHT_STDDEV = 0.025;
|
||||
export const INTERIOR_BASE_SHIELD = 0.14;
|
||||
export const INTERIOR_BASE_BASIN = 0.04;
|
||||
export const INTERIOR_TECTONIC = 0.20;
|
||||
export const COASTAL_DEPRESSION = -0.08;
|
||||
export const COASTAL_DEPRESSION_BASIN_REDUCE = 0.4;
|
||||
export const INTERIOR_UPLIFT_RAMP_FRAC = 0.4;
|
||||
export const INTERIOR_UPLIFT_MOD_AMP = 0.2;
|
||||
export const INTERIOR_FLOOR = 0.008;
|
||||
export const PLATEAU_BOOST = 0.04;
|
||||
export const PLATEAU_START_BASE = 3;
|
||||
export const MOUNTAIN_BOOST_FRAC = 0.3;
|
||||
export const FOLD_BELT_MULT = 3;
|
||||
export const CRATON_TECTONIC_MULT = 2.5;
|
||||
export const BASIN_TECTONIC_MULT = 2;
|
||||
|
||||
// ── Continental Margins ──
|
||||
export const SHELF_NARROW_BASE = 4;
|
||||
export const SHELF_WIDE_BASE = 12;
|
||||
export const SLOPE_WIDTH_BASE = 7;
|
||||
export const SHELF_DEPTH_START = -0.08;
|
||||
export const SHELF_DEPTH_RANGE = 0.08;
|
||||
export const SLOPE_DEPTH_RANGE = 0.19;
|
||||
export const ABYSS_BASE = -0.35;
|
||||
export const ABYSS_NOISE_AMP = 0.03;
|
||||
export const OCEAN_FLOOR_CLAMP = -0.005;
|
||||
|
||||
// ── Mid-Ocean Features ──
|
||||
export const RIDGE_HALF_WIDTH_BASE = 4;
|
||||
export const RIDGE_UPLIFT_NOISE = 0.12;
|
||||
export const RIDGE_UPLIFT_BASE = 0.06;
|
||||
export const FRACTURE_HALF_WIDTH_BASE = 3;
|
||||
export const FRACTURE_DEPTH = 0.03;
|
||||
export const TRENCH_BASE_DEPTH = 0.20;
|
||||
export const TRENCH_STRESS_DEPTH = 0.20;
|
||||
|
||||
// ── Coastal Roughening ──
|
||||
export const COAST_ROUGHEN_BASE = 8;
|
||||
export const COAST_PASSIVE_FREQ = 6;
|
||||
export const COAST_ACTIVE_FREQ = 9;
|
||||
export const COAST_PASSIVE_AMP = 0.08;
|
||||
export const COAST_ACTIVE_AMP = 0.12;
|
||||
export const COAST_WARP_PASSIVE_REACH = 1.2;
|
||||
export const COAST_WARP_ACTIVE_REACH = 1.5;
|
||||
export const COAST_WARP_AMT = 0.35;
|
||||
export const COAST_SUBDUCT_SUP_LOW = 0.45;
|
||||
export const COAST_SUBDUCT_SUP_RANGE = 0.55;
|
||||
|
||||
// ── Island Scattering ──
|
||||
export const ISLAND_DIST_BASE = 4;
|
||||
export const ISLAND_FREQ = 17.5;
|
||||
export const ISLAND_THRESHOLD_BASE = 0.25;
|
||||
export const ISLAND_THRESHOLD_STRESS = 0.2;
|
||||
export const ISLAND_BUMP_AMP = 0.18;
|
||||
export const ISLAND_SUBDUCT_MAX = 0.3;
|
||||
|
||||
// ── Island Arcs ──
|
||||
export const ARC_DIST_BASE = 5;
|
||||
export const ARC_PEAK_DIST_BASE = 1.5;
|
||||
export const ARC_SIGMA_BASE_VAL = 1.5;
|
||||
export const ARC_THRESHOLD = 0.30;
|
||||
export const ARC_UPLIFT_AMP = 0.55;
|
||||
export const ARC_SUBDUCT_THRESH = 0.45;
|
||||
|
||||
// ── Volcanic Features ──
|
||||
export const VOLC_MIN_SPACING = 0.015;
|
||||
export const VOLC_SIGMA_BASE = 0.003;
|
||||
export const VOLC_HEIGHT_BASE = 0.15;
|
||||
export const VOLC_HEIGHT_VAR_BASE = 0.7;
|
||||
export const VOLC_HEIGHT_VAR_RANGE = 0.6;
|
||||
export const VOLC_SIGMA_VAR_BASE = 0.6;
|
||||
export const VOLC_SIGMA_VAR_RANGE = 0.8;
|
||||
export const VOLC_SUBDUCT_THRESH = 0.45;
|
||||
|
||||
// ── Large Igneous Provinces ──
|
||||
export const LIP_SIGMA = 0.025;
|
||||
export const LIP_HEIGHT = 0.04;
|
||||
|
||||
// ── Hotspot Chains ──
|
||||
export const NUM_HOTSPOTS = 5;
|
||||
export const CHAIN_LENGTH = 6;
|
||||
export const CHAIN_DECAY = 0.75;
|
||||
export const CHAIN_SPACING = 0.06;
|
||||
export const DOME_SIGMA = 0.006;
|
||||
export const DOME_STRENGTH = 0.60;
|
||||
export const SWELL_SIGMA_MULT = 2;
|
||||
export const SWELL_STR_MULT = 0.10;
|
||||
export const DOME_OCEAN_BOOST = 1.8;
|
||||
export const DOME_PEAK_THRESH_SIGMA = 5.5;
|
||||
export const DOME_SWELL_THRESH_SIGMA = 3;
|
||||
export const DOME_DRIFT_STRETCH = 1.4;
|
||||
export const DOME_RIFT_BOOST = 0.5;
|
||||
export const DOME_CALDERA_SIGMA_FRAC = 0.25;
|
||||
export const DOME_CALDERA_DEPTH_FRAC = 0.20;
|
||||
export const DOME_CALDERA_STRENGTH_MIN = 0.15;
|
||||
export const DOME_AGE_BROADENING = 0.06;
|
||||
export const DOME_SHAPE_WARP_FREQ = 8;
|
||||
export const DOME_SHAPE_WARP_AMP = 0.4;
|
||||
export const DOME_SHAPE_WARP_DETAIL_FREQ = 20;
|
||||
export const DOME_SHAPE_WARP_DETAIL_AMP = 0.40;
|
||||
export const DOME_TEXTURE_BASE_WEIGHT = 0.7;
|
||||
export const DOME_TEXTURE_DETAIL_WEIGHT = 0.3;
|
||||
export const DOME_TEXTURE_ACTIVE_MIN = 0.4;
|
||||
export const DOME_TEXTURE_ACTIVE_MAX = 1.2;
|
||||
export const DOME_TEXTURE_AGE_MIN_SHIFT = 0.3;
|
||||
export const DOME_TEXTURE_AGE_MAX_SHIFT = 0.2;
|
||||
|
||||
// ── Hypsometry & Isostasy ──
|
||||
export const PEAK_COMPRESS_POWER = 0.90;
|
||||
export const ISOSTATIC_K = 0.07;
|
||||
export const HYPS_BLEND = 0.40;
|
||||
export const HYPS_LOW_BREAK = 0.60;
|
||||
export const HYPS_MID_BREAK = 0.85;
|
||||
export const HYPS_LOW_ELEV_FRAC = 0.25;
|
||||
export const HYPS_MID_ELEV_FRAC = 0.35;
|
||||
export const HYPS_HIGH_POWER = 0.7;
|
||||
export const FILL_LEVEL = 0.005;
|
||||
|
||||
// ── Passive Margin Coastal Plain ──
|
||||
export const PLAIN_TARGET = 0.02;
|
||||
export const PLAIN_SUPPRESSION_STRENGTH = 0.6;
|
||||
|
||||
// ── Domain Warp (terrain-post.js) ──
|
||||
export const WARP_FREQ = 4;
|
||||
export const WARP_OCTAVES = 5;
|
||||
export const WARP_MAX_AMP_MULT = 0.13;
|
||||
export const WARP_BIAS_BASE = 0.25;
|
||||
export const WARP_BIAS_STRENGTH_SCALE = 0.5;
|
||||
export const WARP_HOTSPOT_DAMPEN = 0.8;
|
||||
|
||||
// ── Smoothing (terrain-post.js) ──
|
||||
export const SMOOTH_EDGE_SENSITIVITY = 12;
|
||||
|
||||
// ── Glacial Erosion (terrain-post.js) ──
|
||||
export const GLACIAL_LAT_DIVISOR = 4.5;
|
||||
export const GLACIAL_ELEV_LOW = 0.5;
|
||||
export const GLACIAL_ELEV_HIGH = 0.9;
|
||||
export const GLACIAL_ELEV_FACTOR_SCALE = 0.3;
|
||||
export const GLACIAL_ELEV_FACTOR_LAT_BASE = 0.3;
|
||||
export const GLACIAL_ELEV_FACTOR_LAT_SCALE = 0.7;
|
||||
export const GLACIAL_CARVE_RATE = 0.02;
|
||||
export const GLACIAL_CONVERGENCE_BONUS = 0.01;
|
||||
export const GLACIAL_DEPOSIT_AMOUNT = 0.005;
|
||||
export const GLACIAL_FJORD_CARVE = 0.015;
|
||||
export const GLACIAL_FLOW_THRESHOLD = 0.1;
|
||||
export const GLACIAL_FJORD_THRESHOLD = 0.5;
|
||||
export const GLACIAL_WIDENING_FRAC = 0.4;
|
||||
export const GLACIAL_TERMINUS_RATIO = 0.3;
|
||||
export const GLACIAL_FJORD_ICE_MIN = 0.2;
|
||||
export const GLACIAL_POST_SMOOTH = 0.3;
|
||||
export const GLACIAL_MID_FLOOD_FRAC = 0.75;
|
||||
export const GLACIAL_MID_FLOOD_CARVE = 0.85;
|
||||
export const GLACIAL_INITIAL_CARVE = 0.5;
|
||||
|
||||
// ── Hydraulic Erosion (terrain-post.js) ──
|
||||
export const HYDRAULIC_DEPOSIT_FRAC = 0.5;
|
||||
export const HYDRAULIC_SLOPE_SENSITIVITY = 50;
|
||||
|
||||
// ── Thermal Erosion (terrain-post.js) ──
|
||||
export const THERMAL_TRANSFER_FRAC = 0.5;
|
||||
|
||||
// ── Ridge Sharpening (terrain-post.js) ──
|
||||
export const RIDGE_SHARPEN_CAP = 2.0;
|
||||
export const VALLEY_DEEPEN_FACTOR = 0.5;
|
||||
export const VALLEY_FLOOR_FRAC = 0.5;
|
||||
export const VALLEY_FLOOR_MIN = 0.001;
|
||||
|
||||
// ── Priority Flood (terrain-post.js) ──
|
||||
export const FLOOD_NOISE_AMP = 0.01;
|
||||
export const FLOOD_CARVE_RADIUS_FRAC = 0.3;
|
||||
|
||||
// ── Plate Generation ──
|
||||
export const PLATE_LOW_PLATE_T_HIGH = 80;
|
||||
export const PLATE_LOW_PLATE_T_RANGE = 60;
|
||||
export const PLATE_RATE_MIN_BASE = 0.7;
|
||||
export const PLATE_RATE_MIN_LOW_T = 0.4;
|
||||
export const PLATE_RATE_RANGE_BASE = 2.3;
|
||||
export const PLATE_RATE_RANGE_LOW_T = 2.4;
|
||||
export const PLATE_DIR_BASE_BASE = 0.15;
|
||||
export const PLATE_DIR_BASE_LOW_T = 0.25;
|
||||
export const PLATE_DIR_SCALE_BASE = 0.25;
|
||||
export const PLATE_DIR_SCALE_LOW_T = 0.25;
|
||||
export const PLATE_DIR_STRENGTH_CAP = 0.85;
|
||||
export const PLATE_COMPACT_BASE = 0.3;
|
||||
export const PLATE_COMPACT_LOW_T = 0.22;
|
||||
export const PLATE_AREA_GOVERNOR_BASE = 2.0;
|
||||
export const PLATE_AREA_GOVERNOR_LOW_T = 2.0;
|
||||
export const PLATE_COMPACT_THRESHOLD_MULT = 1.8;
|
||||
export const PLATE_COMPACT_PENALTY_MULT = 4;
|
||||
export const PLATE_OMEGA_MIN = 0.5;
|
||||
export const PLATE_OMEGA_RANGE = 1.5;
|
||||
export const PLATE_SMOOTH_BASE = 3;
|
||||
export const PLATE_SMOOTH_LOW_T = 2;
|
||||
export const PLATE_SMOOTH_FIRST_THRESH = 0.4;
|
||||
export const PLATE_SMOOTH_LATER_THRESH = 0.5;
|
||||
|
||||
// ── Coarse Projection ──
|
||||
export const N_COARSE = 20000;
|
||||
export const COARSE_JITTER = 0.75;
|
||||
export const COARSE_PERTURB_BASE = 1.5;
|
||||
export const COARSE_PERTURB_LOW_T = 1.0;
|
||||
export const COARSE_FBM_BASE_FREQ = 8;
|
||||
export const COARSE_FBM_OCTAVES = 4;
|
||||
export const COARSE_FBM_DECAY = 0.5;
|
||||
export const COARSE_FBM_FREQ_MULT = 2;
|
||||
@@ -0,0 +1,351 @@
|
||||
// Terrain generation tunable constants.
|
||||
// Grouped by subsystem for iterative tuning.
|
||||
// These are internal algorithm constants, NOT user-facing slider parameters.
|
||||
|
||||
// ── Collision & Stress ──
|
||||
export const COLLISION_THRESHOLD = 0.75;
|
||||
export const COLLISION_DT_BASE = 1e-2;
|
||||
export const COLLISION_DT_REF_REGIONS = 10000;
|
||||
export const PAIR_INTENSITY_BASE = 0.5;
|
||||
export const SUBDUCT_UNDULATION_DENSITY_DECAY = 12;
|
||||
export const SUBDUCT_UNDULATION_FREQ = 6;
|
||||
export const SUBDUCT_UNDULATION_AMP = 0.4;
|
||||
export const SUBDUCT_FACTOR_BASE = 0.5;
|
||||
export const SUBDUCT_FACTOR_TANH_SCALE = 8;
|
||||
export const SUBDUCT_THRESHOLD = 0.55;
|
||||
export const BOUNDARY_TYPE_THRESH_FACTOR = 0.3;
|
||||
|
||||
export const STRESS_PROPAGATE_MIN = 0.01;
|
||||
export const STRESS_PROPAGATE_CUTOFF = 0.005;
|
||||
export const STRESS_DIR_FACTOR_MIN = 0.1;
|
||||
export const STRESS_DIR_FACTOR_BASE = 0.3;
|
||||
export const STRESS_DIR_FACTOR_SCALE = 0.7;
|
||||
export const STRESS_DIR_BLEND_PARENT = 0.8;
|
||||
export const STRESS_DIR_BLEND_TRAVEL = 0.2;
|
||||
export const STRESS_DIR_SMOOTH_PASSES = 2;
|
||||
export const STRESS_DIR_SELF_WEIGHT = 2;
|
||||
|
||||
export const STRESS_DECAY_BASE = 0.5;
|
||||
export const STRESS_DECAY_SPREAD_FACTOR = 0.04;
|
||||
export const STRESS_SUBDUCT_DECAY_MULT = 0.45;
|
||||
export const STRESS_PASSES_PER_SPREAD = 3;
|
||||
|
||||
export const STRESS_PERCENTILE = 0.97;
|
||||
|
||||
// Blend weights for dual-layer orogeny (small plates vs super plates)
|
||||
export const SMALL_W = 0.05;
|
||||
export const SUPER_W = 0.95;
|
||||
|
||||
// ── Distance Fields & Zone Widths ──
|
||||
export const INTERIOR_BAND_BASE = 16;
|
||||
export const TECTONIC_REACH_BASE = 20;
|
||||
export const COASTAL_PLAIN_WIDTH_BASE = 18;
|
||||
export const COAST_BFS_WIDTH_BASE = 8;
|
||||
|
||||
// ── Mountain Profiles ──
|
||||
export const RIDGE_STRENGTH = 0.15;
|
||||
export const RIDGE_SIGMA_BASE = 5;
|
||||
export const RIDGE_PEAK_SHIFT_BASE = 2;
|
||||
export const RIDGE_EXTENT_BASE = 10;
|
||||
export const RIDGE_ASYM_SUBDUCT_NARROW = 0.6;
|
||||
export const RIDGE_ASYM_OVERRIDE_WIDEN = 0.5;
|
||||
export const RIDGE_STRESS_WIDTH_BASE = 0.75;
|
||||
export const RIDGE_STRESS_WIDTH_SCALE = 0.5;
|
||||
export const RIDGE_WIDTH_NOISE_AMP = 0.2;
|
||||
|
||||
export const BASE_SCALE = 0.6;
|
||||
export const ASYMMETRY_FACTOR = 0.8;
|
||||
|
||||
export const SUBDUCTING_SUPPRESSION = 0.42;
|
||||
|
||||
export const STRESS_MAG_SCALE = 0.40;
|
||||
export const STRESS_DEPRESS_FRAC = 0.4;
|
||||
export const STRESS_HEIGHT_VAR_BASE = 0.60;
|
||||
export const STRESS_HEIGHT_VAR_SCALE = 0.8;
|
||||
|
||||
export const SUBDUCTING_REACH_MIN = 0.35;
|
||||
export const SUBDUCTING_REACH_RANGE = 0.3;
|
||||
|
||||
// ── Fold Ridges ──
|
||||
export const FOLD_FREQ_PRIMARY = 160;
|
||||
export const FOLD_FREQ_SECONDARY = 400;
|
||||
export const FOLD_MEAN_OFFSET = 0.36;
|
||||
export const FOLD_PHASE_WARP_AMP = 0.08;
|
||||
export const FOLD_PHASE_WARP2_AMP = 0.12;
|
||||
export const FOLD_AMP_MOD_BASE = 0.6;
|
||||
export const FOLD_AMP_MOD_SCALE = 0.4;
|
||||
export const FOLD_AMP_MOD2_BASE = 0.5;
|
||||
export const FOLD_AMP_MOD2_SCALE = 0.5;
|
||||
export const FOLD_SECONDARY_ALONG = 0.85;
|
||||
export const FOLD_SECONDARY_CROSS = 0.15;
|
||||
export const FOLD_SECONDARY_AMP = 0.18;
|
||||
export const FOLD_NOISE_MAG_SCALE = 0.8;
|
||||
export const FOLD_ELEV_THRESHOLD = 0.05;
|
||||
export const FOLD_ELEV_SCALE = 4;
|
||||
export const FOLD_ELEV_BOOST_OFFSET = 0.03;
|
||||
export const FOLD_ELEV_BOOST_SCALE = 6;
|
||||
export const FOLD_SF_SUPPRESS = 1.5;
|
||||
export const FOLD_FREQ_MULT_SCALE = 2.0;
|
||||
|
||||
// ── Basins & Rifts ──
|
||||
export const RIFT_HALF_WIDTH_BASE = 4;
|
||||
export const RIFT_FLOOR_MULT = 1.5;
|
||||
export const RIFT_SHOULDER_MULT = 2.5;
|
||||
export const RIFT_AXIS_DEPTH = -0.18;
|
||||
export const RIFT_AXIS_VOLCANIC_AMP = 0.06;
|
||||
export const RIFT_FLOOR_DEPTH = -0.12;
|
||||
export const RIFT_FLOOR_TAPER = 0.3;
|
||||
export const RIFT_FLOOR_VOLCANIC_AMP = 0.03;
|
||||
export const RIFT_SHOULDER_UPLIFT = 0.05;
|
||||
export const RIFT_FADEOUT_RESIDUAL = 0.2;
|
||||
|
||||
export const BASIN_FREQ = 1.8;
|
||||
export const BASIN_FACTOR_BIAS = 0.5;
|
||||
export const BASIN_FACTOR_SCALE = 0.6;
|
||||
export const FORELAND_STRESS_THRESH = 0.15;
|
||||
export const FORELAND_WIDTH_FRAC = 0.3;
|
||||
export const FORELAND_BASIN_DEPTH = 0.05;
|
||||
export const FORELAND_PEAK_POS = 0.2;
|
||||
export const FORELAND_BASIN_DEEPENING_BASE = 0.5;
|
||||
export const FORELAND_BASIN_DEEPENING_SCALE = 0.5;
|
||||
|
||||
// ── Back-Arc & Foreland ──
|
||||
export const BACK_ARC_START_BASE = 2;
|
||||
export const BACK_ARC_PEAK_BASE = 3;
|
||||
export const BACK_ARC_END_BASE = 5;
|
||||
export const BACK_ARC_DEPTH = 0.14;
|
||||
export const BACK_ARC_SUBDUCT_THRESH = 0.50;
|
||||
|
||||
// ── Noise Layering ──
|
||||
export const WARP_SCALE = 0.4;
|
||||
export const OROGENIC_FREQ = 1.5;
|
||||
export const NOISE_ACTIVITY_SCALE = 4;
|
||||
export const NOISE_BASE_SCALE = 0.25;
|
||||
export const NOISE_ACTIVITY_CONTRIB = 0.75;
|
||||
export const PLATEAU_SUPPRESS_MIN = 0.30;
|
||||
export const PLATEAU_SUPPRESS_SCALE = 0.60;
|
||||
export const BASIN_AMP_SUPPRESS = 0.5;
|
||||
export const CRATON_AMP_SUPPRESS = 0.25;
|
||||
export const RIDGED_NOISE_AMP = 1.5;
|
||||
export const DETAIL_NOISE_FREQ_MULT = 4;
|
||||
export const DETAIL_NOISE_AMP = 0.5;
|
||||
export const FINE_NOISE_FREQ_MULT = 8;
|
||||
export const FINE_NOISE_AMP = 0.25;
|
||||
export const OCEAN_NOISE_AMP = 0.3;
|
||||
|
||||
// ── Dissection & Summits ──
|
||||
export const DISSECT_THRESHOLD = 0.10;
|
||||
export const DISSECT_AMP = 0.55;
|
||||
export const DISSECT_ELEV_SCALE = 2;
|
||||
export const SUMMIT_THRESHOLD = 0.55;
|
||||
export const SUMMIT_STRESS_MIN = 0.03;
|
||||
export const SUMMIT_SPIKE_OFFSET = 0.40;
|
||||
export const SUMMIT_STRESS_FLOOR = 0.25;
|
||||
|
||||
// ── Interior Elevation ──
|
||||
export const PLATE_BASE_HEIGHT_MEAN = -0.15;
|
||||
export const PLATE_BASE_HEIGHT_STDDEV = 0.025;
|
||||
export const INTERIOR_BASE_SHIELD = 0.14;
|
||||
export const INTERIOR_BASE_BASIN = 0.04;
|
||||
export const INTERIOR_TECTONIC = 0.20;
|
||||
export const COASTAL_DEPRESSION = -0.08;
|
||||
export const COASTAL_DEPRESSION_BASIN_REDUCE = 0.4;
|
||||
export const INTERIOR_UPLIFT_RAMP_FRAC = 0.4;
|
||||
export const INTERIOR_UPLIFT_MOD_AMP = 0.2;
|
||||
export const INTERIOR_FLOOR = 0.008;
|
||||
export const PLATEAU_BOOST = 0.04;
|
||||
export const PLATEAU_START_BASE = 3;
|
||||
export const MOUNTAIN_BOOST_FRAC = 0.3;
|
||||
export const FOLD_BELT_MULT = 3;
|
||||
export const CRATON_TECTONIC_MULT = 2.5;
|
||||
export const BASIN_TECTONIC_MULT = 2;
|
||||
|
||||
// ── Continental Margins ──
|
||||
export const SHELF_NARROW_BASE = 4;
|
||||
export const SHELF_WIDE_BASE = 12;
|
||||
export const SLOPE_WIDTH_BASE = 7;
|
||||
export const SHELF_DEPTH_START = -0.08;
|
||||
export const SHELF_DEPTH_RANGE = 0.08;
|
||||
export const SLOPE_DEPTH_RANGE = 0.19;
|
||||
export const ABYSS_BASE = -0.35;
|
||||
export const ABYSS_NOISE_AMP = 0.03;
|
||||
export const OCEAN_FLOOR_CLAMP = -0.005;
|
||||
|
||||
// ── Mid-Ocean Features ──
|
||||
export const RIDGE_HALF_WIDTH_BASE = 4;
|
||||
export const RIDGE_UPLIFT_NOISE = 0.12;
|
||||
export const RIDGE_UPLIFT_BASE = 0.06;
|
||||
export const FRACTURE_HALF_WIDTH_BASE = 3;
|
||||
export const FRACTURE_DEPTH = 0.03;
|
||||
export const TRENCH_BASE_DEPTH = 0.20;
|
||||
export const TRENCH_STRESS_DEPTH = 0.20;
|
||||
|
||||
// ── Coastal Roughening ──
|
||||
export const COAST_ROUGHEN_BASE = 8;
|
||||
export const COAST_PASSIVE_FREQ = 6;
|
||||
export const COAST_ACTIVE_FREQ = 9;
|
||||
export const COAST_PASSIVE_AMP = 0.08;
|
||||
export const COAST_ACTIVE_AMP = 0.12;
|
||||
export const COAST_WARP_PASSIVE_REACH = 1.2;
|
||||
export const COAST_WARP_ACTIVE_REACH = 1.5;
|
||||
export const COAST_WARP_AMT = 0.35;
|
||||
export const COAST_SUBDUCT_SUP_LOW = 0.45;
|
||||
export const COAST_SUBDUCT_SUP_RANGE = 0.55;
|
||||
|
||||
// ── Island Scattering ──
|
||||
export const ISLAND_DIST_BASE = 4;
|
||||
export const ISLAND_FREQ = 17.5;
|
||||
export const ISLAND_THRESHOLD_BASE = 0.25;
|
||||
export const ISLAND_THRESHOLD_STRESS = 0.2;
|
||||
export const ISLAND_BUMP_AMP = 0.18;
|
||||
export const ISLAND_SUBDUCT_MAX = 0.3;
|
||||
|
||||
// ── Island Arcs ──
|
||||
export const ARC_DIST_BASE = 5;
|
||||
export const ARC_PEAK_DIST_BASE = 1.5;
|
||||
export const ARC_SIGMA_BASE_VAL = 1.5;
|
||||
export const ARC_THRESHOLD = 0.30;
|
||||
export const ARC_UPLIFT_AMP = 0.55;
|
||||
export const ARC_SUBDUCT_THRESH = 0.45;
|
||||
|
||||
// ── Volcanic Features ──
|
||||
export const VOLC_MIN_SPACING = 0.015;
|
||||
export const VOLC_SIGMA_BASE = 0.003;
|
||||
export const VOLC_HEIGHT_BASE = 0.15;
|
||||
export const VOLC_HEIGHT_VAR_BASE = 0.7;
|
||||
export const VOLC_HEIGHT_VAR_RANGE = 0.6;
|
||||
export const VOLC_SIGMA_VAR_BASE = 0.6;
|
||||
export const VOLC_SIGMA_VAR_RANGE = 0.8;
|
||||
export const VOLC_SUBDUCT_THRESH = 0.45;
|
||||
|
||||
// ── Large Igneous Provinces ──
|
||||
export const LIP_SIGMA = 0.025;
|
||||
export const LIP_HEIGHT = 0.04;
|
||||
|
||||
// ── Hotspot Chains ──
|
||||
export const NUM_HOTSPOTS = 5;
|
||||
export const CHAIN_LENGTH = 6;
|
||||
export const CHAIN_DECAY = 0.75;
|
||||
export const CHAIN_SPACING = 0.06;
|
||||
export const DOME_SIGMA = 0.006;
|
||||
export const DOME_STRENGTH = 0.60;
|
||||
export const SWELL_SIGMA_MULT = 2;
|
||||
export const SWELL_STR_MULT = 0.10;
|
||||
export const DOME_OCEAN_BOOST = 1.8;
|
||||
export const DOME_PEAK_THRESH_SIGMA = 5.5;
|
||||
export const DOME_SWELL_THRESH_SIGMA = 3;
|
||||
export const DOME_DRIFT_STRETCH = 1.4;
|
||||
export const DOME_RIFT_BOOST = 0.5;
|
||||
export const DOME_CALDERA_SIGMA_FRAC = 0.25;
|
||||
export const DOME_CALDERA_DEPTH_FRAC = 0.20;
|
||||
export const DOME_CALDERA_STRENGTH_MIN = 0.15;
|
||||
export const DOME_AGE_BROADENING = 0.06;
|
||||
export const DOME_SHAPE_WARP_FREQ = 8;
|
||||
export const DOME_SHAPE_WARP_AMP = 0.4;
|
||||
export const DOME_SHAPE_WARP_DETAIL_FREQ = 20;
|
||||
export const DOME_SHAPE_WARP_DETAIL_AMP = 0.40;
|
||||
export const DOME_TEXTURE_BASE_WEIGHT = 0.7;
|
||||
export const DOME_TEXTURE_DETAIL_WEIGHT = 0.3;
|
||||
export const DOME_TEXTURE_ACTIVE_MIN = 0.4;
|
||||
export const DOME_TEXTURE_ACTIVE_MAX = 1.2;
|
||||
export const DOME_TEXTURE_AGE_MIN_SHIFT = 0.3;
|
||||
export const DOME_TEXTURE_AGE_MAX_SHIFT = 0.2;
|
||||
|
||||
// ── Hypsometry & Isostasy ──
|
||||
export const PEAK_COMPRESS_POWER = 0.90;
|
||||
export const ISOSTATIC_K = 0.07;
|
||||
export const HYPS_BLEND = 0.40;
|
||||
export const HYPS_LOW_BREAK = 0.60;
|
||||
export const HYPS_MID_BREAK = 0.85;
|
||||
export const HYPS_LOW_ELEV_FRAC = 0.25;
|
||||
export const HYPS_MID_ELEV_FRAC = 0.35;
|
||||
export const HYPS_HIGH_POWER = 0.7;
|
||||
export const FILL_LEVEL = 0.005;
|
||||
|
||||
// ── Passive Margin Coastal Plain ──
|
||||
export const PLAIN_TARGET = 0.02;
|
||||
export const PLAIN_SUPPRESSION_STRENGTH = 0.6;
|
||||
|
||||
// ── Domain Warp (terrain-post.js) ──
|
||||
export const WARP_FREQ = 4;
|
||||
export const WARP_OCTAVES = 5;
|
||||
export const WARP_MAX_AMP_MULT = 0.13;
|
||||
export const WARP_BIAS_BASE = 0.25;
|
||||
export const WARP_BIAS_STRENGTH_SCALE = 0.5;
|
||||
export const WARP_HOTSPOT_DAMPEN = 0.8;
|
||||
|
||||
// ── Smoothing (terrain-post.js) ──
|
||||
export const SMOOTH_EDGE_SENSITIVITY = 12;
|
||||
|
||||
// ── Glacial Erosion (terrain-post.js) ──
|
||||
export const GLACIAL_LAT_DIVISOR = 4.5;
|
||||
export const GLACIAL_ELEV_LOW = 0.5;
|
||||
export const GLACIAL_ELEV_HIGH = 0.9;
|
||||
export const GLACIAL_ELEV_FACTOR_SCALE = 0.3;
|
||||
export const GLACIAL_ELEV_FACTOR_LAT_BASE = 0.3;
|
||||
export const GLACIAL_ELEV_FACTOR_LAT_SCALE = 0.7;
|
||||
export const GLACIAL_CARVE_RATE = 0.02;
|
||||
export const GLACIAL_CONVERGENCE_BONUS = 0.01;
|
||||
export const GLACIAL_DEPOSIT_AMOUNT = 0.005;
|
||||
export const GLACIAL_FJORD_CARVE = 0.015;
|
||||
export const GLACIAL_FLOW_THRESHOLD = 0.1;
|
||||
export const GLACIAL_FJORD_THRESHOLD = 0.5;
|
||||
export const GLACIAL_WIDENING_FRAC = 0.4;
|
||||
export const GLACIAL_TERMINUS_RATIO = 0.3;
|
||||
export const GLACIAL_FJORD_ICE_MIN = 0.2;
|
||||
export const GLACIAL_POST_SMOOTH = 0.3;
|
||||
export const GLACIAL_MID_FLOOD_FRAC = 0.75;
|
||||
export const GLACIAL_MID_FLOOD_CARVE = 0.85;
|
||||
export const GLACIAL_INITIAL_CARVE = 0.5;
|
||||
|
||||
// ── Hydraulic Erosion (terrain-post.js) ──
|
||||
export const HYDRAULIC_DEPOSIT_FRAC = 0.5;
|
||||
export const HYDRAULIC_SLOPE_SENSITIVITY = 50;
|
||||
|
||||
// ── Thermal Erosion (terrain-post.js) ──
|
||||
export const THERMAL_TRANSFER_FRAC = 0.5;
|
||||
|
||||
// ── Ridge Sharpening (terrain-post.js) ──
|
||||
export const RIDGE_SHARPEN_CAP = 2.0;
|
||||
export const VALLEY_DEEPEN_FACTOR = 0.5;
|
||||
export const VALLEY_FLOOR_FRAC = 0.5;
|
||||
export const VALLEY_FLOOR_MIN = 0.001;
|
||||
|
||||
// ── Priority Flood (terrain-post.js) ──
|
||||
export const FLOOD_NOISE_AMP = 0.01;
|
||||
export const FLOOD_CARVE_RADIUS_FRAC = 0.3;
|
||||
|
||||
// ── Plate Generation ──
|
||||
export const PLATE_LOW_PLATE_T_HIGH = 80;
|
||||
export const PLATE_LOW_PLATE_T_RANGE = 60;
|
||||
export const PLATE_RATE_MIN_BASE = 0.7;
|
||||
export const PLATE_RATE_MIN_LOW_T = 0.4;
|
||||
export const PLATE_RATE_RANGE_BASE = 2.3;
|
||||
export const PLATE_RATE_RANGE_LOW_T = 2.4;
|
||||
export const PLATE_DIR_BASE_BASE = 0.15;
|
||||
export const PLATE_DIR_BASE_LOW_T = 0.25;
|
||||
export const PLATE_DIR_SCALE_BASE = 0.25;
|
||||
export const PLATE_DIR_SCALE_LOW_T = 0.25;
|
||||
export const PLATE_DIR_STRENGTH_CAP = 0.85;
|
||||
export const PLATE_COMPACT_BASE = 0.3;
|
||||
export const PLATE_COMPACT_LOW_T = 0.22;
|
||||
export const PLATE_AREA_GOVERNOR_BASE = 2.0;
|
||||
export const PLATE_AREA_GOVERNOR_LOW_T = 2.0;
|
||||
export const PLATE_COMPACT_THRESHOLD_MULT = 1.8;
|
||||
export const PLATE_COMPACT_PENALTY_MULT = 4;
|
||||
export const PLATE_OMEGA_MIN = 0.5;
|
||||
export const PLATE_OMEGA_RANGE = 1.5;
|
||||
export const PLATE_SMOOTH_BASE = 3;
|
||||
export const PLATE_SMOOTH_LOW_T = 2;
|
||||
export const PLATE_SMOOTH_FIRST_THRESH = 0.4;
|
||||
export const PLATE_SMOOTH_LATER_THRESH = 0.5;
|
||||
|
||||
// ── Coarse Projection ──
|
||||
export const N_COARSE = 20000;
|
||||
export const COARSE_JITTER = 0.75;
|
||||
export const COARSE_PERTURB_BASE = 1.5;
|
||||
export const COARSE_PERTURB_LOW_T = 1.0;
|
||||
export const COARSE_FBM_BASE_FREQ = 8;
|
||||
export const COARSE_FBM_OCTAVES = 4;
|
||||
export const COARSE_FBM_DECAY = 0.5;
|
||||
export const COARSE_FBM_FREQ_MULT = 2;
|
||||
@@ -0,0 +1,351 @@
|
||||
// Terrain generation tunable constants.
|
||||
// Grouped by subsystem for iterative tuning.
|
||||
// These are internal algorithm constants, NOT user-facing slider parameters.
|
||||
|
||||
// ── Collision & Stress ──
|
||||
export const COLLISION_THRESHOLD = 0.75;
|
||||
export const COLLISION_DT_BASE = 1e-2;
|
||||
export const COLLISION_DT_REF_REGIONS = 10000;
|
||||
export const PAIR_INTENSITY_BASE = 0.5;
|
||||
export const SUBDUCT_UNDULATION_DENSITY_DECAY = 12;
|
||||
export const SUBDUCT_UNDULATION_FREQ = 6;
|
||||
export const SUBDUCT_UNDULATION_AMP = 0.4;
|
||||
export const SUBDUCT_FACTOR_BASE = 0.5;
|
||||
export const SUBDUCT_FACTOR_TANH_SCALE = 8;
|
||||
export const SUBDUCT_THRESHOLD = 0.55;
|
||||
export const BOUNDARY_TYPE_THRESH_FACTOR = 0.3;
|
||||
|
||||
export const STRESS_PROPAGATE_MIN = 0.01;
|
||||
export const STRESS_PROPAGATE_CUTOFF = 0.005;
|
||||
export const STRESS_DIR_FACTOR_MIN = 0.1;
|
||||
export const STRESS_DIR_FACTOR_BASE = 0.3;
|
||||
export const STRESS_DIR_FACTOR_SCALE = 0.7;
|
||||
export const STRESS_DIR_BLEND_PARENT = 0.8;
|
||||
export const STRESS_DIR_BLEND_TRAVEL = 0.2;
|
||||
export const STRESS_DIR_SMOOTH_PASSES = 2;
|
||||
export const STRESS_DIR_SELF_WEIGHT = 2;
|
||||
|
||||
export const STRESS_DECAY_BASE = 0.5;
|
||||
export const STRESS_DECAY_SPREAD_FACTOR = 0.04;
|
||||
export const STRESS_SUBDUCT_DECAY_MULT = 0.45;
|
||||
export const STRESS_PASSES_PER_SPREAD = 3;
|
||||
|
||||
export const STRESS_PERCENTILE = 0.97;
|
||||
|
||||
// Blend weights for dual-layer orogeny (small plates vs super plates)
|
||||
export const SMALL_W = 0.05;
|
||||
export const SUPER_W = 0.95;
|
||||
|
||||
// ── Distance Fields & Zone Widths ──
|
||||
export const INTERIOR_BAND_BASE = 16;
|
||||
export const TECTONIC_REACH_BASE = 20;
|
||||
export const COASTAL_PLAIN_WIDTH_BASE = 18;
|
||||
export const COAST_BFS_WIDTH_BASE = 8;
|
||||
|
||||
// ── Mountain Profiles ──
|
||||
export const RIDGE_STRENGTH = 0.15;
|
||||
export const RIDGE_SIGMA_BASE = 5;
|
||||
export const RIDGE_PEAK_SHIFT_BASE = 2;
|
||||
export const RIDGE_EXTENT_BASE = 10;
|
||||
export const RIDGE_ASYM_SUBDUCT_NARROW = 0.6;
|
||||
export const RIDGE_ASYM_OVERRIDE_WIDEN = 0.5;
|
||||
export const RIDGE_STRESS_WIDTH_BASE = 0.75;
|
||||
export const RIDGE_STRESS_WIDTH_SCALE = 0.5;
|
||||
export const RIDGE_WIDTH_NOISE_AMP = 0.2;
|
||||
|
||||
export const BASE_SCALE = 0.6;
|
||||
export const ASYMMETRY_FACTOR = 0.8;
|
||||
|
||||
export const SUBDUCTING_SUPPRESSION = 0.42;
|
||||
|
||||
export const STRESS_MAG_SCALE = 0.40;
|
||||
export const STRESS_DEPRESS_FRAC = 0.4;
|
||||
export const STRESS_HEIGHT_VAR_BASE = 0.60;
|
||||
export const STRESS_HEIGHT_VAR_SCALE = 0.8;
|
||||
|
||||
export const SUBDUCTING_REACH_MIN = 0.35;
|
||||
export const SUBDUCTING_REACH_RANGE = 0.3;
|
||||
|
||||
// ── Fold Ridges ──
|
||||
export const FOLD_FREQ_PRIMARY = 160;
|
||||
export const FOLD_FREQ_SECONDARY = 400;
|
||||
export const FOLD_MEAN_OFFSET = 0.36;
|
||||
export const FOLD_PHASE_WARP_AMP = 0.08;
|
||||
export const FOLD_PHASE_WARP2_AMP = 0.12;
|
||||
export const FOLD_AMP_MOD_BASE = 0.6;
|
||||
export const FOLD_AMP_MOD_SCALE = 0.4;
|
||||
export const FOLD_AMP_MOD2_BASE = 0.5;
|
||||
export const FOLD_AMP_MOD2_SCALE = 0.5;
|
||||
export const FOLD_SECONDARY_ALONG = 0.85;
|
||||
export const FOLD_SECONDARY_CROSS = 0.15;
|
||||
export const FOLD_SECONDARY_AMP = 0.18;
|
||||
export const FOLD_NOISE_MAG_SCALE = 0.8;
|
||||
export const FOLD_ELEV_THRESHOLD = 0.05;
|
||||
export const FOLD_ELEV_SCALE = 4;
|
||||
export const FOLD_ELEV_BOOST_OFFSET = 0.03;
|
||||
export const FOLD_ELEV_BOOST_SCALE = 6;
|
||||
export const FOLD_SF_SUPPRESS = 1.5;
|
||||
export const FOLD_FREQ_MULT_SCALE = 2.0;
|
||||
|
||||
// ── Basins & Rifts ──
|
||||
export const RIFT_HALF_WIDTH_BASE = 4;
|
||||
export const RIFT_FLOOR_MULT = 1.5;
|
||||
export const RIFT_SHOULDER_MULT = 2.5;
|
||||
export const RIFT_AXIS_DEPTH = -0.18;
|
||||
export const RIFT_AXIS_VOLCANIC_AMP = 0.06;
|
||||
export const RIFT_FLOOR_DEPTH = -0.12;
|
||||
export const RIFT_FLOOR_TAPER = 0.3;
|
||||
export const RIFT_FLOOR_VOLCANIC_AMP = 0.03;
|
||||
export const RIFT_SHOULDER_UPLIFT = 0.05;
|
||||
export const RIFT_FADEOUT_RESIDUAL = 0.2;
|
||||
|
||||
export const BASIN_FREQ = 1.8;
|
||||
export const BASIN_FACTOR_BIAS = 0.5;
|
||||
export const BASIN_FACTOR_SCALE = 0.6;
|
||||
export const FORELAND_STRESS_THRESH = 0.15;
|
||||
export const FORELAND_WIDTH_FRAC = 0.3;
|
||||
export const FORELAND_BASIN_DEPTH = 0.05;
|
||||
export const FORELAND_PEAK_POS = 0.2;
|
||||
export const FORELAND_BASIN_DEEPENING_BASE = 0.5;
|
||||
export const FORELAND_BASIN_DEEPENING_SCALE = 0.5;
|
||||
|
||||
// ── Back-Arc & Foreland ──
|
||||
export const BACK_ARC_START_BASE = 2;
|
||||
export const BACK_ARC_PEAK_BASE = 3;
|
||||
export const BACK_ARC_END_BASE = 5;
|
||||
export const BACK_ARC_DEPTH = 0.14;
|
||||
export const BACK_ARC_SUBDUCT_THRESH = 0.50;
|
||||
|
||||
// ── Noise Layering ──
|
||||
export const WARP_SCALE = 0.4;
|
||||
export const OROGENIC_FREQ = 1.5;
|
||||
export const NOISE_ACTIVITY_SCALE = 4;
|
||||
export const NOISE_BASE_SCALE = 0.25;
|
||||
export const NOISE_ACTIVITY_CONTRIB = 0.75;
|
||||
export const PLATEAU_SUPPRESS_MIN = 0.30;
|
||||
export const PLATEAU_SUPPRESS_SCALE = 0.60;
|
||||
export const BASIN_AMP_SUPPRESS = 0.5;
|
||||
export const CRATON_AMP_SUPPRESS = 0.25;
|
||||
export const RIDGED_NOISE_AMP = 1.5;
|
||||
export const DETAIL_NOISE_FREQ_MULT = 4;
|
||||
export const DETAIL_NOISE_AMP = 0.5;
|
||||
export const FINE_NOISE_FREQ_MULT = 8;
|
||||
export const FINE_NOISE_AMP = 0.25;
|
||||
export const OCEAN_NOISE_AMP = 0.3;
|
||||
|
||||
// ── Dissection & Summits ──
|
||||
export const DISSECT_THRESHOLD = 0.10;
|
||||
export const DISSECT_AMP = 0.55;
|
||||
export const DISSECT_ELEV_SCALE = 2;
|
||||
export const SUMMIT_THRESHOLD = 0.55;
|
||||
export const SUMMIT_STRESS_MIN = 0.03;
|
||||
export const SUMMIT_SPIKE_OFFSET = 0.40;
|
||||
export const SUMMIT_STRESS_FLOOR = 0.25;
|
||||
|
||||
// ── Interior Elevation ──
|
||||
export const PLATE_BASE_HEIGHT_MEAN = -0.15;
|
||||
export const PLATE_BASE_HEIGHT_STDDEV = 0.025;
|
||||
export const INTERIOR_BASE_SHIELD = 0.14;
|
||||
export const INTERIOR_BASE_BASIN = 0.04;
|
||||
export const INTERIOR_TECTONIC = 0.20;
|
||||
export const COASTAL_DEPRESSION = -0.08;
|
||||
export const COASTAL_DEPRESSION_BASIN_REDUCE = 0.4;
|
||||
export const INTERIOR_UPLIFT_RAMP_FRAC = 0.4;
|
||||
export const INTERIOR_UPLIFT_MOD_AMP = 0.2;
|
||||
export const INTERIOR_FLOOR = 0.008;
|
||||
export const PLATEAU_BOOST = 0.04;
|
||||
export const PLATEAU_START_BASE = 3;
|
||||
export const MOUNTAIN_BOOST_FRAC = 0.3;
|
||||
export const FOLD_BELT_MULT = 3;
|
||||
export const CRATON_TECTONIC_MULT = 2.5;
|
||||
export const BASIN_TECTONIC_MULT = 2;
|
||||
|
||||
// ── Continental Margins ──
|
||||
export const SHELF_NARROW_BASE = 4;
|
||||
export const SHELF_WIDE_BASE = 12;
|
||||
export const SLOPE_WIDTH_BASE = 7;
|
||||
export const SHELF_DEPTH_START = -0.08;
|
||||
export const SHELF_DEPTH_RANGE = 0.08;
|
||||
export const SLOPE_DEPTH_RANGE = 0.19;
|
||||
export const ABYSS_BASE = -0.35;
|
||||
export const ABYSS_NOISE_AMP = 0.03;
|
||||
export const OCEAN_FLOOR_CLAMP = -0.005;
|
||||
|
||||
// ── Mid-Ocean Features ──
|
||||
export const RIDGE_HALF_WIDTH_BASE = 4;
|
||||
export const RIDGE_UPLIFT_NOISE = 0.12;
|
||||
export const RIDGE_UPLIFT_BASE = 0.06;
|
||||
export const FRACTURE_HALF_WIDTH_BASE = 3;
|
||||
export const FRACTURE_DEPTH = 0.03;
|
||||
export const TRENCH_BASE_DEPTH = 0.20;
|
||||
export const TRENCH_STRESS_DEPTH = 0.20;
|
||||
|
||||
// ── Coastal Roughening ──
|
||||
export const COAST_ROUGHEN_BASE = 8;
|
||||
export const COAST_PASSIVE_FREQ = 6;
|
||||
export const COAST_ACTIVE_FREQ = 9;
|
||||
export const COAST_PASSIVE_AMP = 0.08;
|
||||
export const COAST_ACTIVE_AMP = 0.12;
|
||||
export const COAST_WARP_PASSIVE_REACH = 1.2;
|
||||
export const COAST_WARP_ACTIVE_REACH = 1.5;
|
||||
export const COAST_WARP_AMT = 0.35;
|
||||
export const COAST_SUBDUCT_SUP_LOW = 0.45;
|
||||
export const COAST_SUBDUCT_SUP_RANGE = 0.55;
|
||||
|
||||
// ── Island Scattering ──
|
||||
export const ISLAND_DIST_BASE = 4;
|
||||
export const ISLAND_FREQ = 17.5;
|
||||
export const ISLAND_THRESHOLD_BASE = 0.25;
|
||||
export const ISLAND_THRESHOLD_STRESS = 0.2;
|
||||
export const ISLAND_BUMP_AMP = 0.18;
|
||||
export const ISLAND_SUBDUCT_MAX = 0.3;
|
||||
|
||||
// ── Island Arcs ──
|
||||
export const ARC_DIST_BASE = 5;
|
||||
export const ARC_PEAK_DIST_BASE = 1.5;
|
||||
export const ARC_SIGMA_BASE_VAL = 1.5;
|
||||
export const ARC_THRESHOLD = 0.30;
|
||||
export const ARC_UPLIFT_AMP = 0.55;
|
||||
export const ARC_SUBDUCT_THRESH = 0.45;
|
||||
|
||||
// ── Volcanic Features ──
|
||||
export const VOLC_MIN_SPACING = 0.015;
|
||||
export const VOLC_SIGMA_BASE = 0.003;
|
||||
export const VOLC_HEIGHT_BASE = 0.15;
|
||||
export const VOLC_HEIGHT_VAR_BASE = 0.7;
|
||||
export const VOLC_HEIGHT_VAR_RANGE = 0.6;
|
||||
export const VOLC_SIGMA_VAR_BASE = 0.6;
|
||||
export const VOLC_SIGMA_VAR_RANGE = 0.8;
|
||||
export const VOLC_SUBDUCT_THRESH = 0.45;
|
||||
|
||||
// ── Large Igneous Provinces ──
|
||||
export const LIP_SIGMA = 0.025;
|
||||
export const LIP_HEIGHT = 0.04;
|
||||
|
||||
// ── Hotspot Chains ──
|
||||
export const NUM_HOTSPOTS = 5;
|
||||
export const CHAIN_LENGTH = 6;
|
||||
export const CHAIN_DECAY = 0.75;
|
||||
export const CHAIN_SPACING = 0.06;
|
||||
export const DOME_SIGMA = 0.006;
|
||||
export const DOME_STRENGTH = 0.60;
|
||||
export const SWELL_SIGMA_MULT = 2;
|
||||
export const SWELL_STR_MULT = 0.10;
|
||||
export const DOME_OCEAN_BOOST = 1.8;
|
||||
export const DOME_PEAK_THRESH_SIGMA = 5.5;
|
||||
export const DOME_SWELL_THRESH_SIGMA = 3;
|
||||
export const DOME_DRIFT_STRETCH = 1.4;
|
||||
export const DOME_RIFT_BOOST = 0.5;
|
||||
export const DOME_CALDERA_SIGMA_FRAC = 0.25;
|
||||
export const DOME_CALDERA_DEPTH_FRAC = 0.20;
|
||||
export const DOME_CALDERA_STRENGTH_MIN = 0.15;
|
||||
export const DOME_AGE_BROADENING = 0.06;
|
||||
export const DOME_SHAPE_WARP_FREQ = 8;
|
||||
export const DOME_SHAPE_WARP_AMP = 0.4;
|
||||
export const DOME_SHAPE_WARP_DETAIL_FREQ = 20;
|
||||
export const DOME_SHAPE_WARP_DETAIL_AMP = 0.40;
|
||||
export const DOME_TEXTURE_BASE_WEIGHT = 0.7;
|
||||
export const DOME_TEXTURE_DETAIL_WEIGHT = 0.3;
|
||||
export const DOME_TEXTURE_ACTIVE_MIN = 0.4;
|
||||
export const DOME_TEXTURE_ACTIVE_MAX = 1.2;
|
||||
export const DOME_TEXTURE_AGE_MIN_SHIFT = 0.3;
|
||||
export const DOME_TEXTURE_AGE_MAX_SHIFT = 0.2;
|
||||
|
||||
// ── Hypsometry & Isostasy ──
|
||||
export const PEAK_COMPRESS_POWER = 0.90;
|
||||
export const ISOSTATIC_K = 0.07;
|
||||
export const HYPS_BLEND = 0.40;
|
||||
export const HYPS_LOW_BREAK = 0.60;
|
||||
export const HYPS_MID_BREAK = 0.85;
|
||||
export const HYPS_LOW_ELEV_FRAC = 0.25;
|
||||
export const HYPS_MID_ELEV_FRAC = 0.35;
|
||||
export const HYPS_HIGH_POWER = 0.7;
|
||||
export const FILL_LEVEL = 0.005;
|
||||
|
||||
// ── Passive Margin Coastal Plain ──
|
||||
export const PLAIN_TARGET = 0.02;
|
||||
export const PLAIN_SUPPRESSION_STRENGTH = 0.6;
|
||||
|
||||
// ── Domain Warp (terrain-post.js) ──
|
||||
export const WARP_FREQ = 4;
|
||||
export const WARP_OCTAVES = 5;
|
||||
export const WARP_MAX_AMP_MULT = 0.13;
|
||||
export const WARP_BIAS_BASE = 0.25;
|
||||
export const WARP_BIAS_STRENGTH_SCALE = 0.5;
|
||||
export const WARP_HOTSPOT_DAMPEN = 0.8;
|
||||
|
||||
// ── Smoothing (terrain-post.js) ──
|
||||
export const SMOOTH_EDGE_SENSITIVITY = 12;
|
||||
|
||||
// ── Glacial Erosion (terrain-post.js) ──
|
||||
export const GLACIAL_LAT_DIVISOR = 4.5;
|
||||
export const GLACIAL_ELEV_LOW = 0.5;
|
||||
export const GLACIAL_ELEV_HIGH = 0.9;
|
||||
export const GLACIAL_ELEV_FACTOR_SCALE = 0.3;
|
||||
export const GLACIAL_ELEV_FACTOR_LAT_BASE = 0.3;
|
||||
export const GLACIAL_ELEV_FACTOR_LAT_SCALE = 0.7;
|
||||
export const GLACIAL_CARVE_RATE = 0.025;
|
||||
export const GLACIAL_CONVERGENCE_BONUS = 0.015;
|
||||
export const GLACIAL_DEPOSIT_AMOUNT = 0.007;
|
||||
export const GLACIAL_FJORD_CARVE = 0.020;
|
||||
export const GLACIAL_FLOW_THRESHOLD = 0.1;
|
||||
export const GLACIAL_FJORD_THRESHOLD = 0.5;
|
||||
export const GLACIAL_WIDENING_FRAC = 0.4;
|
||||
export const GLACIAL_TERMINUS_RATIO = 0.3;
|
||||
export const GLACIAL_FJORD_ICE_MIN = 0.2;
|
||||
export const GLACIAL_POST_SMOOTH = 0.3;
|
||||
export const GLACIAL_MID_FLOOD_FRAC = 0.75;
|
||||
export const GLACIAL_MID_FLOOD_CARVE = 0.85;
|
||||
export const GLACIAL_INITIAL_CARVE = 0.5;
|
||||
|
||||
// ── Hydraulic Erosion (terrain-post.js) ──
|
||||
export const HYDRAULIC_DEPOSIT_FRAC = 0.5;
|
||||
export const HYDRAULIC_SLOPE_SENSITIVITY = 50;
|
||||
|
||||
// ── Thermal Erosion (terrain-post.js) ──
|
||||
export const THERMAL_TRANSFER_FRAC = 0.5;
|
||||
|
||||
// ── Ridge Sharpening (terrain-post.js) ──
|
||||
export const RIDGE_SHARPEN_CAP = 2.0;
|
||||
export const VALLEY_DEEPEN_FACTOR = 0.5;
|
||||
export const VALLEY_FLOOR_FRAC = 0.5;
|
||||
export const VALLEY_FLOOR_MIN = 0.001;
|
||||
|
||||
// ── Priority Flood (terrain-post.js) ──
|
||||
export const FLOOD_NOISE_AMP = 0.01;
|
||||
export const FLOOD_CARVE_RADIUS_FRAC = 0.3;
|
||||
|
||||
// ── Plate Generation ──
|
||||
export const PLATE_LOW_PLATE_T_HIGH = 80;
|
||||
export const PLATE_LOW_PLATE_T_RANGE = 60;
|
||||
export const PLATE_RATE_MIN_BASE = 0.7;
|
||||
export const PLATE_RATE_MIN_LOW_T = 0.4;
|
||||
export const PLATE_RATE_RANGE_BASE = 2.3;
|
||||
export const PLATE_RATE_RANGE_LOW_T = 2.4;
|
||||
export const PLATE_DIR_BASE_BASE = 0.15;
|
||||
export const PLATE_DIR_BASE_LOW_T = 0.25;
|
||||
export const PLATE_DIR_SCALE_BASE = 0.25;
|
||||
export const PLATE_DIR_SCALE_LOW_T = 0.25;
|
||||
export const PLATE_DIR_STRENGTH_CAP = 0.85;
|
||||
export const PLATE_COMPACT_BASE = 0.3;
|
||||
export const PLATE_COMPACT_LOW_T = 0.22;
|
||||
export const PLATE_AREA_GOVERNOR_BASE = 2.0;
|
||||
export const PLATE_AREA_GOVERNOR_LOW_T = 2.0;
|
||||
export const PLATE_COMPACT_THRESHOLD_MULT = 1.8;
|
||||
export const PLATE_COMPACT_PENALTY_MULT = 4;
|
||||
export const PLATE_OMEGA_MIN = 0.5;
|
||||
export const PLATE_OMEGA_RANGE = 1.5;
|
||||
export const PLATE_SMOOTH_BASE = 3;
|
||||
export const PLATE_SMOOTH_LOW_T = 2;
|
||||
export const PLATE_SMOOTH_FIRST_THRESH = 0.4;
|
||||
export const PLATE_SMOOTH_LATER_THRESH = 0.5;
|
||||
|
||||
// ── Coarse Projection ──
|
||||
export const N_COARSE = 20000;
|
||||
export const COARSE_JITTER = 0.75;
|
||||
export const COARSE_PERTURB_BASE = 1.5;
|
||||
export const COARSE_PERTURB_LOW_T = 1.0;
|
||||
export const COARSE_FBM_BASE_FREQ = 8;
|
||||
export const COARSE_FBM_OCTAVES = 4;
|
||||
export const COARSE_FBM_DECAY = 0.5;
|
||||
export const COARSE_FBM_FREQ_MULT = 2;
|
||||
@@ -0,0 +1,351 @@
|
||||
// Terrain generation tunable constants.
|
||||
// Grouped by subsystem for iterative tuning.
|
||||
// These are internal algorithm constants, NOT user-facing slider parameters.
|
||||
|
||||
// ── Collision & Stress ──
|
||||
export const COLLISION_THRESHOLD = 0.75;
|
||||
export const COLLISION_DT_BASE = 1e-2;
|
||||
export const COLLISION_DT_REF_REGIONS = 10000;
|
||||
export const PAIR_INTENSITY_BASE = 0.5;
|
||||
export const SUBDUCT_UNDULATION_DENSITY_DECAY = 12;
|
||||
export const SUBDUCT_UNDULATION_FREQ = 6;
|
||||
export const SUBDUCT_UNDULATION_AMP = 0.4;
|
||||
export const SUBDUCT_FACTOR_BASE = 0.5;
|
||||
export const SUBDUCT_FACTOR_TANH_SCALE = 8;
|
||||
export const SUBDUCT_THRESHOLD = 0.55;
|
||||
export const BOUNDARY_TYPE_THRESH_FACTOR = 0.3;
|
||||
|
||||
export const STRESS_PROPAGATE_MIN = 0.01;
|
||||
export const STRESS_PROPAGATE_CUTOFF = 0.005;
|
||||
export const STRESS_DIR_FACTOR_MIN = 0.1;
|
||||
export const STRESS_DIR_FACTOR_BASE = 0.3;
|
||||
export const STRESS_DIR_FACTOR_SCALE = 0.7;
|
||||
export const STRESS_DIR_BLEND_PARENT = 0.8;
|
||||
export const STRESS_DIR_BLEND_TRAVEL = 0.2;
|
||||
export const STRESS_DIR_SMOOTH_PASSES = 2;
|
||||
export const STRESS_DIR_SELF_WEIGHT = 2;
|
||||
|
||||
export const STRESS_DECAY_BASE = 0.5;
|
||||
export const STRESS_DECAY_SPREAD_FACTOR = 0.04;
|
||||
export const STRESS_SUBDUCT_DECAY_MULT = 0.45;
|
||||
export const STRESS_PASSES_PER_SPREAD = 3;
|
||||
|
||||
export const STRESS_PERCENTILE = 0.97;
|
||||
|
||||
// Blend weights for dual-layer orogeny (small plates vs super plates)
|
||||
export const SMALL_W = 0.05;
|
||||
export const SUPER_W = 0.95;
|
||||
|
||||
// ── Distance Fields & Zone Widths ──
|
||||
export const INTERIOR_BAND_BASE = 16;
|
||||
export const TECTONIC_REACH_BASE = 20;
|
||||
export const COASTAL_PLAIN_WIDTH_BASE = 18;
|
||||
export const COAST_BFS_WIDTH_BASE = 8;
|
||||
|
||||
// ── Mountain Profiles ──
|
||||
export const RIDGE_STRENGTH = 0.15;
|
||||
export const RIDGE_SIGMA_BASE = 5;
|
||||
export const RIDGE_PEAK_SHIFT_BASE = 2;
|
||||
export const RIDGE_EXTENT_BASE = 10;
|
||||
export const RIDGE_ASYM_SUBDUCT_NARROW = 0.6;
|
||||
export const RIDGE_ASYM_OVERRIDE_WIDEN = 0.5;
|
||||
export const RIDGE_STRESS_WIDTH_BASE = 0.75;
|
||||
export const RIDGE_STRESS_WIDTH_SCALE = 0.5;
|
||||
export const RIDGE_WIDTH_NOISE_AMP = 0.2;
|
||||
|
||||
export const BASE_SCALE = 0.6;
|
||||
export const ASYMMETRY_FACTOR = 0.8;
|
||||
|
||||
export const SUBDUCTING_SUPPRESSION = 0.42;
|
||||
|
||||
export const STRESS_MAG_SCALE = 0.40;
|
||||
export const STRESS_DEPRESS_FRAC = 0.4;
|
||||
export const STRESS_HEIGHT_VAR_BASE = 0.60;
|
||||
export const STRESS_HEIGHT_VAR_SCALE = 0.8;
|
||||
|
||||
export const SUBDUCTING_REACH_MIN = 0.35;
|
||||
export const SUBDUCTING_REACH_RANGE = 0.3;
|
||||
|
||||
// ── Fold Ridges ──
|
||||
export const FOLD_FREQ_PRIMARY = 160;
|
||||
export const FOLD_FREQ_SECONDARY = 400;
|
||||
export const FOLD_MEAN_OFFSET = 0.36;
|
||||
export const FOLD_PHASE_WARP_AMP = 0.08;
|
||||
export const FOLD_PHASE_WARP2_AMP = 0.12;
|
||||
export const FOLD_AMP_MOD_BASE = 0.6;
|
||||
export const FOLD_AMP_MOD_SCALE = 0.4;
|
||||
export const FOLD_AMP_MOD2_BASE = 0.5;
|
||||
export const FOLD_AMP_MOD2_SCALE = 0.5;
|
||||
export const FOLD_SECONDARY_ALONG = 0.85;
|
||||
export const FOLD_SECONDARY_CROSS = 0.15;
|
||||
export const FOLD_SECONDARY_AMP = 0.18;
|
||||
export const FOLD_NOISE_MAG_SCALE = 0.8;
|
||||
export const FOLD_ELEV_THRESHOLD = 0.05;
|
||||
export const FOLD_ELEV_SCALE = 4;
|
||||
export const FOLD_ELEV_BOOST_OFFSET = 0.03;
|
||||
export const FOLD_ELEV_BOOST_SCALE = 6;
|
||||
export const FOLD_SF_SUPPRESS = 1.5;
|
||||
export const FOLD_FREQ_MULT_SCALE = 1.5;
|
||||
|
||||
// ── Basins & Rifts ──
|
||||
export const RIFT_HALF_WIDTH_BASE = 4;
|
||||
export const RIFT_FLOOR_MULT = 1.5;
|
||||
export const RIFT_SHOULDER_MULT = 2.5;
|
||||
export const RIFT_AXIS_DEPTH = -0.15;
|
||||
export const RIFT_AXIS_VOLCANIC_AMP = 0.04;
|
||||
export const RIFT_FLOOR_DEPTH = -0.12;
|
||||
export const RIFT_FLOOR_TAPER = 0.3;
|
||||
export const RIFT_FLOOR_VOLCANIC_AMP = 0.03;
|
||||
export const RIFT_SHOULDER_UPLIFT = 0.03;
|
||||
export const RIFT_FADEOUT_RESIDUAL = 0.2;
|
||||
|
||||
export const BASIN_FREQ = 1.8;
|
||||
export const BASIN_FACTOR_BIAS = 0.5;
|
||||
export const BASIN_FACTOR_SCALE = 0.6;
|
||||
export const FORELAND_STRESS_THRESH = 0.15;
|
||||
export const FORELAND_WIDTH_FRAC = 0.3;
|
||||
export const FORELAND_BASIN_DEPTH = 0.05;
|
||||
export const FORELAND_PEAK_POS = 0.2;
|
||||
export const FORELAND_BASIN_DEEPENING_BASE = 0.5;
|
||||
export const FORELAND_BASIN_DEEPENING_SCALE = 0.5;
|
||||
|
||||
// ── Back-Arc & Foreland ──
|
||||
export const BACK_ARC_START_BASE = 2;
|
||||
export const BACK_ARC_PEAK_BASE = 3;
|
||||
export const BACK_ARC_END_BASE = 5;
|
||||
export const BACK_ARC_DEPTH = 0.10;
|
||||
export const BACK_ARC_SUBDUCT_THRESH = 0.50;
|
||||
|
||||
// ── Noise Layering ──
|
||||
export const WARP_SCALE = 0.4;
|
||||
export const OROGENIC_FREQ = 1.5;
|
||||
export const NOISE_ACTIVITY_SCALE = 4;
|
||||
export const NOISE_BASE_SCALE = 0.25;
|
||||
export const NOISE_ACTIVITY_CONTRIB = 0.75;
|
||||
export const PLATEAU_SUPPRESS_MIN = 0.30;
|
||||
export const PLATEAU_SUPPRESS_SCALE = 0.60;
|
||||
export const BASIN_AMP_SUPPRESS = 0.7;
|
||||
export const CRATON_AMP_SUPPRESS = 0.4;
|
||||
export const RIDGED_NOISE_AMP = 1.5;
|
||||
export const DETAIL_NOISE_FREQ_MULT = 4;
|
||||
export const DETAIL_NOISE_AMP = 0.5;
|
||||
export const FINE_NOISE_FREQ_MULT = 8;
|
||||
export const FINE_NOISE_AMP = 0.25;
|
||||
export const OCEAN_NOISE_AMP = 0.3;
|
||||
|
||||
// ── Dissection & Summits ──
|
||||
export const DISSECT_THRESHOLD = 0.10;
|
||||
export const DISSECT_AMP = 0.55;
|
||||
export const DISSECT_ELEV_SCALE = 2;
|
||||
export const SUMMIT_THRESHOLD = 0.65;
|
||||
export const SUMMIT_STRESS_MIN = 0.05;
|
||||
export const SUMMIT_SPIKE_OFFSET = 0.45;
|
||||
export const SUMMIT_STRESS_FLOOR = 0.3;
|
||||
|
||||
// ── Interior Elevation ──
|
||||
export const PLATE_BASE_HEIGHT_MEAN = -0.15;
|
||||
export const PLATE_BASE_HEIGHT_STDDEV = 0.025;
|
||||
export const INTERIOR_BASE_SHIELD = 0.10;
|
||||
export const INTERIOR_BASE_BASIN = 0.06;
|
||||
export const INTERIOR_TECTONIC = 0.16;
|
||||
export const COASTAL_DEPRESSION = -0.08;
|
||||
export const COASTAL_DEPRESSION_BASIN_REDUCE = 0.4;
|
||||
export const INTERIOR_UPLIFT_RAMP_FRAC = 0.4;
|
||||
export const INTERIOR_UPLIFT_MOD_AMP = 0.2;
|
||||
export const INTERIOR_FLOOR = 0.008;
|
||||
export const PLATEAU_BOOST = 0.025;
|
||||
export const PLATEAU_START_BASE = 3;
|
||||
export const MOUNTAIN_BOOST_FRAC = 0.3;
|
||||
export const FOLD_BELT_MULT = 3;
|
||||
export const CRATON_TECTONIC_MULT = 2.5;
|
||||
export const BASIN_TECTONIC_MULT = 2;
|
||||
|
||||
// ── Continental Margins ──
|
||||
export const SHELF_NARROW_BASE = 4;
|
||||
export const SHELF_WIDE_BASE = 12;
|
||||
export const SLOPE_WIDTH_BASE = 7;
|
||||
export const SHELF_DEPTH_START = -0.08;
|
||||
export const SHELF_DEPTH_RANGE = 0.08;
|
||||
export const SLOPE_DEPTH_RANGE = 0.19;
|
||||
export const ABYSS_BASE = -0.35;
|
||||
export const ABYSS_NOISE_AMP = 0.03;
|
||||
export const OCEAN_FLOOR_CLAMP = -0.005;
|
||||
|
||||
// ── Mid-Ocean Features ──
|
||||
export const RIDGE_HALF_WIDTH_BASE = 4;
|
||||
export const RIDGE_UPLIFT_NOISE = 0.12;
|
||||
export const RIDGE_UPLIFT_BASE = 0.06;
|
||||
export const FRACTURE_HALF_WIDTH_BASE = 3;
|
||||
export const FRACTURE_DEPTH = 0.03;
|
||||
export const TRENCH_BASE_DEPTH = 0.15;
|
||||
export const TRENCH_STRESS_DEPTH = 0.15;
|
||||
|
||||
// ── Coastal Roughening ──
|
||||
export const COAST_ROUGHEN_BASE = 8;
|
||||
export const COAST_PASSIVE_FREQ = 6;
|
||||
export const COAST_ACTIVE_FREQ = 9;
|
||||
export const COAST_PASSIVE_AMP = 0.08;
|
||||
export const COAST_ACTIVE_AMP = 0.12;
|
||||
export const COAST_WARP_PASSIVE_REACH = 1.2;
|
||||
export const COAST_WARP_ACTIVE_REACH = 1.5;
|
||||
export const COAST_WARP_AMT = 0.35;
|
||||
export const COAST_SUBDUCT_SUP_LOW = 0.45;
|
||||
export const COAST_SUBDUCT_SUP_RANGE = 0.55;
|
||||
|
||||
// ── Island Scattering ──
|
||||
export const ISLAND_DIST_BASE = 4;
|
||||
export const ISLAND_FREQ = 17.5;
|
||||
export const ISLAND_THRESHOLD_BASE = 0.25;
|
||||
export const ISLAND_THRESHOLD_STRESS = 0.2;
|
||||
export const ISLAND_BUMP_AMP = 0.18;
|
||||
export const ISLAND_SUBDUCT_MAX = 0.3;
|
||||
|
||||
// ── Island Arcs ──
|
||||
export const ARC_DIST_BASE = 5;
|
||||
export const ARC_PEAK_DIST_BASE = 1.5;
|
||||
export const ARC_SIGMA_BASE_VAL = 1.5;
|
||||
export const ARC_THRESHOLD = 0.30;
|
||||
export const ARC_UPLIFT_AMP = 0.55;
|
||||
export const ARC_SUBDUCT_THRESH = 0.45;
|
||||
|
||||
// ── Volcanic Features ──
|
||||
export const VOLC_MIN_SPACING = 0.015;
|
||||
export const VOLC_SIGMA_BASE = 0.003;
|
||||
export const VOLC_HEIGHT_BASE = 0.15;
|
||||
export const VOLC_HEIGHT_VAR_BASE = 0.7;
|
||||
export const VOLC_HEIGHT_VAR_RANGE = 0.6;
|
||||
export const VOLC_SIGMA_VAR_BASE = 0.6;
|
||||
export const VOLC_SIGMA_VAR_RANGE = 0.8;
|
||||
export const VOLC_SUBDUCT_THRESH = 0.45;
|
||||
|
||||
// ── Large Igneous Provinces ──
|
||||
export const LIP_SIGMA = 0.025;
|
||||
export const LIP_HEIGHT = 0.04;
|
||||
|
||||
// ── Hotspot Chains ──
|
||||
export const NUM_HOTSPOTS = 5;
|
||||
export const CHAIN_LENGTH = 6;
|
||||
export const CHAIN_DECAY = 0.75;
|
||||
export const CHAIN_SPACING = 0.06;
|
||||
export const DOME_SIGMA = 0.006;
|
||||
export const DOME_STRENGTH = 0.60;
|
||||
export const SWELL_SIGMA_MULT = 2;
|
||||
export const SWELL_STR_MULT = 0.10;
|
||||
export const DOME_OCEAN_BOOST = 1.8;
|
||||
export const DOME_PEAK_THRESH_SIGMA = 5.5;
|
||||
export const DOME_SWELL_THRESH_SIGMA = 3;
|
||||
export const DOME_DRIFT_STRETCH = 1.4;
|
||||
export const DOME_RIFT_BOOST = 0.5;
|
||||
export const DOME_CALDERA_SIGMA_FRAC = 0.25;
|
||||
export const DOME_CALDERA_DEPTH_FRAC = 0.20;
|
||||
export const DOME_CALDERA_STRENGTH_MIN = 0.15;
|
||||
export const DOME_AGE_BROADENING = 0.06;
|
||||
export const DOME_SHAPE_WARP_FREQ = 8;
|
||||
export const DOME_SHAPE_WARP_AMP = 0.4;
|
||||
export const DOME_SHAPE_WARP_DETAIL_FREQ = 20;
|
||||
export const DOME_SHAPE_WARP_DETAIL_AMP = 0.40;
|
||||
export const DOME_TEXTURE_BASE_WEIGHT = 0.7;
|
||||
export const DOME_TEXTURE_DETAIL_WEIGHT = 0.3;
|
||||
export const DOME_TEXTURE_ACTIVE_MIN = 0.4;
|
||||
export const DOME_TEXTURE_ACTIVE_MAX = 1.2;
|
||||
export const DOME_TEXTURE_AGE_MIN_SHIFT = 0.3;
|
||||
export const DOME_TEXTURE_AGE_MAX_SHIFT = 0.2;
|
||||
|
||||
// ── Hypsometry & Isostasy ──
|
||||
export const PEAK_COMPRESS_POWER = 0.85;
|
||||
export const ISOSTATIC_K = 0.07;
|
||||
export const HYPS_BLEND = 0.40;
|
||||
export const HYPS_LOW_BREAK = 0.60;
|
||||
export const HYPS_MID_BREAK = 0.85;
|
||||
export const HYPS_LOW_ELEV_FRAC = 0.25;
|
||||
export const HYPS_MID_ELEV_FRAC = 0.35;
|
||||
export const HYPS_HIGH_POWER = 0.7;
|
||||
export const FILL_LEVEL = 0.005;
|
||||
|
||||
// ── Passive Margin Coastal Plain ──
|
||||
export const PLAIN_TARGET = 0.02;
|
||||
export const PLAIN_SUPPRESSION_STRENGTH = 0.6;
|
||||
|
||||
// ── Domain Warp (terrain-post.js) ──
|
||||
export const WARP_FREQ = 4;
|
||||
export const WARP_OCTAVES = 5;
|
||||
export const WARP_MAX_AMP_MULT = 0.12;
|
||||
export const WARP_BIAS_BASE = 0.25;
|
||||
export const WARP_BIAS_STRENGTH_SCALE = 0.5;
|
||||
export const WARP_HOTSPOT_DAMPEN = 0.8;
|
||||
|
||||
// ── Smoothing (terrain-post.js) ──
|
||||
export const SMOOTH_EDGE_SENSITIVITY = 8;
|
||||
|
||||
// ── Glacial Erosion (terrain-post.js) ──
|
||||
export const GLACIAL_LAT_DIVISOR = 4.5;
|
||||
export const GLACIAL_ELEV_LOW = 0.5;
|
||||
export const GLACIAL_ELEV_HIGH = 0.9;
|
||||
export const GLACIAL_ELEV_FACTOR_SCALE = 0.3;
|
||||
export const GLACIAL_ELEV_FACTOR_LAT_BASE = 0.3;
|
||||
export const GLACIAL_ELEV_FACTOR_LAT_SCALE = 0.7;
|
||||
export const GLACIAL_CARVE_RATE = 0.02;
|
||||
export const GLACIAL_CONVERGENCE_BONUS = 0.01;
|
||||
export const GLACIAL_DEPOSIT_AMOUNT = 0.005;
|
||||
export const GLACIAL_FJORD_CARVE = 0.015;
|
||||
export const GLACIAL_FLOW_THRESHOLD = 0.1;
|
||||
export const GLACIAL_FJORD_THRESHOLD = 0.5;
|
||||
export const GLACIAL_WIDENING_FRAC = 0.4;
|
||||
export const GLACIAL_TERMINUS_RATIO = 0.3;
|
||||
export const GLACIAL_FJORD_ICE_MIN = 0.2;
|
||||
export const GLACIAL_POST_SMOOTH = 0.3;
|
||||
export const GLACIAL_MID_FLOOD_FRAC = 0.75;
|
||||
export const GLACIAL_MID_FLOOD_CARVE = 0.85;
|
||||
export const GLACIAL_INITIAL_CARVE = 0.5;
|
||||
|
||||
// ── Hydraulic Erosion (terrain-post.js) ──
|
||||
export const HYDRAULIC_DEPOSIT_FRAC = 0.5;
|
||||
export const HYDRAULIC_SLOPE_SENSITIVITY = 50;
|
||||
|
||||
// ── Thermal Erosion (terrain-post.js) ──
|
||||
export const THERMAL_TRANSFER_FRAC = 0.5;
|
||||
|
||||
// ── Ridge Sharpening (terrain-post.js) ──
|
||||
export const RIDGE_SHARPEN_CAP = 1.5;
|
||||
export const VALLEY_DEEPEN_FACTOR = 0.4;
|
||||
export const VALLEY_FLOOR_FRAC = 0.5;
|
||||
export const VALLEY_FLOOR_MIN = 0.001;
|
||||
|
||||
// ── Priority Flood (terrain-post.js) ──
|
||||
export const FLOOD_NOISE_AMP = 0.01;
|
||||
export const FLOOD_CARVE_RADIUS_FRAC = 0.3;
|
||||
|
||||
// ── Plate Generation ──
|
||||
export const PLATE_LOW_PLATE_T_HIGH = 80;
|
||||
export const PLATE_LOW_PLATE_T_RANGE = 60;
|
||||
export const PLATE_RATE_MIN_BASE = 0.7;
|
||||
export const PLATE_RATE_MIN_LOW_T = 0.4;
|
||||
export const PLATE_RATE_RANGE_BASE = 2.3;
|
||||
export const PLATE_RATE_RANGE_LOW_T = 2.4;
|
||||
export const PLATE_DIR_BASE_BASE = 0.15;
|
||||
export const PLATE_DIR_BASE_LOW_T = 0.25;
|
||||
export const PLATE_DIR_SCALE_BASE = 0.25;
|
||||
export const PLATE_DIR_SCALE_LOW_T = 0.25;
|
||||
export const PLATE_DIR_STRENGTH_CAP = 0.85;
|
||||
export const PLATE_COMPACT_BASE = 0.3;
|
||||
export const PLATE_COMPACT_LOW_T = 0.22;
|
||||
export const PLATE_AREA_GOVERNOR_BASE = 2.0;
|
||||
export const PLATE_AREA_GOVERNOR_LOW_T = 2.0;
|
||||
export const PLATE_COMPACT_THRESHOLD_MULT = 1.8;
|
||||
export const PLATE_COMPACT_PENALTY_MULT = 4;
|
||||
export const PLATE_OMEGA_MIN = 0.5;
|
||||
export const PLATE_OMEGA_RANGE = 1.5;
|
||||
export const PLATE_SMOOTH_BASE = 3;
|
||||
export const PLATE_SMOOTH_LOW_T = 2;
|
||||
export const PLATE_SMOOTH_FIRST_THRESH = 0.4;
|
||||
export const PLATE_SMOOTH_LATER_THRESH = 0.5;
|
||||
|
||||
// ── Coarse Projection ──
|
||||
export const N_COARSE = 20000;
|
||||
export const COARSE_JITTER = 0.75;
|
||||
export const COARSE_PERTURB_BASE = 1.5;
|
||||
export const COARSE_PERTURB_LOW_T = 1.0;
|
||||
export const COARSE_FBM_BASE_FREQ = 8;
|
||||
export const COARSE_FBM_OCTAVES = 4;
|
||||
export const COARSE_FBM_DECAY = 0.5;
|
||||
export const COARSE_FBM_FREQ_MULT = 2;
|
||||
@@ -0,0 +1,351 @@
|
||||
// Terrain generation tunable constants.
|
||||
// Grouped by subsystem for iterative tuning.
|
||||
// These are internal algorithm constants, NOT user-facing slider parameters.
|
||||
|
||||
// ── Collision & Stress ──
|
||||
export const COLLISION_THRESHOLD = 0.75;
|
||||
export const COLLISION_DT_BASE = 1e-2;
|
||||
export const COLLISION_DT_REF_REGIONS = 10000;
|
||||
export const PAIR_INTENSITY_BASE = 0.5;
|
||||
export const SUBDUCT_UNDULATION_DENSITY_DECAY = 12;
|
||||
export const SUBDUCT_UNDULATION_FREQ = 6;
|
||||
export const SUBDUCT_UNDULATION_AMP = 0.4;
|
||||
export const SUBDUCT_FACTOR_BASE = 0.5;
|
||||
export const SUBDUCT_FACTOR_TANH_SCALE = 8;
|
||||
export const SUBDUCT_THRESHOLD = 0.55;
|
||||
export const BOUNDARY_TYPE_THRESH_FACTOR = 0.3;
|
||||
|
||||
export const STRESS_PROPAGATE_MIN = 0.01;
|
||||
export const STRESS_PROPAGATE_CUTOFF = 0.005;
|
||||
export const STRESS_DIR_FACTOR_MIN = 0.1;
|
||||
export const STRESS_DIR_FACTOR_BASE = 0.3;
|
||||
export const STRESS_DIR_FACTOR_SCALE = 0.7;
|
||||
export const STRESS_DIR_BLEND_PARENT = 0.8;
|
||||
export const STRESS_DIR_BLEND_TRAVEL = 0.2;
|
||||
export const STRESS_DIR_SMOOTH_PASSES = 2;
|
||||
export const STRESS_DIR_SELF_WEIGHT = 2;
|
||||
|
||||
export const STRESS_DECAY_BASE = 0.5;
|
||||
export const STRESS_DECAY_SPREAD_FACTOR = 0.04;
|
||||
export const STRESS_SUBDUCT_DECAY_MULT = 0.45;
|
||||
export const STRESS_PASSES_PER_SPREAD = 3;
|
||||
|
||||
export const STRESS_PERCENTILE = 0.97;
|
||||
|
||||
// Blend weights for dual-layer orogeny (small plates vs super plates)
|
||||
export const SMALL_W = 0.05;
|
||||
export const SUPER_W = 0.95;
|
||||
|
||||
// ── Distance Fields & Zone Widths ──
|
||||
export const INTERIOR_BAND_BASE = 16;
|
||||
export const TECTONIC_REACH_BASE = 20;
|
||||
export const COASTAL_PLAIN_WIDTH_BASE = 18;
|
||||
export const COAST_BFS_WIDTH_BASE = 8;
|
||||
|
||||
// ── Mountain Profiles ──
|
||||
export const RIDGE_STRENGTH = 0.15;
|
||||
export const RIDGE_SIGMA_BASE = 5;
|
||||
export const RIDGE_PEAK_SHIFT_BASE = 2;
|
||||
export const RIDGE_EXTENT_BASE = 10;
|
||||
export const RIDGE_ASYM_SUBDUCT_NARROW = 0.6;
|
||||
export const RIDGE_ASYM_OVERRIDE_WIDEN = 0.5;
|
||||
export const RIDGE_STRESS_WIDTH_BASE = 0.75;
|
||||
export const RIDGE_STRESS_WIDTH_SCALE = 0.5;
|
||||
export const RIDGE_WIDTH_NOISE_AMP = 0.2;
|
||||
|
||||
export const BASE_SCALE = 0.6;
|
||||
export const ASYMMETRY_FACTOR = 0.8;
|
||||
|
||||
export const SUBDUCTING_SUPPRESSION = 0.42;
|
||||
|
||||
export const STRESS_MAG_SCALE = 0.40;
|
||||
export const STRESS_DEPRESS_FRAC = 0.4;
|
||||
export const STRESS_HEIGHT_VAR_BASE = 0.60;
|
||||
export const STRESS_HEIGHT_VAR_SCALE = 0.8;
|
||||
|
||||
export const SUBDUCTING_REACH_MIN = 0.35;
|
||||
export const SUBDUCTING_REACH_RANGE = 0.3;
|
||||
|
||||
// ── Fold Ridges ──
|
||||
export const FOLD_FREQ_PRIMARY = 160;
|
||||
export const FOLD_FREQ_SECONDARY = 400;
|
||||
export const FOLD_MEAN_OFFSET = 0.36;
|
||||
export const FOLD_PHASE_WARP_AMP = 0.08;
|
||||
export const FOLD_PHASE_WARP2_AMP = 0.12;
|
||||
export const FOLD_AMP_MOD_BASE = 0.6;
|
||||
export const FOLD_AMP_MOD_SCALE = 0.4;
|
||||
export const FOLD_AMP_MOD2_BASE = 0.5;
|
||||
export const FOLD_AMP_MOD2_SCALE = 0.5;
|
||||
export const FOLD_SECONDARY_ALONG = 0.85;
|
||||
export const FOLD_SECONDARY_CROSS = 0.15;
|
||||
export const FOLD_SECONDARY_AMP = 0.18;
|
||||
export const FOLD_NOISE_MAG_SCALE = 0.8;
|
||||
export const FOLD_ELEV_THRESHOLD = 0.05;
|
||||
export const FOLD_ELEV_SCALE = 4;
|
||||
export const FOLD_ELEV_BOOST_OFFSET = 0.03;
|
||||
export const FOLD_ELEV_BOOST_SCALE = 6;
|
||||
export const FOLD_SF_SUPPRESS = 1.5;
|
||||
export const FOLD_FREQ_MULT_SCALE = 1.5;
|
||||
|
||||
// ── Basins & Rifts ──
|
||||
export const RIFT_HALF_WIDTH_BASE = 4;
|
||||
export const RIFT_FLOOR_MULT = 1.5;
|
||||
export const RIFT_SHOULDER_MULT = 2.5;
|
||||
export const RIFT_AXIS_DEPTH = -0.15;
|
||||
export const RIFT_AXIS_VOLCANIC_AMP = 0.04;
|
||||
export const RIFT_FLOOR_DEPTH = -0.12;
|
||||
export const RIFT_FLOOR_TAPER = 0.3;
|
||||
export const RIFT_FLOOR_VOLCANIC_AMP = 0.03;
|
||||
export const RIFT_SHOULDER_UPLIFT = 0.03;
|
||||
export const RIFT_FADEOUT_RESIDUAL = 0.2;
|
||||
|
||||
export const BASIN_FREQ = 1.8;
|
||||
export const BASIN_FACTOR_BIAS = 0.5;
|
||||
export const BASIN_FACTOR_SCALE = 0.6;
|
||||
export const FORELAND_STRESS_THRESH = 0.15;
|
||||
export const FORELAND_WIDTH_FRAC = 0.3;
|
||||
export const FORELAND_BASIN_DEPTH = 0.05;
|
||||
export const FORELAND_PEAK_POS = 0.2;
|
||||
export const FORELAND_BASIN_DEEPENING_BASE = 0.5;
|
||||
export const FORELAND_BASIN_DEEPENING_SCALE = 0.5;
|
||||
|
||||
// ── Back-Arc & Foreland ──
|
||||
export const BACK_ARC_START_BASE = 2;
|
||||
export const BACK_ARC_PEAK_BASE = 3;
|
||||
export const BACK_ARC_END_BASE = 5;
|
||||
export const BACK_ARC_DEPTH = 0.10;
|
||||
export const BACK_ARC_SUBDUCT_THRESH = 0.50;
|
||||
|
||||
// ── Noise Layering ──
|
||||
export const WARP_SCALE = 0.4;
|
||||
export const OROGENIC_FREQ = 1.5;
|
||||
export const NOISE_ACTIVITY_SCALE = 4;
|
||||
export const NOISE_BASE_SCALE = 0.25;
|
||||
export const NOISE_ACTIVITY_CONTRIB = 0.75;
|
||||
export const PLATEAU_SUPPRESS_MIN = 0.30;
|
||||
export const PLATEAU_SUPPRESS_SCALE = 0.60;
|
||||
export const BASIN_AMP_SUPPRESS = 0.7;
|
||||
export const CRATON_AMP_SUPPRESS = 0.4;
|
||||
export const RIDGED_NOISE_AMP = 1.5;
|
||||
export const DETAIL_NOISE_FREQ_MULT = 4;
|
||||
export const DETAIL_NOISE_AMP = 0.5;
|
||||
export const FINE_NOISE_FREQ_MULT = 8;
|
||||
export const FINE_NOISE_AMP = 0.25;
|
||||
export const OCEAN_NOISE_AMP = 0.3;
|
||||
|
||||
// ── Dissection & Summits ──
|
||||
export const DISSECT_THRESHOLD = 0.10;
|
||||
export const DISSECT_AMP = 0.55;
|
||||
export const DISSECT_ELEV_SCALE = 2;
|
||||
export const SUMMIT_THRESHOLD = 0.65;
|
||||
export const SUMMIT_STRESS_MIN = 0.05;
|
||||
export const SUMMIT_SPIKE_OFFSET = 0.45;
|
||||
export const SUMMIT_STRESS_FLOOR = 0.3;
|
||||
|
||||
// ── Interior Elevation ──
|
||||
export const PLATE_BASE_HEIGHT_MEAN = -0.15;
|
||||
export const PLATE_BASE_HEIGHT_STDDEV = 0.025;
|
||||
export const INTERIOR_BASE_SHIELD = 0.14;
|
||||
export const INTERIOR_BASE_BASIN = 0.04;
|
||||
export const INTERIOR_TECTONIC = 0.20;
|
||||
export const COASTAL_DEPRESSION = -0.08;
|
||||
export const COASTAL_DEPRESSION_BASIN_REDUCE = 0.4;
|
||||
export const INTERIOR_UPLIFT_RAMP_FRAC = 0.4;
|
||||
export const INTERIOR_UPLIFT_MOD_AMP = 0.2;
|
||||
export const INTERIOR_FLOOR = 0.008;
|
||||
export const PLATEAU_BOOST = 0.04;
|
||||
export const PLATEAU_START_BASE = 3;
|
||||
export const MOUNTAIN_BOOST_FRAC = 0.3;
|
||||
export const FOLD_BELT_MULT = 3;
|
||||
export const CRATON_TECTONIC_MULT = 2.5;
|
||||
export const BASIN_TECTONIC_MULT = 2;
|
||||
|
||||
// ── Continental Margins ──
|
||||
export const SHELF_NARROW_BASE = 4;
|
||||
export const SHELF_WIDE_BASE = 12;
|
||||
export const SLOPE_WIDTH_BASE = 7;
|
||||
export const SHELF_DEPTH_START = -0.08;
|
||||
export const SHELF_DEPTH_RANGE = 0.08;
|
||||
export const SLOPE_DEPTH_RANGE = 0.19;
|
||||
export const ABYSS_BASE = -0.35;
|
||||
export const ABYSS_NOISE_AMP = 0.03;
|
||||
export const OCEAN_FLOOR_CLAMP = -0.005;
|
||||
|
||||
// ── Mid-Ocean Features ──
|
||||
export const RIDGE_HALF_WIDTH_BASE = 4;
|
||||
export const RIDGE_UPLIFT_NOISE = 0.12;
|
||||
export const RIDGE_UPLIFT_BASE = 0.06;
|
||||
export const FRACTURE_HALF_WIDTH_BASE = 3;
|
||||
export const FRACTURE_DEPTH = 0.03;
|
||||
export const TRENCH_BASE_DEPTH = 0.15;
|
||||
export const TRENCH_STRESS_DEPTH = 0.15;
|
||||
|
||||
// ── Coastal Roughening ──
|
||||
export const COAST_ROUGHEN_BASE = 8;
|
||||
export const COAST_PASSIVE_FREQ = 6;
|
||||
export const COAST_ACTIVE_FREQ = 9;
|
||||
export const COAST_PASSIVE_AMP = 0.08;
|
||||
export const COAST_ACTIVE_AMP = 0.12;
|
||||
export const COAST_WARP_PASSIVE_REACH = 1.2;
|
||||
export const COAST_WARP_ACTIVE_REACH = 1.5;
|
||||
export const COAST_WARP_AMT = 0.35;
|
||||
export const COAST_SUBDUCT_SUP_LOW = 0.45;
|
||||
export const COAST_SUBDUCT_SUP_RANGE = 0.55;
|
||||
|
||||
// ── Island Scattering ──
|
||||
export const ISLAND_DIST_BASE = 4;
|
||||
export const ISLAND_FREQ = 17.5;
|
||||
export const ISLAND_THRESHOLD_BASE = 0.25;
|
||||
export const ISLAND_THRESHOLD_STRESS = 0.2;
|
||||
export const ISLAND_BUMP_AMP = 0.18;
|
||||
export const ISLAND_SUBDUCT_MAX = 0.3;
|
||||
|
||||
// ── Island Arcs ──
|
||||
export const ARC_DIST_BASE = 5;
|
||||
export const ARC_PEAK_DIST_BASE = 1.5;
|
||||
export const ARC_SIGMA_BASE_VAL = 1.5;
|
||||
export const ARC_THRESHOLD = 0.30;
|
||||
export const ARC_UPLIFT_AMP = 0.55;
|
||||
export const ARC_SUBDUCT_THRESH = 0.45;
|
||||
|
||||
// ── Volcanic Features ──
|
||||
export const VOLC_MIN_SPACING = 0.015;
|
||||
export const VOLC_SIGMA_BASE = 0.003;
|
||||
export const VOLC_HEIGHT_BASE = 0.15;
|
||||
export const VOLC_HEIGHT_VAR_BASE = 0.7;
|
||||
export const VOLC_HEIGHT_VAR_RANGE = 0.6;
|
||||
export const VOLC_SIGMA_VAR_BASE = 0.6;
|
||||
export const VOLC_SIGMA_VAR_RANGE = 0.8;
|
||||
export const VOLC_SUBDUCT_THRESH = 0.45;
|
||||
|
||||
// ── Large Igneous Provinces ──
|
||||
export const LIP_SIGMA = 0.025;
|
||||
export const LIP_HEIGHT = 0.04;
|
||||
|
||||
// ── Hotspot Chains ──
|
||||
export const NUM_HOTSPOTS = 5;
|
||||
export const CHAIN_LENGTH = 6;
|
||||
export const CHAIN_DECAY = 0.75;
|
||||
export const CHAIN_SPACING = 0.06;
|
||||
export const DOME_SIGMA = 0.006;
|
||||
export const DOME_STRENGTH = 0.60;
|
||||
export const SWELL_SIGMA_MULT = 2;
|
||||
export const SWELL_STR_MULT = 0.10;
|
||||
export const DOME_OCEAN_BOOST = 1.8;
|
||||
export const DOME_PEAK_THRESH_SIGMA = 5.5;
|
||||
export const DOME_SWELL_THRESH_SIGMA = 3;
|
||||
export const DOME_DRIFT_STRETCH = 1.4;
|
||||
export const DOME_RIFT_BOOST = 0.5;
|
||||
export const DOME_CALDERA_SIGMA_FRAC = 0.25;
|
||||
export const DOME_CALDERA_DEPTH_FRAC = 0.20;
|
||||
export const DOME_CALDERA_STRENGTH_MIN = 0.15;
|
||||
export const DOME_AGE_BROADENING = 0.06;
|
||||
export const DOME_SHAPE_WARP_FREQ = 8;
|
||||
export const DOME_SHAPE_WARP_AMP = 0.4;
|
||||
export const DOME_SHAPE_WARP_DETAIL_FREQ = 20;
|
||||
export const DOME_SHAPE_WARP_DETAIL_AMP = 0.40;
|
||||
export const DOME_TEXTURE_BASE_WEIGHT = 0.7;
|
||||
export const DOME_TEXTURE_DETAIL_WEIGHT = 0.3;
|
||||
export const DOME_TEXTURE_ACTIVE_MIN = 0.4;
|
||||
export const DOME_TEXTURE_ACTIVE_MAX = 1.2;
|
||||
export const DOME_TEXTURE_AGE_MIN_SHIFT = 0.3;
|
||||
export const DOME_TEXTURE_AGE_MAX_SHIFT = 0.2;
|
||||
|
||||
// ── Hypsometry & Isostasy ──
|
||||
export const PEAK_COMPRESS_POWER = 0.85;
|
||||
export const ISOSTATIC_K = 0.07;
|
||||
export const HYPS_BLEND = 0.40;
|
||||
export const HYPS_LOW_BREAK = 0.60;
|
||||
export const HYPS_MID_BREAK = 0.85;
|
||||
export const HYPS_LOW_ELEV_FRAC = 0.25;
|
||||
export const HYPS_MID_ELEV_FRAC = 0.35;
|
||||
export const HYPS_HIGH_POWER = 0.7;
|
||||
export const FILL_LEVEL = 0.005;
|
||||
|
||||
// ── Passive Margin Coastal Plain ──
|
||||
export const PLAIN_TARGET = 0.02;
|
||||
export const PLAIN_SUPPRESSION_STRENGTH = 0.6;
|
||||
|
||||
// ── Domain Warp (terrain-post.js) ──
|
||||
export const WARP_FREQ = 4;
|
||||
export const WARP_OCTAVES = 5;
|
||||
export const WARP_MAX_AMP_MULT = 0.12;
|
||||
export const WARP_BIAS_BASE = 0.25;
|
||||
export const WARP_BIAS_STRENGTH_SCALE = 0.5;
|
||||
export const WARP_HOTSPOT_DAMPEN = 0.8;
|
||||
|
||||
// ── Smoothing (terrain-post.js) ──
|
||||
export const SMOOTH_EDGE_SENSITIVITY = 8;
|
||||
|
||||
// ── Glacial Erosion (terrain-post.js) ──
|
||||
export const GLACIAL_LAT_DIVISOR = 4.5;
|
||||
export const GLACIAL_ELEV_LOW = 0.5;
|
||||
export const GLACIAL_ELEV_HIGH = 0.9;
|
||||
export const GLACIAL_ELEV_FACTOR_SCALE = 0.3;
|
||||
export const GLACIAL_ELEV_FACTOR_LAT_BASE = 0.3;
|
||||
export const GLACIAL_ELEV_FACTOR_LAT_SCALE = 0.7;
|
||||
export const GLACIAL_CARVE_RATE = 0.02;
|
||||
export const GLACIAL_CONVERGENCE_BONUS = 0.01;
|
||||
export const GLACIAL_DEPOSIT_AMOUNT = 0.005;
|
||||
export const GLACIAL_FJORD_CARVE = 0.015;
|
||||
export const GLACIAL_FLOW_THRESHOLD = 0.1;
|
||||
export const GLACIAL_FJORD_THRESHOLD = 0.5;
|
||||
export const GLACIAL_WIDENING_FRAC = 0.4;
|
||||
export const GLACIAL_TERMINUS_RATIO = 0.3;
|
||||
export const GLACIAL_FJORD_ICE_MIN = 0.2;
|
||||
export const GLACIAL_POST_SMOOTH = 0.3;
|
||||
export const GLACIAL_MID_FLOOD_FRAC = 0.75;
|
||||
export const GLACIAL_MID_FLOOD_CARVE = 0.85;
|
||||
export const GLACIAL_INITIAL_CARVE = 0.5;
|
||||
|
||||
// ── Hydraulic Erosion (terrain-post.js) ──
|
||||
export const HYDRAULIC_DEPOSIT_FRAC = 0.5;
|
||||
export const HYDRAULIC_SLOPE_SENSITIVITY = 50;
|
||||
|
||||
// ── Thermal Erosion (terrain-post.js) ──
|
||||
export const THERMAL_TRANSFER_FRAC = 0.5;
|
||||
|
||||
// ── Ridge Sharpening (terrain-post.js) ──
|
||||
export const RIDGE_SHARPEN_CAP = 1.5;
|
||||
export const VALLEY_DEEPEN_FACTOR = 0.4;
|
||||
export const VALLEY_FLOOR_FRAC = 0.5;
|
||||
export const VALLEY_FLOOR_MIN = 0.001;
|
||||
|
||||
// ── Priority Flood (terrain-post.js) ──
|
||||
export const FLOOD_NOISE_AMP = 0.01;
|
||||
export const FLOOD_CARVE_RADIUS_FRAC = 0.3;
|
||||
|
||||
// ── Plate Generation ──
|
||||
export const PLATE_LOW_PLATE_T_HIGH = 80;
|
||||
export const PLATE_LOW_PLATE_T_RANGE = 60;
|
||||
export const PLATE_RATE_MIN_BASE = 0.7;
|
||||
export const PLATE_RATE_MIN_LOW_T = 0.4;
|
||||
export const PLATE_RATE_RANGE_BASE = 2.3;
|
||||
export const PLATE_RATE_RANGE_LOW_T = 2.4;
|
||||
export const PLATE_DIR_BASE_BASE = 0.15;
|
||||
export const PLATE_DIR_BASE_LOW_T = 0.25;
|
||||
export const PLATE_DIR_SCALE_BASE = 0.25;
|
||||
export const PLATE_DIR_SCALE_LOW_T = 0.25;
|
||||
export const PLATE_DIR_STRENGTH_CAP = 0.85;
|
||||
export const PLATE_COMPACT_BASE = 0.3;
|
||||
export const PLATE_COMPACT_LOW_T = 0.22;
|
||||
export const PLATE_AREA_GOVERNOR_BASE = 2.0;
|
||||
export const PLATE_AREA_GOVERNOR_LOW_T = 2.0;
|
||||
export const PLATE_COMPACT_THRESHOLD_MULT = 1.8;
|
||||
export const PLATE_COMPACT_PENALTY_MULT = 4;
|
||||
export const PLATE_OMEGA_MIN = 0.5;
|
||||
export const PLATE_OMEGA_RANGE = 1.5;
|
||||
export const PLATE_SMOOTH_BASE = 3;
|
||||
export const PLATE_SMOOTH_LOW_T = 2;
|
||||
export const PLATE_SMOOTH_FIRST_THRESH = 0.4;
|
||||
export const PLATE_SMOOTH_LATER_THRESH = 0.5;
|
||||
|
||||
// ── Coarse Projection ──
|
||||
export const N_COARSE = 20000;
|
||||
export const COARSE_JITTER = 0.75;
|
||||
export const COARSE_PERTURB_BASE = 1.5;
|
||||
export const COARSE_PERTURB_LOW_T = 1.0;
|
||||
export const COARSE_FBM_BASE_FREQ = 8;
|
||||
export const COARSE_FBM_OCTAVES = 4;
|
||||
export const COARSE_FBM_DECAY = 0.5;
|
||||
export const COARSE_FBM_FREQ_MULT = 2;
|
||||
Reference in New Issue
Block a user