This has nothing to do with the geometry.
THREE.SceneUtils.createMultiMaterialObject()
achieves its effect by creating a parent object and two child meshes, each with the same geometry.
You need to set receiveShadow
on the children, instead of the parent.
mesh.children[ 0 ].receiveShadow = true;
mesh.children[ 1 ].receiveShadow = true;
To get Raycaster.intersectObjects()
to work on hierarchical objects, you need to pass in the recursive
flag like so.
raycaster.intersectObjects( objects, true );
three.js r.59