Whenever you have systems connected together that communicate with each other you must have a common ground! Without this, voltage levels are not referenced to anything and could appear as nearly any voltage to the other device. The only exception to this rule is when you intentionally isolate systems from each other, say for noise reasons. Then you might use an optocoupler for example.
With PWM control you should use your MOSFETs or possibly BJTs. A relay will be too slow to switch using PWMs. To ensure that the two supplies whose grounds you are connecting together are properly grounded, test the voltage difference between the ground terminals before you connect them together. You should see very little voltage. Preferably zero volts. If you see a big voltage here inspect your supplies. If there is a big voltage difference between the grounds, when you connect them together you will have current flowing along the ground plane. This is never a good idea.
Assuming the voltage is negligible, when you connect the grounds together, you then have a common ground against which all voltages in your system can be measured. This should allow you to control the MOSFETS using PWMs generated by the Pi, while they source current from the 12V supply
I forgot to mention that depending on the MOSFETs you are using, you may require a charge pump to achieve the correct gate voltage to switch your MOSFET fully on (if you have them configured as high side switches). There are some MOSFETS that have a built in charge pump so that they can be controlled directly from a micro. I dont know which yours are.
Many manufacturers produce gate driver ICs that create the correct voltages for you. (If you find that you have just regular MOSFETS.)
See this IRF app note for more info on gate drivers.
Here's an example of a MOSFET that has a built in charge pump