To provide the highest possible performance and compatibility with modern Unity rendering features (like the GPU Resident Drawer and SRP Batcher), all DPT asset packages share a single, unified Master Shader Graph and Material.
The One Material Philosophy
Instead of cluttering your project with dozens of unique materials that break batching and increase draw calls, our assets are designed to share one material. The inspector dynamically adapts to show only the properties relevant to the workflow you are currently using.
Important: Runtime cost is determined only by the features actively enabled on the material. If a feature is not used by an asset (e.g., no valid data is supplied), the shader bypasses that feature path entirely, resulting in no runtime GPU cost from that system.
Mixing Packages & Best Practices
If you are using multiple DPT packages within the same scene (e.g., combining Harvestable Nature with Interactive Props), you will maximize your performance by assigning the exact same Material asset to all of them.
Important Setup Rule for Mixed Projects:
We highly recommend sharing a single instance of the M_DPT_VCCORE Master Material across all assets to maximize performance and batching efficiency.
Because the shader uses dynamic branching and keyword compilation, standard assets that do not use advanced features (like Normal Map arrays or procedural details) will safely bypass those systems with minimal additional runtime cost, even if they share the material with interactive or complex assets that do use them.
Dynamic Interface Features
To further reduce clutter, the VCCORE interface is context-aware:
Workflow Setup: Toggling Use Vertex Colors will automatically hide the standard Base Color and Metallic/AO texture slots, as the shader shifts to reading mesh data.
Nested Properties: Advanced toggles like Use Normal Texture or procedural detail settings will only display their respective strength sliders and texture slots when actively checked.
Vertex Colors Gates More Than Just Textures:
Use Vertex Colors doesn't just hide the standard texture slots — it also fully hides the Emission System, Wind System, and Procedural Details sections when disabled. These systems rely on the vertex-color-driven pipeline, so if you're working with a standard texture-based workflow, none of these sections will appear in the Inspector, regardless of which packages you own. Re-enable Use Vertex Colors to access them. Stylized Lighting and the Metallic/Non-Metallic Tint controls are not affected by this and remain available either way.
Ecosystem Detection & Adaptive UI
To ensure a completely seamless setup experience across our modular catalog, the Master Material Inspector features an automated Ecosystem Detection System. Instead of overwhelming your workspace with settings for packages you do not own, the layout dynamically matches your active project files.
How It Works
Each DPT package contains an explicit signature file. When a package is loaded or imported, the editor performs a lightweight project scan once to update your layout capabilities dynamically:
Tailored Workspace: Advanced property blocks—such as Vegetation Systems, Procedural Details, Emission, or DPT Package Normals—remain entirely hidden from the UI unless you own a package that explicitly uses them.
Additive Progression: When you purchase and import an additional DPT package, its built-in signature file is detected immediately. The Inspector unhides the new settings automatically across the project, completely preserved and without disabling or resetting any configurations for assets you already own.
Independent Core Updating: Because features are verified strictly by the presence of these signature tags, you can update the Core framework folder at any time without needing to modify or re-download your existing thematic asset expansion packs.
No Manual Setup:
This discovery scan executes natively inside Unity during compilation passes. There are no manual serial keys, activation panels, custom preprocessor directives, or complex scripting configuration arrays to manage.
Procedural Details
When the Use Procedural Details toggle is enabled, the Inspector reveals controls for dynamically generating micro-surface details based on the vertex data of the mesh. Rather than relying on unique, memory-heavy textures, these details are calculated mathematically on the GPU.
While the exact features available (such as Rock, Leather, or Bark) depend on the DPT packages present in your project, the adjustment sliders share a universal behavior across all types:
Strength: Controls the intensity of the generated normals. Increasing this value makes the procedural bumps and crevices appear deeper and more pronounced under scene lighting.
Width: Adjusts the scaling of the procedural pattern. Note: Increasing the width slider actually increases the tiling frequency, resulting in visually smaller, denser details across the surface.
Value (Where applicable): Certain procedural features include an additional Value slider. This adjusts the base color contrast of the generated detail, allowing you to lighten or darken the procedural overlay against the object's original color.
Procedural Detail Array
To ensure maximum compatibility with the SRP Batcher and GPU Resident Drawer, all procedural surface details (such as Bark, Leather, Rock, and Metallic imperfections) are packed into a single, highly optimized Texture2D Array.
This universal array is shared across all DPT packages. The Master Shader dynamically selects the correct texture slice per-mesh via the vertex color alpha channel, meaning no material changes or additional draw calls are ever required.
No Setup: The array is completely pre-configured. When you enable Use Procedural Details on the material, the correct normals and detail data are applied instantly.
Memory Efficiency: To keep VRAM footprints strictly minimized, all procedural detail textures within the array are authored at a highly optimized 512x512 resolution. Because these are tiled micro-details, they maintain crisp visual fidelity without bloating your memory budget.
Dynamic Branching: If a mesh does not use procedural details (or if the detail sliders are set to zero), the shader's internal branching safely bypasses the array sampling logic entirely to ensure minimal GPU overhead.
Mobile & Low-Memory Projects:
While the default detail array is highly optimized at 512x512, a 256x256 variant is also included in the Core folder for strict mobile or VR memory budgets. You can swap this out directly in the Material Inspector under the Procedural Details texture slot.
Wood Grain Value Map:
In addition to the normal array, the system uses a single, dedicated packed texture to handle the base color value adjustments for the Procedural Wood Grain. This operates automatically alongside the detail array when Wood features are active.
Stylized Lighting & Shadow Shaping
The VCCORE shader includes an optional Stylized Lighting mode, which replaces the default smooth PBR falloff with an art-directable light/shadow split, plus independent control over shadow color and darkness. When Stylized Lighting is disabled, the material behaves exactly as standard PBR — the system is fully bypassed with no runtime cost.
These two properties define where, across the surface, the transition from lit to shadowed occurs:
0.0 anchors that edge toward the fully lit result.
1.0 anchors that edge toward the fully shadowed (dark) result.
Widening the gap between the two terminators softens and broadens the transition, spreading it out toward a smooth, natural gradient similar to standard Lambertian shading. Narrowing the gap tightens and hardens the transition, up to a fully solid, hard-edged shadow line when they overlap.
Default Values:
Out of the box, Shadow Terminator is set to 0.3 and Light Terminator to 0.5 — a fairly narrow band that produces a crisp, contrasty stylized shadow line rather than a soft gradient. Shadow Tint defaults to black and Shadow Strength defaults to 1.0, so enabling Stylized Lighting will produce a visible effect immediately without needing to adjust any other settings first.
Terminators Cannot Cross:
Shadow Terminator and Light Terminator are clamped so that one can never pass the other. Dragging one past the other's position will instead drag the second value along with it, preserving their relative order at all times.
Under the hood, the terminator transition is driven by a half-lambert value — the surface normal's dot product with the light direction, remapped from its native -1…1 range into 0…1. A value of 0 corresponds to surfaces facing directly away from the light, while 1 corresponds to surfaces facing directly toward it. Shadow Terminator and Light Terminator act as the lower and upper thresholds against this value, which is why spreading them toward 0 and 1 produces a full-range, gradual falloff across the whole surface, while narrowing the range hardens the transition into a sharper line.
Light Normal Smoothness (Range: 0.0 – 1.0)
When lighting low-poly meshes with detailed normal maps, sharp lighting terminators can sometimes cause pixelated or jagged shadow edges along polygon boundaries. The Light Normal Smoothness slider allows you to smoothly blend between your detailed normal map and the mesh's clean vertex normals specifically for lighting dot-product calculations.
This eliminates jagged shadow terminators on low-poly geometry while preserving 100% of your normal map's texture bump details in specular reflections and direct light highlights!
Shadow Strength (Range: 0.0 – 1.0)
Controls how strongly the shadowed region is darkened and tinted:
0.0: The shadow region is left untouched (white), regardless of the Shadow Tint color or the terminator settings.
1.0: The shadow region is fully darkened and takes on the Shadow Tint color at full intensity.
Shadow Strength Gates the Terminators:
Because Shadow Strength controls the overall visibility of the shadow effect, leaving it at 0.0 will make Shadow Terminator and Light Terminator appear to have no effect — the shadow shape is still being calculated, but it resolves to white either way. Increase Shadow Strength above 0 to see the terminator shaping take effect.
Shadow Tint
Sets the color applied to the shadowed side of the surface. This color is blended in according to Shadow Strength, then multiplied against Base Color before final output — allowing for cool/warm shadow color grading (e.g. blue-tinted shadows on a warm-lit object) without any additional lights or post-processing.
Shadow Rim Lighting (Bounce & Edge Glow)
The VCCORE shader includes an integrated ambient shadow bounce and rim lighting system evaluated directly in Emission. This allows models to display vibrant, cool-toned outlines or atmospheric backlighting on their shadowed sides without being crushed or darkened by direct light attenuation.
Shadow Rim Color (HDR): Independent HDR color control for the ambient shadow glow.
Shadow Rim Sharpness: Controls the silhouette tightness of the edge highlight. Higher values push the reflection into a razor-thin line along the grazing angle, while lower values create a broad, gentle ambient fade.
Shadow Rim Strength: Master intensity multiplier for the bounce lighting luminance.
Surface-Modulated Highlights & Cavity Masking:
The rim lighting system dynamically responds to surface properties. Polished metallic surfaces automatically sharpen their rim outline into crisp highlights, while matte surfaces produce soft ambient bounce shading. Furthermore, the system incorporates dual-threshold AO masking ("Cavity Killer") to ensure hollow interiors (such as sockets or pipe bores) stay pitch-black without chopping up exterior silhouette outlines.
Real-Time Cast Shadow Controls (Cast Shadow Min / Max)
In addition to self-shading terminators, VCCORE provides independent threshold and softness controls for real-time cast shadows (such as tree leaves or character shadows falling onto your props in URP):
Cast Shadow Min: Defines the threshold where incoming real-time cast shadows begin to appear.
Cast Shadow Max: Defines the threshold where incoming real-time cast shadows reach full opacity.
Widening the range between Min and Max softens incoming cast shadow edges, while narrowing the range creates crisp, razor-sharp cel-shaded cast shadows that match your self-shading terminators. The system includes built-in safety clamping to prevent shadow map bias flickering at high slider values.
Scene Shadow Helpers (URP Only)
Because Shadow Terminator, Light Terminator, Shadow Tint, and Shadow Strength are all self-shading effects baked into this material, they're entirely separate from Unity's own real-time cast shadows and scene color grading. You may wish to adjust your shadow settings in your URP asset and volume profile to match the shadow settings of the objects.
Emission System
The VCCORE shader includes a highly optimized emission system. When Enable Emission is toggled on in the inspector, you can control the glow intensity and color for any designated emissive areas on the mesh.
Requires the Emission Package Signature:
Like Procedural Details, the Emission System is part of the Ecosystem Detection System — the entire section is hidden from the Inspector unless you own a DPT package that includes the Emission signature file. It also requires Use Vertex Colors to be enabled, as it does not appear in texture-based workflows.
Global vs. Per-Instance Emission
The emission system is designed to work seamlessly with the One Material Philosophy, allowing for both global and per-object control:
Global Material Emission: The Emissive Color and baseline Emission Strength properties in the Material Inspector act as a master setting. Whatever color and intensity you set here applies universally to every object in your scene sharing this material.
Per-Instance Emission: The emission system natively hooks into the DPT_ShaderVariation script. If an object has this script attached, the script's Instance Color (and Alpha channel) will multiply against the material's master emissive settings, allowing you to recolor the glow and adjust its intensity on a per-object basis without duplicating the material.
Metallic Emissive Color
The Emission workflow features a dedicated Metallic Emissive Color property alongside the standard Base Emissive Color. You can now independently customize and drive emissive glow hues on metallic hardware (such as iron runes, copper pipes, or steel vents) entirely separately from non-metallic base materials on the same mesh!
The Metallic Object Exception:
Due to how the shader processes specular reflection data, metallic objects cannot have their emission color changed per-instance via the script. Instead, metallic emission is controlled globally by the dedicated Metallic Emissive Color property in the Material Inspector. However, you can still use the DPT_ShaderVariation script (via the Alpha channel) to control the emission strength of these metallic objects on a per-instance basis.
The "White Base" Strategy for Perfect Tinting:
If you want to use the DPT_ShaderVariation script to dynamically change the glow color of different objects (e.g., a red potion and a blue potion using the exact same material), set the master Emissive Color in the Material Inspector to pure White. Because the script uses mathematical multiplication, a white base allows the script's color to dictate 100% of the final glow hue. Note: this only applies to non-metallic surfaces — see the Metallic Object Exception above, as metallic emission hue cannot be changed per-instance regardless of the base color setting.
Advanced Setup: Independent Body & Glow Colors
Because the DPT_ShaderVariation script passes a single color per MeshRenderer, the object's body tint and emissive glow will share the same hue. If you need an object to have contrasting colors (e.g., a dark blue sword with bright orange glowing runes), the industry-standard best practice is to separate the glowing runes into a floating decal child mesh. This allows you to apply one variation script to the sword body, and a separate variation script to the rune mesh, keeping both perfectly batched under the same master material.
Color Variation
Per-instance color and brightness variation is handled by the DPT_ShaderVariation component, which writes variation data directly to Unity's GPU instancing buffer without duplicating or modifying the shared material.
Using the DPT Prefab Painter: The component is added and configured automatically when Randomize Brightness is enabled. No manual setup is required.
Placing objects manually: Add the DPT_ShaderVariation component to any object or root parent in your scene and adjust the Instance Color swatch directly in the Inspector.
One Material To Rule Them All:
Because variation data is pushed directly to the GPU instance buffer, your shared material is never cloned, duplicated, or modified — regardless of how many objects carry unique color values. Your batching and GPU Resident Drawer compatibility remain completely intact.
Metallic & Non-Metallic Tint Control
The Master Material includes separate toggles and intensity sliders for metallic and non-metallic surface regions, giving precise control over how instanced color tinting from DPT_ShaderVariation is applied across different material types on the same mesh.
Script Dependency: These toggles act purely as shader gatekeepers. They have no effect on their own and cause no visual changes unless a DPT_ShaderVariation component is actively passing color data to the mesh via the RSUV pipeline.
Non-Metallic Tint: Controls whether diffuse, non-metallic surface regions receive the instanced color tint. When disabled, non-metallic areas are excluded from tinting entirely.
Metallic Tint: Controls whether metallic surface regions participate in tinting. When disabled, metallic areas are isolated from the tint and preserve their physically accurate specular reflection characteristics.
Optimized Keyword Architecture:
To ensure maximum runtime performance and minimal shader memory overhead, redundant shader compilation keywords for Metallic and Non-Metallic Tinting have been stripped from the pipeline. The tint gates now execute via high-speed dynamic branching, resulting in faster project build times and fewer shader variants without losing any tinting capability!
Tint Strength Sliders (Range: -2.0 to 1.0)
Both sliders share the same asymmetric range, allowing control beyond simple tint blending in either direction:
0.0: No tint is applied to that surface type.
1.0: Full tint intensity is applied uniformly, matching the instance color exactly.
Negative values (-2.0 to 0.0): Inverts the tint direction on that surface type, creating contrast effects between different regions of the same mesh. For example, darkening the wood of a chest while simultaneously making its metal fastenings appear brighter — useful for stylized aesthetics without any additional lights or post-processing.
Full technical documentation for the DPT_ShaderVariation component, including brightness range settings and the HDR tinting system, can be found in the Shader Variation guide.
Support & Custom Pipeline Integration
If your project requires external or custom 3D models to be fully integrated into the DPT ecosystem—including custom vertex-data packing, procedural wood grain mapping, normal array configuration, advanced GPU wind system implementation, or any other bespoke features—freelance technical art services are available. Additionally, availability extends to general 3D asset production, high-to-low poly hard surface modeling, stylized prop creation, and game-ready LOD budgeting built to align cleanly with your specific project constraints.
Contact & Inquiries:
For freelance modeling contracts, custom asset optimization passes, standard package bug reports, and publisher licensing enquiries, please use the Contact Form on the DPT Games Hub.
DPT Support Discord:
For dedicated technical assistance, asset configuration help, and direct feedback on our Unity packages, join the Support Server.