Add a Gaussian Splat and octomap rendering sample#1247
Conversation
… Voxel Point Cloud map using Octomap. Also demonstrates how to use ImGUI in a project with added functionality and positioning of rendered assets.
|
Wanted to give this a first try, but no matter what I tried, I wasn't able to get the newly added OctoMap submodule to checkout. Any ideas? Tried to clean reset, did a recursive checkout of all submodules, etc. |
Same problem for me it looks like. |
Extends the octomap sample with three view modes: Octomap, GLTF Regular, and GLTF Splats. Implements splat rendering pipeline with per-instance attributes and premultiplied alpha blending. Adds GLTF mesh rendering with vertex color support. Includes new shader files for splat geometry and fragment evaluation. Updates camera to FirstPerson type for WASD movement. Fixes cube winding order and improves command buffer recording. Adds proper license headers to all new and modified files.
Standardizes code formatting with consistent indentation and brace style. Reorders includes alphabetically with core utilities first. Consolidates constructor initializer list to single line. Adjusts spacing and alignment throughout for consistency.
Ensures submodules are fully initialized and updated in each job by adding explicit `git submodule update --init --recursive` command after checkout, complementing the existing `submodules: "recursive"` checkout option.
Replaces spaces with tabs to maintain consistent formatting throughout the .gitmodules file.
Adds update_overlay method override that delegates to custom ImGUI implementation in render() function and executes additional UI callbacks when provided.
Renames header guards in ImGUIUtil.h from ORB_SLAM3_IMGUI_H to IMGUI_UTIL_H to match the actual file name. Excludes samples/complex/render_octomap/octomap directory from CI workflow file checks.
… with static_cast Improves code style consistency by adding braces to all single-statement if blocks. Replaces C-style casts with appropriate static_cast and reinterpret_cast. Filters out third_party/glfw warnings from clang-tidy output in CI workflow.
Replaces leading spaces with tabs to maintain consistent formatting throughout the file.
|
This does compile for me now (after explicitly updating submodules), but crashes at startup with the following error: "ERROR: Filestream to assets/scenes/octmap_and_splats/octMap.bin not open, nothing read." I do see octMap.bin directly below the assets/scene folder. |
|
Yeah, I was holding off on uploading the map until I took a good one that
includes the splats. Will upload as soon as I can go to the office and
capture it
…On Thu, Jan 1, 2026, 1:30 PM Sascha Willems ***@***.***> wrote:
*SaschaWillems* left a comment (KhronosGroup/Vulkan-Samples#1247)
<#1247 (comment)>
This does compile for me now (after explicitly updating submodules), but
crashes at startup with the following error:
"ERROR: Filestream to assets/scenes/octmap_and_splats/octMap.bin not open,
nothing read."
I do see octMap.bin directly below the assets/scene folder.
—
Reply to this email directly, view it on GitHub
<#1247 (comment)>,
or unsubscribe
<https://github.com/notifications/unsubscribe-auth/AA5IAY2XXH22KNPXLRU5TK34EWGY3AVCNFSM6AAAAABTTGIWPOVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZTOMBUGEZDQMRWGA>
.
You are receiving this because you authored the thread.Message ID:
***@***.***>
|
|
Not supported on direct-to-display platforms. Doesn't even build the sample. |
Replaces GLFW-specific key handling with framework's KeyCode enum for platform-agnostic input. Renames handleKey to handle_key_event to match framework naming conventions. Updates modifier key state tracking to use ImGui's key state. Removes GLFW dependency and platform-specific conditionals from ImGUI implementation. Enables render_octomap sample on all platforms including Android, iOS, and Direct-to-Display.
Updates copyright headers across framework components and shaders from 2025 to 2026.
Updated copyright headers across various project files to reflect the year 2026. This ensures consistency and compliance with licensing requirements.
|
Give it another try Gary, I removed the input handling by GLFW assumption used during development. Although, I still haven't had the time to generate a new map to go along with this; it should build for everyone on all devices and then run until you get to Sascha's problem of not having the map yet. |
Confirmed. This now gets to the same point for me. |
# Conflicts: # .gitmodules # framework/CMakeLists.txt
…ting spec Moves Gaussian splatting attributes from extension object to primitive attributes using KHR_gaussian_splatting namespace. Updates attribute parsing to check KHR_gaussian_splatting:ROTATION, SCALE, OPACITY, and SH_DEGREE_0_COEF_0 in primitive attributes first, with fallback to old draft extension properties and COLOR_0. Simplifies extension parsing logic and removes nested property structures. Updates code examples in tutorial documentation to reflect new attribute structure.
|
Are these errors expected: |
|
Here's what I get when I run this: It looks like there are no .spv files in the shaders/render_octomap/glsl folder at all currently. |
There was a problem hiding this comment.
I don't get any octomap asset files.
When I checkout this PR, switch to branch 'complex-octomap-rendering', and update the asset submodule, everything seems to run fine, but there is no octmap_and_splats in assets/scenes. Any idea how to get that?
| continue; | ||
| std::string name = entry.path().filename().string(); | ||
| if (name.find("_cell_") != std::string::npos && name.size() >= 5 && | ||
| name.substr(name.size() - 5) == ".gltf") |
There was a problem hiding this comment.
Maybe name.ends_with( ".gltf" )?
There was a problem hiding this comment.
ends_with is C++20. I don't know if we can use it. I think we have a max upper bound on C++ that we can use and I don't remember off the top of my head if it was above 20 or not.
There was a problem hiding this comment.
We upped that to C++20 several months ago for all platforms, so should be good.
There was a problem hiding this comment.
I thought we had to downgrade it again as there was a max version of gcc that we were allowed to use as some couldn't upgrade their developer systems.
It should just be in assets/scenes/octmap_and_splats There should be 21 files in there. Here's the assets commit if you want to grab it directly: KhronosGroup/Vulkan-Samples-Assets@8db8ce9...6900e07 |
But I can't click on the buttons (we don't have a mouse). Normally the arrow keys move around in the UI, but not in this sample it seems. |
Okay, gimme a bit and there'll be a new version that lets you move around arrow keys as normal. The complex sample I original designed to use less of the framework so it doesn't inherit the input. Easy fix working on it and the shader compiler now. |
… in built spv files so platforms that oddly don't auto build will work.
This version should allow you to do keyboard nav in imgui. |
Sadly not: |
|
Could documentation be expanded at least a bit? The code has very few comments and the readme is mostly talking about the topic and not the sample itself. |
…es from what we do in GLTF_Loader in the framework, but it's a good idea).
|
The UI traversal is now working, thanks. |
…g modes, and key implementation details.
I updated the README.adoc. If you'd like specific information let me know and I'll add it. I think I'm headed to bed for a nap so might be a few hours before I do another update. |
|
That's perfect. Thank you very much 👍🏻 |
|
No reflection on the quality of the sample but we should hold off merging this until internal discussions are fully resolved (but please continue to review). |
… the rest of the documentation.
| The preceding high-level background describes how we get to a situation where there's plenty of desire to be able to work with and render point clouds that are dynamically generated. ARCore, and ARKit are both able to create a point cloud map, and everything from Drones to robots use this same basic system to register and deal with the world around them. To navigate a room, a drone/robot might need to be able to determine if a voxel is occupied or not by using an occupancy grid. This gives rise to solutions which are optimized for storing such maps that can be dynamically updated in real time. | ||
| The preceding high-level background describes how we get to a situation where there's plenty of desire to be able to work with and render point clouds that are dynamically generated. ARCore and ARKit are both able to create a point cloud map, and everything from drones to robots use this same basic system to register and deal with the world around them. To navigate a room, a drone/robot might need to be able to determine if a voxel is occupied or not by using an occupancy grid. This gives rise to solutions which are optimized for storing such maps that can be dynamically updated in real time. | ||
|
|
||
| The library https://octomap.github.io/[octomap] provides just such a library. |
There was a problem hiding this comment.
"The library ... provides just such a library"?
Maybe better: "... provides such functionality"?






Description
This is a sample showing a complex interaction with other libraries to demonstrate how to work with libraries and tools int he wild. Here Octomap is used to demonstrate Occupancy grid rendering. We also demonstrate how to use ImGUI in a project with added functionality and positioning of rendered assets.
General Checklist:
Please ensure the following points are checked:
Note: The Samples CI runs a number of checks including:
If this PR contains framework changes:
batchcommand line argument to make sure all samples still work properlySample Checklist
If your PR contains a new or modified sample, these further checks must be carried out in addition to the General Checklist: