{"id":21740617,"url":"https://github.com/noahc3/comp4490-project","last_synced_at":"2026-05-20T03:05:03.722Z","repository":{"id":241626186,"uuid":"807281311","full_name":"noahc3/comp4490-project","owner":"noahc3","description":"Exploration of Shell Textured Worlds - An OpenGL demo and report of rendering various geometries at high performance with shell texturing","archived":false,"fork":false,"pushed_at":"2024-05-28T19:57:54.000Z","size":14233,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-01-25T21:27:48.028Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/noahc3.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-05-28T19:57:11.000Z","updated_at":"2024-06-12T19:07:05.000Z","dependencies_parsed_at":"2024-05-29T10:58:56.003Z","dependency_job_id":null,"html_url":"https://github.com/noahc3/comp4490-project","commit_stats":null,"previous_names":["noahc3/comp4490-project"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/noahc3%2Fcomp4490-project","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/noahc3%2Fcomp4490-project/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/noahc3%2Fcomp4490-project/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/noahc3%2Fcomp4490-project/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/noahc3","download_url":"https://codeload.github.com/noahc3/comp4490-project/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244717338,"owners_count":20498284,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":[],"created_at":"2024-11-26T06:14:21.154Z","updated_at":"2026-05-20T03:04:58.682Z","avatar_url":"https://github.com/noahc3.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Exploration of Shell Textured Worlds\n\nThis demo offers multiple scenes which show shell texturing applied to create grass, bumpy surfaces, fur, feathers, and clouds.\n\nAll parameters and materials are configurable at runtime using the properties panel created with ImGui.\n\n**This project was originally for a course term project and has been adapted for publishing to GitHub.** Code\nquality may be a bit of a mess as code quality was not evaluated in the project grade, but shouldn't be too bad!\n\n## Report \u0026 Presentation\n\nFind the report here: [PDF](./Report.pdf)\n\nAnd watch the presentation here: \u003chttps://youtu.be/uOPR-rAUnL4\u003e (sorry for the audio issues!)\n\n## How to Run\n\nOpen `implementation/opengl.sln` in Visual Studio (2022) and hit Run. \n\nA Windows `.exe` build is also provided in the project releases.\n\n## Controls\n\nF1 toggles mouse lock and camera rotation\nF2 toggles noclip\n\nWASD to move around\nF to go down (when noclip is enabled)\nSPACE to go up (when noclip is enabled)\n\n# Screenshots\n\n![](./screenshots/08-red.jpg)\n\n![](./screenshots/09-bear.png)\n\n![](./screenshots/10-chicken.png)\n\n![](./screenshots/12-volumetrics.png)\n\n![](./screenshots/13-wind-waker.png)\n\n# Important files\n\n- `implementation/src/assignment1.cpp': Most of the rendering loop logic including drawing properties panel to the screen\n- `implementation/src/ObjUtils.h`: My custom .obj and .mtl loaders and all relevant structs\n- `implementation/src/blinnphong.h`: Code to bootstrap a given loaded obj model with the blinnphong+fur combo shader\n- `implementation/src/grass.[vert/frag]`: Grass vertex and fragment shaders\n- `implementation/src/shaders/*`: The rest of the shaders\n\n## .obj and .mtl support\n\n### Fur properties\n\nFur properties are loaded from the .mtl file and can be added to any existing material by adding a line with the following format:\n\n```\n# fur \u003cshellCount:int\u003e \u003cshellMaxHeight:float\u003e \u003cthickness:float\u003e \u003cresolution:int\u003e\n# example:\n\nfur 48 0.419 2.753 11\n```\n\nThis allows selectively applying fur with different parameters to different object materials.\n\n### Custom .obj files\n\nIf you want to load your own .obj files: the .obj file must have *vertex normals* to apply fur correctly. I used tinkercad to source my models but the .obj export did not include vertex normals. To fix this, I imported the .obj into Blender, enabled smooth shading for the object, then re-exported the wavefront data. This new export contains vertex normal definitions.\n\nIn `Init()` call `LoadObj(\u003cobj path\u003e, \u003cmtl path\u003e)` then call `ApplyBlinnPhong` to the returned struct.\nThen in `Display()` call `DrawBlinnPhong(\u003cobj struct\u003e)`\n\n# Resources\n\nThe project is heavily inspired by the YouTube video \"How Are Games Rendering Fur?\" by Acerola: https://www.youtube.com/watch?v=9dr-tRQzij4\n\nHowever, no code was referenced from the provided repository. I developed my implementation from scratch using the course sample project as a boilerplate. \n\nAll code is my own *except* library code (incl. ImGui) and noise generation functions in grass.frag and cloud.frag (these functions were written by Inigo Quilez with links cited in the references section of the report PDF).","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnoahc3%2Fcomp4490-project","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnoahc3%2Fcomp4490-project","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnoahc3%2Fcomp4490-project/lists"}