Gesigneerde afstandsvelden: 2D-vormmodellering, compositie en normalen
Gesigneerde afstandsvelden (SDF’s) beschrijven geometrie met één centrale vraag: hoe ver ligt het dichtstbijzijnde oppervlak vanaf dit punt? In plaats van expliciet driehoeken, lijnen of polygonen op te slaan, definieer je een functie en evalueer je die op elk punt waar je informatie nodig hebt. Dat maakt SDF’s erg geschikt voor procedurele graphics, waar vormen vaak wiskundig worden opgebouwd, gecombineerd en vervormd.
Een SDF geeft op positie een gesigneerde scalaire waarde terug:
- positief buiten de vorm
- nul op het oppervlak
- negatief binnen de vorm
De absolute waarde is de kortste afstand tot de grens. Het teken vertelt aan welke kant van die grens je zit. Daardoor krijg je met één functie zowel afstandsinformatie als inside/outside-classificatie.
Teken, Grootte en Afstandscontouren
De belangrijkste intuïtie is dat elk punt twee dingen tegelijk bevat: een zij-label (binnen of buiten) en een afstandsgrootte. Als , dan ligt het punt 0.12 eenheid binnen de vorm. Als , ligt het 0.12 eenheid buiten de vorm. Bij zit je exact op de rand.
Een SDF is daarom meer dan een binaire maskfunctie. Je krijgt een volledige afstandsstructuur rond het oppervlak:
- negatieve contouren binnen de vorm
- de nulcontour op de grens
- positieve contouren buiten de vorm
SDF Sign and Distance Contours
Inspect sign, magnitude, and nearest-surface distance for a circle or box field.
In de visualisatie zie je voor het samplepunt de gesigneerde waarde, de absolute afstand en de classificatie. Het groene lijnsegment toont het kortste pad naar het oppervlak. Als je wisselt tussen cirkel en box blijft de betekenis van het teken gelijk, terwijl de geometrie verandert. Precies die consistente betekenis maakt SDF-tools herbruikbaar over verschillende primitive-vormen.
Dit principe is ook praktisch buiten rendering. Je kunt dezelfde afstandsinformatie gebruiken voor marges in collision checks, zone-overgangen, anti-aliasing en materiaalovergangen op basis van afstand.
Primitive SDF-Formules in 2D
SDF-modellering begint meestal met eenvoudige primitives. In 2D hebben veel vormen compacte formules:
- cirkel met middelpunt en straal :
- halfvlak (één zijde van een lijn) met normaal en offset :
- as-uitgelijnde box met halve grootte : combineer buitendistance en binnenoffset via geclampeerde coördinaten
De cirkelformule is vaak de eerste die je internaliseert, omdat de tekenlogica heel direct is. Buiten de cirkel is de afstand tot het middelpunt groter dan , dus positief. Op de grens is de waarde nul. Binnen de cirkel wordt de waarde negatief met een grootte die aangeeft hoe diep je binnen zit.
Voor boxen en complexere vormen worden formules wat langer, maar het contract blijft hetzelfde: een correct teken en een bruikbare, conservatieve afstandsschatting. Als dat contract zwak wordt, krijg je sneller artefacten in compositie, normaalinschatting en ray-traversal.
SDF-Scènecompositie met Min en Max
Eén primitive is zelden genoeg voor een volledige scène. Daarom combineer je meerdere velden met eenvoudige booleaanse-achtige operaties:
- unie:
min(a, b) - doorsnede:
max(a, b) - aftrekking (A min B):
max(a, -b)
Voor unie is de regel intuïtief: het dichtstbijzijnde oppervlak bepaalt lokaal de veldwaarde, dus je neemt de minimumafstand.
SDF Boolean Composition
Combine two primitive fields with union, intersection, or subtraction and inspect the resulting distance.
In de composer zie je twee bronvelden (A en B) als stippellijnen, en het samengestelde resultaat als gekleurde veldkaart.
Door de operatie of positie van vorm B te veranderen zie je direct hoe de nulcontour en de binnenregio veranderen.
De readout met dA, dB en dScene op het samplepunt maakt helder wat de compositieregel numeriek doet.
Bij aftrekking (max(dA, -dB)) draaien punten binnen B effectief van bijdrage, waardoor B volume uit A wegsnijdt.
Dat is de basis van uitsparingen, gaten en negatieve ruimte in constructieve SDF-modellering.
Dit is ook de reden dat SDF-scènes vaak compact in code blijven. Je kunt een hele scenegraph reduceren tot één functie die één scalar teruggeeft. Diezelfde functie kun je daarna gebruiken voor rendering, masking, proximity checks en interactie.
Harde Unie versus Smooth Unie
Standaard min en max geven scherpe CSG-overgangen.
Voor harde, mechanische vormen is dat vaak gewenst.
Voor organische overgangen wil je meestal smooth varianten, bijvoorbeeld smooth minimum (smin) met parameter :
Als groter wordt, verbreedt de blendzone.
Als , benadert het gedrag gewone min.
Soortgelijke varianten bestaan voor smooth subtraction en smooth intersection.
Hard Union vs Smooth Union
Compare zero contours for hard min and smooth min while adjusting blend width and shape spacing.
In de vergelijking zie je links harde unie (min) en rechts smooth unie (smin) voor exact dezelfde bronvormen.
Op het samplepunt kun je dHard en dSmooth direct naast elkaar leggen.
Rond de naad tussen vormen wordt smooth unie vaak iets negatiever dan hard min, waardoor een afgeronde brug ontstaat in plaats van een scherpe overgang.
Deze soepelheid heeft wel gevolgen voor veldkwaliteit. Als je pipeline sterk leunt op conservatieve afstandsgrenzen voor lange stappen, kan agressief smoothen extra voorzichtigheid vereisen in drempels en stapregels.
Domeintransformaties en Herhaling
Een groot voordeel van SDF’s is dat je vaak de inputruimte transformeert in plaats van de vormfunctie zelf. Veelgebruikte domeintransformaties:
- Translatie: evalueer op
- Rotatie: evalueer op
- Schaling: evalueer op en schaal de afstand terug met
- Herhaling: gebruik
modof folding op coördinaten voor patroonherhaling
Met die aanpak kan één primitive-definitie veel instanties opleveren. Een enkele cirkel-SDF wordt bijvoorbeeld een raster van cirkels wanneer je coördinaten periodiek vouwt. Dat is een belangrijke reden waarom SDF’s populair zijn in shaders met veel procedurele inhoud.
Domeintransformaties combineren ook goed met ruis. Met value noise, Perlin noise en fractale ruis kun je coördinaten of afstandswaarden moduleren voor steenachtige, vloeibare of wolkachtige structuren, terwijl je dezelfde function-first modellering behoudt.
Oppervlaktenormalen uit de SDF-Gradiënt
Een SDF levert niet alleen afstand tot het oppervlak, maar ook richtinginformatie via de gradiënt. Dicht bij de grens wijst de gradiënt in de richting van de sterkste afstandstoename, wat overeenkomt met de uitwendige normaal. In praktijk schat je die met eindige verschillen:
Na normalisatie krijg je een bruikbare normaalvector voor belichting.
Dit is fundamenteel in veldgebaseerde rendering, omdat er geen expliciete mesh-normalenbuffer bestaat. Hetzelfde veld dat je hitlocatie bepaalt, geeft ook lokale oriëntatie voor diffuse/specular belichting, reflecties en andere materiaaleffecten.
Praktische Grenzen en Kwaliteitsknoppen
Hoewel het concept eenvoudig is, hangt de kwaliteit sterk af van een paar praktische instellingen:
- Trefferdrempel (
epsilon): te groot geeft opgeblazen vormen; te klein verhoogt ruis en stapkosten. - Staplimiet: beschermt tegen worst-case situaties en niet-convergerende evaluaties.
- Maximale afstand: begrenst werk voor rays die niets raken.
- Veldkwaliteit: exacte afstandsvelden zijn betrouwbaarder dan losse distance estimators.
Een veelgemaakte fout is aannemen dat elk scalair veld zich gedraagt als een exacte SDF. Distance estimators kunnen goed werken, maar de stapveiligheid hangt dan volledig af van hoe conservatief de schatter is. Bij onderschatting kun je dunne details overslaan of gaten in het resultaat krijgen.
Numerieke instabiliteit rond scherpe CSG-randen en kleine features is ook een terugkerend punt. Een kleinere epsilon verhoogt precisie, maar maakt het systeem gevoeliger voor floating-pointruis. Vaak werkt een gematigde epsilon met stabiele belichtingskeuzes beter dan puur extreem kleine drempels.
Waar SDF’s Passen in een Renderpipeline
SDF’s zijn een representatiekeuze, geen universele vervanging voor meshes. Ze zijn sterk wanneer vormen procedureel, sterk vervormbaar of compositie-intensief zijn. Meshes blijven beter waar handgemaakte topologie, UV-workflows en directe triangle-acceleratie belangrijk zijn.
In de praktijk zie je vaak een hybride aanpak:
- rasterisatie voor het grootste deel van scènegeometrie
- SDF-evaluatie voor speciale effecten, impliciete objecten, tekst, decals en procedurele volumes
Voor de volledige ray-traversalcontext kun je ray marching met signed distance fields erbij pakken. Voor GPU-context over pipelinefasen is vertex en fragment shaders in de grafische pipeline nuttige achtergrond.
Samenvatting
Gesigneerde afstandsvelden modelleren vorm als één scalaire functie met twee kernbeloftes: afstandsgrootte en inside/outside-teken. Vanuit die ene representatie kun je:
- vormen classificeren met teken en afstandscontouren
- scènes opbouwen via
min/max-compositie - harde en smooth overgangen vergelijken en sturen
- lokalenormalen afleiden via gradiëntbenadering
Die combinatie van compacte modellering en herbruikbare evaluatielogica maakt SDF’s zo krachtig in procedurele graphics. Als het veldcontract helder is, blijken veel “complexe” technieken variaties op hetzelfde patroon: evalueer afstand, gebruik die waarde om te beslissen wat de volgende stap is, en herhaal.