본문 바로가기

전체 글

(55)
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..
[POE 3.19] 번개 도관 CI 트릭스터 빌드 마무리 (10 권능 충전) 패스 오브 엑자일은 확실히 빌드에 벌었던 커런시를 투자해가면서 해야 재미있는 것 같다. 지난 기간 동안 커런시를 좀 열심히 벌어서 번개 도관 트릭스터 빌드를 업그레이드 해놓았다. 물론 정말정말 엔드급 세팅이라고는 할 수 없겠지만 일단 내 기준으로는 새로운 빌드를 위해 번개 도관 빌드에는 더 이상의 커런시 투자는 하지 않을 생각이다. 새로운 빌드와 커런시를 벌었던 방법에 대해서는 다른 글로 또 소개하도록 하고, 지난 빌드업 버전에서 어떤 것들이 추가되었는지를 좀 쓸 예정이다. 일단 쓰고 있던 젬들을 각성 젬으로 바꾸어주었다. 앞의 두 개는 번개 도관에 연결된 보조 젬들이고, 연쇄 보조는 치명타 증가 보조를 빼고 연쇄 보조를 구해서 쓰고 있다. 연쇄 보조를 쓰니 확실히 매핑이 편해지는 것이 체감이 되지만, ..
[POE 3.19] 트릭스터 CI 번개 도관 빌드 소개 및 빌드업 3.19 시즌도 이제 거의 한달이란 시간이 지나가고 있다. 시즌 초는 정말 다사다난했지만 여러 패치들도 있었고, 내 빌드도 이제 초반 단계에서 벗어나 일정 수준 궤도에서 오른 느낌이다. 그 전 빌드인 오컬티스트 독성 플라스크 빌드를 플레이하면서 매핑 속도와 타격감이 매우 마음에 들었지만, 항상 '이 빌드는 스타터 빌드니까 돈을 많이 쓰지 말아야 겠다' 이런 생각이 들면서 뭔가 게임이 재미가 없어졌었다. 그래서 안되겠다 싶어 오컬 냉블볼로 빌드를 갈아탔는데, 아뿔사. 자본이 그리 많지 않다보니 빌드가 제대로 굴러가지 않아 16티어 맵도 겨우겨우 도는 것이다. 그러던 와중 트릭스터 CI 번개 도관 빌드에 대한 소개글을 보았고, 스타터를 다시 키워본다는 마음으로 이 빌드를 굴리게 되었다. 빌드 가이드 레퍼런스..
[POE 3.19] 독성 플라스크 오컬티스트 1주일차 빌드업과 후기 말도 많고 탈도 많은 3.19 칼란드라의 호수 리그를 시작한지 1주일이 되었다. 이래저래 플레이 타임을 많이 할애할 시간이 없기도 하고, 생각보다 리그 진행이 힘들어 1주일차 목표였던 공허석 4개는 아직 도달하지 못했다. 약간의 변명을 하자면, 시즌초에 도저히 할만한 상황이 아니었다고 말하고 싶다. 일반 유저는 체감하지 못할 정도의 드랍률 너프가 있었다곤 하지만, 이렇게 가난하고 빡빡하게 리그 초를 진행해보기는 처음이었다. 드랍률도 드랍률이고, 강적은 너무 또 강해졌고, 리그 컨텐츠인 칼란드라는 대체 이걸 왜 하나 싶을 정도로 보상이 짰다. 지금은 많이 개편이 되었다고는 하지만, 지난 시즌처럼 몹을 꽉꽉 몰아넣고 쓸어버리는 "핵 앤 슬래시" 스타일의 플레이는 좀 손해인 것 같다. [POE 3.19] Oc..