Interior mapping är en shaderteknik som får en plan husfasad att visa hela rum bakom fönstren, med väggar, golv och tak i rätt perspektiv. Joost van Dongen presenterade tekniken i en artikel år 2008. Den svenska utvecklaren Einar Öberg portade tekniken till Unity3D i februari 2011 som ett av sina första experiment med motorn.
- Original
- Einar Öbergs portering av Joost van Dongens teknik till Unity
- År
- Februari 2011, tekniken från 2007 och 2008
- Teknik
- Unity3D med egen shader, skriptade byggnader och en cykel för dag och natt
- Status i dag
- Scenen går inte att testa online eftersom koden är skriven för en äldre version av Unity
Den här artikeln förklarar experimentet och tekniken bakom det, men redaktionen har inte återskapat originalet. Informationen baseras på Einar Öbergs egna inlägg från 2011, Joost van Dongens beskrivning av metoden samt de källor som anges längst ner.

Vad bestod experimentet av?
Öberg hade nyligen börjat använda Unity3D och ville lära sig hur shaders fungerar i motorn. Hans strategi var att översätta en teknik från ett annat programmeringsspråk för att lära sig två saker samtidigt. Han valde van Dongens interior mapping som skapar en illusion av djup på en vägg med bara två trianglar. Allt sköttes av en enda shader.
Han byggde en liten stad runt shadern. Byggnaderna genererades procedurellt i ett rutnät med hjälp av skriptade meshes, inspirerade av ett stadsexempel som många Unity-användare kände till på den tiden. Han lade även till gator, trottoarer och gatlyktor. Ett enkelt system för övergång mellan dag och natt blandade två skyboxar och styrde både ljusförhållandena och antalet tända fönster.
Öberg var öppen med projektets brister. Scenen innehöll många punktljus utan optimering. Ljuskartor var enligt vad han förstod en funktion i Unitys betalversion. Varje byggnad krävde en egen instans av shadern, så meshes gick inte att slå ihop. Bildfrekvensen var ändå stabil och hela scenpaketet kunde laddas ner.

Så fungerar interior mapping
Idén är att varje pixel på fasaden räknar ut vad som skulle synas om väggen var borta. Van Dongen utvecklade tekniken 2007 i samband med sitt examensarbete. Han presenterade metoden i artikeln Interior Mapping: A new technique for rendering realistic buildings vid konferensen Computer Graphics International 2008.
- StrålenFrån kameran skickas en stråle genom pixeln på fasaden in i byggnaden.
- PlanenVåningar och väggar ligger med jämna mellanrum och behandlas som oändliga plan.
- TräffpunktenShadern räknar ut var strålen först möter ett tak, ett golv eller en vägg.
- TexturenTräffpunkten används som koordinat för att hämta färg ur en rumstextur.
Strålen och planen
Shadern använder bara den del av strålen som ligger bakom fasaden. Eftersom tak och väggar sitter med jämna mellanrum räcker det att avrunda strålens startposition uppåt eller nedåt till närmaste våning eller vägg. Det ger rummets gränser utan att någon geometri behövs. Strålens riktning bestämmer vilka plan som kan träffas, så bara tre av rummets sex sidor behöver testas.
Närmaste träff gäller
För varje plan beräknas avståndet längs strålen till skärningspunkten. Det kortaste avståndet avgör vilken yta som syns och träffpunkten blir texturkoordinat. Vid ett tak används de två horisontella koordinaterna medan höjden och djupet används för en sidovägg. Van Dongen optimerade 2007 beräkningarna så att tre skärningar kunde lösas samtidigt, något han i dag ser som mindre viktigt på modern hårdvara.
Begränsningarna
Rummen är lådor med texturer. Möbler och detaljer måste målas in i texturen och ser platta ut på nära håll. Van Dongen nämner fler artefakter, till exempel att samma rum kan se olika ut från olika delar av huset. I bakgrunden av ett spel märks det sällan.
Mottagandet
Öbergs portning till Unity blev en referens för den som ville prova tekniken i motorn. Alan Zucconi nämnde den 2018 i en översikt av interior mapping och påpekade att Unity hade förändrats mycket sedan 2011. Inlägget länkas fortfarande från Unitys diskussionsforum.
Tekniken har fått stort genomslag. Van Dongen skriver i en artikel på Game Developer från 2018 att SimCity från 2013 använde den och att Unreal Engine 4 har den inbyggd via funktionen InteriorCubeMap. Han tror även att Marvel’s Spider-Man använder metoden, men studion har inte bekräftat det.
Går det att bygga det här i 2026?
Ja. Det är enklare än 2011. Den gamla koden är skriven för en Unity-version från tiden före de nya renderingspipelines, så den måste skrivas om. I dag finns två vägar: visuellt i Shader Graph eller som kod i HLSL.
Shader Graph stödjer både Universal Render Pipeline och High Definition Render Pipeline. Strålberäkningen passar bäst i en Custom Function-nod, som tar in egen HLSL-kod i grafen. Den som hellre skriver allt för hand gör det i ett HLSLPROGRAM-block inom en ShaderLab-shader enligt Unitys manual om HLSL.

Bygg interior mapping i Unity
Arbeta i objektrymden så att byggnaden kan roteras och flyttas utan att rummen hamnar fel. Stegen nedan fungerar både i Shader Graph och ren HLSL.
1. Positioner
Transformera kamerans och fragmentets position till objektrymden och bestäm strålens riktning.
2. Planen
Använd tecknet på riktningen längs varje axel för att avgöra om det är golv eller tak, vänster eller höger vägg och bakvägg.
3. Avstånden
Avrunda till rummets storlek, beräkna avståndet till varje yta och välj det kortaste.
4. Färgen
Använd träffpunkten som koordinat för att sampla en textur eller cubemap och blanda resultatet med fasaden via en fönstermask.
I Custom Function-noden måste funktionsnamnet i hlsl-filen avslutas med _float eller _half och filen kräver en include-vakt med #ifndef. Flytta startpunkten något inåt i byggnaden så att strålen inte slår mot ytterväggen. Variera rummen med en slumpad textur per rum baserat på rummets heltalskoordinat. Mer information om shaders i webbläsaren finns i Fireshader samt i översikten över serien Visualeyezer.
Vad du kan lära dig av tekniken
Interior mapping visar att det som ser ut som geometri ofta bara är matematik i shadern. Två trianglar och en stråle räcker för att skapa rum i en hel stad.
Experimentet visar också ett bra sätt att lära sig en ny motor. Öberg valde en avgränsad teknik han förstod och byggde en liten värld runt den. Han delade resultatet öppet och bad om kritik. Femton år senare länkas hans port fortfarande från Unitys forum.
Vanliga frågor om interior mapping i Unity
Vem uppfann interior mapping?
Joost van Dongen utvecklade tekniken 2007 och presenterade den på Computer Graphics International 2008. Einar Öberg gjorde en tidig portning till Unity3D 2011.
Behövs någon extra geometri för rummen?
Nej. Fasaden kan bestå av bara två trianglar per vägg. Beräkningen av rummen sker i shadern per pixel.
Går det att använda interior mapping med Shader Graph?
Ja. Lägg strålberäkningen i en Custom Function-nod med HLSL-kod och använd utdatan som koordinat för en rumstextur i grafen.
Varför ser möblerna platta ut?
Varje rum är en låda med texturer på väggar, golv och tak. Möbler måste målas in i texturen eller läggas i extra lager, vilket kostar prestanda.
Kan Öbergs gamla kod användas i dag?
Skriptet skrevs för Unity 2011 och måste skrivas om för dagens renderingspipelines. Grundprincipen är oförändrad.
Källor
- Wayback Machine: Interior mapping in Unity3D, inear.se februari 2011
- Joost van Dongen: Interior Mapping, rendering real rooms without geometry, Game Developer 25 september 2018
- Joost van Dongen: Interior Mapping, A new technique for rendering realistic buildings (PDF)
- Alan Zucconi: Shader Showcase Saturday #9, Interior Mapping, 10 september 2018
- Habrador: Advanced shaders in Unity, Interior mapping
- Unity: Shader Graph
- Unity: Custom Function Node
- Unity: Writing HLSL shader programs
Uppgifterna kontrollerades 20 oktober 2026.

