Australia set up a final showdown with defending champions the Netherlands after easing past Spain 6-3. The Aussies were 3-1 up at half time after goals from Troy Elder, Michael McCann and Matthew Wells.
McCann got his second straight after the restart and though Spain hit back through Xavier Ribas, Grant Schubert hit two in two minutes to seal the win.
The Dutch went behind in their semi-final with Germany but eventually clinched the match 3-2.
Matthias Witthaus put Germany ahead after just three minutes but Teake Taekema's penalty flick brought the Netherlands level two minutes later.
Marten Eikelboom poached a goal for the Dutch totally against the run of play just after half-time and Teun de Nooijer added another shortly after.
Christophe Bechmann scored for Germany 10 minutes from time to set up an exciting finish but the Dutch held on.
The Netherlands have now made the Olympic final for the third Games in a row.
Australia have made the finals three times in the past but have yet to win a gold medal to add to their haul of three silvers and three bronzes.
Meanwhile, Pakistan beat rivals India 3-0 in the play-offs, while New Zealand defeated South Korea 4-3. Pakistan now face New Zealand to decide fifth and sixth place, while India and South Korea will fight over seventh.
Pakistan's win means New Zealand, and not South Korea, have qualified for the prestigious Champions Trophy.