- Notifications
You must be signed in to change notification settings - Fork3
Reusable Vulkan based ray-tracing library
License
fynv/FeiRays
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
Reusable Vulkan based ray-tracing code base.
The code is evolved fromVkRayTraceWeekend.
Here, I'm trying to make it more extendable and reusable, so I can have more fun with it.
Now playing withMcGuire Computer Graphics Archive
The "sponza" model, 900x600x1000 rays, rendered in 11.2 seconds using RTX 2060 super.
The "breakfast_room" model, 900x600x1000 rays, rendered in 18.4 seconds using RTX 2060 super.
A Python frontend can be found in the "python" folder.
Using the Python frontend, the above case can be rendered using the following Python script:
importFeiRaysscene=FeiRays.Scene(900,600)scene.add_sunlight((1,1,1),2, (4000,4000,4000))transform=FeiRays.Transform()scene.add_wavefront_object(transform,"breakfast_room","breakfast_room.obj")scene.set_camera((2.5,1.5,2.5), (0,1.5,0), (0,1,0),45)scene.trace(1000,50)img=scene.get_image()img.save("breakfast_room.png")
(It is assumed that the model file "breakfast_room.obj" is located in the folder "breakfast_room".)
The Python frontend (prebuilt for Win64 and Linux64) can be fetched from Pypi:
# pip install FeiRays
Building the project is simple.
Volk andVulkan-Headers are included as submodules,so it should be fine to build without Vulkan SDK. But be sure to have a driver that supports Vulkan 1.2.Nvidia users should use one of the "beta" drivers fromhttps://developer.nvidia.com/vulkan-driver.
- Clone the repo and update the submodules
- Use CMake to generate a VS solution at FeiRays/build.
- Build and run the tests.
- Shaders (spv) are expected at ../shaders relative to the starting folder.
I've decided to license this project under'"Anti 996" License'
Basically, you can use the code any way you like unless you are working for a 996 company.
In case someone is interested in the progress of the project, here is a list of what have been implemented so far.
For monte carlo path-tracing, it is quite essential to have a pseudo-random number generator ready everywhere.For this purpose, we have a minimal set of XORWOW implementation of CURAND ported here.
Basic Vulkan resource classes are implemented in context.cpp.
- The Context
- Command Buffers
- Linear Buffers
- Textures and Cubemaps
- Acceleration Structures
There is abstract class called "Geometry". Each sub-class can have its own closest-hit shader and intersection shader (optional).
- ColoredUnitSphere: support a uniform color and different material types
- ColoredIndexedTriangleList: support a uniform color and different material types
- UnitSphereCheckerTex: procedure texture. diffuse only
- TexturedUnitSphere: 1 texture attached to 1 sphere. diffuse only
- TexturedTriangleList: support multiple textures. diffuse only
- WavefrontIndexedTriangleList: support multiple textures. support diffuse, specular, emissive material types. support alpha-map and bump-map.
There are 3 Kinds of light-sources
- Emissive material: including the sky-box
- Sphere light sources
- Sunlight: round lights at infinite distance
The class "PathTracer" maintains a list of the geometries and path-traces them.
As I've startedFeiRaysInline, further exploration will happen there.
About
Reusable Vulkan based ray-tracing library
Topics
Resources
License
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Releases
Packages0
Uh oh!
There was an error while loading.Please reload this page.