2D Yağmur Oluşturma (ve Akışkanlar Dinamiği)


11

Bir maçta hava koşullarını deniyorum ve Starbound'un yağmuru işleme şeklinden çok etkilendim. Temel olarak, yağmur yere çarptığında ya yatay olarak dağılır (ve yer tarafından emilir) ya da su yığınları oluşturur (yağmur damlaları yerdeki bir deliğin içine indiğinde).

Bu video bunu açıkça gösteriyor: http://imgur.com/gallery/CKCGKbG

Yağmur yağmasını nasıl yapacağımı ve yere çarptığını nasıl kontrol edeceğimi biliyorum, ama sıkışıp kaldım. Sorum şu: bu nasıl yaratılabilir? Ve performans öldürmeden su akışını nasıl bu kadar mükemmel bir şekilde modelleyebiliriz?

Şimdiden teşekkürler!


1
Anahtar, akışkanlar dinamiği sistemidir. Bir yağmur damlası yere çarptığında, o pozisyonda az miktarda su ürettiğinden ve daha sonra her zamanki gibi sıvı dinamiği sistemi tarafından işlendiğinden şüpheleniyorum. Düz yüzeylerde buharlaşma ile karşı karşıyadır, ancak eğimler suyun bir alanda konsantre olmasına neden olduğunda, akı buharlaşmadan daha güçlüdür ve su birikintileri oluşmaya başlar.
Philipp

Yanıtlar:


9

Starbound'un su sistemi aslında 2B karo esaslı hücresel otomatlardır. Ekranda ön karo katmanı içermeyen her karo su tutabilir. Su miktarı hücresel otomata ile hesaplanır.

Bu teknik hakkında daha fazla bilgiyi burada bulabilirsiniz:

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/

Yağmur damlaları gelince, bunlar parçacıklar. Esas olarak gökten düşen su olduğu için sahte hizmet ederler. Su sadece oyunun yağmur yağdığını bildiği için birikir. Bireysel damlaların su havuzlarının gerçek oluşumu ile ilgisi yoktur.

Birikmesini sağlamanın yolu, toprağın üst katmanında deliklerin nerede olduğunu belirlemektir. Su biriktirebilecek bir alan varsa, o bölgedeki hücreler su seviyelerini buna göre arttırır.

Starbound ayrıca su basıncı ile ilgilenir ve bunların render tekniği oldukça şaşırtıcıdır. Şimdiye kadar gördüğüm hücresel otomata kullanarak su simülasyonları fizik en iyi 2D uygulaması var.

Yukarıda adı geçen hücresel otomata tekniğini kullanan bir sıvı fizik motorunun ilkel bir görünümü. Suyunuz sayısal bir değerle temsil edildiğinden, oluşturma bölümü biraz daha karmaşık hale gelir.

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

Bu örnekte, altında katı bir kiremit yoksa, 1 birimden daha az su içeren su hücrelerini kiremitinde gizlemek çok basit bir gelişme olacaktır. Ama sonra, su akışını saklıyorsunuz. Gizlemek yerine, suyun nasıl aktığını belirlemeniz ve ardından yerine uygun su spriteını çizmeniz gerekir.


2
Yağmur damlası parçacıklarının suya düşen etkiyi taklit etmesine ek olarak: yüzeydeki küçük damlacık sıçramaları da gerçek yağmur parçacıkları ile ilgili değil, ayrı bir etki ile ilgilidir. Kombinasyon , damlacıkların sıçramaları yapıyormuş gibi görünmesini sağlar .
Felsir

Vay canına, tam da aradığım şey buydu. Parçacıklara dayalı aşırı karmaşık bir sıvı sistemine başvurmam gerektiğini düşündüm, ancak ızgara sistemleri de işe yarıyor gibi görünüyor. Yine de, su basıncı eklemek için sadece basınç değerlerini depolayan ve yüksek basınçtan düşük basınçlı yerlere akan ikinci bir diziye ihtiyacınız var sanırım? Eğer öyleyse, bu hala bilgisayar için çok zor olmamalıdır.
Pandaqi

Hayır, basınçla yapmanız gereken tek şey, bir karonun 1'den fazla tam birim sıvı içermesine izin vermek gibi bir kural eklemektir. Bu karonun 1'den fazla tam sıvı birimi varsa ve normal kurallara göre akamazsa - yukarı doğru akmasını sağlayın. Döşemenin basınçlı değerine göre daha fazla su akmasını sağlayacak şekilde ayarlayın.
jgallant

3

Buna yaklaşmanın birkaç yolu var. Her zaman olduğu gibi 'değişir'

Ve sanırım tek bir yol bu şekilde olurdu .. Keyfi bir 'yere daldırma' verildiğinde onu sınırlayan bir 'su kutusu' kaplaması. Zemin ve su kutusu katmanlar halinde çizilir, böylece zemin önce su kutusu sonra gösterilir.

bir su damlası zemine daldığında her seferinde su kutusuna bir tane ekleyin. Su kutusu sihirli bir sayıya ulaştığında, bir su satırı ekleyin. Diyelim ki dipte 10 damla arazi, bu su kutusuna bir satır ekliyor.

Diyelim ki su kutusu 32X32 piksel. 0,31-31,31 arasında bir renk su ekleyin. 10 damla daha, 0,30 - 31,30 arasında bir çizgi çizin. Damlalar biriktikçe, su kutusunu alttan dolana kadar biriktirirsiniz.

Umarım mantıklıdır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.