Skip to content

Gaussian Splat Artist Pipeline

Last verified: 2026-02-13.

Scope

For artists and technical artists using inspector tools, hot reload, brush edits, and bake actions inside the editor. This page covers in-editor pipeline details after you already know the overall job. It complements the canonical Artist Workflow Overview.

Purpose

Use this workflow to import .ply/.spz assets, iterate with inspector brush tools, and keep node data synchronized with source-file changes.

Usage

Task Action Implementation reference
Import a source file Open the Gaussian Splatting bottom panel and click Import Gaussian, then select a res:// .ply or .spz file. modules/gaussian_splatting/editor/gaussian_editor_plugin.cpp:323, modules/gaussian_splatting/editor/gaussian_editor_plugin.cpp:329, modules/gaussian_splatting/editor/gaussian_editor_plugin.cpp:566, modules/gaussian_splatting/editor/gaussian_editor_plugin.cpp:585
Reimport an existing asset In GaussianSplatAsset inspector, click Reimport... to reopen import settings from stored metadata. modules/gaussian_splatting/editor/gaussian_inspector_plugins.cpp:320, modules/gaussian_splatting/editor/gaussian_editor_plugin.cpp:1171
Enable runtime debug view (debug builds) In Gaussian Splat Overview, toggle Runtime Preview and Residency HUD. modules/gaussian_splatting/editor/gaussian_inspector_plugins.cpp:753, modules/gaussian_splatting/editor/gaussian_inspector_plugins.cpp:760, modules/gaussian_splatting/nodes/gaussian_splat_node_3d.cpp:249
Apply brush edits Set center/radius/strength/hardness/color in Painterly Brush Tools, then click Apply Brush, Commit, or Revert. modules/gaussian_splatting/editor/gaussian_inspector_plugins.cpp:745, modules/gaussian_splatting/editor/gaussian_inspector_plugins.cpp:755, modules/gaussian_splatting/editor/gaussian_inspector_plugins.cpp:765, modules/gaussian_splatting/editor/gaussian_editor_plugin.cpp:944
Bake or restore color grading Use Bake Color Grading or Restore Original in the node inspector. modules/gaussian_splatting/editor/gaussian_inspector_plugins.cpp:788, modules/gaussian_splatting/editor/gaussian_inspector_plugins.cpp:795, modules/gaussian_splatting/nodes/gaussian_splat_node_3d.cpp:1794, modules/gaussian_splatting/nodes/gaussian_splat_node_3d.cpp:1821
Hot reload behavior Current behavior Implementation reference
Watch registration Opening import settings for a source file emits watch_path_requested before import confirmation. modules/gaussian_splatting/editor/gaussian_import_dialog.cpp:897, modules/gaussian_splatting/editor/gaussian_editor_plugin.cpp:1022
Poll interval Watches are processed on a 0.1-second timer. modules/gaussian_splatting/editor/gaussian_editor_plugin.cpp:1068
.ply changes The editor reimports with stored options and updates the bound node. modules/gaussian_splatting/editor/gaussian_editor_plugin.cpp:1125, modules/gaussian_splatting/editor/gaussian_editor_plugin.cpp:1153, modules/gaussian_splatting/editor/gaussian_editor_plugin.cpp:1164
Non-.ply watched paths The resource is reloaded from disk and the node is force-updated. modules/gaussian_splatting/editor/gaussian_editor_plugin.cpp:1155, modules/gaussian_splatting/editor/gaussian_editor_plugin.cpp:1164

API

API Behavior Implementation reference
GaussianData.apply_brush_stroke(center, radius, color, opacity, hardness) Stages runtime color and opacity edits with radial falloff and records a capped brush history (2048). modules/gaussian_splatting/core/gaussian_data.cpp:893, modules/gaussian_splatting/core/gaussian_data.cpp:907
GaussianData.commit_runtime_changes() Writes staged runtime data into base Gaussian data and clears runtime buffers. modules/gaussian_splatting/core/gaussian_data.cpp:814, modules/gaussian_splatting/core/gaussian_data.cpp:845
GaussianData.revert_runtime_changes() Discards staged runtime buffers without clearing recorded brush history. modules/gaussian_splatting/core/gaussian_data.cpp:848, modules/gaussian_splatting/core/gaussian_data.cpp:957
GaussianData.get_brush_strokes() Returns recorded strokes as dictionaries for tooling/serialization hooks. modules/gaussian_splatting/core/gaussian_data.cpp:948
GaussianSplatNode3D.set_runtime_preview_enabled(enabled) Switches renderer preview mode to runtime modifications and restores prior mode when disabled. modules/gaussian_splatting/nodes/gaussian_splat_node_helpers.cpp:682, modules/gaussian_splatting/nodes/gaussian_splat_node_helpers.cpp:694
GaussianSplatNode3D.set_show_residency_hud(show) Toggles renderer residency HUD and persists the preference into project settings. modules/gaussian_splatting/nodes/gaussian_splat_node_helpers.cpp:701, modules/gaussian_splatting/core/gaussian_splat_settings_manager.cpp:114
GaussianSplatNode3D.bake_color_grading() / restore_color_grading() Bakes grading into SH DC colors, disables live grading after bake, and restores original colors on demand. modules/gaussian_splatting/nodes/gaussian_splat_node_3d.cpp:1794, modules/gaussian_splatting/nodes/gaussian_splat_node_3d.cpp:1813, modules/gaussian_splatting/nodes/gaussian_splat_node_3d.cpp:1821

Examples

@tool
extends Node

func apply_and_commit_brush(node: GaussianSplatNode3D) -> void:
    var renderer := node.get_renderer()
    if renderer == null:
        return
    var data := renderer.get_gaussian_data()
    if data == null:
        return
    var local_center := node.to_local(node.global_position)
    data.apply_brush_stroke(local_center, 1.5, Color(1.0, 0.8, 0.6, 1.0), 0.5, 1.0)
    data.commit_runtime_changes()
    node.force_update()
@tool
extends Node

func discard_staged_brush_edits(node: GaussianSplatNode3D) -> void:
    var renderer := node.get_renderer()
    if renderer == null:
        return
    var data := renderer.get_gaussian_data()
    if data == null:
        return
    data.revert_runtime_changes()
    node.force_update()

Troubleshooting

Symptom Resolution Implementation reference
Runtime Preview or Residency HUD does not appear Use a debug build because the custom debug inspector controls are compiled only under DEBUG_ENABLED and debug properties are hidden in release. modules/gaussian_splatting/editor/gaussian_inspector_plugins.cpp:646, modules/gaussian_splatting/nodes/gaussian_splat_node_3d.cpp:471
Import dialog rejects the selected file Move the file under res:// and retry because the importer rejects non-project paths. modules/gaussian_splatting/editor/gaussian_editor_plugin.cpp:566, modules/gaussian_splatting/editor/gaussian_editor_plugin.cpp:577
Brush edits disappear after reimport Commit edits before reimport because loading new file data resets runtime edits and clears recorded brush strokes. modules/gaussian_splatting/core/gaussian_data.cpp:1016, modules/gaussian_splatting/core/gaussian_data.cpp:1017
Bake Color Grading fails Assign a ColorGradingResource and load Gaussian data before baking. modules/gaussian_splatting/nodes/gaussian_splat_node_3d.cpp:1795, modules/gaussian_splatting/nodes/gaussian_splat_node_3d.cpp:1800