{"id":44736998,"url":"https://github.com/yalcinerbora/githesis","last_synced_at":"2026-02-15T20:06:01.459Z","repository":{"id":29942463,"uuid":"33488835","full_name":"yalcinerbora/GIThesis","owner":"yalcinerbora","description":"My MSc. Thesis about GI","archived":false,"fork":false,"pushed_at":"2024-12-25T17:10:00.000Z","size":42638,"stargazers_count":1,"open_issues_count":1,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2024-12-25T18:19:01.986Z","etag":null,"topics":["c","c-plus-plus"],"latest_commit_sha":null,"homepage":null,"language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/yalcinerbora.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2015-04-06T15:21:13.000Z","updated_at":"2024-12-25T17:10:05.000Z","dependencies_parsed_at":"2022-07-28T00:16:56.780Z","dependency_job_id":null,"html_url":"https://github.com/yalcinerbora/GIThesis","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/yalcinerbora/GIThesis","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yalcinerbora%2FGIThesis","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yalcinerbora%2FGIThesis/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yalcinerbora%2FGIThesis/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yalcinerbora%2FGIThesis/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/yalcinerbora","download_url":"https://codeload.github.com/yalcinerbora/GIThesis/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yalcinerbora%2FGIThesis/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29487814,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-15T19:29:10.908Z","status":"ssl_error","status_checked_at":"2026-02-15T19:29:10.419Z","response_time":118,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["c","c-plus-plus"],"created_at":"2026-02-15T20:06:00.796Z","updated_at":"2026-02-15T20:06:01.446Z","avatar_url":"https://github.com/yalcinerbora.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"# GIThesis\r\nMy MSc. Thesis about GI.\r\n\r\nIt has a sample implementation of a voxel cone tracing GI implementation[[1][4]] and a simple deferred renderer. It provides an example of transforming voxels (instead of voxelizing the mesh) to support dynamic meshes (i.e. meshes with skeletal transformations). Paper Link: [[2][6]]\r\n\r\nThis implementation is old (it was written ~9 years ago) and tried to achieve minimal driver overhead (for the deferred rendering part only). The idea comes from this [presentation][5]:\r\n\r\n - Each shadow map pass is a single `glMultiDrawElementsIndirect` call (one per light). This single draw call writes to multiple framebuffers (cubemap faces for point lights and directional lights). Each cube face represents a cascade for directional lights.\r\n - Depth prepass is a single `glMultiDrawElementsIndirect` drawcall as well.\r\n - Actual GBuffer write is unfortunately one draw call per mesh. Single draw call can be achieved with hardware specific extensions (i.e. bindless textures) but I did not implemented it.\r\n - Light accumulation pass (i.e. shading using the GBuffer) is single draw call as well. In this case each point light \"renders\" a sphere (and this sphere is instanced per point light) and each directional light renders a full screen quad. Shadow maps are queried for shadowing as usual.\r\n\r\n You can check the [DeferredRenderer.cpp][7] for implementation.\r\n\r\n Actual voxel transformation and Sparse Voxel Octree (SVO) construction is implemented in CUDA. I did not bother implementing these portions in OpenGL since utilizing atomic operations and managing trees without pointers was tedious (at that time this is implemented around 2016). I would argue that it still is (maybe Slang would change this we will see).\r\n\r\n## Dependencies\r\n\r\nRequires CUDA 12.6. Project is Windows only and comes with VS project files. It should work on older versions of CUDA, but you need to edit the \"Build\\Windows\\GIThesis\\GIThesis.vcxproj\" file. Search for \"CUDA 12.6.props\" and \"CUDA 12.6.targets\" and change the version according to your CUDA installation.\r\n\r\nEverything else are provided by the repository.\r\n\r\n## Working Directory\r\n\r\nWorking Directory can be found [here][1]\r\n\r\n## Building\r\n\r\nProject is windows only and has a Visual Studio Solution. A recent visual studio (hence MSVC) is required. Open the solution and build the GIThesis project. It does not have any arguments, you can change main.cpp file to load different scenes.\r\n\r\nIt utilizes a simple file format that I've designed called [GPU-friendly graphics (GFG)][3]. A compiled version of that library is in repository. It can only load that file format. For more information please follow the link.\r\n\r\n## Usage\r\n\r\nPlease download the contents of the working directory file to the \"WorkingDir\" folder, and run the main executable.\r\nYou should see Crytek's Sponza scene with a walking character. Use numpad 7-8 to change between GI solution and no GI (deferred renderer only) version. Use numpad 1-3 to change between FPS-like and Modelling software-like (i.e. Maya) movement schemes. (Press question mark on the top left corner of the screen for more info)\r\n\r\nGUI has some performance indicators, as well as some debug views. Press the \"Render\" combo box to check the debug views. On some of these views numpad `+` `-` and numpad `*` `/` may change the views.\r\n\r\n## License\r\n\r\nGIThesis related code is released under the MIT License. See [LICENSE][2] for details.\r\n\r\n\r\n[1]: https://drive.google.com/file/d/1ziLFsdBNc6R4EPuRx0zPS0SI4Vqj75m7/view?usp=sharing\r\n[2]: https://github.com/yalcinerbora/GIThesis/blob/master/LICENSE\r\n[3]: https://github.com/yalcinerbora/GFGFileFormat\r\n[4]: https://www.icare3d.org/research/GTC2012_Voxelization_public.pdf\r\n[5]: https://gdcvault.com/play/1020791/Approaching-Zero-Driver-Overhead-in\r\n[6]: https://user.ceng.metu.edu.tr/~ys/pubs/vt-jrtip19.pdf\r\n[7]: Source/DeferredRenderer.cpp\r\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyalcinerbora%2Fgithesis","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fyalcinerbora%2Fgithesis","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyalcinerbora%2Fgithesis/lists"}