GitHub - NVIDIA-RTX/RTXNTC: NVIDIA Neural Texture Compression SDK
Service

GitHub - NVIDIA-RTX/RTXNTC: NVIDIA Neural Texture Compression SDK

NVIDIA-RTX
2026.04.06
·GitHub·by 이호민/AI
#GPU#Neural Networks#NTC#Real-time Rendering#Texture Compression

핵심 포인트

  • 1NTC는 단일 Material의 PBR 텍스처들을 함께 압축하는 Neural Texture Compression 알고리즘으로, 원본 데이터를 경량 신경망 weight와 latent tensor로 변환하여 기존 방식 대비 VRAM 사용량을 크게 줄입니다.
  • 2텍스처 재구성은 작은 Multi-Layer Perceptron(MLP) decoder를 통한 빠른 Inference로 이루어지며, NVIDIA Ada 및 Blackwell GPU의 Cooperative Vector 확장 기능을 활용하여 2-4배의 성능 향상을 제공합니다.
  • 3NTC는 게임 로드 시 BCn으로 트랜스코딩하는 "Inference on Load" 모드와 셰이더에서 직접 샘플링하는 "Inference on Sample" 모드를 지원하며, DirectX 12 및 Vulkan 1.3을 통해 광범위한 GPU 환경에서 통합 및 활용될 수 있습니다.

NVIDIA RTX Neural Texture Compression (NTC) SDK는 단일 material에 사용되는 PBR (Physically Based Rendering) texture들을 함께 압축하도록 설계된 알고리즘입니다. 특히 texture channel들 간에 상관관계가 높을 때 (예: albedo의 detail이 normal texture의 detail과 일치할 때) 효과적이며, 최대 16개의 texture channel을 하나의 NTC texture set으로 압축할 수 있습니다. 일반적인 PBR material은 3x albedo, 3x normal, metalness, roughness, ambient occlusion, opacity와 같이 9-10개의 channel을 가집니다.

핵심 방법론 (Core Methodology)

NTC의 핵심은 원본 texture 데이터를 small neural network (decoder 또는 MLP)의 weights와 latents (또는 features)의 조합으로 변환하는 것입니다.

  1. 압축 (Compression):
    • 압축 과정에서 NTC는 원본 texture data로부터 small neural network (decoder/MLP)의 weights와 tensor 형태의 latents를 학습합니다.
    • 이 latents는 각 texel의 특징을 인코딩하며, decoder는 이 latents를 입력으로 받아 원본 texture의 color를 재구성합니다.
    • 압축 수준은 "Latent Shape"를 통해 조절되며, 이는 high-resolution 및 low-resolution latent channel의 개수, 해당 channel의 bit-depth, 그리고 그 사이의 scale factor를 조합한 것입니다. 각 Latent Shape는 특정 per-texel bitrate에 해당하여, 원하는 압축률에 맞춰 호환되는 Latent Shape를 선택할 수 있습니다.
    • NTC는 조정 가능한 품질/고정 bitrate의 손실 압축 방식(adjustable quality/constant bitrate lossy compression scheme)으로 작동하지만, pre-analysis를 통해 고정 품질/가변 bitrate(constant quality/variable bitrate)에 가깝게 동작하도록 설정할 수도 있습니다.
    • 예시로, 8 bits/channel의 5개 channel PBR material (albedo, normal, roughness, metalness, AO)은 raw image로 64 bits/texel이지만, NTC로 압축 시 5 bits/texel로 BCn (BC7, BC5)과 유사한 40-50 dB PSNR 품질을 달성할 수 있습니다. 2k-by-2k texture 기준 VRAM 사용량은 raw image 32MB, BCn 12MB 대비 NTC-on-Sample 모드에서 2.5MB로 대폭 감소합니다.
  1. 비압축 (Decompression / Inference):
    • Texel을 비압축하기 위해서는 해당 texture coordinate에 상응하는 latent data를 읽고, 압축 시 결정되어 압축된 bundle의 일부로 저장된 small MLP network를 통해 "inference" 연산을 수행합니다.
    • 이 샘플링 및 디코딩 과정은 material texture를 샘플링하는 base pass pixel shader 또는 ray tracing hit shader에서 직접 사용될 만큼 충분히 빠릅니다.
    • Decoder는 단일 texel에 대한 필터링되지 않은(unfiltered) 데이터를 생성하므로, 필터링된 texture를 얻기 위해서는 Stochastic Texture Filtering (STF)과의 조합을 제안합니다.

운영 모드 (Operational Modes)

NTC SDK는 세 가지 주요 비압축 모드를 지원합니다.

  1. Inference on Load: 게임이나 map이 로드될 때 NTC texture가 비압축되어 BCn (Block Compression) 형식으로 transcoded 됩니다. 저사양 하드웨어를 대상으로 하는 렌더러에 적합하며, 압축된 NTC 데이터는 VRAM에 로드되지 않고 BCn texture만 사용됩니다.
  2. Inference on Sample: Pixel shader 또는 ray tracing hit shader에서 직접 texel당 NTC inference를 수행하여 texture를 실시간으로 재구성합니다. 이는 VRAM 사용량을 NTC 압축 데이터 크기 (예: 2.5MB for 2k-by-2k)로 크게 줄입니다.
  3. Inference on Feedback (고급 모드): Sampler Feedback을 사용하여 현재 뷰를 렌더링하는 데 필요한 texture tile set을 찾아낸 다음, 해당 tile만 비압축하여 sparse tiled texture로 BCn 형식으로 저장합니다.

Cooperative Vector 확장 기능 (Cooperative Vector Extensions)

NTC의 inference 연산은 3D 렌더링 애플리케이션의 일반적인 pixel shader에 비해 상당한 계산 비용을 가질 수 있습니다. 이를 최적화하기 위해 Vulkan 및 Direct3D 12의 새로운 Cooperative Vector 확장을 활용합니다. Ada- 및 Blackwell-class GPU에서는 이 확장을 사용하지 않는 최적화된 구현에 비해 inference 처리량에서 2-4배의 향상을 제공합니다. 하위 호환성을 위해 DP4a 명령어 또는 일반 정수 연산을 사용하는 fallback 구현도 제공되어 Direct3D 12 Shader Model 6 이상을 지원하는 모든 플랫폼에서 실행 가능합니다.

시스템 요구 사항 (System Requirements)

  • 운영 체제: Windows 10/11 x64, Linux x64
  • 그래픽 API: DirectX 12 (preview Agility SDK for Cooperative Vector 지원), Vulkan 1.3
  • GPU:
    • NTC 비압축 및 BCn transcoding (On Load): 최소 Shader Model 6 호환 (NVIDIA GTX 1000 series, AMD Radeon RX 6000 series, Intel Arc A series). 권장 NVIDIA Turing (RTX 2000 series) 이상.
    • NTC inference (On Sample): 최소 Shader Model 6 호환 (기능은 하지만 매우 느림). 권장 NVIDIA Ada (RTX 4000 series) 이상.
    • NTC 압축: 최소 NVIDIA Turing (RTX 2000 series). 권장 NVIDIA Ada (RTX 4000 series) 이상.
  • 드라이버: NVIDIA GPU의 Cooperative Vector 지원을 위해서는 DX12용 NVIDIA Graphics Driver preview 590.26 이상 또는 Vulkan용 최소 570 버전이 필요합니다.

SDK 구성 요소 (SDK Contents)

  • LibNTC: NTC 압축, 비압축, BCn 인코딩을 구현하는 라이브러리.
  • ntc-cli: Texture 압축 및 비압축을 위한 커맨드라인 도구.
  • NTC Explorer: NTC와 NTC 파일 뷰어를 인터랙티브하게 실험할 수 있는 앱.
  • NTC Renderer: NTC material을 사용하여 GLTF 모델을 렌더링하는 샘플 앱.
  • BCTest: BCn encoder의 성능 및 품질 평가를 위한 테스트 앱.
  • ntc.py: ntc-cli를 사용한 자동화 스크립트 개발용 Python 모듈.
  • test.py: 기본 기능 테스트 스크립트.

알려진 문제 (Known Issues)

  • D3D12 Cooperative Vector 지원은 현재 테스트 목적으로만 제공되며, 제품 출시용으로 사용해서는 안 됩니다.
  • GDeflate 비압축 시 특정 드라이버 버전에서 충돌이 발생할 수 있습니다.
  • CoopVec FP8 inference가 특정 Intel Arc GPU에서 부정확한 결과를 생성할 수 있습니다.
  • Rendering sample의 Inference on Feedback 모드가 AMD GPU에서 작동하지 않습니다.

이 SDK는 콘텐츠 파이프라인 및 엔진 런타임에 NTC를 통합하기 위한 여러 도구를 제공하며, LibNTC 라이브러리와 ntc-cli 도구를 통해 압축 및 비압축 작업을 수행할 수 있습니다.