Unreal Material and VFX Workflow
flopperam/unreal-engine-mcp
Walks an Unreal Engine MCP agent through building materials, Niagara particle systems, Chaos destruction, and curve assets with inspect-then-edit steps.
Clean up a machine-written DreamShader source — a decompiled or migrated .dss (or a 1.x .dsm / .dsf export) — into one a person would have written, without changing what it builds, and prove the…
$ npx skills add TypeDreamMoon/DreamShader --skill dream-shader-optimize -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install TypeDreamMoon/DreamShader dream-shader-optimize --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/TypeDreamMoon/DreamShader.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.skill/dream-shader-optimize .claude/skills/dream-shader-optimize && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "dream-shader-optimize" agent skill from https://github.com/TypeDreamMoon/DreamShader/tree/main/.skill/dream-shader-optimize into .claude/skills/dream-shader-optimize/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "dream-shader-optimize", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/TypeDreamMoon/DreamShader/tree/main/.skill/dream-shader-optimizeType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add TypeDreamMoon/DreamShader --skill dream-shader-optimize -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install TypeDreamMoon/DreamShader dream-shader-optimize --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/TypeDreamMoon/DreamShader.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.skill/dream-shader-optimize .agents/skills/dream-shader-optimize && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "dream-shader-optimize" agent skill from https://github.com/TypeDreamMoon/DreamShader/tree/main/.skill/dream-shader-optimize into .agents/skills/dream-shader-optimize/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "dream-shader-optimize", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add TypeDreamMoon/DreamShader --skill dream-shader-optimize -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install TypeDreamMoon/DreamShader dream-shader-optimize --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/TypeDreamMoon/DreamShader.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.skill/dream-shader-optimize .cursor/skills/dream-shader-optimize && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "dream-shader-optimize" agent skill from https://github.com/TypeDreamMoon/DreamShader/tree/main/.skill/dream-shader-optimize into .cursor/skills/dream-shader-optimize/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "dream-shader-optimize", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/TypeDreamMoon/DreamShader.git --path .skill/dream-shader-optimize--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add TypeDreamMoon/DreamShader --skill dream-shader-optimize -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install TypeDreamMoon/DreamShader dream-shader-optimize --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/TypeDreamMoon/DreamShader.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.skill/dream-shader-optimize .gemini/skills/dream-shader-optimize && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "dream-shader-optimize" agent skill from https://github.com/TypeDreamMoon/DreamShader/tree/main/.skill/dream-shader-optimize into .gemini/skills/dream-shader-optimize/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "dream-shader-optimize", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install TypeDreamMoon/DreamShader dream-shader-optimizeInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add TypeDreamMoon/DreamShader --skill dream-shader-optimize -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/TypeDreamMoon/DreamShader.git skills-src && mkdir -p .github/skills && cp -r skills-src/.skill/dream-shader-optimize .github/skills/dream-shader-optimize && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "dream-shader-optimize" agent skill from https://github.com/TypeDreamMoon/DreamShader/tree/main/.skill/dream-shader-optimize into .github/skills/dream-shader-optimize/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "dream-shader-optimize", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add TypeDreamMoon/DreamShader --skill dream-shader-optimize -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install TypeDreamMoon/DreamShader dream-shader-optimize --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/TypeDreamMoon/DreamShader.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.skill/dream-shader-optimize .opencode/skills/dream-shader-optimize && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "dream-shader-optimize" agent skill from https://github.com/TypeDreamMoon/DreamShader/tree/main/.skill/dream-shader-optimize into .opencode/skills/dream-shader-optimize/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "dream-shader-optimize", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
dream-shader-optimizeClean up a machine-written DreamShader source — a decompiled or migrated .dss (or a 1.x .dsm / .dsf export) — into one a person would have written, without changing what it builds, and prove the…
Dream Shader Optimize is an agent skill from TypeDreamMoon/DreamShader. Clean up a machine-written DreamShader source — a decompiled or migrated .dss (or a 1.x .dsm / .dsf export) — into one a person would have written, without changing what it builds, and prove the graph is unchanged. Use when asked to optimize, clean up, tidy, refactor or make readable a source produced by the DreamShader decompiler or by dsc migrate.
Its SKILL.md is about 1.9k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Game Development, covering Shaders and Reverse engineering and malware. It works with Unreal Engine. The repository describes itself as: Unreal Engine Material DSL. Use Dream Shader Lang Write Unreal Material. Simple · Fast · Full syntax · HLSL GLSL Lang Support. The licence is MIT.
Read from SKILL.md and the folder at commit d20819f. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
pwshgitFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use git, which can reach the network depending on how they are called.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Dream Shader Optimize loads about 1.9k tokens when it runs. Until then it costs about 93 tokens; SKILL.md has 1,009 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from TypeDreamMoon/DreamShader at commit d20819f, republished under its MIT licence (© TypeDreamMoon). 1,009 words, ~1,941 tokens.
.claude/skills/dream-shader-optimize/SKILL.md (or your agent's skills folder).<file>A decompiled or migrated source builds the right graph, but it reads like a machine wrote it. This skill turns it into the file a person would have written — and proves, node for node, that the graph did not change.
Paths below are relative to the plugin root, Plugins/DreamShader/.
Behaviour must not change. Renaming a local, inlining a value read once, naming a value read twice,
moving repeated logic into a helper, swapping a class-exact node call for the HLSL that builds the same node —
safe. Reordering lerp arguments, folding pow(x, 2) into x * x, dropping a saturate, renaming a
parameter — not: those are changes, and they belong in a separate, explicitly requested edit.
1 — Read the file, its header warnings and the language. Every // Warning: DSHnnnn: … line under
// Decompiled by DreamShader from … names something the text cannot state the way the asset has it; they
are the work list (Docs/diagnostics/DSH9xxx.md). Read
reference/dss.md.
A .dsm / .dsf from -Format Legacy? Do not clean 1.x text by hand. Decompile the asset again as 2.0
(the default) — or dsc migrate the file (dream-shader-migrate) — and
optimize the .dss. The 2.0 text starts far cleaner: a value read once is already inline, one read twice
already has one local, literals are exact.
2 — Capture the graph before touching anything. dump-graph generates the source in memory and writes a
canonical JSON of each asset's graph — node classes, properties, connections, pin order; no coordinates, no
GUIDs. It writes no asset:
pwsh -File Plugins/DreamShader/.skill/dsc.ps1 dump-graph DShader/Decompiled/Materials/Game/M_Steel.dss -Out Saved/Optimize/beforeIf an asset of that path already exists on disk, dump-graph reads it as it stands instead of generating it
(the run says so). A fresh decompile under Decompiled/ has none.
3 — Apply the passes below. Then check it.
4 — Prove nothing changed.
pwsh -File Plugins/DreamShader/.skill/dsc.ps1 dump-graph DShader/Decompiled/Materials/Game/M_Steel.dss -Out Saved/Optimize/after
git diff --no-index -- Saved/Optimize/before Saved/Optimize/afterEvery hunk is a behavioural difference. The only acceptable ones are those the user asked for, and the
Constant nodes a -Readable decompile adds (the shader is the same). Anything else: undo that pass.
5 — Retarget, last. Move the file to the place that names the original asset, or give its export a
/// @name /Game/Materials/Metal/M_Steel — the step that makes this source authoritative. Then
compile -Force -CleanNew once; delete nothing until the rebuilt asset has been looked at in the editor.
6 — Report what changed, the dump diff verdict, and — separately — every header warning you could not resolve from the source alone. That list is for the human; it needs the original asset open.
Each // Warning: is something the asset has and the text could not say. Some are fixed in the source (a
function asset that moved: correct the /// @asset path); some only in the original asset (re-assign it, decompile
again); some are accepted with the user (a node property the language cannot state). Delete a warning line only
once it is resolved or accepted.
Locals named after their node (Multiply_2, Sample, Combined) become what the value is: scanline,
bandPhase, edgeFalloff.
#pragma layout(Node, Var = …) line too, or that position is orphaned.uniform's name is the parameter's name. Renaming it renames the parameter, and every material instance
that overrides it silently loses the override. Keep the name — or rename with /// @name <the old name> above
it, which keeps the parameter.export function's name is the asset's name: renaming it moves the asset unless /// @name keeps it.UE.Multiply(A = x, B = y) is x * y; UE.LinearInterpolate(A = a, B = b, Alpha = t) is lerp(a, b, t). Write
the HLSL where it builds the same node, and keep UE.<Class>(…) where the language has no spelling for it. Or
decompile again with -Readable, which does this throughout (the graph may gain Constant nodes; the shader does
not change).
Logic written out twice becomes a helper (float3 Tint(float3 C, float K) { … }, no linkage keyword). A helper is
inlined at each call, and two identical calls are one node, so the graph does not grow.
#pragma layout(…) lines are the node positions of the original graph and #pragma region its comment boxes.
They change no behaviour, and without them a large graph comes back auto-laid-out. Keep them.
The 2.0 decompiler writes the shortest decimal that reads back as the same float, so 6.2831855 is the value
the asset holds. "Restoring" 6.2831853 changes nothing; rounding to 6.28 changes the material.
The 1.x exporter (-Format Legacy) is a migration starting point, not a guarantee. What to know about its text:
Settings always starts with Domain, ShadingModel and BlendMode, whether or not they were set. Backend is
never written, so the file rebuilds on the project default — add Backend = "Graph"; if the graph must stay a
plain material.ShadingModel = "Substrate" is forced when a Base.FrontMaterial was decompiled. Do not "correct" it.MaterialFunctionCall with no
function becomes 0.0, and a graph cycle a default literal — both with a warning.6.2831853 → 6.283185): restore recognisable constants.DS_Shared_N names are DreamShader's own reroute nodes, carried over from a graph DreamShader built.ParameterName="…" means the identifier had to differ from the parameter: renaming the identifier is safe,
deleting ParameterName is not.Decompiled/… until Shader(Name=…) is retargeted.The full table of what each decompiler reproduces:
Docs/tools/decompiler.md.
Decompiled/ once you own it.@sort is the material instance's parameter order. Reordering the uniform lines is free; changing a
@sort value changes what an artist sees..dsi of overrides only — there is little to optimize, and its
uniform names must match the parent's exactly.dump-graph boots the editor too. Capture before, apply every pass, capture after — two runs, not one per
pass.dream-shader-decompile — producing the inputdream-shader-verify — check and compileDocs/tools/commandlet.md — dump-graph and diffing two captures© TypeDreamMoon, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in .skill/dream-shader-optimize of TypeDreamMoon/DreamShader.
Open the folder on GitHubat commit d20819f
Dream Shader Optimize next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Dream Shader Optimize this skillTypeDreamMoon/DreamShader | 106 | — | ~1.9k | Automated safety check: Pass | MIT | |
| Unreal Material and VFX Workflowflopperam/unreal-engine-mcp | 1.1k | — | ~927 | Automated safety check: Pass | None | |
| UMG Material MCPwinyunq/UnrealMotionGraphicsMCP | 210 | — | ~913 | Automated safety check: Pass | MIT | |
| Game DeveloperJeffallan/claude-skills | 12k | — | ~1.5k | Automated safety check: Pass | MIT | |
| Scenario Unreal Materialsscenario-labs/skills | 931 | — | ~4.6k | Automated safety check: Pass | MIT | |
| Gamedev Shadersericrisco/rsc-harness | 174 | — | ~3.6k | Automated safety check: Pass | MIT |
flopperam/unreal-engine-mcp
Walks an Unreal Engine MCP agent through building materials, Niagara particle systems, Chaos destruction, and curve assets with inspect-then-edit steps.
winyunq/UnrealMotionGraphicsMCP
Creates, edits and compiles Unreal Engine 5.8 material assets as one HLSL Custom node through the UMG MCP bridge, instead of editing .uasset files directly.
Jeffallan/claude-skills
Covers game programming in Unity and Unreal Engine: ECS design, physics, multiplayer networking, shaders and profiling toward a 60 FPS target.
scenario-labs/skills
A skill your agent uses when a UE5 task involves materials or textures: a master material and instances for a kit, Substrate or legacy, Blendable vs Adaptive GBuffer, glass, emissive screens…
ericrisco/rsc-harness
A skill your agent uses when authoring or debugging a shader, material, VFX, or full-screen post-process in a game engine — Godot 4.x .gdshader, Unity 6 URP/HDRP, Unreal 5.x Materials, effect…
winyunq/UnrealMotionGraphicsMCP
Builds and edits Unreal Engine UMG interfaces through the Unreal Motion Graphics MCP, covering widget trees, HLSL materials, Sequencer animations and readback checks.
TypeDreamMoon/DreamShader
Write a new DreamShader source from a plain-language description — a material, material function, layer, material instance or Custom Pass pipeline — then check and compile it headlessly to prove it…
TypeDreamMoon/DreamShader
Export an existing Unreal material, material function, layer, layer blend, material instance or Custom Pass pipeline back into DreamShaderLang source headlessly, so a hand-built material graph or…
TypeDreamMoon/DreamShader
Resolve a DreamShader compile error or warning — look its DSH code up, explain the cause, and fix the source — or find out why a DreamShader material silently comes out wrong.
TypeDreamMoon/DreamShader
Rewrite DreamShaderLang 1.x sources (.dsm / .dsf / .dsh) as 2.0 .dss with dsc migrate, which proves each rewrite builds the same graph before it writes anything.
TypeDreamMoon/DreamShader
Check and compile DreamShader sources headlessly — one file or the whole DShader tree — without opening the Unreal editor, and read back every diagnostic with its file, line and code.
Works with
Categories
Clean up a machine-written DreamShader source — a decompiled or migrated .dss (or a 1.x .dsm / .dsf export) — into one a person would have written, without changing what it builds, and prove the…. Dream Shader Optimize is an agent skill from TypeDreamMoon/DreamShader.dsf export) — into one a person would have written, without changing what it builds, and prove the graph is unchanged.
Dream Shader Optimize fits situations like: asked to optimize; make readable a source produced by the DreamShader decompiler.
Run `npx skills add TypeDreamMoon/DreamShader --skill dream-shader-optimize -a claude-code`. Or copy the skill folder (.skill/dream-shader-optimize in TypeDreamMoon/DreamShader) into .claude/skills/dream-shader-optimize in your project. Claude Code loads it when a task matches its description.
Run `npx skills add TypeDreamMoon/DreamShader --skill dream-shader-optimize -a codex`. Or copy the skill folder (.skill/dream-shader-optimize in TypeDreamMoon/DreamShader) into .agents/skills/dream-shader-optimize in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add TypeDreamMoon/DreamShader --skill dream-shader-optimize -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/dream-shader-optimize, .gemini/skills/dream-shader-optimize, .github/skills/dream-shader-optimize and .opencode/skills/dream-shader-optimize in your project.
Going by SKILL.md and its folder, Dream Shader Optimize needs the command-line tools its instructions call (pwsh and git).
SKILL.md contains no URLs. Its commands use git, which can reach the network depending on how they are called. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Dream Shader Optimize is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 1.9k tokens (SKILL.md is roughly 7.8k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Dream Shader Optimize: Unreal Material and VFX Workflow (flopperam/unreal-engine-mcp, 1.1k stars), UMG Material MCP (winyunq/UnrealMotionGraphicsMCP, 210 stars), Game Developer (Jeffallan/claude-skills, 12k stars) and Scenario Unreal Materials (scenario-labs/skills, 931 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
TypeDreamMoon (a GitHub user) maintains it in TypeDreamMoon/DreamShader, which has 106 GitHub stars. The repository holds 6 skills in this directory. The repository was last updated on October 9, 2026.
Source: TypeDreamMoon/DreamShader on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.