Very good! The face/eyes also do not need to be a separate mesh, though I understand if you’d like to do that. You will not need a custom shader, godot’s standard material can alter UV coordinates like that without a custom shader, you will have to do a little math when switching faces.
Sample of a 2x4 scaled grid like in the tutorial
With these settings we could use this function to set which face
@export var mat: StandardMaterial3D
func pick_face(x: int, y: int) -> void:
mat.uv1_offset = Vector3(0.5 * x, 0.25 * y, 0)
pick_face(0, 0) # top left
pick_face(0, 1) # below top left