feat(world): render steep tiles on a smooth bicubic surface, sampled in parallel

Tiles holding a slope over 35 degrees are meshed at two vertices per cell
on a clamped Catmull-Rom surface that passes through every grid node, so
cliffs and ledges lose the facets of the heightfield grid while the
collision stays on the grid. The domain field exposes the smooth
elevation and a separable, per-phase-weighted block sampler with linear
edge extrapolation and a one-cell margin for continuous normals; the actor
samples tiles on the worker thread pool and builds meshes afterwards.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
OlivierandClaude Fable 5.1 committed 2026-10-07 00:09:42 +02:00
1 parent d7e50f8879
commit 122f3f5800
11 files changed
+314 -19

No files matched your search

Binary file not shown.

Before

Width:  |  Height:  |  Size: 458 KiB

After

Width:  |  Height:  |  Size: 459 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 342 KiB

After

Width:  |  Height:  |  Size: 359 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 412 KiB

After

Width:  |  Height:  |  Size: 417 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 419 KiB

After

Width:  |  Height:  |  Size: 417 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 416 KiB

After

Width:  |  Height:  |  Size: 415 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 250 KiB

After

Width:  |  Height:  |  Size: 247 KiB

+8 -1
View File
@@ -245,7 +245,14 @@ de contacts existant les sépare du fond.
à 45 m, indigo au pied du tombant).
- Maillage découpé en **64 tuiles de 96 × 96 m** (64 × 64 cellules), avec
`visibility_range` pour ne dessiner que les tuiles dans le brouillard
utile ; une seule `HeightMapShape3D` pour la collision.
utile ; une seule `HeightMapShape3D` pour la collision. Les tuiles qui
contiennent une pente de plus de 35° sont rendues à deux sommets par
cellule sur la surface bicubique (Catmull-Rom, qui passe par chaque nœud
du champ, bornée entre nœuds pour ne jamais dépasser une marche) : les
facettes de la grille disparaissent sur les parois, la collision reste sur
la grille et coïncide avec le rendu aux nœuds. L'échantillonnage des tuiles
est pur et s'exécute en parallèle (`WorkerThreadPool`), les maillages sont
assemblés ensuite sur le thread principal.
- Props low-poly posés à la main, en nombre borné : blocs d'éboulis au pied
du tombant, têtes de corail sur les patch reefs, rien d'animé.
- Brouillard, lumière directionnelle et particules de la scène de test