A computer-implemented method for rendering a 2-D representation of a 3-D scene composed of primitives, the method comprising: defining camera rays to be tested for intersection with the primitives; executing shading processes for identified intersections, the shading processes causing generation of shader rays also to be tested for intersection, and outputting the camera rays and the shader rays and storing them in a memory; intersection testing rays (730, 733) on a collection-by-collection basis for intersection with one or more of elements of geometry acceleration data, henceforth referred to as "GAD", and the primitives, collections of rays being associated with respective elements of GAD, wherein the elements of GAD approximate boundaries of primitives for accelerating the intersection testing; maintaining a list of collections of rays available for intersection testing, wherein outputted rays are added to a given collection in response to determining that such rays intersect the GAD element associated with that collection; tracking readiness of the listed collections for further intersection testing; scheduling testing for collections ready for further intersection testing; for commencing testing of rays of a scheduled collection, selecting (725, 727) the elements of GAD or the primitives against which such rays are to be tested, the selecting being based on identifying elements of GAD which are interrelated to the element of GAD associated with the scheduled collection, wherein the elements of GAD are interrelated in a hierarchical graph, elements of GAD are represented as nodes of the graph, leaf nodes of the graph bound primitives, and non-leaf nodes of the graph bound elements of GAD; and outputting indications of identified intersections between rays and primitives. defining camera rays to be tested for intersection with the primitives; executing shading processes for identified intersections, the shading processes causing generation of shader rays also to be tested for intersection, and outputting the camera rays and the shader rays and storing them in a memory; intersection testing rays (730, 733) on a collection-by-collection basis for intersection with one or more of elements of geometry acceleration data, henceforth referred to as "GAD", and the primitives, collections of rays being associated with respective elements of GAD, wherein the elements of GAD approximate boundaries of primitives for accelerating the intersection testing; maintaining a list of collections of rays available for intersection testing, wherein outputted rays are added to a given collection in response to determining that such rays intersect the GAD element associated with that collection; tracking readiness of the listed collections for further intersection testing; scheduling testing for collections ready for further intersection testing; for commencing testing of rays of a scheduled collection, selecting (725, 727) the elements of GAD or the primitives against which such rays are to be tested, the selecting being based on identifying elements of GAD which are interrelated to the element of GAD associated with the scheduled collection, wherein the elements of GAD are interrelated in a hierarchical graph, elements of GAD are represented as nodes of the graph, leaf nodes of the graph bound primitives, and non-leaf nodes of the graph bound elements of GAD; and the elements of GAD are interrelated in a hierarchical graph, elements of GAD are represented as nodes of the graph, leaf nodes of the graph bound primitives, and non-leaf nodes of the graph bound elements of GAD; and outputting indications of identified intersections between rays and primitives.