Animation Compression
·
Graphics
시작하기 전에..UE 5.5에서 캐릭터 관련 에디터 기능을 플러그인으로 포팅하면서 애니메이션 시스템의 압축기를 이식하기 위해 압축 프로세스를 분석해보려고 한다. 언리얼 내부에서도 ACL 플러그인을 주축으로 데이터 압축이 진행되며 디코딩 과정만 적용한다면 충분히 사용 가능하다고 판단이 된다. Key Sampling먼저 키샘플링은 애니메이션을 일정 시간 단위로 샘플링하여 키를 생성하는 단계이다.샘플레이트를 지정하여 초당 몇 프레임으로 샘플링할지 정할 수 있고 크로스 플랫폼 게임의 경우Frame Stripping 기능을 활용하면 플랫폼 별로 샘플레이트를 다르게 적용할 수 있게 해준다. Key Reduction애니메이션 키 데이터를 압축하기 이전 압축에 필요한 키들을 선별하기 위한 사전 작업이다.각각의 알고리즘..
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을 적용하려고 생각하였으나 교수님이 피드백으로 보통 게임에서 상황이나 구역별로 영역을 지정하여 가중치를 주어 블랜딩하여..
[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 영역이 의도치 않게 밝게 나오는 현상..
[DirectX 11] Material Property Block
·
Graphics
Material Property Block - 현재 같은 Mesh를 사용하는경우 Instancing을 통해 같은 Batch로 모아서 그리는 과정에서 특정 한 객체의 Material만 변경해야 할 경우를 처리하기 위해 Material Property Block을 도입하게 되었다. Material Property Block 동작 원리 - 현재 배치되어있는 Instance Batch는 유지하되, 현재 Material Property Block이 활성화된 시점 동안에만 잠시 다른 Batch로 빼서 따로 그리는 방식이다. - 현재 Instance Batch를 실시간으로 변경해주는 것보다 활성화된 시점에만 잠시 빼서 따로 그리는 방식이 효율적이라 생각이 들어 해당 방식으로 적용하였다. - 해당 객체의 Materia..
[DirectX 11] Rim Lighting
·
Graphics
Rim Lighting - 프로젝트 진행중 아트측 요청으로 배경과 캐릭터 간의 구분을 위해 Rim Lighting을 추가해달라는 요청이 있어서 추가하게 되었다. - 적용을하다 보니 구분을 위해 사용함과 동시에 Noise Texture를 혼합하여 피격 효과나 프로젝트에서 보스의 분신을 생성할때 사용하면 나쁘지 않겠다는 생각이 들었다. - 일단 Rim Light란 Lembert 공식에서 ( N dot L )에서 Light Vector 대신 View Vector를 활용하여 1-( N dot V )로 값을 뒤집어 외곽선을 뚜렷하게 보이게 하는 효과이다. - 결국 Rim Light는 역광에서 나온 빛이 반사되어 보인다고 생각하면 될 것 같다. - 해당 Rim Light를 자유롭게 쓰기 위해 너비값, 강도, 색상을..