You can also extract the vertex indices of the intersected face by accessing the face property of the intersection object.
You then use the instance ID to extract the respective instance matrix via InstancedMesh.getMatrixAt() and multiply it with the world matrix of the instanced mesh. You use the resulting matrix to transform the vertices to world space which you extract from the position buffer with the above vertex indices.
var vector = new THREE.Vector3(positionAttr[a],positionAttr[b],positionAttr[c])
var instanceMatrix = new THREE.Matrix4()
intersect.object.getMatrixAt(intersect.instanceId,instanceMatrix)
var result = instaceMatrix.multiply(intersect.object.matrixWorld)
Here it is giving me same result as instaceMatrix because my matrix world is
var instanceMatrix = new THREE.Matrix4()
intersects[i].object.getMatrixAt(intersects[i].instanceId, instanceMatrix)
vA.fromBufferAttribute( positionAttr, a ).applyMatrix4(instanceMatrix)
vB.fromBufferAttribute( positionAttr, b ).applyMatrix4(instanceMatrix)
vC.fromBufferAttribute( positionAttr, c ).applyMatrix4(instanceMatrix)
var minDistance = vA.distanceTo(intersects[i].point)
var point = vA
if(minDistance > vB.distanceTo(intersects[i].point)){
minDistance = vB.distanceTo(intersects[i].point)
point = vB
}
if(minDistance > vC.distanceTo(intersects[i].point)){
minDistance = vC.distanceTo(intersects[i].point)
point = vC
}