Suyun sorunları
- Çoğu oyun arazi değişikliğine izin vermez ve bu mantıklıdır. Her oyunun buna ihtiyacı yoktur.
- Su içeren oyunlarda su akışının nasıl ele alınacağı üzerine düşünmek gerekir.
- Mevcut basit modeller tatmin edici değildir; daha iyi bir model bulmak için araştırma gerekir.
Kurulum
- Simülasyon bir grid üzerinde çalışmalıdır ve araziyle aynı gridin kullanılması tercih edilir.
- Simülasyonun ortalama ölçeği yaklaşık 1 metre civarında olmalıdır.
- Su, arazi üzerindeki bir yükseklik alanı olarak varsayılabilir ve dikey yönde akmaz.
- Su akabilmelidir ve simülasyon hataları nedeniyle sihirli biçimde ortadan kaybolmamalıdır.
- Simülasyon kontrol edilebilir bir kararlılığa sahip olmalı ve hızlı çalışmalıdır.
Çözüm olmayanlar
- Smoothed Particle Hydrodynamics çok etkileyici sonuçlar verir, ancak farklı bir problemi çözer.
- Jos Stam'in Stable Fluids yaklaşımı tüm akışkan hacmini ele alır ve hızlı değildir.
Sığ su denklemleri
- Sığ su denklemleri dikey yön boyunca ortalama alarak geriye 2D denklemler bırakır.
- "Sığ" kısmı, su sütununun tipik dikey boyutunun yatay ölçekten çok daha küçük olduğunu varsayar.
Izgara
- Akışkanlar dinamiğinde ızgara önemlidir ve genellikle staggered grids kullanılır.
- staggered grids, su yüksekliği/yoğunluk gibi değerleri kare hücrelerde saklar; hız ise hücreler arasındaki kenarlarda tutulur.
Sanal boru yöntemi
- Su akışı, su hücrelerinin sanal borularla birbirine bağlı olduğu varsayılarak simüle edilir.
- Bu yöntem üç adımdan oluşur: akışı hızlandırma, çıkış ölçekleme ve su sütununu güncelleme.
Akışı hızlandırma
- Akış, komşu su hücreleri arasındaki su yüksekliği farkına göre hızlandırılır.
- Simülasyonun kararlı bir duruma yakınsaması için sürtünme eklenir.
Su sütununu güncelleme
- Her su hücresi için komşu akışlara bağlı olarak su eklenir veya çıkarılır.
Çıkış ölçekleme
- Bir hücredeki su miktarının negatif olmaması için dışarı akan akış ayarlanır.
Arazi yüksekliği
- Suyun arazi üzerinde hareket etmesini sağlamak için arazi yüksekliği eklenir.
Sınır koşulları
- Simülasyon sınırlarında ne olacağı dikkate alınmalıdır.
- Duvar, giriş, çıkış gibi koşullar sınır akışı değerleri ayarlanarak tanımlanır.
Viskozite
- İnce su tabakalarının hareket etmekte zorlanması için viskozite eklenir.
Tam simülasyon kodu
- Simülasyon kodu, birkaç 2D dizi üzerinde çalışan 4 adet
for döngüsünden oluşur.
Modelin dezavantajları
- Atalet ve hız difüzyonu yoktur; hızlı akan su bir göle girdiğinde her yöne yayılır.
Bonus: altıgen/üçgen ızgara
- Su, üçgen bir ızgara kullanılarak da simüle edilebilir; bu, altıgen ızgaranın duali olarak görülebilir.
1 yorum
Hacker News görüşü
Akışkan simülasyonlarında suyun birikip komşu hücreleri etkilemesi sorunundan bahsediliyor. Bunun, prosedürel olarak üretilen oyunlarda paralelleştirmenin zor olmasının nedenlerinden biri olduğu belirtiliyor
Akışkan simülasyonu geliştirirken güzel sonuçlara bakıp zaman kaybetme riskinin yüksek olduğundan bahsediliyor
Animal Crossing'in kaynak toplama yönteminin araziyi değiştirmeden verimli olduğundan bahsediliyor
Timberborn oyunundaki su fiziğinin oyunun önemli bir parçası olduğu belirtilerek tavsiye ediliyor
o3-mini-high kullanarak algoritmayı 3D olarak uygulayıp deneme deneyimi paylaşılıyor
Eğitim amaçlı bir sel simülasyonu tanıtılıyor; WebGL kullanarak komşu hücre tabanlı şekilde hücre değerlerini hesaplıyor
Su simülasyonunda atalet ve hız yayılımı eksikliği sorununu çözmenin bir yolu öneriliyor
Kişisel proje olarak başlayan bir erozyon simülasyonuna dair merak paylaşılıyor
Creeper World oyununda suyu simüle ettikten sonra üzerine bomba atma fikrinden bahsediliyor