SPH 기법을 이용한
2D 물 물리 엔진 개발
김성완
21세기 마법사
(주)젬스푼
소개
김성완 (kaswan)
현 인디 게임 개발자(젬스푼)
현 부산게임아카데미 외래교수
현 동의대학교 게임공학과 외래교수
오즈인터미디어 CTO
미리내소프트웨어 개발이사
- 대표작 -
'썬더' (1992)
'풀메탈자켓' (1996 미리내소프트웨어)
'g-Matrix3D' (소프트웨어 렌더러 2003)
'와들와들 펭귄즈' (2013 젬스푼)
와들와들 펭귄즈 개발기
개발 개요
출시일 : 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
아들
딸
초기 컨셉 삽질기
와들와들 펭귄즈
최종 컨셉 확정
기술, 아이디어, 감성
기술 : 물 물리 엔진
아이디어 : 물을 얼리거나 녹여서 길을 만든
다.
감성 : 가족애
2D 물 물리 엔진 개발
목차
1. 물 물리 엔진 게임
2. 물이란 무엇인가?
3. 유체 시뮬레이션
4. 물을 입자로 다루는 SPH 기법
5. Signed Distance Fields를 이용한 물과의 충돌 처리
6. 얼음이 얼고 녹는 물의 상 변화 처리
모바일용 물 물리 게임들
● Where’s My Water? (Disney 2011)
○ Where’s My Ferry?
○ Where’s My Mickey?
● Sprinkle (2011)
○ Sprinke Junior
○ Sprinkle Island
● Watee (2011)
● Splash !!! (2012)
Where’s My Water? (Swampy)
Sprinkle
Watee
Splash !!!
물이란 무엇인가?
수도물
바다
수증기
물은 유체!
• 유체 流體 Fluid <--> Solid 固體 고체
• 액체와 기체를 합쳐서 부르는 용어
• 액체, 기체, 플라즈마
• 변형이 쉽고, 흐르는 성질이 있으며, 모양이
정해져 있지 않다.
• 점성, 압축성 (액체는 비 압축성)
물은 액체, 기체, 그리고 고체(얼음)
얼음
물의 상변화
구름은 물의 기체 상태?
FLUID SIMULATION
Obama & NSE
Navier-Stokes Equation
나비에 스톡스 방정식
유체(액체 , 기체) 시뮬레이션
연속방정식
물의 운동 = 압력 + 중력 + 점성
나비에-스톡스 방정식
● 점성이 있는 유체의 운동을 기술하는 비선
형 편미분 방정식
● Claude-Louis Navier, George Gabriel
Stokes
● 수치적인 해법으로 푼다.
● 해석적인 해는 아직 미지의 영역
● 클레이 수학 연구소 밀레니엄 7대 난제의
하나, 상금 US $1,000,000
Fluid Dynamics 2003
Jos Stam
Jos Stam
• 1999 Siggraph
• “Stable Fluids”
• 2003 GDC
• “Real-Time Fluid Dynamics for Games”
• http://www.dgp.toronto.edu/~stam/
• Autodesk
Stable Fluids
Stable Fluids
Hellgate: London (2007)
입자 기반의 유체 시뮬레이션
SPH 기법
SPH 기법
Smoothed Particle Hydrodynamics
1970년대 말에 천문학 분야에서 성운이나 은
하계를 시뮬레이션하기 위해 고안된 입자 기
반의 유체 시뮬레이션 기법
21세기에 와서 CG나 게임에서 물을 표현하
는데 활용
SPH 기법은?
일종의 확률 통계적인 근사
Smoothing Kernel 함수가 핵심 역할
은하계를 구성하는 수천억 개의 별을 십만
개로 대신 시뮬레이션 한다.
물은 1g에 약 3.35 x 10^22 개의 어마어마한
수의 물 분자를 수십만 개 심지어 수백 개로
대신 시뮬레이션 한다.
주요 논문
Müller et al, 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
Particle-Based Fluid Simulation for Interactive
Applications
Particle-based Viscoelastic Fluid
Simulation
SPH neighbour interactions
SPH neighbour interactions
SPH 기법의 속살을 잘 보여주는 동영상
가까이 이웃한 입자 간의 상호작용을 처리하기
위해서 입자들의 위치 관계를 빠르게 검색해
야 한다.
이웃한 입자들 간의 상호작용을 적절하게 처리
해야 액체의 점성이나 비압축성등이 표현된다.
http://youtu.be/h2ovz9Cwstc
빠른 이웃 검색을 위한 자료구
조
단순 격자로 구획을 나누어서 처리
상호작용 계산
Smoothing Kernel 함수
커널 함수의 역할
적은 입자 수로 천문학적으로 많은 입자의
연속체 적인 값을 근사할 수 있게 해준다.
시뮬레이션의 품질, 안정성, 속도는 커널 함
수의 선택에 크게 의존한다.
커널 함수를 정하는 것은 어느 정도 시행착
오적인 경험에도 의존한다.
Smoothing Kernels (Müller)
밀도, 압력, 점성
near-density kernel (Clavet)
시뮬레이션 계산은?
중력, 밀도, 압력, 점성, 충돌
1. 중력을 적용
2. 이웃 검색으로 점성 계산
3. 속도에 점성을 적용(일종의 마찰력)
4. 밀도, 압력을 계산
5. 압력을 적용 (일종의 힘)
6. 충돌 처리
7. 반복
물 물리 게임 개발기 검색
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
Where’s My Water?
water physics
물입자 갯수 비교
Where’s My Water
200개 (추정)
Sprinkle
600개
Waddle Waddle Penguins
600개
성능 테스트
유체 물리 엔진 개발은 어려운
가?
유튜브에서 유체 시뮬레이션 동영상들을 쉽게 찾을 수 있다.
온전하게 잘 동작하는 모습이 공개되어 있다.
소스까지 공개된 경우도 적지 않다.
학술 논문도 바로 코딩할 수 있을 정도로 상세하게 의사 코
드가 실려있는 것도 있다.
하지만 실제로 유체 물리 엔진을 제대로 만들기는 매우 어렵
다.
물 물리 엔진 초기 테스트
물 물리 엔진 테스트
물 물리 엔진 테스트 동영상
http://youtu.be/KsdDqKLh6pc
이런 건 잘 공개하지 않는 영상
'와들 와들 펭귄즈'를 위한 물 물리 엔진 테스트
동영상
엔진이 불안정 해져서 결국은 폭발한다.
유체 물리 엔진 개발의 어려움
논문의 의사 코드를 실제로 동작하는 코드로 옮겨도 겨우 돌아가기
는 하겠지만 실제적으로 사용하기 위해서는 많은 조정이 필요하
다. 이런 조정을 튜닝이라 한다.
강체 물리 엔진의 경우는 상업적인 엔진이 아닌 공개 엔진이라고 해
도 튜닝이 딱히 필요 없을 정도로 탄탄하게 실행된다. 특별하게 극
단적인 설정만 하지 않는다면 게임에서 물리 엔진에 의한 불안정
함 없이 안심하고 사용할 수 있다.
하지만 유체 물리 엔진의 경우는 아직 범용적으로 막 사용할 수 있
는 엔진은 드물다.
모바일 환경에서는 더 어렵다
최신 쿼드코어 스마트폰이라고 해도 데스크탑
에 비해 성능이 떨어지는 모바일 환경에서는
유체를 시뮬레이션 하기가 벅차다. 저사양 스
마트폰이라면 2D 로도 벅차다.
모바일 환경에서 안정적으로 돌아가는 유체 물
리 엔진을 위해서는 많은 최적화와 튜닝이 필
요하다.
구글링이 가장 좋은 선생
선행 연구자들Tom Madams
Grant Kot
박사 과정 연구도 간접적으로 도움이 되었다
● 지구과학 내 기상학 전공
○ 강우 현상 시뮬레이션
● 화산재 확산 연구 참여
○ 화산재 확산 시뮬레이션
Tom Madams’ Blog
Why my fluids don’t flow
http://imdoingitwrong.wordpress.com/2010/
12/14/why-my-fluids-dont-flow/
Grant Kot
http://grantkot.com/
Box2D 로도 가능한가?
Box2D 로도 가능한가?
강체물리 엔진인 Box2d로 비슷하게라도 유체
를 흉내내려면 입자를 원 모양의 다각형 강체
로 해서 적절한 충돌 계수와 마찰 계수를 주면
된다.
http://<wbr />www.emanueleferonato.com/2012/<wbr />05/16/<wbr />simulating-
mudslime-with-box2d-<wbr />bitmaps-and-filters/
하지만 이 방법으로는 물이 쏟아지거나 튀는 모
습 정도는 엇비슷하게 표현할 수 있어도 점성
이 있는 액체를 제대로 표현할 수는 없다.
SPH vs Box2d 의 속도
SPH : 유체 입자를 단순한 점으로 다룬다.
Box2d : 유체 입자를 원형의 다각형 강체로
처리한다.
충돌이나 마찰 처리 등에 많은 비용이 든다.
결국 같은 입자 수로 구현한다면 SPH에 비
해 Box2d 엔진이 훨씬 느리게 된다.
물의 렌더링은 어떻게?
물의 렌더링
SPH 는 물을 입자로 시뮬레이션 하기 때문
에 그대로는 물처럼 보이지 않는다.
물 입자들이 서로 연속된 덩어리로 보이게
해야 한다.
2D Metaball 렌더링 기법이 이용되었다.
추가적인 굴절 효과 등은 제외했다.
2D 메타볼 렌더링
2D 메타볼 이미지
겹쳐서 렌더링
알파 문턱 값 적용
참고
2D Metaballs in XNA (NullCandy)
http://nullcandy.com/2d-metaballs-in-xna/
SIGNED DISTANCE FIELDS 를 이용
한 충돌처리
PixelJunk Shooter 2 (PS3)
SIGGRAPH talk
Signed Distance Fields 란?
부호 있는 거리 장
일종의 스칼라 장으로 가장 가까운 경계 면
까지 거리 값으로 채워진다.
부호 있는 거리 장은 경계면 내부와 외부를
부호로 구분한다. 실제 8비트(0~255)로 저
장할 경우 128을 경계로 한다.
Signed Distance Fields 장점
자유로운 형태의 지형을 나타낼 수 있다.
지형의 복잡도와 상관없이 충돌 검출에 상수 시간 밖에 걸리지
않는다.
충돌 면에 수직인 법선 벡터를 손 쉽게 구할 수 있다. Signed
Distance Fields는 지형의 경계 면에서 법선 벡터를 손쉽게 구
할 수 있다. 미분 연산으로 입자가 있는 지점의 그레디언트 값
을 구하면 그게 바로 법선 벡터의 성분이 된다.
해상도를 낮추어도 자연스런 충돌 검출과 처리가 가능하다.
Signed Distance Fields 생성
오프라인에서 미리 계산한다.
해상도를 낮추더라도 실시간으로는 생성하
기는 모바일에서는 무리다.
여러가지 알고리즘들이 있지만 게임에 사용
한 건 8SSEDT 이다.
8SSEDT 구현 소스
http://www.codersnotes.com/notes/signed-
distance-fields
논문 :
F. Leymarie and M. D. Levine, A Note on
“Fast Raster Scan Distance Propagation
on the Discrete Rectangular Lattice” 1992,
Canada
http://www.lems.brown.edu/vision/people/ley
marie/Refs/CompVision/DT/DTpaper.pdf
8SSEDT 실행 예
결론적으로 SDF의
가장 큰 장점은..
자유로운 손 그림으로 플랫폼을 표현할 수
있었다.
플랫폼 디자인
물의 상 변화 구현
게임의 핵심 기능
● 얼음이 얼고 녹는 건 게임의 핵심 아이디어
● 처음엔 단순하게 구현할 계획
○ 얼음 영역에 물이 충돌하면 얼음 타일로 교체
● Pixel Junk Shooter 를 보고 욕심을 내보기
로 결심
○ 물리적으로 구현해 보자
○ 결국 얼음은 물 입자가 멈춰 있는 상태
물의 상 변화 모델
이것은 결국 게임이다
열역학적인 요소는 무시(!)
물의 상태를 단순화
뜨거운 물, 미지근한 물, 차가운 물, 녹은 물
얼음1, 얼음2
물총에 따른 물의 상태 변화
차가운 물총차가운 물을 발사
얼음 영역에 닿으면 얼음이 된다.
녹으면 다시 차가운 물이 되고 다시 얼 수 있다.
뜨거운 물총
뜨거운 물을 발사
얼음에 닿으면 얼음을 녹이고 미지근한 물이
된다
미지근한 물은 더 식지 않고 그대로 있는다.
얼음은 2종류
얼음1 : 차가운 물이 얼음 영역에서 얼면 생
긴다.
시간이 지나면 녹아서 다시 차가운 물이 된
다.
얼음2 : 시작부터 얼음이다.
시간이 지나도 녹지 않는다.
뜨거운 물에 닿아야 만 녹아서 차가운 물이
된다.
얼음이 어는 과정
1. 물 입자는 이동 하면서 충돌 맵 상태를 읽는다.
2. 충돌 맵의 속성이 얼음 영역이면 일정 확률로
그 물 입자에 얼음 속성을 부여한다.
3. 얼음 속성이 부여된 물 입자는 물리 엔진에서
역학적 처리를 중지 시킨다.
4. 단, 시간 지연을 줘서 서서히 멈춘다.
얼음이 녹는 과정(시간 경과)
1. 일정 시간이 경과하면 얼음 상태로 있는 물 입자
의 속성을 녹은 물 상태로 만든다.
2. 녹은 물 상태의 물 입자는 다시 역학적 처리를
재개한다.
다만, 얼음 영역에 있더라도 다시 얼음 속성이 되
지 않는다.
3. 얼음 영역을 벗어나면 차가운 물 속성이 된다.
얼음이 녹는 과정(뜨거운 물)
1. 뜨거운 물이 닿으면 일정 확률로 녹은 물 상태가
되고 그 뜨거운 물은 미지근한 물이 된다.
2. 녹은 물 상태의 물 입자는 다시 역학적 처리를
재개한다. 다만, 얼음 영역에 있더라도 다시 얼음
속성이 되지 않는다. 얼음 영역을 벗어나면 차가
운 물 속성이 된다.
3. 미지근한 물은 계속 그 상태를 유지하고 얼음 영
역에 있더라도 얼지 않는다.
티저 동영상
http://youtu.be/z6iCyEpnoFg
최종 테스트
최종 버전 플레이 동영상
http://youtu.be/FM1zCoFMOPQ
질문?

SPH 기법을 이용한 2D 물 물리 엔진 개발

  • 1.
    SPH 기법을 이용한 2D물 물리 엔진 개발 김성완 21세기 마법사 (주)젬스푼
  • 2.
    소개 김성완 (kaswan) 현 인디게임 개발자(젬스푼) 현 부산게임아카데미 외래교수 현 동의대학교 게임공학과 외래교수 오즈인터미디어 CTO 미리내소프트웨어 개발이사 - 대표작 - '썬더' (1992) '풀메탈자켓' (1996 미리내소프트웨어) 'g-Matrix3D' (소프트웨어 렌더러 2003) '와들와들 펭귄즈' (2013 젬스푼)
  • 3.
  • 5.
    개발 개요 출시일 :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
  • 7.
  • 8.
  • 9.
  • 13.
  • 17.
    최종 컨셉 확정 기술,아이디어, 감성 기술 : 물 물리 엔진 아이디어 : 물을 얼리거나 녹여서 길을 만든 다. 감성 : 가족애
  • 23.
    2D 물 물리엔진 개발
  • 24.
    목차 1. 물 물리엔진 게임 2. 물이란 무엇인가? 3. 유체 시뮬레이션 4. 물을 입자로 다루는 SPH 기법 5. Signed Distance Fields를 이용한 물과의 충돌 처리 6. 얼음이 얼고 녹는 물의 상 변화 처리
  • 25.
    모바일용 물 물리게임들 ● Where’s My Water? (Disney 2011) ○ Where’s My Ferry? ○ Where’s My Mickey? ● Sprinkle (2011) ○ Sprinke Junior ○ Sprinkle Island ● Watee (2011) ● Splash !!! (2012)
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
    물은 유체! • 유체流體 Fluid <--> Solid 固體 고체 • 액체와 기체를 합쳐서 부르는 용어 • 액체, 기체, 플라즈마 • 변형이 쉽고, 흐르는 성질이 있으며, 모양이 정해져 있지 않다. • 점성, 압축성 (액체는 비 압축성) 물은 액체, 기체, 그리고 고체(얼음)
  • 35.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
    나비에 스톡스 방정식 유체(액체, 기체) 시뮬레이션 연속방정식 물의 운동 = 압력 + 중력 + 점성
  • 43.
    나비에-스톡스 방정식 ● 점성이있는 유체의 운동을 기술하는 비선 형 편미분 방정식 ● Claude-Louis Navier, George Gabriel Stokes ● 수치적인 해법으로 푼다. ● 해석적인 해는 아직 미지의 영역 ● 클레이 수학 연구소 밀레니엄 7대 난제의 하나, 상금 US $1,000,000
  • 44.
  • 46.
  • 47.
    Jos Stam • 1999Siggraph • “Stable Fluids” • 2003 GDC • “Real-Time Fluid Dynamics for Games” • http://www.dgp.toronto.edu/~stam/ • Autodesk
  • 48.
  • 49.
  • 50.
  • 51.
    입자 기반의 유체시뮬레이션 SPH 기법
  • 52.
    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
  • 55.
    Particle-Based Fluid Simulationfor Interactive Applications
  • 56.
  • 57.
  • 58.
    SPH neighbour interactions SPH기법의 속살을 잘 보여주는 동영상 가까이 이웃한 입자 간의 상호작용을 처리하기 위해서 입자들의 위치 관계를 빠르게 검색해 야 한다. 이웃한 입자들 간의 상호작용을 적절하게 처리 해야 액체의 점성이나 비압축성등이 표현된다. http://youtu.be/h2ovz9Cwstc
  • 59.
    빠른 이웃 검색을위한 자료구 조 단순 격자로 구획을 나누어서 처리
  • 60.
  • 61.
  • 62.
    커널 함수의 역할 적은입자 수로 천문학적으로 많은 입자의 연속체 적인 값을 근사할 수 있게 해준다. 시뮬레이션의 품질, 안정성, 속도는 커널 함 수의 선택에 크게 의존한다. 커널 함수를 정하는 것은 어느 정도 시행착 오적인 경험에도 의존한다.
  • 63.
  • 64.
  • 65.
    시뮬레이션 계산은? 중력, 밀도,압력, 점성, 충돌 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
  • 67.
  • 68.
    물입자 갯수 비교 Where’sMy Water 200개 (추정) Sprinkle 600개 Waddle Waddle Penguins 600개
  • 69.
  • 70.
    유체 물리 엔진개발은 어려운 가? 유튜브에서 유체 시뮬레이션 동영상들을 쉽게 찾을 수 있다. 온전하게 잘 동작하는 모습이 공개되어 있다. 소스까지 공개된 경우도 적지 않다. 학술 논문도 바로 코딩할 수 있을 정도로 상세하게 의사 코 드가 실려있는 것도 있다. 하지만 실제로 유체 물리 엔진을 제대로 만들기는 매우 어렵 다.
  • 71.
    물 물리 엔진초기 테스트
  • 72.
  • 73.
    물 물리 엔진테스트 동영상 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/
  • 78.
  • 79.
  • 80.
    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 엔진이 훨씬 느리게 된다.
  • 82.
  • 83.
    물의 렌더링 SPH 는물을 입자로 시뮬레이션 하기 때문 에 그대로는 물처럼 보이지 않는다. 물 입자들이 서로 연속된 덩어리로 보이게 해야 한다. 2D Metaball 렌더링 기법이 이용되었다. 추가적인 굴절 효과 등은 제외했다.
  • 84.
  • 85.
  • 86.
  • 87.
  • 88.
    참고 2D Metaballs inXNA (NullCandy) http://nullcandy.com/2d-metaballs-in-xna/
  • 89.
    SIGNED DISTANCE FIELDS를 이용 한 충돌처리
  • 90.
  • 91.
  • 93.
    Signed Distance Fields란? 부호 있는 거리 장 일종의 스칼라 장으로 가장 가까운 경계 면 까지 거리 값으로 채워진다. 부호 있는 거리 장은 경계면 내부와 외부를 부호로 구분한다. 실제 8비트(0~255)로 저 장할 경우 128을 경계로 한다.
  • 95.
    Signed Distance Fields장점 자유로운 형태의 지형을 나타낼 수 있다. 지형의 복잡도와 상관없이 충돌 검출에 상수 시간 밖에 걸리지 않는다. 충돌 면에 수직인 법선 벡터를 손 쉽게 구할 수 있다. Signed Distance Fields는 지형의 경계 면에서 법선 벡터를 손쉽게 구 할 수 있다. 미분 연산으로 입자가 있는 지점의 그레디언트 값 을 구하면 그게 바로 법선 벡터의 성분이 된다. 해상도를 낮추어도 자연스런 충돌 검출과 처리가 가능하다.
  • 98.
    Signed Distance Fields생성 오프라인에서 미리 계산한다. 해상도를 낮추더라도 실시간으로는 생성하 기는 모바일에서는 무리다. 여러가지 알고리즘들이 있지만 게임에 사용 한 건 8SSEDT 이다.
  • 99.
    8SSEDT 구현 소스 http://www.codersnotes.com/notes/signed- distance-fields 논문: F. Leymarie and M. D. Levine, A Note on “Fast Raster Scan Distance Propagation on the Discrete Rectangular Lattice” 1992, Canada http://www.lems.brown.edu/vision/people/ley marie/Refs/CompVision/DT/DTpaper.pdf
  • 100.
  • 101.
    결론적으로 SDF의 가장 큰장점은.. 자유로운 손 그림으로 플랫폼을 표현할 수 있었다.
  • 102.
  • 109.
  • 110.
    게임의 핵심 기능 ●얼음이 얼고 녹는 건 게임의 핵심 아이디어 ● 처음엔 단순하게 구현할 계획 ○ 얼음 영역에 물이 충돌하면 얼음 타일로 교체 ● Pixel Junk Shooter 를 보고 욕심을 내보기 로 결심 ○ 물리적으로 구현해 보자 ○ 결국 얼음은 물 입자가 멈춰 있는 상태
  • 112.
    물의 상 변화모델 이것은 결국 게임이다 열역학적인 요소는 무시(!) 물의 상태를 단순화 뜨거운 물, 미지근한 물, 차가운 물, 녹은 물 얼음1, 얼음2
  • 113.
    물총에 따른 물의상태 변화 차가운 물총차가운 물을 발사 얼음 영역에 닿으면 얼음이 된다. 녹으면 다시 차가운 물이 되고 다시 얼 수 있다. 뜨거운 물총 뜨거운 물을 발사 얼음에 닿으면 얼음을 녹이고 미지근한 물이 된다 미지근한 물은 더 식지 않고 그대로 있는다.
  • 114.
    얼음은 2종류 얼음1 :차가운 물이 얼음 영역에서 얼면 생 긴다. 시간이 지나면 녹아서 다시 차가운 물이 된 다. 얼음2 : 시작부터 얼음이다. 시간이 지나도 녹지 않는다. 뜨거운 물에 닿아야 만 녹아서 차가운 물이 된다.
  • 117.
    얼음이 어는 과정 1.물 입자는 이동 하면서 충돌 맵 상태를 읽는다. 2. 충돌 맵의 속성이 얼음 영역이면 일정 확률로 그 물 입자에 얼음 속성을 부여한다. 3. 얼음 속성이 부여된 물 입자는 물리 엔진에서 역학적 처리를 중지 시킨다. 4. 단, 시간 지연을 줘서 서서히 멈춘다.
  • 118.
    얼음이 녹는 과정(시간경과) 1. 일정 시간이 경과하면 얼음 상태로 있는 물 입자 의 속성을 녹은 물 상태로 만든다. 2. 녹은 물 상태의 물 입자는 다시 역학적 처리를 재개한다. 다만, 얼음 영역에 있더라도 다시 얼음 속성이 되 지 않는다. 3. 얼음 영역을 벗어나면 차가운 물 속성이 된다.
  • 119.
    얼음이 녹는 과정(뜨거운물) 1. 뜨거운 물이 닿으면 일정 확률로 녹은 물 상태가 되고 그 뜨거운 물은 미지근한 물이 된다. 2. 녹은 물 상태의 물 입자는 다시 역학적 처리를 재개한다. 다만, 얼음 영역에 있더라도 다시 얼음 속성이 되지 않는다. 얼음 영역을 벗어나면 차가 운 물 속성이 된다. 3. 미지근한 물은 계속 그 상태를 유지하고 얼음 영 역에 있더라도 얼지 않는다.
  • 120.
  • 122.
  • 129.
    최종 버전 플레이동영상 http://youtu.be/FM1zCoFMOPQ
  • 130.