Bạn đang vật lộn với cảnh noise rân rân trong path tracing, mỗi khung hình là một mớ hạt muối tiêu khó chịu? Đừng lo, thư viện khử nhiễu NRD (NVIDIA Real-Time Denoising) chính là cứu tinh cho bạn đó! Đây là thư viện khử nhiễu thời gian thực, không dùng AI (nhưng đỉnh cao không kém DLSS-RR), giúp bạn biến những bức ảnh “nhiễu loạn” thành hình ảnh sắc nét, mượt mà ngay trên GPU.
Thank you for reading this post, don't forget to subscribe!Tổng quan về thư viện khử nhiễu NRD
NRD (NVIDIA Real-Time Denoising) là thư viện mã nguồn mở, độc lập nền tảng API (D3D11/12, Vulkan), chuyên khử nhiễu cho tín hiệu path tracing với chỉ 1 tia/pixel. Nó được thiết kế để xử lý cả ánh sáng tĩnh lẫn động, dựa vào G-buffer (normal, roughness, viewZ, motion vector) để “bắt” noise trên bề mặt đục. Hiện NRD đã được tích hợp trong hơn 15 tựa game AAA và ứng dụng ProVis như Autodesk Aurora, Enscape, Lumion. Một điểm cực kỳ ấn tượng: chế độ “SH” của NRD đạt chất lượng ngang DLSS-RR, là lựa chọn không AI nhưng cực kỳ mạnh mẽ trong thế giới AI đang thống trị.
NRD cung cấp ba bộ khử nhiễu chính:
- REBLUR – khử nhiễu dạng recurrent blur, dùng cho diffuse & specular radiance, occlusion, kể cả SH.
- RELAX – khử nhiễu dạng A-trous, tối ưu cho tín hiệu từ RTXDI (direct illumination).
- SIGMA – khử nhiễu shadow chuyên biệt, hỗ trợ bóng từ nguồn sáng vô hạn lẫn local, kể cả translucent shadow.
Hỗ trợ tín hiệu: diffuse/specular radiance, occlusion (ambient & specular), directional occlusion, shadow, shadow translucent – đủ để đáp ứng hầu hết nhu cầu khử nhiễu trong game và ProVis.
Các tính năng nổi bật của thư viện khử nhiễu NRD
Hiệu năng vượt trội
Trên RTX 4080 @ 1440p native, REBLUR_DIFFUSE_SPECULAR chỉ tốn 2.5 ms (SH mode 3.4 ms), RELAX ~3.2 ms, SIGMA_SHADOW chỉ 0.4 ms. Đấy là tốc độ khủng khiếp cho chất lượng khử nhiễu cao. Bạn có thể bật anti-firefly với overhead tối thiểu (0-10% tùy denoiser).
Chế độ SH – Chất lượng đỉnh cao không cần AI
Thay vì dùng mạng neural, NRD dùng Spherical Gaussian (SG) để lưu trữ và khôi phục thông tin hướng, cho phép tái tạo chi tiết vi mô và macro sau khi khử nhiễu, kết hợp hoàn hảo với upscaler (DLSS/FSR). Kết quả là hình ảnh sắc nét, không bị mất chi tiết như các denoiser truyền thống.
Dễ tích hợp, linh hoạt
NRD phân phối dưới dạng source code và thư viện precompiled. Bạn có thể tích hợp qua layer NRI (NVIDIA Rendering Interface) hoặc native implementation. Chỉ cần expose các con trỏ native GAPI (Device, CommandList, Texture) là NRDIntegration layer lo phần còn lại. Không cần quản lý SRV/UAV phức tạp – NRD tự tạo nội bộ. API đi kèm NRD.hlsli giúp shader code dễ đọc.
History Confidence – Loại bỏ lag tạm thời
Một tính năng rất hay là đầu vào confidence (0-1) cho diffuse/specular. Nếu bạn cung cấp gradient giữa radiance trace được frame trước và frame hiện tại, NRD sẽ giảm lag tạm thời, giữ độ phản hồi nhanh. Chi phí tính toán confidence chỉ khoảng 5% frame time – rất rẻ.
Tương thích với Primary Surface Replacement (PSR)
Khi denoise reflection trong gương, NRD hỗ trợ PSR – cho phép thay thế primary hit bằng hit đầu tiên không phải mirror. G-buffer được điều chỉnh về virtual space, giúp khử nhiễu chính xác mà không cần xử lý delta event phức tạp.
Hướng dẫn cài đặt và sử dụng thư viện khử nhiễu NRD
Yêu cầu hệ thống
- CMake 3.22+
- Git
- Trình biên dịch hỗ trợ C++17
- GPU hỗ trợ DirectX 12 / Vulkan
Cách build
- Clone repo và init submodules.
- Dùng CMake generate project. Có thể set
NRD_NRI=ONđể kéo NRI. - Chạy script
1-Deployvà2-Build(hoặc dùng CMake trực tiếp). - Để đóng gói SDK, chạy
3-PrepareSDK, lấy hai thư mục_NRD_SDKvà_NRI_SDK.
Tích hợp cơ bản
Sau khi build, bạn chỉ cần include NRD.h và NRDIntegration.hpp.
Ví dụ code D3D12:
nrd::Integration NRD = {};
NRD.RecreateD3D12(integrationCreationDesc, instanceCreationDesc, deviceCreationD3D12Desc);
// Mỗi frame:
NRD.NewFrame();
SetCommonSettings();
SetDenoiserSettings();
// Điền ResourceSnapshot với texture MV, normal, viewZ, noisy input...
NRD.DenoiseD3D12(denoisers, 2, commandBufferD3D12Desc, resourceSnapshot);
Lưu ý: NRD thay đổi descriptor heap của bạn, nhớ restore sau khi denoise nha. Xem thêm hướng dẫn chi tiết trong repo gốc:
Thư viện khử nhiễu NRD trên GitHub
Shader side
Dùng NRD.hlsli để pack/unpack data. Ví dụ với REBLUR:
- Trong path tracer: gọi
NRD_FrontEnd_SpecHitDistAveraging_Begin,_Add,_End. - Demodulate material:
NRD_MaterialFactorschia radiance cho diffuse/spec factor. - Pack:
REBLUR_FrontEnd_PackRadianceAndNormHitDisthoặc_PackSh. - Unpack output:
REBLUR_BackEnd_UnpackShvà áp dụng SG resolve để lấy macro details.
NRD sample có hai nhánh: simplex (dễ theo dõi) và main (đầy đủ tính năng).
Đánh giá: Ai nên trải nghiệm thư viện khử nhiễu NRD?
- Lập trình viên game engine – muốn tích hợp path tracing real-time chất lượng cao, không phụ thuộc AI, dễ tùy chỉnh.
- Team làm ProVis (kiến trúc, thiết kế) – cần khử nhiễu nhanh, chính xác cho ứng dụng render thời gian thực.
- Nhà phát triển RTXDI / RESTIR – RELAX được thiết kế riêng cho tín hiệu từ RTXDI, kết hợp hoàn hảo.
- Bất kỳ ai yêu thích đồ họa thời gian thực – mã nguồn mở, cộng đồng sôi động, dễ học hỏi.
NRD không chỉ là thư viện khử nhiễu thông thường; nó là giải pháp chiến lược cho thế hệ game và ứng dụng đồ họa mới. Với hiệu năng cực cao, chất lượng ngang “AI flagship”, nhưng lại hoàn toàn deterministic và minh bạch, NRD xứng đáng có một vị trí trong stack render của bạn.
Kết luận
Thư viện khử nhiễu NRD của NVIDIA là lựa chọn hàng đầu cho bất kỳ ai muốn khử nhiễu path tracing thời gian thực mà không cần đến AI. Nó mạnh mẽ, linh hoạt, được kiểm chứng qua hàng loạt sản phẩm thương mại. Hãy ghé qua GitHub repository, clone về, chạy demo và cảm nhận sự khác biệt. Đừng quên theo dõi blog của bọn tôi để cập nhật thêm nhiều tool hữu ích khác nhen!

