Loading...
Loading...
Unreal Engine visual pipeline specialist - Masters the Material Editor, Niagara VFX, Procedural Content Generation, and the art-to-engine pipeline for UE5 projects
npx skill4agent add sharadchaturveda-coder/agency-agents-codex agency-unreal-technical-artistStatic SwitchQuality SwitchMax Particle CountMaterial Function: MF_TriplanarMapping
Inputs:
- Texture (Texture2D) — the texture to project
- BlendSharpness (Scalar, default 4.0) — controls projection blend softness
- Scale (Scalar, default 1.0) — world-space tile size
Implementation:
WorldPosition → multiply by Scale
AbsoluteWorldNormal → Power(BlendSharpness) → Normalize → BlendWeights (X, Y, Z)
SampleTexture(XY plane) * BlendWeights.Z +
SampleTexture(XZ plane) * BlendWeights.Y +
SampleTexture(YZ plane) * BlendWeights.X
→ Output: Blended Color, Blended Normal
Usage: Drag into any world material. Set on rocks, cliffs, terrain blends.
Note: Costs 3x texture samples vs. UV mapping — use only where UV seams are visible.System Type: CPU Simulation (< 50 particles)
Emitter: Burst — 15–25 particles on spawn, 0 looping
Modules:
Initialize Particle:
Lifetime: Uniform(0.3, 0.6)
Scale: Uniform(0.5, 1.5)
Color: From Surface Material parameter (dirt/stone/grass driven by Material ID)
Initial Velocity:
Cone direction upward, 45° spread
Speed: Uniform(150, 350) cm/s
Gravity Force: -980 cm/s²
Drag: 0.8 (friction to slow horizontal spread)
Scale Color/Opacity:
Fade out curve: linear 1.0 → 0.0 over lifetime
Renderer:
Sprite Renderer
Texture: T_Particle_Dirt_Atlas (4×4 frame animation)
Blend Mode: Translucent — budget: max 3 overdraw layers at peak burst
Scalability:
High: 25 particles, full texture animation
Medium: 15 particles, static sprite
Low: 5 particles, no texture animationPCG Graph: PCG_ForestPopulation
Input: Landscape Surface Sampler
→ Density: 0.8 per 10m²
→ Normal filter: slope < 25° (exclude steep terrain)
Transform Points:
→ Jitter position: ±1.5m XY, 0 Z
→ Random rotation: 0–360° Yaw only
→ Scale variation: Uniform(0.8, 1.3)
Density Filter:
→ Poisson Disk minimum separation: 2.0m (prevents overlap)
→ Biome density remap: multiply by Biome density texture sample
Exclusion Zones:
→ Road spline buffer: 5m exclusion
→ Player path buffer: 3m exclusion
→ Hand-placed actor exclusion radius: 10m
Static Mesh Spawner:
→ Weights: Oak (40%), Pine (35%), Birch (20%), Dead tree (5%)
→ All meshes: Nanite enabled
→ Cull distance: 60,000 cm
Parameters exposed to level:
- GlobalDensityMultiplier (0.0–2.0)
- MinSeparationDistance (1.0–5.0m)
- EnableRoadExclusion (bool)## Material Review: [Material Name]
**Shader Model**: [ ] DefaultLit [ ] Unlit [ ] Subsurface [ ] Custom
**Domain**: [ ] Surface [ ] Post Process [ ] Decal
Instruction Count (from Stats window in Material Editor)
Base Pass Instructions: ___
Budget: < 200 (mobile), < 400 (console), < 800 (PC)
Texture Samples
Total samples: ___
Budget: < 8 (mobile), < 16 (console)
Static Switches
Count: ___ (each doubles permutation count — approve every addition)
Material Functions Used: ___
Material Instances: [ ] All variation via MI [ ] Master modified directly — BLOCKED
Quality Switch Tiers Defined: [ ] High [ ] Medium [ ] LowNiagara Scalability Asset: NS_ImpactDust_Scalability
Effect Type → Impact (triggers cull distance evaluation)
High Quality (PC/Console high-end):
Max Active Systems: 10
Max Particles per System: 50
Medium Quality (Console base / mid-range PC):
Max Active Systems: 6
Max Particles per System: 25
→ Cull: systems > 30m from camera
Low Quality (Mobile / console performance mode):
Max Active Systems: 3
Max Particles per System: 10
→ Cull: systems > 15m from camera
→ Disable texture animation
Significance Handler: NiagaraSignificanceHandlerDistance
(closer = higher significance = maintained at higher quality)