Giter Site home page Giter Site logo

rvpt's People

Contributors

aregevdev avatar caiowakamatsu avatar cdgiessen avatar juandiegomontoya avatar madmann91 avatar nickclark2016 avatar tigrazone avatar vchizhov avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

rvpt's Issues

Non-physical light sources

Light sources which can be used in rasterization can also be used in RT. It will be nice to have a correspondence between the rasterizer and the ray-tracer (at least in some rendering mode), the properties of those would need to be uploaded. For instance, those can be: point light, directional light, spot light.

Float result_image and temporal_image

Hello.
How to change code to use float variants of result_image and temporal_image?
I want to make tonemapping also.
I understand, I should place tone code to tex_sample.frag. Is I understand correct?
And I want to use everywhere in result and temporal and image to preprocess float images.
On image show to window I need to use float image also or it must be preprocessed to show on window?
Please help me

Multiple passes

For denoising and temporal reprojection it would be useful to have multiple passes. For instance something like shadertoy, where one can bind different buffers to different passes, and different resources. I wanted to try adding something like this: https://www.shadertoy.com/view/ldKBzG

Validation errors flood the terminal while running code from the latest master.

The application seems to work correctly but produces a lot of validation errors like these:

[ERROR: Validation] Validation Error: [ VUID-vkMapMemory-size-00680 ] Object 0: handle = 0x68be0d00000000a8, type = VK_OBJECT_TYPE_UNKNOWN; | MessageID = 0xff4787ab | VkMapMemory: Attempting to map memory range of size zero The Vulkan spec states: If size is not equal to VK_WHOLE_SIZE, size must be greater than 0 (https://vulkan.lunarg.com/doc/view/1.2.148.0/windows/1.2-extensions/vkspec.html#VUID-vkMapMemory-size-00680)
[ERROR: Validation] Validation Error: [ VUID-vkUnmapMemory-memory-00689 ] Object 0: handle = 0x68be0d00000000a8, type = VK_OBJECT_TYPE_UNKNOWN; | MessageID = 0x36bc763c | Unmapping Memory without memory being mapped: VkNonDispatchableHandle 0x68be0d00000000a8[]. The Vulkan spec states: memory must be currently host mapped (https://vulkan.lunarg.com/doc/view/1.2.148.0/windows/1.2-extensions/vkspec.html#VUID-vkUnmapMemory-memory-00689)
[ERROR: Validation] Validation Error: [ UNASSIGNED-CoreValidation-DrawState-InvalidRenderpass ] Object 0: handle = 0x4e94bdc, type = VK_OBJECT_TYPE_DEVICE; | MessageID = 0xa1662b9 | You cannot start a render pass using attachment 0 where the render pass initial layout is VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL and the previous known layout of the attachment is VK_IMAGE_LAYOUT_PRESENT_SRC_KHR. The layouts must match, or the render pass initial layout for the attachment must be VK_IMAGE_LAYOUT_UNDEFINED
[ERROR: Validation] Validation Error: [ UNASSIGNED-CoreValidation-DrawState-InvalidImageLayout ] Object 0: handle = 0xaa7c78c, type = VK_OBJECT_TYPE_COMMAND_BUFFER; | MessageID = 0x4dae5635 | Submitted command buffer expects VkNonDispatchableHandle 0x52cbfd0000000098[] (subresource: aspectMask 0x1 array layer 0, mip level 0) to be in layout VK_IMAGE_LAYOUT_GENERAL--instead, current layout is VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL.
[ERROR: Validation] Validation Error: [ VUID-vkFreeDescriptorSets-descriptorPool-00312 ] Object 0: handle = 0x8514b30000000096, type = VK_OBJECT_TYPE_UNKNOWN; | MessageID = 0x5f008dfb | It is invalid to call vkFreeDescriptorSets() with a pool created without setting VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT. The Vulkan spec states: descriptorPool must have been created with the VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT flag (https://vulkan.lunarg.com/doc/view/1.2.148.0/windows/1.2-extensions/vkspec.html#VUID-vkFreeDescriptorSets-descriptorPool-00312)

Used the latest master commit (732202b).

Extra data:

  • Windows 10 build 19041.804
  • GPU Nvidia GeForce RTX 3070
  • GPU driver version 461.72
  • Vulkan SDK version 1.2.148.1
  • cmake 3.17.5

Program fails when I switch rendering modes to AO or binary

Thank you for feature but sometimes when I switched rendering modes to AO or binary program fails with
Fatal : VkResult is ERROR_DEVICE_LOST in C:/msys64/home/thr/RVPT/src/rvpt/vk_util.cpp at line 167
Assertion failed: res > VK_SUCCESS, file C:/msys64/home/thr/RVPT/src/rvpt/vk_util.cpp, line 167
164 void Queue::submit(VkSubmitInfo const& submitInfo, Fence const& fence)
165 {
166 std::lock_guard lock(submit_mutex);
167 VK_CHECK_RESULT(vkQueueSubmit(queue, 1, &submitInfo, fence.get()));
168 }
tested on windows 10 and ubuntu 21.10 with geforce gtx 1050ti.
same result - program aborted.
How to fix it?

Finish vulkan memory subsystem

Currently each VkBuffer and VkImage receives its own memory allocation. Make it so that gpu memory is allocated in 256MB chunks (configurable) per object type, then dish out that memory as needed. Shouldn't need to change any code outside of the memory class, as its already relatively well abstracted.

Rendering modes [feature]

Various rendering modes could be added for various integrators. For instance: binary, depth, normals, albedo, whitted, path tracing, AO, and so on. A slider should be provided in imgui or/and a key to switch between those. It's probably also useful to be able to have the debug render as both an overlay, and on its own (so that it will be fast for more complex scenes).

Hybrid renderer

Upon finalizing a rasterizer that matches the ray-tracer, a hybrid mode may be added. The result of the primary rays will be a product of the rasterizer, while any subsequent bounces will be from the ray-tracer. This would require the rasterizer to generate a buffer of positions + normals + materials at each pixel, from which subsequent rays may be generated. A restriction in that case will be the sampling of the primary rays - in each frame the samples for those should be slightly jittered if possible. There is also a concern regarding AA, where a higher resolution image should be fed to the raytracer if actual AA is desired.

Ray Queries from 'VK_KHR_ray_tracing'

I would suggest not to bother with the Ray-Tracing (rgen, rchit, rmiss) shader, but go straight to compute shaders with Ray Query. Moreover, I would suggest it rather as an option…

Project structure not exactly a library.

The current code works more as an executable which is just a model loader. What do we want to do?

I personally see two options we can do.

  1. Not make this a rendering library, but just a path tracer. (Which can make pretty things), and maybe turn it into some type of SDK in the far future...
  2. Focus on making this a library.

I would personally go for option one, as we do not have the most amount of features currently. And it would be a much better idea to make the images pretty first, and then worry about making it a library. Versus having to do both at the same time.

Just opening because this is something that needs to be discussed, but it's yet to be something serious, but something to mention.

Flesh out ImGui input

Currently the ImGui implementation doesn't handle keyboard events properly which limits the interaction currently possible.
Fixing this would allow for numerical and textual input directly instead of relying on sliders with mouse controls.

window resize

when I trying to resize window, program fails.
How to implement window resize?

Ellipsoids through matrices

For the sphere primitive a 4x4 matrix can be uploaded instead of a center and radius. This allows supporting any form of ellipsoid if the code can be adapted to support instances.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.