2 puan yazan GN⁺ 2025-02-08 | 1 yorum | WhatsApp'ta paylaş

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

 
GN⁺ 2025-02-08
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

    • Prosedürel üretim paralelleştirmeye uygun olsa da, sonsuz alanlarda paralelleştirme zorlaşıyor
    • Bu konunun çok fazla araştırılmamış olduğuna dikkat çekiliyor
    • Nick McD'nin çalışması övülüyor ve simülasyon tasarımı nedeniyle onun çalışmasının da alan kısıtlarına sahip olduğu belirtiliyor
    • Su havzası sınırlarını prosedürel olarak üretip paralelleştirme yapmayı ve tüm su havzasını tek seferde simüle etmeyi öneriyor
  • Akışkan simülasyonu geliştirirken güzel sonuçlara bakıp zaman kaybetme riskinin yüksek olduğundan bahsediliyor

    • 2011'deki kendi GPU tabanlı akışkanlar dinamiği uygulama deneyimini paylaşıyor
    • Akışkanın (kanın), bir yüzeyde (doku) 2D olarak simüle edildiği ve yerçekimi ile yüzey eğimi dikkate alınarak mesh üzerine yansıtıldığı açıklanıyor
  • Animal Crossing'in kaynak toplama yönteminin araziyi değiştirmeden verimli olduğundan bahsediliyor

    • Ağaç kesip odun elde ediliyor, ancak belirli bir miktardan sonra cooldown gerekiyor
    • Arazi değiştirmenin gerekmediği oyunlarda bu yöntemin daha iyi olabileceği öneriliyor
  • Timberborn oyunundaki su fiziğinin oyunun önemli bir parçası olduğu belirtilerek tavsiye ediliyor

    • Suyu setlerle durdurup motorlarda ve tarlalarda kullanmanın bir yolunu bulmak oynanışın temel bir parçası
  • o3-mini-high kullanarak algoritmayı 3D olarak uygulayıp deneme deneyimi paylaşılıyor

    • Perlin noise'u sıfırdan yazıp arazi üretiminde kullandığını belirtiyor
  • 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

    • Model değerlerini değiştirerek büyük etkiler görülebileceği açıklanıyor
  • Su simülasyonunda atalet ve hız yayılımı eksikliği sorununu çözmenin bir yolu öneriliyor

    • Akış oklarının değerlerini komşu oklarla ortalayarak bunun çözülebileceği anlatılıyor
  • Kişisel proje olarak başlayan bir erozyon simülasyonuna dair merak paylaşılıyor

    • Erozyonu anlayamadığı için projenin yarım kaldığı belirtiliyor
  • Creeper World oyununda suyu simüle ettikten sonra üzerine bomba atma fikrinden bahsediliyor