simvx.core.decal¶
Decal3D: projects textures onto surfaces within a box volume.
Module Contents¶
Classes¶
Projects a texture onto nearby geometry within a box-shaped volume. |
Data¶
API¶
- simvx.core.decal.log¶
‘getLogger(…)’
- class simvx.core.decal.Decal3D(**kwargs)[source]¶
Bases:
simvx.core.nodes_3d.node3d.Node3DProjects a texture onto nearby geometry within a box-shaped volume.
The decal projects along the node’s local -Y axis. The
sizeproperty is the FULL extent of the projection box in local space (width, height, depth): a decal ofsize = Vec3(2, 1, 2)covers two units across and one unit deep, centred on the node. Only geometry within this box and matching thecull_maskreceives the projected texture.Properties: size: Full extents of the projection box (Vec3), centred on the node. texture: Path to the albedo/colour texture to project. normal_texture: Path to the normal-map texture to project. albedo_mix: Blend factor for the albedo texture (0 = invisible, 1 = full). normal_mix: Blend factor for the normal-map texture (0 = none, 1 = full). modulate: Colour tint applied to the projected texture (RGBA tuple). distance_fade_begin: Distance from camera at which the decal starts fading. distance_fade_length: Fade range: the decal is fully invisible at
distance_fade_begin + distance_fade_length. cull_mask: Bitmask selecting which render layers receive the projection. upper_fade: Fade at the top (+Y) edge of the projection box (0 = hard, 1 = full fade). lower_fade: Fade at the bottom (-Y) edge of the projection box (0 = hard, 1 = full fade).Example::
decal = Decal3D(position=(0, 2, 0), name="BloodSplat") decal.texture = "res://textures/blood.png" decal.size = Vec3(2, 1, 2) decal.albedo_mix = 0.8
Initialization
- size¶
‘Property(…)’
- texture¶
‘Property(…)’
- normal_texture¶
‘Property(…)’
- albedo_mix¶
‘Property(…)’
- normal_mix¶
‘Property(…)’
- modulate¶
‘Colour(…)’
- distance_fade_begin¶
‘Property(…)’
- distance_fade_length¶
‘Property(…)’
- cull_mask¶
‘Bitmask(…)’
- upper_fade¶
‘Property(…)’
- lower_fade¶
‘Property(…)’
- gizmo_colour¶
‘Colour(…)’
- property projection_direction: simvx.core.math.types.Vec3[source]¶
World-space projection direction (local -Y axis).
- set_cull_mask_layer(index: int, enabled: bool = True) None[source]¶
Enable or disable a specific cull mask layer (0-31).
- is_cull_mask_layer_enabled(index: int) bool[source]¶
Check if a specific cull mask layer is enabled (0-31).
- get_gizmo_lines() list[tuple[simvx.core.math.types.Vec3, simvx.core.math.types.Vec3]][source]¶
Return wireframe edges of the projection box in world space.
The box is centred at the node’s global position, oriented by the node’s global rotation, and spans the full extents given by
size. An additional arrow along the projection direction (-Y) is included.
- position¶
‘_SpatialVecProperty(…)’
- rotation¶
‘Property(…)’
- scale¶
‘_SpatialVecProperty(…)’
- render_layer¶
‘Property(…)’
- property rotation_degrees: simvx.core.math.types.Vec3¶
- property world_position: simvx.core.math.types.Vec3¶
- property world_rotation: simvx.core.math.types.Quat¶
- property world_scale: simvx.core.math.types.Vec3¶
- property forward: simvx.core.math.types.Vec3¶
- property right: simvx.core.math.types.Vec3¶
- property up: simvx.core.math.types.Vec3¶
- translate(offset: tuple[float, float, float] | numpy.ndarray)¶
- translate_global(offset: tuple[float, float, float] | numpy.ndarray)¶
- rotate(axis: tuple[float, float, float] | numpy.ndarray, angle: float)¶
- rotate_x(angle: float)¶
- rotate_y(angle: float)¶
- rotate_z(angle: float)¶
- look_at(target: tuple[float, float, float] | numpy.ndarray, up=None)¶
- face_along(forward: tuple[float, float, float] | numpy.ndarray, up: tuple[float, float, float] | numpy.ndarray | None = None) None¶
- set_render_layer(index: int, enabled: bool = True) None¶
- is_on_render_layer(index: int) bool¶
- wrap_bounds(bounds: tuple[float, float, float] | numpy.ndarray, margin: float = 1.0)¶
- strict_errors: ClassVar[bool]¶
True
- dev_checks: ClassVar[bool]¶
None
- script_error_raised¶
‘Signal(…)’
- dynamic: bool¶
False
- visible¶
‘Property(…)’
- update_mode¶
‘Property(…)’
- __properties__: ClassVar[dict[str, simvx.core.descriptors.Property]]¶
None
- classmethod __init_subclass__(**kwargs)¶
- property name: str¶
- property visible_in_tree: bool¶
- reset_error() None¶
- add_child(node: simvx.core.node.T) simvx.core.node.T¶
- remove_child(node: simvx.core.node.Node) None¶
- reparent(new_parent: simvx.core.node.Node)¶
- node_at(path, default=_NO_DEFAULT)¶
- find(target, *, direct: bool = False)¶
- find_all(target, *, direct: bool = False)¶
- expect(target, *, direct: bool = False)¶
- ancestor(target)¶
- walk(*, include_self: bool = True) collections.abc.Iterator[simvx.core.node.Node]¶
- property path: str¶
- property is_scene_root: bool¶
- add_to_group(group: str)¶
- remove_from_group(group: str)¶
- is_in_group(group: str) bool¶
- on_ready() None¶
- on_enter_tree() None¶
- on_exit_tree() None¶
- on_update(dt: float) None¶
- on_fixed_update(dt: float) None¶
- on_draw(renderer) None¶
- on_picked(event: simvx.core.events.InputEvent) None¶
- on_unhandled_input(event: simvx.core.events.TreeInputEvent) None¶
- start_coroutine(gen: simvx.core.descriptors.Coroutine) simvx.core.descriptors.CoroutineHandle¶
- stop_coroutine(gen_or_handle)¶
- queue_redraw() None¶
- property render_dirty: bool¶
- clear_children()¶
- destroy()¶
- property destroying: bool¶
- call_deferred(method: collections.abc.Callable[..., Any], *args: Any) None¶
- property app¶
- property tree: simvx.core.scene_tree.SceneTree¶
- property physics¶
- property physics_2d¶
- __getitem__(key: str)¶
- classmethod get_properties() dict[str, simvx.core.descriptors.Property]¶
- __repr__()¶