최신 글
-
Unity - Terrain이 빛나는 문제(URP 모바일, Unity Engine 2022버전 이하)Unity - Terrain이 빛나는 문제(URP 모바일, Unity Engine 2022버전 이하)
유니티 엔진을 통해 3D 게임을 제작하던 와중에, Terrain으로 제작한 맵이 이상하게 빛이 나는 상황을 겪었다. 마치 금속 재질처럼 Specular reflection이 강하게 나타나는 상황이다.해당 문제는 유니티 커뮤니티에서 제기된 것으로, 유니티 측에서는 실제 엔진의 버그가 맞다고 답변하였다.Unity 2023 버전에서 해당 문제가 해결되었지만, 그 이하 버전인 2022, 2021 버전을 사용한다면 여전히 발생한다(2020은 있는지 알 수 없음).문제 상황일반적으로 Mesh를 배치하여 맵을 제작할 땐 각각에 Materials를 적용한다. 그래서 Specular 수치를 조절해서 빛의 반사가 어떻게 적용될지 조절한다.그런데 Terrain을 기반으로 맵을 적용했더니 위 사진처럼 Terrain이 금속 재..
2024.09.03
-
UE5 언리얼 엔진에서 Asset란? check와 ensure의 차이점
해당 문서는 언리얼 엔진의 공식 문서 "언리얼 엔진의 어서트 | 언리얼 엔진 5.4 문서 | Epic Developer Community (epicgames.com)"를 읽고 제가 이해한 바를 조금 덧붙여서 정리한 글입니다. 오류가 있다면 지적해주시면 감사하겠습니다.프로그래밍을 할 때 반드시 null이 아니어야 한다던가, 이런 걸 개발 과정에서 테스트할 땐 Assert 문을 많이 사용한다. Log처럼 알림을 띄울 뿐만 아니라 아예 동작을 멈춰버리게 해서 오류를 강력하게 알려주기 때문이다.언리얼 엔진에서 무언가를 검증할 땐 check와 ensure 같은 Assert 매크로를 사용한다.언리얼 엔진에서 제공하는 Assert 매크로는 종류가 다양한데, check, verify, checkf, ensure 등 종..
2024.07.13
-
[Real-Time Rendering 4e] Chapter 2. 추가적인 Vertex Processing 단계에 관하여
Real-Time Rendering 4e 판을 읽고 특히 의미 있었던 내용을 정리해서 블로그에 남긴 글입니다.또, 필요한 배경 지식은 경북대학교 백남훈 교수님의 컴퓨터 그래픽스 강의를 기반으로 하고 있습니다.책을 읽기 시작한 것은 지난 6월 23일부터인데, 기록을 남겨야 할 것 같아 이제부터라도 블로그에 글을 쓰려고 합니다.제가 개인적으로 공부한 과정을 남긴 것이니, 오류가 있다면 지적해 주시면 감사하겠습니다. 혹시나 궁금한 점이 있으시다면 제가 아는 범위 내에서 답변을 작성해 보겠습니다.1. 그래픽스 파이프라인의 전체적인 단계그래픽스를 공부하는 사람들이라면, 그래픽스 파이프라인의 단계를 익히 들어봤을 것이다.그래픽스 파이프라인(Graphics pipeline), 혹은 렌더링 파이프라인(Rendering..
2024.07.08
-
GetWorld와 GetLevel은 어떻게 구현되어 있을까?
언리얼 엔진을 공부한 지 이제 몇 주 됐는데 아직도 기초 개념을 잘 모르겠다. 그래서 레퍼런스를 보고 공부한 내용을 한 번 정리해 보기로 했다.오늘의 내용은 언리얼 엔진의 가장 기초가 되는 부분, 월드와 레벨에 대해 접근하는 GetWorld와 GetLevel 함수가 되겠다.월드와 레벨이 어떤 것인지는 가볍게만 다뤄놨으니 필요하다면 언리얼 레퍼런스를 참고하는 것을 추천한다.월드(UWorld)맵 혹은 샌드박스를 표현하는 최상위 오브젝트로 액터와 컴포넌트가 존재하고 렌더링되는 공간이다.멤버를 보면, ULevel 컴포넌트, BatchComponent, 레이어, NetworkManager, PhysicsCollisionHandler 등 게임에 필요한 상위 오브젝트를 소유하고 있음을 알 수 있다.액터(AActor)..
2024.04.25
-
[C/C++] 구조체 비트필드(bit-field)
C/C++: 구조체 비트필드 비트필드에 대한 쉽고 간단한 설명을 찾는다면 코딩도장에 잘 정리되어 있으니 먼저 한 번 읽어보는 것을 추천한다. C 언어 코딩 도장: 56.1 구조체 비트 필드를 만들고 사용하기 (dojang.io) 비트 필드에 대해 찾게 된 이유 언리얼 엔진을 공부하다가 대체 헤더 파일에서 싱글 콜론(:)이 왜 나오는지 궁금했다. 처음에는 언리얼 엔진만의 문법이라 생각했는데 아무리 검색해 봐도 이에 대한 설명이 없었다. // 멤버 변수에 대한 헤더 파일 코드 UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = Character) uint8 bIsIdle : 1; UPROPERTY(EditAnywhere, BlueprintReadOnly, Cate..
2024.02.24
-
Program:Win32/Wacapew.C!ml : Windows 11에서 멀쩡한 C언어 파일이 트로이 목마로 착각되는 문제(MinGW)
환경: VSCode, MinGW(MinGW - Minimalist GNU for Windows download | SourceForge.net) 멀쩡한 C언어 코드가 갑자기 실행이 안 되는 문제가 생겼습니다. 방화벽이 코드를 보고 트로이목마(Win32/Wacapew.C!ml)로 의심한 것 같습니다. 결론만 말하자면 방화벽이 잘못 탐지한 것이기 때문에 걱정하지 마시고 실행해도 됩니다. 다만 트로이목마로 의심받은 실행파일이 삭제되는 문제가 있으니 방화벽에서 해당 폴더를 검사 예외로 설정합시다. 문제를 일으킨 코드는 다음과 같습니다. #include #include struct normal_struct { unsigned int a : 1; unsigned int b : 2; unsigned int c : 5..
2024.02.24
-
[C++] 레퍼런스, const 레퍼런스 반환 / 레퍼런스와 임시 개체의 수명
C++ Return value, reference, const reference C++ Return value, reference, const reference Can you explain to me the difference between returning value, reference to value, and const reference to value? Value: Vector2D operator += (const Vector2D& vector) { this->x += vector... stackoverflow.com 레퍼런스를 반환하는 것, const 레퍼런스를 반환하면 무슨 일이 일어나는지 알아보자. 추가로 레퍼런스를 알아보는 김에 레퍼런스에 의해 임시 개체의 수명이 변화할 수 있다는 것도 알아..
2024.02.05
-
UNSEEN 5. 게임 알고리즘 (2): FSM, BT
해당 글은 UNSEEN 2기 코딩 테스트를 대비하여 정리 목적으로 적은 글입니다. 잘못된 부분이 있다면 지적해 주시면 감사하겠습니다. 3. FSM FSM(Finite-state machine), 우리말로 유한 상태 머신은 상태(state)를 기반으로 동작을 제어하는 방식 중 하나이다. 일반적으로 게임 AI를 구현하기 위해 사용된다. 유한한 개수의 상태를 가질 수 있는 오토마타이다. FSM은 한 번에 오로지 하나의 상태만을 가지며, 현재 상태에서 어떠한 사건(Event)이 발생하면 다른 상태로 전이된다. 게임으로 비유하면 이렇다. 몬스터가 Idle, Run, Attack라는 상태를 가질 수 있다. 단, 몬스터는 한 번에 하나의 상태만을 갖는다. 달리면서 공격할 수는 없다. 몬스터는 플레이어를 발견하면 Ru..
2024.01.30
-
UNSEEN 5. 게임 알고리즘 (1): A*, 쿼드트리
해당 글은 UNSEEN 2기 코딩 테스트를 대비하여 정리 목적으로 적은 글입니다. 잘못된 부분이 있다면 지적해 주시면 감사하겠습니다. 게임에서 많이 사용되는 알고리즘을 간단하게 개념 위주로 정리해 보자. 자세한 구현은 한 글에서 다룰 내용은 아닌 것 같아서 개요만 정리했다. 이번 글에서는 A*와 쿼드트리를 다룰 예정이다. 1. A* A* 알고리즘? 최단 경로를 구하는 알고리즘을 꼽으라면 가장 대표적인 것이 다익스트라(Dijkstra) 알고리즘이다. 하지만 그래프 탐색의 특성상 시간 복잡도가 크기 때문에, 실생활이나 게임에서는 이를 확장시킨 A* 알고리즘을 많이 사용한다. A* 알고리즘은 주어진 출발 지점에서 목표 지점까지 가는 최단 경로를 찾아내는 그래프 탐색 알고리즘 중 하나이다. 하나의 시작 노드에서..
2024.01.30
-
UNSEEN 대비 4. C++ 주요 컨테이너 (2) (map, unordered_map)
해당 글은 다음 UNSEEN 대비 4. C++ 주요 컨테이너 (1) (array, vector, list) (tistory.com)에서 다루지 않은 나머지 컨테이너를 다루는 글입니다. 5. 맵(map) 맵(std::map)은 키(Key)와 값(value)의 쌍들을 저장하는 이진탐색트리 기반의 컨테이너이다. 이때, 키는 중복될 수 없다. 맵의 각 원소는 std::pair로 저장된다. pair는 순서쌍을 가리키는데 여기서는 pair.first에 key가, pair.second에 value가 저장된다. C++에서 맵은 Key를 기준으로 자동 정렬되는데, 내부적으로는 레드블랙트리로 구현된다. 맵 생성 맵을 생성하는 대표적인 방법에는 map 로 빈 맵을 생성하거나 map(const map& x)로 기존 맵을 복사..
2024.01.28