Thanks!
Obviously you can use models instead of map entities, the latter don't really have advantages over models since we have polygonal collision detection on models.
You mean dynamic lights, right? If you only have static lights, simply use the sun light direction vector for your trace or a simple vertical trace. If you have dynamic lights instead, iterate over them and use the nearest for calculation.