개발 개요
출시일 :2013년 6월 12일
총 개발 기간 : 6개월(목표 4개월)
개발인원 : 3명 + alpha
타겟 플랫폼 : iOS 5.0 이상(iPhone, iPad 겸
용)
게임 엔진 : Cocos2d-x 2.0.4
개발 도구 : Xcode, Pixelmator, zwoptex
동영상 편집 도구: iMovie, Motion
개발관리 : Facebook Group, Google Doc
물은 유체!
• 유체流體 Fluid <--> Solid 固體 고체
• 액체와 기체를 합쳐서 부르는 용어
• 액체, 기체, 플라즈마
• 변형이 쉽고, 흐르는 성질이 있으며, 모양이
정해져 있지 않다.
• 점성, 압축성 (액체는 비 압축성)
물은 액체, 기체, 그리고 고체(얼음)
나비에-스톡스 방정식
● 점성이있는 유체의 운동을 기술하는 비선
형 편미분 방정식
● Claude-Louis Navier, George Gabriel
Stokes
● 수치적인 해법으로 푼다.
● 해석적인 해는 아직 미지의 영역
● 클레이 수학 연구소 밀레니엄 7대 난제의
하나, 상금 US $1,000,000
SPH 기법
Smoothed ParticleHydrodynamics
1970년대 말에 천문학 분야에서 성운이나 은
하계를 시뮬레이션하기 위해 고안된 입자 기
반의 유체 시뮬레이션 기법
21세기에 와서 CG나 게임에서 물을 표현하
는데 활용
53.
SPH 기법은?
일종의 확률통계적인 근사
Smoothing Kernel 함수가 핵심 역할
은하계를 구성하는 수천억 개의 별을 십만
개로 대신 시뮬레이션 한다.
물은 1g에 약 3.35 x 10^22 개의 어마어마한
수의 물 분자를 수십만 개 심지어 수백 개로
대신 시뮬레이션 한다.
54.
주요 논문
Müller etal, Particle-Based Fluid Simulation
for Interactive Applications, Switzerland,
2003http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.2.7720&r
ep=rep1&type=pdf
Clavet et al, Particle-based Viscoelastic
Fluid Simulation, Canada, 2005
http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.59.9379&rep=rep1&
type=pdf
SPH neighbour interactions
SPH기법의 속살을 잘 보여주는 동영상
가까이 이웃한 입자 간의 상호작용을 처리하기
위해서 입자들의 위치 관계를 빠르게 검색해
야 한다.
이웃한 입자들 간의 상호작용을 적절하게 처리
해야 액체의 점성이나 비압축성등이 표현된다.
http://youtu.be/h2ovz9Cwstc
시뮬레이션 계산은?
중력, 밀도,압력, 점성, 충돌
1. 중력을 적용
2. 이웃 검색으로 점성 계산
3. 속도에 점성을 적용(일종의 마찰력)
4. 밀도, 압력을 계산
5. 압력을 적용 (일종의 힘)
6. 충돌 처리
7. 반복
66.
물 물리 게임개발기 검색
Interview: Disney Mobile's Tim FitzRandolph on 'Where's
My Water?'
http://content.usatoday.com/communities/gamehunters/po
st/2011/10/interview-disney-mobiles-tim-fitzrandolph-on-
wheres-my-water/1#.UjCXq2QkJnI
Sprinkle behind the scenes (Game physics bits)
http://tuxedolabs.blogspot.kr/2011/11/sprinkle-behind-
scenes.html
유체 물리 엔진개발은 어려운
가?
유튜브에서 유체 시뮬레이션 동영상들을 쉽게 찾을 수 있다.
온전하게 잘 동작하는 모습이 공개되어 있다.
소스까지 공개된 경우도 적지 않다.
학술 논문도 바로 코딩할 수 있을 정도로 상세하게 의사 코
드가 실려있는 것도 있다.
하지만 실제로 유체 물리 엔진을 제대로 만들기는 매우 어렵
다.
물 물리 엔진테스트 동영상
http://youtu.be/KsdDqKLh6pc
이런 건 잘 공개하지 않는 영상
'와들 와들 펭귄즈'를 위한 물 물리 엔진 테스트
동영상
엔진이 불안정 해져서 결국은 폭발한다.
74.
유체 물리 엔진개발의 어려움
논문의 의사 코드를 실제로 동작하는 코드로 옮겨도 겨우 돌아가기
는 하겠지만 실제적으로 사용하기 위해서는 많은 조정이 필요하
다. 이런 조정을 튜닝이라 한다.
강체 물리 엔진의 경우는 상업적인 엔진이 아닌 공개 엔진이라고 해
도 튜닝이 딱히 필요 없을 정도로 탄탄하게 실행된다. 특별하게 극
단적인 설정만 하지 않는다면 게임에서 물리 엔진에 의한 불안정
함 없이 안심하고 사용할 수 있다.
하지만 유체 물리 엔진의 경우는 아직 범용적으로 막 사용할 수 있
는 엔진은 드물다.
75.
모바일 환경에서는 더어렵다
최신 쿼드코어 스마트폰이라고 해도 데스크탑
에 비해 성능이 떨어지는 모바일 환경에서는
유체를 시뮬레이션 하기가 벅차다. 저사양 스
마트폰이라면 2D 로도 벅차다.
모바일 환경에서 안정적으로 돌아가는 유체 물
리 엔진을 위해서는 많은 최적화와 튜닝이 필
요하다.
76.
구글링이 가장 좋은선생
선행 연구자들Tom Madams
Grant Kot
박사 과정 연구도 간접적으로 도움이 되었다
● 지구과학 내 기상학 전공
○ 강우 현상 시뮬레이션
● 화산재 확산 연구 참여
○ 화산재 확산 시뮬레이션
77.
Tom Madams’ Blog
Whymy fluids don’t flow
http://imdoingitwrong.wordpress.com/2010/
12/14/why-my-fluids-dont-flow/
Box2D 로도 가능한가?
강체물리엔진인 Box2d로 비슷하게라도 유체
를 흉내내려면 입자를 원 모양의 다각형 강체
로 해서 적절한 충돌 계수와 마찰 계수를 주면
된다.
http://<wbr />www.emanueleferonato.com/2012/<wbr />05/16/<wbr />simulating-
mudslime-with-box2d-<wbr />bitmaps-and-filters/
하지만 이 방법으로는 물이 쏟아지거나 튀는 모
습 정도는 엇비슷하게 표현할 수 있어도 점성
이 있는 액체를 제대로 표현할 수는 없다.
81.
SPH vs Box2d의 속도
SPH : 유체 입자를 단순한 점으로 다룬다.
Box2d : 유체 입자를 원형의 다각형 강체로
처리한다.
충돌이나 마찰 처리 등에 많은 비용이 든다.
결국 같은 입자 수로 구현한다면 SPH에 비
해 Box2d 엔진이 훨씬 느리게 된다.
Signed Distance Fields란?
부호 있는 거리 장
일종의 스칼라 장으로 가장 가까운 경계 면
까지 거리 값으로 채워진다.
부호 있는 거리 장은 경계면 내부와 외부를
부호로 구분한다. 실제 8비트(0~255)로 저
장할 경우 128을 경계로 한다.
95.
Signed Distance Fields장점
자유로운 형태의 지형을 나타낼 수 있다.
지형의 복잡도와 상관없이 충돌 검출에 상수 시간 밖에 걸리지
않는다.
충돌 면에 수직인 법선 벡터를 손 쉽게 구할 수 있다. Signed
Distance Fields는 지형의 경계 면에서 법선 벡터를 손쉽게 구
할 수 있다. 미분 연산으로 입자가 있는 지점의 그레디언트 값
을 구하면 그게 바로 법선 벡터의 성분이 된다.
해상도를 낮추어도 자연스런 충돌 검출과 처리가 가능하다.
98.
Signed Distance Fields생성
오프라인에서 미리 계산한다.
해상도를 낮추더라도 실시간으로는 생성하
기는 모바일에서는 무리다.
여러가지 알고리즘들이 있지만 게임에 사용
한 건 8SSEDT 이다.
게임의 핵심 기능
●얼음이 얼고 녹는 건 게임의 핵심 아이디어
● 처음엔 단순하게 구현할 계획
○ 얼음 영역에 물이 충돌하면 얼음 타일로 교체
● Pixel Junk Shooter 를 보고 욕심을 내보기
로 결심
○ 물리적으로 구현해 보자
○ 결국 얼음은 물 입자가 멈춰 있는 상태
112.
물의 상 변화모델
이것은 결국 게임이다
열역학적인 요소는 무시(!)
물의 상태를 단순화
뜨거운 물, 미지근한 물, 차가운 물, 녹은 물
얼음1, 얼음2
113.
물총에 따른 물의상태 변화
차가운 물총차가운 물을 발사
얼음 영역에 닿으면 얼음이 된다.
녹으면 다시 차가운 물이 되고 다시 얼 수 있다.
뜨거운 물총
뜨거운 물을 발사
얼음에 닿으면 얼음을 녹이고 미지근한 물이
된다
미지근한 물은 더 식지 않고 그대로 있는다.
114.
얼음은 2종류
얼음1 :차가운 물이 얼음 영역에서 얼면 생
긴다.
시간이 지나면 녹아서 다시 차가운 물이 된
다.
얼음2 : 시작부터 얼음이다.
시간이 지나도 녹지 않는다.
뜨거운 물에 닿아야 만 녹아서 차가운 물이
된다.
117.
얼음이 어는 과정
1.물 입자는 이동 하면서 충돌 맵 상태를 읽는다.
2. 충돌 맵의 속성이 얼음 영역이면 일정 확률로
그 물 입자에 얼음 속성을 부여한다.
3. 얼음 속성이 부여된 물 입자는 물리 엔진에서
역학적 처리를 중지 시킨다.
4. 단, 시간 지연을 줘서 서서히 멈춘다.
118.
얼음이 녹는 과정(시간경과)
1. 일정 시간이 경과하면 얼음 상태로 있는 물 입자
의 속성을 녹은 물 상태로 만든다.
2. 녹은 물 상태의 물 입자는 다시 역학적 처리를
재개한다.
다만, 얼음 영역에 있더라도 다시 얼음 속성이 되
지 않는다.
3. 얼음 영역을 벗어나면 차가운 물 속성이 된다.
119.
얼음이 녹는 과정(뜨거운물)
1. 뜨거운 물이 닿으면 일정 확률로 녹은 물 상태가
되고 그 뜨거운 물은 미지근한 물이 된다.
2. 녹은 물 상태의 물 입자는 다시 역학적 처리를
재개한다. 다만, 얼음 영역에 있더라도 다시 얼음
속성이 되지 않는다. 얼음 영역을 벗어나면 차가
운 물 속성이 된다.
3. 미지근한 물은 계속 그 상태를 유지하고 얼음 영
역에 있더라도 얼지 않는다.