Render controllers
A client entity lists render controllers (each optionally under a Molang condition), and each controller that applies
draws the entity once more: it picks a geometry, a texture and a material per bone, all by Molang over the entity’s
geometry., texture. and material. names and the controller’s own array. lists. Observed · the vanilla render controllers of bedrock-samples v1.26.60.5
An entity with several controllers is drawn in layers, as the creaking’s emissive eyes and the warden’s glowing spots
are separate controllers over the same geometry. Observed · the vanilla render controllers of bedrock-samples v1.26.60.5
Each later controller draws over the ones before. Inferred
Bone rules
Section titled “Bone rules”materials and part_visibility are lists of objects whose keys are bone names with * wildcards. Observed · the vanilla render controllers of bedrock-samples v1.26.60.5
The rules apply in order, a later rule overriding an earlier one for the bones it matches. Inferred The vanilla data
relies on this: the creaking’s eyes controller has [{"*": false}, {"head": "variable.has_emissive_eyes"}], which
shows only the head, and the NPC’s has {"*": false, "head": true, ...}, which hides every bone but those named.
Observed · the vanilla render controllers of bedrock-samples v1.26.60.5
Colours and texture offset
Section titled “Colours and texture offset”| Field | Value | What reads it | Confidence |
|---|---|---|---|
overlay_color |
r, g, b, a |
OVERLAY_COLOR of USE_OVERLAY materials: the texel is mixed toward it by a |
Inferred |
color |
r, g, b, a; this is the entity’s own colour |
CHANGE_COLOR of USE_COLOR_MASK and similar materials |
Inferred |
uv_anim |
offset (u, v) and scale (u, v) |
UV_ANIM of USE_UV_ANIM materials: uv = offset + uv * scale |
Inferred |
ignore_lighting |
boolean | the entity is drawn at full light | Inferred |
What each stage does with these colours is on entity materials.
Examples in the vanilla data Observed · the vanilla render controllers of bedrock-samples v1.26.60.5:
- The experience orb’s controller pulses
overlay_color(r = (sin(life_time * 500) + 1) / 2,g = 1,b = (sin(life_time * 500 + 240) + 1) / 10,a = 0.5) and picks its frame of the 4 × 4 orb atlas withuv_animoffsets the client entity computes:u = (texture_frame_index mod 4) * 16 / 64,v = round(texture_frame_index / 4) * 16 / 64. - The warden’s glowing layers set
colorwithr,g,bat 1 andafrom its scripts:0.7for the bioluminescent layer,0.25 * cos(life_time * 20 * 2.578)and its opposite phase for the two spot layers, the tendril animation for the tendrils,0.8 * (1 - heartbeat_phase)(0.2 while hurt) for the heart. - The horse’s controller sets
colorto the armour’s dye (query.armor_color_slot(4, n)) when it wears dyed armour,thisotherwise. - The armor stand’s controllers set
overlay_colorwithaat 0. - The splash and lingering potions’ controllers take their texture from a 31-entry
array.skinsbyquery.variant, one entry per effect in the ordermoveSlowdown,moveSpeed,digSlowdown,digSpeed,damageBoost,heal,harm,jump,confusion,regeneration,resistance,fireResistance,waterBreathing,invisibility,blindness,nightVision,hunger,weakness,poison,wither,healthBoost,absorption,saturation,levitation,turtleMaster,slowFall,windCharged,weaving,oozing,infested, withdefaultlast (index 30), and givetexture.enchantedas their second texture.
The orb’s texture_frame_index is its size class, 0 to 10 by the experience it carries, as Java Edition picks an orb’s
icon. Inferred A thrown potion’s query.variant is the index of its first effect in that list, and 30 for a potion
with no effect. Inferred
The orb’s v offset rounds texture_frame_index / 4, so if Molang’s math.round rounds halves up, indices 2 and 3
pick the atlas’s second row and index 10 its fourth. Whether that is the intended frame, and what the atlas’s last
five cells (plain discs) are for, is not established.