How Materials Work in RenderDragon
Every rendered object in Minecraft Bedrock uses a material definition to tell the graphics pipeline how to process its textures and geometry. Since the introduction of the RenderDragon engine, custom `.material` files inside resource packs are largely restricted or ignored for shader definitions, making the built-in vanilla material list the primary tool for controlling visual surface properties.
You do not need to define these materials yourself; they already exist in the base game files. You simply reference their string identifiers inside your client entity definitions, attachable definitions, particle files, or inside the `minecraft:material_instances` component of a behavior pack block. Choosing the wrong material is the most common reason custom textures appear pitch black, turn invisible from behind, or fail to render semi-transparent pixels.
Entity and Attachable Materials
Entity materials are declared inside the `description.materials` object of a client entity or attachable file, where you map a short alias (often `default`) to a vanilla material identifier. That alias is then invoked by a render controller. If your texture is completely solid with no transparent gaps, `entity` is the cheapest and safest option.
When your texture uses transparent pixels, you must choose between alpha testing (1-bit cutout, where pixels are either 100% opaque or 100% invisible) and alpha blending (smooth translucency like stained glass). Alpha testing via `entity_alphatest` is strongly preferred for hair, clothes, and foliage because it writes properly to the depth buffer. Alpha blending via `entity_alphablend` should be saved for ghosts, visors, or energy shields, as overlapping translucent bones often flicker or sort in the wrong order.
| Material Identifier | What it does | Notes |
|---|---|---|
| entity | Renders a completely opaque surface with standard backface culling. | Transparent pixels on the PNG will render as solid black or white. |
| entity_alphatest | Discards pixels below an alpha threshold, rendering sharp cutout edges. | Standard choice for 90% of custom mobs and 3D armor. |
| entity_nocull | Opaque rendering, but draws both the front and back faces of flat planes. | Does not support transparency despite the name; use entity_alphatest for flat 2D planes with cutouts. |
| entity_alphablend | Enables partial transparency (0% to 100% opacity) across the texture. | Prone to Z-fighting and depth sorting glitches when bones overlap. |
| entity_emissive | Ignores world lighting based on the alpha channel of the texture. | Opaque surface; pixels with an alpha value below 255 glow in the dark, while 255 alpha receives normal lighting. |
| entity_emissive_alpha | Combines cutout transparency with emissive glow. | Alpha 0 is fully invisible; partial alpha values (1–254) glow in the dark; alpha 255 renders normally without glowing. |
| entity_multitexture | Blends multiple texture layers together inside a single render controller. | Used on mobs like horses or villagers that layer markings and clothing. |
| spider | Specialized emissive material originally built for spider eyes. | Usually paired with a secondary eye texture in a separate render controller. |
| charged_creeper | Additive blending material designed for scrolling UV energy overlays. | Black pixels become transparent; bright pixels add light to the underlying model. |
{
"format_version": "1.10.0",
"minecraft:client_entity": {
"description": {
"identifier": "wiki:crystal_golem",
"materials": {
"default": "entity_alphatest",
"glow_layer": "entity_emissive_alpha",
"core_glass": "entity_alphablend"
},
"textures": {
"default": "textures/entity/crystal_golem"
},
"geometry": {
"default": "geometry.crystal_golem"
},
"render_controllers": [
"controller.render.crystal_golem"
]
}
}
}Block Render Methods
Custom blocks do not reference entity materials. Instead, they declare a `render_method` inside the `minecraft:material_instances` component in the behavior pack block file. Although the JSON key is named `render_method`, it maps directly to the engine's internal terrain materials.
Each face or material instance on your block can specify its own `render_method`, along with boolean flags like `face_dimming` and `ambient_occlusion`. Keep in mind that `blend` (translucent) blocks are much heavier on performance in large quantities than `alpha_test` blocks.
| Render Method | What it does | Notes |
|---|---|---|
| opaque | Draws a solid block surface with no transparency. | Default if omitted. Best performance for full cubes. |
| alpha_test | Enables sharp cutout transparency and disables backface culling by default. | Use for custom crops, grates, chains, and foliage. |
| alpha_test_single_sided | Cutout transparency that culls (hides) the back faces of geometry planes. | Useful for hollow models with cutout windows where you only want the outside visible. |
| blend | Enables smooth partial transparency like stained glass, ice, or water. | Faces behind a blend surface may disappear if they share the same material and touch. |
| double_sided | Opaque rendering that draws both sides of zero-thickness planes. | No transparency support. |
{
"format_version": "1.20.80",
"minecraft:block": {
"description": {
"identifier": "wiki:amber_lantern"
},
"components": {
"minecraft:geometry": "geometry.amber_lantern",
"minecraft:material_instances": {
"*": {
"texture": "amber_frame",
"render_method": "alpha_test"
},
"glass_pane": {
"texture": "amber_glass",
"render_method": "blend",
"ambient_occlusion": false,
"face_dimming": false
}
}
}
}
}Particle Materials
Particles assign a single material string under `basic_render_parameters.material` in their resource pack JSON. Because particles are flat billboards that constantly rotate toward the camera, they always render single-sided and rely heavily on alpha channels to shape the sprite.
If you want a particle to glow at night without emitting real block light, you do not use an emissive alpha channel trick like entities do. Instead, you simply omit the `minecraft:particle_appearance_lighting` component from the particle file; without that component, the particle renders at full brightness automatically.
| Particle Material | What it does | Notes |
|---|---|---|
| particles_opaque | Draws the particle square with zero transparency. | Any transparent border in your PNG turns black. |
| particles_alpha | Cutout transparency based on an alpha threshold. | Standard material for crisp pixel-art particles like vanilla smoke and potion swirls. |
| particles_blend | Smooth semi-transparency across the sprite. | Required when using `minecraft:particle_appearance_tinting` to fade alpha out over time. |
| particles_add | Additive color blending against the background. | Great for fire, lasers, and magic sparks; dark colors become invisible and bright colors glow intensely. |
{
"format_version": "1.10.0",
"particle_effect": {
"description": {
"identifier": "wiki:ember_spark",
"basic_render_parameters": {
"material": "particles_alpha",
"texture": "textures/particle/ember_spark"
}
},
"components": {
"minecraft:particle_initialization": {
"per_render_expression": "variable.size = 0.15;"
},
"minecraft:emitter_rate_instant": {
"num_particles": 10
},
"minecraft:emitter_lifetime_once": {
"active_time": 1.0
},
"minecraft:emitter_shape_point": {},
"minecraft:particle_lifetime_expression": {
"max_lifetime": 1.5
},
"minecraft:particle_appearance_billboard": {
"size": [ "variable.size", "variable.size" ],
"facing_camera_mode": "rotate_xyz"
}
}
}
}Which versions this applies to
Applies to all modern Bedrock versions (1.16.100+ and 1.20.x) running the RenderDragon engine. No experimental toggles are required to use vanilla materials or block `minecraft:material_instances`.
When it does not work
| What you see | Why | The fix |
|---|---|---|
| Transparent areas on a custom entity or armor piece show up as solid black or white in-game. | The entity or attachable is using the `entity` material, or your image editor discarded RGB data on 0-alpha pixels when saving. | Change the material in `description.materials` from `entity` to `entity_alphatest`. |
| The entire entity glows in the dark when using `entity_emissive_alpha`, or the glowing parts turn completely invisible. | `entity_emissive_alpha` uses the PNG alpha channel for two jobs at once: 0% opacity is invisible, 1%–99% opacity glows in the dark, and 100% opacity (alpha 255) renders as normal non-glowing geometry. | Set non-glowing pixels to 100% opacity (255), glowing pixels to around 90% opacity (230) in your image editor, and cutout background pixels to 0% opacity. |
| Particle fading via `minecraft:particle_appearance_tinting` snaps out of existence suddenly instead of fading smoothly. | The particle is using `particles_alpha`, which only understands binary cutout transparency and ignores smooth alpha gradients. | Change `basic_render_parameters.material` to `particles_blend` in the particle JSON. |
| Content Log Error: `[Blocks][error]-block_name | minecraft:material_instances - render_method 'entity_alphatest' is not valid`. | You used an entity material identifier inside a behavior pack block file. | Replace `entity_alphatest` with `alpha_test` inside the block's `minecraft:material_instances` component. |
Reference, straight from the game files
Read out of the game itself, so the ids match the version you are building for.
