I really like Tea-Monkey's light/shadow process...
here I also like the idea of the Soft Shadow process but I wonder whether it can be simplified (or done with native Bmax). Maybe...
Divide your objects into 'irregular' shadow casters , blocking objects and 'regular' shadow casters.
Irregular shadow casters cast a shadow similar to their own shape. See the ZombieBlast demo for an example.
Blocking Objects simply divide 2 areas so cast no shadow.
I.e. a wall to the ceiling with a light on one side.
Regular Shadow casters need to be calculated using a set of pre-defined boundary points. A ray is then cast to each point extended to meet the light radius mark.
Taking the 2 points furthest away from each other on the radius plus their connected predefined points creates your shadow area. In a B3D test I used floodfill within these boundaries. Awful B3D code with lots of errors but showing this near the end of this thread...
Crapcode With the drawpoly command or using OpenGL it's possible to shade or texture the resulting shape although I haven't accounted for the curve. Maybe use the same method to create the triangle_fan as the soft-shadows but only to get the edge points. Assuming you have the edge points the following methods could be used to create the shadow geometry.
Drawpoly Texturepoly leaving some way to 'add' the softshadow fins.
The draw order is going to be difficult without using OGL buffers but, possibly...
dark setclscolor (60,60,60)
'Floor' tiles with shadeblend
Lights with lightblend
shadows with shadeblend
Other objects with lightblend.
Personal aim is to have ambient light (time-of-day dependant), physical lights and shadow.
All speculation at the moment but any comments welcome.