gameknife / gkNextRenderer

A Realtime PathTracer
49 stars 4 forks source link

How did you make you renderer fast? #112

Open TomClabault opened 16 hours ago

TomClabault commented 16 hours ago

Sounds like a naive question but after trying your renderer, I noticed that it is noticeably faster than mine (even though mine isn't using Vulkan).

Some things could be improved in my renderer (data compaction/packing and wavefront path tracing mostly) but I don't think that this is going to make my renderer as fast as yours.

So my question is: what are things that thought about when writing your renderer that make it fast? Any optimizations that you made in particular?

What's the secret? :)

gameknife commented 8 hours ago

The HIPRT/Orochi maybe a common GPU acceleration library, it can use GPU hardware, but the common "CUDA" cores. My renderer is based on the game-specific raytracing featrues, like the hardware acceleration structure, https://www.khronos.org/blog/ray-tracing-in-vulkan#Acceleration_Structures

Maybe this is the key different?

TomClabault commented 6 hours ago

So this could explain it on NVIDIA hardware but on AMD (and I have an RDNA3 GPU), HIPRT is capable of using hardware accelerated ray tracing.

Did you not make any particular optimization, data packing, anything?

TomClabault commented 6 hours ago

Also it seems that you do not have next event estimation in your renderer do you? I followed the code in RTCommon.glsl::GetRayColor() but I could not find mentions of NEE.

You only take lights into account when the ray directly hits a light correct?

This would explain a good part of the performance difference.