DreamShaderLang
Settings

Project Settings

All 17 properties under Project Settings ▸ DreamPlugin ▸ Dream Shader, their real config identifiers, defaults and effects, and the Custom Pass settings object.

Project settings

DreamShader » Settings » Project settings

The project-wide configuration object: seventeen properties under Project Settings ▸ DreamPlugin ▸ Dream Shader, persisted to the project's DefaultEngine.ini.

Declared inC++ — UDreamShaderSettings, a UDeveloperSettings in the DreamShader runtime module
Kindproject settings object
Config file<Project>/Config/DefaultEngine.ini, section [/Script/DreamShader.DreamShaderSettings]

Location

AspectValue
ContainerProject
CategoryDreamPlugin
SectionDreamShader
Section titleDream Shader
Section descriptionDream Shader Settings

The panel is at Project Settings ▸ DreamPlugin ▸ Dream Shader — not under Plugins. Edits made in the panel, and the toggles the editor exposes elsewhere, are written straight back to DefaultEngine.ini.

Settings

Every configurable property, grouped by the category it appears under in the panel.

CategoryUI nameConfig propertyTypeDefaultEffect
MappingsShading Model MappingsShadingModelMappingsTMap<FString, EMaterialShadingModel>emptyExtra or overriding spellings for the ShadingModel setting value. Scanned before the built-in table.
MappingsBlend Mode MappingsBlendModeMappingsTMap<FString, EBlendMode>emptyExtra or overriding spellings for BlendMode / RenderType.
MappingsMaterial Domain MappingsMaterialDomainMappingsTMap<FString, EMaterialDomain>emptyExtra or overriding spellings for MaterialDomain / Domain.
PathsSource DirectorySourceDirectoryFDirectoryPathDShaderRoot scanned for .dsm / .dsf / .dsh sources. Empty falls back to DShader; a relative path resolves against the project directory. <Source>/Packages is derived from it.
PathsGenerated Shader DirectoryGeneratedShaderDirectoryFDirectoryPathIntermediate/DreamShader/GeneratedShadersWhere the generated .ush include is written and the virtual shader directory is mapped. Empty falls back to the default.
PathsScan Plugin Source DirectoriesbScanPluginSourceDirectoriesbooltrueWhen on, every enabled plugin that has a DShader folder contributes a source root of its own. Off leaves the project's Source Directory as the only root.
CompilerPreprocessor Defines (since 1.9.0)PreprocessorDefinesTMap<FString, FString>emptyNames visible to #if in every source the project compiles. Keys are case-sensitive; an empty value is a bare marker, true to #if and to defined(). A key beginning with DS_ is dropped with a warning — that prefix is reserved for the builtins. Editing the map rebuilds the sources that read a changed name.
CompilerDefault Compiler BackendDefaultBackendEDreamShaderDefaultBackendThinCustomBackend for a source file that does not set Settings = { Backend = … }. Changing it rebuilds every source whose build key it changes; one it does not affect is skipped.
CompilerGraph Layout Style (since 2.0.0)GraphLayoutStyleEDreamShaderGraphLayoutStyleBlocksWhat lays a generated graph out: one of the three layouts that read the compiler's IR — Blocks (a page of boxes in source order, named reroutes between them; the default), SourceBands (one band per source statement) and Layered (the whole graph in layers) — or Classic, the 1.x layout. See Graph layout; dsc dump-layout draws the three IR styles without building anything. Not part of the build key: a layout moves nodes, not what they compute. A source is therefore re-laid when it is next rebuilt -- an unchanged one is skipped as usual, so Recompile it (or compile -Force) to see an existing graph in the new style.
CompilerShow Ephemeral MaterialsbShowEphemeralMaterialsboolfalseWhen off, memory-only DreamShader instances report themselves as non-assets and disappear from the Content Browser, asset-registry enumeration and save pickers. Applies to the ThinCustom backend only: a Graph material is a plain UMaterial with no Ephemeral state and is always visible. Read live, on every query.
CompilerAuto Compile On SavebAutoCompileOnSavebooltrueWhen off, the source-directory watcher ignores file changes entirely.
CompilerSave Debounce SecondsSaveDebounceSecondsfloat0.25Quiet period after a file change before compiling. Clamped to [0.05, 10.0]; the slider stops at 2.0. Falls back to 0.25 when the settings object is unavailable.
CompilerVerbose LogsbVerboseLogsboolfalseAdds Display-level logging of the dependent-file compile queue.
DecompilerExport Decompiled LayoutbExportDecompiledLayoutbooltrueWhen on, a decompiled source keeps the node positions: a legacy .dsm carries a Layout = { … } section, and a .dss from the 2.0 decompiler #pragma layout lines (since 2.0.0).
EditorOpen In New WindowbOpenInNewWindowbooltrueWhen off, the VSCode launch command gets --reuse-window.
EditorMaterial Instance SubfolderInstanceSubfolderFStringInstancesSubfolder, relative to the parent material's folder, where the Material Content Browser creates new instances. Empty creates them alongside the parent. The asset is named MI_<ParentName>, uniquified.
EditorSync Source References On Asset Rename (since 1.9.0)bSyncSourceReferencesOnAssetRenamebooltrueWhen on, renaming or moving an asset rewrites the .dsm / .dsf / .dsh files that reference it, backing each one up to <file>.bak first. Project sources only — plugin roots are never touched. See Asset rename sync. Read live, so turning it off takes effect on the next rename.

Rows in bold carry an explicit DisplayName; the others show the name Unreal derives from the property identifier, which drops a leading b from booleans.

Enumerators of EDreamShaderDefaultBackend

EnumeratorMeaning
GraphBuild a visible UMaterial node graph per material.
InstanceDeprecated alias for ThinCustom (since 1.5.0).
ThinCustomBuild the graph on a hidden per-material base and emit a lightweight material instance of it. The default.

Full behaviour, including how a per-file Backend setting overrides this, is on Backend.

Verbatim tooltips

Scan Plugin Source Directories:

When enabled, every enabled plugin that ships a DShader folder contributes its own source root, so a plugin can carry the .dsm/.dsf/.dsh files that build its materials. Plugin roots are discovered and compiled but never rewritten by the editor -- only the project's own source directory is writable. Imports never cross roots: a file resolves its imports against its own root and that root's Packages folder.

Default Compiler Backend:

How DreamShader materializes a source file that does not specify Settings = { Backend = "..." }. ThinCustom (the default) builds the material graph on a hidden per-material base and emits a lightweight, Ephemeral material instance of it -- full feature surface, no visible per-material asset. Graph builds a visible UMaterial node graph. Instance is a deprecated alias for ThinCustom.

Show Ephemeral Materials:

Applies to the ThinCustom/Instance backend only -- it is the only one with an Ephemeral state, which it hides via UDreamShaderMaterialInstance::IsAsset. When enabled, Ephemeral materials appear in the Content Browser like unsaved assets. Disabled by default: the source files are the intended authoring surface, and hiding the materials also prevents accidental Save actions from materializing them to disk. Graph-backend materials are plain UMaterials with no way to opt out of asset enumeration, so they are always visible and this setting does not affect them.

Material Instance Subfolder:

Subfolder, relative to the parent material's folder, where the Material Content Browser creates new material instances. Leave empty to create them alongside the parent.

Sync Source References On Asset Rename:

When enabled, renaming or moving an asset in the editor rewrites the .dsm/.dsf/.dsh files that reference it, so a source keeps naming the asset rather than the path it used to have. Only files under the project source directory are rewritten -- plugin source roots are never touched -- and each file is copied to a .bak next to it before it is written. Batched renames such as Fix Up Redirectors are coalesced into a single pass. Deleting an asset is not covered: a deletion has no new path to write, and the compile error it produces is the correct outcome. Turn this off if you would rather the plugin never edited your source files on its own.

Preprocessor Defines:

Preprocessor defines every .dsm/.dsf/.dsh source compiles with -- what its #if / #elif conditions read. The name answers defined(); a value that parses as an integer compares as a number, anything else as a string; an empty value still counts as defined; a name absent from this table evaluates to 0, as in C. Conditions are evaluated at GENERATION time and the losing branch is cut before the parser sees it, so a condition can select a Domain, a ShadingModel or a whole Outputs block -- none of which a StaticSwitch can reach, because they describe what the material IS rather than what it computes. Editing this table rebuilds only the generated assets whose sources actually read a name that changed. Names are case-sensitive and must match [A-Za-z_][A-Za-z0-9_]*. The DS_ prefix is reserved for the read-only builtins; an entry using it is dropped with a log warning rather than failing the compile, since a settings mistake has no source line to report against.

The builtin names this tooltip alludes to are DS_ENGINE_MAJOR, DS_ENGINE_MINOR, DS_ENGINE_PATCH, DS_PLATFORM, DS_PLUGIN_VERSION and DS_SUBSTRATE; they are listed out in the preprocessor page. The tooltip names them only by their prefix because UHT caps a metadata string at 1024 characters, and spelling all six out went over it.

The mapping maps

The three Mappings entries extend the value spellings accepted by the three enum settings. They are empty by default: the built-in alias tables are rebuilt on demand during resolution and are never materialized into these maps, so an empty panel does not mean "no aliases".

BehaviourDetail
Precedencethe project map is scanned first; the first normalized-key match returns immediately
Shadowingan entry whose key normalizes to a built-in alias replaces it
Disablingan entry mapped to MSM_MAX / BLEND_MAX / MD_MAX makes that spelling fail to resolve, and does not fall through to the built-in
Key matchingtrimmed, lowercased, and stripped of spaces, _ and -
Ambiguitytwo entries whose keys normalize identically are resolved in unspecified order

The complete built-in tables are on Material enums.

Other places these settings are surfaced

SettingAlso reachable from
bShowEphemeralMaterialsTools ▸ DreamShader ▸ Show Ephemeral Materials, and the Project page of the Material Content Browser. Both write the ini and re-broadcast asset creation/removal for every memory-only instance.
DefaultBackend, the three mapping maps, PreprocessorDefinesChanging one in the panel rebuilds the project's sources at once and logs DreamShader setting '{Setting}' changed; regenerating all source files. Each of them is part of the build key, so a source the change does not affect is skipped. A notification follows when persisted generated assets shadow the result.
SourceDirectory, GeneratedShaderDirectoryConsumed by the module's directory helpers; see Generated HLSL and Packages.
bSyncSourceReferencesOnAssetRenameRead on every asset rename by the asset rename sync service, and again when the coalesced batch is flushed. There is no menu entry for it.
PreprocessorDefinesOne of five tiers that make up the define table a compile sees, and the lowest-precedence one that a person edits. C++ registration and providers outrank it, and -Define= on the commandlet outranks those; only the builtin DS_ names outrank everything. See Preprocessor ▸ Where defines come from.

Notes

  • The class is Config=Engine, DefaultConfig, so values live in the project's Config/DefaultEngine.ini, not in a per-user file. They are shared by everyone who checks the project out.
  • There is no persistence on/off toggle. A ThinCustom product is Ephemeral — source files are the authoring surface — and materialization to disk happens at cook, through the commandlet, or through an explicit action. Default Compiler Backend replaced the old In-Memory toggle in 1.5.0. Removed in 2.0.0: Lay Out In-Memory Graphs (bLayoutInMemoryGraphs). Graph layout now always runs; only the large-graph performance guard can skip it. The Show Ephemeral Materials key was bShowInMemoryMaterialsInContentBrowser before 2.0.0 and is migrated on load.
  • GeneratedShaderDirectory is only consulted while the virtual shader directory is unmapped. If a mapping already exists for this project, the existing mapping wins over the setting until the editor restarts.
  • The built-in shader library path setting was removed in 1.3.8; no replacement exists.
  • The C++ surface of this object — the three TryResolve* methods, NormalizeMappingKey and the three BuildDefault*Mappings helpers — is documented in Settings API.

Example

<Project>/Config/DefaultEngine.ini, showing every scalar property at its default value:

[/Script/DreamShader.DreamShaderSettings]
SourceDirectory=(Path="DShader")
GeneratedShaderDirectory=(Path="Intermediate/DreamShader/GeneratedShaders")
DefaultBackend=ThinCustom
bShowEphemeralMaterials=False
bAutoCompileOnSave=True
SaveDebounceSeconds=0.250000
bVerboseLogs=False
bExportDecompiledLayout=True
bOpenInNewWindow=True
InstanceSubfolder=Instances
bSyncSourceReferencesOnAssetRename=True

The ini keys are the raw C++ identifiers, including the b prefix on booleans — bAutoCompileOnSave, not AutoCompileOnSave. The three mapping maps and Preprocessor Defines are container properties; edit them in the Project Settings panel and let the editor write them back. A hand-written entry uses the +Key=((…)) form:

+PreprocessorDefines=(("MOONTOON_LEGACY_TOON", "1"))

DreamShader Custom Pass

A second settings object sits beside this one: UDreamPassSettings, in the DreamShaderPass runtime module, at Project Settings ▸ DreamPlugin ▸ DreamShader Custom Pass. It is saved to the same DefaultEngine.ini, section [/Script/DreamShaderPass.DreamPassSettings], and configures the Custom Pass runtime. It exists on every engine; below UE 5.8 nothing reads it.

CategoryConfig propertyTypeDefaultEffect
RuntimebEnabledbooltrueOff: no pipeline runs anywhere, whatever activates it. r.DreamPass.Enable 0 does the same for one session.
PipelinesGlobalPipelinesarray of FDreamPassGlobalPipeline — Pipeline, bEnabled, Priority, OverridesemptyPipelines that apply to every view of every world, at weight 1. Loaded when a world starts, and again when the list is edited.
LayersLayerNamesarray of FName, at most 32emptyThe pass layers: a UDreamPassLayerComponent gives primitives some of them, and a mesh pass's Filter = Layer(Name) selects the primitives that have one. The order is the bit order — renaming a layer is safe; moving one re-targets every compiled pipeline that names it until those pipelines are compiled again.
[/Script/DreamShaderPass.DreamPassSettings]
bEnabled=True
+GlobalPipelines=(Pipeline="/Game/Effects/CP_Wind.CP_Wind",bEnabled=True,Priority=0.000000)
+LayerNames=Highlight
+LayerNames=XRay

See also

On this page