11_빠른 개발 가능한 레벨 편집 시스템

1,877 views
1,608 views

Published on

카사 공개 세미나 발표자료

Published in: Education, Technology, Business
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,877
On SlideShare
0
From Embeds
0
Number of Embeds
11
Actions
Shares
0
Downloads
22
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

11_빠른 개발 가능한 레벨 편집 시스템

  1. 1. 품질을 유지하면서도빠른 개발 가능한 레벨 편집 시스템<br />김성익noerror@softnette.com<br />2011/06/12KASA 공개 세미나<br />
  2. 2. 구성<br />1. 목표<br />2. 레벨 디자인 및 편집 시스템 개요<br />3. 빠른 이터레이션이 장점인 편집 시스템 소개<br />4. 프리팹 기반 절차적 편집 시스템 제안<br />5. 질문/답<br />
  3. 3. 목표<br />빠른 개발<br />구현 혹은 변경이 어렵지 않아 빠른 시스템 개발이 가능<br />레벨 제작이 쉬워서 빠른 게임 개발이 가능<br />
  4. 4. 레벨 디자인<br />게임내의 세계를 구성하고<br />세계를 구성하는 여러 가지 설정을 하는 작업<br />
  5. 5. 레벨 디자인<br />게임내의 세계를 구성하고<br />세계를 구성하는 여러 가지 설정을 하는 작업<br />1번만 다룹니다 (특히 정적 메시 중심)<br />
  6. 6. 레벨 편집 시스템<br />Height Field Terrain, Vector Field Terrain, Marching Cube(Voxel) Terrain, CSG, Prefab, Procedural Building, Prop, Mesh Group, Procedural Tree, Foliage(Vegetation) Painting, Decal, Road, River, Water Surface, Cloud, Whether….<br />
  7. 7. 빠른 이터레이션<br />제작 -> 테스트 -> 수정을 반복하여<br />게임의 재미요소를 더 빠르게, 더 많이 시도하고 검증<br />기술적인 요소를 검증<br />빠른 프로토타이핑<br />http://www.youtube.com/watch?v=l-bdTT6lQTc<br />http://www.slideshare.net/epiphany/blizzard-design-processkor-for-web-v10<br />
  8. 8. 빠른 이터레이션<br />요구사항<br />손쉽게 레벨을 구성<br />아트에 대한 감각이 부족하더라도 작업가능<br />게임 디자이너(aka 기획자)도 가능<br />작업 후 바로테스트 가능<br />희망사항<br />결과물의 품질도 좋다면 재작업이 필요 없으니 OK<br />
  9. 9. 빠른 이터레이션<br />빠른 이터레이션이 장점인 대표적인 레벨 시스템들<br />CSG<br />Editable Mesh<br />Procedural Mesh<br />Prefab<br />터레인 계열은 생략합니다<br />
  10. 10. CSG<br />Constructive Solid Geometry<br />Quake, Half-life, Unreal 등에서 사용<br />http://www.unrealengine.com<br />
  11. 11. CSG<br />Solid Brush(Convex 혹은 Convex Set)를 Boolean(더하기, 빼기) 연산하여 메시 생성<br />원하는 비교적 단순한 기하를 빠르게 만들 수 있다<br />BSP친화적인 구조<br />Boolean 연산이 BSP기반<br />
  12. 12. CSG<br />게임 친화적<br />군더더기 없이 단순한 형태<br />Solid가 분명해서 충돌 처리에도 그대로 사용<br />공간 구분이 명확해서 가시성 검사에 유리<br />대체적으로 축 정렬되어 있어 라이트맵Unwrap 및 Atlas를 훌륭하게 할당 가능<br />네비게이션메시로도 활용 가능<br />
  13. 13. CSG<br />에디트가 쉽지 않다<br />약간 익숙하지 않은 개념<br />최종 품질로는 쓰려면<br />최적화 감각이 필요하다<br />결과물의 복잡도가 작업자마다다르다 (면 나누는 요령~!!)<br />텍스처링: 초능력이 필요<br />
  14. 14. CSG<br />편의성을 고려하면서 툴 제작하기가 쉽지 않다<br />
  15. 15. Editable Mesh<br />Crysis Sandbox (Solid)<br />수정 가능한 메시<br />버텍스 이동 / 면 밀고 당기고…<br />간단한 지오메트리를 쉽게구성<br />DCC로 export 가능<br />DCC에서 재제작한 후에교체하는전략이 가능<br />crytek Sandbox2<br />
  16. 16. Editable Mesh<br />일반적으로 이해하기 쉬운 제작 방식<br />테스트용으로는 무리 없는 결과물<br />도구화하여 구현하기도 비교적 쉬움<br />개발 파이프라인에 도움이 된다고는 해도, 실제 게임에서는 안 쓰이므로 흥이 안 남<br />품질의 한계가 있음<br />텍스처링역시 어려움<br />
  17. 17. Editable Mesh<br />참고<br />http://www.youtube.com/watch?v=YldZdH7i7xQ<br />
  18. 18. 절차적 메시<br />입력된 수치를 기반으로 정해진 공정을 통해 메시 자동 생성<br />SpeedTree, CityEngine등<br />http://www.speedtree.com/<br />
  19. 19. 절차적 메시<br />City Engine<br />수치입력만으로 건물을 생성<br />꽤 좋은 품질의 다양한 결과물<br />비용대비 우수<br />http://www.procedural.com<br />http://www.youtube.com/watch?v=xaPDmuotjWU<br />
  20. 20. 절차적 메시<br />제한적인 부분에서만 사용 가능<br />게임에서 최종 메시로 사용하기에는 약간 아쉬울 수 있는 스타일링<br />아티스트의 후처리 작업이 필요할 수도<br />게임 스타일에 따라서는 선택이 어려울 수도<br />
  21. 21. Prefab<br />조립식<br />아티스트가 만든 작은 메시(aka prop)들을 조합<br />Prefab = Prop + prop + …<br />Prefab = Prefab + prop +…<br />일반적으로 많이 사용되고있는 방법<br />http://www.youtube.com/watch?v=5KH7Wbi0clo<br />
  22. 22. Prefab<br />렌더링에 최적화된 형태<br />재활용, 인스턴싱<br />비디오 메모리 최적 (적은 메모리 사용)<br />Prefab별로 추가적인 정보를 넣을 수 있다<br />단위 충돌 메시<br />LOD 메시<br />어클루더<br />
  23. 23. Prefab<br />에디트와 관리가 쉽다<br />배치는 비 아티스트도 가능<br />단, 기반 Prefab은 아티스트 작업 필요<br />구현도 쉽다<br />배치 후 그룹화하여 등록, 배치에 재 사용<br />아티스트의 의도에 맞는 결과물<br />최종 사용 가능한 품질<br />
  24. 24. Prefab<br />아티스트와협업이 필요<br />어셋 만드는 관점의 변화<br />분해하여 제작<br />연속된 형태로 만들기 위해선 Unit 단위 이해 필요<br />단위는 정수 배 (0.1 * 10 != 1)<br />편집의 묘미가 필요<br />어렵지는 않다<br />http://www.gamasutra.com/view/feature/2475/creating_modular_game_art_for_fast_.php<br />
  25. 25. 맘대로 정리<br />
  26. 26. 요구 사항<br />빠른 이터레이션이 가능하고<br />게임 디자이너도 손쉽게 사용할 수 있고<br />데이터가 게임에 최적화되면서도<br />큰 수정 없이 최종 데이터로 사용 가능하면<br />
  27. 27. 제안<br />Prefab 기반<br />비교적 안정적이고 개발부담 적은 방식<br />절차적으로 생성<br />손쉬운 연동 인터페이스<br />
  28. 28. Prefab 기반<br />기본 Prefab 기반<br />그래픽 아티스트에 의해 만들어진 규격화된 메시 조합<br />Decal 등을 고려하여 디테일 설정<br />여기서 복습<br />Prop + Prop = Prefab<br />Prefab + Prop = Prefab<br />Prefab + Prefab = Prefab<br />
  29. 29. Prefab 패턴<br />반복 구간<br />절차적으로 구성 가능한 패턴<br />
  30. 30. 함수화<br />스크립트화 (네이티브코드,그래프편집OK)<br />function AAB(model1, model2, loop, tm)<br />{<br /> vec3 direction(1, 0, 0);<br /> for(i=0; i<loop; i++)<br /> {<br /> place(model1.mesh, tm);<br />tm.translate( dot(model1.bound, direction) * direction );<br /> }<br /> place(model2.mesh, tm);<br />}<br />
  31. 31. 데이터화<br />데이터화<br /><prefab id="test"><br /> <function>AAB</function><br /> <model1>model/arch.model</model1><br /> <model2>model/wall2.model</model2><br /> <loop>2</loop><br /></prefab><br />function AAB(model1, model2, loop, tm)<br />{<br /> vec3 direction(1, 0, 0);<br /> for(i=0; i<loop; i++)<br /> {<br /> place(model1.mesh, tm);<br />tm.translate( dot(model1.bound, direction) * direction );<br /> }<br /> place(model2.mesh, tm);<br />}<br />
  32. 32. 도구화<br />도구화<br /><prefab id="test"><br /> <function>AAB</function><br /> <model1>model/arch.model</model1><br /> <model2>model/wall2.model</model2><br /> <loop>2</loop><br /></prefab><br />function AAB(model1, model2, loop, tm)<br />{<br /> vec3 direction(1, 0, 0);<br /> for(i=0; i<loop; i++)<br /> {<br /> place(model1.mesh, tm);<br />tm.translate( dot(model1.bound, direction) * direction );<br /> }<br /> place(model2.mesh, tm);<br />}<br />
  33. 33. 도구화<br />도구화 (시각화)<br />함수 선택시뷰 포트에 빈 슬롯 2개 등장<br />어셋 브라우저에서 드래그하여 Prefab 정의<br />
  34. 34. 배치<br />레벨에 배치<br />test,2<br />test,3<br /><prefab id="test"><br /> <function>ABB</function><br /> <model1>model/arch.model</model1><br /> <model2>model/wall2.model</model2><br /><loop>2</loop><br /></prefab><br />
  35. 35. 배치 인터페이스<br />힌트<br />1. UI<br />2. Braid 레벨 에디터<br />
  36. 36. 배치 인터페이스<br />힌트<br />1. UI<br />2. Braid 레벨 에디터<br />빙고 : 드래그로 반복구간 설정<br />http://www.youtube.com/watch?v=v1IgDSYRjZk<br />
  37. 37. Prefab<br />다시 한번 복습<br />Prop + Prop = Prefab<br />Prefab + Prefab = Prefab<br />
  38. 38. 견적을 내봅시다<br />
  39. 39.
  40. 40.
  41. 41.
  42. 42.
  43. 43. 어셋 파이프라인<br />만들려고 하는 레벨을 구상<br />조립 가능하도록 분해<br />조립 가능한 레벨을 구상 (꾸미기 고려)<br />조립 함수 등도 고려<br />연결 객체는 연결 단위를 고려하여 각 메시들을제작<br />기본 Prefab 구성<br />레벨 디자이너는 조합하고 크기 변경하면서 월드에 배치하고 테스트<br />데칼, 식물, 라이팅 등으로 꾸미기<br />
  44. 44. 기능보강<br />알고리즘 확장<br />랜덤 / 테이블<br />function AABex(model1, model2, model_ex, loop, tm)<br />{<br /> vec3 direction(1, 0, 0);<br /> for(i=0; i<loop; i++)<br /> {<br /> if ((makehash(tm.pos) %10) >= 8)<br /> {<br /> place(model_ex.mesh, tm);<br />tm.translate( dot(model_ex.bound, direction) * direction );<br /> } else<br /> {<br /> place(model1.mesh, tm);<br />tm.translate( dot(model1.bound, direction) * direction );<br /> }<br /> }<br /> place(model2.mesh, tm);<br />}<br />
  45. 45. 기능보강<br />대부분 축 정렬된 형태나 규격화된 형태<br />곡선 형태는 경우에 맞도록 연결 가능한 곡선 형태 메시로 만들어야<br />http://www.gdcvault.com/play/1012448/Building-an-Open-World-Game<br />
  46. 46. Warping<br />한 축을 구부려 어셋 변경 없이 에디터 상에서 곡선 만들기<br />도로, 성벽, …<br />절차<br />기울이고자 하는 긴 축을 선택<br />커브 에디팅<br />미분(기울기), 적분(길이) 없이곡선을 여러 세그먼트로 나누어서 직선 리스트로 단순화<br />직선 방향과 업 벡터 이용하여 각 축 공간정의<br />버텍스의 축 좌표로 구간 선택, 좌표계 적용<br />
  47. 47. 기타<br />테스트 킷(어셋)<br />일반화된 형태의 간단한 지오메트리의prefab 세트<br />프로그래머도, 게임 디자이너도 아티스트의 도움 없이 프로토타이핑 가능, 충분한 사전 테스트로 시행 착오최소화<br />http://www.gametrailers.com/video/tech-dive-uncharted-drakes/26677<br />
  48. 48. 결론<br />게임 레벨 제작 시스템에서 빠른 이터레이션은 중요<br />Prefab을 응용 개선하여 개발 효율 향상<br />절차적 함수(스크립트, C++)를 적용<br />드래그로 시각적으로 수치를 조절하는 인터페이스<br />시스템이 복잡하지 않아 구현도 쉽다.<br />함수 기능을 확장하고, 곡선 등을 적용하면 구조적인 단조로움을 완화<br />테스트용 어셋을 잘 구성하면 CSG, Editable Mesh등 없어도, 아티스트 없이 손쉽게 프로토타이핑가능<br />
  49. 49. 질문/답<br />감사합니다<br />

×