Planar textures

Planar image assignments attach an image to a source triangle/coplanar region without changing the mesh. Placement uses an object-local anchor, normalized image anchor coordinates, physical width/height, rotation and optional U/V flips. They expose move/rotate/resize, a view-visible edit gizmo, world handle locations and pickable handle IDs.

Curved surface-conforming textures

Curved assignments start from an immutable source triangle and propagate an image chart over edge-connected triangles by unfolding neighbors during a shortest-distance traversal. Traversal is bounded by intrinsic distance, per-edge normal change, seed-normal change and the image extent. Open and nonmanifold boundaries stop propagation.

DiagnosticMeaning
chart_trianglesTriangles reached by the transport chart.
rendered_trianglesTriangles contributing to visible image footprint.
seam_edgesEdges where adjacent transported UV charts disagree.
distance_stops / angle_stops / chart_stopsFrontier stops caused by configured traversal/image limits.
open_edges / nonmanifold_edgesTopology boundaries encountered during chart expansion.

gx3de_curved_texture_seams_get and footprint queries use the usual two-pass capacity pattern. A limit flag indicates that traversal encountered a bounded frontier; it does not by itself prove visible image clipping. No automatic multi-chart seam blending is attempted.

Shadow policy

Shadow behavior has three layers: engine policy, scene enable, and object/light flags. GX3DE_SHADOW_OFF disables shadow passes; OPAQUE_ONLY excludes translucent casters; FULL enables opacity-attenuated translucent shadow coverage on the current OpenGL path. Object opacity affects cast-shadow strength in the full policy.

Particle clouds — dev-039

gx3de_particle_cloud is a distinct scene-owned primitive. Up to 100,000 finite particles are copied on submission. A global style defines radius, RGB and actor opacity; each particle may override radius and/or color through flags. The cloud has its own transform, visibility and lifecycle; ordinary gx3de_object_* functions do not accept a cloud handle.

The current renderer draws each particle as a closed smoothly shaded 20-triangle icosahedral sphere. This is discrete geometric visibility, not a physical density/absorption medium. There is no per-particle opacity, per-cloud self-shadow policy, particle picking or size-based LOD in dev-40.

Positional lights — dev-039

A positional lamp replaces one of the view’s directional light slots while enabled. Position, RGB, intensity and constant/linear/quadratic attenuation are explicit. At least one attenuation term must be positive, and the slot must be below view_lighting.light_count. Disabling the positional override restores the directional slot.

Current positional-light shadow limit
The Linux VTK backend uses an omnidirectional positional light with a 180° cone. VTK’s shadow-map baker excludes that case, so positional shadow-on/off images are currently identical. Directional lights do cast shadows. CORE does not silently narrow the cone because that would change the lamp semantics.

Scientific sampled density — dev-040

For density samples, use ordinary scientific polydata with scalar/radius/opacity/direct-color arrays. Sphere glyphs remain one scientific object and therefore retain normal hierarchy, transforms, visibility, opacity, clipping, scientific picking and shadow flags. The renderer does not expand samples into individual mesh objects.