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

More Related Content

Viewers also liked

[12 0114] 비실사 렌더링 기법
[12 0114] 비실사 렌더링 기법[12 0114] 비실사 렌더링 기법
[12 0114] 비실사 렌더링 기법SeungMin Yang
 
KCGS11_실시간 피사계 심도 렌더링 개선 기법
KCGS11_실시간 피사계 심도 렌더링 개선 기법KCGS11_실시간 피사계 심도 렌더링 개선 기법
KCGS11_실시간 피사계 심도 렌더링 개선 기법noerror
 
05_글로벌일루미네이션
05_글로벌일루미네이션05_글로벌일루미네이션
05_글로벌일루미네이션noerror
 
레이더즈 기술 사례
레이더즈 기술 사례레이더즈 기술 사례
레이더즈 기술 사례기룡 남
 
작은 레벨 디자인 가이드 01
작은 레벨 디자인 가이드 01작은 레벨 디자인 가이드 01
작은 레벨 디자인 가이드 01용태 이
 
유니티직원들 유니티배우기 (세일즈,마케팅,오피스팀 대상)
유니티직원들 유니티배우기 (세일즈,마케팅,오피스팀 대상)유니티직원들 유니티배우기 (세일즈,마케팅,오피스팀 대상)
유니티직원들 유니티배우기 (세일즈,마케팅,오피스팀 대상)GukHwan Ji
 
Ndc12 이창희 render_pipeline
Ndc12 이창희 render_pipelineNdc12 이창희 render_pipeline
Ndc12 이창희 render_pipelinechangehee lee
 
5시간동안 웨딩런 만들기 워크샵(유나이트2015)
5시간동안 웨딩런 만들기 워크샵(유나이트2015)5시간동안 웨딩런 만들기 워크샵(유나이트2015)
5시간동안 웨딩런 만들기 워크샵(유나이트2015)GukHwan Ji
 
Level design in 11 points
Level design in 11 pointsLevel design in 11 points
Level design in 11 points용태 이
 
15_TextureAtlas
15_TextureAtlas15_TextureAtlas
15_TextureAtlasnoerror
 
NDC 2013 - 초심자를 배려하는 레벨 디자인
NDC 2013 - 초심자를 배려하는 레벨 디자인NDC 2013 - 초심자를 배려하는 레벨 디자인
NDC 2013 - 초심자를 배려하는 레벨 디자인용태 이
 
KGC 2013 - 5일만에 레벨 디자인하기
KGC 2013 - 5일만에 레벨 디자인하기KGC 2013 - 5일만에 레벨 디자인하기
KGC 2013 - 5일만에 레벨 디자인하기용태 이
 
이펙트 없는 게임은 콜라없는 햄버거와 같다(유니티 이펙트 세미나용 PT)
이펙트 없는 게임은 콜라없는 햄버거와 같다(유니티 이펙트 세미나용 PT)이펙트 없는 게임은 콜라없는 햄버거와 같다(유니티 이펙트 세미나용 PT)
이펙트 없는 게임은 콜라없는 햄버거와 같다(유니티 이펙트 세미나용 PT)GukHwan Ji
 
Game system design using Table
Game system design using TableGame system design using Table
Game system design using TableDavid Byun
 
NDC2016 카툰999 포스트모템(피드백의 힘)
NDC2016 카툰999 포스트모템(피드백의 힘)NDC2016 카툰999 포스트모템(피드백의 힘)
NDC2016 카툰999 포스트모템(피드백의 힘)GukHwan Ji
 
게임제작개론 : #4 게임 밸런싱
게임제작개론 : #4 게임 밸런싱게임제작개론 : #4 게임 밸런싱
게임제작개론 : #4 게임 밸런싱Seungmo Koo
 
디발자가 말하는 시선을 끄는 PPT
디발자가 말하는 시선을 끄는 PPT디발자가 말하는 시선을 끄는 PPT
디발자가 말하는 시선을 끄는 PPTJungwon An
 

Viewers also liked (18)

[12 0114] 비실사 렌더링 기법
[12 0114] 비실사 렌더링 기법[12 0114] 비실사 렌더링 기법
[12 0114] 비실사 렌더링 기법
 
KCGS11_실시간 피사계 심도 렌더링 개선 기법
KCGS11_실시간 피사계 심도 렌더링 개선 기법KCGS11_실시간 피사계 심도 렌더링 개선 기법
KCGS11_실시간 피사계 심도 렌더링 개선 기법
 
05_글로벌일루미네이션
05_글로벌일루미네이션05_글로벌일루미네이션
05_글로벌일루미네이션
 
레이더즈 기술 사례
레이더즈 기술 사례레이더즈 기술 사례
레이더즈 기술 사례
 
작은 레벨 디자인 가이드 01
작은 레벨 디자인 가이드 01작은 레벨 디자인 가이드 01
작은 레벨 디자인 가이드 01
 
유니티직원들 유니티배우기 (세일즈,마케팅,오피스팀 대상)
유니티직원들 유니티배우기 (세일즈,마케팅,오피스팀 대상)유니티직원들 유니티배우기 (세일즈,마케팅,오피스팀 대상)
유니티직원들 유니티배우기 (세일즈,마케팅,오피스팀 대상)
 
Ndc12 이창희 render_pipeline
Ndc12 이창희 render_pipelineNdc12 이창희 render_pipeline
Ndc12 이창희 render_pipeline
 
5시간동안 웨딩런 만들기 워크샵(유나이트2015)
5시간동안 웨딩런 만들기 워크샵(유나이트2015)5시간동안 웨딩런 만들기 워크샵(유나이트2015)
5시간동안 웨딩런 만들기 워크샵(유나이트2015)
 
Level design in 11 points
Level design in 11 pointsLevel design in 11 points
Level design in 11 points
 
15_TextureAtlas
15_TextureAtlas15_TextureAtlas
15_TextureAtlas
 
NDC 2013 - 초심자를 배려하는 레벨 디자인
NDC 2013 - 초심자를 배려하는 레벨 디자인NDC 2013 - 초심자를 배려하는 레벨 디자인
NDC 2013 - 초심자를 배려하는 레벨 디자인
 
KGC 2013 - 5일만에 레벨 디자인하기
KGC 2013 - 5일만에 레벨 디자인하기KGC 2013 - 5일만에 레벨 디자인하기
KGC 2013 - 5일만에 레벨 디자인하기
 
이펙트 없는 게임은 콜라없는 햄버거와 같다(유니티 이펙트 세미나용 PT)
이펙트 없는 게임은 콜라없는 햄버거와 같다(유니티 이펙트 세미나용 PT)이펙트 없는 게임은 콜라없는 햄버거와 같다(유니티 이펙트 세미나용 PT)
이펙트 없는 게임은 콜라없는 햄버거와 같다(유니티 이펙트 세미나용 PT)
 
Game system design using Table
Game system design using TableGame system design using Table
Game system design using Table
 
NDC2016 카툰999 포스트모템(피드백의 힘)
NDC2016 카툰999 포스트모템(피드백의 힘)NDC2016 카툰999 포스트모템(피드백의 힘)
NDC2016 카툰999 포스트모템(피드백의 힘)
 
게임제작개론 : #4 게임 밸런싱
게임제작개론 : #4 게임 밸런싱게임제작개론 : #4 게임 밸런싱
게임제작개론 : #4 게임 밸런싱
 
Introduction to Data Oriented Design
Introduction to Data Oriented DesignIntroduction to Data Oriented Design
Introduction to Data Oriented Design
 
디발자가 말하는 시선을 끄는 PPT
디발자가 말하는 시선을 끄는 PPT디발자가 말하는 시선을 끄는 PPT
디발자가 말하는 시선을 끄는 PPT
 

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

NDC11_김성익_슈퍼클래스
NDC11_김성익_슈퍼클래스NDC11_김성익_슈퍼클래스
NDC11_김성익_슈퍼클래스Sungik Kim
 
이권일 Sse 를 이용한 최적화와 실제 사용 예
이권일 Sse 를 이용한 최적화와 실제 사용 예이권일 Sse 를 이용한 최적화와 실제 사용 예
이권일 Sse 를 이용한 최적화와 실제 사용 예zupet
 
[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기
[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기
[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기현철 조
 
OpenJigWare(V02.00.04)
OpenJigWare(V02.00.04)OpenJigWare(V02.00.04)
OpenJigWare(V02.00.04)Jinwook On
 
2015 제2회 동아리 해커 세미나 - 병렬컴퓨팅 소개 (16기 김정현)
2015 제2회 동아리 해커 세미나 - 병렬컴퓨팅 소개 (16기 김정현)2015 제2회 동아리 해커 세미나 - 병렬컴퓨팅 소개 (16기 김정현)
2015 제2회 동아리 해커 세미나 - 병렬컴퓨팅 소개 (16기 김정현)khuhacker
 
초초초 (초고속 초저지연 초연결) 5G IoT 플랫폼 개발 이야기
초초초 (초고속 초저지연 초연결) 5G IoT 플랫폼 개발 이야기초초초 (초고속 초저지연 초연결) 5G IoT 플랫폼 개발 이야기
초초초 (초고속 초저지연 초연결) 5G IoT 플랫폼 개발 이야기ksdc2019
 
[2B7]시즌2 멀티쓰레드프로그래밍이 왜 이리 힘드나요
[2B7]시즌2 멀티쓰레드프로그래밍이 왜 이리 힘드나요[2B7]시즌2 멀티쓰레드프로그래밍이 왜 이리 힘드나요
[2B7]시즌2 멀티쓰레드프로그래밍이 왜 이리 힘드나요NAVER D2
 
[NDC08] 최적화와 프로파일링 - 송창규
[NDC08] 최적화와 프로파일링 - 송창규[NDC08] 최적화와 프로파일링 - 송창규
[NDC08] 최적화와 프로파일링 - 송창규ChangKyu Song
 
불어오는 변화의 바람, From c++98 to c++11, 14
불어오는 변화의 바람, From c++98 to c++11, 14 불어오는 변화의 바람, From c++98 to c++11, 14
불어오는 변화의 바람, From c++98 to c++11, 14 명신 김
 
온라인 게임에서 사례로 살펴보는 디버깅 in NDC2010
온라인 게임에서 사례로 살펴보는 디버깅 in NDC2010온라인 게임에서 사례로 살펴보는 디버깅 in NDC2010
온라인 게임에서 사례로 살펴보는 디버깅 in NDC2010Ryan Park
 
온라인 게임에서 사례로 살펴보는 디버깅 in NDC10
온라인 게임에서 사례로 살펴보는 디버깅 in NDC10온라인 게임에서 사례로 살펴보는 디버깅 in NDC10
온라인 게임에서 사례로 살펴보는 디버깅 in NDC10Ryan Park
 
기술사 답안작성 방법_102회 실전답안 중심으로
기술사 답안작성 방법_102회 실전답안 중심으로기술사 답안작성 방법_102회 실전답안 중심으로
기술사 답안작성 방법_102회 실전답안 중심으로Insik Shin
 
시즌 2: 멀티쓰레드 프로그래밍이 왜이리 힘드나요?
시즌 2: 멀티쓰레드 프로그래밍이 왜이리 힘드나요?시즌 2: 멀티쓰레드 프로그래밍이 왜이리 힘드나요?
시즌 2: 멀티쓰레드 프로그래밍이 왜이리 힘드나요?내훈 정
 
Python과 Tensorflow를 활용한 AI Chatbot 개발 및 실무 적용
Python과 Tensorflow를 활용한  AI Chatbot 개발 및 실무 적용Python과 Tensorflow를 활용한  AI Chatbot 개발 및 실무 적용
Python과 Tensorflow를 활용한 AI Chatbot 개발 및 실무 적용Susang Kim
 
Optimizing the graphics_pipeline_
Optimizing the graphics_pipeline_Optimizing the graphics_pipeline_
Optimizing the graphics_pipeline_ozlael ozlael
 
Vectorized processing in_a_nutshell_DeView2014
Vectorized processing in_a_nutshell_DeView2014Vectorized processing in_a_nutshell_DeView2014
Vectorized processing in_a_nutshell_DeView2014Gruter
 
카사 공개세미나1회 W.E.L.C.
카사 공개세미나1회  W.E.L.C.카사 공개세미나1회  W.E.L.C.
카사 공개세미나1회 W.E.L.C.Ryan Park
 

Similar to 11_빠른 개발 가능한 레벨 편집 시스템 (20)

NDC11_김성익_슈퍼클래스
NDC11_김성익_슈퍼클래스NDC11_김성익_슈퍼클래스
NDC11_김성익_슈퍼클래스
 
이권일 Sse 를 이용한 최적화와 실제 사용 예
이권일 Sse 를 이용한 최적화와 실제 사용 예이권일 Sse 를 이용한 최적화와 실제 사용 예
이권일 Sse 를 이용한 최적화와 실제 사용 예
 
[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기
[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기
[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기
 
OpenJigWare(V02.00.04)
OpenJigWare(V02.00.04)OpenJigWare(V02.00.04)
OpenJigWare(V02.00.04)
 
Open Jig Ware
Open Jig WareOpen Jig Ware
Open Jig Ware
 
2015 제2회 동아리 해커 세미나 - 병렬컴퓨팅 소개 (16기 김정현)
2015 제2회 동아리 해커 세미나 - 병렬컴퓨팅 소개 (16기 김정현)2015 제2회 동아리 해커 세미나 - 병렬컴퓨팅 소개 (16기 김정현)
2015 제2회 동아리 해커 세미나 - 병렬컴퓨팅 소개 (16기 김정현)
 
초초초 (초고속 초저지연 초연결) 5G IoT 플랫폼 개발 이야기
초초초 (초고속 초저지연 초연결) 5G IoT 플랫폼 개발 이야기초초초 (초고속 초저지연 초연결) 5G IoT 플랫폼 개발 이야기
초초초 (초고속 초저지연 초연결) 5G IoT 플랫폼 개발 이야기
 
[2B7]시즌2 멀티쓰레드프로그래밍이 왜 이리 힘드나요
[2B7]시즌2 멀티쓰레드프로그래밍이 왜 이리 힘드나요[2B7]시즌2 멀티쓰레드프로그래밍이 왜 이리 힘드나요
[2B7]시즌2 멀티쓰레드프로그래밍이 왜 이리 힘드나요
 
[NDC08] 최적화와 프로파일링 - 송창규
[NDC08] 최적화와 프로파일링 - 송창규[NDC08] 최적화와 프로파일링 - 송창규
[NDC08] 최적화와 프로파일링 - 송창규
 
불어오는 변화의 바람, From c++98 to c++11, 14
불어오는 변화의 바람, From c++98 to c++11, 14 불어오는 변화의 바람, From c++98 to c++11, 14
불어오는 변화의 바람, From c++98 to c++11, 14
 
온라인 게임에서 사례로 살펴보는 디버깅 in NDC2010
온라인 게임에서 사례로 살펴보는 디버깅 in NDC2010온라인 게임에서 사례로 살펴보는 디버깅 in NDC2010
온라인 게임에서 사례로 살펴보는 디버깅 in NDC2010
 
온라인 게임에서 사례로 살펴보는 디버깅 in NDC10
온라인 게임에서 사례로 살펴보는 디버깅 in NDC10온라인 게임에서 사례로 살펴보는 디버깅 in NDC10
온라인 게임에서 사례로 살펴보는 디버깅 in NDC10
 
기술사 답안작성 방법_102회 실전답안 중심으로
기술사 답안작성 방법_102회 실전답안 중심으로기술사 답안작성 방법_102회 실전답안 중심으로
기술사 답안작성 방법_102회 실전답안 중심으로
 
시즌 2: 멀티쓰레드 프로그래밍이 왜이리 힘드나요?
시즌 2: 멀티쓰레드 프로그래밍이 왜이리 힘드나요?시즌 2: 멀티쓰레드 프로그래밍이 왜이리 힘드나요?
시즌 2: 멀티쓰레드 프로그래밍이 왜이리 힘드나요?
 
Shader Driven
Shader DrivenShader Driven
Shader Driven
 
Python과 Tensorflow를 활용한 AI Chatbot 개발 및 실무 적용
Python과 Tensorflow를 활용한  AI Chatbot 개발 및 실무 적용Python과 Tensorflow를 활용한  AI Chatbot 개발 및 실무 적용
Python과 Tensorflow를 활용한 AI Chatbot 개발 및 실무 적용
 
What's new in IE11
What's new in IE11What's new in IE11
What's new in IE11
 
Optimizing the graphics_pipeline_
Optimizing the graphics_pipeline_Optimizing the graphics_pipeline_
Optimizing the graphics_pipeline_
 
Vectorized processing in_a_nutshell_DeView2014
Vectorized processing in_a_nutshell_DeView2014Vectorized processing in_a_nutshell_DeView2014
Vectorized processing in_a_nutshell_DeView2014
 
카사 공개세미나1회 W.E.L.C.
카사 공개세미나1회  W.E.L.C.카사 공개세미나1회  W.E.L.C.
카사 공개세미나1회 W.E.L.C.
 

More from noerror

11_웹서비스활용
11_웹서비스활용11_웹서비스활용
11_웹서비스활용noerror
 
NDC08_실시간비주얼그래프편집
NDC08_실시간비주얼그래프편집NDC08_실시간비주얼그래프편집
NDC08_실시간비주얼그래프편집noerror
 
NDC12_Lockless게임서버설계와구현
NDC12_Lockless게임서버설계와구현NDC12_Lockless게임서버설계와구현
NDC12_Lockless게임서버설계와구현noerror
 
11_통계 자료분석 입문
11_통계 자료분석 입문11_통계 자료분석 입문
11_통계 자료분석 입문noerror
 
11_SH를 이용한 실시간 투명 근사법
11_SH를 이용한 실시간 투명 근사법11_SH를 이용한 실시간 투명 근사법
11_SH를 이용한 실시간 투명 근사법noerror
 
ICON08_게임 애니메이션 최적화 기법
ICON08_게임 애니메이션 최적화 기법ICON08_게임 애니메이션 최적화 기법
ICON08_게임 애니메이션 최적화 기법noerror
 
08_Marching Cube Terrains
08_Marching Cube Terrains08_Marching Cube Terrains
08_Marching Cube Terrainsnoerror
 
08_게임 물리 프로그래밍 가이드
08_게임 물리 프로그래밍 가이드08_게임 물리 프로그래밍 가이드
08_게임 물리 프로그래밍 가이드noerror
 
08_플래시 맛보기
08_플래시 맛보기08_플래시 맛보기
08_플래시 맛보기noerror
 
08_애니메이션고등학교 게임과 특강
08_애니메이션고등학교 게임과 특강08_애니메이션고등학교 게임과 특강
08_애니메이션고등학교 게임과 특강noerror
 
08_Wxwidgets 소개
08_Wxwidgets 소개08_Wxwidgets 소개
08_Wxwidgets 소개noerror
 
07_PhysX 강체물리 입문
07_PhysX 강체물리 입문07_PhysX 강체물리 입문
07_PhysX 강체물리 입문noerror
 
07_스케일폼 소개
07_스케일폼 소개07_스케일폼 소개
07_스케일폼 소개noerror
 
07_Visual Shader Editor
07_Visual Shader Editor07_Visual Shader Editor
07_Visual Shader Editornoerror
 
06_HDR 소개
06_HDR 소개06_HDR 소개
06_HDR 소개noerror
 
06_게임엔진 활용팁
06_게임엔진 활용팁06_게임엔진 활용팁
06_게임엔진 활용팁noerror
 
06_게임엔진구성
06_게임엔진구성06_게임엔진구성
06_게임엔진구성noerror
 
06_자동차물리입문(1)
06_자동차물리입문(1)06_자동차물리입문(1)
06_자동차물리입문(1)noerror
 
06_앰비언트어클루전 소개
06_앰비언트어클루전 소개06_앰비언트어클루전 소개
06_앰비언트어클루전 소개noerror
 
KGC06_적응성 있는 자원 흐름 관리
KGC06_적응성 있는 자원 흐름 관리KGC06_적응성 있는 자원 흐름 관리
KGC06_적응성 있는 자원 흐름 관리noerror
 

More from noerror (20)

11_웹서비스활용
11_웹서비스활용11_웹서비스활용
11_웹서비스활용
 
NDC08_실시간비주얼그래프편집
NDC08_실시간비주얼그래프편집NDC08_실시간비주얼그래프편집
NDC08_실시간비주얼그래프편집
 
NDC12_Lockless게임서버설계와구현
NDC12_Lockless게임서버설계와구현NDC12_Lockless게임서버설계와구현
NDC12_Lockless게임서버설계와구현
 
11_통계 자료분석 입문
11_통계 자료분석 입문11_통계 자료분석 입문
11_통계 자료분석 입문
 
11_SH를 이용한 실시간 투명 근사법
11_SH를 이용한 실시간 투명 근사법11_SH를 이용한 실시간 투명 근사법
11_SH를 이용한 실시간 투명 근사법
 
ICON08_게임 애니메이션 최적화 기법
ICON08_게임 애니메이션 최적화 기법ICON08_게임 애니메이션 최적화 기법
ICON08_게임 애니메이션 최적화 기법
 
08_Marching Cube Terrains
08_Marching Cube Terrains08_Marching Cube Terrains
08_Marching Cube Terrains
 
08_게임 물리 프로그래밍 가이드
08_게임 물리 프로그래밍 가이드08_게임 물리 프로그래밍 가이드
08_게임 물리 프로그래밍 가이드
 
08_플래시 맛보기
08_플래시 맛보기08_플래시 맛보기
08_플래시 맛보기
 
08_애니메이션고등학교 게임과 특강
08_애니메이션고등학교 게임과 특강08_애니메이션고등학교 게임과 특강
08_애니메이션고등학교 게임과 특강
 
08_Wxwidgets 소개
08_Wxwidgets 소개08_Wxwidgets 소개
08_Wxwidgets 소개
 
07_PhysX 강체물리 입문
07_PhysX 강체물리 입문07_PhysX 강체물리 입문
07_PhysX 강체물리 입문
 
07_스케일폼 소개
07_스케일폼 소개07_스케일폼 소개
07_스케일폼 소개
 
07_Visual Shader Editor
07_Visual Shader Editor07_Visual Shader Editor
07_Visual Shader Editor
 
06_HDR 소개
06_HDR 소개06_HDR 소개
06_HDR 소개
 
06_게임엔진 활용팁
06_게임엔진 활용팁06_게임엔진 활용팁
06_게임엔진 활용팁
 
06_게임엔진구성
06_게임엔진구성06_게임엔진구성
06_게임엔진구성
 
06_자동차물리입문(1)
06_자동차물리입문(1)06_자동차물리입문(1)
06_자동차물리입문(1)
 
06_앰비언트어클루전 소개
06_앰비언트어클루전 소개06_앰비언트어클루전 소개
06_앰비언트어클루전 소개
 
KGC06_적응성 있는 자원 흐름 관리
KGC06_적응성 있는 자원 흐름 관리KGC06_적응성 있는 자원 흐름 관리
KGC06_적응성 있는 자원 흐름 관리
 

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

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