Animation Compression
·
Graphics
시작하기 전에..UE 5.5에서 캐릭터 관련 에디터 기능을 플러그인으로 포팅하면서 애니메이션 시스템의 압축기를 이식하기 위해 압축 프로세스를 분석해보려고 한다. 언리얼 내부에서도 ACL 플러그인을 주축으로 데이터 압축이 진행되며 디코딩 과정만 적용한다면 충분히 사용 가능하다고 판단이 된다. Key Sampling먼저 키샘플링은 애니메이션을 일정 시간 단위로 샘플링하여 키를 생성하는 단계이다.샘플레이트를 지정하여 초당 몇 프레임으로 샘플링할지 정할 수 있고 크로스 플랫폼 게임의 경우Frame Stripping 기능을 활용하면 플랫폼 별로 샘플레이트를 다르게 적용할 수 있게 해준다. Key Reduction애니메이션 키 데이터를 압축하기 이전 압축에 필요한 키들을 선별하기 위한 사전 작업이다.각각의 알고리즘..
IMM (Input Method Manager) & IME(Input Method Editor)
·
ETC
시작하기전에..단일 국가에 서비스를 하는 경우 해당 국가에서 사용하는 언어에 대한 코드페이지를 설정하여 해당 언어를 지원할 수 있지만 여러 국가에서 접속하여 각국의 언어를 동일 클라이언트에서 지원하기 위해서는 해당 방법으로는 다중 언어를 지원을 하지 않으므로 표현이 불가능하다. 이로 인해서 나온 문자집합이 유니코드이며 두 방식에 대한 차이점과 입력기의 유니코드 전환 과정 중 시행 착오에 대한 정리를 해보려 한다. 해당 관련 작업을 진행하기 전에 하위 링크의 글을 읽어보면 문자 집합 처리 과정과 유니코드에 대한 이해에 도움이 많이 된다. https://www.joelonsoftware.com/2003/10/08/the-absolute-minimum-every-software-developer-absolut..
Animation Retargeting
·
Graphics
시작하기전에..요즘 상용 엔진에서는 기본적으로 지원하는 애니메이션 재활용 기법인 Retargeting을 구현하는 과정에서의 아이디어를 정리해보려한다. 사실 요즘 상용엔진을 사용하지 않고 네이티브로 구현할 일이 얼마나 있을지는 잘 모르겠지만.. 나중에 다시 구현해야할 일이 있을 경우 동일한 실수를 반복하지 않기 위해... Skeletal Mesh의 Bone 구조가 다르거나 Bone의 Base Pose가 다른 경우 Animation을 재활용 할 수 있을까?먼저 애니메이션이 어떻게 처리되는지 생각해보자. 기준이되는 모델의 각 노드별 Local Transform에 대한 Base Pose를 기준으로 각 애니메이션 트랙 내의 프레임에서 표현되는 키값은 변화한 각 노드들의 로컬 공간에서의 변화량에 대한 정보를 의미한..
Texture Block Compression
·
Graphics
시작하기 전에..프로젝트에서 자체 텍스처 포멧을 사용하는 경우 텍스처 압축 포멧을 추가해야 할 때마다 압축기를 통해 압축 데이터를 지원해야 하는 경우가 발생한다. 압축기를 제공하는 오픈소스 라이브러리가 여러가지 있는데 NVIDIA의 NVTT의 경우 NVIDIA Texture Tools 3 부터는 풀 소스가 아닌 SDK 형식의 라이브러리를 제공한다. 빌드된 툴로는 DDS 형식의 포멧으로 적용을 해야 했기에 텍스처 데이터만 필요한 경우 SDK를 활용하여 압축기를 구성해야한다.https://developer.nvidia.com/gpu-accelerated-texture-compression NVIDIA Texture Tools 3NVTT 3 can be used to compress textures to a..
[DirectX 11] Dissolve Effect
·
Graphics
Dissolve Effect - 특정 모델이 죽거나 사라질때 갑자기 사라지는 것이 너무 어색하다 느껴, 이전에서 부터 이러한 효과들을 추가해보고 싶은 욕심이 있었기에 객체가 타들어가는 효과인 Dissolve Effect를 활용하게 되었다. Dissolve Effect 적용 방식 - 일단 Dissolve Effect를 적용하기 위해선 Dissolve 전용 Noise Texture가 필요로한데 시간적인 부분도 있고 아트측에서 제작해본 경험도 없었기에 아트측에서 제작한 몇개의 Texture와 구글링을 통해 찾은 Texture를 섞어 사용하게 되었다. - 실체가 보여지는 굵기와, 타들어가는 속도, 타들어가는 색상 및 강도, 타들어가는 부분의 바깥쪽과 안쪽의 강도를 설정 할수 있게 구현하여 세세한 조절을 할 수 ..
[DirectX 11] Color Grading & LookUpTable Texture
·
Graphics
Color Grading- 후처리 방식중 하나이며, 전체적인 스크린상의 RGB값을 활용하여 미리 계산해둔 다른 테이블의 RGB로 변환시키는 작업이다.- 영화측에서는 거의 필수적으로 사용한다고 하며, 다른 테이블을 참조해서 변환한다는 것 자체는 간단하지만 생각보다 효과적인 결과물을 볼 수 있다. Color Grading을 적용하게된 계기- 현재 진행중인 프로젝트에서 외부에 있을때와 내부에 있는 경우는 IBL을 영역별로 나누어 분위기를 조성하였지만, 게임 흐름상 보스존에 입장한다거나 공간에 대한 변화가 있을때 추가적인 효과를 주기 위해 추가하게 되었다.- 처음엔 단일 Color Grading을 적용하려고 생각하였으나 교수님이 피드백으로 보통 게임에서 상황이나 구역별로 영역을 지정하여 가중치를 주어 블랜딩하여..
[C++] Delegate & Function Pointer
·
C++
Delegate - 게임 엔진 컴포넌트와 랜더러 엔진을 구성하는 도중 객체의 멤버함수나 전역 함수를 같은 형식의 함수를 묶어 특정 이벤트에서 한번에 호출해주는 방식을 도입하면 편리할 것 같아 도입하게 되었다. - 유니티와 같은 경우에는 Delegate 타입으로 함수포인터 변수를 선언하여 해당 타입을 통해 이벤트를 등록해두어 사용할 수 있게 되어있다. - 언리얼 같은 경우엔 Delegate 타입을 Delegate 전용 define을 통해 미리 선언해 두어야 하는데 해당 define은 함수의 종류에 따라 각각 호출하는 함수(Bind, BindStatic, BindRaw, BindSP, BindUObject ...)가 다르다. - 일단 현재 프로젝트에서 간단히 같은 형식의 함수를 묶어 호출해주는 방식과, 해당..
[DirectX 11] HDRI Sky Light & Sky Cube Baking
·
Graphics
HDRI Sky Light & Sky Cube Baking - 이전에는 SDR CubeMap을 활용하여 IBL을 적용하였는데, Shadow 영역이 부자연스럽다는 피드백을 받아 HDRI를 활용함과 동시에 배치되어있는 Directional Light의 방향과 일치시킨 CubeMap을 Baking 하는 기능을 추가하여 자연스럽게 하도록 하였다. 이전 IBL 방식의 문제점 - HDR Image를 활용하지 않아 태양의 강도를 표현하기 어렵다. - IBL에 적용된 Image가 전체적으로 너무 밝은 이미지여서 제대로된 IBL 효과를 볼 수가 없었다. - IBL에 적용된 Image의 Light 방향과 게임상에 적용되있는 Directional Light의 방향이 다르기에 Shadow 영역이 의도치 않게 밝게 나오는 현상..