I think you should post the same topic on the 3dstate web site and see what they say because these comments here are way too "objective".
I have been developing games with 3dstate this last two years and i must say that the Engine has much improved and Version 7 is already offering the same features as the upcoming V 6.5 of truevision3d.
As for the performance issue I must agree that 3dstate is a little slower than TV3D but it is by far easier to use. Thus a programmer can use most of his time focusing on non 3d aspect of his application e.g. physics, AI etc...
Here are screenshots of a game I am currently developing and sample of codes handling the light and shadow effects you can see on the screens .
Dont mind the FPS on the ScreenShots: they are very low because I am developing the game with the VB tool of Microsoft Word .
If there a too dark try pasting them in MSWord and change the Luminosity and Contrast properties.


and ...

'---------------------------
'SET LIGHT HALO
'--------------------------
Dim InputData As String
Dim lngLightHalo(1 To 12) As Long
Dim dblHaloLocation(2) As Double
Dim PosSeparator1 As Integer
Dim PosSeparator2 As Integer
Open App.Path + "\streetlights.txt" For Input As #1
i = 0
Do While Not EOF(1)
i = i + 1
DoEvents
Line Input #1, InputData
PosSeparator1 = InStr(1, InputData, ",") 'Get the positions of the separators in inputdata
PosSeparator2 = InStr(PosSeparator1 + 1, InputData, ",")
lngLightHalo(i) = STATE_object_create_from_file(App.Path + "\World\City\lighthalo.wld")
dblHaloLocation(0) = CDbl(Left(InputData, PosSeparator1))
dblHaloLocation(1) = CDbl(Mid(InputData, PosSeparator1 + 1, PosSeparator2 - 1))
dblHaloLocation(2) = CDbl(Mid(InputData, PosSeparator2 + 1))
STATE_object_set_location1 lngLightHalo(i), dblHaloLocation(0)
'STATE_polygon_set_rotated lngLightHalo(i), YES
Loop
'-----------------------
'CREATE LIGHT ON GROUND
'-----------------------
For j = LBound(wldPolygon) To UBound(wldPolygon) - 1 'Loop through all the polys of the world
DoEvents
'Form1.Label1.Caption = CStr(j)
For i = LBound(lngLightPlane) + 1 To UBound(lngLightPlane)
STATE_light_get_location lngLights(i), dblPlaneLocation(0) 'Get the light's location defined in .wld file
If STATE_math_get_square_distance(dblPlaneLocation(0), wldPolygon(j).dbllocation(0)) < 300 ^ 2 Then 'Check if the polygon is within the light scope
STATE_engine_create_shadow wldPolygon(j).lngHandle, lngLightPlane(i), dblPlaneLocation(0), 250 'Create a bright shadow which acts like light
Exit For
End If
Next
Next
The one thing I can blame 3dstate for is a very inactive community and you must take this into account before making your choice.
Vbguy ProgMeister