Hi.
I have a gltf model that I am importing using gltfjsx
(see code below). With this, I am cloning the material
, as well as rendering the skinnedMesh
es twic - first with their original material and then with the clone material. For the cloned material, I set the color
to black, and depthTest
to false. For the other - original and untouched - set of skinnedMeshes, I set renderOrder
to 5.
The result, as you can see is that for each skinnedMesh
, the black model is hidden behind the other model, which has a higher renderOrder
, but the other parts of the models, that are standard mesh
es, and - as you can see in the code - are not directly (in the jsx) rendered, but are rather children of one of the skinnedMesh
es, the copied material
is unmodified and the mesh that is a child of one of the original and untouched skinned meshes has a standard renderOrder
, and so it bleeds through.
see images 1 and 2 for the result of the above.
Does anyhow have a tip on how I can
- for the original model, make sure all meshes (skinned and not) have a higher renderOrder, and 2
- for the copied material, make sure that it’s applied to the children of the skinnedMeshes of which it is applied.
I have also tried to remove all non skinned meshes in blender, and the result is as it should be (see images 3 and 4)
Hope this is somewhat clear, I leave images and code below, please ask if you need clarifications.
export function Model(props: Props) {
const group = useRef<THREE.Group>(null!)
const { scene, materials, animations } = useGLTF("/NPCs/knight.glb") as GLTFResult
const clone = useMemo(() => SkeletonUtils.clone(scene), [scene])
const graph = useGraph(clone)
const nodes = graph.nodes as GLTFResult["nodes"]
const { actions } = useAnimations(animations, group)
useNpcActions(actions, props.action)
const material = useMemo(() => {
const material = materials.knight_texture.clone()
material.color = new THREE.Color(0, 0, 0)
material.depthTest = false
return material
}, [materials.knight_texture])
return (
<group ref={group} {...props} dispose={null}>
<group name="Scene">
<group name="Rig">
<primitive object={nodes.root} />
<skinnedMesh
castShadow
receiveShadow
name="Knight_ArmLeft"
geometry={nodes.Knight_ArmLeft.geometry}
material={material}
skeleton={nodes.Knight_ArmLeft.skeleton}
/>
<skinnedMesh
castShadow
receiveShadow
name="Knight_ArmRight"
geometry={nodes.Knight_ArmRight.geometry}
material={material}
skeleton={nodes.Knight_ArmRight.skeleton}
/>
<skinnedMesh
castShadow
receiveShadow
name="Knight_Body"
geometry={nodes.Knight_Body.geometry}
material={material}
skeleton={nodes.Knight_Body.skeleton}
/>
<skinnedMesh
castShadow
receiveShadow
name="Knight_Head"
geometry={nodes.Knight_Head.geometry}
material={material}
skeleton={nodes.Knight_Head.skeleton}
/>
<skinnedMesh
castShadow
receiveShadow
name="Knight_LegLeft"
geometry={nodes.Knight_LegLeft.geometry}
material={material}
skeleton={nodes.Knight_LegLeft.skeleton}
/>
<skinnedMesh
castShadow
receiveShadow
name="Knight_LegRight"
geometry={nodes.Knight_LegRight.geometry}
material={material}
skeleton={nodes.Knight_LegRight.skeleton}
/>
<skinnedMesh
renderOrder={50}
castShadow
receiveShadow
name="Knight_ArmLeft"
geometry={nodes.Knight_ArmLeft.geometry}
material={materials.knight_texture}
skeleton={nodes.Knight_ArmLeft.skeleton}
/>
<skinnedMesh
renderOrder={50}
castShadow
receiveShadow
name="Knight_ArmRight"
geometry={nodes.Knight_ArmRight.geometry}
material={materials.knight_texture}
skeleton={nodes.Knight_ArmRight.skeleton}
/>
<skinnedMesh
renderOrder={50}
castShadow
receiveShadow
name="Knight_Body"
geometry={nodes.Knight_Body.geometry}
material={materials.knight_texture}
skeleton={nodes.Knight_Body.skeleton}
/>
<skinnedMesh
renderOrder={50}
castShadow
receiveShadow
name="Knight_Head"
geometry={nodes.Knight_Head.geometry}
material={materials.knight_texture}
skeleton={nodes.Knight_Head.skeleton}
/>
<skinnedMesh
renderOrder={50}
castShadow
receiveShadow
name="Knight_LegLeft"
geometry={nodes.Knight_LegLeft.geometry}
material={materials.knight_texture}
skeleton={nodes.Knight_LegLeft.skeleton}
/>
<skinnedMesh
renderOrder={50}
castShadow
receiveShadow
name="Knight_LegRight"
geometry={nodes.Knight_LegRight.geometry}
material={materials.knight_texture}
skeleton={nodes.Knight_LegRight.skeleton}
/>
</group>
</group>
</group>
)
}