2P by neo 21일전 | ★ favorite | 댓글 1개

물의 문제점

  • 대부분의 게임은 지형 수정이 불가능하며, 이는 합리적임. 모든 게임이 이를 필요로 하지는 않음.
  • 물이 있는 게임에서는 물의 흐름을 어떻게 처리할지 고민해야 함.
  • 기존의 간단한 모델들은 만족스럽지 않으며, 더 나은 모델을 찾기 위해 연구가 필요함.

설정

  • 시뮬레이션은 그리드에서 작동해야 하며, 지형과 동일한 그리드를 사용하는 것이 바람직함.
  • 시뮬레이션의 평균 규모는 약 1미터 정도여야 함.
  • 물은 지형 위의 높이 필드로 가정할 수 있으며, 수직으로 흐르지 않음.
  • 물은 흐를 수 있어야 하며, 시뮬레이션 오류로 인해 마법처럼 사라지지 않아야 함.
  • 시뮬레이션은 제어 가능한 안정성을 가져야 하며, 빠르게 작동해야 함.

비해결책

  • Smoothed Particle Hydrodynamics는 매우 인상적인 결과를 제공하지만, 다른 문제를 해결함.
  • Jos Stam의 Stable Fluids는 전체 유체 부피를 다루며, 빠르지 않음.

얕은 물 방정식

  • 얕은 물 방정식은 수직 방향으로 평균화하여 2D 방정식을 남김.
  • "얕은" 부분은 물 기둥의 전형적인 수직 크기가 수평 규모보다 훨씬 작다는 것을 가정함.

격자

  • 유체 역학에서는 격자가 중요하며, 일반적으로 staggered grids를 사용함.
  • staggered grids는 물 높이/밀도 등을 사각형 셀에 저장하고, 속도는 셀 사이의 가장자리에 저장함.

가상 파이프 방법

  • 물 셀은 가상의 파이프로 연결되어 있다고 가정하여 물 흐름을 시뮬레이션함.
  • 흐름 가속, 유출 스케일링, 물 기둥 업데이트의 세 단계로 구성됨.

흐름 가속

  • 인접한 물 셀의 물 높이 차이에 따라 흐름을 가속함.
  • 마찰을 추가하여 시뮬레이션이 안정적인 상태로 수렴하도록 함.

물 기둥 업데이트

  • 각 물 셀에 대해 인접한 흐름에 따라 물을 추가하거나 제거함.

유출 스케일링

  • 셀의 물 양이 음수가 되지 않도록 유출 흐름을 조정함.

지형 고도

  • 물이 지형 위로 이동하도록 지형 고도를 추가함.

경계 조건

  • 시뮬레이션의 경계에서 발생하는 일을 고려해야 함.
  • 경계 흐름 값을 설정하여 벽, 유입, 유출 등의 조건을 정의함.

점성

  • 점성을 추가하여 작은 물 층이 이동하는 데 어려움을 겪도록 함.

전체 시뮬레이션 코드

  • 시뮬레이션 코드는 몇 개의 2D 배열에 대한 4개의 for 루프로 구성됨.

모델의 단점

  • 관성 및 속도 확산이 없으며, 빠른 물 흐름이 호수로 들어가면 모든 방향으로 퍼짐.

보너스: 육각형/삼각형 격자

  • 삼각형 격자를 사용하여 물을 시뮬레이션할 수 있으며, 이는 육각형 격자의 이중으로 볼 수 있음.
Hacker News 의견
  • 유체 시뮬레이션에서 물이 축적되어 인접한 셀에 영향을 미치는 문제를 언급함. 이는 절차적으로 생성된 게임에서 병렬화가 어려운 이유 중 하나임

    • 절차적 생성은 병렬화에 적합하지만, 무한한 도메인에서는 병렬화가 어려움
    • 이 주제에 대한 탐구가 많이 이루어지지 않았음을 지적함
    • Nick McD의 작업을 칭찬하며, 그의 작업도 시뮬레이션 설계로 인해 도메인에 제약이 있음을 언급함
    • 물 분지 경계를 절차적으로 생성하여 병렬화 및 전체 물 분지를 한 번에 시뮬레이션하는 방법을 제안함
  • 유체 시뮬레이션 개발 시 아름다운 결과를 보며 시간을 낭비할 위험이 큼을 언급함

    • 2011년에 자신의 GPU 기반 유체 역학 구현 경험을 공유함
    • 유체(혈액)가 표면(조직)에서 2D로 시뮬레이션되었고, 중력과 표면 기울기를 고려하여 메쉬에 투영되었음을 설명함
  • Animal Crossing의 자원 수집 방식이 지형 조작 없이 효율적임을 언급함

    • 나무를 베어 로그를 얻지만, 일정량 후에는 쿨다운이 필요함
    • 지형 조작이 필요 없는 게임에서는 이 방법이 더 나을 수 있음을 제안함
  • Timberborn 게임의 물리학이 게임의 중요한 요소임을 언급하며 추천함

    • 물을 막아 엔진과 밭에 사용하는 방법을 찾는 것이 게임 플레이의 필수적인 부분임
  • o3-mini-high를 사용하여 3D로 구현된 알고리즘을 실험한 경험을 공유함

    • Perlin noise를 처음부터 구현하여 지형 생성에 사용했음을 언급함
  • 교육용 홍수 시뮬레이션을 소개하며, WebGL을 사용하여 인접 셀 기반으로 셀 값을 계산함

    • 모델 값을 변경하여 큰 효과를 볼 수 있음을 설명함
  • 물 시뮬레이션에서 관성 및 속도 확산이 부족한 문제를 해결하는 방법을 제안함

    • 흐름 화살표의 값을 이웃 화살표와 평균화하여 해결할 수 있음을 설명함
  • 개인 프로젝트로 시작한 침식 시뮬레이션에 대한 호기심을 공유함

    • 침식을 이해하지 못해 프로젝트가 중단되었음을 언급함
  • Creeper World 게임에서 물을 시뮬레이션한 후 폭탄을 투하하는 아이디어를 언급함