The depth buffer of a GPU is used to derive a surface normal or other surface parameter, avoiding or limiting computation of spatial gradients in 3D data sets and extra loading of data into the GPU. The surface parameter is used: to add shading with lighting to volume renderings of ultrasound data in real time, to angle correct velocity estimates, to adapt filtering or to correct for insonifying-angle dependent gain and compression. For border detection and segmentation, intersections with a volume oriented as a function of target structure, such as cylinders oriented relative to a vessel, are used for rendering. The intersections identify data for loading into the frame buffer for rendering.