Code for adding an additional shift register

Assuming it is all wired correctly, you just have to send another 8 bits out. To make both registers/displays show the same pattern simply change this:

digitalWrite(latch, LOW);
shiftOut(data, clock, MSBFIRST, patterns[pattern_index*2]);
digitalWrite(latch, HIGH);

to this:

digitalWrite(latch, LOW);
shiftOut(data, clock, MSBFIRST, patterns[pattern_index*2]);
shiftOut(data, clock, MSBFIRST, patterns[pattern_index*2]);
digitalWrite(latch, HIGH);

Yes, it is possible to have two different animations. You would probably want to make another array (call it patterns2) with the same length as patterns but a different animation and then change the code to this:

digitalWrite(latch, LOW);
shiftOut(data, clock, MSBFIRST, patterns2[pattern_index*2]);
shiftOut(data, clock, MSBFIRST, patterns[pattern_index*2]);
digitalWrite(latch, HIGH);

The code, as written, will follow the delays specified in patterns, not patterns2. You can have the animations have a different number of "frames" and follow different delays, but this will complicate the code just a little. Get it working with two different patterns of the same length first.