rewrote to be shader based instead of IFF based