Unreal

Unreal 블루프린트

로만주 2023. 9. 25. 16:35

▶ 블루 프린트
- 블루프린트 비주얼 스크립팅 이라고 불리는 노드 기반 스크립팅 시스템
- 쉽게 접근해 보면 블루프린트는 말 그대로 "비주얼 스크립팅"
ㄴ 코드로 하는 작업을 노드라는 작업으로 연결시켜 주는 것을 의미한다.
ㄴ 시각적인 그래프 기반 시스템으로 게임 플레이 메카닉이라 인터렉션 로직 구축이 가능하다.
- 또한 프로그래밍 언어를 잘 모른다 하더라도 게임 플레이에 대한 메커니즘을 만들고 인터페이스를 구상할 수 있으며 상호작용까지 OK

단점: 블루프린트로 애니메이션 만들기는 어려울 수 있음.
- 블루프린트를 빠르게 마스터하고 C++ 스크립트로 넘어가는게 엔진에 익숙해 지는데 아주 좋다.
ㄴ 설계 단계 및 모듈화에서도 높은 효율을 자랑한다.

 

 

▷ 블루프린트의 방향
- 트랜스폼 + 애니메이션
- 블루프린트 < - > C++ 전환
- 블루프린트로 포폴을 만들건데 설계 중요성...?
ㄴ 컴포넌트 기반이기 때문에 다음 단계만 보여주는 방식으로 설계해도 괜찮음.

- C++ != C++ Script
ㄴ 언리얼 => 완벽한 IDE(통합개발환경)

 


▷ 스크립트 언어
- 프로그래밍 언어의 한 종류
ㄴ C# / 자바 / 루비 / 파이썬 등등
- 엔진에서 스크립트 언어는 컴포넌트 종류 중 하나일 뿐
ㄴ 엔진에서 지원하지 않는 기능은 스크립트를 통해 구현 할 수 있다.
- 스크립트 언어는 간이 언어다.
ㄴ 짧은 명령어로 보는게 맞다.
ㄴ C / C++ 에 비해 제한된 기능만 가지고 있지만 비교적 쉽게 프로그램을 작성할 수 있게 한다.
ㄴ 스크립트 언어의 장점이지만 C++ 스크립트는 해당이 안되니 일단 참고 정도만.
★ 스크립트 언어의 가장 큰 특징
ㄴ 인터프리터를 사용한다.

 

 

▷ 인터프리터
- 일반적인 응용 소프트웨어에서는 컴파일러에 의해 기계어로 번역된 채로 실행이 된다.
ㄴ 코드의 수정이 빈번하게 발생하면 매번 컴파일을 해야 해서 개발 기간이 엄청 느리다.
ㄴ + 규모가 큰 프로그램이라면 몇시간 단위로 시간도 잡아먹고 일일히 컴파일 하는 것도 곤욕
- 이 때문에 소스 코드를 한줄 씩 읽어서 바로 실행하는 "인터프리터" 방식이 엔진에는 훨씬 유리하다.
   (스크립트 언어는 인터프리터를 활용하기 위해 나온 언어)
   - 언리얼 엔진은 여기서 한 걸음 더 나아가
1. 핫리로드

ㄴ 빠르게 리로드 해서 관련된 내용만 불러 오겠다는 내용. 헤더파일 자체가 무겁기 때문에 PCH도 권장하지 않음.

2. 라이브 코딩 기능을 제공한다.
ㄴ 실행 중 에디터 동작 가능한 기능

 


▷ 블루프린트 종류
- 엔진에서는 다양한 기능 제공을 위해 여러 유형의 블루프린트를 지원한다.
ㄴ 레벨 / 클래스 / 데이터 / 인터페이스 / 매크로...
ㄴ 종류가 많아 보이지만 큰 범위에서 보면 딱 3가지만 기억한다.
ㆍ 종류
1. 레벨
ㄴ 씬 -> 레벨
ㄴ 1개만 존재
[게임 룰 같은 것을 정의할 때 많이 사용됨.]
2. 클래스
ㄴ 액터에게 주는 블루프린트
ㄴ 컴포넌트 기반이라고 생각하면 좋으며 다른 타입의 액터처럼 동작하는 인스턴스 형태로 맵에 배치가 가능하다.
3. 애니메이션
ㄴ 애니메이션을 처리하는 블루프린트


ㆍ 언리얼의 다양한 유형
- 액터
ㄴ 월드에 배치 가능한 스폰되는 오브젝트
- 폰
ㄴ 빙의 할 수 있으며 컨트롤러로부터 입력을 받는 액터 타입
- 캐릭터

ㄴ 걷기 / 달리기 / 점프 등의 기능을 하는 빙의 할 수 있는 폰
- 컨트롤러 (캐릭터)
ㄴ 플레이어가 사용하는 폰을 컨트롤하는 액터
- 게임 모드
ㄴ 게임 플레이를 정의 할 수 있는 객체
- 블루프린트로 뭔가를 정의할 때는 3가지만 기억하면 된다.
ㄴ 1. 언제 (이벤트) / 2. 실행 될 조건 / 3. 어떤 행동을 할 것인가?
ㆍ Update
1. Update
ㄴ 불완전 호출 - 컴퓨터 마다 호출이 다르다.
2. Fixed Update (물리적 업데이트)
ㄴ 충돌할 때 자주 사용되며, 순간 프레임이 떨어져 업데이트 횟수가 보장되지않을 때 유용

3. Late Update
ㄴ 카메라에 주로 이용. 캐릭터가 먼저 업데이트 되고 바로 업데이트가 된다.

 


▶ 씬 노드

- 하나의 씬에 있는 노드들을 얘기한다.
- 하나의 씬에 있는 노드들은 보여질 때가 있고 혹은 숨겨질 때가 있다.
ㄴ 백스페이스 컬링 / 오클루젼 컬링 / 프러스텀 컬링 / 페이스 컬링
ㄴ 최적화에 핵심

※드로우콜 - CPU가 현재 프레임에 어떤 것을 그려야 할 지 정하고, GPU에 오브젝트를 그리라고 명령을 호출하는데 이 명령이 바로 드로우 콜.

- 드로우콜을 줄일 수 있는 기법
ㄴ CPU가 GPU에 렌더링을 수행하게 하는 일련의 명령들.
ㄴ 병목현상이 발생할 수 있으며 CPU에 과부하가 걸릴 수 있다.


1. 백스페이스 컬링 
ㄴ 후면 추려내기

ㄴ 카메라에 보이지 않는 부분을 렌더링하지 않겠다는 의미로 

2. 오클루젼 컬링 (Occlusion == 빛이 차단되어 발생하는 표면 그림자)
ㄴ 오브젝트가 다른 오브젝트에 의해 가려져서 카메라 뷰에서 보이지 않을 때 오브젝트 렌더링을 비활성화 한다.
ㄴ 숨겨진 오브젝트를 걸러내며 오브젝트들은 오클루더와 오클루디라는 기법으로 나뉜다.

- 오클루더
ㄴ 오클루더 객체들은 미리 Bake된 오브젝트를 가리는 역할을 한다.
ㄴ ref. 라이트맵

- 오클루디
ㄴ 오클루더를 통해 가려진 객체들

- 오클루전 컬링을 할 때는 공간을 일정 간격의 셀로 나눠 놓고 이를 오클루더가 가리는 영역의
   해상도와 맞물려서 관리하는 방식 -> 셀의 크기가 작을수록 해상도 UP / 오버헤드 또한 크다.

3. 프러스텀 컬링 (프러스텀==절두체)
ㄴ 절두체 6면을 통해 면 안 쪽에 있는 영역을 렌더링 함.


4. 페이스 컬링
ㄴ 프론트 페이스 컬링 -

ㄴ 쉐도우 맵핑

ㄴ 피터 패닝 현상 - 그림자가 붕 떠 있는 현상


※ 결론은 부모를 통해서 자식을 컨트롤 할 수 있게 렌더링 하겠다.

 

reference

[절두체 컬링의 원리]

https://velog.io/@ounols/%EA%B2%8C%EC%9E%84-%EC%88%98%ED%95%99-%EC%A0%88%EB%91%90%EC%B2%B4-%EC%BB%AC%EB%A7%81

 

[게임 수학] 절두체 컬링의 원리

🧐 해당 파트는 게임 개발 환경을 구성하는 컴퓨터 그래픽스(Computer Graphics)를 이해하기 위한 기초 수학의 간단한 개념에 대해 설명하고 있습니다!혹여나 이해가 잘 안되거나 잘못된 정보를 발

velog.io

[페이스 컬링과 로드리게스 회전]

https://velog.io/@ounols/%EA%B2%8C%EC%9E%84-%EC%88%98%ED%95%99-3.-%EB%B0%B1%ED%8E%98%EC%9D%B4%EC%8A%A4-%EC%BB%AC%EB%A7%81%EA%B3%BC-%EB%A1%9C%EB%93%9C%EB%A6%AC%EA%B2%8C%EC%8A%A4-%ED%9A%8C%EC%A0%84

 

[게임 수학] 백페이스 컬링과 로드리게스 회전

🧐 해당 파트는 게임 개발 환경을 구성하는 컴퓨터 그래픽스(Computer Graphics)를 이해하기 위한 기초 수학의 간단한 개념에 대해 설명하고 있습니다! 혹여나 이해가 잘 안되거나 잘못된 정보를 발

velog.io

 

 

'Unreal' 카테고리의 다른 글

Unreal UI  (0) 2023.10.06
Unreal 타임라인, 프렉쳐, 보간  (0) 2023.10.05
Unreal 트랜스폼  (0) 2023.09.27
Unreal 벡터, 행렬  (0) 2023.09.22
Unreal 시작  (0) 2023.09.20