0.0.3 • Published 4 years ago

nvk-optix-denoiser v0.0.3

Weekly downloads
2
License
MIT
Repository
github
Last release
4 years ago

nvk-optix

Bindings of NVIDIA's Optix Denoiser for node-vulkan. Allows to share VkBuffers between Vulkan and the Optix Denoiser for real-time denoising.

Screenshots

API

denoiser.create

NameTypeDescription
widthNumberWidth of the input to operate
heightNumberHeight of the input to operate

Creates a new instance of the denoiser with the desired with and height.

denoiser.destroy

Destroyes the denoiser and all imported memory buffers and semaphores.

denoiser.denoise

NameTypeDescription
blendFactorNumberBlending factor (0-1 range) of the input and the denoised output

denoiser.setVulkanInputMemory

NameTypeDescription
colorBigIntImportable Vulkan handle to the color channel
albedoBigIntImportable Vulkan handle to the albedo channel
normalBigIntImportable Vulkan handle to the normal channel
  • Color is the final image to denoise
  • Albedo contains the primary hit albedo color
  • Normal contains the primary hit normals of the scene in camera-space

Example:

let memoryGetWin32HandleInfoKHRInfo = new VkMemoryGetWin32HandleInfoKHR();
memoryGetWin32HandleInfoKHRInfo.memory = deviceMemory;
memoryGetWin32HandleInfoKHRInfo.handleType = VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT;

let buffer = new ArrayBuffer(0x8);
result = vkGetMemoryWin32HandleKHR(device, memoryGetWin32HandleInfoKHRInfo, { $: buffer.getAddress() });
ASSERT_VK_RESULT(result);

let colorHandle = new BigUint64Array(buffer)[0];
...
..

denoiser.setVulkanInputMemory(
  colorHandle,
  albedoHandle,
  normalHandle
);

denoiser.setWaitSemaphore

NameTypeDescription
handleBigIntImportable Vulkan Semaphore

Vulkan Semaphore which is used to wait for a finished render of a Vulkan ray-traced image, which then can be processed by the denoiser.

Example:

let semaphoreGetWin32HandleInfoKHRInfo = new VkSemaphoreGetWin32HandleInfoKHR();
semaphoreGetWin32HandleInfoKHRInfo.semaphore = denoiseWaitSemaphore;
semaphoreGetWin32HandleInfoKHRInfo.handleType = VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT;

let buffer = new ArrayBuffer(0x8);
result = vkGetSemaphoreWin32HandleKHR(device, semaphoreGetWin32HandleInfoKHRInfo, { $: buffer.getAddress() });
ASSERT_VK_RESULT(result);

let waitHandle = new BigUint64Array(buffer)[0];

denoiser.setWaitSemaphore(waitHandle);

denoiser.setUpdateSemaphore

NameTypeDescription
handleBigIntImportable Vulkan Semaphore

Vulkan Semaphore which is used to indicate when the denoiser finished denoising, so Vulkan can (for example) display the denoised result.

Example:

let semaphoreGetWin32HandleInfoKHRInfo = new VkSemaphoreGetWin32HandleInfoKHR();
semaphoreGetWin32HandleInfoKHRInfo.semaphore = denoiseUpdateSemaphore;
semaphoreGetWin32HandleInfoKHRInfo.handleType = VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT;

let buffer = new ArrayBuffer(0x8);
result = vkGetSemaphoreWin32HandleKHR(device, semaphoreGetWin32HandleInfoKHRInfo, { $: buffer.getAddress() });
ASSERT_VK_RESULT(result);

let updateHandle = new BigUint64Array(buffer)[0];

denoiser.setUpdateSemaphore(updateHandle);