Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

진선웅 유저수만큼다양한섬을만들자 공개용

11,147 views

Published on

[NDC 2014] 유저 수만큼 다양한 섬을 만들자
<야생의>의 절차적인 섬 생성 기법

발표장에서 시간이 없어서 답변드리지 못했던 Q&A 내용들을 뒷 부분에 추가하였습니다.

GIF 가 포함된 부분은 잘 나오지 않으므로 궁금하시면 직접 다운로드 받아서 보시기 바랍니다. - http://goo.gl/UUKmjL

Published in: Engineering
  • Dating for everyone is here: ♥♥♥ http://bit.ly/39sFWPG ♥♥♥
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Dating direct: ❶❶❶ http://bit.ly/39sFWPG ❶❶❶
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • accessibility Books Library allowing access to top content, including thousands of title from favorite author, plus the ability to read or download a huge selection of books for your pc or smartphone within minutes.........ACCESS WEBSITE Over for All Ebooks ..... (Unlimited) ......................................................................................................................... Download FULL PDF EBOOK here { http://bit.ly/2m6jJ5M } .........................................................................................................................
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • accessibility Books Library allowing access to top content, including thousands of title from favorite author, plus the ability to read or download a huge selection of books for your pc or smartphone within minutes.........ACCESS WEBSITE Over for All Ebooks ..... (Unlimited) ......................................................................................................................... Download FULL PDF EBOOK here { http://bit.ly/2m6jJ5M } .........................................................................................................................
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • DOWNLOAD THIS BOOKS INTO AVAILABLE FORMAT (Unlimited) ......................................................................................................................... ......................................................................................................................... Download Full PDF EBOOK here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... Download Full EPUB Ebook here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... ACCESS WEBSITE for All Ebooks ......................................................................................................................... Download Full PDF EBOOK here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... Download EPUB Ebook here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... Download doc Ebook here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... ......................................................................................................................... ......................................................................................................................... .............. Browse by Genre Available eBooks ......................................................................................................................... Art, Biography, Business, Chick Lit, Children's, Christian, Classics, Comics, Contemporary, Cookbooks, Crime, Ebooks, Fantasy, Fiction, Graphic Novels, Historical Fiction, History, Horror, Humor And Comedy, Manga, Memoir, Music, Mystery, Non Fiction, Paranormal, Philosophy, Poetry, Psychology, Religion, Romance, Science, Science Fiction, Self Help, Suspense, Spirituality, Sports, Thriller, Travel, Young Adult,
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

진선웅 유저수만큼다양한섬을만들자 공개용

  1. 1. 유저 수만큼 다양한 섬을 만들자! <야생의 땅: 듀랑고>의 절차적인 섬 생성 기법 What! Studio 진선웅
  2. 2. 발표 내용 • Voronoi Diagram + Fractal Noise를 통한 절차적인 섬 생성 • 공개된 Polygon map generation 방법 기반 • 실제 알고리즘 구현을 통한 툴 제작 • <야생의 땅 : 듀랑고>에 적용하기 위해 여러 가지 개선사항
  3. 3. 목차 • 절차적 섬 생성의 필요성 • 절차적 생성 방법 • 실제 구현 • 정리
  4. 4. 절차적 섬 생성의 필요성
  5. 5. <야생의 땅: 듀랑고> 초기 비전 원시 야생 행성에 던져진 현대인이나 원주민이 되어, 공룡이나 차량을 타고 개척과 마을 건설을 플레이하는 크로스플랫폼 지원 MMORPG 원시 야생행성 현대인 원주민 공룡 공룡 차량 마을건설 개척 어떻게 표현 할 것인가?
  6. 6. 디렉터 님: 우리 게임의 배경은 제주도 같은 아열대 화산섬이다! 제주도 백록담 (photo)
  7. 7. 그 섬의 크기는 매우 크다 (10km x 10km) © Blizzard
  8. 8. 예쁜 강과 호수, 바다가 있어야 하며 • 게임에서 물은 매우 중요 자원 • 오픈 월드 곳곳에 흐르는 물의 묘사가 필요 한반도의 공룡 (TV film)
  9. 9. 다양한 동/식물도 살고 있다 • 자연스러운 생물 군계 시스템이 필요 http://world-visits.blogspot.kr/ www.wikispaces.com
  10. 10. 그러한 섬들이 굉장히 많이 있고, http://www.bibletour.net/956
  11. 11. 섬들의 모습은 전부 다르게 표현하고 싶다!
  12. 12. 어떻게 구현하지? • 한 두 개도 아니고 • 손으로 만들다간 출시 불가 • 게다가 모바일! 이렇게 된 이상 절차적 생성으로 간다!
  13. 13. 혹시 World Machine 으로 안되나요 • 클릭 몇 번으로 그럴듯한 섬 데이터 생성 가능
  14. 14. • 여러 가지 요구 사항에 대응하는 만능 툴은 아님 World Machine 이 매우 좋은 툴 이지만 rakuten.com
  15. 15. 요구 사항: 생물 군계 데이터 필요 • 단순 Height Map (x) • 온도 / 습도에 따른 생물 군계 • 어떻게 후처리 잘 하면?
  16. 16. 요구 사항: 강 / 호수 / 바다의 표현 • Flow 데이터론 쉽지 않음 Palouse Falls Washington United States
  17. 17. 요구 사항: 서버 연동 • 서버 상황에 따른 실시간 생성 • 수 천 / 수 만개의 섬 • 자동화된 생성 과정 필요
  18. 18. 요구 사항: 다양한 기획 대응 • 여러 가지 요구 조건 증가 • 섬 크기 균일하게 • 생물 군계 분포 일정하게 • 자투리 섬 안 생기게 • 섬 모양이 이상해요 • 게임에 필요한 데이터 변화 • 빠르게 툴 수정해서 기민하게 대응
  19. 19. 그래서 절차적 섬 생성을 위한 툴을 직접 만들기로 했습니다!
  20. 20. 절차적 생성 방법
  21. 21. 어떻게 만드나 • 바닥부터 만들려니 (...) • 그때 디렉터 님이 공유해주신 링크 http://www-cs-students.stanford.edu/~amitp/game- programming/polygon-map-generation/ 이거다!olleh!
  22. 22. Polygon Map Generation • 원하는 기능이 전부 여기에... • Flash로 된 오픈 소스제공 (MIT License) • 친절한 알고리즘 설명 이것부터 알아 봅시다
  23. 23. 일단 기본 용어 정의 • Node : 다각형 • Edge : 다각형 모서리 • Corner : 다각형 꼭짓점 • Center : 다각형 중심점 Corner Node Edge Center
  24. 24. 다각형 데이터 구조 - Edge • Edge • Corner 1 • Corner 2
  25. 25. • Node • List of Nodes • List of Corners • List of Edges 다각형 데이터 구조 - Node Node Nodes Node Corners Node Edges
  26. 26. • Corner • List of Nodes • List of Corners • List of Edges 다각형 데이터 구조 - Corner Node Node Node Corners Edges
  27. 27. 시작: 다각형 데이터(Node) 생성 • 섬을 표현하기 위한 가장 기초적인 데이터 • 다양한 형태의 다각형(Node) 데이터 필요 • 다각형 생성(Node)을 위해선? • 사각형 공간 내에 무작위 점의 집합 생성 • 해당 점들을 통해서 Voronoi Diagram 생성 • Voronoi Diagram?
  28. 28. Voronoi Diagram • 주어진 점들로부터 거리에 따른 영역 분할 • 각 점들이 가지고 있는 일종의 영향력 • 무작위 점의 집합을 이용해서 다양한 모습의 다각형(Node) 생성 가능 • 생성된 다각형의 편차가 너무 큰 점이 문제
  29. 29. Lloyd’s algorithm • 각 다각형의 중심점(Node Center)을 인자로 사용  Voronoi Diagram 다시 생성 • 적당히 균일한 상태가 될 때까지 반복 (15회 반복) 해당 중심점들을 이용해서 Voronoi Diagram 다시 생성
  30. 30. Lloyd’s algorithm
  31. 31. Normalize Edge Length • Edge를 좀 더 균일한 길이로 만들기 위해서 • Corner 위치를 이웃 Node Center의 평균값 으로 변경 Node Node Node 이웃 Node Center 들의 평균값으로 Corner 재배치
  32. 32. Normalize Edge Length
  33. 33. 기본 섬 모양 생성 • 모든 Corner 의 ‘땅’ / ‘물’ 여부 결정 • Corner의 위치에 대응되는 Noise값 사용 • 특정 값 이상이면 ‘땅’ / 이하이면 ‘물’ • 모든 Node의 ‘땅’/ ‘물’ 결정 • Node를 구성하는 Corner들의 ‘물’ 비율에 따라서 ‘땅’ / ‘물’ 결정 물 물 Corner 땅 물
  34. 34. 기본 섬 모양 생성
  35. 35. 바다 생성 • 일단 사각형 가장자리에 있는 Node를 ‘바다’로 설정 • ‘바다’ Node의 이웃 Node로 전파 • 이웃 Node가 ‘물’일 경우 : ‘바다’ Node, 반복
  36. 36. 해변 생성 • ‘해변’ Node 설정 • 주변 Node의 일부가 ‘바다’ / 일부가 ‘땅’ 일 때
  37. 37. 섬의 높이 설정 • 만들려는 섬의 모습 • 섬의 중심이 가장 높고 가장자리로 갈수록 낮아짐 • 섬의 높이 = 해변으로부터의 거리에 비례 • 일단 가장자리에 있는 Corner 부터 높이 설정 • 이웃한 Corner 로 이동하면서 높이 증가시킴 • 이웃한 Corner가 ‘땅’일 때만 높이 값 증가 • 호수를 주위에서 가장 낮은 지역으로 만들기 위해서 해변 해변중심 Hanauma bay
  38. 38. 섬의 높이 재분배 • 기존 높이값을 우리가 원하는 분포로 설정 • 기존 값은 어느 정도 경향은 있지만 Random • Corner를 높이 순서대로 정렬 • 순서에 따라서 0~1 사이의 값을 설정 • 제일 높은 곳은 1, 중간 높이는 0.5, 가장 낮은 곳은 0 • 적당한 분포 함수를 적용해서 새로운 높이 할당 • 새로운 높이 = f( k / n ) • k 는 정렬 순서, n 은 전체 Corner 개수
  39. 39. 높이 분포 함수 y y x a acbb xyxx xxxxxy       11 2 )442( ) 2 4 (,02 2)21(1)1(1 2 2 222 • y = 1-(x-1)^2 • 위쪽이 볼록한 2차 함수 • 해당 부분을 90도 회전한 모양 • 역함수를 구해서 적용
  40. 40. 높이 분포 함수 • y = x^2 • 사실 큰 차이는 안 남 • 취향대로 (...)
  41. 41. 섬의 높이 재분배
  42. 42. 강의 생성 • 물의 성질: 높은 곳에서 낮은 곳으로 흐름 • 산 정상에서 해안가로 • Corner의 높이 활용 • 모든 Corner가 인접한 가장 낮은 Corner를 알고 있음 • 가장 낮은 Corner를 따라가면 결국 해안가 www.scienceall.com
  43. 43. 강의 생성 • 적당한 개수의 강 시작지점 선택 • 일정 높이 이상 • 여러 물줄기가 만나는 경우 강의 폭 증가 • 근처에 호수가 있을 경우 자연스럽게 호수 쪽으로 • 호수를 주위에서 가장 낮은 지역으로 처리했음
  44. 44. 습도 설정 • 생물 군계 데이터를 생성 하는데 필요 • 기후 시뮬레이션? • 복잡한 계산 없이 그냥 강,호수 데이터 이용 • 강, 호수로부터의 거리에 따라서 상대 습도 값 설정 • 강, 호수 같이 ‘물’ 속성을 가진 Corner에 기본 습도 값 k 할당 • 주위 Corner 로 1보다 작은 값을 곱해서 전달 (ex: k * 0.9) • 반복! Fig1 in Krahn 2004
  45. 45. 습도 재분배 • 강 / 호수의 모양에 따라서 습도의 총 합이 달라짐 • 섬마다 총 습도의 합은 동일하게 유지되길 원함 • 모든 Corner를 습도 값으로 정렬 • 높이 재분배 할 때랑 같은 방식 • 순서에 따라 Corner에 1~0 사이의 습도 값 재 설정 • 제일 습도가 높았던 곳은 1, 중간은 0.5, 가장 낮았던 곳은 0 • 따로 분포 함수는 적용하지 않았음 • 그냥 f(x) = x 인 함수 이 부분의 합이 섬마다 달라짐
  46. 46. 생물 군계 설정 • 습도 / 온도에 따른 생물 군계 • 다양한 동/식물 표현에 필요 • 온도는 높이를 이용해서 계산 • 높은 곳일수록 저온 • 이렇게 작은 섬에 저런 데이터가? • 게임적 허용 (...)
  47. 47. 생물 군계 설정 습도 온도
  48. 48. 생물 군계 설정 • 습도 / 온도에 따른 2차원 테이블 • Node의 습도/ 온도  생물 군계 생성 http://www-cs-students.stanford.edu/~amitp/game-programming/polygon-map-generation/
  49. 49. 섬 만들기 요약
  50. 50. 잠이 옵니다…
  51. 51. 여기까지는 전부 사이트에 있는 내용 • 짤방은 한땀 한땀 제가 만들긴 했지만... • 설명이 부족하셨다면 사이트 방문을 권해드립니다 • 여기서 다루지 않는 몇 가지 추가사항 • Edge noise • Lava, Road 생성 • 필요하시면 역시 사이트 방문을 추천
  52. 52. 실제 구현
  53. 53. Windows Form을 통한 툴 제작 • C#으로 쾌속 개발! • 알고리즘 자체는 Flash code 가 제공되므로 간단 • Voronoi Diagram / Noise 생성 • 외부 라이브러리로 해결 • Rendering이 문제 • GDI+ 로 어떻게든 해결 • 그래도 힘든 건 Per Pixel 연산 Youtube: Top Ten Fastest Animals In The World
  54. 54. Voronoi Diagram 생성 • Fortune’s algorithm 이용 • 위키에 잘 설명되어 있지만 직접 만들려니 (...)
  55. 55. Fortune’s Voronoi algorithm • Code Project 에 있는 C#용 Library 사용 • Fortune’s Voronoi algorithm implemented in C# • 간편하게 사용 가능 • List<Vector> 로 입력 데이터 전달 • List <Edge> , Dictionary<Vector, Node> 로 데이터 출력 • Corner 데이터는 Edge / Node 모음을 통해서 생성 • MPL License • 원본 코드를 고칠 일은 없음 • 공개 배포 되는 프로그램도 아님
  56. 56. Noise 생성 • 섬 생성 및 데이터 출력에 고품질의 Noise 필요 • 섬의 모양 생성 • 생물 군계 데이터 • LibNoise for .Net 이용 • A portable, open-source, coherent noise-generating library • 고품질의 다양한 Noise 지원 • libnoisedotnet.codeplex.com • MIT License
  57. 57. LibNoise for .Net • 다양한 Noise 생성 방법 지원 • 3D Gradient Noise (Coherent Noise) Coherent Non-Coherent Perlin Ridged Billow Turbulence
  58. 58. LibNoise for .Net • Fractal Noise 생성 지원 • 자연적으로 많이 보이는 패턴과 유사 Freq=5 Freq=10 Freq=20 Freq=40 Freq=80 위 Noise를 전부 더해줌 (값은 고주파로 갈수록 작게)
  59. 59. GDI+ Rendering • 원하는 사이즈의 Bitmap 생성 • Graphics 객체를 이용해서 Node / Edge Rendering • Bitmap 에서 Graphics 객체 가져오기 Graphics canvas = Graphics.FromImage(srcBMP); • 기본 바탕색 설정 canvas.FillRectangle(clearBrush, 0, 0, srcWidth, srcHeight);
  60. 60. Node Rendering • Graphics.FillPolygon(Brush brush, PointF[] points) 사용 • Node에 미리 저장된 Corners 값 사용 • 기본적인 섬 Rendering 용도 Node Corners
  61. 61. Edge Rendering • Graphics.DrawLine(Pen pen, PointF pt1, PointF pt2) 사용 • 주로 강 Rendering에 사용 • 그 외 디버깅 용도 • 섬의 윤곽 • 각 Node 구분
  62. 62. Heightmap Rendering • 기존 Node Rendering 방식 사용 불가 • Node 윤곽이 그대로 보임 • 각 Corner에 저장된 높이 값을 이용한 Gradient Rendering 필요
  63. 63. Gradient Rendering • Drawing2D.PathGradientBrush 사용 • PathGradientBrush(PointF[] points) • gradientBrush.CenterPoint • gradientBrush.CenterColor • Node가 가지고 있는 높이 값 사용 • gradientBrush.SurroundColors • Corners가 가지고 있는 높이 값 사용 • Graphics.FillPolygon(gradientBrush, pointArray) Brush 생성시 Node에 속한 Corners 값 넣어줌 Corners Center
  64. 64. Pixel Operation • Bitmap을 Pixel 단위로 Read/Write 필요 • 최종 결과물에 Noise 적용, Mask 생성 • GetPixel, SetPixel 함수 사용 불가 • 믿을 수 없을 만큼 느림 • LockBits / unsafe block 이용 Rectangle rect = new Rectangle(0, 0, width, height); BitmapData data = bmp.LockBits(rect, ImageLockMode. ReadWrite, PixelFormat.Format32bppPArgb); unsafe { byte* origin = (byte*)data.Scan0.ToPointer(); } bmp.UnlockBits(data);
  65. 65. 그 외 환경설정 작업 • 게임에 쓰일 섬의 적절한 Preset을 찾기 위해서 필요 • 추후 Random Seed만 바꿔서 섬 대량 생산 • Random Seed 값 설정 • 섬의 크기 설정 • 점의 개수 설정 • 강의 개수/넓이 설정 • Noise 생성 옵션
  66. 66. 초기 모습 • 개발 초기 결과물 • 512x512, 점 10000개 • 섬이 좀... • 너무 고주파 Noise 사용 • Noise 설정 변경 필요
  67. 67. 중기 모습 • 새 Noise 적용 • 생물 군계 적용 • 강 추가 • 끝?
  68. 68. Node 밀도 증가 • 게임에는 좀 더 디테일 한 모습 필요 • Node 형태 안 보이게 • 점 40000개 적용 • 밀도 2배 • 문제발생 의도했던 디테일은 증가하지 않고 오히려 전체적인 모양만 단순해짐
  69. 69. 고밀도 Node 문제 • 고밀도 Node 사이즈 소형화 • Node 배치에 따른 변화 량이 작아짐 • 섬의 외곽선이 점점 단순화 • Node 단위 작업 • 해변이 점점 짧아짐 • 생물군계 분포 • 점점 패턴이 보임 • Random 필요!
  70. 70. 해변이 짧아짐 • 일단 첫 번째 해변 Node 계산 • 그 후 해변 Node 주위의 Node를 해변으로 변경 • Node 밀도에 비례해서 반복 • 점 개수의 제곱근에 비례 • 10000개  1번 • 40000개  2번
  71. 71. 섬의 외곽선 단순화 • 저밀도 섬의 모양 미리 계산 • ‘땅’ / ‘물’ 여부를 Mask Map으로 저장 • 고밀도에서 앞의 Mask Map을 읽어서 ‘땅’ / ‘물’ 결정 • 저밀도에서 큰 폭의 변화 그대로 유지 • 저주파 데이터 + 고주파 데이터로 Detail : 일종의 Fractal ‘땅’ / ‘물’ 결정 Mask Map
  72. 72. 섬의 외곽선 단순화
  73. 73. 생물 군계 단순화 • 고밀도가 될수록 생물 군계 패턴이 단순해짐 • 생물 군계 계산시 Noise 적용 • Node의 Center 해당하는 위치에서 Noise 값 가져옴 • 기존 습도 / 온도에 Noise값 더해서 생물 군계 결정 습도 / 온도에 더해줌
  74. 74. 생물 군계 단순화
  75. 75. One more thing! • 생물 군계의 경계 부분이 아쉽다! • 확대해서 보면 Node 모습으로 분리 • 실제 자연은 저렇게 칼같이 떨어지지 않음 • Pixel 단위로 섞어주면 어떨까?
  76. 76. Pixel 단위 섞기 • 일정 범위 안의 Random한 Pixel과 교환 • 고주파 Noise를 이용해서 교환 Pixel 결정 (3) 교환 (2) Noise 값을 이용 일정 범위에서 교환할 Pixel 선택 (1) 현재 Pixel 위치에 해당하는 Noise 선택
  77. 77. Pixel 단위 섞기 호수 / 바다는 따로 Mask 사용 섞이지 않게 해야 함
  78. 78. 참 쉽죠?
  79. 79. 추가 구현 내용 • 지금까진 주로 아티스트의 의도만 반영 • 일단 보기 좋게 만들자 • 게임 디자이너의 의도 역시 반영 되어야 한다! • 디자인 요구사항 • 생성되는 땅의 면적 조절 기능 • 생물 군계의 비율 조절 기능 • 자투리 섬 생성 안되게 • 봉우리 개수 조절 가능하게
  80. 80. 생성되는 땅의 면적 조절기능 • Noise에 따라 달라지는 땅의 면적 • 섬마다 땅의 면적이 너무 차이 나면 문제 • 땅의 총 면적이 원하는 값이 되도록 “기준 값”수정 물 물 Corner 이쯤에서 섬 생성 로직 다시 리뷰 Corner의 위치에 해당하는 Noise값을 이용 “기준 값” 이상이면 ‘땅’ / 이하이면 ‘물’
  81. 81. 생성되는 땅의 면적 조절기능 • 알맞은 “기준 값” 을 찾기 위한 방법 • 땅의 면적은 기준 값의 크기에 따라 정렬 • 기준 값 땅의 면적  Binary Search • 요구 면적에 근접할 때 까지 반복 • 땅의 면적 : 모든 ‘땅’ Node 면적의 합 • 그냥 모든 ‘땅’ Node 개수의 합으로 근사 Best 기준 값 땅의 면적 기준 값 요구 면적
  82. 82. • 땅의 비율이 55% 정도가 되도록 기준 값 자동 조절 • 섬모양의 변화는 유지 • 땅의 면적은 비슷하게 • 고정된 기준 값 • 섬마다 땅의 면적 차이 발생 Before After
  83. 83. 생물 군계의 비율 설정 결국 원화는 비율이 되도록 “기준 값“ (온도 A,B / 습도 I,K,M) 을 수정! • 생성되는 생물 군계의 비율은 Random = 그때 그때 달라요! • Seed 가 변해도 기획자가 설정한 생물 군계 비율은 유지되게! 생물 군계 설정 방법 if(온도 < A) if(습도 > I) = 설원 else = 툰드라 else if(온도 < B) = 온대림 else if(습도 > K ) = 열대림 else if(습도 > M) = 초원 else = 사막
  84. 84. 생물 군계의 비율 설정 • 땅의 면적 조절 기능과 거의 비슷함 • (설원 + 툰드라) / 나머지는 온도 A로 구분 • 온도 A를 Binary search • 계산된 온도 A값을 확정 • 설원 / 툰드라를 구분하는 습도 I 계산 • 동일하게 B, K,M 을 계산 • 온도 B = 온대림 / (열대림 + 초원 +사막) • 습도 K = 열대림 / (초원 + 사막) • 습도 M = 초원 / 사막 온도 A (설원 + 툰드라) Node 개수 온도 기준 요구 개수
  85. 85. 여기까지가 현재 구현된 내용 • 그럭저럭 볼만한 섬 생성 가능 • 아직 서버 연동은 (...) • 계산 시간 • 1024x1024, 40000개 기준 5초 정도 • 4096x4096, 640000개 기준 1분 이상 • Voronoi Diagram 생성에 많은 시간사용
  86. 86. 앞으로 개선할 사항 • 자투리 섬 생기지 않게 • 섬마다 개수 / 크기가 제각각 • 사실상 죽은 땅 • 본토 섬으로 병합처리 필요 • 호수의 면적이 일정하지 않음 • 지금은 땅의 면적만 일정하게 유지 • 호수가 너무 크거나 작으면 문제 • 일단 동일하게 섬 생성 과정 처리  그 후 섬 안에서 다시 호수 생성 하면?
  87. 87. 앞으로 개선할 사항 • 좀 더 자연스러운 강의 표현 필요 • 삼각주 / 곡류 / 선상지 등의 표현 • 좀 더 S라인이 되어야 할 듯? www.scienceall.com
  88. 88. 정리
  89. 89. 다양한 모습의 디테일한 섬이 필요 • 서버 – • 마을 서버 섬 크기 大 전체 서버 수 만큼 존재 미리 생산 가능 마을 섬 크기 中 유저 그룹만큼 존재 유저 개인 섬 크기 小 유저 수만큼 존재 서버와 연동해서 동적 생산 필요
  90. 90. 툴을 통한 사전작업 • 섬의 고유 속성 설정 • 기획자 / 아티스트를 통해서 • 다양한 설정 가능 • Seed, 점의 개수, 맵의 크기 • 강 개수, 넓이 • Noise • 생태 군계 비율 • 땅 비율 • 데이터 출력 옵션
  91. 91. 필요한 개수 만큼 생성 생성된 섬마다 Unique한 모습을 가지면서 미리 설정한 섬의 고유 속성 유지 Seed 변경
  92. 92. 생성된 지형 데이터 게임에 적용 생물 군계 데이터 바다/강/호수 데이터 높이 데이터
  93. 93. 생물 군계 데이터 • 생물 군계 별 바닥 처리 • 생물 군계 별 식생 배치
  94. 94. 바다/강/호수 데이터 물론 이 사이에 많은 처리가 필요합니다(…)
  95. 95. 높이 데이터 모바일은 흑흑 Bing map
  96. 96. 결론은 자동생성 좋아요 • 이미 많은 게임들에서 자동 생성되는 컨텐츠를 사용 중 • Minecraft, 디아블로, 마비노기 • Realm of the mad god • 최대한 컴퓨터가 할 수 있는 일은 컴퓨터가 하게 • 사람은 좀 더 창의적이고 도전적인 일을 하자! • 이런 자동생성 작업이 상당히 재미있음 • 결과를 바로 바로 눈으로 확인 가능 • 아주 약간은 신이 된 기분 • 하지만 아트 센스가 없다면 어떨까(...) • 우리모두 함께 해요 
  97. 97. Q&A (발표 할 때 올라온 질문들) • Q. 좋은 맵이 어떤 것인가에 대한 평가 기준을 정하는 것이 어려울 것 같 은데, 그 부분에 대한 고려가 궁금합니다. • A. 저희 프로젝트 기준으로 말씀 드리자면, 첫 번째로 일단 생성된 섬을 눈으로 봤을 때 패턴이나 인공적인 느낌이 들지 않고 실제 자연에 있을법 한 섬의 모습을 가져야 합니다. 이건 수치로 평가하긴 힘들고 눈으로 직 접 확인하고 게임 내에서도 테스트 해봐야 되겠지요. • 두 번째로 첫 번째 조건을 만족하면서도 게임의 기획 의도에 따른 특성을 만족시켜야 합니다. 앞에서 말씀 드렸던 섬의 크기, 생물 군계의 비율 등 이 될 수 있겠네요. 게임마다 필요한 필수요소 들이 있을 테니 그걸 잘 파 악하시는 것이 중요할 것 같습니다.
  98. 98. • Q. 노이즈맵을 생성해서 만개의 맵을 만든다고 하셨는데 만개의 노이즈 맵의 용량이 상당하지 않나요? • A. 일단 섬의 생성 개수에 대해서 말씀 드리자면 만개의 맵을 만드는 것 은 아니고 게임에 필요한 개수 만큼 동적으로 생성하는 것이 목표입니다. 그리고 노이즈 자체도 따로 맵으로 만드는 것이 아니고 일반 Random 함 수처럼 좌표 값을 넣으면 Seed + 수식계산을 통해서 그 좌표에 해당하는 노이즈 값을 알아오는 방식이기 때문에 따로 메모리나 하드에 미리 노이 즈맵 파일을 생성하거나 하지는 않습니다. • Q. 해안 절벽 같은 건 없나요? • A. 아직 해안 절벽에 대한 고려는 해보지 않았습니다. 프로젝트에 필요하 다면 연구를 해야겠지만 어떻게 처리할지는 아직 잘 모르겠네요 
  99. 99. • Q. 알고리즘 기반으로 만들어진 섬에 기획의도와 다른 결과물이 나오면 알고 리즘을 수정하게 될 텐데, 그러면 기존에 생성된 섬 데이터는 수정이 불가능하 지 않은지? 또한 그런 원치 않는 요소는 실제로 출현하기 전까지 알고리즘의 문제로 노출되지 않을 수도 있는데 결과물은 어떤 방식으로 검증하셨는지? • A. 이미 만들어진 섬은 당연히 수정이 쉽지 않습니다. 아주 미세한 수정이고 기 존에 만들었던 섬 데이터의 Seed와 각종 설정 값을 저장하고 있다면 그걸 바 탕으로 새로 만든 섬으로 변경이 불가능한 것은 아니지만 여러 가지 부작용(예 를 들어 섬의 모습이 바뀌어서 땅 위에 지어놓은 집이 물 위에 있다거나)이 생 길 수 있으니 게임에 이미 쓰이고 있던 섬의 수정은 최대한 지양해야 합니다. • 따라서 일단 기획의도와 다르게 만들어진 섬은 처음부터 게임에 쓰이지 않도 록 생성시 제대로 검증을 해야 합니다. 알고리즘 자체를 수학적으로 엄밀히 검 증하기는 힘들지만 결과물이 수학적 기획의도 대로 나오는지의 여부는 쉽게 검증할 수 있습니다. (예를 들어서 땅의 비율, 생물 군계의 비율, 섬의 경사도 등) 하지만 섬의 모양이 자연스럽지 않다거나 생물군계의 패턴이 보기에 단순 하다 등의 비주얼적인 측면은 자동 검증이 힘들기 때문에 최대한 많이 만들어 보고 경험적으로 확인하는 수 밖엔 없을 것 같습니다.
  100. 100. 긴 시간 감사합니다 

×