PCG (프로시저럴 콘텐츠 생성) 프레임워크
언리얼 엔진 내부에 자체 프로시저럴 콘텐츠를 생성할 수 있는 툴세트.
테크니컬 아티스트, 디자이너, 프로그래머가 건물이나 생물군 생성과 같은 에셋 유틸리티에서 전체 월드에 이르기까지
복잡성에 관계없이 빠른 반복작업 툴과 콘텐츠를 빌드할 수 있도록 지원한다.
관련 문서 : https://docs.unrealengine.com/5.2/ko/procedural-content-generation-overview/
프로시저럴 콘텐츠 생성 개요
프로시저럴 콘텐츠 생성 프레임워크 및 프로젝트에서의 사용법을 소개합니다.
docs.unrealengine.com
영상 시청 : Unreal Procedural Village PCG
https://youtu.be/Xg45I-qYFdE?si=4Cc-Lyd3NQiHEeFt
영상 시청 : 7 Minute Photoreal Forest! Procedural Content Generation PCG in Unreal Engine
https://youtu.be/g84cg2KvJxY?si=jAxeuMmiZUAvDrYU
언리얼은 게임, 애니 외로도 다양한 산업에서 사용되고 있다.
- 건설 산업
- 전투기 시뮬레이션
Polygon, Edge, Vertex, Mesh
모든 오브젝트는 기본적으로 폴리곤이라고 불리는 삼각형으로 구성된다.
삼각형을 구성하는 선을 엣지, 삼각형의 꼭지점은 버텍스.
폴리곤을 조합함으로써 메쉬라고 하는 모델을 구성한다.
왜 삼각형일까?
면을 형성할 수 있는 가장 기초적인 단위.
오브젝트는 꼭지점이 기준이 된다. 꼭지점 개수를 줄여 연산량을 줄이는 방식.
최근에는 컴퓨터 사양이 좋아지면서 다른 형태를 사용하기도 한다.
Material, Texture, Lights
재질(Material)은 모든 3D 프로그램에서 사용하는 공통적 개념으로, 3D 모델의 외형을 설정하기 위한 수단
텍스쳐(Texture)는 3D 모델의 표면을 표현하는 이미지 (선물상자의 포장지)
텍스쳐를 모델에 입히는 과정을 텍스쳐 맵핑이라고 한다.
3차원 물체의 각 표면에서의 색상과 명암은 조명과 재질에 따라 결정된다.
- 주변조명(Ambient Light) : 물체의 위치에 상관없이 고르게 비치는 빛
- 산란반사조명(Diffuse Light) : 빛의 방향으로 노출된 면이 밝아지는 조명
- 거울반사조명(Specular Light) : 특정 부분이 집중적으로 반사되는 빛
같은 모델링, 같은 텍스쳐라고 하더라도 Material에 따라서 빛을 반사하는 정도가 달라진다. 덜, 혹은 많이 반사하는.
카메라
화면을 위한 뷰포트(viewport)로 사용된다는 점에서 카메라는 3D에서 매우 중요한 요소이다.
월드 공간의 어느 지점에도 위치 가능하며 애니메이션 되거나, 캐릭터나 다른 오브젝트에도 부착 가능하다.
하나의 씬에 여러 카메라를 설치할 수 있다.
유니티, 언리얼 모두 구성과 구조는 비슷하게 되어있다.
대부분의 엔진들의 기본적인 원리는 동일하다.
충돌체크
유니티의 오브젝트에 충돌체(collider) 컴포넌트를 추가하는 것으로 매 프레임 충돌 확인이 시작된다.
유니티는 2가지 유형의 충돌체를 제공함
- Primitive Shapes
- Mesh Shapes
리팩토링
외부 동작을 바꾸지 않으면서 내부 구조를 개선하는 방법으로, 소프트웨어 시스템을 변경하는 프로세스이다.
모든 것을 미리 생각하기보다는 개발을 하면서 지속적으로 좋은 디자인을 찾는다.
리팩토링을 할 때는 기능을 추가해서는 안되고, 단지 코드의 구조변경에만 신경써야 한다.
리팩토링은 언제?
- 삼진 규칙 (3번의 중복 / 3번의 같은 행위를 한다면 리팩토링을 진행하자.)
- 기능을 추가할 때 리팩토링을 하자
- 버그를 수정해야 할 때 리팩토링을 하자
- 코드 검토 (Code Review)를 할 때 리팩토링을 하라
- 어떤 작업을 하는데 계속 시간이 부족한 듯 느껴진다면, 보통 리팩토링이 필요하다는 신호이다.
개발 일정에 반드시 필요한 요소.
단, 마감일에 가까운 경우에는 리팩토링을 피해야 한다.
WBS/ Milstone
WBS : Work Breakdown Structure
마일스톤 : 프로젝트 진행 과정에서 특징할만한 사건이나 이정표를 말한다
사실상 동일한 요소.
회사에서는 인건비가 나가기 때문에 더욱 꼼꼼하게 관리 할 수 밖에 없다.
Front End/ Back End
Front End : 눈에 보이는 영역 (UI, 렌더링되는 월드 등)
Back End : 눈에 보이지 않는 부분을 개발하는 영역 (서버, DB, 프레임워크, 패치 툴등)
TFT
Task Force Team : 일을 추진할 때 일을 추진하는 사람들만 임시팀을 만들어서 활동하는 것 (생태계 TFT, 인공지능 TFT)
Blueprints
언리얼 에디터 안에서 노드 기반 인터페이스를 사용하여 게임플레이 요소를 만드는 개념을 토대로 한 비주얼 스크립팅 시스템이다. 엔진 내 객체 지향형(OO) 클래스 또는 오브젝트를 정의하는 데 사용된다.
https://docs.unrealengine.com/4.27/ko/Basics/UnrealEngineForUnityDevs/
유니티 개발자를 위한 언리얼 엔진 4
유니티 사용자분들의 빠른 적응을 도울 수 있도록 유니티 지식을 UE4 로 옮겨봅니다.
docs.unrealengine.com
영상 시청 : Unity vs Unreal : Graphics Comparison (HDRP DEMO)
https://youtu.be/sMIi_Z33pkw?si=Dgd3kYsIQ4kCYJvm
C드라이브 용량이 부족해요
언리얼 에셋은 유니티 에셋에 비해서 퀄리티가 좋지만, 용량이 많이 크다.
용량이 부족한 경우가 많을 것.
에셋을 사용하기 위해 프로젝트에 에셋을 추가하면 언리얼 두 곳의 저장소에 저장한다.
- 프로젝트 폴더
- 설정되어 있는 C 드라이브 캐시 폴더
아무생각 없이 에셋을 받으면 기본으로 설정되어 있는 C드라이브 캐시폴더에 저장하게 되고, 관리가 힘들어진다.
보관함 설정 변경하기
- 에픽 런처 > 언리언엔진 > 설정 > 보관함 캐시 위치 변경으로 이동
- 윈도우 시스템에서 사용하는 C드라이브를 제외한 다른 드라이브를 선택 해 준다.
프로젝트 세팅
프로젝트명과 폴더는 꼭 영문으로 설정해야 한다.
주로 사용하게 될 에디터
- 머티리얼 에디터
- 블루프린트 에디터
- 비헤이비어 트리 에디터 (레벨에 배치되어 있는 액터의 행동을 결정함)
- UMG UI 에디터
기타 에디터들이 있으며, 기획자가 사용할 일은 적다.
하나의 엔진이지만, 여러 에디터가 동시에 사용된다.
https://docs.unrealengine.com/4.26/ko/Basics/ToolsAndEditors/
툴 및 에디터
언리얼 엔진 4 에는 여러가지 다양한 에디터 유형이 포함되어 있으며, 여기서는 그 각각을 집중 조명해 봅니다.
docs.unrealengine.com
프로그래머는 블루프린트를 선호하지 않는 경향. 가독성과 확장성의 문제.
어디서 무슨 문제가 터졌는지 알기가 매우 힘들어진다.
실습 진행
- 레벨에 오브젝트를 추가한다.
- 총을 발사해서 명중한 오브젝트의 색상을 바꾼다.
프로젝트에 포함되어 있는 블루프린트를 확인
블루 프린트를 추가/수정해서 위의 기능을 구현한다.
레벨에 오브젝트를 추가하기
에디터의 뷰포트에 액터 (오브젝트)를 추가
- 액터는 기본적으로 아무런 기능이 없음
- 액터는 가장 기본적인 정보 (위치, 회전, 스케일)만 가지고 있음
- 콤포턴트를 추가해서 원하는 기능을 추가
- 실린더의 이름을 알아보기 편하도록 수정하기
- 월드 아웃라이너에서 액터를 설정하고 F2 또는 우클릭 - Rename 선택으로 이름을 변경하기
뷰포트 카메라 이용 단축키
뷰포트 카메라 이동 : 우클릭 + WASD
뷰포트 카메라 회전 : Alt + 좌클릭 + 드래그
뷰포트 카메라 회전 : 우클릭 + Q, E
E : 오브젝트 지면 이동
좌클릭 : 오브젝트 선택
E : 오브젝트 회전 모드
W : 오브젝트 이동 모드
R : 오브젝트 스케일 모드
총을 발사해서 명중한 액터의 색상을 바꾼다
- 액터의 색상을 변경하기 위해서 메테리얼을 만든다.
- 재질 에디터를 이용하여 메테리얼 제작.
메테리얼 제작
- 액터에 메테리얼을 적용
- 콘텐츠 브라우저를 이용하여 폴더를 생성하고 이름을 "Materials"로 변경
- Materials 폴더에서 우클릭으로 에셋 생성 팝업 활성화, 새로운 재질 생성
새로운 노드 추가를 위해 우측 팔레트 메뉴에서 "VectorParameter" 항목 검색 후 추가
베이스 컬러 드래그 후 검색창을 활성화하여 넣어도 된다.
Vector Parameter를 통해 3차원 배열의 값을 전달 할 수 있으며,
0~1 사이의 값은 Scalar Parameter를 통해 전달 해 줄 수 있다. 노드를 연결하여 각 항목별로 값을 지정 해 줄 수 있다.
실린더에 블루프린트 적용하기
실린더 오브젝트를 클릭하고 블루프린트 생성
경로 설정 + 블루프린트 이름 변경 + 새 서브클래스로 블루프린트 생성
일반적인 블루프린트는 이벤트(언제, 누가), 조건(무슨 상황이면), 액션(이런 행동)의 구조로 구성되어 있다.
기본으로 생성된 이벤트(3개)를 삭제하고
오브젝트가 총알(발사체)에 맞으면 재질을 변경하여 색상을 바꾸기 위해 사용할 이벤트는 무엇일까?
BeginPlay 이벤트
플레이어가 게임을 처음 실행할 때 호출되는 이벤트. 모든 액터가 발동된다.
게임 시작 이후 스폰되는 액터의 경우 스폰 시점에 호출된다.
ActorBeginOverlap 이벤트
액터가 다른 액터와 충돌했을 때 호출된다.
액터간 충돌 반응은 오버랩을 허용해야 가능하다.
Tick 이벤트
게임이 플레이되는 동안 지속적으로 매 프레임마다 호출된다.
컴퓨터의 사양마다 프레임이 다르므로 호출 횟수가 일정하지 않다.
Hit 이벤트
히트 수신 - 이 액터가 블로킹 오브젝트에 부딛힐 때, 도는 부딛힌 다른 액터를 블록할 때 이벤트를 발생한다. (공식 설명)
같은 색상은 기본적으로 같은 색상끼리 연결 해 주어야 한다.
오브젝트가 총알(발사체)에 맞으면 재질을 변경하고, 특정 사운드를 발생시켜보자 (Play Sound at Location, Get Actor Location)
총에 맞으면 Meterial이 변화하고, Meterial은 R > G > B 돌아가며 바뀌게 만들어보았다.
'대학생활 > 수업' 카테고리의 다른 글
게임밸런스및시뮬레이션 5주차 - 능력치 밸런스 (0) | 2023.09.25 |
---|---|
게임그래픽프로그래밍심화 5주차 - 그래픽스 API 혼합처리와 스텐실 (0) | 2023.09.25 |
리얼타임엔진 4주차 - 시작해요 UEFN3 (0) | 2023.09.19 |
게임인공지능 4주차 - FSM (0) | 2023.09.19 |
게임밸런스및시뮬레이션 4주차 - 능력치와 밸런스 수식 (0) | 2023.09.18 |