{"id":31768353,"url":"https://github.com/raph080/ImGuiHydraEditor","last_synced_at":"2025-10-10T02:02:06.934Z","repository":{"id":204310334,"uuid":"705468485","full_name":"raph080/ImGuiHydraEditor","owner":"raph080","description":"ImGui Hydra Editor is a USD editor written in c++ with the ImGui and OpenUSD frameworks.","archived":false,"fork":false,"pushed_at":"2025-08-09T19:14:37.000Z","size":45065,"stargazers_count":115,"open_issues_count":4,"forks_count":13,"subscribers_count":6,"default_branch":"main","last_synced_at":"2025-08-09T19:28:06.828Z","etag":null,"topics":["3d-graphics","glew","glfw","hydra","imgui","opengl","openusd"],"latest_commit_sha":null,"homepage":"","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/raph080.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,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2023-10-16T04:16:36.000Z","updated_at":"2025-08-09T18:28:33.000Z","dependencies_parsed_at":null,"dependency_job_id":"8f844cf2-f143-481a-a876-2ab2d247bf49","html_url":"https://github.com/raph080/ImGuiHydraEditor","commit_stats":null,"previous_names":["raph080/imguihydraeditor"],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/raph080/ImGuiHydraEditor","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/raph080%2FImGuiHydraEditor","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/raph080%2FImGuiHydraEditor/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/raph080%2FImGuiHydraEditor/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/raph080%2FImGuiHydraEditor/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/raph080","download_url":"https://codeload.github.com/raph080/ImGuiHydraEditor/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/raph080%2FImGuiHydraEditor/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279002448,"owners_count":26083386,"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","status":"online","status_checked_at":"2025-10-10T02:00:06.843Z","response_time":62,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["3d-graphics","glew","glfw","hydra","imgui","opengl","openusd"],"created_at":"2025-10-10T02:00:46.269Z","updated_at":"2025-10-10T02:02:06.925Z","avatar_url":"https://github.com/raph080.png","language":"C++","funding_links":[],"categories":["Libraries \u0026 Tools"],"sub_categories":["Technical Explanation"],"readme":"# ImGui Hydra Editor\n\nImGui Hydra Editor is a Hydra editor written in c++ with the ImGui and OpenUSD frameworks.\n\n![UI preview of ImGui Hydra Editor](resources/preview_app.png)\n\nThis project acts as a playground for USD, and most particularly Hydra 2.0. Therefore, the structure of the application remains simple and contains out of the box examples.\n\n## Building\n\nTo build ImGui Hydra Editor, see [BUILDING.md](BUILDING.md) instructions.\n\n## Overview\n\nImGui Hydra Editor is a tool that processes data using the Hydra 2.0 Framework. Every view from the tool has access to read, insert and author the current state\nof Hydra data.\n\n![Views that interact with Hydra data](resources/hydra_data_preview.png)\n\n### Usd Session Layer\n\nFrom the Usd Session Layer view, the user can type a stage from scratch, add some predefined USD Prim (camera, cube, sphere, ...) or load a USD file and author it. The Usd Session Layer then converts the USD Prims to Hydra Prims and inserts them to Hydra data.\n\n### Outliner\n\nThe Outliner view browses all Hydra prims from Hydra data and displays them in a tree view.\n\n### Viewport\n\nThe viewport view authors the transforms (translate, rotate, scale) of Hydra Prims. It also creates and inserts a grid to Hydra data.\n\n### Editor\n\nThe Editor view allows the user to author the display color of the selected Hydra Prim.\n\n### Engine\n\nThe Engine consumes Hydra data with all modifications from the views and generates an image from it.\n\n### Scene Index View\n\nThe Scene Index view displays a nodal view of all available Scene Indices loaded into Hydra as well as they connections. This view also authors the **Active Scene Index** when clicking on a node. Hence all views will update its data according to the Active Scene Index.\n\n### Scene Index Attribute\n\nThe Scene Index Attribute shows all the Hydra attributes from the selection. Attributes are colored based on their origin:\n\n- ${Inherited \\space attribute}$\n- ${\\color{orange}New \\space attribute}$\n- ${\\color{red}Modified \\space value}$\n\n## Scenes Indices\n\nImGui Hydra Editor implements main concepts of Hydra 2.0 framework out of the box, such as:\n* inserting data using [HdSceneIndexBase](https://openusd.org/release/api/class_hd_scene_index_base.html) and UsdImagingStageSceneIndex.\n* authoring data via [HdSingleInputFilteringSceneIndexBase](https://openusd.org/release/api/class_hd_single_input_filtering_scene_index_base.html)\n* merging multiple data source using [HdMergingSceneIndex](https://openusd.org/release/api/class_hd_merging_scene_index.html)\n\n\nThe views in ImGui Hydra Editor make use of those various types of scene index in order to create the final data to feed to Hydra (Hydra data).\n\n![Scene indices Schema](resources/scene_indices_preview.png)\n\n### HdSceneIndexBase\n\nHdSceneIndexBase is used to insert data to Hydra data.\n\nExamples are:\n* UsdImagingStageSceneIndex: used by Usd Session Layer to convert USD data to Hydra data.\n* GridSceneIndex: used by Viewport to create and insert a grid to Hydra data.\n\n### HdSingleInputFilteringSceneIndexBase\n\nHdSingleInputFilteringSceneIndexBase is used to filter Hydra data in order to author the Hydra Prim states.\n\nExamples are:\n* XformFilterSceneIndex: used by Viewport to author the xform of Hydra Prims.\n* ColorFilterSceneIndex: used by Editor to author the display color of Hydra Prims.\n\n### HdMergingSceneIndex\n\nHdMergingSceneIndex is used to merge multiple scene indices together.\n\nExamples are:\n* SceneIndexBases: merge multiple inputs (USD prim \u0026 grid) to a single output.\n* FinalSceneIndex: always contains the scene index with the latest changes.\n\n## Rendering\n\nIn order for the render engine to be more flexible, the render is performed using HdRenderIndex, HdEngine and HdxTaskController. See the code for more information.\n\n## Viewport navigation\n\nThere is two ways to navigate within the viewport: using the guizmo cube or the mouse and keyboard.\n\n![Viewport navigation](resources/viewport_navigation.gif)\n\n### Guizmo cube\n\nKeep pressing on the guizmo cube and move the mouse to rotate around the focus point. Click on faces/edges/vertices from the cube to change the active camera position accordingly.\n\nNote: guizmo cube navigation is not working properly with z up axis (see [Limitation section](#limitations)).\n\n### Mouse and Keyboard\n\nHere are the shortcuts to navigate using the mouse and the keyboard:\n* LMB + Alt: Rotate\n* LMB + Shift: Pan\n* RMB + Alt or Scroll wheel: Zoom\n* F: Focus on selection\n* W: Local translate\n* E: Local rotate\n* R: Local scale\n\n## Additional renderers\n\nEvery renderer that implements a hydra render delegate can be used in this project to extends the renderer list.\n\nHere is an example with two different renderers: Storm, Embree.\n\nFor your curiosity, here are others: [OpenMoonRay](https://docs.openmoonray.org), [Cycle](https://github.com/blender/cycles) and [Arnold](https://github.com/Autodesk/arnold-usd).\n\nOnce the custom render delegates are build, don't forget to set the `PXR_PLUGINPATH_NAME` environment variable before launching the application to make use of them.\n\n![Multi renderers](resources/dual_viewports.png)\n\n## And more\n\nExplore the menu bars of the application and viewports, you may find useful fonctionalities such as:\n* Create new USD objects in the scenes (Camera, Cube, ...)\n* Profile your Hydra data with Active Scene Index\n* Create new views in the main window\n* Switch the active camera to the viewport\n* Show/Hide the grid\n* Show/Hide ambient light, dome light\n* Set global/local transform tool\n* ...\n\n## Limitations\n\nThere is currently some limitations\n\n* ImGuizmo bug: glitchy navigation by using the gizmo cube when the stage up axis is Z (Z up axis is hardcoded in ImGuizmo)\n* ImGuizmo bug: guizmo cube not working if multiple viewports and selection is empty\n* Instances editing (e.g. translate) is not currently supported\n* Single selection\n* No Animation\n* Simple events (no signal/slot implementation)\n* Instanceable not visible in Outliner\n* Instanceable cannot be selected (if so selection will switch to parent)\n* No Undo\n* Grid is on a separate layer at the back\n* Does not keep multiple instances of same view when relaunched","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fraph080%2FImGuiHydraEditor","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fraph080%2FImGuiHydraEditor","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fraph080%2FImGuiHydraEditor/lists"}