claude-code-arcane 2.2.0 → 2.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (144) hide show
  1. package/CHANGELOG.md +37 -0
  2. package/README.md +104 -55
  3. package/agents/career/career-strategist.md +88 -0
  4. package/agents/career/cv-reviewer.md +81 -0
  5. package/agents/career/hiring-manager.md +68 -0
  6. package/agents/career/mock-interviewer.md +76 -0
  7. package/agents/freelance/client-screener.md +84 -0
  8. package/agents/freelance/discovery-call.md +65 -0
  9. package/agents/freelance/pipeline-strategist.md +99 -0
  10. package/agents/freelance/proposal-reviewer.md +82 -0
  11. package/agents/game/ue-blueprint-specialist.md +125 -0
  12. package/agents/game/ue-gas-specialist.md +133 -0
  13. package/agents/game/ue-umg-specialist.md +131 -0
  14. package/dist/cli.js +57 -13
  15. package/docs/RELEASE-SETUP.md +1 -1
  16. package/docs/SKILLS-CATALOG.md +67 -4
  17. package/docs/USER-GUIDE.md +77 -72
  18. package/docs/agent-hierarchy.md +21 -1
  19. package/docs/presentations/build_arcane_deck.py +2 -2
  20. package/docs/presentations/build_arcane_deck_12.py +2 -2
  21. package/hooks/detect-unreal.sh +90 -0
  22. package/package.json +2 -2
  23. package/profiles/freelance.yaml +43 -0
  24. package/profiles/job-hunt.yaml +5 -2
  25. package/profiles/unreal-dev.yaml +97 -0
  26. package/rules/drafter-reviewer.md +16 -3
  27. package/rules/freelance-guardrails.md +53 -0
  28. package/rules/gamedev/unreal-code.md +125 -0
  29. package/skills/career-registry/SKILL.md +95 -0
  30. package/skills/career-registry/scripts/career_registry.py +488 -0
  31. package/skills/client-screen/SKILL.md +83 -0
  32. package/skills/client-screen/references/red-flags.md +95 -0
  33. package/skills/cover-letter/SKILL.md +4 -3
  34. package/skills/cv-tailor/SKILL.md +11 -2
  35. package/skills/freelance-deliver/SKILL.md +90 -0
  36. package/skills/freelance-hunt/SKILL.md +126 -0
  37. package/skills/freelance-hunt/references/templates/Connects.md +39 -0
  38. package/skills/freelance-hunt/references/templates/Contrato.md +60 -0
  39. package/skills/freelance-hunt/references/templates/Propuesta.md +66 -0
  40. package/skills/freelance-kickoff/SKILL.md +94 -0
  41. package/skills/freelance-pipeline/SKILL.md +109 -0
  42. package/skills/freelance-pipeline/scripts/import_history.py +425 -0
  43. package/skills/freelance-profile/SKILL.md +93 -0
  44. package/skills/freelance-proposal/SKILL.md +112 -0
  45. package/skills/freelance-scan/SKILL.md +196 -0
  46. package/skills/freelance-scan/references/dedup.md +35 -0
  47. package/skills/freelance-scan/references/platforms.md +167 -0
  48. package/skills/freelance-scan/scripts/freelance_search.py +1077 -0
  49. package/skills/install-mcp/SKILL.md +135 -46
  50. package/skills/install-mcp/references/unreal-operations.md +55 -0
  51. package/skills/interview-prep/SKILL.md +11 -3
  52. package/skills/job-aplicar/SKILL.md +5 -1
  53. package/skills/job-hunt/SKILL.md +17 -0
  54. package/skills/job-outcome/SKILL.md +15 -1
  55. package/skills/job-upskill/SKILL.md +10 -2
  56. package/skills/ue-actor-component-architecture/SKILL.md +509 -0
  57. package/skills/ue-actor-component-architecture/references/actor-lifecycle.md +301 -0
  58. package/skills/ue-actor-component-architecture/references/component-types.md +592 -0
  59. package/skills/ue-ai-navigation/SKILL.md +526 -0
  60. package/skills/ue-ai-navigation/references/behavior-tree-patterns.md +392 -0
  61. package/skills/ue-ai-navigation/references/behavior-tree-workflow.md +107 -0
  62. package/skills/ue-ai-navigation/references/custom-bttask.md +104 -0
  63. package/skills/ue-ai-navigation/references/eqs-reference.md +423 -0
  64. package/skills/ue-animation-system/SKILL.md +521 -0
  65. package/skills/ue-animation-system/references/anim-notify-reference.md +486 -0
  66. package/skills/ue-animation-system/references/locomotion-setup.md +550 -0
  67. package/skills/ue-async-threading/SKILL.md +433 -0
  68. package/skills/ue-async-threading/references/thread-safety-guide.md +213 -0
  69. package/skills/ue-async-threading/references/threading-patterns.md +345 -0
  70. package/skills/ue-audio-system/SKILL.md +527 -0
  71. package/skills/ue-audio-system/references/audio-setup-patterns.md +700 -0
  72. package/skills/ue-blueprints/SKILL.md +134 -0
  73. package/skills/ue-blueprints/references/communication.md +82 -0
  74. package/skills/ue-character-movement/SKILL.md +475 -0
  75. package/skills/ue-character-movement/references/cmc-extension-patterns.md +335 -0
  76. package/skills/ue-character-movement/references/movement-pipeline.md +189 -0
  77. package/skills/ue-cpp-foundations/SKILL.md +533 -0
  78. package/skills/ue-cpp-foundations/references/components-and-gc.md +107 -0
  79. package/skills/ue-cpp-foundations/references/container-patterns.md +544 -0
  80. package/skills/ue-cpp-foundations/references/delegate-patterns.md +497 -0
  81. package/skills/ue-cpp-foundations/references/gameplay-classes-cpp.md +136 -0
  82. package/skills/ue-cpp-foundations/references/property-specifiers.md +306 -0
  83. package/skills/ue-data-assets-tables/SKILL.md +527 -0
  84. package/skills/ue-data-assets-tables/references/asset-loading-patterns.md +306 -0
  85. package/skills/ue-data-assets-tables/references/data-driven-design.md +378 -0
  86. package/skills/ue-editor-tools/SKILL.md +523 -0
  87. package/skills/ue-editor-tools/references/detail-customization-patterns.md +395 -0
  88. package/skills/ue-editor-tools/references/editor-module-setup.md +480 -0
  89. package/skills/ue-game-features/SKILL.md +477 -0
  90. package/skills/ue-game-features/references/experience-system.md +222 -0
  91. package/skills/ue-game-features/references/game-feature-patterns.md +308 -0
  92. package/skills/ue-gameplay-abilities/SKILL.md +518 -0
  93. package/skills/ue-gameplay-abilities/references/ability-task-reference.md +391 -0
  94. package/skills/ue-gameplay-abilities/references/gameplay-effect-reference.md +397 -0
  95. package/skills/ue-gameplay-abilities/references/gas-setup-patterns.md +369 -0
  96. package/skills/ue-gameplay-framework/SKILL.md +466 -0
  97. package/skills/ue-gameplay-framework/references/framework-class-map.md +243 -0
  98. package/skills/ue-input-system/SKILL.md +394 -0
  99. package/skills/ue-input-system/references/cpp-setup.md +131 -0
  100. package/skills/ue-input-system/references/enhanced-input-workflow.md +117 -0
  101. package/skills/ue-input-system/references/input-action-reference.md +731 -0
  102. package/skills/ue-mass-entity/SKILL.md +476 -0
  103. package/skills/ue-mass-entity/references/mass-entity-patterns.md +319 -0
  104. package/skills/ue-mass-entity/references/mass-fragment-reference.md +119 -0
  105. package/skills/ue-materials-rendering/SKILL.md +526 -0
  106. package/skills/ue-materials-rendering/references/material-parameter-reference.md +216 -0
  107. package/skills/ue-materials-rendering/references/post-process-settings.md +383 -0
  108. package/skills/ue-module-build-system/SKILL.md +487 -0
  109. package/skills/ue-module-build-system/references/build-cs-reference.md +418 -0
  110. package/skills/ue-module-build-system/references/common-build-errors.md +381 -0
  111. package/skills/ue-naming-conventions/SKILL.md +142 -0
  112. package/skills/ue-naming-conventions/references/asset-name-modifiers.md +233 -0
  113. package/skills/ue-naming-conventions/references/content-structure.md +83 -0
  114. package/skills/ue-networking-replication/SKILL.md +452 -0
  115. package/skills/ue-networking-replication/references/replication-patterns.md +526 -0
  116. package/skills/ue-networking-replication/references/rpc-decision-guide.md +393 -0
  117. package/skills/ue-niagara-effects/SKILL.md +531 -0
  118. package/skills/ue-niagara-effects/references/niagara-data-interfaces.md +491 -0
  119. package/skills/ue-niagara-effects/references/niagara-parameter-types.md +153 -0
  120. package/skills/ue-niagara-effects/references/niagara-workflow.md +115 -0
  121. package/skills/ue-packaging/SKILL.md +116 -0
  122. package/skills/ue-physics-collision/SKILL.md +423 -0
  123. package/skills/ue-physics-collision/references/collision-channel-setup.md +218 -0
  124. package/skills/ue-physics-collision/references/trace-patterns.md +499 -0
  125. package/skills/ue-procedural-generation/SKILL.md +505 -0
  126. package/skills/ue-procedural-generation/references/pcg-node-reference.md +381 -0
  127. package/skills/ue-procedural-generation/references/procedural-mesh-patterns.md +940 -0
  128. package/skills/ue-project-context/SKILL.md +305 -0
  129. package/skills/ue-sequencer-cinematics/SKILL.md +506 -0
  130. package/skills/ue-sequencer-cinematics/references/sequencer-patterns.md +629 -0
  131. package/skills/ue-serialization-savegames/SKILL.md +524 -0
  132. package/skills/ue-serialization-savegames/references/save-system-architecture.md +705 -0
  133. package/skills/ue-state-trees/SKILL.md +489 -0
  134. package/skills/ue-state-trees/references/state-tree-mass-integration.md +184 -0
  135. package/skills/ue-state-trees/references/state-tree-patterns.md +321 -0
  136. package/skills/ue-testing-debugging/SKILL.md +520 -0
  137. package/skills/ue-testing-debugging/references/automation-test-patterns.md +387 -0
  138. package/skills/ue-testing-debugging/references/profiling-commands.md +357 -0
  139. package/skills/ue-ui-umg-slate/SKILL.md +431 -0
  140. package/skills/ue-ui-umg-slate/references/common-ui-setup.md +484 -0
  141. package/skills/ue-ui-umg-slate/references/widget-types.md +487 -0
  142. package/skills/ue-world-level-streaming/SKILL.md +518 -0
  143. package/skills/ue-world-level-streaming/references/streaming-patterns.md +414 -0
  144. package/templates/gamedev/unreal-project-context.md +107 -0
@@ -0,0 +1,216 @@
1
+ # Material Parameter Reference
2
+
3
+ Common material parameter patterns, performance notes, and API quick-reference for C++ UE development.
4
+
5
+ ---
6
+
7
+ ## API Quick Reference
8
+
9
+ ### UMaterialInstanceDynamic (MaterialInstanceDynamic.h)
10
+
11
+ | Method | Signature | Notes |
12
+ |--------|-----------|-------|
13
+ | `Create` | `static UMaterialInstanceDynamic* Create(UMaterialInterface* ParentMaterial, UObject* InOuter, FName Name = NAME_None)` | Preferred factory; always cache result |
14
+ | `SetScalarParameterValue` | `void SetScalarParameterValue(FName ParameterName, float Value)` | Parameter names are case-sensitive |
15
+ | `SetVectorParameterValue` | `void SetVectorParameterValue(FName ParameterName, FLinearColor Value)` | Pass FLinearColor explicitly; no implicit conversion from FVector |
16
+ | `SetTextureParameterValue` | `void SetTextureParameterValue(FName ParameterName, UTexture* Value)` | Accepts any UTexture subclass including render targets |
17
+ | `SetDoubleVectorParameterValue` | `void SetDoubleVectorParameterValue(FName ParameterName, FVector4 Value)` | For double-precision world position use |
18
+ | `InitializeScalarParameterAndGetIndex` | `bool InitializeScalarParameterAndGetIndex(const FName& Name, float Value, int32& OutIndex)` | Call once; use index in tight loops |
19
+ | `SetScalarParameterByIndex` | `bool SetScalarParameterByIndex(int32 ParameterIndex, float Value)` | Fast path; index must come from same MID |
20
+ | `InitializeVectorParameterAndGetIndex` | `bool InitializeVectorParameterAndGetIndex(const FName& Name, const FLinearColor& Value, int32& OutIndex)` | Same pattern as scalar index API |
21
+ | `SetVectorParameterByIndex` | `bool SetVectorParameterByIndex(int32 ParameterIndex, const FLinearColor& Value)` | Fast path for vectors |
22
+ | `K2_GetScalarParameterValue` | `float K2_GetScalarParameterValue(FName ParameterName)` | Returns current scalar value |
23
+ | `K2_GetVectorParameterValue` | `FLinearColor K2_GetVectorParameterValue(FName ParameterName)` | Returns current vector value |
24
+ | `K2_GetTextureParameterValue` | `UTexture* K2_GetTextureParameterValue(FName ParameterName)` | Returns current texture value |
25
+ | `ClearParameterValues` | `void ClearParameterValues()` | Removes all overrides; falls back to parent |
26
+ | `CopyParameterOverrides` | `void CopyParameterOverrides(UMaterialInstance* MaterialInstance)` | Copies all overrides from another instance |
27
+ | `CopyMaterialUniformParameters` | `void CopyMaterialUniformParameters(UMaterialInterface* Source)` | Faster than K2_Copy; skips static params |
28
+ | `K2_InterpolateMaterialInstanceParams` | `void K2_InterpolateMaterialInstanceParams(UMaterialInstance* A, UMaterialInstance* B, float Alpha)` | Output = lerp(A, B, Alpha) |
29
+ | `SetNaniteOverride` | `void SetNaniteOverride(UMaterialInterface* InMaterial)` | UE5 — assign Nanite-compatible material |
30
+
31
+ ### UMaterialParameterCollectionInstance (MaterialParameterCollectionInstance.h)
32
+
33
+ | Method | Signature | Notes |
34
+ |--------|-----------|-------|
35
+ | `SetScalarParameterValue` | `bool SetScalarParameterValue(FName ParameterName, float ParameterValue)` | Returns false if name not found |
36
+ | `SetVectorParameterValue` | `bool SetVectorParameterValue(FName ParameterName, const FLinearColor& ParameterValue)` | Pass FLinearColor explicitly; no implicit conversion from FVector |
37
+ | `GetScalarParameterValue` | `bool GetScalarParameterValue(FName ParameterName, float& OutParameterValue) const` | |
38
+ | `GetVectorParameterValue` | `bool GetVectorParameterValue(FName ParameterName, FLinearColor& OutParameterValue) const` | |
39
+ | `ForceReturnToDefaultValues` | `void ForceReturnToDefaultValues()` | Resets all overrides to collection defaults |
40
+
41
+ Obtain the instance via:
42
+ ```cpp
43
+ UMaterialParameterCollectionInstance* Inst = GetWorld()->GetParameterCollectionInstance(CollectionAsset);
44
+ ```
45
+
46
+ ### UPrimitiveComponent — Material Slot API (PrimitiveComponent.h)
47
+
48
+ | Method | Signature | Notes |
49
+ |--------|-----------|-------|
50
+ | `GetMaterial` | `UMaterialInterface* GetMaterial(int32 ElementIndex) const` | Returns current material for slot |
51
+ | `SetMaterial` | `void SetMaterial(int32 ElementIndex, UMaterialInterface* Material)` | Replaces static material; does not create MID |
52
+ | `SetMaterialByName` | `void SetMaterialByName(FName MaterialSlotName, UMaterialInterface* Material)` | Slot name lookup version |
53
+ | `GetMaterialIndex` | `int32 GetMaterialIndex(FName MaterialSlotName) const` | Resolve slot name to index |
54
+ | `GetMaterialSlotNames` | `TArray<FName> GetMaterialSlotNames() const` | All slot names on the component |
55
+ | `CreateDynamicMaterialInstance` | `UMaterialInstanceDynamic* CreateDynamicMaterialInstance(int32 ElementIndex, UMaterialInterface* SourceMaterial = nullptr, FName OptionalName = NAME_None)` | Creates MID and assigns to slot |
56
+
57
+ ---
58
+
59
+ ## Parameter Type Mapping
60
+
61
+ | Material Parameter Type | C++ Setter | C++ Type |
62
+ |------------------------|-----------|----------|
63
+ | Scalar Parameter | `SetScalarParameterValue` | `float` |
64
+ | Vector Parameter | `SetVectorParameterValue` | `FLinearColor` (pass FLinearColor explicitly; no implicit conversion from FVector) |
65
+ | Texture Parameter | `SetTextureParameterValue` | `UTexture*` |
66
+ | Runtime Virtual Texture | `SetRuntimeVirtualTextureParameterValue` | `URuntimeVirtualTexture*` |
67
+ | Sparse Volume Texture | `SetSparseVolumeTextureParameterValue` | `USparseVolumeTexture*` |
68
+ | Texture Collection | `SetTextureCollectionParameterValue` | `UTextureCollection*` |
69
+
70
+ Static parameters (Static Bool, Static Switch, Static Component Mask) cannot be changed at runtime on a MID. Create a `UMaterialInstanceConstant` in the editor for different static permutations and use MIDs on top for dynamic parameters.
71
+
72
+ ---
73
+
74
+ ## Performance Guidelines
75
+
76
+ ### MID Parameter Update Cost
77
+
78
+ Parameter updates are low-cost individually. The overhead is:
79
+ 1. Name hash lookup (`FName` hashing — fast)
80
+ 2. Dirty flag on the uniform buffer
81
+ 3. GPU uniform buffer upload on the next render (batched, not per-parameter)
82
+
83
+ For very high parameter counts (50+ parameters changed per frame per instance), use the index-based API to skip name lookup:
84
+
85
+ ```cpp
86
+ // One-time initialization
87
+ int32 AlphaIdx = -1;
88
+ int32 ColorIdx = -1;
89
+ MyMID->InitializeScalarParameterAndGetIndex(TEXT("Alpha"), 1.0f, AlphaIdx);
90
+ MyMID->InitializeVectorParameterAndGetIndex(TEXT("TintColor"), FLinearColor::White, ColorIdx);
91
+
92
+ // Per-frame update — no FName hash lookup
93
+ MyMID->SetScalarParameterByIndex(AlphaIdx, NewAlpha);
94
+ MyMID->SetVectorParameterByIndex(ColorIdx, NewColor);
95
+ ```
96
+
97
+ ### MPC vs MID — When to Use Which
98
+
99
+ | Scenario | MPC | MID |
100
+ |----------|-----|-----|
101
+ | Global time-of-day color / intensity | Yes | No |
102
+ | Weather parameters (rain, fog) | Yes | No |
103
+ | Per-actor color / damage state | No | Yes |
104
+ | Per-instance texture swap | No | Yes |
105
+ | Drive 100+ materials at once | Yes | No (100 MID updates) |
106
+ | Layered material parameter override | No | Yes |
107
+
108
+ ### Render Target Format Selection
109
+
110
+ Choose the smallest format that meets precision needs:
111
+
112
+ | Use Case | Recommended Format | Memory (512x512) |
113
+ |----------|--------------------|-----------------|
114
+ | LDR color (UI, minimap) | `RTF_RGBA8` | 1 MB |
115
+ | HDR scene color | `RTF_RGBA16f` | 2 MB |
116
+ | Depth data / single channel | `RTF_R16f` | 0.5 MB |
117
+ | Float computation | `RTF_RGBA32f` | 4 MB |
118
+
119
+ `RTF_RGBA32f` costs 4x more memory and bandwidth than `RTF_RGBA16f`. Avoid unless data requires full 32-bit precision.
120
+
121
+ ### Scene Capture Performance
122
+
123
+ `USceneCaptureComponent2D` renders a full scene pass. Cost is proportional to:
124
+ - Render target resolution
125
+ - Capture source (`SCS_FinalColorLDR` is more expensive than `SCS_BaseColor`)
126
+ - Geometry in the captured view
127
+ - Post-process applied to capture
128
+
129
+ Optimization options:
130
+ ```cpp
131
+ // Disable capture every frame; call manually when needed
132
+ SceneCapture->bCaptureEveryFrame = false;
133
+ SceneCapture->CaptureScene(); // trigger manually
134
+
135
+ // Exclude expensive show flags
136
+ SceneCapture->ShowFlags.SetAtmosphere(false);
137
+ SceneCapture->ShowFlags.SetFog(false);
138
+ SceneCapture->ShowFlags.SetBloom(false);
139
+ SceneCapture->ShowFlags.SetMotionBlur(false);
140
+ SceneCapture->ShowFlags.SetContactShadows(false);
141
+
142
+ // Hide specific actors from capture
143
+ SceneCapture->HiddenActors.Add(PlayerActor);
144
+
145
+ // Use a low-resolution render target for distant/offscreen views
146
+ ```
147
+
148
+ ---
149
+
150
+ ## Common Material Parameter Names by Domain
151
+
152
+ These are conventions, not enforced by the engine. Match whatever names the material artist has used.
153
+
154
+ ### PBR Base Parameters
155
+
156
+ | Parameter Name | Type | Typical Range | Purpose |
157
+ |----------------|------|--------------|---------|
158
+ | `BaseColor` | Vector | — | Albedo color |
159
+ | `Roughness` | Scalar | 0.0–1.0 | Surface roughness |
160
+ | `Metallic` | Scalar | 0.0 or 1.0 | Metallic surface flag |
161
+ | `Emissive` | Vector | — | Emissive color (HDR) |
162
+ | `EmissiveIntensity` | Scalar | 0–100+ | Emissive brightness multiplier |
163
+ | `Opacity` | Scalar | 0.0–1.0 | Translucency opacity |
164
+ | `Normal` | Texture | — | Normal map override |
165
+
166
+ ### Damage / Destruction State
167
+
168
+ | Parameter Name | Type | Purpose |
169
+ |----------------|------|---------|
170
+ | `DamageAmount` | Scalar | 0 = pristine, 1 = fully damaged |
171
+ | `DamageMask` | Texture | Grayscale damage region mask |
172
+ | `BurnAmount` | Scalar | Char/burn intensity |
173
+
174
+ ### Environmental / Weather
175
+
176
+ | Parameter Name | Type | Purpose |
177
+ |----------------|------|---------|
178
+ | `RainWetness` | Scalar (MPC) | Surface wetness from rain |
179
+ | `SnowAmount` | Scalar (MPC) | Snow coverage amount |
180
+ | `WindStrength` | Scalar (MPC) | Foliage wind intensity |
181
+ | `TimeOfDay` | Scalar (MPC) | 0.0–24.0 hour |
182
+
183
+ ### UI / HUD Materials
184
+
185
+ | Parameter Name | Type | Purpose |
186
+ |----------------|------|---------|
187
+ | `HealthPercent` | Scalar | 0.0–1.0 health fraction |
188
+ | `FillAmount` | Scalar | Progress bar fill |
189
+ | `TintColor` | Vector | Icon or panel tint |
190
+ | `MaskTexture` | Texture | Custom shape mask |
191
+
192
+ ---
193
+
194
+ ## Debugging Parameter Issues
195
+
196
+ ### Parameter Name Verification
197
+
198
+ Parameter names are stored as `FName` — case-sensitive exact match required. If `SetScalarParameterValue` has no visible effect:
199
+
200
+ 1. Open the material in the Material Editor; confirm the exact `ParameterName` field value.
201
+ 2. Check if the parameter is inside a Material Function — use `SetScalarParameterValueByInfo` with `FMaterialParameterInfo` for layer-based access.
202
+ 3. Verify the MID's parent is the correct material (not already a MID of another MID pointing to the wrong base).
203
+
204
+ ### MID Not Taking Effect on Mesh
205
+
206
+ If `CreateDynamicMaterialInstance` returns a valid pointer but visual changes are not visible:
207
+
208
+ - Confirm `UPROPERTY()` on the cached pointer — if missing, the MID may have been GC'd.
209
+ - Confirm the element index matches the correct material slot (`GetMaterialSlotNames()` to list them).
210
+ - On skeletal meshes, verify the LOD 0 slot is being targeted; some materials are per-LOD.
211
+
212
+ ### MPC Parameter Not Updating Shaders
213
+
214
+ - Verify the collection asset reference in the component matches the collection asset the material references.
215
+ - Parameter names in the collection are `FName` — case-sensitive.
216
+ - Changes via `SetScalarParameterValue` on `UMaterialParameterCollectionInstance` queue a uniform buffer update; they are applied before the next frame render.
@@ -0,0 +1,383 @@
1
+ # Post-Process Settings Reference
2
+
3
+ `FPostProcessSettings` fields accessible from C++, grouped by category. Every field requires its paired `bOverride_*` bool to be `true` to take effect when set on a `APostProcessVolume` or `UPostProcessComponent`.
4
+
5
+ Source: `Engine/Source/Runtime/Engine/Classes/Engine/Scene.h`
6
+
7
+ ---
8
+
9
+ ## Usage Pattern
10
+
11
+ ```cpp
12
+ // Always set the override bool alongside the value:
13
+ PPV->Settings.bOverride_BloomIntensity = true;
14
+ PPV->Settings.BloomIntensity = 1.5f;
15
+
16
+ // Setting the value without the override has no effect.
17
+ PPV->Settings.BloomIntensity = 1.5f; // silent no-op if bOverride_BloomIntensity is false
18
+ ```
19
+
20
+ ---
21
+
22
+ ## Bloom
23
+
24
+ Controls the glow around bright light sources.
25
+
26
+ | Field | Type | Default | Description |
27
+ |-------|------|---------|-------------|
28
+ | `bOverride_BloomMethod` | bool | false | Enable method override |
29
+ | `BloomMethod` | EBloomMethod | `BM_SOG` | `BM_SOG` (Gaussian Sum) or `BM_FFT` (Convolution) |
30
+ | `bOverride_BloomIntensity` | bool | false | |
31
+ | `BloomIntensity` | float | 0.675 | Overall bloom brightness multiplier. 0 = off |
32
+ | `bOverride_BloomThreshold` | bool | false | |
33
+ | `BloomThreshold` | float | -1.0 | Luminance threshold for bloom. -1 = all pixels |
34
+ | `bOverride_BloomSizeScale` | bool | false | |
35
+ | `BloomSizeScale` | float | 4.0 | Scale for all Gaussian bloom kernel sizes |
36
+
37
+ **Visual effect:** Increasing `BloomIntensity` above 1.0 creates a dreamy glow around bright elements (windows, neon signs, fire). Setting `BloomThreshold` to 1.0 restricts bloom to pixels brighter than 1.0 linear, which is more physically accurate.
38
+
39
+ ---
40
+
41
+ ## Exposure (Auto Exposure / Eye Adaptation)
42
+
43
+ Controls how the camera adapts to scene brightness.
44
+
45
+ | Field | Type | Default | Description |
46
+ |-------|------|---------|-------------|
47
+ | `bOverride_AutoExposureMethod` | bool | false | |
48
+ | `AutoExposureMethod` | EAutoExposureMethod | `AEM_Histogram` | `AEM_Histogram` (high quality) or `AEM_Basic` (faster) |
49
+ | `bOverride_AutoExposureMinBrightness` | bool | false | |
50
+ | `AutoExposureMinBrightness` | float | 0.03 | Minimum scene luminance exposure adapts to (EV100 units) |
51
+ | `bOverride_AutoExposureMaxBrightness` | bool | false | |
52
+ | `AutoExposureMaxBrightness` | float | 8.0 | Maximum scene luminance exposure adapts to (EV100 units) |
53
+ | `bOverride_AutoExposureBias` | bool | false | |
54
+ | `AutoExposureBias` | float | 0.0 | Manual exposure offset in EV (exposure value). Positive = brighter |
55
+ | `bOverride_AutoExposureSpeedUp` | bool | false | |
56
+ | `AutoExposureSpeedUp` | float | 3.0 | Adaptation speed when moving to brighter scene (EV/sec) |
57
+ | `bOverride_AutoExposureSpeedDown` | bool | false | |
58
+ | `AutoExposureSpeedDown` | float | 1.0 | Adaptation speed when moving to darker scene (EV/sec) |
59
+ | `bOverride_AutoExposureLowPercent` | bool | false | |
60
+ | `AutoExposureLowPercent` | float | 80.0 | Histogram low percentile for metering (0–100) |
61
+ | `bOverride_AutoExposureHighPercent` | bool | false | |
62
+ | `AutoExposureHighPercent` | float | 98.3 | Histogram high percentile for metering (0–100) |
63
+
64
+ **Fixed exposure (override eye adaptation):**
65
+ ```cpp
66
+ // Lock exposure to a fixed EV100 value — disables adaptation
67
+ PPV->Settings.bOverride_AutoExposureMethod = true;
68
+ PPV->Settings.AutoExposureMethod = AEM_Manual;
69
+ PPV->Settings.bOverride_AutoExposureBias = true;
70
+ PPV->Settings.AutoExposureBias = 0.0f; // EV100 = 0 is "neutral" daylight
71
+ ```
72
+
73
+ **Visual effect:** `AutoExposureBias` of +1 doubles perceived brightness; -1 halves it. Narrowing the Min/Max range prevents wild brightness swings in high-contrast scenes.
74
+
75
+ ---
76
+
77
+ ## Depth of Field (Cinematic DOF)
78
+
79
+ Blurs out-of-focus objects to simulate camera aperture. Requires Cinematic DOF method.
80
+
81
+ | Field | Type | Default | Description |
82
+ |-------|------|---------|-------------|
83
+ | `bOverride_DepthOfFieldFstop` | bool | false | |
84
+ | `DepthOfFieldFstop` | float | 4.0 | Aperture in f-stops. Lower = more blur (f/1.4 = very shallow DOF) |
85
+ | `bOverride_DepthOfFieldMinFstop` | bool | false | |
86
+ | `DepthOfFieldMinFstop` | float | 1.2 | Minimum aperture clamp |
87
+ | `bOverride_DepthOfFieldBladeCount` | bool | false | |
88
+ | `DepthOfFieldBladeCount` | int32 | 5 | Aperture blade count (affects bokeh shape) |
89
+ | `bOverride_DepthOfFieldFocalDistance` | bool | false | |
90
+ | `DepthOfFieldFocalDistance` | float | 1000.0 | In-focus distance from camera (cm) |
91
+ | `bOverride_DepthOfFieldSensorWidth` | bool | false | |
92
+ | `DepthOfFieldSensorWidth` | float | 24.576 | Sensor width in mm (affects DOF calculation) |
93
+ | `bOverride_DepthOfFieldDepthBlurRadius` | bool | false | |
94
+ | `DepthOfFieldDepthBlurRadius` | float | 0.0 | Gaussian blur radius at 1m distance (0 = off) |
95
+ | `bOverride_DepthOfFieldDepthBlurAmount` | bool | false | |
96
+ | `DepthOfFieldDepthBlurAmount` | float | 1.0 | Blur amount multiplier for DepthBlurRadius |
97
+ | `bOverride_DepthOfFieldNearTransitionRegion` | bool | false | |
98
+ | `DepthOfFieldNearTransitionRegion` | float | 300.0 | Distance in front of focal plane for blur transition (cm) |
99
+ | `bOverride_DepthOfFieldFarTransitionRegion` | bool | false | |
100
+ | `DepthOfFieldFarTransitionRegion` | float | 500.0 | Distance behind focal plane for blur transition (cm) |
101
+
102
+ **Visual effect:** `DepthOfFieldFstop = 1.4` with `DepthOfFieldFocalDistance = 200` (2m) creates a very cinematic portrait-style shallow depth of field. `Fstop = 22` produces near-infinite focus.
103
+
104
+ ---
105
+
106
+ ## Color Grading
107
+
108
+ Adjusts the final image colors. Applied in linear light before tonemapping.
109
+
110
+ | Field | Type | Description |
111
+ |-------|------|-------------|
112
+ | `bOverride_ColorSaturation` | bool | |
113
+ | `ColorSaturation` | FVector4 | Per-channel saturation (RGBA). Default = (1,1,1,1) |
114
+ | `bOverride_ColorContrast` | bool | |
115
+ | `ColorContrast` | FVector4 | Per-channel contrast. Default = (1,1,1,1) |
116
+ | `bOverride_ColorGamma` | bool | |
117
+ | `ColorGamma` | FVector4 | Gamma correction per channel. Default = (1,1,1,1) |
118
+ | `bOverride_ColorGain` | bool | |
119
+ | `ColorGain` | FVector4 | Multiplier per channel. Default = (1,1,1,1) |
120
+ | `bOverride_ColorOffset` | bool | |
121
+ | `ColorOffset` | FVector4 | Additive offset per channel. Default = (0,0,0,0) |
122
+ | `bOverride_ColorSaturationShadows` | bool | Shadow-region saturation |
123
+ | `ColorSaturationShadows` | FVector4 | Affects only shadow tones |
124
+ | `bOverride_ColorSaturationMidtones` | bool | Midtone-region saturation |
125
+ | `ColorSaturationMidtones` | FVector4 | Affects only midtones |
126
+ | `bOverride_ColorSaturationHighlights` | bool | Highlight-region saturation |
127
+ | `ColorSaturationHighlights` | FVector4 | Affects only highlights |
128
+
129
+ ```cpp
130
+ // Desaturate shadows (classic film noir / horror look)
131
+ PPV->Settings.bOverride_ColorSaturationShadows = true;
132
+ PPV->Settings.ColorSaturationShadows = FVector4(0.5f, 0.5f, 0.5f, 1.0f);
133
+
134
+ // Teal-orange grade — boost blue-greens in shadows, warm up highlights
135
+ PPV->Settings.bOverride_ColorOffsetShadows = true;
136
+ PPV->Settings.ColorOffsetShadows = FVector4(0.0f, 0.01f, 0.02f, 0.0f); // slight blue push in shadows
137
+ PPV->Settings.bOverride_ColorGainHighlights = true;
138
+ PPV->Settings.ColorGainHighlights = FVector4(1.05f, 0.98f, 0.9f, 1.0f); // warm highlights
139
+ ```
140
+
141
+ **Visual effect:** `ColorSaturation = FVector4(0,0,0,1)` produces full greyscale. The W (alpha) component of these vectors is a master scale applied equally to RGB.
142
+
143
+ ---
144
+
145
+ ## Vignette
146
+
147
+ Darkens edges of the screen.
148
+
149
+ | Field | Type | Default | Description |
150
+ |-------|------|---------|-------------|
151
+ | `bOverride_VignetteIntensity` | bool | false | |
152
+ | `VignetteIntensity` | float | 0.4 | 0 = no vignette, 1 = strong dark edges |
153
+
154
+ ---
155
+
156
+ ## Film Grain
157
+
158
+ Adds photographic grain to the final image.
159
+
160
+ | Field | Type | Default | Description |
161
+ |-------|------|---------|-------------|
162
+ | `bOverride_FilmGrainIntensity` | bool | false | |
163
+ | `FilmGrainIntensity` | float | 0.0 | Overall grain strength |
164
+ | `bOverride_FilmGrainIntensityShadows` | bool | false | |
165
+ | `FilmGrainIntensityShadows` | float | 1.0 | Grain intensity in shadow regions |
166
+ | `bOverride_FilmGrainIntensityMidtones` | bool | false | |
167
+ | `FilmGrainIntensityMidtones` | float | 1.0 | Grain intensity in midtone regions |
168
+ | `bOverride_FilmGrainIntensityHighlights` | bool | false | |
169
+ | `FilmGrainIntensityHighlights` | float | 1.0 | Grain intensity in highlight regions |
170
+ | `bOverride_FilmGrainShadowsMax` | bool | false | |
171
+ | `FilmGrainShadowsMax` | float | 0.09 | Maximum luminance where shadows grain applies |
172
+ | `bOverride_FilmGrainHighlightsMin` | bool | false | |
173
+ | `FilmGrainHighlightsMin` | float | 0.5 | Minimum luminance where highlights grain applies |
174
+
175
+ ---
176
+
177
+ ## Ambient Occlusion (SSAO)
178
+
179
+ Screen-space approximation of ambient occlusion (shadowing in crevices and corners).
180
+
181
+ | Field | Type | Default | Description |
182
+ |-------|------|---------|-------------|
183
+ | `bOverride_AmbientOcclusionIntensity` | bool | false | |
184
+ | `AmbientOcclusionIntensity` | float | 0.5 | 0 = off, 1 = full AO |
185
+ | `bOverride_AmbientOcclusionRadius` | bool | false | |
186
+ | `AmbientOcclusionRadius` | float | 200.0 | World-space sample radius in cm |
187
+ | `bOverride_AmbientOcclusionRadiusInWS` | bool | false | |
188
+ | `AmbientOcclusionRadiusInWS` | bool | false | If true, Radius is world-space cm; else view-space |
189
+ | `bOverride_AmbientOcclusionBias` | bool | false | |
190
+ | `AmbientOcclusionBias` | float | 3.0 | Bias to avoid self-occlusion on surfaces |
191
+ | `bOverride_AmbientOcclusionPower` | bool | false | |
192
+ | `AmbientOcclusionPower` | float | 2.0 | Power applied to AO result; higher = more contrast |
193
+ | `bOverride_AmbientOcclusionQuality` | bool | false | |
194
+ | `AmbientOcclusionQuality` | float | 50.0 | 0–100; number of samples |
195
+
196
+ **Visual effect:** AO adds subtle shadowing where surfaces meet, grounding objects and adding depth. Increase `Radius` for large architectural scenes; decrease for small props.
197
+
198
+ ---
199
+
200
+ ## Lumen Global Illumination and Reflections (UE5)
201
+
202
+ Lumen replaces SSAO, SSGI, and SSR for high-quality GI and reflections.
203
+
204
+ | Field | Type | Default | Description |
205
+ |-------|------|---------|-------------|
206
+ | `bOverride_LumenSceneDetail` | bool | false | |
207
+ | `LumenSceneDetail` | float | 1.0 | Surface cache resolution scale. Higher = better quality, higher cost |
208
+ | `bOverride_LumenSceneLightingQuality` | bool | false | |
209
+ | `LumenSceneLightingQuality` | float | 1.0 | Lighting pass quality. Range 0–4 |
210
+ | `bOverride_LumenSceneLightingUpdateSpeed` | bool | false | |
211
+ | `LumenSceneLightingUpdateSpeed` | float | 1.0 | How quickly scene lighting updates propagate |
212
+ | `bOverride_LumenFinalGatherQuality` | bool | false | |
213
+ | `LumenFinalGatherQuality` | float | 1.0 | GI final gather quality. Range 0–4 |
214
+ | `bOverride_LumenFinalGatherLightingUpdateSpeed` | bool | false | |
215
+ | `LumenFinalGatherLightingUpdateSpeed` | float | 1.0 | Update speed for final gather lighting |
216
+ | `bOverride_LumenMaxTraceDistance` | bool | false | |
217
+ | `LumenMaxTraceDistance` | float | 20000.0 | Maximum ray trace distance in cm |
218
+ | `bOverride_LumenReflectionQuality` | bool | false | |
219
+ | `LumenReflectionQuality` | float | 1.0 | Reflection quality. Range 0–4 |
220
+ | `bOverride_LumenRayLightingMode` | bool | false | |
221
+ | `LumenRayLightingMode` | ELumenRayLightingModeOverride | Default | `Default`, `SurfaceCache`, `HitLighting` |
222
+
223
+ **Visual effect:**
224
+ - Increasing `LumenSceneDetail` to 2–4 improves interior scenes where cache misses cause splotchy GI.
225
+ - `LumenReflectionQuality = 2+` with `HitLighting` mode gives accurate mirror-like reflections at higher cost.
226
+ - `LumenMaxTraceDistance` controls the effective GI range — reduce for indoor-only scenes to save performance.
227
+
228
+ ---
229
+
230
+ ## Screen Space Global Illumination (SSGI, non-Lumen)
231
+
232
+ Available when Lumen is disabled. Screen-space only.
233
+
234
+ | Field | Type | Default | Description |
235
+ |-------|------|---------|-------------|
236
+ | `bOverride_ScreenSpaceReflectionIntensity` | bool | false | |
237
+ | `ScreenSpaceReflectionIntensity` | float | 100.0 | SSR strength (0 = off) |
238
+ | `bOverride_ScreenSpaceReflectionQuality` | bool | false | |
239
+ | `ScreenSpaceReflectionQuality` | float | 50.0 | SSR sample count (0–100) |
240
+ | `bOverride_ScreenSpaceReflectionMaxRoughness` | bool | false | |
241
+ | `ScreenSpaceReflectionMaxRoughness` | float | 0.6 | Max roughness for SSR (0–1) |
242
+
243
+ ---
244
+
245
+ ## Motion Blur
246
+
247
+ Blurs moving objects proportional to velocity.
248
+
249
+ | Field | Type | Default | Description |
250
+ |-------|------|---------|-------------|
251
+ | `bOverride_MotionBlurAmount` | bool | false | |
252
+ | `MotionBlurAmount` | float | 0.5 | Blur strength (0 = off) |
253
+ | `bOverride_MotionBlurMax` | bool | false | |
254
+ | `MotionBlurMax` | float | 5.0 | Maximum blur length as percentage of screen width |
255
+ | `bOverride_MotionBlurTargetFPS` | bool | false | |
256
+ | `MotionBlurTargetFPS` | int32 | 30 | Target FPS for motion blur normalization |
257
+ | `bOverride_MotionBlurPerObjectSize` | bool | false | |
258
+ | `MotionBlurPerObjectSize` | float | 0.5 | Threshold for per-object motion blur |
259
+
260
+ ---
261
+
262
+ ## Chromatic Aberration
263
+
264
+ Simulates lens color fringing (RGB channel separation at screen edges).
265
+
266
+ | Field | Type | Default | Description |
267
+ |-------|------|---------|-------------|
268
+ | `bOverride_SceneFringeIntensity` | bool | false | |
269
+ | `SceneFringeIntensity` | float | 0.0 | 0 = off, 5.0 = visible fringe |
270
+ | `bOverride_ChromaticAberrationStartOffset` | bool | false | |
271
+ | `ChromaticAberrationStartOffset` | float | 0.0 | Radial start position (0 = center, 1 = edge) |
272
+
273
+ ---
274
+
275
+ ## Camera Lens (Dirt Mask and Lens Flares)
276
+
277
+ | Field | Type | Default | Description |
278
+ |-------|------|---------|-------------|
279
+ | `bOverride_LensFlareIntensity` | bool | false | |
280
+ | `LensFlareIntensity` | float | 1.0 | Streak/flare strength around bright sources |
281
+ | `bOverride_LensFlareBokehSize` | bool | false | |
282
+ | `LensFlareBokehSize` | float | 3.0 | Bokeh lens flare size |
283
+ | `bOverride_LensFlareThreshold` | bool | false | |
284
+ | `LensFlareThreshold` | float | 8.0 | Luminance threshold for lens flares |
285
+ | `bOverride_BloomDirtMaskIntensity` | bool | false | |
286
+ | `BloomDirtMaskIntensity` | float | 0.0 | Camera lens dirt over bloom |
287
+ | `bOverride_BloomDirtMask` | bool | false | |
288
+ | `BloomDirtMask` | `UTexture*` | nullptr | Dirt mask texture |
289
+
290
+ ---
291
+
292
+ ## Post-Process Materials (Blendables)
293
+
294
+ Post-process materials are added via the volume's blendable array:
295
+
296
+ ```cpp
297
+ // Material Domain must be set to "Post Process" in material editor.
298
+ PPV->AddOrUpdateBlendable(PostProcessMaterial, 1.0f);
299
+
300
+ // Via Settings directly (typed):
301
+ PPV->Settings.AddBlendable(PostProcessMaterial, 0.5f);
302
+
303
+ // Weighted blend — weight 0 = invisible, 1 = full effect
304
+ // Multiple blendables are composited in array order.
305
+ ```
306
+
307
+ Blendable priorities within the post-process pipeline:
308
+ 1. Scene Color (before tone mapping) — use `Blendable Location: Before Tonemapping`
309
+ 2. After Tone Mapping — use `Blendable Location: After Tonemapping`
310
+ 3. SSR input — special location for SSR replacement
311
+
312
+ ---
313
+
314
+ ## Volume Priority and Blending
315
+
316
+ Multiple overlapping volumes blend based on:
317
+
318
+ 1. **Priority** — higher value wins when fully inside. Undefined order on tie.
319
+ 2. **BlendWeight** — 0 to 1; partial effect weight.
320
+ 3. **BlendRadius** — world-space distance from volume boundary where blend transitions.
321
+ 4. **bUnbound** — if true, volume applies everywhere (lowest effective priority among unbounded volumes unless Priority is set high).
322
+
323
+ ```cpp
324
+ // Two volumes overlapping: the one with Priority = 10 overrides Priority = 1
325
+ // for all properties both have bOverride set.
326
+
327
+ PPVBackground->Priority = 1;
328
+ PPVDanger->Priority = 10;
329
+ ```
330
+
331
+ Blend order from source documentation: the camera's final post-process settings are accumulated from lowest to highest priority, with each higher-priority volume blending over lower-priority settings according to BlendWeight.
332
+
333
+ ---
334
+
335
+ ## Common Presets (C++ Snippets)
336
+
337
+ ### Horror / Dark Atmosphere
338
+
339
+ ```cpp
340
+ auto& S = PPV->Settings;
341
+
342
+ S.bOverride_BloomIntensity = true; S.BloomIntensity = 0.2f;
343
+ S.bOverride_VignetteIntensity = true; S.VignetteIntensity = 1.0f;
344
+ S.bOverride_ColorSaturation = true; S.ColorSaturation = FVector4(0.6f, 0.6f, 0.6f, 1.0f);
345
+ S.bOverride_AutoExposureMinBrightness = true; S.AutoExposureMinBrightness = 0.01f;
346
+ S.bOverride_AutoExposureMaxBrightness = true; S.AutoExposureMaxBrightness = 1.0f;
347
+ S.bOverride_FilmGrainIntensity = true; S.FilmGrainIntensity = 0.8f;
348
+ ```
349
+
350
+ ### High-Contrast Cinematic
351
+
352
+ ```cpp
353
+ auto& S = PPV->Settings;
354
+
355
+ S.bOverride_BloomIntensity = true; S.BloomIntensity = 0.5f;
356
+ S.bOverride_ColorContrast = true; S.ColorContrast = FVector4(1.3f, 1.3f, 1.3f, 1.0f);
357
+ S.bOverride_ColorSaturation = true; S.ColorSaturation = FVector4(1.2f, 1.2f, 1.2f, 1.0f);
358
+ S.bOverride_DepthOfFieldFstop = true; S.DepthOfFieldFstop = 2.0f;
359
+ S.bOverride_DepthOfFieldFocalDistance = true; S.DepthOfFieldFocalDistance = 500.0f;
360
+ S.bOverride_MotionBlurAmount = true; S.MotionBlurAmount = 0.4f;
361
+ ```
362
+
363
+ ### Sci-Fi / Tech UI Overlay
364
+
365
+ ```cpp
366
+ auto& S = PPV->Settings;
367
+
368
+ S.bOverride_BloomIntensity = true; S.BloomIntensity = 2.0f;
369
+ S.bOverride_SceneFringeIntensity = true; S.SceneFringeIntensity = 2.0f;
370
+ S.bOverride_ColorSaturationHighlights = true;
371
+ S.ColorSaturationHighlights = FVector4(0.7f, 1.2f, 1.4f, 1.0f); // teal highlights
372
+ S.bOverride_VignetteIntensity = true; S.VignetteIntensity = 0.6f;
373
+ ```
374
+
375
+ ### Disable All Post-Process (Performance / Mobile)
376
+
377
+ ```cpp
378
+ // Set BlendWeight to 0 to suppress all post-process from a volume
379
+ PPV->BlendWeight = 0.0f;
380
+
381
+ // Or disable entirely
382
+ PPV->bEnabled = false;
383
+ ```