Game programing gems 4.17
-
Upload
sehyeon-nam -
Category
Documents
-
view
55 -
download
4
Transcript of Game programing gems 4.17
![Page 1: Game programing gems 4.17](https://reader033.fdocuments.net/reader033/viewer/2022052509/55d0deecbb61eb5f368b45ab/html5/thumbnails/1.jpg)
Game����������� ������������������ Programing����������� ������������������ Gems����������� ������������������ [4.17~19]프렉탈����������� ������������������ 지형����������� ������������������ 생성
2015 – 07 – 30 NHN NEXT 남세현
![Page 2: Game programing gems 4.17](https://reader033.fdocuments.net/reader033/viewer/2022052509/55d0deecbb61eb5f368b45ab/html5/thumbnails/2.jpg)
지형을 만들어봅시다. 가장 좋은 지형 만들기 방법은? ◦ 디자이너가 일일이 다 만드는거
근데 문제점은? ◦ 비용이 비싸다. (시간, 돈, 지루함) ◦ 용량이 크다.
좀 더 쉽게 지형을 만드는 방법 1. 노이즈를 만든다. 2. 근데 노이즈가 좀 괜찮아 보이게 만든다.
![Page 3: Game programing gems 4.17](https://reader033.fdocuments.net/reader033/viewer/2022052509/55d0deecbb61eb5f368b45ab/html5/thumbnails/3.jpg)
1. 단층 변형
![Page 4: Game programing gems 4.17](https://reader033.fdocuments.net/reader033/viewer/2022052509/55d0deecbb61eb5f368b45ab/html5/thumbnails/4.jpg)
단층 변형 1. Z(높이) 값을 저장하는 필드
필드 Field[x][y] = Height 처음엔 다 0으로 초기화
(0,0)
(Mx, My) (0, My)
(Mx, 0)
![Page 5: Game programing gems 4.17](https://reader033.fdocuments.net/reader033/viewer/2022052509/55d0deecbb61eb5f368b45ab/html5/thumbnails/5.jpg)
단층 변형 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](https://reader033.fdocuments.net/reader033/viewer/2022052509/55d0deecbb61eb5f368b45ab/html5/thumbnails/6.jpg)
단층 변형 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](https://reader033.fdocuments.net/reader033/viewer/2022052509/55d0deecbb61eb5f368b45ab/html5/thumbnails/7.jpg)
단층 변형
ß너무 날카롭지유?
![Page 8: Game programing gems 4.17](https://reader033.fdocuments.net/reader033/viewer/2022052509/55d0deecbb61eb5f368b45ab/html5/thumbnails/8.jpg)
단층 변형
1. 최종 결과물을 일단 만듬
2. 얘를 침식시킬거임 ◦ 사포로 문지른다고 생각하면 됨
![Page 9: Game programing gems 4.17](https://reader033.fdocuments.net/reader033/viewer/2022052509/55d0deecbb61eb5f368b45ab/html5/thumbnails/9.jpg)
Low Pass Filter 필터링을 해야함 1. Low Pass Filter
2. High Pass Filter
필터링 : 없애는거. DELETE. 죽여버리는거야 아주 그냥 아주! Low Pass à 주파수 낮은걸 필터링 안하고 패스시킴 à 주파수 낮다 = 잘 안변하는 것들. 베이스들 à 즉, 위에 나대는거 깎음.
High Pass à 주파수 높은걸 필터링 안하고 패스시킴 à 주파수 높다 = 활발한 애들 à 옛날 티비 보면 지지지직 거리죠? 아니면 통화 음질 안좋을때 자꾸 지지직 거리죠? 걔넨 항상 계~속 지지직 거리죠? 그런애들 지우는거. 우리 음성은 활발하게 움직이니까 필터링 안되고 패스되고.
![Page 10: Game programing gems 4.17](https://reader033.fdocuments.net/reader033/viewer/2022052509/55d0deecbb61eb5f368b45ab/html5/thumbnails/10.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022052509/55d0deecbb61eb5f368b45ab/html5/thumbnails/11.jpg)
Low Pass Filter
ß 빨강 : k가 높은거 ß 초록&검정 : k가 낮은거
![Page 12: Game programing gems 4.17](https://reader033.fdocuments.net/reader033/viewer/2022052509/55d0deecbb61eb5f368b45ab/html5/thumbnails/12.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022052509/55d0deecbb61eb5f368b45ab/html5/thumbnails/13.jpg)
Low Pass Filter
Before A[er
![Page 14: Game programing gems 4.17](https://reader033.fdocuments.net/reader033/viewer/2022052509/55d0deecbb61eb5f368b45ab/html5/thumbnails/14.jpg)
결과물 – 단층 변형
![Page 15: Game programing gems 4.17](https://reader033.fdocuments.net/reader033/viewer/2022052509/55d0deecbb61eb5f368b45ab/html5/thumbnails/15.jpg)
2. 중점 높이 이동
![Page 16: Game programing gems 4.17](https://reader033.fdocuments.net/reader033/viewer/2022052509/55d0deecbb61eb5f368b45ab/html5/thumbnails/16.jpg)
중점 높이 이동 1. 태초에 선이 있었습니다.
![Page 17: Game programing gems 4.17](https://reader033.fdocuments.net/reader033/viewer/2022052509/55d0deecbb61eb5f368b45ab/html5/thumbnails/17.jpg)
중점 높이 이동 1. 태초에 선이 있었습니다.
2. 중점을 올려줍니다.
적당한 상수 dHeight 를 만들고,
-‐ dHeight / 2 ~ + dHeight / 2 사이의 값을 더함.
![Page 18: Game programing gems 4.17](https://reader033.fdocuments.net/reader033/viewer/2022052509/55d0deecbb61eb5f368b45ab/html5/thumbnails/18.jpg)
중점 높이 이동 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](https://reader033.fdocuments.net/reader033/viewer/2022052509/55d0deecbb61eb5f368b45ab/html5/thumbnails/19.jpg)
중점 높이 이동 – r 거칢 상수
![Page 20: Game programing gems 4.17](https://reader033.fdocuments.net/reader033/viewer/2022052509/55d0deecbb61eb5f368b45ab/html5/thumbnails/20.jpg)
중점 높이 이동 – 평면 1. 태초에 직선 평면이 있었다.
![Page 21: Game programing gems 4.17](https://reader033.fdocuments.net/reader033/viewer/2022052509/55d0deecbb61eb5f368b45ab/html5/thumbnails/21.jpg)
중점 높이 이동 – 평면 1. 태초에 직선 평면이 있었다.
2. 평면의 중점에 값을 더한다.
![Page 22: Game programing gems 4.17](https://reader033.fdocuments.net/reader033/viewer/2022052509/55d0deecbb61eb5f368b45ab/html5/thumbnails/22.jpg)
중점 높이 이동 – 평면 1. 태초에 직선 평면이 있었다.
2. 평면의 중점에 값을 더한다.
3. 계속 반복한다.
![Page 23: Game programing gems 4.17](https://reader033.fdocuments.net/reader033/viewer/2022052509/55d0deecbb61eb5f368b45ab/html5/thumbnails/23.jpg)
결과물 - 중점 높이 이동
![Page 24: Game programing gems 4.17](https://reader033.fdocuments.net/reader033/viewer/2022052509/55d0deecbb61eb5f368b45ab/html5/thumbnails/24.jpg)
3. 입자 침전 기법
![Page 25: Game programing gems 4.17](https://reader033.fdocuments.net/reader033/viewer/2022052509/55d0deecbb61eb5f368b45ab/html5/thumbnails/25.jpg)
입자 침전 기법 1. 입자를 떨어뜨립니다.
규칙
1. 위치는 랜덤이다요!
![Page 26: Game programing gems 4.17](https://reader033.fdocuments.net/reader033/viewer/2022052509/55d0deecbb61eb5f368b45ab/html5/thumbnails/26.jpg)
입자 침전 기법 1. 입자를 떨어뜨립니다.
2. 두번째 입자를 떨어뜨린다.
규칙
1. 위치는 랜덤이다요!
2. 주변에 나보다 낮은데 비어있는 곳이 있으면 거기로 이동.
![Page 27: Game programing gems 4.17](https://reader033.fdocuments.net/reader033/viewer/2022052509/55d0deecbb61eb5f368b45ab/html5/thumbnails/27.jpg)
입자 침전 기법 1. 입자를 떨어뜨립니다.
2. 두번째 입자를 떨어뜨린다.
3. N번째 입자를 떨어뜨린다.
규칙
1. 위치는 랜덤이다요!
2. 주변에 나보다 낮은데 비어있는 곳이 있으면 거기로 이동.
![Page 28: Game programing gems 4.17](https://reader033.fdocuments.net/reader033/viewer/2022052509/55d0deecbb61eb5f368b45ab/html5/thumbnails/28.jpg)
결과물 – 입자 침전 기법
![Page 29: Game programing gems 4.17](https://reader033.fdocuments.net/reader033/viewer/2022052509/55d0deecbb61eb5f368b45ab/html5/thumbnails/29.jpg)
입자 침전 기법 - 칼데라 아이디어의 모티브는? ◦ 환태평양 화산대의 생성 과정
화산대엔 뭐가 있다? ◦ 칼데라
오른쪽 결과물에 칼데라를 넣어보자
![Page 30: Game programing gems 4.17](https://reader033.fdocuments.net/reader033/viewer/2022052509/55d0deecbb61eb5f368b45ab/html5/thumbnails/30.jpg)
입자 침전 기법 - 칼데라 아이디어의 모티브는? ◦ 환태평양 화산대의 생성 과정
화산대엔 뭐가 있다? ◦ 칼데라
오른쪽 결과물에 칼데라를 넣어보자
1. 선을 긋는다
![Page 31: Game programing gems 4.17](https://reader033.fdocuments.net/reader033/viewer/2022052509/55d0deecbb61eb5f368b45ab/html5/thumbnails/31.jpg)
입자 침전 기법 - 칼데라 아이디어의 모티브는? ◦ 환태평양 화산대의 생성 과정
화산대엔 뭐가 있다? ◦ 칼데라
오른쪽 결과물에 칼데라를 넣어보자
1. 선을 긋는다
2. 선을 기준으로 뒤집는다
if( H > LineHeight )
H = 2*LineHeight -‐ H
![Page 32: Game programing gems 4.17](https://reader033.fdocuments.net/reader033/viewer/2022052509/55d0deecbb61eb5f368b45ab/html5/thumbnails/32.jpg)
결과물 – 입자 침전 기법
![Page 33: Game programing gems 4.17](https://reader033.fdocuments.net/reader033/viewer/2022052509/55d0deecbb61eb5f368b45ab/html5/thumbnails/33.jpg)
결론 1. 자주 쓸일은 없지만
2. “지형이 다양한건 스케일이 크니까, 게임잼때 못만들겠지?”
3. 하지 않도록 ^_^
4. 아니면 공부해서 듀랑고 팀 ㄱㄱ
5. 민나 화이또다요!!
![Page 34: Game programing gems 4.17](https://reader033.fdocuments.net/reader033/viewer/2022052509/55d0deecbb61eb5f368b45ab/html5/thumbnails/34.jpg)
Game����������� ������������������ Programing����������� ������������������ Gems����������� ������������������ [4.17~19]프렉탈����������� ������������������ 지형����������� ������������������ 생성
2015 – 07 – 30 NHN NEXT 남세현