I dont suggest models, you can use look at
pixel_for_bmap, with it, you could use an additional surface texture/mask for your terrains, then with calculations, find the position on that mask that the player would fall, that returns the pixel color, then use that to determine what effects you want, with this you pretty much unlimited control over as many terrain surfaces as you want
I think theres an include file called terrain.c or something similar in which you can find the functions for getting the position the player is in relation to the mask