wolfhece.wolf_array._hillshade_params ===================================== .. py:module:: wolfhece.wolf_array._hillshade_params .. autoapi-nested-parse:: Per-array hillshade material parameters. Each :class:`WolfArray` carries a :class:`HillshadeRenderParams` instance that stores the material properties used by the per-pixel Blinn-Phong hillshade shader. Sun position and global enable flags remain on the viewer (:class:`WolfMapViewer`). The viewer can operate in **synchronised** mode (all arrays share one set of material parameters) or **per-array** mode (each array has its own parameters, and the panel reflects the active array). Author: HECE - University of Liege Date: 2026 Copyright (c) 2026 University of Liege. All rights reserved. Module Contents --------------- .. py:data:: logger .. py:data:: SIDECAR_SUFFIX :value: '.hillshade.json' .. py:class:: HillshadeRenderParams(*, z_exaggeration: float = 1.0, specular: float = 0.0, glossiness: float = 0.5, highlight: float = 1.0) Material parameters for per-pixel Blinn-Phong hillshade. These are the parameters that **differ per WolfArray** when running in per-array mode. Sun position, enable flag and multi-directional flag remain on the viewer. All values are stored in *user-facing* convention: * **glossiness** ∈ [0, 1]: 0 = matte (broad highlight), 1 = mirror (sharp highlight). The shader receives ``roughness = 1 − glossiness``. * **highlight** ∈ [0, 1]: 0 = palette-tinted specular (subtle), 1 = pure white specular (prominent). The shader receives ``metallic = 1 − highlight``. .. py:attribute:: z_exaggeration :value: 1.0 .. py:attribute:: specular :value: 0.0 .. py:attribute:: glossiness :value: 0.5 .. py:attribute:: highlight :value: 1.0 .. py:method:: copy() -> HillshadeRenderParams .. py:method:: copy_from(other: HillshadeRenderParams) -> None Copy all values from *other* into *self*. .. py:method:: to_dict() -> dict .. py:method:: from_dict(d: dict) -> HillshadeRenderParams :classmethod: .. py:method:: save(array_filename: str | pathlib.Path) -> None Write a ``*.hillshade.json`` sidecar next to *array_filename*. .. py:method:: load(array_filename: str | pathlib.Path) -> HillshadeRenderParams | None :classmethod: Load from sidecar if it exists, else return *None*.