[Bf-blender-cvs] [aa5426d96ba] cycles-x: Fix OptiX denoiser for transparent film in Cycles X

Sergey Sharybin noreply at git.blender.org
Tue Jun 15 16:00:49 CEST 2021


Commit: aa5426d96bac0335e15c48b961dbf3b405cfec3a
Author: Sergey Sharybin
Date:   Tue Jun 15 14:44:19 2021 +0200
Branches: cycles-x
https://developer.blender.org/rBaa5426d96bac0335e15c48b961dbf3b405cfec3a

Fix OptiX denoiser for transparent film in Cycles X

===================================================================

M	intern/cycles/device/optix/device_impl.cpp
M	intern/cycles/kernel/device/cuda/kernel.cu

===================================================================

diff --git a/intern/cycles/device/optix/device_impl.cpp b/intern/cycles/device/optix/device_impl.cpp
index b9f624f0ba0..46369e18f49 100644
--- a/intern/cycles/device/optix/device_impl.cpp
+++ b/intern/cycles/device/optix/device_impl.cpp
@@ -616,8 +616,8 @@ bool OptiXDevice::denoise_filter_convert_from_rgb(OptiXDeviceQueue *queue,
 {
   const int work_size = task.buffer_params.width * task.buffer_params.height;
 
-  const int pass_combined_denoised = task.buffer_params.get_pass_offset(PASS_COMBINED,
-                                                                        PassMode::DENOISED);
+  const int pass_noisy = task.buffer_params.get_pass_offset(PASS_COMBINED, PassMode::NOISY);
+  const int pass_denoised = task.buffer_params.get_pass_offset(PASS_COMBINED, PassMode::DENOISED);
   const int pass_sample_count = task.buffer_params.get_pass_offset(PASS_SAMPLE_COUNT);
 
   void *args[] = {const_cast<device_ptr *>(&d_input_rgb),
@@ -630,7 +630,8 @@ bool OptiXDevice::denoise_filter_convert_from_rgb(OptiXDeviceQueue *queue,
                   const_cast<int *>(&task.buffer_params.stride),
                   const_cast<int *>(&task.buffer_params.pass_stride),
                   const_cast<int *>(&task.num_samples),
-                  const_cast<int *>(&pass_combined_denoised),
+                  const_cast<int *>(&pass_noisy),
+                  const_cast<int *>(&pass_denoised),
                   const_cast<int *>(&pass_sample_count)};
 
   return queue->enqueue(DEVICE_KERNEL_FILTER_CONVERT_FROM_RGB, work_size, args);
diff --git a/intern/cycles/kernel/device/cuda/kernel.cu b/intern/cycles/kernel/device/cuda/kernel.cu
index 13f89c7d9c1..3cedaa3623a 100644
--- a/intern/cycles/kernel/device/cuda/kernel.cu
+++ b/intern/cycles/kernel/device/cuda/kernel.cu
@@ -681,6 +681,7 @@ extern "C" __global__ void CUDA_LAUNCH_BOUNDS(CUDA_KERNEL_BLOCK_NUM_THREADS,
                                         int stride,
                                         int pass_stride,
                                         int num_samples,
+                                        int pass_noisy,
                                         int pass_denoised,
                                         int pass_sample_count)
 {
@@ -705,11 +706,13 @@ extern "C" __global__ void CUDA_LAUNCH_BOUNDS(CUDA_KERNEL_BLOCK_NUM_THREADS,
     pixel_scale = __float_as_uint(buffer[pass_sample_count]);
   }
 
+  const float *noisy_pixel = buffer + pass_noisy;
   float *denoised_pixel = buffer + pass_denoised;
 
   denoised_pixel[0] = in[0] * pixel_scale;
   denoised_pixel[1] = in[1] * pixel_scale;
   denoised_pixel[2] = in[2] * pixel_scale;
+  denoised_pixel[3] = noisy_pixel[3];
 }
 
 #endif



More information about the Bf-blender-cvs mailing list