Implementation of Peter Shirley's Ray Tracing In One Weekend book using Vulkan and NVIDIA's RTX extension.

Overview

Ray Tracing In Vulkan

My implementation of Peter Shirley's Ray Tracing in One Weekend books using Vulkan and NVIDIA's RTX extension (formerly VK_NV_ray_tracing, now ported to Khronos cross platform VK_KHR_ray_tracing_pipeline extension). This allows most scenes to be rendered at interactive speed on appropriate hardware.

The real-time ray tracer can also load full geometry from OBJ files as well as render the procedural spheres from the book. An accumulation buffer is used to increase the sample count when the camera is not moving while keeping the frame rate interactive. I have added a UI built using Dear ImGui to allow changing the renderer parameters on the fly. Unlike projects such as Q2VKPT, there is no denoising filter. So the image will get noisy when moving the camera.

This personal project follows my own attempts at CPU ray tracing following Peter Shirley's books (see here and here if you are interested).

Gallery

Performance

Using a GeForce RTX 2080 Ti, the rendering speed is obscenely faster than using the CPU renderer. Obviously both implementations are still quite naive in some places, but I'm really impressed by the performance. The cover scene of the first book reaches ~140fps at 1280x720 using 8 rays per pixel and up to 16 bounces.

I suspect performance could be improved further. I have created each object in the scene as a separate instance in the top level acceleration structure, which is probably not the best for data locality. The same goes for displaying multiple Lucy statues, where I have naively duplicated the geometry rather than instancing it multiple times.

Benchmarking

Command line arguments can be used to control various aspects of the application. Use --help to see all modes and arguments. For example, to run the ray tracer in benchmark mode in 2560x1440 fullscreen for scene #1 with vsync off:

RayTracer.exe --benchmark --width 2560 --height 1440 --fullscreen --scene 1 --present-mode 0

To benchmark all the scenes, starting from scene #1:

RayTracer.exe --benchmark --width 2560 --height 1440 --fullscreen --scene 1 --next-scenes --present-mode 0

Here are my results with the command above on a few different computers.

RayTracer Release 6 (NVIDIA drivers 461.40, AMD drivers 21.1.1)

Platform Scene 1 Scene 2 Scene 3 Scene 4 Scene 5
Radeon RX 6900 XT 52.9 fps 52.2 fps 24.0 fps 41.0 fps 14.1 fps
GeForce RTX 3090 FE 42.8 fps 43.6 fps 38.9 fps 79.5 fps 40.0 fps
GeForce RTX 2080 Ti FE 37.7 fps 38.2 fps 24.2 fps 58.7 fps 21.4 fps

RayTracer Release 4 (NVIDIA drivers 436.48)

Platform Scene 1 Scene 2 Scene 3 Scene 4 Scene 5
GeForce RTX 2080 Ti FE 36.1 fps 35.7 fps 19.9 fps 54.9 fps 15.1 fps
GeForce RTX 2070 19.9 fps 19.9 fps 11.7 fps 30.4 fps 9.5 fps
GeForce GTX 1080 Ti FE 3.4 fps 3.4 fps 1.9 fps 3.8 fps 1.3 fps

Building

First you will need to install the Vulkan SDK. For Windows, LunarG provides installers. For Ubuntu LTS, they have native packages available. For other Linux distributions, they only provide tarballs. The rest of the third party dependencies can be built using Microsoft's vcpkg as provided by the scripts below.

If in doubt, please check the GitHub Actions continuous integration configurations for more details.

Windows (Visual Studio 2022 x64 solution) Windows CI Status

vcpkg_windows.bat
build_windows.bat

Linux (GCC 9+ Makefile) Linux CI Status

For example, on Ubuntu 20.04 (same as the CI pipeline, build steps on other distributions may vary):

sudo apt-get install curl unzip tar libxi-dev libxinerama-dev libxcursor-dev xorg-dev
./vcpkg_linux.sh
./build_linux.sh

Random Thoughts

  • I suspect the RTX 2000 series RT cores to implement ray-AABB collision detection using reduced float precision. Early in the development, when trying to get the sphere procedural rendering to work, reporting an intersection every time the rint shader is invoked allowed to visualise the AABB of each procedural instance. The rendering of the bounding volume had many artifacts around the boxes edges, typical of reduced precision.

  • When I upgraded the drivers to 430.86, performance significantly improved (+50%). This was around the same time Quake II RTX was released by NVIDIA. Coincidence?

  • When looking at the benchmark results of an RTX 2070 and an RTX 2080 Ti, the performance differences mostly in line with the number of CUDA cores and RT cores rather than being influences by other metrics. Although I do not know at this point whether the CUDA cores or the RT cores are the main bottleneck.

  • UPDATE 2020-01-07: the RTX 30xx results seem to imply that performance is mostly dictated by the number of RT cores. Compared to Turing, Ampere achieves 2x RT performance only when using ray-triangle intersection (as expected as per NVIDIA Ampere whitepaper), otherwise performance per RT core is the same. This leads to situations such as an RTX 2080 Ti being faster than an RTX 3080 when using procedural geometry.

  • UPDATE 2020-01-31: the 6900 XT results show the RDNA 2 architecture performing surprisingly well in procedural geometry scenes. Is it because the RDNA2 BVH-ray intersections are done using the generic computing units (and there are plenty of those), whereas Ampere is bottlenecked by its small number of RT cores in these simple scenes? Or is RDNA2 Infinity Cache really shining here? The triangle-based geometry scenes highlight how efficient Ampere RT cores are in handling triangle-ray intersections; unsurprisingly as these scenes are more representative of what video games would do in practice.

References

Initial Implementation (NVIDIA vendor specific extension)

Vulkan Khronos Ray Tracing (cross platform extension)

Comments
  • Black screen on GeForce 1000 series (Linux)

    Black screen on GeForce 1000 series (Linux)

    Hi, recently I am learning raytracing, and find your awesome git, I think your git is what I need for raytracing learning, but when I try to build it on my ubuntu system, TITAN X (Pascal), I find the screen is black , nothing rendered, and I can see the frame is around 12 fps, which I think is calculating, and I turn off the enable ray tracing check box, it's still show nothing, I already build nvidia lessons about vulkan and raytracing example, and pretty sure it can run on my card, so is there any hint that I can check? Thank you.

    -Best Wy

    opened by ohouha 13
  • Building Fails on Linux (backtrace.h is missing)

    Building Fails on Linux (backtrace.h is missing)

    Trying to build this package following the instructions in the README on Arch Linux fails during build_linux.sh because of a bunch of CMake errors, all having to do with backtrace.h: No such file or directory. Seems a couple dozen of the vcpkg.linux files are trying to include backtrace.h but there's no backtrace.h to be found. I have all the dependencies including the Vulkan SDK.

    In file included from /home/matt/dev/raytracing/build/vcpkg.linux/installed/x64-linux/include/boost/stacktrace/detail/frame_unwind.ipp:25,
                     from /home/matt/dev/raytracing/build/vcpkg.linux/installed/x64-linux/include/boost/stacktrace/frame.hpp:61,
                     from /home/matt/dev/raytracing/build/vcpkg.linux/installed/x64-linux/include/boost/stacktrace.hpp:15,
                     from /home/matt/dev/raytracing/src/./Utilities/Exception.hpp:7,
                     from /home/matt/dev/raytracing/src/Vulkan/DebugUtils.cpp:2:
    /home/matt/dev/raytracing/build/vcpkg.linux/installed/x64-linux/include/boost/stacktrace/detail/libbacktrace_impls.hpp:23:13: fatal error: backtrace.h: No such file or directory
       23 | #   include <backtrace.h>
          |             ^~~~~~~~~~~~~
    compilation terminated.
    In file included from /home/matt/dev/raytracing/build/vcpkg.linux/installed/x64-linux/include/boost/stacktrace/detail/frame_unwind.ipp:25,
                     from /home/matt/dev/raytracing/build/vcpkg.linux/installed/x64-linux/include/boost/stacktrace/frame.hpp:61,
                     from /home/matt/dev/raytracing/build/vcpkg.linux/installed/x64-linux/include/boost/stacktrace.hpp:15,
                     from /home/matt/dev/raytracing/src/./Utilities/Exception.hpp:7,
                     from /home/matt/dev/raytracing/src/Assets/Texture.cpp:3:
    /home/matt/dev/raytracing/build/vcpkg.linux/installed/x64-linux/include/boost/stacktrace/detail/libbacktrace_impls.hpp:23:13: fatal error: backtrace.h: No such file or directory
       23 | #   include <backtrace.h>
          |             ^~~~~~~~~~~~~
    compilation terminated.
    [ 59%] Building CXX object src/CMakeFiles/RayTracer.dir/Vulkan/FrameBuffer.cpp.o
    [ 60%] Building CXX object src/CMakeFiles/RayTracer.dir/Vulkan/GraphicsPipeline.cpp.o
    make[2]: *** [src/CMakeFiles/RayTracer.dir/build.make:121: src/CMakeFiles/RayTracer.dir/Assets/Texture.cpp.o] Error 1
    make[2]: *** Waiting for unfinished jobs....
    make[2]: *** [src/CMakeFiles/RayTracer.dir/build.make:264: src/CMakeFiles/RayTracer.dir/Vulkan/DebugUtils.cpp.o] Error 1
    [ 62%] Building CXX object src/CMakeFiles/RayTracer.dir/Vulkan/Image.cpp.o
    In file included from /home/matt/dev/raytracing/build/vcpkg.linux/installed/x64-linux/include/boost/stacktrace/detail/frame_unwind.ipp:25,
                     from /home/matt/dev/raytracing/build/vcpkg.linux/installed/x64-linux/include/boost/stacktrace/frame.hpp:61,
                     from /home/matt/dev/raytracing/build/vcpkg.linux/installed/x64-linux/include/boost/stacktrace.hpp:15,
                     from /home/matt/dev/raytracing/src/./Utilities/Exception.hpp:7,
                     from /home/matt/dev/raytracing/src/Assets/Scene.cpp:9:
    /home/matt/dev/raytracing/build/vcpkg.linux/installed/x64-linux/include/boost/stacktrace/detail/libbacktrace_impls.hpp:23:13: fatal error: backtrace.h: No such file or directory
       23 | #   include <backtrace.h>
          |             ^~~~~~~~~~~~~
    compilation terminated.
    make[2]: *** [src/CMakeFiles/RayTracer.dir/build.make:108: src/CMakeFiles/RayTracer.dir/Assets/Scene.cpp.o] Error 1
    In file included from /home/matt/dev/raytracing/build/vcpkg.linux/installed/x64-linux/include/boost/stacktrace/detail/frame_unwind.ipp:25,
                     from /home/matt/dev/raytracing/build/vcpkg.linux/installed/x64-linux/include/boost/stacktrace/frame.hpp:61,
                     from /home/matt/dev/raytracing/build/vcpkg.linux/installed/x64-linux/include/boost/stacktrace.hpp:15,
                     from /home/matt/dev/raytracing/src/./Utilities/Exception.hpp:7,
                     from /home/matt/dev/raytracing/src/Assets/Model.cpp:5:
    /home/matt/dev/raytracing/build/vcpkg.linux/installed/x64-linux/include/boost/stacktrace/detail/libbacktrace_impls.hpp:23:13: fatal error: backtrace.h: No such file or directory
       23 | #   include <backtrace.h>
          |             ^~~~~~~~~~~~~
    compilation terminated.
    make[2]: *** [src/CMakeFiles/RayTracer.dir/build.make:95: src/CMakeFiles/RayTracer.dir/Assets/Model.cpp.o] Error 1
    In file included from /home/matt/dev/raytracing/build/vcpkg.linux/installed/x64-linux/include/boost/stacktrace/detail/frame_unwind.ipp:25,
                     from /home/matt/dev/raytracing/build/vcpkg.linux/installed/x64-linux/include/boost/stacktrace/frame.hpp:61,
                     from /home/matt/dev/raytracing/build/vcpkg.linux/installed/x64-linux/include/boost/stacktrace.hpp:15,
                     from /home/matt/dev/raytracing/src/./Utilities/Exception.hpp:7,
                     from /home/matt/dev/raytracing/src/Vulkan/DepthBuffer.cpp:7:
    /home/matt/dev/raytracing/build/vcpkg.linux/installed/x64-linux/include/boost/stacktrace/detail/libbacktrace_impls.hpp:23:13: fatal error: backtrace.h: No such file or directory
       23 | #   include <backtrace.h>
          |             ^~~~~~~~~~~~~
    compilation terminated.
    In file included from /home/matt/dev/raytracing/build/vcpkg.linux/installed/x64-linux/include/boost/stacktrace/detail/frame_unwind.ipp:25,
                     from /home/matt/dev/raytracing/build/vcpkg.linux/installed/x64-linux/include/boost/stacktrace/frame.hpp:61,
                     from /home/matt/dev/raytracing/build/vcpkg.linux/installed/x64-linux/include/boost/stacktrace.hpp:15,
                     from /home/matt/dev/raytracing/src/./Utilities/Exception.hpp:7,
                     from /home/matt/dev/raytracing/src/Vulkan/DebugUtilsMessenger.cpp:4:
    /home/matt/dev/raytracing/build/vcpkg.linux/installed/x64-linux/include/boost/stacktrace/detail/libbacktrace_impls.hpp:23:13: fatal error: backtrace.h: No such file or directory
       23 | #   include <backtrace.h>
          |             ^~~~~~~~~~~~~
    compilation terminated.
    make[2]: *** [src/CMakeFiles/RayTracer.dir/build.make:290: src/CMakeFiles/RayTracer.dir/Vulkan/DepthBuffer.cpp.o] Error 1
    make[2]: *** [src/CMakeFiles/RayTracer.dir/build.make:277: src/CMakeFiles/RayTracer.dir/Vulkan/DebugUtilsMessenger.cpp.o] Error 1
    In file included from /home/matt/dev/raytracing/build/vcpkg.linux/installed/x64-linux/include/boost/stacktrace/detail/frame_unwind.ipp:25,
                     from /home/matt/dev/raytracing/build/vcpkg.linux/installed/x64-linux/include/boost/stacktrace/frame.hpp:61,
                     from /home/matt/dev/raytracing/build/vcpkg.linux/installed/x64-linux/include/boost/stacktrace.hpp:15,
                     from /home/matt/dev/raytracing/src/./Utilities/Exception.hpp:7,
                     from /home/matt/dev/raytracing/src/Vulkan/DescriptorSets.cpp:5:
    /home/matt/dev/raytracing/build/vcpkg.linux/installed/x64-linux/include/boost/stacktrace/detail/libbacktrace_impls.hpp:23:13: fatal error: backtrace.h: No such file or directory
       23 | #   include <backtrace.h>
          |             ^~~~~~~~~~~~~
    compilation terminated.
    make[2]: *** [src/CMakeFiles/RayTracer.dir/build.make:342: src/CMakeFiles/RayTracer.dir/Vulkan/DescriptorSets.cpp.o] Error 1
    In file included from /home/matt/dev/raytracing/build/vcpkg.linux/installed/x64-linux/include/boost/stacktrace/detail/frame_unwind.ipp:25,
                     from /home/matt/dev/raytracing/build/vcpkg.linux/installed/x64-linux/include/boost/stacktrace/frame.hpp:61,
                     from /home/matt/dev/raytracing/build/vcpkg.linux/installed/x64-linux/include/boost/stacktrace.hpp:15,
                     from /home/matt/dev/raytracing/src/./Utilities/Exception.hpp:7,
                     from /home/matt/dev/raytracing/src/Vulkan/Device.cpp:5:
    /home/matt/dev/raytracing/build/vcpkg.linux/installed/x64-linux/include/boost/stacktrace/detail/libbacktrace_impls.hpp:23:13: fatal error: backtrace.h: No such file or directory
       23 | #   include <backtrace.h>
          |             ^~~~~~~~~~~~~
    compilation terminated.
    make[2]: *** [src/CMakeFiles/RayTracer.dir/build.make:355: src/CMakeFiles/RayTracer.dir/Vulkan/Device.cpp.o] Error 1
    In file included from /home/matt/dev/raytracing/build/vcpkg.linux/installed/x64-linux/include/boost/stacktrace/detail/frame_unwind.ipp:25,
                     from /home/matt/dev/raytracing/build/vcpkg.linux/installed/x64-linux/include/boost/stacktrace/frame.hpp:61,
                     from /home/matt/dev/raytracing/build/vcpkg.linux/installed/x64-linux/include/boost/stacktrace.hpp:15,
                     from /home/matt/dev/raytracing/src/./Utilities/Exception.hpp:7,
                     from /home/matt/dev/raytracing/src/Vulkan/Application.cpp:21:
    /home/matt/dev/raytracing/build/vcpkg.linux/installed/x64-linux/include/boost/stacktrace/detail/libbacktrace_impls.hpp:23:13: fatal error: backtrace.h: No such file or directory
       23 | #   include <backtrace.h>
          |             ^~~~~~~~~~~~~
    compilation terminated.
    make[2]: *** [src/CMakeFiles/RayTracer.dir/build.make:212: src/CMakeFiles/RayTracer.dir/Vulkan/Application.cpp.o] Error 1
    In file included from /home/matt/dev/raytracing/build/vcpkg.linux/installed/x64-linux/include/boost/stacktrace/detail/frame_unwind.ipp:25,
                     from /home/matt/dev/raytracing/build/vcpkg.linux/installed/x64-linux/include/boost/stacktrace/frame.hpp:61,
                     from /home/matt/dev/raytracing/build/vcpkg.linux/installed/x64-linux/include/boost/stacktrace.hpp:15,
                     from /home/matt/dev/raytracing/src/./Utilities/Exception.hpp:7,
                     from /home/matt/dev/raytracing/src/Vulkan/DescriptorSetManager.cpp:6:
    /home/matt/dev/raytracing/build/vcpkg.linux/installed/x64-linux/include/boost/stacktrace/detail/libbacktrace_impls.hpp:23:13: fatal error: backtrace.h: No such file or directory
       23 | #   include <backtrace.h>
          |             ^~~~~~~~~~~~~
    compilation terminated.
    make[2]: *** [src/CMakeFiles/RayTracer.dir/build.make:329: src/CMakeFiles/RayTracer.dir/Vulkan/DescriptorSetManager.cpp.o] Error 1
    In file included from /home/matt/dev/raytracing/build/vcpkg.linux/installed/x64-linux/include/boost/stacktrace/detail/frame_unwind.ipp:25,
                     from /home/matt/dev/raytracing/build/vcpkg.linux/installed/x64-linux/include/boost/stacktrace/frame.hpp:61,
                     from /home/matt/dev/raytracing/build/vcpkg.linux/installed/x64-linux/include/boost/stacktrace.hpp:15,
                     from /home/matt/dev/raytracing/src/./Utilities/Exception.hpp:7,
                     from /home/matt/dev/raytracing/src/Vulkan/DeviceMemory.cpp:3:
    /home/matt/dev/raytracing/build/vcpkg.linux/installed/x64-linux/include/boost/stacktrace/detail/libbacktrace_impls.hpp:23:13: fatal error: backtrace.h: No such file or directory
       23 | #   include <backtrace.h>
          |             ^~~~~~~~~~~~~
    compilation terminated.
    make[2]: *** [src/CMakeFiles/RayTracer.dir/build.make:368: src/CMakeFiles/RayTracer.dir/Vulkan/DeviceMemory.cpp.o] Error 1
    In file included from /home/matt/dev/raytracing/build/vcpkg.linux/installed/x64-linux/include/boost/stacktrace/detail/frame_unwind.ipp:25,
                     from /home/matt/dev/raytracing/build/vcpkg.linux/installed/x64-linux/include/boost/stacktrace/frame.hpp:61,
                     from /home/matt/dev/raytracing/build/vcpkg.linux/installed/x64-linux/include/boost/stacktrace.hpp:15,
                     from /home/matt/dev/raytracing/src/./Utilities/Exception.hpp:7,
                     from /home/matt/dev/raytracing/src/Vulkan/Image.cpp:6:
    /home/matt/dev/raytracing/build/vcpkg.linux/installed/x64-linux/include/boost/stacktrace/detail/libbacktrace_impls.hpp:23:13: fatal error: backtrace.h: No such file or directory
       23 | #   include <backtrace.h>
          |             ^~~~~~~~~~~~~
    compilation terminated.
    make[2]: *** [src/CMakeFiles/RayTracer.dir/build.make:420: src/CMakeFiles/RayTracer.dir/Vulkan/Image.cpp.o] Error 1
    make[1]: *** [CMakeFiles/Makefile2:161: src/CMakeFiles/RayTracer.dir/all] Error 2
    make: *** [Makefile:103: all] Error 2
    

    I'm happy to provide any information you might need to get this working. Vulkan SDK version is 1.2.162.1, GCC 10.2.0.

    opened by gardotd426 6
  • Add a denoiser

    Add a denoiser

    Please add some kind of a denoiser with at least on/off toggle support.

    This way we could estimate RDNA2 ray tracing performance impact for procedural geometry scenes where denoiser should consume some of the compute units while Turing/Ampere could rely more on tensor cores.

    Thank you!

    opened by the-spyke 6
  • failed to enumerate when trying to execute on Manjaro (Linux)

    failed to enumerate when trying to execute on Manjaro (Linux)

    After finally building it I can't execute it. I cloned the git and installed glslang and libbacktrace-git to build it.

    > ./RayTracer --benchmark --width 2560 --height 1440 --fullscreen --scene 1 --next-scenes --present-mode 0 
    FATAL: failed to enumerate (ERROR_INITIALIZATION_FAILED)
    
     0# void Throw<std::runtime_error>(std::runtime_error const&) in ./RayTracer
     1# Vulkan::Check(VkResult, char const*) [clone .cold] in ./RayTracer
     2# Vulkan::Instance::GetVulkanPhysicalDevices() in ./RayTracer
     3# Vulkan::Instance::Instance(Vulkan::Window const&, std::vector<char const*, std::allocator<char const*> > const&, unsigned int) in ./RayTracer
     4# Vulkan::Application::Application(Vulkan::WindowConfig const&, VkPresentModeKHR, bool) in ./RayTracer
     5# Vulkan::RayTracing::Application::Application(Vulkan::WindowConfig const&, VkPresentModeKHR, bool) in ./RayTracer
     6# RayTracer::RayTracer(UserSettings const&, Vulkan::WindowConfig const&, VkPresentModeKHR) in ./RayTracer
     7# main in ./RayTracer
     8# __libc_start_main in /usr/lib/libc.so.6
     9# _start in ./RayTracer
    
    

    I am having a gtx 1060 6gb with Nvidia-driver 460.32.03

    opened by Gladox114 5
  • Build Problem

    Build Problem

    Followed the prescribed build method for Windows:

    vcpkg_windows.bat build_windows.bat No .sln file for the solution produced. What is the correct and complete way to build this?

    opened by kyamant 4
  • Unable to compile

    Unable to compile "build_linux.sh", fatal error (backtrace.h is missing)

    /home/lukasi/Dokumente/RayTracingInVulkan-master/build/vcpkg.linux/installed/x64-linux/include/boost/stacktrace/detail/libbacktrace_impls.hpp:23:13: fatal error: backtrace.h: No such file or directory 23 | # include <backtrace.h> | ^~~~~~~~~~~~~ compilation terminated.

    opened by bioblatt 4
  • Failed to launch when Vulkan 1.0 GPU present

    Failed to launch when Vulkan 1.0 GPU present

    Vulkan SDK Header Version: 224
    
    Vulkan Instance Extensions:
    - VK_KHR_surface (0.0.25)
    - VK_KHR_win32_surface (0.0.6)
    - VK_KHR_external_memory_capabilities (0.0.1)
    - VK_KHR_external_semaphore_capabilities (0.0.1)
    - VK_KHR_external_fence_capabilities (0.0.1)
    - VK_KHR_get_physical_device_properties2 (0.0.1)
    - VK_KHR_get_surface_capabilities2 (0.0.1)
    - VK_KHR_device_group_creation (0.0.1)
    - VK_KHR_surface_protected_capabilities (0.0.1)
    - VK_EXT_debug_report (0.0.10)
    - VK_EXT_debug_utils (0.0.2)
    - VK_EXT_swapchain_colorspace (0.0.4)
    - VK_NV_external_memory_capabilities (0.0.1)
    
    Vulkan Instance Layers:
    - VK_LAYER_NV_optimus (1.3.205) : NVIDIA Optimus layer
    - VK_LAYER_LUNARG_api_dump (1.3.224) : LunarG API dump layer
    - VK_LAYER_LUNARG_gfxreconstruct (1.3.224) : GFXReconstruct Capture Layer Version 0.9.15
    - VK_LAYER_KHRONOS_synchronization2 (1.3.224) : Khronos Synchronization2 layer
    - VK_LAYER_KHRONOS_validation (1.3.224) : Khronos Validation Layer
    - VK_LAYER_LUNARG_monitor (1.3.224) : Execution Monitoring Layer
    - VK_LAYER_LUNARG_screenshot (1.3.224) : LunarG image capture layer
    - VK_LAYER_KHRONOS_profiles (1.3.224) : Khronos Profiles layer
    
    Vulkan Devices:
    - [6918] NVIDIA 'NVIDIA GeForce GTX 1080 Ti' (Discrete GPU: vulkan 1.3.205, driver NVIDIA 517.40 - 517.40.0)
    ERROR: VALIDATION: Validation Error: [ UNASSIGNED-API-Version-Violation ] Object 0: handle = 0x1cd6e0a7b80, type = VK_OBJECT_TYPE_INSTANCE; | MessageID = 0xc495fcb4 | Attempted to call vkGetPhysicalDeviceProperties2() with an effective API version of 1.0.66 (0x00400042), which is the minimum of version requested in pApplicationInfo (1.2.0 (0x00402000)) and supported by this physical device (1.0.66 (0x00400042)), but this API was not promoted until version 1.1.0 (0x00401000).
    
      Objects (1):
      - Object[0]: Type: INSTANCE, Handle: 000001CD6E0A7B80, Name: ''
    
    opened by pawchen 3
  • Does not start,

    Does not start, "found no matching transfer queue"

    $ export RADV_PERFTEST=rt
    $ ./RayTracer
    
    Vulkan SDK Header Version: 204
    
    Vulkan Instance Extensions: 
    - VK_KHR_device_group_creation (0.0.1)
    - VK_KHR_display (0.0.23)
    - VK_KHR_external_fence_capabilities (0.0.1)
    - VK_KHR_external_memory_capabilities (0.0.1)
    - VK_KHR_external_semaphore_capabilities (0.0.1)
    - VK_KHR_get_display_properties2 (0.0.1)
    - VK_KHR_get_physical_device_properties2 (0.0.2)
    - VK_KHR_get_surface_capabilities2 (0.0.1)
    - VK_KHR_surface (0.0.25)
    - VK_KHR_surface_protected_capabilities (0.0.1)
    - VK_KHR_wayland_surface (0.0.6)
    - VK_KHR_xcb_surface (0.0.6)
    - VK_KHR_xlib_surface (0.0.6)
    - VK_EXT_acquire_drm_display (0.0.1)
    - VK_EXT_acquire_xlib_display (0.0.1)
    - VK_EXT_debug_report (0.0.10)
    - VK_EXT_direct_mode_display (0.0.1)
    - VK_EXT_display_surface_counter (0.0.1)
    - VK_EXT_debug_utils (0.0.2)
    
    Vulkan Instance Layers: 
    - VK_LAYER_MESA_device_select (1.2.73) : Linux device selection layer
    
    Vulkan Devices: 
    - [29631] AMD 'AMD RADV SIENNA_CICHLID' (Discrete GPU: vulkan 1.3.204, driver radv Mesa 22.0.1 - 22.0.1)
    - [0] UnknownVendor 'llvmpipe (LLVM 13.0.1, 256 bits)' (CPU: vulkan 1.2.204, driver llvmpipe Mesa 22.0.1 (LLVM 13.0.1) - 0.0.1)
    
    Setting Device [29631]:
    FATAL: found no matching transfer queue
    
     0# 0x000000000040D282 in ./RayTracer
     1# 0x000000000040E46C in ./RayTracer
     2# 0x000000000044DA1A in ./RayTracer
     3# 0x0000000000446322 in ./RayTracer
     4# 0x00000000004588C9 in ./RayTracer
     5# 0x00000000004669E1 in ./RayTracer
     6# 0x000000000044726A in ./RayTracer
     7# 0x0000000000418497 in ./RayTracer
     8# 0x00007FAD6A76D590 in /lib64/libc.so.6
     9# __libc_start_main in /lib64/libc.so.6
    10# 0x0000000000418FC5 in ./RayTracer
    
    opened by spikhoff 3
  • Performance improvement: Change Ray dispatch

    Performance improvement: Change Ray dispatch

    This change improves rendering performance on an RX 6800 by 3-5%. It changes the raytracing dispatches to only collect a single sample per ray generation shader invocation. This reduces the execution time of every wavefront and increases the amount of threads. This is done by dispatching threads in the z-direction.

    | Dispatch | Samples | Scene 1 | Scene 2 | Scene 3 | Scene 4 | Scene 5 | |----------|---------|---------|---------|---------|---------|---------| | new | 2 | 145.41 | 143.44 | 68.91 | 113.5 | 42.5 | | old | 2 | 140.04 | 138.45 | 66 | 108.66 | 40.16 | | new | 4 | 74.72 | 73.85 | 35.08 | 58.05 | 21.49 | | old | 4 | 72.63 | 71.73 | 33.98 | 55.86 | 20.43 | | new | 8 | 38.01 | 37.48 | 17.71 | 29.35 | 10.79 | | old | 8 | 36.83 | 36.49 | 17.27 | 28.32 | 10.33 | | new | 16 | 19.19 | 18.9 | 8.9 | 14.79 | 5.42 | | old | 16 | 18.66 | 18.47 | 8.73 | 14.29 | 5.22 |

    Performance improvements with new dispatch compared to old.

    | Samples | Scene 1 | Scene 2 | Scene 3 | Scene 4 | Scene 5 | |---------|---------|---------|---------|---------|---------| | 2 | 103.83% | 103.60% | 104.41% | 104.45% | 105.83% | | 4 | 102.88% | 102.96% | 103.24% | 103.92% | 105.19% | | 8 | 103.19% | 102.71% | 102.57% | 103.63% | 104.50% | | 16 | 102.84% | 102.33% | 101.95% | 103.50% | 103.83% |

    opened by PMunkes 3
  • Do not force boost::stacktrace to use libbacktrace

    Do not force boost::stacktrace to use libbacktrace

    Since boost::stracktrace may utilize backtrace functionality already available in newer libc, do not unconditionally set BOOST_STACKTRACE_USE_BACKTRACE if FindBacktrace.cmake module actually confirms the availability of backtrace().

    opened by rplociennik 3
  • Didn't work on RTX 3080 and driver 461.40 (Windows 20H2)

    Didn't work on RTX 3080 and driver 461.40 (Windows 20H2)

    Hello. I tried to use this application and it finished with this error message after third benchmark:

    F:\Fabiano\Downloads\Compressed\RayTracingInVulkan.r6\bin>RayTracer.exe --benchmark --width 2560 --height 1440 --fullscreen --scene 1 --next-scenes --present-mode 0 Vulkan SDK Header Version: 162

    Vulkan Devices:

    • [8710] NVIDIA 'GeForce RTX 3080' (Discrete GPU: vulkan 1.2.155, driver NVIDIA 461.40 - 461.40.0)

    Setting Device [8710]:

    • loading '../assets/textures/white.png'... (1 x 1 x 3) 0.0001756s
    • built acceleration structures in 0.0121975s

    Swap Chain:

    • image count: 2
    • present mode: 0

    Benchmark: Start scene #1 'Ray Tracing In One Weekend' Benchmark: 33.2256 fps Benchmark: 33.2382 fps Benchmark: 33.4103 fps Benchmark: 33.6559 fps Benchmark: 33.6253 fps Benchmark: 33.6682 fps Benchmark: 33.599 fps Benchmark: 33.6263 fps Benchmark: 33.5912 fps Benchmark: 33.6179 fps Benchmark: 33.6377 fps

    • loading '../assets/textures/2k_mars.jpg'... (2048 x 1024 x 3) 0.0217313s
    • loading '../assets/textures/2k_moon.jpg'... (2048 x 1024 x 3) 0.0260922s
    • loading '../assets/textures/land_ocean_ice_cloud_2048.png'... (2048 x 1024 x 3) 0.0508782s
    • built acceleration structures in 0.0060612s

    Benchmark: Start scene #2 'Planets In One Weekend' Benchmark: 34.1146 fps Benchmark: 34.4023 fps Benchmark: 34.452 fps Benchmark: 34.7287 fps Benchmark: 34.7495 fps Benchmark: 34.6925 fps Benchmark: 34.7214 fps Benchmark: 34.7081 fps Benchmark: 34.7529 fps Benchmark: 34.6944 fps Benchmark: 34.7123 fps

    • loading '../assets/models/lucy.obj'... (673335 vertices, 224491 unique vertices, 1 materials) 0.9469s
    • loading '../assets/textures/white.png'... (1 x 1 x 3) 0.0002194s
    • built acceleration structures in 0.0131662s

    Benchmark: Start scene #3 'Lucy In One Weekend' Benchmark: 31.8791 fps Benchmark: 32.3293 fps Benchmark: 32.3589 fps Benchmark: 32.3509 fps Benchmark: 32.2871 fps Benchmark: 32.298 fps Benchmark: 32.3041 fps Benchmark: 32.3221 fps Benchmark: 32.3612 fps Benchmark: 32.3561 fps FATAL: failed to submit draw command buffer (ERROR_DEVICE_LOST)

    0# 0x00007FF6BFDC6C32 in RayTracer 1# 0x00007FF6BFDB559E in RayTracer 2# 0x00007FF6BFDF18A9 in RayTracer 3# 0x00007FF6BFE0F441 in RayTracer 4# 0x00007FF6BFDF25E5 in RayTracer 5# 0x00007FF6BFE0FB1F in RayTracer 6# 0x00007FF6BFDF9183 in RayTracer 7# 0x00007FF6BFF30404 in RayTracer 8# BaseThreadInitThunk in KERNEL32 9# RtlUserThreadStart in ntdll

    F:\Fabiano\Downloads\Compressed\RayTracingInVulkan.r6\bin>

    opened by Keikunbr 3
  • Benchmark results on RTX 4090 (1440p)

    Benchmark results on RTX 4090 (1440p)

    Vulkan Devices:
    - [9860] NVIDIA 'NVIDIA GeForce RTX 4090' (Discrete GPU: vulkan 1.3.224, driver NVIDIA 526.47 - 526.47.0)
    
    Benchmark: Start scene #1 'Ray Tracing In One Weekend'
    Benchmark: 119.199 fps
    Benchmark: 120.925 fps
    Benchmark: 121.187 fps
    Benchmark: 121.096 fps
    Benchmark: 120.987 fps
    Benchmark: 120.737 fps
    Benchmark: 121.068 fps
    Benchmark: 121.106 fps
    Benchmark: 121.055 fps
    Benchmark: 121.184 fps
    Benchmark: 121.162 fps
    
    Benchmark: Start scene #2 'Planets In One Weekend'
    Benchmark: 121.093 fps
    Benchmark: 123.184 fps
    Benchmark: 123.208 fps
    Benchmark: 123.386 fps
    Benchmark: 123.344 fps
    Benchmark: 123.083 fps
    Benchmark: 122.987 fps
    Benchmark: 123.078 fps
    Benchmark: 122.956 fps
    Benchmark: 123.088 fps
    Benchmark: 123.182 fps
    
    Benchmark: Start scene #3 'Lucy In One Weekend'
    Benchmark: 111.436 fps
    Benchmark: 112.293 fps
    Benchmark: 112.554 fps
    Benchmark: 112.479 fps
    Benchmark: 112.766 fps
    Benchmark: 112.907 fps
    Benchmark: 112.982 fps
    Benchmark: 112.678 fps
    Benchmark: 112.775 fps
    Benchmark: 112.455 fps
    Benchmark: 112.537 fps
    
    Benchmark: Start scene #4 'Cornell Box'
    Benchmark: 184.472 fps
    Benchmark: 190.338 fps
    Benchmark: 190.216 fps
    Benchmark: 190.471 fps
    Benchmark: 190.408 fps
    Benchmark: 190.327 fps
    Benchmark: 190.522 fps
    Benchmark: 190.621 fps
    
    Benchmark: Start scene #5 'Cornell Box & Lucy'
    Benchmark: 109.241 fps
    Benchmark: 110.57 fps
    Benchmark: 110.41 fps
    Benchmark: 110.357 fps
    Benchmark: 110.479 fps
    Benchmark: 110.368 fps
    Benchmark: 110.194 fps
    Benchmark: 110.743 fps
    Benchmark: 110.736 fps
    Benchmark: 110.731 fps
    Benchmark: 110.431 fps
    
    Benchmark Results 
    opened by RobertSpir 2
  • Can not compile on Ubuntu 22.04

    Can not compile on Ubuntu 22.04

    Can not compile, my hardware is AMD Radeon RX 6800 XT on Ubuntu 22.04 LTS using native amdgpu driver:

    $ gcc -v;
    ...
    gcc version 11.2.0 (Ubuntu 11.2.0-19ubuntu1)
    $ git clone https://github.com/GPSnoopy/RayTracingInVulkan; cd RayTracingInVulkan/;
    $ apt -y install curl unzip tar libxi-dev libxinerama-dev libxcursor-dev xorg-dev;
    $ ./vcpkg_linux.sh
    $ ./build_linux.sh
    ...
    CMake Warning at /usr/share/cmake-3.22/Modules/FindBoost.cmake:1369 (message):
      New Boost version may have incorrect or missing dependencies and imported
      targets
    Call Stack (most recent call first):
      /usr/share/cmake-3.22/Modules/FindBoost.cmake:1492 (_Boost_COMPONENT_DEPENDENCIES)
      /usr/share/cmake-3.22/Modules/FindBoost.cmake:2102 (_Boost_MISSING_DEPENDENCIES)
      build/vcpkg.linux/installed/x64-linux/share/boost/vcpkg-cmake-wrapper.cmake:11 (_find_package)
      build/vcpkg.linux/scripts/buildsystems/vcpkg.cmake:778 (include)
      CMakeLists.txt:50 (find_package)
    
    CMake Warning at /usr/share/cmake-3.22/Modules/FindBoost.cmake:1369 (message):
      New Boost version may have incorrect or missing dependencies and imported
      targets
    Call Stack (most recent call first):
      /usr/share/cmake-3.22/Modules/FindBoost.cmake:1492 (_Boost_COMPONENT_DEPENDENCIES)
      /usr/share/cmake-3.22/Modules/FindBoost.cmake:2102 (_Boost_MISSING_DEPENDENCIES)
      build/vcpkg.linux/installed/x64-linux/share/boost/vcpkg-cmake-wrapper.cmake:11 (_find_package)
      build/vcpkg.linux/scripts/buildsystems/vcpkg.cmake:778 (include)
      CMakeLists.txt:50 (find_package)
    
    CMake Error at /usr/share/cmake-3.22/Modules/FindPackageHandleStandardArgs.cmake:230 (message):
      Could NOT find Vulkan (missing: Vulkan_LIBRARY Vulkan_INCLUDE_DIR)
    Call Stack (most recent call first):
      /usr/share/cmake-3.22/Modules/FindPackageHandleStandardArgs.cmake:594 (_FPHSA_FAILURE_MESSAGE)
      /usr/share/cmake-3.22/Modules/FindVulkan.cmake:129 (find_package_handle_standard_args)
      build/vcpkg.linux/scripts/buildsystems/vcpkg.cmake:824 (_find_package)
      CMakeLists.txt:56 (find_package)
    
    -- Configuring incomplete, errors occurred!
    See also "/home/.../Descargas/RayTracingInVulkan/build/linux/CMakeFiles/CMakeOutput.log".
    

    Output log: CMakeOutput.log

    opened by yhojann-cl 3
  • Performance improvement: Introduce different default bounce numbers per scene

    Performance improvement: Introduce different default bounce numbers per scene

    This branch introduces variable bounce numbers for different scenes. In nearly all scenes the amount of bounces can be reduced to 8 (or even lower), without a noticeable visual impact. Scene 3 is the only one having a lower bound of 16 Bounces.

    This significantly improves performance (FPS measured on an RX 6800 (1440p, 8 Samples)):

    | Number of Bounces | Scene 1 | Scene 2 | Scene 3 | Scene 4 | Scene 5 | |---------------------------------------|---------|---------|---------|---------|---------| | 8/8/16/8/8 Bounces (Proposed Default) | 45.6 | 45.2 | 17.6 | 51.8 | 18.4 | | 16 Bounces (Current Default) | 38.2 | 37.7 | 17.6 | 29.2 | 10.5 |

    Images for Comparison: Scene 1: 8 Bounces: 1-8-Bounces 16 Bounces: 1-16-Bounces

    Scene 3 (The visual artifacts can be seen on the glass wings): 8 Bounces: 3-8-Bounces 12 Bounces: 3-12-Bounces 16 Bounces: 3-16-Bounces

    Scene 5; 8 Bounces: 5-8-Bounces 16 Bounces: 5-16-Bounces

    opened by PMunkes 1
  • Performance investigations on RDNA2 cards.

    Performance investigations on RDNA2 cards.

    I ran the Raytracer through AMDs GPU profiler to check out how it runs on my RX6800. (I will upload the results in a different issue.) It reported that the RT shader is limited by it's LDS usage of 4 KB to half occupancy, and that it uses 80 vector registers. Decreasing LDS usage to 3072B could increase the occupancy up to 12 parallel wavefronts (warps on nVidia Hardware) the maximum for 80 Vector registers. This should improve performance as less time is spent idle.

    Reducing LDS usage to 2048B would allow further optimizations to VGPR (Vector General Purpose Register) usage. Reducing VGPRS to 64 would allow full occupancy and presumably maximum performance.

    Edit: I believe LDS is AMDs name for Workgroup Memory.

    opened by PMunkes 23
Releases(r7)
  • r7(May 27, 2021)

    Fixed a rendering issue on AMD RDNA2, e.g. RX 6900 XT (Issue #36, PR #37) due to missing non-uniform hint.

    • Upgrade to latest Vulkan SDK (1.2.176).
    • Upgrade to vcpkg 2021.04.30.
    • Use ImGuiFreeType for better font rendering.
    • Pick a device that supports ray tracing in case there are multiple devices, e.g. integrated GPU (PR #49).
    • Recreate swapchain on VK_SUBOPTIMAL_KHR (PR #35).
    • Fix more validation errors.
    Source code(tar.gz)
    Source code(zip)
    RayTracingInVulkan.r7.7z(18.03 MB)
  • r6(Jan 31, 2021)

    Fixed several issues encountered when trying to run the ray tracer on AMD RX 6900 XT (thanks to @VoidPtr74 for assisting with both his time and hardware).

    • Upgraded ImGui Vulkan and GLFW backends with source from ImGui 1.80.
    • Fixed acceleration structure scratch memory offsets not always being properly aligned.
    • Fixed min swap chain images being 1, we expected at least 2.
    • Fixed incorrect LoadOp and initial layout for ImGui render pass (solved the graphic corruption on the 6900 XT, Issue #24).
    Source code(tar.gz)
    Source code(zip)
    RayTracingInVulkan.r6.7z(16.77 MB)
  • r5(Dec 15, 2020)

    • Ported the ray tracing pipeline to the cross platform extensions VK_KHR_acceleration_structure and VK_KHR_ray_tracing_pipeline specifications, thus replacing the NVIDIA specific VK_NV_ray_tracing extension (PR #7 and TODO).
    • Upgraded to latest Vulkan SDK (1.2.162).
    • Upgraded to vcpkg 2020.11-1.
    • Added better camera controls (PR #10).
    • Added profiling heatmap as per Profiling DXR Shaders with Timer Instrumentation (PR #12).
    • Added smooth normals fallback if the OBJ model does not contain any normals.
    • Added DebugUtils.SetObjectName() and make good use of it.
    • Replaced --vsync command line argument with --present-mode.
    • Fixed ShaderBindingTable alignment issues.
    • Fixed shader directory creation (PR #14 and #15).
    • Fixed visually incorrect ray paths that do not have any light contributions (PR #16).

    Make sure your drivers are recent enough to support the new extensions (successfully tested with NVIDIA driver 460.89 on Windows 10).

    Update 2021-01-10 Added prebuilt Windows binaries with debug symbols. If you encounter an error, this should give you a much more detailed stack trace.

    Source code(tar.gz)
    Source code(zip)
    RayTracingInVulkan.r5.7z(12.77 MB)
    RayTracingInVulkan.r5.WithDebugInfo.7z(16.77 MB)
  • r4(Oct 20, 2019)

    • Upgraded to latest Vulkan SDK (1.1.121).
    • Upgraded to vcpkg 2019.09.
    • Added texture support (the renderer is a bit slower now, as I do not specialise the shaders based on the scene).
    • Added new scene to show texture support.
    • Added support for benchmarking all scenes in one command line.
    • Added framebuffer size to statistic UI (it does not always match what you requested).
    • Fixed light scattering through opaque back faces.
    Source code(tar.gz)
    Source code(zip)
    RayTracingInVulkan.r4.7z(12.76 MB)
  • r3(Jul 7, 2019)

    • Upgraded to GLFW 3.3.
    • Upgraded to ImgGUI 1.70.
    • Upgraded to latest Vulkan SDK (1.1.108)
    • Fixed High DPI support (would cause incorrect resolution scaling under certain conditions).
    • Fixed NVIDIA driver version reporting.

    (Note: using NVIDIA drivers 430.86 seems to substantially improve performance compared to older versions)

    Source code(tar.gz)
    Source code(zip)
    RayTracingInVulkan.r3.7z(7.60 MB)
  • r2(Apr 11, 2019)

  • r1(Mar 16, 2019)

Owner
Tanguy Fautre
Tanguy Fautre
Getting Started with RTX Ray Tracing

Getting Started with RTX Ray Tracing This directory contains Chris Wyman's shader tutorials from the GDC 2019 and SIGGRAPH 2018 courses "Introduction

NVIDIA GameWorks 598 Nov 19, 2022
A toy renderer written in C using Vulkan to perform real-time ray tracing research.

This is a toy renderer written in C using Vulkan. It is intentionally minimalist. It has been developed and used for the papers "BRDF Importance Sampl

Christoph Peters 284 Nov 30, 2022
This repository accompanies Ray Tracing Gems II: Next Generation Rendering with DXR, Vulkan, and OptiX

Apress Source Code This repository accompanies Ray Tracing Gems II: Next Generation Rendering with DXR, Vulkan, and OptiX by Adam Marrs, Peter Shirley

Apress 679 Nov 24, 2022
Implementation of light baking system for ray tracing based on Activision's UberBake

Vulkan Light Bakery MSU Graphics Group Student's Diploma Project Treefonov Andrey [GitHub] [LinkedIn] EARLY STAGES OF DEVELOPMENT Project Goal The goa

Andrei Treefonov 5 Aug 26, 2022
Source Code for "Ray Tracing Gems: High-Quality and Real-Time Rendering with DXR and Other APIs" by Eric Haines and Tomas Akenine-Möller

Apress Source Code This repository accompanies Ray Tracing Gems: High-Quality and Real-Time Rendering with DXR and Other APIs by Eric Haines and Tomas

Apress 851 Nov 21, 2022
A path tracer based on hardware ray tracing

GoldenSun GoldenSun is a GPU path tracer. It uses hardware ray tracing APIs to do the tracing. As an experimental project, there is no release plan, n

Minmin Gong 20 Feb 27, 2022
ReferencePT - Supplemental code accompanying Ray Tracing Gems II, Chapter 14: The Reference Path Tracer

The Reference Path Tracer Code sample This is a supplemental code accompanying Ray Tracing Gems II, Chapter 14: The Reference Path Tracer. Code is bas

Jakub Boksansky 152 Nov 21, 2022
Software ray tracer written from scratch in C that can run on CPU or GPU with emphasis on ease of use and trivial setup

A minimalist and platform-agnostic interactive/real-time raytracer. Strong emphasis on simplicity, ease of use and almost no setup to get started with

Arnon Marcus 46 Oct 5, 2022
Minimal pathtracer using Vulkan RayTracing

Single File Vulkan Pathtracing Minimal pathtracer using Vulkan RayTracing Environment Vulkan SDK 1.2.162.0 GPU / Driver that support Vulkan Ray Tracin

Yuki Nishidate 28 Nov 26, 2022
Axel Gneiting 1.4k Dec 1, 2022
simple fdtd using vulkan, omp or single thread

fdtd simple fdtd using vulkan, omp or single thread example how to build first clone the repo with: git clone https://github.com/nikisalli/fdtd.git up

Nik 5 Nov 12, 2022
A multi-platform library for OpenGL, OpenGL ES, Vulkan, window and input

GLFW Introduction GLFW is an Open Source, multi-platform library for OpenGL, OpenGL ES and Vulkan application development. It provides a simple, platf

GLFW 9.9k Nov 30, 2022
Low Level Graphics Library (LLGL) is a thin abstraction layer for the modern graphics APIs OpenGL, Direct3D, Vulkan, and Metal

Low Level Graphics Library (LLGL) Documentation NOTE: This repository receives bug fixes only, but no major updates. Pull requests may still be accept

Lukas Hermanns 1.5k Nov 28, 2022
This repo will sort of document my story of learning vulkan with VulkanSDK and cl (msvc) on windows.

Learning Vulkan This repo is a means of documenting my journey with learning Vulkan's basics on windows. Because of the binaries in the LunarG VulkanS

null 2 Dec 8, 2021
Canny edge detection, one of the efficient edge detection algorithms is implemented on a Zedboard FPGA using verilog

In this project, Canny edge detection, one of the efficient edge detection algorithms is implemented on a Zedboard FPGA using verilog. The input image is stored on a PC and fed to the FPGA. The output processed image is displayed on a VGA monitor.

Jeffrey Samuel 3 Nov 16, 2022
基于 Vulkan 实现的 GPUImage

Vulkan-GPUImage 基于 Vulkan 渲染的 GPUImage 版本,实现渲染链机制,复刻 GPUImage 上的多个效果(逐渐增加中)。 更多技术实现,详见源码~~ Vulkan 学习文章 进击的 Vulkan 移动开发(一)之今生前世 进击的 Vulkan 移动开发之 Instan

glumes 143 Nov 15, 2022
OBS Linux Vulkan/OpenGL game capture

OBS Linux Vulkan/OpenGL game capture OBS plugin for Vulkan/OpenGL game capture on Linux. Requires OBS with EGL support (currently unreleased, you need

David Rosca 277 Dec 1, 2022
Vulkan physically based raytracer including denoising

VulkanPBRT Vulkan physically based raytracer including denoising. The GPU raytracer is based on Vulkan only, as well as for the denoising only the Vul

null 17 Nov 11, 2022
Vulkan Minimal Hybrid Rendering

Vulkan Minimal Hybrid Rendering A minimal hybrid rendering sample using ray query Features Rasterization Raytraced shadow Environment Vulkan SDK 1.2.1

Yuki Nishidate 11 Aug 31, 2022