A method of coherency gathering for rays in a ray tracing system, the method comprising: defining a plurality of rays, each ray having associated with it ray information defining the ray in a first coordinate system, defining a hierarchical acceleration structure comprising a plurality of nodes including upper level nodes and lower level nodes, each node of the acceleration structure having geometry information associated with it, wherein the geometry information of the upper level nodes is defined in the first coordinate system and the geometry information of each of the lower level nodes is defined in a second coordinate system different from the first coordinate system, wherein the lower level nodes are instantiated within the acceleration structure in one or more instances, each instance associated with an instance transform specifying the relationship between the first coordinate system and the respective second coordinate system for that instance, the method further comprising: storing the geometry information and the instance transforms in a memory; gathering together a plurality of groups of rays, wherein each group requires intersection testing against a respective node in the hierarchical acceleration structure; selecting one of the groups for intersection testing, wherein the respective node to be tested against is an instance of a lower level node; searching an instance transform cache (122, 126, 132, 136) for the instance transform of that instance; if the instance transform is found in the instance transform cache, submitting the selected group of rays for intersection testing, and if the instance transform is not found in the instance transform cache: retrieving the instance transform and loading it into the instance transform cache; and submitting the selected group of rays for intersection testing. defining a plurality of rays, each ray having associated with it ray information defining the ray in a first coordinate system, defining a hierarchical acceleration structure comprising a plurality of nodes including upper level nodes and lower level nodes, each node of the acceleration structure having geometry information associated with it, wherein the geometry information of the upper level nodes is defined in the first coordinate system and the geometry information of each of the lower level nodes is defined in a second coordinate system different from the first coordinate system, wherein the lower level nodes are instantiated within the acceleration structure in one or more instances, each instance associated with an instance transform specifying the relationship between the first coordinate system and the respective second coordinate system for that instance, the method further comprising: storing the geometry information and the instance transforms in a memory; gathering together a plurality of groups of rays, wherein each group requires intersection testing against a respective node in the hierarchical acceleration structure; selecting one of the groups for intersection testing, wherein the respective node to be tested against is an instance of a lower level node; searching an instance transform cache (122, 126, 132, 136) for the instance transform of that instance; if the instance transform is found in the instance transform cache, submitting the selected group of rays for intersection testing, and if the instance transform is not found in the instance transform cache: retrieving the instance transform and loading it into the instance transform cache; and submitting the selected group of rays for intersection testing. storing the geometry information and the instance transforms in a memory; gathering together a plurality of groups of rays, wherein each group requires intersection testing against a respective node in the hierarchical acceleration structure; selecting one of the groups for intersection testing, wherein the respective node to be tested against is an instance of a lower level node; searching an instance transform cache (122, 126, 132, 136) for the instance transform of that instance; if the instance transform is found in the instance transform cache, submitting the selected group of rays for intersection testing, and if the instance transform is not found in the instance transform cache: retrieving the instance transform and loading it into the instance transform cache; and submitting the selected group of rays for intersection testing. retrieving the instance transform and loading it into the instance transform cache; and submitting the selected group of rays for intersection testing.