fix(client): profondità degli sprite alla cima della carta, non al piede #276
No reviewers
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!276
Loading…
Reference in a new issue
No description provided.
Delete branch "fix/sprite-depth-code"
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?
Summary
Il personaggio spariva dentro il terreno su un versante rivolto verso la camera. Segnalato camminando sull'asterra: "ti segnalo un problema sull'altro versante il personaggio finisce sotto il mesh" — riprodotto a (7516,4225), del corpo restavano due pixel.
Non era una regressione del lavoro sulla copertura: i file che governano la profondità erano invariati rispetto a prima di quel ramo. Veniva dalla fase 3D.
La causa. La base della camera dà
toward = (0.3233, 0.3233, 0.8892): la quota pesa 2,75 volte la posizione planare. Il terreno che appare sopra l'entità sullo schermo può quindi essere più vicino in profondità, se è abbastanza alto. Lo sprite perde perché è un cartellone a profondità costante: un corpo in piedi è una colonna verticale e in questa base la testa è più vicina della camera dei piedi, ma disegnando l'intera carta alla profondità del piede la testa viene testata come se fosse a terra.La correzione.
IsoCamera.BillboardDepthcalcola la profondità alla cima della carta:z + altezzaPixel / ZScale, con l'altezza presa dallo sprite stesso —AnchorYper i mobili,texture.Heightper le statiche, che hanno origine(w/2, h). La grandezza è derivata, non tarata: si adatta da sola a un ratto e a una sequoia.Un epsilon tarato è stato scartato: non ha un valore derivabile — troppo piccolo lascia il bug su pendenze più ripide, troppo grande spegne l'occlusione delle rupi.
Costo accettato e dichiarato: le gambe vengono testate alla quota della testa, quindi un dislivello che dovrebbe nasconderle non le nasconde. Sbagliare in questa direzione è molto meno visibile di un personaggio inghiottito dalla collina.
Screenshots / recording
Stesso tile (7516,4225),
here 227, database fresco.Comandi (
docs/debug-harness.md):login test, poi/tp 7516 4225via chat, poiscreenshot.How it was tested
BillboardDepthTests, suite completa verde.z 222(l'HUD mostra 227, che è la quota display smussata); il terreno che lo copre arriva az 225,6; deficit 2,33, cioè basterebbe una carta di 42 px contro i 120 reali.Limite noto
Se il terreno supera l'intera carta continua a coprire — corretto, ma può ancora far sparire il personaggio ai piedi di un massiccio. Il seguito è progettato in
docs/superpowers/specs/2026-08-06-shaped-occluder-cutaway-design.md: tagliare solo il terreno che nasconde davvero qualcosa.Checklist
just lintpassa (CSharpier + analyzer, zero warning)just testè verdeChiude parzialmente #275 (la parte ravvicinata; il taglio sagomato resta aperto).