Skip to main content

Flow

The ShadingFlow plugin provides a visual material editor within Tellusim Engine applications. It enables node-based material authoring via a graph-based UI and supports live material preview.

ShadingFlow dynamically generates MaterialShading shading files for use in real-time rendering pipelines.

info

ShadingFlow is built on top of the ControlFlowGLSL node editor.

info

This plugin is integrated into Tellusim Explorer.

#include <materials/shading/include/TellusimShadingFlow.h>

Example

// Create ShadingFlow control attached to a UI panel
ShadingFlow shading_flow(&right_panel);
if(!shading_flow.create()) return false;

// Set callback to update the material when the flow graph changes
shading_flow.setChangedCallback([&](ShadingFlow *flow) {
if(flow->getSource() && material_shading.create(flow->getSource() + "#pragma dynamic\n#pragma quiet\n")) {
geometry_mesh.setMaterial(0, material_shading);
MaterialRoot::PassMask mask = MaterialRoot::PassMaskNone;
if(flow->getSource().contains("deferred")) mask |= MaterialRoot::PassMaskDeferred;
if(flow->getSource().contains("forward")) mask |= MaterialRoot::PassMaskForward;
if(flow->getSource().contains("transparent")) mask |= MaterialRoot::PassMaskTransparent;
if(flow->getSource().contains("shadow_map")) mask |= MaterialRoot::PassMaskShadowMap;
material_shading.setPassMask(mask);
material_shading.updateScene();
} else {
geometry_mesh.setMaterial(0, material_metallic);
}
object_mesh.updateGeometries();
object_mesh.updateScene();
});

// Undo/redo actions
if(window.getKeyboardKey('z', true) && window.getKeyboardKey(Window::KeyOption)) {
if(window.getKeyboardKey(Window::KeyShift)) shading_flow.redo();
else shading_flow.undo();
}
if(window.getKeyboardKey('y', true) && window.getKeyboardKey(Window::KeyOption)) {
shading_flow.redo();
}