Skip to main content

Skin Rendering

3D Skin Layers and Ears both draw extra geometry from the player's skin file instead of from the vanilla player model, so by themselves they ignore what Apoli does to that model. A player faded to 10% alpha would keep a fully opaque hat layer floating around their head. Apoli hooks both mods so their geometry follows the render powers.

This integration is behaviour-gated and adds no types. There is nothing to enable and no new JSON: install either mod and the powers you already have apply to it. Ears 1.4 and Ears 2 are both supported.

What follows what

Apoli feature3D Skin LayersEars
apoli:model_color on the whole modelTinted, alpha includedTinted, alpha included
apoli:model_color parts entriesTinted for each matching body partTinted for each Ears feature named in parts
apoli:modify_model_parts rotation, scale and pivotFollowedFollowed
apoli:modify_model_parts visibleFollowedFollowed
apoli:modify_model_parts hiddenFollowedNot applicable
apoli:modify_model_parts visible or hidden on an Ears feature nameNot applicableThat feature is hidden
apoli:custom_model_render replacing the skin or modelHiddenHidden
apoli:modify_player_model with any model except apoli:vanillaHiddenHidden
apoli:prevent_feature_renderskin_layers_3dears, or one feature at a time
A fully transparent model (alpha 0)HiddenHidden

A render_as_overlay custom model doesn't hide either mod. An overlay is drawn on top of the vanilla skin, so the extra geometry still belongs there.

Body part names

Ears features have their own body part names: ears, right_ear, left_ear, horns, snout, tail, claws and one for each claw, wings, right_wing, left_wing, ears_chest and ears_cape, plus halo and the digitigrade legs on Ears 2. Name one in the parts of apoli:model_color to tint just that feature, or hide it with a visible or hidden transformation in apoli:modify_model_parts:

{
    "type": "apoli:multiple",
    "horns": {
        "type": "apoli:modify_model_parts",
        "transformations": [
            {"model_part": "horns", "type": "visible", "value": 0}
        ]
    },
    "tail": {
        "type": "apoli:model_color",
        "parts": [
            {"part": "tail", "red": 0.3, "green": 0.3, "blue": 1.0}
        ]
    }
}

This hides the horns and tints the tail blue, leaving every other feature and the rest of the skin as they were. Rotation, scale and pivot transformations do nothing to an Ears feature, because Ears draws them itself, following the limb they hang from.

Feature names

Alongside the vanilla feature layer names, apoli:prevent_feature_render accepts:

NameHides
skin_layers_3dEvery 3D Skin Layers layer: hat, jacket, sleeves and trouser legs
earsEvery Ears feature
ears_earsThe ears
ears_hornThe horns
ears_snoutThe snout
ears_tailThe tail
ears_wingsThe wings
ears_capeThe Ears cape
ears_chestThe chest piece
ears_claw_left_arm, ears_claw_right_arm, ears_claw_left_leg, ears_claw_right_legThe matching claws
ears_haloThe halo (Ears 2)
ears_digitigrade_left_leg, ears_digitigrade_right_legThe matching digitigrade leg (Ears 2)

An apoli:prevent_feature_render with no feature or features at all means every feature layer, and that includes both mods.

{
    "type": "apoli:prevent_feature_render",
    "features": [
        "skin_layers_3d",
        "ears_tail",
        "ears_wings"
    ]
}

This flattens the skin back to two dimensions and hides the tail and wings, which helps while a form change power has the holder in a shape those features don't belong on.

note

The forced white overlay of apoli:model_color (red, green and blue all set to 1) reaches the 3D layers but not Ears. Ears' vertex path takes no overlay coordinate, so a whitened player keeps normally coloured ears.

Both integrations run on the client. A dedicated server neither knows nor cares whether these mods are installed, so a pack using the feature names above loads either way.