A multithreaded interactive software(aka CPU) raytracing renderer written in pure c++.
Renderer core uses no external libraries. Libraries are only for UI and file loading.
Comes with a custom interactive graphical user interface for real-time rendering and editing, UI is done via dear imgui and openGL. (OpenGL's only for UI! Raytracer is pure math!)
No followers yet
Once you ship this you can't edit the description of the project, but you'll be able to add more devlogs and re-ship it as you add new features!
Finished writing help content, github repo is now up! Ready for release.
Going to update my website, then ready for ship!
oh my god writing the preset scenes take so long :)))))
That was hell.
But now, everything is done! Except the help window, everything is getting ready to be shipped!
omgggg
me want stickers! Also CLion wakatime nuked 2 hours again (again) (again) (again)
Working on preset scene system: A collection of procedurally generated demo scenes that the user can load, they'll showcase most of what the engine can do.
Texture creation modal is done!
Image texture modal is done via ImFileDialog :3
next step is maybe a scene system (and help content) then everything is done!!!!!!!
Texture window is done, along with all texture properties. This was quick.
Next step is the texture creation modal, the image texture one will be hard :<
anywaysss
Material creation dialog is also done,
so everything material related is done.
next step is doing the same for textures,
then preset scenes,
finishing the help window,
then it's ready for ship!
materials!
Diffuse and metallic material properties are done,
material slot drag and drop is done,
added texture slots with a shortcut to create a new color texture
Objects can now be added! Add dialog is complete, so now everything object-related is done.
Gonna do the same for materials, and then textures. Image textures will be hell though.
Working on the create object dialog! When this is finished, all object related things should be finished. The support methods should transfer smoothly to materials and textures as well.
Finally got cpp includes fixed.
Compound (object list) properties is implemented, and object slots are implemented too.
fuck; CLion wakatime is broken again. Oh my god.
Implemeneted quad, disk and cube properties!
All mesh properties is now complete, still has list and translators needed to be done.
once again, wakatime bullshit removed like 2 hours of time for no reason at all '<'
but anyways, object properties now work! Sphere is implemented, but this properties system was hell to implement. A lot of refactoring was needed to make this work in realtime. But after wrapping it in some UI things look are looking pretty good
Geometry panel is half done, scene objects can be removed/added, drag and drop support is here, and work has begun for modifying geometry at runtime. This will be hell to do, since a lot of geometry is generated using a system not really suited for runtime modification, esp. most need to regenerate low-level data based on the changing high-level parameters.
Scene view is done.
There's some very nasty background stuff going on with render workers (I hate multithreaded code omfg)
But it now kinda works???! The code is not pretty nor optimal but it's good for the use case (I hope)
anyways scene system is done so geometry coming up next
Started work on scene hierarchy!
A bit different from my original design, but this would require minimal edits to the hittable system I currently have.
finished camera and rendering settings. Some design work has started on scene management.
Too bad wakatime broke again and nuked today's time :)
Started working on windows and configuration panels. Integration should not be too hard. The hard part would be the scene system.
Updated imgui theming with Inter as the font
Apparantly clion decided to report my project as two repos now uh
hope it doesn't break the time tracking again
Added a system to make the rendering process perceptually faster and more responsive!
The render workers will randomly decline rendering some pixels to speed up the image submit process, so a render will be presented to the user quicker. Then after a few cycles, the workers will prefer rendering pixels that has been neglected (with low sample counts) so the final image will have roughly the same amount of samples.
integrated with opengl + imgui, now the viewport automatically refreshes the viewport based on render
Next step: maybe do some rendering optimizations (checkerboard render?), create the scene system (this will be hell)
Multithreaded rendering is done!
C++ ownership/references/pointer is hell lol 0-0
but now multithreading works! Here I have 10 render workers running each on there own thread, with 1 sample per worker. The result is then merged together on the fly.
Still a bit slow, maybe checkerboard rendering in the future? But mixing algorithm would be pretty hellish
Mostly finished the multithreaded rendering!
Next step is to integrate opengl to display the render!
Started work on UI
decided to use dear imgui via glfw(opengl3~4ish)
Now I gotta research how to use opengl now arghh '-'
=]
Added volumetrics!
Rendering side features are mostly complete now, next step is to create an interactive realtime scene system / UI
Added transformation modifiers:
translation (move) modifier
rotation (x,y,z axis rotation) modifiers
So now the cubes in the cornell box has fallen over lol
Added emissives support! Now (diffuse) lights can be added!
(1000 samples, texture controlled emission)
Added quad + better" disk primitives. Spent way too long wrangling with cpp's insane inheritance system oh my god cpp why are you like this
Implemented bounding volume hierarchy, which uses AABBs to do an initial ray intersection test before doing the expensive shape intersection checks. This brings some dramatic speed increases! sped up by 87% with 50 samples!
Also added space-time rendering (fancy way of saying motion blur) but yeah animation is technically possible now lol
Copied the scene from ray tracing in a weekend to debug any render artifacts. Everything seems right!
Added more materials!
- refractive
- reflective
- debug normal thingy (prototype of a basic custom shader system, lambert with normal as albedo)
More camera controls!
- FOV
- Pose control
- Depth of Field
Started work on more primitive meshes too
- Y-aligned circular disk (arbitrary height and radius)
Gotta work on getting this thing multithreaded, and make a gui (im thinking sdl+dear imgui? not sure yet) for it some time.
Doing barebones graphics stuff is super fun though.
Here's a render showcasing everything new (DOF made everything a bit blurry)
150 samples, 800x450, max 24 bounces
added lighting model system!
Materials aka shaders can now be assigned to objects,
currently true lambert and true reflective(Metallic) materials are added!
Basic diffusion rendering is here! Reflected environment lighting
Currently no any materials yet ("Shaders) but diffuse lighting looks okayish?
raytracing is remarkably simple to do though
Doing this project mostly to teach myself c++ (hell), and some computer graphics stuff on the way! Will probably move on to opengl after this project is done :3
Currently done: Fake sky shader, normal shading!