DreamShaderLang
Compiler Behavior

Current Limitations

Current boundaries, compatibility notes, and recommended alternatives for DreamShaderLang.

DreamShaderLang intentionally covers the material-authoring patterns that are practical to generate and maintain as text. Some Unreal graph features still require generic nodes or manual Unreal editing.

Graph Limitations

LimitationAlternative
Complex shader control flow directly in GraphMove it to Function or GraphFunction.
Unsupported specialized Unreal node shorthandUse UE.Expression(...).
Ambiguous multi-output expressionsUse explicit variables and output arguments.
Large visual-only node layoutsUse Layout metadata or keep one-off graphs in Unreal.

Type Limitations

LimitationAlternative
Unsupported custom Unreal struct typesUse supported scalar, vector, texture, or MaterialAttributes types.
Ambiguous implicit castsAdd constructors such as vec3(x) or float4(v, 1).
Unsupported texture formsUse documented texture types and plugin-supported parameters.

Import and Package Limitations

LimitationAlternative
Fragile deep package importsExport stable package entry files.
Circular dependenciesMove shared helpers to a lower-level .dsh.
Machine-specific pathsUse project-root or package imports.

Diagnostic Boundaries

Editor diagnostics depend on parser support, reflected Unreal metadata, and bridge export freshness. When a UE.Expression(...) call uses a rare Unreal node, the plugin may only validate it during generation.

Version Migration Tips

Change areaRecommendation
New plugin versionsReview changelog and regenerate bridge metadata.
New VSCode extension versionsRestart the editor if language-service metadata changed.
Decompile exportsTreat exported .dsm / .dsf as a starting point and clean names/layout.

Design Principle

Prefer explicit source for behavior that must be reviewed, regenerated, or shared. Use Unreal's visual editor for exploratory or highly visual one-off graphs, then migrate stable parts into DreamShaderLang.

On this page