{"id":13731581,"url":"https://github.com/middlefeng/NuoModelViewer","last_synced_at":"2025-05-08T05:30:25.250Z","repository":{"id":49331825,"uuid":"67608101","full_name":"middlefeng/NuoModelViewer","owner":"middlefeng","description":"A simple Wavefront OBJ viewer.","archived":false,"fork":false,"pushed_at":"2023-10-23T18:40:16.000Z","size":23599,"stargazers_count":299,"open_issues_count":1,"forks_count":39,"subscribers_count":25,"default_branch":"master","last_synced_at":"2024-08-04T02:10:15.908Z","etag":null,"topics":["graphics","raytracer","renderer","rendering-3d-graphics","rendering-engine","wavefront-obj"],"latest_commit_sha":null,"homepage":"http://nuo.graphics","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/middlefeng.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,"governance":null}},"created_at":"2016-09-07T13:17:01.000Z","updated_at":"2024-08-01T11:54:18.000Z","dependencies_parsed_at":"2022-09-23T19:00:28.919Z","dependency_job_id":null,"html_url":"https://github.com/middlefeng/NuoModelViewer","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/middlefeng%2FNuoModelViewer","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/middlefeng%2FNuoModelViewer/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/middlefeng%2FNuoModelViewer/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/middlefeng%2FNuoModelViewer/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/middlefeng","download_url":"https://codeload.github.com/middlefeng/NuoModelViewer/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":224702714,"owners_count":17355599,"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":["graphics","raytracer","renderer","rendering-3d-graphics","rendering-engine","wavefront-obj"],"created_at":"2024-08-03T02:01:33.470Z","updated_at":"2025-05-08T05:30:25.238Z","avatar_url":"https://github.com/middlefeng.png","language":"C++","readme":"# Nuo Model Viewer\n\nThis project consists of:\n* A Wavefront OBJ viewer, supporting both real-time rendering and ray-tracing, which is based on Viewer Foundation, a reusable framework.\n* Viewer Foundation, a reusable framework consisting of:\n  * Viewer Foundation Render, which is an encapsulation to the Metal APIs, providing simplified resource and state management on top of the Metal APIs.\n  * A scene-graph-like system which enables building real-time and path-tracing based renderers.\n\n## Supported GPUs\n\n* Apple Silicon GPU is supposed to be the only GPU working on macOS in the future.\n  * M1 Max.\n\n⚠️❗The whole Intel Mac product line has been terminated. AMD eGPU support is obsoleted.\n\u003e * Intel HD serious GPUs are **not** supported. (Built-in integrated GPU in most models of Mac.)\n\u003e * AMD Radeon Pro 560, and built-in descrete GPUs in almost all MacBook Pro later than 2017, are barely suppored. Their performance would be poor for the ray tracing rendering.\n\u003e * For early macOS on Intel supporting eGPU, AMD Radeon RX 580 or above is recommended, in particular but not limited to:\n\u003e   * AMD Radeon RX Vega 56 is recommended.\n\u003e   * AMD Radeon RX Vega 64, RX 5700, and so on, should be working, but untested.\n\u003e   * AMD Radeon VII is highly recommended.\n\u003e   * AMD Radeon Pro Vega II (Duo) (in the Mac Pro 2019). [1]\n\u003e   * AMD Radeon Pro W5700. [1]\n\u003e \n\u003e  [1] Acknowledge to @ibuick for the verification.\n\n## Latest Update\n\n* Apple Silicon and macOS 13.3 adaptive.\n  * High dynamic range display.\n  * Replace the Performance Shader Intersector with Metal Ray Tracing shader.\n* Specular lighting on a Fresnel surface.\n* Multiple-importance sampling.\n* Slider with adjustable scale.\n* Full ray tracing.\n\n\u003cp align=\"left\"\u003e\n  \u003cimg width=\"800\" src=\"https://github.com/middlefeng/NuoModelViewer/blob/master/screenshots/F-35-ray-tracing-ground.jpg\"/\u003e\n  \u003cimg width=\"800\" src=\"https://github.com/middlefeng/NuoModelViewer/blob/master/screenshots/indirect-light-spec.jpg\"/\u003e\n\u003c/p\u003e\n\n* Hybrid rendering with ray tracing.\n  * Direct lighting soft shadow.\n  * Indirect lighting (ambient) with physically-based occlusion.\n  * Physically based effect for the shadow overlay (blend-in with photographic scene).\n  * Self-illuminating objects.\n* Checkerboard background for better inspecting the result transparency.\n\n\u003cp align=\"left\"\u003e\n  \u003cimg width=\"400\" src=\"https://github.com/middlefeng/NuoModelViewer/blob/master/screenshots/F-35-ray_tracing.png\"/\u003e\n  \u003cimg width=\"400\" src=\"https://github.com/middlefeng/NuoModelViewer/blob/master/screenshots/AFD-ray-tracing.png\"/\u003e\n\u003c/p\u003e\n\n\u003cp align=\"left\"\u003e\n  \u003cimg width=\"400\" src=\"https://github.com/middlefeng/NuoModelViewer/blob/master/screenshots/LP670-checkerboard.png\"/\u003e\n\u003c/p\u003e\n\n* Inspecting intremediate textures in debug.\n\n\u003cp align=\"left\"\u003e\n  \u003cimg width=\"600\" src=\"https://github.com/middlefeng/NuoModelViewer/blob/master/screenshots/Inspect.jpg\"/\u003e\n\u003c/p\u003e\n\n* Overlay indicator for selected parts.\n\n\u003cp align=\"left\"\u003e\n  \u003cimg width=\"400\" src=\"https://github.com/middlefeng/NuoModelViewer/blob/master/screenshots/F-35-selection.png\"/\u003e\n\u003c/p\u003e\n\n* Transformation on the entire scene accurately around the scene's center.\n* More accurate bounds calculation (improving shadow map sampling quality).\n* User selection on GPU.\n* Better take advantage of dedicated video memory by using private buffers. Especially important for \u003ca href=\"https://www.instagram.com/p/BflXSN7BsUY/\"\u003edesktop-class graphics card or external GPU\u003c/a\u003e).\n* Background loading.\n* Motion blur.\n* Blending with real-scene background.\n\n\u003cp align=\"left\"\u003e\n  \u003cimg width=\"450\" src=\"https://github.com/middlefeng/NuoModelViewer/blob/master/screenshots/UH60.png\"/\u003e\n\u003c/p\u003e\n\n* Ambient occlusion.\n\n\u003cp align=\"left\"\u003e\n  \u003cimg width=\"446\" src=\"https://github.com/middlefeng/NuoModelViewer/blob/master/screenshots/SDROBJ-no-occlusion.jpg\"/\u003e\n\u003c/p\u003e\n\n* Transform of the entire scene (including the light sources).\n* Better PCSS soft shadow\n\n\u003cp align=\"left\"\u003e\n  \u003cimg width=\"408\" src=\"https://github.com/middlefeng/NuoModelViewer/blob/master/screenshots/F4J-ground-pcss.jpg\"/\u003e\n\u003c/p\u003e\n\n* Ground shadow\n\n\u003cp align=\"left\"\u003e\n  \u003cimg width=\"448\" src=\"https://github.com/middlefeng/NuoModelViewer/blob/master/screenshots/F4J-ground-front.jpg\"/\u003e\n  \u003cimg width=\"388\" src=\"https://github.com/middlefeng/NuoModelViewer/blob/master/screenshots/F-4J-Ground.jpg\"/\u003e\n\u003c/p\u003e\n\n* Skybox.\n\n\u003cp align=\"left\"\u003e\n  \u003cimg width=\"400\" src=\"https://github.com/middlefeng/NuoModelViewer/blob/master/screenshots/F4JOLOBJHD.png\"/\u003e\n\u003c/p\u003e\n\n* BRDF mode. Fix artifacts in specular lighting.\n* Save to high resolution PNG (up to 3900 px).\n* Rotate individual parts (mandatory for the varying-geometry wing plane model!).\n\n\u003cp align=\"left\"\u003e\n  \u003cimg width=\"800\" src=\"https://github.com/middlefeng/NuoModelViewer/blob/master/screenshots/F-14-wing.png\"/\u003e\n\u003c/p\u003e\n\n* Adjustable shadowing PCF and bias to alliviate artifacts.\n* Preliminary shadowing for two of the four light sources.\n\n\u003cp align=\"left\"\u003e\n  \u003cimg width=\"400\" src=\"https://github.com/middlefeng/NuoModelViewer/blob/master/screenshots/FA-18-shadow.png\"/\u003e\n\u003c/p\u003e\n\n* Load/save scene parameters (postion, light source direction, etc.).\n* Normal texture.\n* Light source configuration.\n* Multiple light sources.\n\n\u003cp align=\"left\"\u003e\n  \u003cimg width=\"400\" src=\"https://github.com/middlefeng/NuoModelViewer/blob/master/screenshots/F-16.jpg\"/\u003e\n\u003c/p\u003e\n\n* Adjustable lighting direction.\n* Better handling to material opacity.\n\n\u003cp align=\"left\"\u003e\n  \u003cimg width=\"400\" src=\"https://github.com/middlefeng/NuoModelViewer/blob/master/screenshots/2016-0913-LP.jpg\"/\u003e\n\u003c/p\u003e\n\n## Screenshots on Development\n\n\u003cp align=\"left\"\u003e\n  \u003cimg width=\"600\" src=\"https://github.com/middlefeng/NuoModelViewer/blob/master/screenshots/2016-0908-ModelViewer.jpg\"/\u003e\n\u003c/p\u003e\n\n\n## TODO\n\n* 🔲 Camera model.\n  * 🔲 Depth of field. Lens blur.\n* 🕒 Order-independent transparency.\n* 🔲 Bump (displacement) texture.\n* 🕒 Support PBRT format.\n* ✅ Normal texture.\u003c/del\u003e\n* ✅ Direction of lgiht source.\n* ✅ Intensity of light source.\n* ✅ Mutilple light sources.\n* ✅ Selectable list of object.\n* ✅ Surface smooth.\n* Shadow\n  * ✅ Shadow to model.\n  * ✅ Shadow to ground.\n  * PCSS.\n    * ✅ Basic PCSS.\n    * ✅ Adjustable occluder search range.\n    * ✅ More adjustable bias.\n  * ✅ Transparency (strength) of shadow overlay. (Achieved by ambient)\n  * Linear shadow map (more plausible PCSS, VSM).\n  * Adaptive shadow map resolution/region.\n* ✅ Per light-source, per-surface shadow properties (bias, soft edge).\n* ✅ Cull mode.\n* Surrounding.\n  * ✅ Cubemap skybox.\n  * Water (for ship model).\n* ✅ Motion blur (especially for rotating parts like rotor).\n* Detailed properties panel for indiviudal model parts.\n  * ✅ Smooth options (everywhere, texture discontinuiation only, etc).\n  * ✅ Material opacity adjustment.\n  * Material adjustment (specular, colors, etc).\n  * List of board objects.\n  * ✅ Self illumination.\n* Ray tracing\n  * 🕒 Faster buffer construction.\n  * ✅ Ground reflection.\n  * ✅ Specular term in direct lighting shadow, and in global illumniation.\n  * 🕒 Light source surface sampling.\n  * ✅ Shadow ray visibility.\n  * Multiple importance sampling. Unified reflection model.\n  * 🔲 Normal map.\n  * Specular map.\n  * 🔲 Translucent map.\n* ✅ BRDF mode.\n* ✅ Ambient occlusion.\n* Model visualization\n  * ✅ PCSS steps visualization.\n  * Triangle mesh\n  * Normal/tangent visualization\n  \n\n## Early Screenshots\n\nScreenshot of the first version (left). Add support to simple transparency (right).\n\u003cp align=\"left\"\u003e\n  \u003cimg height=\"200\" src=\"https://github.com/middlefeng/NuoModelViewer/blob/master/screenshots/ver0.0.jpg\"/\u003e\n  \u003cimg height=\"200\" src=\"https://github.com/middlefeng/NuoModelViewer/blob/master/screenshots/ver0.0-transparency.jpg\"/\u003e\n\u003c/p\u003e\n\n","funding_links":[],"categories":["Maths"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmiddlefeng%2FNuoModelViewer","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmiddlefeng%2FNuoModelViewer","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmiddlefeng%2FNuoModelViewer/lists"}