2D створення дощу (та динаміка рідини)


11

Я експериментую з погодними умовами в моїй грі, і мене вразило те, як Starbound впорався з дощем. В основному, коли дощ потрапляє на землю, він або розсіюється горизонтально (і поглинається землею), або створює груди води (коли краплі дощу потрапляють всередину ями в землі).

Це відео наочно демонструє: http://imgur.com/gallery/CKCGKbG

Я знаю, як змусити падіння дощу і перевірити, де він потрапляє в землю, але там я застряг. Моє запитання: як це можна було створити? І як можна було б моделювати воду настільки ідеально, не вбиваючи продуктивності?

Спасибі заздалегідь!


1
Ключовим є система динаміки рідини. Я підозрюю, що, коли крапля дощу потрапляє на землю, вона утворює невелику кількість води в тому місці, яке потім обробляється системою динаміки рідини, як зазвичай. На плоских поверхнях протидіє випаровуванню, але коли схили змушують зосереджуватись води в певній місцевості, приплив сильніший за випаровування і починають утворюватися калюжі.
Філіп

Відповіді:


9

Водна система Starbound - це насправді 2D стільникові автомати на плитці. Кожна плитка на екрані, яка не містить переднього шару плитки, здатна утримувати воду. Кількість води розраховується за допомогою стільникових автоматів.

Більше інформації про цю техніку тут:

http://www.gamasutra.com/view/feature/134736/an_intro_to_cellular_automation.php

http://www.jgallant.com/2d-liquid-simulator-with-cellular-automaton-in-unity/

Що стосується крапель дощу, то це частинки. Вони служать головним чином, щоб підробити, що насправді вода падає з неба. Вода накопичується лише тому, що гра знає, що зараз йде дощ. Окремі краплі не мають нічого спільного з фактичним формуванням водних басейнів.

Те, як вони накопичують його, визначається, де в верхньому шарі землі є отвори. Якщо є ділянка, в якій може накопичуватися вода, клітини в цій області відповідно збільшують свій рівень води.

Starbound також займається тиском води, і їх техніка відтворення досить дивовижна. Вони мають найкращу 2D реалізацію фізики моделювання води за допомогою стільникових автоматів, які я коли-небудь бачив.

Ось примітивний погляд на двигун рідкої фізики, використовуючи вищезгадану техніку стільникових автоматів. Частина подачі стає трохи складнішою, оскільки ваша вода представлена ​​числовим значенням.

http://www.jgallant.com/images/pressuretest.gif

У цьому прикладі дуже простим вдосконаленням було б приховати водяні клітини, у яких менше 1 повної одиниці води у плитці, якщо під нею немає твердої плитки. Але тоді ви приховуєте потік води. Замість того, щоб приховувати її, вам доведеться визначити, як тече вода, а потім намалювати відповідний водний спрайт на його місці.


2
Додамо до того, що частинки краплі дощу підробляють ефект падаючої води: маленькі бризки крапель на поверхню також не пов'язані з фактичними частинками дощу, а окремим ефектом. Поєднання виглядає так, ніби краплі роблять бризки.
Фельсір

Ого, саме це я шукав. Я думав, що мені доведеться вдатися до якоїсь надмірно складної системи рідин на основі частинок, але сітчасті системи, здається, працюють так само добре. Хоча, щоб додати тиск води, я думаю, вам просто потрібен другий масив, який зберігає значення тиску і перетікає з високого тиску в місця низького тиску? Якщо так, це все одно не повинно бути занадто важким для комп'ютера.
Пандакі

Ні, все, що вам потрібно зробити з тиском, - це додати таке правило, як, наприклад, плитка може містити більше 1 повної одиниці рідини. Якщо в цій плитці є більше 1 повної одиниці рідини, і вона не здатна текти відповідно до звичайного набору правил - тоді змусьте її текти вгору. Відрегулюйте так, щоб вона дозволяла стікати більше води, виходячи з величини тиску цієї плитки.
jgallant

3

Існує маса способів наблизитись до цього. Як завжди "це залежить"

І тому я думаю, один із способів був би таким способом .. Враховуючи довільну «занурення в землю», накладайте «водний ящик», який його перетинає. Земля та водоробний ящик малюються шарами так, що земля відображається спочатку, а вода - після.

кожного разу, коли крапля води потрапляє на занурення в землю, додайте її до водопроводу. Коли водна коробка досягне магічного числа, додайте рядок води. Так, скажімо, 10 крапель землі в зануренні, це додає одну лінію до води.

Так що кажіть, що водна коробка - 32X32 пікселів. Додайте один рядок кольору води від 0,31-31,31. Ще 10 крапель, намалюйте лінію від 0,30 - 31,30. Отож, як накопичуються краплі, ви накопичуєте водяну коробку знизу до її повного заповнення.

Сподіваюся, що це має сенс.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.