+ All Categories
Home > Documents > Game programing gems 4.17

Game programing gems 4.17

Date post: 17-Aug-2015
Category:
Upload: sehyeon-nam
View: 39 times
Download: 4 times
Share this document with a friend
34
Game Programing Gems [4.17~19] 프렉탈 지형 생성 2015 – 07 – 30 NHN NEXT 남세현
Transcript
Page 1: Game programing gems 4.17

Game����������� ������������������  Programing����������� ������������������  Gems����������� ������������������  [4.17~19]프렉탈����������� ������������������  지형����������� ������������������  생성

2015 – 07 – 30 NHN NEXT 남세현

Page 2: Game programing gems 4.17

지형을 만들어봅시다.   가장 좋은 지형 만들기 방법은?  ◦  디자이너가 일일이 다 만드는거  

  근데 문제점은?  ◦  비용이 비싸다.  (시간, 돈, 지루함)  ◦  용량이 크다.  

  좀 더 쉽게 지형을 만드는 방법  1.  노이즈를 만든다.  2.  근데 노이즈가 좀 괜찮아 보이게 만든다.  

Page 3: Game programing gems 4.17

1. 단층 변형

Page 4: Game programing gems 4.17

단층 변형 1.  Z(높이) 값을 저장하는 필드  

필드  Field[x][y]  =  Height  처음엔 다 0으로 초기화  

(0,0)  

(Mx,  My)  (0,  My)  

(Mx,  0)  

Page 5: Game programing gems 4.17

단층 변형 1.  Z(높이) 값을 저장하는 필드  2.  선을 긋는다.    

 선 긋는 방법  1.  상 하 좌 우 중 2개 선택  2.  0부터 1까지 중 2개 고름  

예를들어 (상,  0.5)  ,  (우, 0.3) 이 골라지면  

점 1  :  (Mx  *  0.5  ,  My)  

점 2  :  (Mx,  My  *  0.3)임. 이으면 됨  

Field  

(0,0)  

(Mx,  My)  (0,  My)  

(Mx,  0)  

Page 6: Game programing gems 4.17

단층 변형 1.  Z(높이) 값을 저장하는 필드  

2.  선을 긋는다.  

3.  선 기준으로 왼쪽에 있는 애들은 dHeight만큼 높이 증가  

x,y가 선 왼쪽에 있는지 아는 방법  

외적 이용해서 구하세요~  

(x  -­‐  X1)  *  (Y2  –  Y1)  –  (y  –  Y1)  *  (X2  –  X1)  

이게 음수면 오른쪽, 양수면 왼쪽  

Field  

(0,0)  

(Mx,  My)  (0,  My)  

(Mx,  0)  

여기 +dHeight  

Page 7: Game programing gems 4.17

단층 변형

ß너무 날카롭지유?  

Page 8: Game programing gems 4.17

단층 변형

1.  최종 결과물을 일단 만듬  

2.  얘를 침식시킬거임  ◦  사포로 문지른다고 생각하면 됨  

Page 9: Game programing gems 4.17

Low Pass Filter   필터링을 해야함  1.  Low  Pass  Filter  

2.  High  Pass  Filter  

  필터링 : 없애는거.  DELETE. 죽여버리는거야 아주 그냥 아주!     Low  Pass  à  주파수 낮은걸 필터링 안하고 패스시킴     à 주파수 낮다 = 잘 안변하는 것들. 베이스들 à 즉, 위에 나대는거 깎음.  

  High  Pass  à 주파수 높은걸 필터링 안하고 패스시킴     à 주파수 높다 = 활발한 애들  à 옛날 티비 보면 지지지직 거리죠? 아니면 통화 음질 안좋을때 자꾸 지지직 거리죠? 걔넨 항상 계~속 지지직 거리죠? 그런애들 지우는거. 우리 음성은 활발하게 움직이니까 필터링 안되고 패스되고.  

Page 10: Game programing gems 4.17

Low Pass Filter   우리가 지우고 싶은거  ◦  급격한 변화를 없애고 싶음.  ◦  마치 사포로 튀어나온 모서리 깎듯.  ◦  튀어나온 모서리? 갑작스런 변화 à 높은 주파수.  ◦  그럼 우리가 써야하는건 Low  Pass  Filter  

간단한 Low  Pass  Filter 방정식  Result(i)  =  k  *  Result(i-­‐1)  +  (1-­‐k)  *  data(i), -­‐ 단 k  는 0~1  사이  1.  i번째 필터링된 값은  2.  i-1번째 필터링 된 값에 k 곱하고  3.  필터링 되기 전의 데이터 i번째껄 (1-­‐k) 곱해서 더한거.  ◦  그러믄,  k가 1이면 너무 깎이고 0이면 하나도 안깎이겠네요?  

Page 11: Game programing gems 4.17

Low Pass Filter

ß 빨강 :  k가 높은거  ß 초록&검정 :    k가 낮은거  

Page 12: Game programing gems 4.17

Low Pass Filter   Data  data[MaxX][MaxY];  

  //data에 다 채워넣었음  

  k  =  0~1;     Data  filteredData[MaxX][MaxY];  

  for  x  =  0  ~  maxX  

       for  y  =  0  ~  maxY  

         filteredData[x][y]  =    

 k  *  filterData[x-­‐1][y]  /2  

 +  (1-­‐k)  *  data[x-­‐1][y]  /2  

 + k  *  filterData[x][y-­‐1]  /2    

 +  (1-­‐k)  *  data[x][y-­‐1]  /2  

 

예시임.    다르게 해도 됨  

Before  

Page 13: Game programing gems 4.17

Low Pass Filter

Before   A[er  

Page 14: Game programing gems 4.17

결과물 – 단층 변형

Page 15: Game programing gems 4.17

2. 중점 높이 이동

Page 16: Game programing gems 4.17

중점 높이 이동 1.  태초에 선이 있었습니다.  

Page 17: Game programing gems 4.17

중점 높이 이동 1.  태초에 선이 있었습니다.  

2.  중점을 올려줍니다.  

적당한 상수 dHeight 를 만들고,  

-­‐ dHeight  /  2  ~  +  dHeight  /  2  사이의 값을 더함.  

Page 18: Game programing gems 4.17

중점 높이 이동 1.  태초에 선이 있었습니다.  

2.  중점을 올려줍니다.  

3.  중점 of 중점을 올려줍니다.  

4.  while(true)  _3();  

5.  근데!     ±dHeight/2 의 사이값 더했잖아요,  

  그거 조금씩 낮추면 더 깔끔하게 나옴.  

  dHeight(i)  =  dHeight(i-­‐1)  *  2^r  ◦  r은 지형의 거칢 상수  

Page 19: Game programing gems 4.17

중점 높이 이동 – r 거칢 상수

Page 20: Game programing gems 4.17

중점 높이 이동 – 평면 1.  태초에 직선 평면이 있었다.  

Page 21: Game programing gems 4.17

중점 높이 이동 – 평면 1.  태초에 직선 평면이 있었다.  

2.  평면의 중점에 값을 더한다.  

Page 22: Game programing gems 4.17

중점 높이 이동 – 평면 1.  태초에 직선 평면이 있었다.  

2.  평면의 중점에 값을 더한다.  

3.  계속 반복한다.  

Page 23: Game programing gems 4.17

결과물 - 중점 높이 이동

Page 24: Game programing gems 4.17

3. 입자 침전 기법

Page 25: Game programing gems 4.17

입자 침전 기법 1.  입자를 떨어뜨립니다.  

 

 

규칙  

1.  위치는 랜덤이다요!  

Page 26: Game programing gems 4.17

입자 침전 기법 1.  입자를 떨어뜨립니다.  

2.  두번째 입자를 떨어뜨린다.  

 

규칙  

1.  위치는 랜덤이다요!  

2.  주변에 나보다 낮은데 비어있는 곳이 있으면 거기로 이동.  

 

 

Page 27: Game programing gems 4.17

입자 침전 기법 1.  입자를 떨어뜨립니다.  

2.  두번째 입자를 떨어뜨린다.  

3.  N번째 입자를 떨어뜨린다.  

규칙  

1.  위치는 랜덤이다요!  

2.  주변에 나보다 낮은데 비어있는 곳이 있으면 거기로 이동.  

 

 

Page 28: Game programing gems 4.17

결과물 – 입자 침전 기법

Page 29: Game programing gems 4.17

입자 침전 기법 - 칼데라   아이디어의 모티브는?  ◦  환태평양 화산대의 생성 과정  

  화산대엔 뭐가 있다?  ◦  칼데라  

  오른쪽 결과물에 칼데라를 넣어보자  

Page 30: Game programing gems 4.17

입자 침전 기법 - 칼데라   아이디어의 모티브는?  ◦  환태평양 화산대의 생성 과정  

  화산대엔 뭐가 있다?  ◦  칼데라  

  오른쪽 결과물에 칼데라를 넣어보자  

1.  선을 긋는다  

Page 31: Game programing gems 4.17

입자 침전 기법 - 칼데라   아이디어의 모티브는?  ◦  환태평양 화산대의 생성 과정  

  화산대엔 뭐가 있다?  ◦  칼데라  

  오른쪽 결과물에 칼데라를 넣어보자  

1.  선을 긋는다  

2.  선을 기준으로 뒤집는다  

if(  H  >  LineHeight  )    

         H  =  2*LineHeight  -­‐  H  

Page 32: Game programing gems 4.17

결과물 – 입자 침전 기법

Page 33: Game programing gems 4.17

결론 1.  자주 쓸일은 없지만  

2.  “지형이 다양한건 스케일이 크니까, 게임잼때 못만들겠지?”  

3.  하지 않도록 ^_^  

4.  아니면 공부해서 듀랑고 팀 ㄱㄱ  

5.  민나 화이또다요!!  

Page 34: Game programing gems 4.17

Game����������� ������������������  Programing����������� ������������������  Gems����������� ������������������  [4.17~19]프렉탈����������� ������������������  지형����������� ������������������  생성

2015 – 07 – 30 NHN NEXT 남세현


Recommended