분류 전체보기 (56) 썸네일형 리스트형 [codex] snapshot으로 인한 실행시간 증가 문제. Repository snapshot is taking longer than expected. Large untracked or ignored files can slow snapshots; consider adding large files or directories to .gitignore or disabling `undo` in your config. codex에는 현재 작업을 undo할 수 있도록 스냅샷을 찍는 기능이 있는데, 리포지토리가 너무 커지면 스냅샷을 찍는 비용이 점차 늘어나서 간단한 명령도 시간이 오래걸리게 되는 문제가 있다. 이 문제를 해결하는 가장 좋은 방법은 .gitignore를 적절히 잘 설정해서 codex가 인지하는 snapshot의 범위를 줄여주는 것이다. 그러나 실제로 리포지.. [UnrealEngine] CoreMinimal.h 지금까지는 아무 생각없이 UnrealEngine의 헤더파일 맨 윗 줄에 #include "CoreMinimal.h"를 넣어주고 있었다. 그런데 Clangd에서 CoreMinimal.h가 직접적으로 인용되고 있지 않다고 워닝을 띄우길래, 갑자기 궁금증이 들었다. CoreMinimal.h에는 언리얼 엔진에서 기본적으로 제공하는 Type definition 같은 것들이 들어있지 않을까 그냥 막연하게만 생각하고 있었는데, 이 참에 간단하게나마 알아보자는 생각이 들었다. IWYU (Include What You Use)언리얼 엔진 4.15 출시! CoreMinimal.h는 UE4.15에 처음으로 만들어진 헤더(로 보인)다. C++의 고질적 약점인 컴파일 타임을 개선하기 위한 조치로 IWYU라는 기법을 도입하면서.. 뭐라도 하자 with AI (인디게임개발) 인생의 큰 일을 하나 끝내놓고, 블로그로 다시 돌아왔다. 몇 년 ㅡ 아마도 2022년 ㅡ 전부터 내가 입버릇처럼 입에 달고 다니는 말이 있었다. "두 썸씽!" 써놓은 단어 만큼 그렇게 고압적인 스탠스는 아니었고, 팀원들과 함께 진짜 뭐라도 해야하지 않으면 안되겠다는 말을 중얼중얼 자조적으로 되새김질하는 말이었다. 그 말처럼, 그 동안 많은 일들이 있었다. 실제로 인디게임을 출시해서 마켓에 올려보기도 했고, 스터디 목적으로 게임 엔진 개발을 해보기도 했고, 게임하는게 수요가 있을까 싶어 유튜브에 찔끔찔끔 영상을 올려보기도 했다. 뭐 어느 것 하나 깊게 파지는 못했지만, 그래도 유튜브 말고는 다 내 인생에 도움이 되지 않았나 싶다. 이제 인생의 2막이 시작되었으니, 다시 팔을 걷어올리고 두 썸씽 해야할 시.. Landscape Heightmap의 데이터를 World Height로 바꾸어보자 아마 언리얼을 사용하는 대부분의 사용자에게는 전혀 필요없는 정보일 것이다. 사건의 발단은 언리얼 월드 전체를 Z축 방향으로 일정 Offset 만큼 올려야하는 일이 있어서였다. 월드 안에 있는 오브젝트가 한 두개 였다면 에디터에서 진행했겠지만, 수십만개의 오브젝트가 있었기 때문에 그건 불가능했다. Actor의 경우 정한 Offset 만큼 Z축 방향으로 올려준 뒤, SetActorLocation을 불러주고 저장하면 된다. 그러나 이렇게 해버리면 Landscape는 올라가지 않는다. Landscape를 위해서는 Heightmap 데이터를 불러와서, World의 Offset만큼 높여준 뒤 다시 Heightmap의 형태로 저장해주어야 한다. Get landscape heightmap data Heightmap 데.. [POE 3.19] 38챌린지 완료 후기 이번 시즌은 마음 먹었던 대로 시즌 오프를 조금 일찍 할 수 있게 되었다. 이번 시즌 챌린지가 조금 쉽기도 했거니와, 미리미리 챌린지를 조금씩 진행시켜두었던 것이 주효했다. 챌린지 리스트를 좀 돌아보면서 기억나는 것을 적어볼까한다. 칼란드라 호수 관련 챌린지 호수에 들어가기 / 호수 만들기 / 호수 해제하기 / 호수 발견하기 / 호수 형성하기 / 호수 극복 / 호수 깨드리기 / 호수 정복 이번 시즌 컨텐츠답게 8개의 챌린지가 할당되어있었다. 호수를 처음에 몇 번 해보고는 별로 내 취향과 맞지 않아서 일찌감치 챌린지를 깰 목적으로 호수들을 만들어두었다. 그중에서 칼란드라나 낙원이 뜨면 비싼 값에 팔고, 내가 돌지는 않았던 것 같다. 신성한 오브가 잘 나와서 돌면 이득이라고는 했던 것 같다. 가장 마지막까지.. [UE5] Sparse Distance Field - 2. Distance Field의 스트리밍 이전 글에서 대상 메시의 정보를 이용하여 디스턴스 필드 정보를 생성하고, 이를 FDistanceFieldVolumeData에 저장하는 과정을 살펴보았다. 이 VolumeData는 UStaticMesh의 RenderData 내부의 LODResource[0]번째에 DistanceFieldData라는 이름으로 저장되어있다. 또한 이 데이터를 어떤 형태로 저장해 두었는지 또한 확인하였다. 이번 글에는 이 에셋 데이터가 어떻게 씬에 올라가게 되고, 스트리밍 되는지를 살펴볼 예정이다. FDistanceFieldSceneData 지난 번에 살펴본 FDistanceFieldVolumeData가 각 메시 에셋을 대표한다면, FDistanceFieldSceneData는 이 에셋들을 관리하고 적절히 업데이트 해주는 책임을 .. [UE5] Sparse Distance Field - 1. Distance Field를 만드는 과정 언리얼 엔진이 5 버전으로 넘어오면서, 디스턴스 필드 또한 눈에 띄진 않지만 많은 부분을 개선했다. 기존 4 버전에서는 메시의 디스턴스 필드를 사용하는데 있어서 가장 큰 문제는 너무 많은 메모리를 소비한다는 점이었다. 그렇기 때문에 디스턴스 필드는 해상도가 굉장히 제한적이었고, 많은 부분에 사용하기도 어려웠다. 5 버전에서는 이것을 개선하기 위해 디스턴스 필드에도 텍스쳐와 같이 Mip Level을 나누고, 이를 스트리밍할 수 있도록 만들었다. 스트리밍이 가능해졌기 때문에 상대적으로 가까운 물체에는 높은 해상도의 디스턴스 필드를, 그렇지 않은 물체에는 낮은 메모리 점유라는 이득을 취할 수 있었다. 물론 스트리밍에 드는 비용을 트레이드 오프로 지불해야만 한다. FMeshUtilities::GenerateSi.. 자체 게임 엔진 개발하기 (HopStep Engine) - HeaderTool 만들기와 Property Get/Set 메서드 작성 요즘 너무 게임만 하는 것 같아서, POE를 좀 정리하고 자체엔진 만드는 취미를 다시 조금씩 하고 있다. 지난 번에 끝났던 상태는 리플렉션 구현인데, 그 상태에서 계속 이어서 진행해보았다. HeaderTool Unreal Header Tool의 역할을 해줄 프로젝트를 하나 만들었다. 언리얼은 BulidTool이 C#이고, HeaderTool은 C++로 구현되어있는데, 내 프로젝트에서는 그냥 편의를 위해 C#으로 구현했다. 당장에는 필요한 기능이 많지 않으므로, 유연해보이지 않더라도 최대한 가볍게 구현해보는 것이 목적이다. 내 HeaderTool의 목적은 결국 엔진, 컨텐츠단의 오브젝트들의 정보를 읽고, 이를 지원하는 리플렉션 정보를 생성하는 것이다. 위와 같은 헤더를 읽고, Finite State Mac.. 이전 1 2 3 4 ··· 7 다음