You seem to want to get a high-contrast lighting. It is entirely possible to achieve using just FFP.
This is one of the best attempts of mine from the old days of DX 8 to achieve this goal:
- Shadows (prebaked in lightmap)
- Regular Diffuse + Ambient light
- High-intensity highlights for triangles under certain angle
- Material map blended with procedurally generated texture map
Obviously, I don't remember the exact combination of the TSS after all these years, but I remember very clearly that I had to use MULTIPLY_2X AND MULTIPLY_4X to achieve this, in combination with one of those states that let you specify if you want to saturate the result or clamp it.
Of course, if you already have a lot of (1.0f,1.0f,1.0f) colors in your base texture map, that is not going to get you anywhere, since no matter how you mulitply the 1.0f, you will still get 1.0f at most.
Thus, the trick is to make the majority of the scene darker, so that only certain parts get brighter - in my case, I wanted to achieve the dynamic light with the time-of-day feature, thus the terrain was dynamically lighted throughout whole day with varied direction of the light.
It is a lot of tweaking, though. You need to be able to dynamically, at run-time, change the intensity of Directional and Ambient RGB, either through key shortcuts or some UI.
It does take few hrs to come with the final look, but it is totally worth it.
To summarize, you need:
- A profile system where you keep good combinations in a code so that you don't have to spend half an hour to figure the best combination you had working 5 minutes ago. Copy/paste the combination into a separate codepath as soon as it looks good enough ( so that later you can choose between the best ones).
- Screenshot system, where you grab screens and compare different combinations of all parameters (texture, diff, ambient, TSS ColorOp)
- Base terrain texture in at least 6 different levels of Brightness / Contrast : Texture_10, Texture_30, Texture_50, Texture_65, Texture_80, Texture_100 (that you can switch between at runtime upon a keypress). I can change the texture by pressing 'T' at runtime and can see right away which brightness is best this way right away
- TSS ColorOp change upon a keypress (from ALL possible ones - see DX Docs)
When you have the system above, then all it takes is just few keypresses and you can come up with some pretty nice combinations.