Top Banner
Game Programing Gems [4.11] 느슨한 옥트리 2015 – 07 – 30 NHN NEXT 남세현
23

Game programing gems 4.11

Aug 16, 2015

Download

Education

Sehyeon Nam
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Game programing gems 4.11

Game����������� ������������������  Programing����������� ������������������  Gems����������� ������������������  [4.11]����������� ������������������  느슨한����������� ������������������  옥트리

2015 – 07 – 30 NHN NEXT 남세현

Page 2: Game programing gems 4.11

옥트리 - 복습   옥트리란  ◦  연산 좀 더 빠르게  

◦  Divide  and  Conquer  ◦  공간을 나누는 자료구조 기법  

  어떻게?  ◦  공간을 8조각으로 나누어서  ◦  왜 8조각?  

◦  (x축 +,  -) * (y축 +,  -­‐)  * (z축 +,  -­‐)  =  2 * 2 * 2  =  8  

  1차원의 Binary-­‐Tree(약간 다르지만)  2차원의 Quad-­‐Tree  3차원의 OcTree  

Page 3: Game programing gems 4.11

옥트리 - 생김새 1.  가장 큰 공간에 넣어봄  

2.  자식 공간에 넣을 수 있나?  

3.  자식 공간에 넣어봄.  

4.  자식of자식 공간에 넣을 수 있나?  

5.  반복.  

6.  자기에게 딱 맞는 공간에 넣음.  

  공간 나누는 법 : 현재의 ½  

Page 4: Game programing gems 4.11

근데 문제가 있더라

Page 5: Game programing gems 4.11

옥트리 - 문제점

걸쳐 있을 때는?  

Page 6: Game programing gems 4.11

옥트리 - 문제점   애매하게 걸쳐있는 경우  ◦  상위 공간에 넣어야 되더라.  

  속도 저하 -­‐ 동적인 사물  ◦  움직이는 게임 캐릭터들  

◦  금방 경계를 넘어가니까  

  이런 문제를 어떻게 해결할까?  

Page 7: Game programing gems 4.11

옥트리 - 문제점   문제점 정의  ◦  충분히 작은데도, 상위 공간에 들어가게 됨.  

  문제 발생하는 원인  ◦  경계에 걸쳐있어서.  

  문제의 근본적인 원인  ◦  공간을 너무 칼같이 나눠서.  

◦  부모 공간의 가로 ½ 세로 ½    

  ㅇㅋ 근본적인 원인을 해결하자  

  à 공간을 느슨하게 만들자 à 느슨한 옥트리  

Page 8: Game programing gems 4.11

무지 간단함요

Page 9: Game programing gems 4.11

자식 공간의 중심점은?

  자식의 중심점  = 부모의 중심점 ± 부모 변의 길이/4  

부모라능  

Page 10: Game programing gems 4.11

자식 공간의 중심점은?

  자식의 중심점  = 부모의 중심점 ± 부모 변의 길이/4  

부모라능  

Page 11: Game programing gems 4.11

자식 공간의 모서리의 길이는?

  자식의 모서리 길이  = 부모 변의 길이/2  

부모라능  

L/2  

Page 12: Game programing gems 4.11

자식 공간의 모서리의 길이는?

  자식의 모서리 길이  = 부모 변의 길이/2  

부모라능  

L/2  

Page 13: Game programing gems 4.11

이게 근본적인 원인 자식 모서리 길이 = 부모 모서리 길이 /  2  

Page 14: Game programing gems 4.11

K  *  부모 변 길이 /  2  

Page 15: Game programing gems 4.11

자식 공간의 모서리의 길이는?

  자식의 모서리 길이  = 부모 변의 길이/2  

부모라능  

L/2  

K  *  부모 변 길이 /  2  

Page 16: Game programing gems 4.11

이거시 느슨한 옥트리

중심  

원래 모서리  (L/2)  

느슨한 모서리  (K  *  L/2)  

Page 17: Game programing gems 4.11

느슨한 옥트리   핵심은 자식 공간의 모서리의 길이  ◦  L  /  2  가 아니라  ◦  K  *  L  /  2  

  그러면 K의 값은 어떻게 되나요?  ◦  백종원 선생님 : 설탕 얼마나 넣어유?  ◦  <적당히>  

  저자왈 -­‐  “  k가 2면 왠만해선 ㅇㅋ다요!  ”  ◦  민나!! 젠카이노!!  아이돌마스터!!  

  숙제 :  K가 2보다 작을 경우,  2보다 클 경우    어떤 문제가 있는지 알아오시오  

Page 18: Game programing gems 4.11

K가 2면 좋은 이유 1.  다 들어갈 수 있다.  ◦  옥트리 : 들어갈 수 있는데 못들어가는 경우가 있음.  

◦  경계에 걸쳐있는 애들.  

◦  공간의 모서리 길이가 L이라고 하자.  ◦  이때 이 공간 안에 들어갈 수 있는 가장 큰 원의 지름은?  

◦  L입니다.  ◦  그때 그 원이 조금이라도 움직이면?  

◦  경계에 걸립니다.  

◦  경계에 걸리면 어케됨?  ◦  부모공간에 들어가야 합니다.  

◦  근데, 느슨한 옥트리고 K가 2라서 공간의 길이가 2*L면?  ◦  아무리 원이 움직여도 N번째 레벨의 자식 공간에는 무조건 들어갈 수 있음  

◦  즉, 그 공간 레벨대에서 가장 큰 지름 L의 원이 아무리 움직여도 들어갈 수 있다!!  

제가L입니다  

기존 옥트리에선 캐릭터가 움직이면 경계에 부딪혀서 자식공간 à 부모공간 올라가고 그랬다는거임  

Page 19: Game programing gems 4.11

느슨한 옥트리 사용법 1.  노드 삽입  ◦  똑같습니다.  ‘나를 포함할 수 있는 가장 작은 공간’에 넣으면 됨.  ◦  AABB연산 ㄱㄱ  

2.  충돌 등 연산  ◦  약간 달라짐.  

◦  기존에는 모서리 길이, 중심까지의 길이 등 딱딱 맞았으니까  ◦  몇가지 편법? 계산법이 있었음  

◦  하지만 크게 달라지는 것은 없음  ◦  부모공간 > 자식공간 은 달라지지 않음  ◦  부모공간 먼저 계산 후 자식공간 계산하던거 그대로 하시면 됨요  

Page 20: Game programing gems 4.11

PERFORMANCE - 가시성 •  정확도 증가  •  하지만 연산 횟수는 증가.      연산횟수 증가한 이유?  공간과 공간 겹치는 것 때문에.  (옥트리는 하나도 안겹침)  (옥)2번 vs    (느옥)4번  

Page 21: Game programing gems 4.11

PERFORMANCE - 충돌체크

•  객체 대 노드는 증가  (아까 같은 이유로)  •  하지만 합계는 감소  (정확도 증가로,    불필요한 계산을 줄이기 때문)  

Page 22: Game programing gems 4.11

결론 1.  옥트리 Is  Good  

2.  But 항상 Is  not  Good  

3.  깐깐한 옥트리 Xuck  you  

4.  전통적인 자료구조는 항상 게임에 맞지 않는다.  

5.  왜 맞지 않을까, 근본적인 문제 원인을 찾아 해결해서  

6.  실용적인 대안, 실용적인 자료구조 만들자구욧!  

7.  그럴려면 아마 기초를 잘 공부해야게쬬?  

Page 23: Game programing gems 4.11

Game����������� ������������������  Programing����������� ������������������  Gems����������� ������������������  [4.11]����������� ������������������  느슨한����������� ������������������  옥트리

2015 – 07 – 30 NHN NEXT 남세현