Editor: redesign di rilievi, caldere e strade (F0-F6) #282
Labels
No labels
alpha:wave-0
alpha:wave-1
alpha:wave-2
alpha:wave-3
area:assets
area:combat
area:ecology
area:infra
area:render
area:scripting
area:ui
area:world
enhancement
epic
migration
post-alpha
roadmap
tech-debt
type:bug
type:chore
type:design
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
marco/IsoMmo#282
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Gli strumenti altimetrici dell'editor autorano heightfield geometricamente incoerenti: montagne a "torta nuziale", caldere ottenute sovrapponendo stamp circolari, strade dipinte sopra pareti mai raccordate. Il pianeta verrà ridisegnato; questa epica impedisce che il prossimo abbia gli stessi difetti.
Design review completa e Invariants Check: nel documento di mandato dell'owner, riassunti qui.
Diagnosi verificata sul branch
Tutti e nove i punti confermati riga per riga:
Landform.Applycuce per costruzione — ricevereadZ, lo passa aThrowIfNulle non lo usa mai; scriveBaseZ + (PeakZ-BaseZ)·falloffsu tutto il disco.Terraced= la torta nuziale —floor(z/TerraceStep)·TerraceStep, default 25, e i riser misurati nel vulcano sono 25-26.MaxGradientperTerracedritornaheight/radius: il commento nel codice ammette che i riser sono verticali.Trace.Bake;Route (A→B)stampa conBrush.Squaree non ha spalle affatto.Trace.Baketocca solo±Shoulder(12) e clampa; all'anello esterno resta un salto. 175 Z a gradiente 2 richiedono 88 celle.Brush.Square(size)è totale,Trace.Widthè raggio Chebyshev: con_brushSize=1la route dipinge 1 cella, il trace ne cuoce 3.Naturalise.Erodeusa 4 vicini, il movimento 8;ZSmootherriscrive solo le celle pennellate.ChunkedEditModel.Divergenze rispetto al mandato
IsoProjection.ZScale = 16f, viva, usata da 9 file, con il commento che registra la decisione del 2026-08-04 ("Raised from UO's squashed 4 to 16 … mountains should loom");ZScale3D = IsoProjection.ZScale. Ilz*4è UO classico. Chiuso dall'owner: si va a 16.EditorCamera.ZScaleè invece davvero un campo morto (mai letto daBasis/Project) e va rimosso.mountain_rock, nonmountain. HamaxSlopeZ 2, cioè esattamenteSustainableRisePerStep: policy materiale e regola di pendenza si rinforzano.Modello dati
Due tipi, non uno — è ciò che rende raggiungibile il budget di 64 MiB:
TerrainEditPlantransitorio e denso (Before/After Z + terrain, bitmaskulong[], diagnostica,CanCommit,RejectionReason), uno vivo per volta, mostraEstimatedUndoBytesprima del commit;TerrainPatchpersistente e sparso (solo celle cambiate) dentro unaEditTransactionper gesto, che ripristina Z e terrain insieme.Denso al limite di 2 M celle costerebbe 12 MB a transazione (5 nella history); sparso ~3,6 MB (una ventina).
Algoritmi
target = lerp(crestZ(t), existingZ(cell), smoothstep(|d|/width(t))). A|d| ≥ widthil target è il terreno esistente: cucitura zero per costruzione. Rami uniti con smooth-max, maimaxduro. Picco = massimo locale dicrestZ, sella = minimo: nessuna forma sovrapposta.z = f(cell)in frame ellittico ruotato, raggi modulati per angolo da rumore a bassa frequenza; profilo continuoesterno → raccordo → versante → cresta → parete interna → fondo, dove il raccordo è il primo tratto e tende aexistingZ. Brecce = settori angolari che abbassano la cresta, e basta.dla banda èroadZ ± d·g; una cella già in banda tiene la Z naturale e chiude il raccordo; oltreMaxEarthworkRadiuscon frontiere ancora aperte → rifiuto con la distanza minima richiesta. Postcondizione verificata sul risultato, non assunta.|roadZ₁ − roadZ₂| > 2·d·gsulla stessa cella → conflitto esplicito, mai la quota più alta.SlopeTerrainIdtipizzato senza switch sul bioma.Fasi
cc978d0)ZScalemortoLandformcorretto +CliffTerraces+Ridge+ policy materialeCalderaMai F4-F6 in un unico commit.
F0 — fatto
content/worlds/caldera-fixture: crop 512×512 daX 7288..7799, Y 4032..4543, 792 KB, sha2561747e28d…, apribile da editor e client. Provenienza, tabella coordinate mondo→locale dei KO noti e baseline inPROVENANCE.md, con i numeri pinnati daCalderaFixtureTests: modificare la fixture rompe la build invece di spostare silenziosamente la baseline.Baseline sulla Z effettiva (
BaseZ+ rilievo), bordo del crop escluso:La patologia non è "è quasi tutto ripido": è che l'82,9% degli edge non ha alcun dislivello e le transizioni fra i ripiani sono pareti fino a 175 Z in una cella. Solo il 14,7% è pendenza davvero percorribile. È la firma di
floor(z/25)·25.Definition of Done
Quella del mandato §14, integralmente.