09819091c4
Browser column lists all scene materials plus a searchable create-node list; Show Graph (or double-click) loads a material into the node-graph work area. The graph shows the entire network including MaterialX (.mtlx) node graphs, resolving connections through NodeGraph boundaries via UsdShadeUtils::GetValueProducingAttributes, with layered auto-layout for nodes lacking authored uiPosition. Canvas navigates viewport-style (Alt+MMB pan / Alt+RMB zoom) and TAB opens a Nuke-style search popup. Selecting a node shows a typed property editor (live-apply, one undo command per edit) and previews that node's output on the shader ball. The preview renders through its own Hydra engine into a scratch stage that composes the material via a reference to the source root layer (so referenced .mtlx materials work), re-renders until progressive delegates (Arnold/Cycles/Embree) converge, and lights with HDR dome presets (External/Room/Interior/Sunset; CC0 Poly Haven EXRs fetched at CMake configure). texture:format is authored latlong explicitly - left automatic, hdArnold falls back to Arnold's angular fisheye default - and hdCycles gets a -90 X pole rotation to match Storm's +Y-pole sampling. Mutations go through new ICommand subclasses (create shader node, connect/disconnect attrs). imgui-node-editor is vendored (gitignored) with a local one-line patch: c_ScrollButtonIndex 1->2 for MMB pan. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
35 lines
1.1 KiB
C++
35 lines
1.1 KiB
C++
#pragma once
|
|
|
|
#include "../CommandHistory.h"
|
|
#include <pxr/usd/usd/stage.h>
|
|
#include <pxr/usd/sdf/path.h>
|
|
#include <pxr/base/gf/vec2f.h>
|
|
#include <string>
|
|
|
|
namespace UsdLayerManager {
|
|
|
|
/// Creates a UsdShadeShader prim with the given Sdr shader identifier and
|
|
/// authors its canvas position as uiPosition custom data (see
|
|
/// docs/adr — Material Editor node-graph layout is stored as prim
|
|
/// customData, not scene data, so it never affects composition/renders).
|
|
class CreateShaderNodeCommand : public ICommand {
|
|
public:
|
|
CreateShaderNodeCommand(pxr::UsdStageRefPtr stage,
|
|
const pxr::SdfPath& path,
|
|
const std::string& shaderId,
|
|
const pxr::GfVec2f& uiPosition);
|
|
|
|
void Execute() override;
|
|
void Undo() override;
|
|
std::string GetDescription() const override { return m_description; }
|
|
|
|
private:
|
|
pxr::UsdStageRefPtr m_stage;
|
|
pxr::SdfPath m_path;
|
|
std::string m_shaderId;
|
|
pxr::GfVec2f m_uiPosition;
|
|
std::string m_description;
|
|
};
|
|
|
|
} // namespace UsdLayerManager
|