{"id":26629819,"url":"https://github.com/teograjqevci/raymarching_tool","last_synced_at":"2026-04-12T09:51:04.950Z","repository":{"id":280161137,"uuid":"941160470","full_name":"TeoGrajqevci/RayMarching_tool","owner":"TeoGrajqevci","description":"A 3D modeling tool written in C++ and OpenGL, leveraging Signed Distance Fields (SDFs) to create, blend, and manipulate primitive shapes.","archived":false,"fork":false,"pushed_at":"2025-03-23T17:46:13.000Z","size":82,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-23T18:33:29.768Z","etag":null,"topics":["3d","c","cpp","glsl","glsl-shaders","graphics","macos","modeling","opengl","raymarching","raymarching-distance-fields","software","tool","tooling"],"latest_commit_sha":null,"homepage":"https://github.com/TeoGrajqevci/RayMarching_tool/tree/main","language":"Makefile","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/TeoGrajqevci.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":"2025-03-01T16:27:49.000Z","updated_at":"2025-03-23T17:46:19.000Z","dependencies_parsed_at":"2025-03-01T17:31:10.555Z","dependency_job_id":"9c551fcf-2bb4-4228-9464-9a051f7ad749","html_url":"https://github.com/TeoGrajqevci/RayMarching_tool","commit_stats":null,"previous_names":["teograjqevci/raymarching_tool"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TeoGrajqevci%2FRayMarching_tool","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TeoGrajqevci%2FRayMarching_tool/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TeoGrajqevci%2FRayMarching_tool/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TeoGrajqevci%2FRayMarching_tool/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/TeoGrajqevci","download_url":"https://codeload.github.com/TeoGrajqevci/RayMarching_tool/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245276175,"owners_count":20588894,"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":["3d","c","cpp","glsl","glsl-shaders","graphics","macos","modeling","opengl","raymarching","raymarching-distance-fields","software","tool","tooling"],"created_at":"2025-03-24T13:15:18.347Z","updated_at":"2026-04-12T09:51:04.944Z","avatar_url":"https://github.com/TeoGrajqevci.png","language":"Makefile","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Ray Marching Tool\n\nRay Marching Tool is an interactive SDF modeling app written in C++ with OpenGL + ImGui.\nIt supports real-time ray marching, a path tracer mode, shape modifiers, mesh import to SDF (OBJ/FBX), and OBJ export via marching cubes.\n\n## Preview\n\n\u003cimg width=\"1252\" height=\"1287\" alt=\"Capture d’écran 2026-02-12 à 16 06 47\" src=\"https://github.com/user-attachments/assets/0de5a76f-2e7f-489e-9d3a-5e1fcadc01b3\" /\u003e# Ray Marching Tool\n\n## Current Features\n\n- SDF primitives: Sphere, Box, Torus, Cylinder, Cone, Mandelbulb\n- Blend modes: Smooth Union, Smooth Subtraction, Smooth Intersection\n- Modifiers: Bend, Twist, Mirror (with axis and smoothness controls)\n- Transform workflows:\n  - Keyboard transform mode (`G` / `R` / `S`)\n  - Viewport gizmo (World/Local mode)\n  - Axis constraints (`X` / `Y` / `Z`)\n- Rendering modes:\n  - Real-time ray marching renderer\n  - Path tracer renderer with accumulation\n  - Path tracer physical camera controls (focal length, sensor size, aperture DOF, focus distance, chromatic aberration, shutter/ISO exposure)\n  - Optional OpenImageDenoise denoising (when a GPU-backed OIDN runtime is detected)\n- Material controls:\n  - Albedo, Metallic, Roughness, Emission, Transmission, IOR\n- Scene operations:\n  - Multi-select, duplicate, reorder, rename\n  - Undo/redo (`Ctrl+Z`, `Ctrl+Y`, `Ctrl+Shift+Z`)\n- Mesh export:\n  - Export current SDF scene to `.obj` using marching cubes\n- Mesh import:\n  - Drag and drop `.obj` / `.fbx` files into the viewport\n  - Imported meshes are converted to SDF volumes using `mesh2sdf`\n\n## Requirements\n\n- CMake `\u003e= 3.11`\n- C++11 compiler (clang/gcc/MSVC)\n- OpenGL 3.3 Core compatible GPU/driver\n- Internet access during first CMake configure (dependencies are fetched automatically)\n- First configure auto-populates `third_party/mesh2sdf` when missing\n- On macOS, first configure auto-bootstraps OIDN source into `third_party/oidn-local/oidn-src` when no local/system OIDN is found\n\nOptional:\n\n- OpenMP for faster CPU-side mesh export (`-DRMT_USE_OPENMP=ON`)\n- OpenImageDenoise with a GPU backend for path-tracer denoising\n\n## Build\n\n```bash\nmkdir -p build\ncd build\ncmake ..\ncmake --build . --parallel\n```\n\nRun from the build directory:\n\n```bash\n./RayMarchingTool\n```\n\n## Useful CMake Options\n\n- `-DRMT_FAST_FIRST_BUILD=ON|OFF`\n  - `ON` (default): shallow clones + skip dependency update checks\n- `-DRMT_USE_OPENMP=ON|OFF`\n  - `ON`: enables OpenMP for heavy CPU loops (notably mesh export), when compiler support exists\n- `-DRMT_AUTO_BOOTSTRAP_MESH2SDF=ON|OFF`\n  - `ON` (default): clones `mesh2sdf` into `third_party/mesh2sdf` if missing\n- `-DRMT_AUTO_BOOTSTRAP_OIDN_GPU=ON|OFF`\n  - `ON` (default): on macOS, auto-builds a local GPU-capable OIDN source tree when OIDN is not already installed\n\nExample:\n\n```bash\ncmake .. -DRMT_USE_OPENMP=ON -DRMT_FAST_FIRST_BUILD=ON\n```\n\n## Shader Organization\n\n- `shaders/Solid_renderer.glsl` and `shaders/Pathtracer.glsl` are now entry files.\n- They include modular files from:\n  - `shaders/solid/`\n  - `shaders/pathtracer/`\n- The shader loader supports local `#include \"...\"` directives recursively.\n\nThis keeps rendering logic unchanged while making shader code easier to navigate and edit.\n\n## Command-Line Benchmark Option\n\nYou can auto-generate a benchmark scene with an even mix of shape types:\n\n```bash\n./RayMarchingTool --benchmark-even-mix=1000\n```\n\nor\n\n```bash\n./RayMarchingTool --benchmark-even-mix 1000\n```\n\n## Controls\n\n- `LMB drag`: orbit camera\n- `Shift + LMB drag`: pan camera\n- `Mouse wheel`: zoom\n- `Shift + A`: open Add Shape popup\n- `LMB`: select shape (viewport picking)\n- `Drag \u0026 drop OBJ/FBX in viewport`: import mesh as SDF shape\n- `Shift + Click`: toggle multi-selection\n- `G` / `R` / `S`: enter move / rotate / scale modes\n- `X` / `Y` / `Z` during transform: axis constraint\n- `Esc`: cancel active transform\n- `Shift + D`: duplicate selected shapes\n- `X` (outside transform mode): delete selection\n- `C`: focus camera on last selected shape\n- `H`: toggle UI visibility\n- `Ctrl + Z`: undo\n- `Ctrl + Y` or `Ctrl + Shift + Z`: redo\n\n## Exporting Meshes\n\nUse the top toolbar button `Export OBJ`:\n\n1. Set output filename/path\n2. Choose export resolution\n3. Set bounding box size\n4. Export to OBJ\n\nHigher resolutions produce more detail but require more time and memory.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fteograjqevci%2Fraymarching_tool","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fteograjqevci%2Fraymarching_tool","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fteograjqevci%2Fraymarching_tool/lists"}