전체 글

성장 과정 일기, 누군가에게 정보를 제공하기 위해서가 아닌 스스로 배운 내용을 정리하기 위해 작성하는 블로그 입니다. 잘못된 정보가 있으면 댓글로 적어주세요.
C++ STL과 UTL(언리얼 컨테이너 라이브러리)의 차이점기본적으로 C++의 STL을 게임에 적용해 사용하기에는 그렇게 좋지 않은 성능을 낼 수 있다. 따라서 언리얼 엔진 자체적으로 개발한 컨테이너 라이브러리에 대해 알아보자.둘의 차이점은 다음과 같다.C++ STLUTL범용적으로 설계되어 있다. 따라서 게임 오브젝트와의 연동이 안될 수도 있다.언리언 엔진에 특화되어 있다.표준이기 때문에 호환성이 높다.언리얼 오브젝트 구조를 안정적으로 지원한다.많은 기능이 엮여 있어서 컴파일 시간이 오래걸린다.가볍고 게임 제작에 최적화가 되어있다.우리는 게임을 개발하면서 많은 자료구조를 사용할테지만 그 중 대부분이TArry, TSet, TMap을 사용할 것이다. TArray는 오브젝트를 순서대로 담아 효율적으로 관리하는..
언리얼 C++ 인터페이스인터페이스란객체가 반드시 구현해야할 행동을 지정하는데 활용하는 타입을 의미한다. 다형성의 구현과 의존성이 분리된 설계에 매우 유용하게 활용된다.언리얼에서는 월드에 배치되는 모든 오브젝트중 안 움직이는 오브젝트를 포함 할 때 액터라는 클래스를 상속받는다.만약 움직이는 오브젝트라면 Pawn을 상속받게 되는데 이때, Pawn은 반드시 움직임을 구현해야하기 때문에 움직임 관련 인터페이스를 상속받게 해 반드시 구현하게 제작해야한다.이전 코드에서 작성한 것을 수정해서 교직원이 추가되었는데 교직원을 제외한 나머지는 반드시 구현해야하는 기능을 가지고 있다고 해보자.언리얼 C++ 인터페이스 특징언리얼에서 인터페이스를 생성하면 2개의 클래스가 한 파일에 생성된다. U로 시작하는 타입 클래스 (타입을..
언리얼 리플렉션 시스템다른 말로는 언리얼 프로퍼티 시스템이라고도 한다. Reflection 시스템은 프로그램을 실행하면서 자기 상태를 바라보는 것 이라고 할 수 있는데 이 기능 자체가 언리얼의 근간을 이룬다.코드가 돌아가면서 뭔가 문제고~~ 이런거를 파악하는 것을 리플렉션이라고 하는 것이다.C++에서는 이런 기능이 없고 언리얼에서 자체적으로 구성 한 것이다. 그렇다면 리플렉션은 어떻게 보장받을 수 있을까???언리얼에서는 리플렉션을 하고자 하는 유형 또는 프로퍼티에 특정 매크로를 설정해 Unreal Header Tool에 의해서 프로젝트를 컴파일 할 때 해당 정보를 수집하게 된다.#include "FileName.generated.h" // 이게 바로 리플렉션을 보장하는 시스템이구나.UENUM(), UCL..
언리얼 엔진의 코딩 표준코딩 표준은 프로그래밍을 작성해야하는데 지켜야하는 프로그래밍 이름 규칙이나 작성 방법들을 지정한 가이드라인이다. 코딩 스타일이나 코딩 컨벤션이라고도 한다. 그렇다면 좋은 코딩 스타일은 무엇일가??절대적으로 좋은 것은 없다.중요한 것은 코딩 스타일을 정하고 잘 따르는 것에 있다.이미 프로젝트에 적용된 코딩 스타일을 잘 숙지하고 따라야한다.그렇다면 이제부터 우리만의 코딩 스타일을 정해서 작성하면 될까? 또는 이미 C++의 코딩 스타일을 유지하면 될까?아니다. 언리엘 엔진 자체에서 코딩 표준을 정해서 문서화 해놓았다.이는 권고따위가 아니라 반드시 지켜야하는 수준이다. 언리얼 공식 사이트에 따르면 코딩 스타일을 따르는 이유는 다음과 같다고 한다.소프트웨어의 총 수명 비용 중 80%는 유지..
유니티 프로젝트에 이어서 처음으로 언리얼을 공부를 시작했다.본 내용은 인프런의 이득우의 언리얼 엔진 강의를 참고했으며 내용을 포함하고 있다.프로젝트 세팅강의에서는 5.1.1 버전을 사용했지만 필자는 5.4버전으로 할 예정이다. 그 이유는 .Net 6.0.0 버전이 언리얼 5.1.1에는 필요한 것 같은데 5.4 버전은 .Net 8.0이 필요하다. 이는 이미 설치가 되어있기에 5.4 버전으로 진행한다. 언리얼 엔진을 사용할 때 코드 편집기는 VS만 꼭 사용해야하는 건 아니다. Rider 와 같은 다른 툴을 사용해도 무방하다. 다문 디버그 최적화 같은 경우 VS가 잘 되어있으니(VS Assist도 있고) VS 2022 버전으로 진행한다. 언리얼은 에픽게임즈를 통해 설치할 수 있다. 설치를 한 후 빈 프로젝트를..
면접에 나올 수 있는 주요 내용을 한번 테마별로 정리해보겠다. 벡터와 행렬과 같은 내용은 중요는 하지만 면접에 나올만 내용은 아니다. 이를 모르면 렌더링이라는 것에대해 설명할 수 없기 때문에 아예 기초 수준으로 깔고 가기 때문이다.더보기ne*** 에서는 행렬의 교환 법칙과 결합 법칙을 물어본 적이 있다고 한다. 1. SwapChain을 사용하는 이유? 더블 버퍼링이란? 후면 버퍼와 정면 버퍼의 역할?더보기SwapChain은 전면 버퍼와 후면 버퍼 간의 교체를 관리하기 위해 사용합니다. 이를 활용해 더블 버퍼링은 하나의 버퍼만 사용했을 때, 렌더링 중 화면 깜빡임이 발생하는 것을 방지하고 성능을 향상시키기 위해 두 개의 버퍼를 사용하는 것을 의미합니다. 여기서 후면 버퍼는 현재 GPU가 그리고 있는 버퍼이..
Terrain물방울 책에 있는 Terrain 예제는 엄청난 기술들의 집합이다.이렇게 큰 terrain을 관리할 때, 여기에 사용된 주된 기술은 다음과 같다.지형의 높이를 관리하기 위해 Height map 이라는 텍스처를 이용한다. 이때 이 텍스처는 일정 텀마다의 높이를 저장하고 있다. (HeightMap을 통한 지형 높이 지정)Smooth하게 높이를 만들기 위해 쉐이더에서 위치를 Height map을 이용해 지정하기 직전 주변 픽셀 8개를 분석해 평균 값으로 높이를 지정한다.(주변 높이와 평균 값을 맞춰 Smooth)두번째 사진과 같이 Tessellation을 이용해 LOD를 적용했다. 이때 사용된 것은 Terrain이 워낙 넓기 때문에 이를 몇개의 그리드로 잘라서 해당 그리드가 카메라와 멀어지면 삼각형..
Picking카메라에 화면을 클릭해 어떤 물체에 대한 반응을 일으키는 것을 Picking이라고 할 수 있는데화면에 물체가 보여지기 위해선 로컬 좌표계 - 월드 좌표계 - 카메라 좌표계 - 투영 좌표계 - 스크린 좌표계로 변환해야한다.반대로 카메라의 화면을 클릭해서 클릭된 위치의 물체를 알기 위해선 위의 순서를 반대로 진행하면 된다. 여기서 생각해봐야하는 점이 있다. Picking을 진행하는 건 CPU인가 GPU인가? 당연히 CPU이다.Picking은 렌더링 파이프라인이랑 전혀 상관이 없다. 그렇다면 어느 좌표계에서 Picking을 진행하면 좋을까?가령 내가 화면을 선택했을 때, 선택된 좌표는 스크린 좌표계일 거고 이를 역순으로 좌표계를 변환 할 것이다. 그리고 내가 선택하고자 하는 물체는 로컬좌표계에 있..
Tessellation렌더링 파이프라인에서 Geometry Shader보다 더 빨리 실행 되는 부분이 있다. VS 다음 Hul Shader, Tessellator, Domain Shader 단계 총 3가지를 합쳐서 Tessellation 이라고 한다. 그렇다면 Tessellation이란 뭘까?기하 구조를 더 작은 삼각형으로 분할하고 새로 생긴 정점들의 위치를 적절한 방법으로 조절하는 것으로 정의할 수 있다.말만 들으면 되게 와닿지 않는다. 그럼 사용하는 때를 생각해보면 Tessellation은 Terrain에서 가장 많이 사용한다. GPU에 lod 연산이 필요할 때, 효율적인 물리 애니메이션을 계산할 때, 메모리 전략으로 low 폴리곤 버전으로 전달해 준 객체를 high 폴리곤 버전으로 변환할 때 등 에..
Geometry Shader아주 멀리있는 오브젝트나 반복되는 물체는 Billboard를 통해서 작업하게 된다. 그전에 작업했던 방식을 떠올려보면 하나의 vertex buffer에 정점을 하나의 위치에 4개를 전부 다 배치한 다음 쉐이더에 넘겨주고, 쉐이더 측에서 정점을 옮겨 위치를 잡아주는 형식을 사용했다. 하지만 이보다 조금 더 우월한 방식을 사용해보자. 렌더링 파이프라인에서 VS와 RS 단계 사이에 Geometry Shader 단계가 있다. 이 친구가 하는 역할은 입력 받은 정점의 개수를 임의로 늘렸다 줄였다 할 수 있게 해준다. 즉, 정점을 맘대로 늘릴 수 있기 때문에 입력된 오브젝트를 복사 아닌 복사가 가능하다.나무를 빌보드를 이용해 만들 것인데, GeometryShader를 이용한다.코드를 살펴..
Mintriever
어제보다 성장한 나