after 2 days of trying, i solved it! for thoose who are wondering:
to fix the random scaling, i made the bullethole a child of a node3D that will contain all bulletholes and not just being a child of the collider, because if it was a child of the collider and the collider is scaled: you will get stretched/scwuished bulletholes( shoutout to @gertkeno )
var bulletHoleNode = BULLET_HOLE.instantiate()
bulletholes.add_child(bulletHoleNode)
to fix, z-fighting, i just changed the bullethole’s position to x:0, y:0, z: -0.001
and to fix the rotation issues, i made a surface detector for if its the ground, that the z axis rotates at 90°
func create_bullet_hole() -> void:
var bulletHoleNode = BULLET_HOLE.instantiate()
bulletholes.add_child(bulletHoleNode)
# Set the position of the bullet hole at the collision point
bulletHoleNode.global_position = shooter.get_collision_point()
# Get the normal of the surface
var normal = shooter.get_collision_normal()
# Determine rotation based on the normal
if abs(normal.y) > 0.5: # If the normal is mostly vertical (top/bottom)
bulletHoleNode.rotation_degrees = Vector3(90, 0, 0) # Rotate 90° on X-axis
else: # Otherwise, assume it's a wall face
bulletHoleNode.look_at(bulletHoleNode.global_position + normal, Vector3.UP)