They just have different entrance animation. Functionally the same, for the most part.
Long story short, (PID High xor PID Low) xor (Full Trainer ID High xor Full Trainer ID Low) provides a remainder value ranging from 0 to 65535.
For Gen 6 and Gen 7, having this "xor'd value" (the answer/remainder) of 0 to 15 would lead to the mon being shiny.
[consequently, the xor'd result of 16 to 65535 would result in a non-shiny].
In Gen 8, they separated the xor result into categories:
0: Square Shiny
1-15: Star Shiny
16-65535: Non-shiny
However, there are a few exceptions where the mon will be a certain shiny no matter what:
Square Shiny: Shiny transferred from Pokemon GO (any xor'd value), Shiny that has Fateful Encounter flag (any xor'd value)
Star Shiny: Shinies caught in Max Lair can only be star (will only produce xor'd value of 1)