Сітка клітин, невелика кількість правил
Ігри з падаючого піску є клітинними автоматами, прикрашеними фізикою. Світ — це сітка клітин, кожна клітина містить один матеріал — пісок, воду, вогонь, дерево, кислоту, дим, порожній — і коженtick, кожна клітина задає просте локальне питання: що знаходиться безпосередньо під мною та по діагоналі від мене? Відповідь визначає, чи рухається клітина, і кожен матеріал відповідає на запитання своїм власним невеликим посібником.
пісок: якщо нижче порожньо, падайте прямо вниз інакше, якщо ліворуч або праворуч від нижнього знаходиться порожньо, падіть по діагоналі інакше залишайтесь на місці вода: те саме, що й пісок, але також розповсюджується в сторони в порожні сусідні клітини коли не може впасти — це те, що змушує її накопичуватися рівномірно вогонь: має тривалість життя; запалює горючі сусіди (дерева); стає димом dім: піднімається замість того, щоб падати, розсіюється з часом Ніякого з цього немає в сенсі гідродинаміки з фізичного підручника — немає поля тиску, немає терміну в'язкості, рівняння Нав’є-Стокса ніде в коді. Це цифровий еквівалент справжнього піщаного пагорба: окремі зерна, які дотримуються «якщо є місце нижче мене», достатньо, щоб в сукупності виробляти розпізнаваною як рідина поведінку, так само, як Conway’s Game of Life створює органічно виглядаючий угруповання з чотирьох правил без будь-якої біології.
Це еквівалентність цифрового піщаного пагорба: окремі зерна, які дотримуються «якщо є місце нижче мене», достатньо, щоб в сукупності виробляти розпізнаваною як рідина поведінку, так само, як Conway’s Game of Life створює органічно виглядаючий угруповання з чотирьох правил без будь-якої біології.
sand: if below is empty, fall straight down
else if below-left or below-right is empty, fall diagonally
else stay put
water: same as sand, but also spread sideways into empty neighbours
when it can't fall — this is what makes it pool flat
fire: has a lifespan; ignites flammable neighbours (wood); becomes smoke
smoke: rises instead of falling, dissipates over time
Объяснение важности порядка обновления
Наивный слева-направо, сверху-вниз проход через сетку создает видимый смещение: ячейка, которая уже упала на этом шаге, может быть пересмотрена и снова упасть в том же шаге, поэтому песок выглядит так, будто он падает неестественно по диагональной линии. Стандартное решение - обрабатывать строки снизу вверх (так, чтобы ячейка никогда не падала в слот, который еще не разрешен), и чередовать или случайным образом менять направление слева-направо каждый раз, что отменяет смещение по диагонали и заставляет песочные горки оседать симметричным углом покоя вместо того, чтобы наклоняться в одну сторону.
Реакції: чому кислота, вогонь та вода не є незалежними
Найцікавішим аспектом пісочницею матеріалів є не жодна окрема речовина, а таблиця парних взаємодій між ними: вогонь торкається деревини і запалює її, зрештою залишаючи попіл; вогонь торкається води та створює пару і гасить його; кислота торкається майже всього і розчиняє його у порожнечу протягом кількох тиків; вода торкається вогню і гасить його, але вода торкається лави (якщо вона присутня) і перетворюється на пару. Кожна умова повинна знати лише про два сусідні типи клітин — складну поведінку великої пісочниці не виникає з жодного складної правила, а з'єднує багато простих правил двох тіл по великій сітці, не від одного складного правила
Угол опису, в клітин
Реальні зернисті матеріали утворюють характерний кут опису — приблизно 30–35° для сухого піску — через те, що частинка залишається на місці, поки сила тертя може протистояти гравітації похилу під нею, і ковзає, коли похил стає занадто крутим. Сандова автоматика відтворює подібне безкоштовно: клітина падає діагонально лише тоді, коли дві клітини поруч з нижчою клітиною заблоковані, що геометрічно обмежує наскільки крутим може бути стабільний піщаний пагорб майже точно 45° клітинна сходиця — грубе, сіткове представлення кута опису, і гарний приклад простого місцевого правила, яке відтворює реальну макроскопічну властивість матеріалу.
Чому цей підхід масштабується, де не масштабуються реальні симуляції рідин
Фізично точна симуляція рідини (розв’язування системи рівнянь у всьому полі, як це роблять розв’язки SPH або на основі сітки Navier–Stokes, які використовуються деінде на цьому сайті) потребує вирішення системи рівнянь по всьому полю кожного кроку. Автомат падаючого піску дивиться лише на безпосередніх сусідів кожної клітинки, тому він надзвичайно паралельний і дуже простий — тисячі активних клітинок з частотою 60 кадрів за секунду в браузерному вікні, без розв’язування матриць. Угоди полягають у тому, що це не є кількісно точним: воно не дасть вам правильну висоту бризкання чи правильний потік рідини через щілину. Що воно дає вам замість цього — те, що здається рідиною, піском або вогнем для людського ока на інтерактивній швидкості, що для іграшки-песочниця є саме правильною угодою.
Frequently asked questions
Чи є симуляція падаючого піску справжнім фізичним явищем?
Ні — це клітинна автоматика, а не розв’язувач рівнянь гідродинаміки. Немає тиску чи поля швидкості; кожна клітина просто перевіряє сусідні клітини та рухається відповідно до правил для кожного матеріалу. Це виглядає фізично, тому що правила були розроблені, щоб імітувати гравітацію та потік, а не тому, що основна математика базується на ньютонівській гідродинаміці.
Чому пісок іноді здається, що тече нерівномірно в один бік?
Це артефакт порядку оновлення: якщо сітку сканують у фіксованому ліворуч-направо, зверху-вниз, клітини, які вже рухалися цього циклу, можуть бути перераховані та знову переміщені, що спотворює все в один діагональний бік. Зміна напрямку сканування або випадкове її змішування кожного циклу усуває цей ухил.
Як взаємодіють матеріали, такі як вогонь та кислота, між собою?
Через невелику таблицю правил для кожної пари, перевіряється на межі кожної клітини — вогонь запалює сусіднє дерево та гасить його сусідньою водою, кислота розчиняє майже будь-якого сусіда протягом кількох циклів і так далі. Складні за зовнішнім виглядом ланцюгові реакції виникають від з’єднання багатьох простих правил для двох матеріалів на великій сітці, а не від однієї складної правила.
Спробуйте наживо
Усе, що вище, працює прямо у вашому браузері — відкрийте Sand Automaton і змінюйте параметри під час роботи. Нічого не встановлюється, нічого не завантажується на сервер, уся модель живе в одній вкладці.
▶ Відкрити симуляцію Sand Automaton