Efficient Memory Access

For large datasets, memory access has a considerable impact on the overall processing time of a raycasting algorithm. The most simple memory layout for raycasting is a three-dimensional array. However, using this storage scheme leads to view-dependent render times, due to changing memory access patterns for different viewing directions. This can greatly affect the performance for large datasets. Another common storage scheme is bricking [40], where the volume data is stored as sub-cubes (blocks) of a fixed size. In general, this approach reduces the view dependent performance variations but does not increase the memory consumption. Law and Yagel have developed a thrashless raycasting method based on such a memory layout [22]. In their approach, all resample locations within one block are processed before the algorithm continues to process the next block. Knittel [17] and Mora et al. [35] achieved impressive performance by using a spread memory layout. The main drawback of such an approach is the enormous memory usage. In both systems, the memory usage is approximately four times the data size.