diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 5bae220..08d6828 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -8,7 +8,6 @@ repos: - repo: https://github.com/pre-commit/pre-commit-hooks rev: "v5.0.0" hooks: - - id: check-added-large-files - id: check-case-conflict - id: check-merge-conflict - id: check-symlinks diff --git a/src/pan3d/explorers/contour.py b/src/pan3d/explorers/contour.py index fd64440..1032da4 100644 --- a/src/pan3d/explorers/contour.py +++ b/src/pan3d/explorers/contour.py @@ -112,6 +112,11 @@ def _setup_vtk(self, pipeline=None): self.widget.EnabledOn() self.widget.InteractiveOff() + if self.anari: + from pan3d.utils import anari + + anari.setup(self.renderer) + # ------------------------------------------------------------------------- # UI # ------------------------------------------------------------------------- diff --git a/src/pan3d/explorers/globe.py b/src/pan3d/explorers/globe.py index 8e5d0ba..290fb94 100644 --- a/src/pan3d/explorers/globe.py +++ b/src/pan3d/explorers/globe.py @@ -101,6 +101,11 @@ def _setup_vtk(self, pipeline=None): self.widget.EnabledOn() self.widget.InteractiveOff() + if self.anari: + from pan3d.utils import anari + + anari.setup(self.renderer) + # ------------------------------------------------------------------------- # UI # ------------------------------------------------------------------------- diff --git a/src/pan3d/explorers/slicer.py b/src/pan3d/explorers/slicer.py index 79b740b..e49d195 100644 --- a/src/pan3d/explorers/slicer.py +++ b/src/pan3d/explorers/slicer.py @@ -244,6 +244,11 @@ def _setup_vtk(self, pipeline=None): self.widget.EnabledOn() self.widget.InteractiveOff() + if self.anari: + from pan3d.utils import anari + + anari.setup(self.renderer) + # ------------------------------------------------------------------------- # GUI definition # ------------------------------------------------------------------------- diff --git a/src/pan3d/utils/anari.py b/src/pan3d/utils/anari.py new file mode 100644 index 0000000..4e3f38b --- /dev/null +++ b/src/pan3d/utils/anari.py @@ -0,0 +1,21 @@ +def setup(renderer): + try: + from vtkmodules import vtkRenderingAnari + except ImportError: + return + + anariPass = vtkRenderingAnari.vtkAnariPass() + renderer.SetPass(anariPass) + + anariDevice = anariPass.GetAnariDevice() + anariDevice.SetupAnariDeviceFromLibrary("environment", "default", False) + + anariRenderer = anariPass.GetAnariRenderer() + anariRenderer.SetSubtype("raycast") + anariRenderer.SetParameterf("ambientRadiance", 0.8) + + # VisRTX specific settings + # anariRenderer.SetParameterf("lightFalloff", 0.5) + anariRenderer.SetParameterb("denoise", True) + anariRenderer.SetParameteri("pixelSamples", 10) + # anariRenderer.SetParameteri("ambientSamples", 5) diff --git a/src/pan3d/utils/common.py b/src/pan3d/utils/common.py index 141eb7e..8ab3d35 100644 --- a/src/pan3d/utils/common.py +++ b/src/pan3d/utils/common.py @@ -32,6 +32,7 @@ def __init__( - `--xarray-url`: Provide URL to xarray dataset - `--wasm`: Use WASM for local rendering - `--vtkjs`: Use vtk.js for local rendering + - `--anari`: Use anari for remote rendering """ super().__init__(server, client_type="vue3") @@ -62,11 +63,17 @@ def __init__( help="Use vtk.js for local rendering", action="store_true", ) + rendering.add_argument( + "--anari", + help="Use anari for remote rendering", + action="store_true", + ) # CLI args, _ = self.server.cli.parse_known_args() # Local rendering self.local_rendering = local_rendering + self.anari = args.anari if args.wasm: self.local_rendering = "wasm" if args.vtkjs: diff --git a/src/pan3d/utils/data/globe_textures/oceanmask-light.jpg b/src/pan3d/utils/data/globe_textures/oceanmask-light.jpg new file mode 100644 index 0000000..b56d1f3 Binary files /dev/null and b/src/pan3d/utils/data/globe_textures/oceanmask-light.jpg differ diff --git a/src/pan3d/viewers/preview.py b/src/pan3d/viewers/preview.py index 84418bc..8f3f456 100644 --- a/src/pan3d/viewers/preview.py +++ b/src/pan3d/viewers/preview.py @@ -69,6 +69,11 @@ def _setup_vtk(self, pipeline=None): self.widget.EnabledOn() self.widget.InteractiveOff() + if self.anari: + from pan3d.utils import anari + + anari.setup(self.renderer) + # ------------------------------------------------------------------------- # UI # -------------------------------------------------------------------------