Lazy Model Generation
Bachlor Theses topic
by Maarten Behn
Idea: extend Paper from Paul Merrell




Model Synthesis Algorithm
- Give every node every value
- Pick a node and choose one Value
- Check all other nodes values if they can still exist
- Go to 2
- Every node has been picked ⇒ done
Problems with Model Synthesis
- No partial regeneration when rules change
- Very hard to write your own rules
Shader Graph / Blender Geometry Nodes / etc.

Every possible configuration is valid?
My Idea


Valid solutions


Dependency


calculate path to all dependencies once in template.
Value types
- Number Set
- Position Set
- All Positions in Volume on a
- Grid
- Poissons sampling
- etc
- All Positions in Volume on a
- Build
Amount is defined
- n global
- n per other node
- by other node
Value is defined
- at Template generation
- callback at evaluation (Hook)
- by other node
Implementation
let builder = Builder::new()
.number_range(<Name>, |b|{b
.ammount(OneGlobal(<Name>))
.value(Const(3..=8))
.depends_on(<Name>)
})
.pos(<Name>, |b|{b
.ammount(OnePer(<Name>))
.value(Hook)
})
let template = builder.build(); let collapser = template.get_collasper();
for hook in collapser {
match hook {
NumberRangeHook { index, name } => {
let value = collapser.get_dependent(index, <OtherName>)
},
PosSetHook { name } => {
match name {
<Name> => {
},
<Name> => {
}
}
},
PosHook { name } => {
},
Build { name } => {
},
Undo { name } => {
},
None => {},
}
} Sources
https://paulmerrell.org
https://github.com/mxgmn/WaveFunctionCollapse
https://unity.com/de/features/shader-graph