본문 바로가기

분류 전체보기

(47)
[ UE 5 ]Texture Streaming (2) 이전 과정 2022.12.05 - [STUDY/Unreal Engine] - [ UE 5 ]Texture Streaming (1) [ UE 5 ]Texture Streaming (1) Texture Streaiming은 게임에서 필요한 텍스쳐를 load/Unload하는 기술입니다. 필요한 텍스쳐만 로드하여 VRAM과 메모리 사용량을 최적화하고, 렌더링 성능을 향상시켜줍니다. UE의 Texture Streaming System은 Ma agh2o.tistory.com Do Work Streaming Mip 계산의 핵심부분인 DoWork() 함수를 분석합니다. void FRenderAssetStreamingMipCalcTask::DoWork() { // 비동기 작업이 실행되는 동안 스트리밍 렌더 에셋은 재할당..
[ UE 5 ]Texture Streaming (1) Texture Streaiming은 게임에서 필요한 텍스쳐를 load/Unload하는 기술입니다. 필요한 텍스쳐만 로드하여 VRAM과 메모리 사용량을 최적화하고, 렌더링 성능을 향상시켜줍니다. UE의 Texture Streaming System은 Mapping 퀄리티를 낮춰 메모리 사용량을 줄일 수 있고, 더 세밀한 밉맵 레이어를 사용하기 때문에 Bandwidth를 줄이고 성능를 개선할 수 있습니다. UE 텍스처 스트리밍은 최적화를 위한 훌륭한 툴이지만, 최적화 과정에서 UE 텍스처 스트리밍을 제어하기 어렵고 기대에 미치지 못하는 경우가 많아서 더 나은 사용을 위해 UE 텍스처 스트리밍의 구현 메커니즘을 살펴보는 시간을 가졌습니다. 텍스처를 스트리밍하는 이유? 텍스처를 축소할 때 다음 두 가지 문제를 해..
Reducing Texture Memory Usage ( by Two Channel Color Encoding ) Intro 현대 게임에서 텍스처는 재질의 표현에 대한 정보를 저장하는 주요 수단입니다. 하나의 텍스처가 3D 메쉬 전체의 모든 재질을 포함하는 경우도 있습니다. 이들은 동일하게 개별적인 재질들을 표현하는데, 예를들어 벽, 지형, 식물, 잔해, 간단한 지물등이 있습니다. 이러한 단일 재질 텍스처는 종종 다양한 색상을 나타내지 않고 제한된 범위의 색조를 포함하는 반면, 재질 표면 내의 하이라이트 및 어두운 영역 (예 : 음영 처리)으로 인한 전체 밝기 범위를 사용합니다 Texture Encoding Algorithm 위 그림은 UnitCube로 잘 알려진 RGB 색상 공간을 보여줍니다. 각 source texel color는 이 큐브에 있는 한 점에 해당합니다. 두 채널을 사용하여 이 공간을 근사하는 것은,..
프로그래머스 - 멀쩡한 사각형 ▶ 문제 설명 [ 문제 ] 가로 길이가 Wcm, 세로 길이가 Hcm인 직사각형 종이가 있습니다. 종이에는 가로, 세로 방향과 평행하게 격자 형태로 선이 그어져 있으며, 모든 격자칸은 1cm x 1cm 크기입니다. 이 종이를 격자 선을 따라 1cm × 1cm의 정사각형으로 잘라 사용할 예정이었는데, 누군가가 이 종이를 대각선 꼭지점 2개를 잇는 방향으로 잘라 놓았습니다. 그러므로 현재 직사각형 종이는 크기가 같은 직각삼각형 2개로 나누어진 상태입니다. 새로운 종이를 구할 수 없는 상태이기 때문에, 이 종이에서 원래 종이의 가로, 세로 방향과 평행하게 1cm × 1cm로 잘라 사용할 수 있는 만큼만 사용하기로 하였습니다. 가로의 길이 W와 세로의 길이 H가 주어질 때, 사용할 수 있는 정사각형의 개수를 구하..
전위(prefix) vs 후위(postfix) 증감연산자 우리는 증감연산자를 오버로딩할 때 다음과 같이 정의합니다. class Point { public: Point& operator++();//전위++ const Point operator++(int);//후위++ private: int _value; }; 전위는 인자가 없고, 후위는 증감연산자가 호출될 때 0을 넘기도록 하는 것입니다. 이보다 더 중요한 것은 전위형태는 참조자 타입을 반환하고, 후위 형태는 const 객체타입을 반환합니다. 보통 사람들은 전위형태는 "증가시키고 값을 사용하는" 연산자이고, 후위 형태는 "값을 사용하고 증가시키는" 연산자로 외우고 있을 것입니다. c++ 스펙에서 공식적으로 이렇게 설정되어 있습니다. class Point { public: Point() :_value(0) {};..
프로그래머스 - 주식가격 ▶ 문제 설명 [ 문제 ] 초 단위로 기록된 주식가격이 담긴 배열 prices가 매개변수로 주어질 때, 가격이 떨어지지 않은 기간은 몇 초인지를 return 하도록 solution 함수를 완성하세요. 제한사항 prices의 각 가격은 1 이상 10,000 이하인 자연수입니다. prices의 길이는 2 이상 100,000 이하입니다. [ 입출력 예 ] prices return [1, 2, 3, 2, 3] [4, 3, 1, 1, 0] 입출력 예 설명 1초 시점의 ₩1은 끝까지 가격이 떨어지지 않았습니다. 2초 시점의 ₩2은 끝까지 가격이 떨어지지 않았습니다. 3초 시점의 ₩3은 1초뒤에 가격이 떨어집니다. 따라서 1초간 가격이 떨어지지 않은 것으로 봅니다. 4초 시점의 ₩2은 1초간 가격이 떨어지지 않았습니..
사용자 정의 타입변환과 explicit C++ 은 컴파일러가 암시적인 타입변환을 할 수 있도록 합니다. char를 int로 short를 double로 double을 short로 변환이 가능하며 별 문제가 생기는 경우도 없습니다 standard한 타입에 대해서는 자유로운 형변환을 막을 방법이 없지만, 우리가 직접 만드는 타입에 대해서는 형변환 결정권은 우리가 가질 수 있습니다. 컴파일러가 사용하는 타입변환 함수는 두가지입니다. 1. 단일인자 생성자 2. 암시적 타입변환 연산자 1. 단일인자 생성자 암시적 타입변환 연산자는 operator만 붙어있는 꼴입니다. 이 함수는 반환값 타입이 없습니다. 아래 Rational class에 있는 operator double이 암시적 타입변환 연산자입니다. class Rational { public: Rati..
스마트포인터 shared_ptr 구현하기 (2) - thread safety thread safety ? c++ refenence 를 보면 다음과 같이 나와 있습니다. 더보기 All member functions (including copy constructor and copy assignment) can be called by multiple threads on different instances of shared_ptr without additional synchronization even if these instances are copies and share ownership of the same object. 해석 모든 멤버 함수(복사 생성자, 복사 할당 연산자를 포함한)는 해당 인스턴스들이 복사되거나 똑같은 객체 소유권을 공유한다해도 다른 공유 포인터의 인스턴스에서 추가..