Gedeeld: natheid + kleurstof per cel
Schilder een laag waterverf en laat hem drogen
De rand droogt donkerder op, 1,3 tot 2,5 keer het midden, vastgelegd in een test.
Game Tailors
Bron: De wetenschap van het simuleren
De teken-app waarin het papier echt is. Geen reclame. Geen accounts. Geen persoonsgegevens: alleen anonieme tellingen, en die kun je uitzetten.
Game Tailors · Schieweg 15Y-40, 2627 AN Delft (NL)
KvK 92437702 · VAT NL866044474B01
info@gametailors.com · +31 6 4227 5919
© 2026 Game Tailors
De wetenschap van het simuleren
Professor Oops begon met een leeslijst: hoe onderzoekers van computeranimatie voorkomen dat gesimuleerde wind uit de hand loopt, waarom opgedroogde waterverf een donkere rand heeft, hoe een forensisch onderzoeker de hoek van een vallende druppel afleest. We hielden de effecten die mensen herkennen en lieten weg wat een tablet te veel kost. Deze pagina noemt elke bron, wat we eruit haalden, en wat we afwezen en waarom.

De simulatie van het spel begon in oktober 2026 met twee onderzoeksnotities. Die gingen door de literatuur over computergraphics en natuurkunde met één uitgesproken regel: geloofwaardig in plaats van natuurkundig juist, en de goedkoopste techniek die de kenmerken houdt die mensen herkennen.
Een donkere rand aan een opgedroogde laag waterverf is zo’n kenmerk. Net als de manier waarop een plas terugloopt in het spoor dat een vinger achterlaat, of hoe een druppel die schuin landt een lange vlek maakt. De precieze snelheid van een rimpeling op drie millimeter water is dat niet, in elk geval niet voor een kind met een tablet.
Het onderzoek kreeg uiteindelijk drie verschillende taken. Een paar methoden gingen bij naam de code in. Veel meer vormde het idee van een systeem en werd daarna op een eenvoudigere manier gebouwd. En een deel van het bekendste werk werd gelezen en bewust weggelaten. Elke bron op deze pagina heeft een van vier labels:
Direct toegepast: de code noemt de methode en volgt die
Vormde het ontwerp mee: het bepaalde een besluit, gebouwd of niet
Later gevonden: de code gebruikt een klassieke naam; het artikel erachter staat erbij om te controleren
Nog niet gebruikt: sterk werk waar we nog niet uit hebben geput
Het derde label is er uit eerlijkheid. De code gebruikt klassieke namen zoals multigrid, overrelaxatie, vorticity confinement, het koffievlekeffect, marangonistroming en de wet van Poiseuille zonder iemand te citeren. We noemen de artikelen achter die namen zodat een technicus ons kan controleren, en we beweren niet dat we ze hebben gevolgd.
Houd een föhn boven bloem en de bloem wordt van zijn hoopje geblazen en komt verder weg neer. Die wind komt van “stable fluids” Stam 1999, de enige vloeistofmethode in het spel die direct is toegepast. Hij is gemaakt voor animatie, niet voor technische nauwkeurigheid, en zijn grote pluspunt is dat hij niet kan ontsporen, hoe groot de tijdstap ook is. Elke stap verplaatst de wind langs zichzelf door terug te kijken naar waar elk stukje lucht vandaan kwam, en haalt dan het deel van de stroming weg dat zich ophoopt.
We veranderden hem op drie plekken, elk met een reden. Van boven gezien zit lucht niet gevangen in het vlak van het papier: een ventilator die naar beneden blaast is een bron, een vuur dat lucht omhoogzuigt is een put. Dus wordt maar een deel van de correctie toegepast, en de druk is “afgeschermd”: zijn bereik ebt over een korte afstand op het papier weg. Er is geen viscositeitsstap, alleen een zachte algemene demping. En kleine wervelingen worden in leven gehouden door vorticity confinement, een techniek die de code bij naam noemt; die gaat terug op Steinhoff en Underhill Steinhoff 1994 en kwam de graphics in met Fedkiw, Stam en Jensen Fedkiw 2001.
De drukoplossing heeft een eigen verhaal. De eerste lucht gebruikte een vast aantal Gauss-Seidel-rondes, hetzelfde soort relaxatie als het korte recept van Stam voor games Stam 2003. We ontdekten dat die scheef trok: tocht blies ongeveer een vijfde harder de ene kant op dan de andere, en het midden van een windvlaag lag een halve cel lager en naar rechts van waar hij werd geblazen. Gauss-Seidel werkt cellen in leesvolgorde bij, elk met buren die in dezelfde ronde al zijn bijgewerkt, dus het antwoord hangt af van de hoek waar je begint.
Die ontdekking was van ons, niet uit een artikel. De oplossing was een klassieke methode, zorgvuldig gebruikt. Multigrid Brandt 1977, Briggs 2000 strijkt glad op het fijne rooster en lost wat overblijft op op grovere roosters, waar fouten die de hele pagina beslaan kort van bereik en goedkoop te verwijderen worden. Onze rondes zijn Jacobi-rondes, elke cel uit de ronde ervoor, en de buren van een cel worden in paren opgeteld, zodat wind die links-rechts gespiegeld is een correctie krijgt die tot op de bit gespiegeld is.
De GPU-route in onze notities Harris 2004, WebGL fluid werd niet genomen. De lucht draait op de CPU, in een WebAssembly-kernel in een Web Worker, en die kernel komt tot op de bit overeen met de gewone JavaScript-versie. Jacobi werd daar gekozen om de symmetrie, niet voor parallelle hardware.
Beide vakken lossen dezelfde druk op voor één ventilator op het luchtrooster van 64 × 48 van de computer, vanuit niets, en besteden evenveel werk. Het multigridvak is de oplosser van het spel, stap voor stap: eerst het grofste rooster, dan één V-cyclus per niveau, dan meer V-cycli. Het Gauss-Seidel-vak draait de gewone methode op dezelfde vergelijking, één ronde tegelijk. Tik op een vak om de ventilator te verplaatsen, of druk op Verplaats de ventilator. Waar je op let: multigrid laat bijna meteen een grof antwoord zien en zijn volledige antwoord na ongeveer vijf rondes werk, al dicht bij het juiste; Gauss-Seidel kruipt naar buiten, en zijn midden (het kruisje) ligt naast dat van de ventilator (de ring). Zet de afscherming uit om te zien hoe langzaam het bereik van één ronde zich over een hele pagina verspreidt.
Drie werken waar we nog niet uit hebben geput, zouden de eerste toetsen van deze keuzes zijn. McAdams, Sifakis en Teran McAdams 2010 is multigrid voor vloeistoffen in de graphics, het naaste eerdere werk bij onze oplosser. Het leerboek van Bridson Bridson 2016 zou vraagtekens zetten bij onze snelheden in het midden van de cellen in plaats van op de celwanden. Het artikel van Chorin uit 1968 Chorin 1968 is een voorloper van de projectiestap zelf.
volgende update In het uitgebrachte spel vlakt staand water zich in een gewoon tempo uit, zonder vaart. In de volgende update blijft het gaan als het eenmaal beweegt. Trek een vinger door een plas en het water loopt meteen terug in het spoor; een dun laagje beweegt nauwelijks.
De techniek heet “virtuele buizen”. Elke cel is met een buis verbonden met zijn vier buren. Wat een buis deze stap draagt, is wat hij de vorige stap droeg, versneld door hoeveel hoger het water aan één kant staat. Het idee gaat terug op O’Brien en Hodgins O'Brien 1995, en kwam bij ons via het werk over hydraulische erosie van Mei, Decaudin en Hu Mei 2007 en het ondiepe water op kleine schaal van Dagenais et al. Dagenais 2018. Dat laatste gebruikt ook cellen van een halve millimeter en behandelt viscositeit impliciet, net als onze code, al is onze viscositeitsterm apart afgeleid, uit de wet van Poiseuille Sutera 1993. Water als hoogteveld gaat nog verder terug, op Kass en Miller Kass 1990.
De regel gebruikt echte constanten: de zwaartekracht op haar ware 9,81 m/s², geschaald naar cellen van een halve millimeter, en de echte viscositeit van water van 1 mm²/s. Daar loopt hij ook tegen zijn grens aan. Een golf op 3 mm echt water loopt met 17 cm/s, tien cellen in één stap, sneller dan een stap kan dragen en stabiel blijven. Dus de duw is begrensd. De grens wint in de praktijk altijd, en golven in het spel lopen met ongeveer 7 mm/s, zo’n 25 keer langzamer dan echte. De regel heeft de juiste vorm en echte constanten, en wordt bewust afgeremd.
volgende update Een plas van 6 cm × 4 cm en ongeveer 1 mm diep, met de cellen van een halve millimeter van het spel, in de 30 rondes per seconde van het spel. Elke tweeënhalve seconde trekt een vingertop erdoorheen; trek er ook zelf je vinger door, of druk op Trek een vinger erdoor. Waar je op let: met buizen vult het spoor zich bijna meteen weer. Schakel naar de uitgebrachte regel en hetzelfde spoor vult zich veel langzamer. Maak de vloeistof dikker en de buizen verliezen hun vaart. Lage richels blijven liggen: een oppervlak dat tussen buren bijna vlak is, wordt met rust gelaten. Buizen verplaatsen alleen water, dus het totaal blijft gelijk.
Uit echte zwaartekracht klimt de duw per ronde van ongeveer 0,003 bij 0,03 mm tot meer dan 10 bij 1,5 mm; het spel houdt hem vanaf ongeveer 0,08 mm op 0,2.
| waterdiepte (mm) | g·dt²·h·keep, uit echte g en ν | wat het spel gebruikt, begrensd |
|---|---|---|
| 0,03 | 0,01167 | 0,01167 |
| 0,0337 | 0,01644 | 0,01644 |
| 0,0378 | 0,02316 | 0,02316 |
| 0,0424 | 0,03259 | 0,03259 |
| 0,0475 | 0,04583 | 0,04583 |
| 0,0533 | 0,06437 | 0,06437 |
| 0,0599 | 0,09027 | 0,09027 |
| 0,0672 | 0,1264 | 0,1264 |
| 0,0754 | 0,1765 | 0,1765 |
| 0,0846 | 0,246 | 0,2 |
| 0,0949 | 0,3415 | 0,2 |
| 0,1064 | 0,4723 | 0,2 |
| 0,1194 | 0,65 | 0,2 |
| 0,134 | 0,8895 | 0,2 |
| 0,1504 | 1,209 | 0,2 |
| 0,1687 | 1,63 | 0,2 |
| 0,1893 | 2,177 | 0,2 |
| 0,2124 | 2,878 | 0,2 |
| 0,2383 | 3,763 | 0,2 |
| 0,2674 | 4,86 | 0,2 |
| 0,3 | 6,196 | 0,2 |
| 0,3366 | 7,796 | 0,2 |
| 0,3777 | 9,68 | 0,2 |
| 0,4238 | 11,87 | 0,2 |
| 0,4755 | 14,37 | 0,2 |
| 0,5335 | 17,21 | 0,2 |
| 0,5986 | 20,4 | 0,2 |
| 0,6716 | 23,97 | 0,2 |
| 0,7536 | 27,94 | 0,2 |
| 0,8455 | 32,34 | 0,2 |
| 0,9487 | 37,23 | 0,2 |
| 1,0644 | 42,65 | 0,2 |
| 1,1943 | 48,66 | 0,2 |
| 1,3401 | 55,34 | 0,2 |
Bron: Berekend uit echte zwaartekracht, de echte viscositeit van water en de grens van het spel, bij de ronde van 1/30 s van het spel.
Een hoopje ketchup blijft een hoopje; verf vloeit uit. In het echt is dat een zwichtspanning: de pasta stroomt pas als hij hard genoeg wordt geduwd. Smeringstheorie voor zulke dunne “Bingham”-lagen Liu 1989 geeft een stroom die afhangt van diepte en helling, en onze onderzoeksnotitie schreef die uit. De code doet iets veel eenvoudigers. Pasta stroomt alleen naar een buur waar zijn oppervlak meer dan een drempel per materiaal hoger staat, en dan in verhouding tot het teveel. De diepte doet niet mee. De code noemt het “Bingham-achtig”, en dat is het eerlijke woord.
Twee andere artikelen vormden de smurrie op dezelfde manier, als ideeën. Het smelten en stromen van Carlson et al. Carlson 2002 stond op de leeslijst, en we gebruikten niets van de methode. Onze smurrie stroomt gewoon minder naarmate er meer van is opgesteven. Sumner, O’Brien en Hodgins Sumner 1999 duwden zand, modder en sneeuw opzij als hoogtekolommen en lieten steile kolommen inzakken; ons wegschuiven en inzakken doet hetzelfde zonder dat er iets verloren gaat, al wordt geen van hun parameters gebruikt. Opgehoopte korrels lawinen voorbij een vaste stijging per cel, uit dezelfde familie drempelregels als het zandhoopmodel van zelfgeorganiseerde kritikaliteit Bak 1987.
Strijk een laag waterverf op het papier, laat hem drogen, en zijn rand wordt donkerder dan zijn midden. Laat schoon water in een drogende laag vallen en het duwt de kleur naar buiten tot een bloem. Die kenmerken komen meer dan uit welk ander artikel ook uit één artikel: “Computer-Generated Watercolor” van Curtis, Anderson, Seims, Fleischer en Salesin Curtis 1997. Dat gaf ons het denkmodel: water op het vel, water in de vezels, pigment dat naar de randen wordt gevoerd.
Het gaf ons niet de methode. Curtis et al. draaien een kleine vloeistofsimulatie op het papier, met een snelheidsveld, een masker van het natte gebied, een stroming naar buiten berekend uit een vervaagd masker, en glacislagen samengesteld met de Kubelka-Munk-optica van verf. Het spel heeft helemaal geen snelheid in het papierwater. Elke cel wisselt water en kleurstof uit met zijn buren naar hun verschil in natheid, doorgelaten door een vezelpatroon, en elk plekje droogt even snel, tenzij het wordt verwarmd. De rand verschijnt toch, omdat de dunne rand het eerst leegloopt en water er naartoe uitvlakt en kleur meeneemt. Een test controleert dat de rand 1,3 tot 2,5 keer zo sterk uitkomt als de laag erbinnen.
Het vezelpatroon is het enige wat we hielden van MoXi Chu 2005, een prachtig realtime inktmodel gebouwd op lattice-Boltzmannstroming op de GPU. Die methode legden we opzij als mogelijk speciaal penseel. Wat overbleef, is het idee dat ruis in de vezels het natte front breekt. Hetzelfde vezelveld bepaalt nu ook hoe snel papier brandt en warmte geleidt. De verspreiding die van de verzadiging afhangt in onze notities, die scherpere natte fronten zou geven, werd niet gebouwd. De realtime waterige verf van Van Laerhoven en Van Reeth Van Laerhoven 2005 stond ook in de notities; dat is ook dynamica op de GPU, en we namen er niets specifieks uit over.
Een opgedroogde koffiedruppel heeft een donkere ring om een reden die Deegan et al. Deegan 1997 uitlegden: vloeistof die aan een vastgepinde rand verloren gaat, wordt van binnenuit aangevuld, en die stroming voert de vaste deeltjes naar buiten. De korrels in het spel rijden ook met het water mee naar een drogende rand. Dat klopt alleen in het mechanisme. Er is geen vastgepinde contactlijn, geen extra verdamping aan de rand, en niemand heeft de machtswet uit het artikel getest.

Echte verf verstrooit licht en neemt het ook op. Daarom kan lichte verf donkere bedekken. Het klassieke model daarvan is dat van Kubelka en Munk Kubelka 1931, en onze onderzoeksnotitie raadde aan de twee getallen ervan per pigment op te slaan. Een moderne methode die erop voortbouwt, Mixbox Sochorová 2021, mengt digitale verf prachtig, maar de licentie is niet-commercieel, en dat sloot hem uit. De open bibliotheek spectral.js spectral.js werd overwogen en niet overgenomen.
Het spel doet iets goedkopers. Een kleur is hoeveel licht hij wegneemt, per rood, groen en blauw kanaal. Lagen tellen hun absorbantie op en het licht dat overblijft, neemt er exponentieel mee af, en dat is wat de wet van Beer-Lambert beschrijft Swinehart 1962; de code noemt het optische dichtheid. Twee dunne lagen worden samen donkerder zoals echte dat doen. Wat verloren gaat, is verstrooiing: lichte verf kan donkere niet bedekken. Hoe kleuren mengen heeft het hele model.
Water klimt in papier met een front dat beweegt met de wortel uit de tijd. Lucas Lucas 1918 en Washburn Washburn 1921 werkten die wet uit, en Richards Richards 1931 schreef de vergelijking voor stroming door poreuze stoffen waarin natter papier water beter geleidt, de oorzaak van een scherp nat front. Niemand heeft het natte front van het spel al tegen √t gemeten. Als het klopt, zou het een echte vergelijking met de natuurkunde zijn in plaats van een gelijkenis. Vóór Curtis et al. simuleerde Small Small 1991 waterverf op een Connection Machine; Curtis et al. noemen dat baanbrekend, en wij hebben het niet gelezen.
Spat verf over het vel en elke druppel laat een vlek achter. Een druppel die recht naar beneden komt, laat een rond stipje achter; een die onder een lage hoek binnenscheert, laat een lang ovaal achter dat wijst in de richting waarin hij ging. Onderzoekers op een plaats delict gebruiken dit om uit te zoeken waar bloed vandaan kwam. De regel is eenvoudig: de breedte van de vlek gedeeld door de lengte is de sinus van de hoek waaronder de druppel binnenkwam. Hij wordt toegeschreven aan Balthazard en collega’s in 1939, en wij pasten hem direct toe uit een uitleg over vloeistofdynamica van Neitzel en Smith Neitzel & Smith.
Het spel rekent de inslaghoek van elke druppel uit zijn eigen snelheid over het vel en zijn snelheid naar beneden, zodat een druppel die snel en laag wordt gegooid een lange vlek achterlaat en een die recht naar beneden valt een ronde. Het uitrekken is begrensd, zodat heel vlakke druppels geen dunne strepen worden.
De rest van het spatonderzoek in onze notities bouwden we niet: hoeveel vingers zich vormen rond een druppel die op een plaat slaat Mehdizadeh 2004, hoe de rand van een kroonspat groeit en uiteenvalt Agbaglah 2014, en kroonvingers van niet-bolvormige druppels Anirudh 2026. Spatnatuurkunde van dit soort weegt de traagheid van een druppel tegen zijn oppervlaktespanning af, het getal van Weber. Nergens in de code bestaat een getal van Weber. Staartjes en satellietdruppeltjes komen uit eenvoudige regels.
Druppels vliegen van links binnen en landen onder de hoek die je instelt. Tik op het papier om er een naar een plek te gooien, of druk op Gooi een druppel. Waar je op let: bij 90° zijn de vlekken rond; onder 30° rekken ze uit tot twee keer hun breedte en meer; onder ongeveer 14,5° groeien ze niet verder dan 4 : 1, waar de echte regel zou doorgaan. Zet de omtrek aan om de vorm volgens de echte regel rond de nieuwste vlek te zien.
De forensische regel geeft 11,5 : 1 bij 5° en 2 : 1 bij 30°; het spel volgt hem tot 14,5° en blijft daaronder op 4 : 1.
| inslaghoek (graden) | de forensische regel, 1 / sin α | het spel, begrensd op 4 |
|---|---|---|
| 5 | 11,474 | 4 |
| 6 | 9,567 | 4 |
| 7 | 8,206 | 4 |
| 8 | 7,185 | 4 |
| 9 | 6,392 | 4 |
| 10 | 5,759 | 4 |
| 11 | 5,241 | 4 |
| 12 | 4,81 | 4 |
| 13 | 4,445 | 4 |
| 14 | 4,134 | 4 |
| 15 | 3,864 | 3,864 |
| 16 | 3,628 | 3,628 |
| 17 | 3,42 | 3,42 |
| 18 | 3,236 | 3,236 |
| 19 | 3,072 | 3,072 |
| 20 | 2,924 | 2,924 |
| 21 | 2,79 | 2,79 |
| 22 | 2,669 | 2,669 |
| 23 | 2,559 | 2,559 |
| 24 | 2,459 | 2,459 |
| 25 | 2,366 | 2,366 |
| 26 | 2,281 | 2,281 |
| 27 | 2,203 | 2,203 |
| 28 | 2,13 | 2,13 |
| 29 | 2,063 | 2,063 |
| 30 | 2 | 2 |
| 31 | 1,942 | 1,942 |
| 32 | 1,887 | 1,887 |
| 33 | 1,836 | 1,836 |
| 34 | 1,788 | 1,788 |
| 35 | 1,743 | 1,743 |
| 36 | 1,701 | 1,701 |
| 37 | 1,662 | 1,662 |
| 38 | 1,624 | 1,624 |
| 39 | 1,589 | 1,589 |
| 40 | 1,556 | 1,556 |
| 41 | 1,524 | 1,524 |
| 42 | 1,494 | 1,494 |
| 43 | 1,466 | 1,466 |
| 44 | 1,44 | 1,44 |
| 45 | 1,414 | 1,414 |
| 46 | 1,39 | 1,39 |
| 47 | 1,367 | 1,367 |
| 48 | 1,346 | 1,346 |
| 49 | 1,325 | 1,325 |
| 50 | 1,305 | 1,305 |
| 51 | 1,287 | 1,287 |
| 52 | 1,269 | 1,269 |
| 53 | 1,252 | 1,252 |
| 54 | 1,236 | 1,236 |
| 55 | 1,221 | 1,221 |
| 56 | 1,206 | 1,206 |
| 57 | 1,192 | 1,192 |
| 58 | 1,179 | 1,179 |
| 59 | 1,167 | 1,167 |
| 60 | 1,155 | 1,155 |
| 61 | 1,143 | 1,143 |
| 62 | 1,133 | 1,133 |
| 63 | 1,122 | 1,122 |
| 64 | 1,113 | 1,113 |
| 65 | 1,103 | 1,103 |
| 66 | 1,095 | 1,095 |
| 67 | 1,086 | 1,086 |
| 68 | 1,079 | 1,079 |
| 69 | 1,071 | 1,071 |
| 70 | 1,064 | 1,064 |
| 71 | 1,058 | 1,058 |
| 72 | 1,051 | 1,051 |
| 73 | 1,046 | 1,046 |
| 74 | 1,04 | 1,04 |
| 75 | 1,035 | 1,035 |
| 76 | 1,031 | 1,031 |
| 77 | 1,026 | 1,026 |
| 78 | 1,022 | 1,022 |
| 79 | 1,019 | 1,019 |
| 80 | 1,015 | 1,015 |
| 81 | 1,012 | 1,012 |
| 82 | 1,01 | 1,01 |
| 83 | 1,008 | 1,008 |
| 84 | 1,006 | 1,006 |
| 85 | 1,004 | 1,004 |
| 86 | 1,002 | 1,002 |
| 87 | 1,001 | 1,001 |
| 88 | 1,001 | 1,001 |
| 89 | 1 | 1 |
| 90 | 1 | 1 |
Bron: De regel zoals Neitzel & Smith hem geeft, en de begrensde versie ervan in het spel.

Laat eten op het vel liggen, spring drie dagen vooruit, en pluizige schimmelkolonies hebben zich eroverheen verspreid. Echte schimmel groeit als vertakkende draden. De leerboekmanier om vertakkende vormen in een computer te laten groeien is diffusiebegrensde aggregatie Witten 1981: deeltjes zwerven willekeurig rond tot ze de groep raken en blijven plakken. Dat geeft prachtige, levensechte vertakkingen.
We wezen het om twee redenen af. Letterlijke willekeurige zwervers zijn traag, en een sprong in de tijd zou betekenen dat we elk uur van de drie dagen moeten simuleren. In plaats daarvan is de straal van elke kolonie een formule van haar leeftijd. “Kom drie dagen later terug” is één som per kolonie, geen drie dagen werk, en dat is precies waar onze onderzoeksnotitie om vroeg.
Andere patroonmakers werden genoteerd en ook niet gebouwd: Gray-Scott-reactiediffusie zoals de handleiding van Karl Sims die presenteert Sims, en de transportnetwerken van slijmzwammen van Jones Jones 2010. Het artikel van Turing uit 1952 over patronen uit reactie en diffusie Turing 1952 is de klassieker achter de eerste. (Een opmerking in de vuurcode zegt “reaction-diffusion”, maar bedoelt warmte en brandstof; het vuur is een voortbewegend front, geen Turing-patroon.)
De eigen regel van het spel Twee kolonies op dezelfde klok, vier simulatie-uren per seconde. De willekeurige zwervers groeien door diffusiebegrensde aggregatie: zwervers dwalen rond tot ze de kolonie raken en blijven plakken. Het andere vak is de formule van het spel voor een gewone kolonie. Elk beeld krijgen de zwervers een vast budget aan stappen, zoals een apparaat dat zou doen. Waar je op let: druk op “Kom over 3 dagen terug”. De formule springt er meteen naartoe; de zwervers moeten stap voor stap inhalen, en de stappenteller laat de rekening zien. Verlaag het budget om een tragere tablet na te spelen.

Houd een lucifer bij papier en een rafelig front vreet zich naar buiten, met een zwartgeblakerde rand. We lazen ons in over brandend papier in de graphics: drie artikelen van Melek en Keyser, een ervan over buigende brandende lucifers en verfrommelend brandend papier Melek 2005, Melek 2006, Melek 2007, en Larboulette, Quesada en Dumas, die papier vezel voor vezel laten branden Larboulette 2013. Onze onderzoeksnotitie wees het opkrullende vel van massa’s en veren uit dat artikel op schrift af als overdreven. Een zuiver voorbeeld van een bron die werd geraadpleegd en afgewezen.
Het vuur in het spel is warmte die zich door het papier verspreidt, met brandstof die opbrandt. Papier vat vlam bij een vaste drempel, ongeveer 230 °C; het toeval zit in plaats daarvan in de brandstof en in brandsnelheden die aan het vezelveld vastzitten. Er is geen zuurstofveld: koolstofdioxide en alles wat er bovenop ligt, staan voor “geen lucht”. Water houdt een cel op het kookpunt tot hij droog is. Geen regel bepaalt de snelheid van het front, toch komt die uit op ongeveer 1,1 mm per seconde, dezelfde orde als één gepubliceerde meting voor papier. Hij is daar niet op geijkt.
Sterk werk over vuur waar we nog niet uit hebben geput: het klassieke verspreidingsmodel van Rothermel voor natuurbranden Rothermel 1972, op de verkeerde schaal voor papier maar nuttig als begrip; vlammen in de graphics Nguyen 2002; en twee natuurkundige artikelen over langzaam brandende papierfronten Maunuksela 1997, Zik 1998.
Trek een koperdraad van een batterij naar een lampje en het lampje gaat branden. Het spel lost de spanning op in elke cel van het vel, met de echte geleiding van elke cel, tot de stroom in evenwicht is. Technici kennen de methode als successieve overrelaxatie Young 1954. Juist het probleem van stroom die zich door een vlakke plaat verspreidt, was het onderwerp van een artikel dat Kirchhoff in 1845 als student schreef Kirchhoff 1845. We volgden geen van beide artikelen; dit zijn de klassieke namen voor wat de code doet. Het antwoord klopt tot op drie cijfers met de wet van Ohm: 0,273 A door koper en een lampje.
Druppel afwasmiddel op melk met kleur erop en de kleuren schieten ervan weg, en stoppen dan. Dat is marangonistroming Scriven 1960: zeep verlaagt de oppervlaktespanning en het oppervlak trekt weg naar waar die hoger is. In het spel neemt het vet van de melk de zeep op, zodat de uitbarsting vanzelf stopt. Een echte oplosbare oppervlakteactieve stof drijft een stroming van eindige grootte aan Roché 2014; de onze maakt ook een eindig plekje vrij en loopt geleidelijk uit, van dezelfde soort. Niemand heeft hem vergeleken met de schaalwetten uit dat artikel, en daardoor is hij een goede kandidaat voor een echte test.
Sommige van de nuttigste bronnen waren helemaal geen artikelen. Vallendzandspellen werken al jaren aan de vraag hoe veel materialen elkaar kunnen ontmoeten zonder dat iemand elk paar uitschrijft.
Sandspiel Bittker 2019 stopt elke cel in 32 bits: een soort, twee registers en een klok. The Powder Toy Powder Toy houdt elk element bij als een plat record met eigenschappen; het water ervan naast zout heeft 1 kans op 50 om zout water te worden. Wij gingen een andere kant op: Professor Oops is geen cellulaire automaat van losse soorten. Elke cel draagt veel doorlopende lagen, zoals water, warmte, kleurstof en opgeloste stoffen, omdat een laag kleur of een langzaam opdrogende plas hoeveelheden nodig heeft, geen soorten.
Noita Purho 2019 liet zien hoe een grote zandwereld snel blijft: teken en bereken alleen de rechthoeken opnieuw die veranderd zijn. Wij bouwden hetzelfde idee op onze eigen manier, met kleine vierkante tegels waarvan rustige maar om de paar rondes worden bijgewerkt. Niets in de code zegt dat het van Noita kwam, dus dat beweren we ook niet.
Het grootste idee kwam uit een lezing over The Legend of Zelda: Breath of the Wild Dohta 2017, zoals onze notities het samenvatten: stuur wisselwerkingen via gedeelde elementen, zodat het aantal regels groeit als elementen maal materialen in plaats van materialen maal materialen. De opgeloste elementen van het spel en de reactietabel die door data wordt gestuurd, zijn zo gebouwd. Zo bruist azijn op zuiveringszout en maakt citroen rode kool roze: zuur, de base van zuiveringszout en de kleur van de rode kool zijn gedeelde elementen, dus elk materiaal dat ze draagt, doet mee. Gebouwd voor verrassingen vertelt dat verhaal.
Donkerblauw: druk, elke ronde. Lichtblauw: komt tot rust, om de paar rondes. Papier: stil, slaapt tot iets het wekt. Illustratie van de tegelklok van het spel: een plas die zich in de ene hoek verspreidt en een kaars die in een andere brandt, op een pagina die in tegels is gesneden.
Elke bron op deze pagina komt uit in een eigen hoofdstuk. Dit zijn de draden, met de test die elk ervan vasthoudt.
Gedeeld: natheid + kleurstof per cel
De rand droogt donkerder op, 1,3 tot 2,5 keer het midden, vastgelegd in een test.
Gedeeld: het windveld u, v
De bloem wordt van zijn hoopje geblazen en komt verder weg neer, en een test houdt de drukoplossing tot op de bit spiegelexact.
Gedeeld: waterdiepte + stroming in buizen
volgende update Het water loopt terug in het spoor, gemeten door een test.
Gedeeld: geleiding per cel
De stroom komt tot rust door overrelaxatie en klopt tot op drie cijfers met de wet van Ohm, gecontroleerd door een test.
Gedeeld: water + warmte + vezel
Doorweekt papier vat geen vlam: zijn water houdt het op het kookpunt tot het droog is, vastgelegd in een test.
Gedeeld: veld van de oppervlaktespanning
Kleuren schieten weg en stoppen als het vet de zeep bindt, vastgelegd in een test.
Gegroepeerd per systeem. Bij elke bron staat hoe die werd gebruikt. De meeste werden gecontroleerd op record en samenvatting; de vier die helemaal zijn gelezen, zijn gemarkeerd. Een bron die hier staat en die we niet hebben gebruikt, staat er als lacune, nooit als invloed.
Direct toegepast. Wat we deden: de semi-Lagrangiaanse advectie en drukprojectie van de wind, in de code bij naam genoemd. Afwijkingen: geen viskeuze diffusie, maar een deel van een afgeschermde correctie.
Vormde het ontwerp mee · helemaal gelezen. Wat we deden: in de notities aangeraden voor rook. De Gauss-Seidel-rondes van de eerste lucht leken op het recept ervan; ze zijn inmiddels vervangen.
Wat we deden: de GPU-route niet genomen; de lucht draait op de CPU en in WebAssembly. Onze Jacobi-rondes zijn er voor de spiegelsymmetrie.
Wat we deden: een referentie-implementatie in de notities; niet gebruikt.
Later gevonden · helemaal gelezen. Wat we deden: de code noemt vorticity confinement en gebruikt een kracht van dezelfde vorm, afhankelijk van de snelheid. De repo citeert dit artikel nergens.
Wat we deden: de oorsprong van de techniek hierboven.
Wat we deden: een grondleggend artikel over multigrid; onze oplosser noemt multigrid en citeert niets.
Wat we deden: de standaardinleiding in V-cycli en volledige multigrid; goed leesvoer voor wie onze oplosser controleert.
Nog niet gebruikt. Multigrid voor vloeistoffen in de graphics: het naaste eerdere werk bij onze oplosser.
Nog niet gebruikt. Het standaardwerk; het zou de eerste toets zijn van de keuzes voor de lucht, ook van snelheid in het midden van de cellen in plaats van op de wanden.
Nog niet gebruikt. Een voorloper van de projectiestap.
Later gevonden · helemaal gelezen. Wat we deden: de oorsprong van virtuele buizen, volgens latere bronnen. Onze regel heeft de vorm ervan, met vier buren in plaats van acht en een viskeuze rem in de volgende update.
Wat we deden: de verwijzing in de notities naar virtuele buizen, voor dikke lagen. De buizen kwamen er in de volgende update bij naam in; niets wijst erop dat de formules uit dit artikel werden gebruikt.
Wat we deden: dezelfde cel van 0,5 mm en impliciete viscositeit in de volgende update, al is onze term afgeleid uit Poiseuille. De uitgebreide buizen en meerlaagse hoogtekaarten ervan werden niet gebouwd.
Wat we deden: de voorloper van water als hoogteveld.
Wat we deden: de code noemt de 3ν/h² van Poiseuille en berekent die in de volgende update uit de echte ν van water; dit overzicht is een citeerbare geschiedenis van de wet.
Wat we deden: het idee van een drempel, ja; de formule voor de stroom, nee.
Wat we deden: niet de methode. Onze smurrie beweegt gewoon minder naarmate hij opstijft.
Wat we deden: materiaal als hoogtekolommen opzij duwen en steile laten inzakken, zonder dat er iets verloren gaat. Geen van de parameters ervan wordt gebruikt.
Nog niet gebruikt. Het zandhoopmodel: uit dezelfde familie drempelregels als het inzakken van onze korrels.
Vormde het ontwerp mee · helemaal gelezen. Wat we deden: de belangrijkste afzonderlijke invloed op het papiermodel, om het gedrag. Niets van de methode: geen snelheidslaag, masker, vervaging of glaceren.
Wat we deden: in de notities; geen dynamica op de GPU en geen Kubelka-Munk gebouwd.
Wat we deden: de vezelruis gehouden die de stroming doorlaat; lattice Boltzmann opzijgelegd als mogelijk speciaal penseel.
Wat we deden: de code zegt “coffee-ring effect”. Klopt alleen in het mechanisme: geen vastgepinde lijn, geen piek in verdamping aan de rand, geen test van de machtswet.
Nog niet gebruikt. Waterverf op een Connection Machine, wat Curtis et al. baanbrekend noemen.
Nog niet gebruikt. De √t-wet van capillaire opstijging.
Nog niet gebruikt. Afstand van het front als √t. De nuttigste lacune: niemand heeft het front van het spel ertegen gemeten.
Nog niet gebruikt. Diffusiviteit die van de verzadiging afhangt: de formele versie van de D ∝ water² die we niet bouwden, en de oorzaak van scherpe natte fronten.
Vormde het ontwerp mee, niet gebouwd. Wat we deden: de notities raadden K en S per pigment aan; de code heeft geen van beide, en geen verstrooiingsterm.
Vormde het ontwerp mee, niet gebouwd. Wat we deden: Mixbox; uitgesloten door de niet-commerciële licentie.
Vormde het ontwerp mee, niet gebouwd. Wat we deden: overwogen; niet in de app. (De README beschrijft zeven primaire krommen, bemonsterd op 38 punten van 380 tot 750 nm, met Kubelka-Munk met één constante.)
Wat we deden: de kleur van het spel is wat de wet beschrijft: absorbantie telt op, licht is exp(−absorbantie), per kanaal. De code noemt het optische dichtheid.
Wat we deden: de code noemt de stroming en citeert niets.
Wat we deden: ons vrijmaken is ook eindig en loopt geleidelijk uit, van dezelfde soort. Niet vergeleken met de schaalwetten ervan: een goede kandidaat voor een echte test.
Direct toegepast. Wat we deden: sin α = W/L voor elke druppelvlek, met een grens aan het uitrekken.
Wat we deden: in de notities; geen getal van Weber in de code.
Wat we deden: in de notities; niet als regel gebouwd.
Wat we deden: in de notities; niet als regel gebouwd.
Vormde het ontwerp mee, afgewezen. Wat we deden: zwervers te traag bevonden; de straal van schimmel is in plaats daarvan een formule van de leeftijd.
Vormde het ontwerp mee, niet gebouwd. Wat we deden: Gray-Scott als idee genoteerd; niet in de simulatie.
Vormde het ontwerp mee, niet gebouwd. Wat we deden: een extra idee in de notities; niet gebouwd.
Nog niet gebruikt. Het klassieke artikel over patronen uit reactie en diffusie.
Wat we deden: geraadpleegd voor brandend papier; geen vervorming door branden gebouwd.
Wat we deden: zoals hierboven.
Wat we deden: zoals hierboven.
Vormde het ontwerp mee, afgewezen. Wat we deden: het opkrullen met massa’s en veren op schrift afgewezen als overdreven.
Nog niet gebruikt. Het klassieke verspreidingsmodel voor natuurbranden: vocht, wind, helling. De verkeerde brandstofschaal voor papier; nuttig als begrip.
Nog niet gebruikt. Vuur in de graphics: vlammen in plaats van fronten op papier.
Nog niet gebruikt. Een aanknopingspunt voor brandende fronten in papier; niet gelezen.
Nog niet gebruikt. Een aanknopingspunt voor brandende fronten; niet gelezen.
Wat we deden: een historische zijsprong. Het gaat over wat het spel doet, stroom die zich over een vlak vel verspreidt; de repo noemt alleen de wetten van Kirchhoff.
Wat we deden: de stroomkring gebruikt overrelaxatie, heen en dan terug; geen bronvermelding in de repo.
Wat we deden: gelezen voor de indeling van cellen; we kozen veel doorlopende velden per cel boven losse soorten.
Wat we deden: materialen als platte records met eigenschappen.
Wat we deden: het idee om alleen bij te werken wat veranderd is, zoals beschreven in een interview met Purho op 80.lv. Onze tegels zijn op onze eigen manier gebouwd; niets zegt dat ze van Noita kwamen.
Wat we deden: elementen × materialen, via notities uit de tweede hand: de opgeloste elementen en de reactietabel die door data wordt gestuurd.