RayTracing | Realtime GPU Path tracer based on OpenCL and OpenGL | GPU library

 by   AlexanderVeselov C++ Version: Current License: MIT

kandi X-RAY | RayTracing Summary

kandi X-RAY | RayTracing Summary

RayTracing is a C++ library typically used in Hardware, GPU applications. RayTracing has no bugs, it has no vulnerabilities, it has a Permissive License and it has low support. You can download it from GitHub.

Realtime GPU Path tracer based on OpenCL and OpenGL
Support
    Quality
      Security
        License
          Reuse

            kandi-support Support

              RayTracing has a low active ecosystem.
              It has 230 star(s) with 25 fork(s). There are 6 watchers for this library.
              OutlinedDot
              It had no major release in the last 6 months.
              There are 2 open issues and 2 have been closed. On average issues are closed in 148 days. There are 1 open pull requests and 0 closed requests.
              It has a neutral sentiment in the developer community.
              The latest version of RayTracing is current.

            kandi-Quality Quality

              RayTracing has no bugs reported.

            kandi-Security Security

              RayTracing has no vulnerabilities reported, and its dependent libraries have no vulnerabilities reported.

            kandi-License License

              RayTracing is licensed under the MIT License. This license is Permissive.
              Permissive licenses have the least restrictions, and you can use them in most projects.

            kandi-Reuse Reuse

              RayTracing releases are not available. You will need to build from source code and install.

            Top functions reviewed by kandi - BETA

            kandi's functional review helps you automatically verify the functionalities of the libraries and avoid rework.
            Currently covering the most popular Java, JavaScript and Python libraries. See a Sample of RayTracing
            Get all kandi verified functions for this library.

            RayTracing Key Features

            No Key Features are available at this moment for RayTracing.

            RayTracing Examples and Code Snippets

            No Code Snippets are available at this moment for RayTracing.

            Community Discussions

            QUESTION

            Three.js Camera always undefined when setting up ray tracing
            Asked 2021-May-26 at 14:20

            I have created a three.js element to show a number of points on the screen and I have been tasked with clicking on two and calculating the distance between them. I am doing this in a Angular (8) app and have all the points visible and mouse events (pointerup/down) set up correctly. My idea is to ray trace from the mouse point when clicked and highlight a vertex (I do only have points no lines or faces). So I have attempted to set up Three.js RayTRacing on my scene but every time I call setFromCamera the camera is undefined even though I srill have the points visible on the screen at all times.

            ...

            ANSWER

            Answered 2021-May-26 at 14:20

            It appears that I need arrow functions to set up the eventListener otherwise this is local to the function.

            Source https://stackoverflow.com/questions/67706101

            QUESTION

            What is the difference between ray tracing, ray casting, ray marching and path tracing?
            Asked 2021-May-02 at 08:31

            As far as I know, all the techniques mentioned in the title are rendering algorithms that seem quite similar. All ray based techniques seem to revolve about casting rays through each pixel of an image which are supposed to represent rays of real light. This allows to render very realistic images.

            As a matter of fact I am making a simple program that renders such images myself based on Raytracing in one Weekend.

            Now the thing is that I wanted to somehow name this program. I used the term “ray tracer” as this is the one used in the book.

            I have heard a lot of different terms however and I would be interested to know what exactly is the difference between ray tracing, ray matching, ray casting, path tracing and potentially any other common ray-related algorithms. I was able to find some comparisons of these techniques online, but they all compared only two of these and some definitions overlapped, so I wanted to ask this question about all four techniques.

            ...

            ANSWER

            Answered 2021-May-02 at 08:31

            My understanding of this is:

            1. ray cast

              is using raster image to hold the scene and usually stop on first hit (no reflections and ray splitting) and does not necessarily cast ray on per pixel basis (usually per row or column of screen). The 3D version of this is called Voxel space ray cast however the map is not voxel space instead 2 raster images RGB,Height are used.

              For more info see:

            2. (back) ray trace

              This usually follows physical properties of light so ray split in reflected and refracted and we stop usually after some number of hits. The scene is represented either with BR meshes or with Analytical equations or both.

              for more info see:

              the back means we cast the rays from camera to scene (on per pixel basis) instead of from light source to everywhere ... to speed up the process a lot at the cost of wrong lighting (but that can be remedied with additional methods on top of this)...

            The other therms I am not so sure as I do not use those techniques (at least knowingly):

            1. path tracing

              is optimization technique to avoid recursive ray split in ray trace using Monte Carlo (stochastic) approach. So it really does not split the ray but chose randomly between the 2 options (similarly how photons behave in real world) and more rendered frames are then blended together.

            2. ray marching

              is optimization technique to speed up ray trace by using SDF (signed distance function) to determine safe advance along the ray so it does not hit anything. But it is confined only to analytical scene.

            Source https://stackoverflow.com/questions/67347177

            QUESTION

            DXR Descriptor Heap management for raytracing
            Asked 2021-Apr-21 at 05:12

            After watching videos and reading the documentation on DXR and DX12, I'm still not sure how to manage resources for DX12 raytracing (DXR).

            There is quite a difference between rasterizing and raytracing in terms of resource management, the main difference being that rasterizing has a lot of temporal resources that can be bound on the fly, and raytracing being in need of all resources being ready to go at the time of casting rays. The reason is obvious, a ray can hit anything in the whole scene, so we need to have every shader, every texture, every heap ready and filled with data before we cast a single ray.

            So far so good.

            My first test was adding all resources to a single heap - based on some DXR tutorials. The problem with this approach arises with objects having the same shaders but different textures. I defined 1 shader root signature for my single hit group, which I had to prepare before raytracing. But when creating a root signature, we have to exactly tell which position in the heap corresponds to the SRV where the texture is located. Since there are many textures with different positions in the heap, I would need to create 1 root signature per object with different textures. This of course is not preferred, since based on documentation and common sense, we should keep the root signature amount as small as possible. Therefore, I discarded this test.

            My second approach was creating a descriptor heap per object, which contained all local descriptors for this particular object (Textures, Constants etc..). The global resources = TLAS (Top Level Acceleration Structure), and the output and camera constant buffer were kept global in a separate heap. In this approach, I think I misunderstood the documentation by thinking I can add multiple heaps to a root signature. As I'm writing this post, I could not find a way of adding 2 separate heaps to a single root signature. If this is possible, I would love to know how, so any help is appreciated.

            Here the code I'm usign for my root signature (using dx12 helpers):

            ...

            ANSWER

            Answered 2021-Jan-20 at 10:23

            Dynamic indexing of HLSL 5.1 might be the solution to this issue.

            https://docs.microsoft.com/en-us/windows/win32/direct3d12/dynamic-indexing-using-hlsl-5-1

            • With dynamic indexing, we can create one heap containing all materials and use an index per object that will be used in the shader to take the correct material at run time
            • Therefore, we do not need multiple heaps of the same type, since it's not possible anyway. Only 1 heap per heap type is allowed at the same time

            Source https://stackoverflow.com/questions/65794461

            QUESTION

            Is this "possibly-uninitialized" compiler error a false alarm? [rustc 1.51.0]
            Asked 2021-Apr-05 at 00:10

            I was hit with the possibly-uninitialized variable error, although I'm convinced that this should never be the case.
            (The rustc --version is rustc 1.51.0 (2fd73fabe 2021-03-23))

            ...

            ANSWER

            Answered 2021-Apr-05 at 00:10

            You're not the first person to see this behavior, and generally I would not consider it a bug. In your case, the condition is very simple and obvious, and it's easy for you and me to reason about this condition. However, in general, the condition does not need to be obvious and, for example, the second case could have additional conditions that are hard to reason about, even though the code is correct.

            Moreover, the kind of analysis you want the compiler to do (determine which code is reachable based on conditions) is usually only done when the compiler is optimizing. Therefore, even if the compiler had support for this kind of analysis, it probably wouldn't work in debug mode. It also doesn't work in all cases even in the best optimizing compilers and static analysis tools.

            If you have a philosophical objection to initializing a dummy value in this case, you can use an Option:

            Source https://stackoverflow.com/questions/66946858

            QUESTION

            What are the normal methods for achiving texture mapping with raytracing?
            Asked 2021-Feb-10 at 12:28

            When you create a BLAS (bottom level acceleration structures) you specify any number of vertex/index buffers to be part of the structure. How does that end up interacting with the shader and get specified in the descriptor set? How should I link these structures with materials?

            How is texture mapping usually done with raytracing? I saw some sort of "materials table" in Q2RTX but the documentation is non-existent and the code is sparsely commented.

            ...

            ANSWER

            Answered 2021-Feb-10 at 12:28

            A common approach is to use a material buffer in combination with a texture array that is addressed in the shaders where you require the texture data. You then pass the material id e.g. per-vertex or per-primitive and then use that to dynamically fetch the material, and with it the texture index. Due to the requirements for Vulkan ray tracing you can simplify this by using the VK_EXT_descriptor_indexing extension (Spec) that makes it possible to create a large and descriptor set containing all textures required to render your scene.

            The relevant shader parts:

            Source https://stackoverflow.com/questions/66129997

            QUESTION

            GLFW (opengl) window closes when hovering mouse over the white window top handle
            Asked 2021-Jan-16 at 10:06

            Whenever I am rendering a window for a test raytracer in opengl with the GLFW library for C++ , the window works fine up to a point where if I just hover , not outside of the window , but over its white top handle , whether it is to move the window or minimize it , the window and the whole program just crashes with no error output , even tho I am not using any try-catch block or any noexcept keyword inside the whole program , and I'm using std::shared_ptr for pointer management.

            Here's the main function (variables written in caps that aren't from glfw or opengl are defined in another file , but not initialized):

            ...

            ANSWER

            Answered 2021-Jan-16 at 10:01

            I think I sort of tracked down what the problem was, thanks to Retired Ninja in the comment section. I reduced the code to just a few lines, forgetting about the mesh system and all that stuff. Apparently, when I grab the window, the main thread seems to sleep until I am done moving it, and in the ray-trace algorithm I am instantiating new threads, so when the main one sleeps, most of the times it doesn't await (aka "join()") for them, and because I am passing pointers to those threads, those seem to fill up the memory and crash. I have added a system to also sleep the working threads while the main one is doing so and it works like a charm!. Now I gotta see how to do it in cuda XD. Nevertheless , thank you all!

            Source https://stackoverflow.com/questions/65706704

            QUESTION

            Understanding Vulkan uniform layout's 'set' index
            Asked 2020-Dec-21 at 06:14

            I've been following along in the (very awesome) nvpro raytracing tutorial and have a question about the way the CameraProperties uniform buffer is bound using layout(binding = 0, set = 1) - I understand the binding = 0, but why set = 1?

            The tutorial says "The set = 1 comes from the fact that it is the second descriptor set passed to pipelineLayoutCreateInfo.setPSetLayouts", but when I look at HelloVulkan::createGraphicsPipeline() I see the layout count is one, and this is where m_descSetLayout (what binds the camera uniform buffer) is used. What am I missing?

            The related section of the tutorial is here.

            Thanks!

            ...

            ANSWER

            Answered 2020-Dec-21 at 06:14

            QUESTION

            mGPU (Multi-GPU) AFR with RTX 2060 & D3D12 possible?
            Asked 2020-Nov-03 at 02:38

            Is it possible to do AFR in D3D12 with two RTX 2060 graphics cards?

            I have a custom rendering framework that supports AFR with D3D12 but just read Nvidia dropped SLI support however I'm having trouble finding a clear answer as to what this means when it comes to D3D12 / Vulkan APIs. Did they drop just SLI driver support but Linked-GPU support still works as normal in D3D12?

            If I buy two RTX 2060 graphics cards can I set them up as a "GPU 0 (Link 0) & GPU 1 (Link 0)" in Windows and then in D3D12 use them as a node group?

            I want to add RayTracing into my API but want to test AFR / mGPU support with it & Nvidia has made this very unclear about what this means for D3D12 / Vulkan.

            ...

            ANSWER

            Answered 2020-Nov-03 at 02:38

            The answer is you can't use Linked GPUs to do AFR with these GPUs without driver hacks. However I can do AFR by creating two D3D12 devices & manually do the swapping & copping of buffers.

            This will also allow me to do cross GPU vendor AFR rendering as well.

            Will my API I'm creating support this? Yes, yes it will ;)

            Source https://stackoverflow.com/questions/64628179

            QUESTION

            Vulkan, VK_KHR_ray_tracing: how do you rebuild a BLAS, as opposed to updating it?
            Asked 2020-Oct-06 at 15:47

            I have an application (based on the vulkan-tutorial.com) in which I use the titular raytracing extension for vulkan. In it, an acceleration structure is created for some geometry. This geometry then changes (vertices are displaced dynamically, per frame), and thus I update the appropriate BLAS by calling vkCmdBuildAccelerationStructureKHR with VkAccelerationStructureBuildGeometryInfoKHR::update = VK_TRUE. This works fine (although the update ignores my changing the maxPrimitiveCount and similar parameters - It uses as many primitives as I specified during the first build; somewhat makes sense to me and is not part of my question).

            I've researched a bit and came across some best practices here: https://developer.nvidia.com/blog/best-practices-using-nvidia-rtx-ray-tracing/ In there, they mention this: "Consider using only rebuilds [of the BLAS] with unpredictable deformations." This seems like something I want to try out, however, I can't find any sample code for rebuilding BLAS, and if I simply set update to VK_FALSE, I get massive amounts of validation layer errors and no image on screen. Specifically, I get a lot of "X was destroyed/freed but was still in use" where X is command buffers, VkBuffers, memory, fences, semaphores... My guess is the rebuild is trying to free the BLAS while it's still in use.

            My question is therefore: How do you properly perform a "rebuild" of a BLAS, as mentioned in the above article?

            I was considering using some std::shared_ptr to keep track of the BLAS being still in use by a given swapchain image but that seems excessively complicated and somewhat unclean, besides, I would need as many BLAS as I have swapchain images, multiplying required graphics memory by the swapchain size... that can't be practical in real life applications, right?

            ...

            ANSWER

            Answered 2020-Oct-06 at 15:47

            I cannot explain why, but I must've had an error in my code which resulted in the errors I described in my question.

            The correct way to rebuild instead of update an acceleration structure is indeed by setting the update parameter of VkAccelerationStructureBuildGeometryInfoKHR to VK_FALSE, that's all that needs to be done.

            Source https://stackoverflow.com/questions/63620546

            QUESTION

            How to destroy CUDA graphics datatypes
            Asked 2020-Aug-19 at 16:59

            I create an OpenGL texture/CUDA surface pair from some RGB data with a function. The cudaSurfaceObject_t can be used in a CUDA kernel for GPU-accelerated image processing, and the GLuint can be used to render the results of the CUDA kernel. The function is provided in the program below:

            ...

            ANSWER

            Answered 2020-Aug-19 at 16:59

            When I add the following line:

            Source https://stackoverflow.com/questions/63455251

            Community Discussions, Code Snippets contain sources that include Stack Exchange Network

            Vulnerabilities

            No vulnerabilities reported

            Install RayTracing

            You can download it from GitHub.

            Support

            For any new features, suggestions and bugs create an issue on GitHub. If you have any questions check and ask questions on community page Stack Overflow .
            Find more information at:

            Find, review, and download reusable Libraries, Code Snippets, Cloud APIs from over 650 million Knowledge Items

            Find more libraries
            CLONE
          • HTTPS

            https://github.com/AlexanderVeselov/RayTracing.git

          • CLI

            gh repo clone AlexanderVeselov/RayTracing

          • sshUrl

            git@github.com:AlexanderVeselov/RayTracing.git

          • Stay Updated

            Subscribe to our newsletter for trending solutions and developer bootcamps

            Agree to Sign up and Terms & Conditions

            Share this Page

            share link

            Explore Related Topics

            Consider Popular GPU Libraries

            taichi

            by taichi-dev

            gpu.js

            by gpujs

            hashcat

            by hashcat

            cupy

            by cupy

            EASTL

            by electronicarts

            Try Top Libraries by AlexanderVeselov

            WinAPI-GUI

            by AlexanderVeselovC++

            BankClient

            by AlexanderVeselovC#

            StockModeling

            by AlexanderVeselovPython

            ChayEngine

            by AlexanderVeselovC++

            GpuApi

            by AlexanderVeselovC++