A computer-implemented method for rendering a volumetric dataset and a surface embedded in the volumetric dataset, the method comprising: performing a volume rendering process to generate a volume rendering of a volumetric dataset; determining, based on the volume rendering process, depths of respective locations in the volume rendering and storing the depths in association with the respective locations; performing a surface rendering process to generate a surface rendering of a surface, the surface rendering process comprising using the depths and respective locations; and combining the volume rendering and the surface rendering into a combined rendering of the volumetric dataset and the surface; characterised in that: the determining the depths of the respective locations in the volume rendering comprises: using a ray casting process to obtain initial values for the depths, by: casting a plurality of rays through the volumetric dataset, each ray being associated with a location of the respective locations; determining, along each of the rays, at least one depth value associated with a predetermined change in a value related to the volumetric dataset, and storing the at least one depth values in a data structure; and selecting, according to predetermined criteria, a pre-determined number of the at least one depth values at each respective location to be used as initial values for the depths at each of the respective locations; and modifying the initial values for the depths during the volume rendering process using data of scattering locations obtained from a physically based rendering process. performing a volume rendering process to generate a volume rendering of a volumetric dataset; determining, based on the volume rendering process, depths of respective locations in the volume rendering and storing the depths in association with the respective locations; performing a surface rendering process to generate a surface rendering of a surface, the surface rendering process comprising using the depths and respective locations; and combining the volume rendering and the surface rendering into a combined rendering of the volumetric dataset and the surface; characterised in that: the determining the depths of the respective locations in the volume rendering comprises: using a ray casting process to obtain initial values for the depths, by: casting a plurality of rays through the volumetric dataset, each ray being associated with a location of the respective locations; determining, along each of the rays, at least one depth value associated with a predetermined change in a value related to the volumetric dataset, and storing the at least one depth values in a data structure; and selecting, according to predetermined criteria, a pre-determined number of the at least one depth values at each respective location to be used as initial values for the depths at each of the respective locations; and modifying the initial values for the depths during the volume rendering process using data of scattering locations obtained from a physically based rendering process. using a ray casting process to obtain initial values for the depths, by: casting a plurality of rays through the volumetric dataset, each ray being associated with a location of the respective locations; determining, along each of the rays, at least one depth value associated with a predetermined change in a value related to the volumetric dataset, and storing the at least one depth values in a data structure; and selecting, according to predetermined criteria, a pre-determined number of the at least one depth values at each respective location to be used as initial values for the depths at each of the respective locations; and casting a plurality of rays through the volumetric dataset, each ray being associated with a location of the respective locations; determining, along each of the rays, at least one depth value associated with a predetermined change in a value related to the volumetric dataset, and storing the at least one depth values in a data structure; and selecting, according to predetermined criteria, a pre-determined number of the at least one depth values at each respective location to be used as initial values for the depths at each of the respective locations; and modifying the initial values for the depths during the volume rendering process using data of scattering locations obtained from a physically based rendering process.