Source code for yt.visualization.volume_rendering.volume_rendering

from yt.funcs import mylog
from yt.utilities.exceptions import YTSceneFieldNotFound

from .api import MeshSource, Scene, create_volume_source
from .utils import data_source_or_all


[docs] def create_scene(data_source, field=None, lens_type="plane-parallel"): r"""Set up a scene object with sensible defaults for use in volume rendering. A helper function that creates a default camera view, transfer function, and image size. Using these, it returns an instance of the Scene class, allowing one to further modify their rendering. This function is the same as volume_render() except it doesn't render the image. Parameters ---------- data_source : :class:`yt.data_objects.data_containers.AMR3DData` This is the source to be rendered, which can be any arbitrary yt 3D object field: string, tuple, optional The field to be rendered. If unspecified, this will use the default_field for your dataset's frontend--usually ('gas', 'density'). A default transfer function will be built that spans the range of values for that given field, and the field will be logarithmically scaled if the field_info object specifies as such. lens_type: string, optional This specifies the type of lens to use for rendering. Current options are 'plane-parallel', 'perspective', and 'fisheye'. See :class:`yt.visualization.volume_rendering.lens.Lens` for details. Default: 'plane-parallel' Returns ------- sc: Scene A :class:`yt.visualization.volume_rendering.scene.Scene` object that was constructed during the rendering. Useful for further modifications, rotations, etc. Examples -------- >>> import yt >>> ds = yt.load("Enzo_64/DD0046/DD0046") >>> sc = yt.create_scene(ds) """ data_source = data_source_or_all(data_source) sc = Scene() if field is None: field = data_source.ds.default_field if field not in data_source.ds.derived_field_list: raise YTSceneFieldNotFound( f"""Could not find field '{field}' in {data_source.ds}. Please specify a field in create_scene()""" ) mylog.info("Setting default field to %s", field.__repr__()) if hasattr(data_source.ds.index, "meshes"): source = MeshSource(data_source, field=field) else: source = create_volume_source(data_source, field=field) sc.add_source(source) sc.add_camera(data_source=data_source, lens_type=lens_type) return sc
[docs] def volume_render( data_source, field=None, fname=None, sigma_clip=None, lens_type="plane-parallel" ): r"""Create a simple volume rendering of a data source. A helper function that creates a default camera view, transfer function, and image size. Using these, it returns an image and an instance of the Scene class, allowing one to further modify their rendering. Parameters ---------- data_source : :class:`yt.data_objects.data_containers.AMR3DData` This is the source to be rendered, which can be any arbitrary yt 3D object field: string, tuple, optional The field to be rendered. If unspecified, this will use the default_field for your dataset's frontend--usually ('gas', 'density'). A default transfer function will be built that spans the range of values for that given field, and the field will be logarithmically scaled if the field_info object specifies as such. fname: string, optional If specified, the resulting rendering will be saved to this filename in png format. sigma_clip: float, optional If specified, the resulting image will be clipped before saving, using a threshold based on sigma_clip multiplied by the standard deviation of the pixel values. Recommended values are between 2 and 6. Default: None lens_type: string, optional This specifies the type of lens to use for rendering. Current options are 'plane-parallel', 'perspective', and 'fisheye'. See :class:`yt.visualization.volume_rendering.lens.Lens` for details. Default: 'plane-parallel' Returns ------- im: ImageArray The resulting image, stored as an ImageArray object. sc: Scene A :class:`yt.visualization.volume_rendering.scene.Scene` object that was constructed during the rendering. Useful for further modifications, rotations, etc. Examples -------- >>> import yt >>> ds = yt.load("Enzo_64/DD0046/DD0046") >>> im, sc = yt.volume_render(ds, fname="test.png", sigma_clip=4.0) """ sc = create_scene(data_source, field=field) im = sc.render() sc.save(fname=fname, sigma_clip=sigma_clip, render=False) return im, sc