CauldronGPU.Instance (CauldronGPU v0.3.3)

Copy Markdown View Source

A mesh placed in the scene with one material per mesh part (the last material serves any further parts). hidden instances are kept but not drawn; shadows: false keeps an instance out of the shadow map; snap: true places it without interpolating from its previous tick.

in_front: true draws the instance over the rest of the scene, as a held weapon is: it is hidden only by itself and by surfaces closer than about the camera's near distance, casts no shadow and is not seen by rays.

shading lights the instance by a fixed rule in place of the scene's lights and its materials' lightmaps: {ambient, directional, direction}, two {r, g, b} and a unit direction towards the light, give ambient + directional * dot(normal, direction), never below zero, as baked light.

depth_test: false draws the instance over everything before it, after the opaque scene, farthest instance first, and hides nothing. swell, {width, height, speed}, pushes each vertex out along its normal by height * sin(u * width + seconds * speed), u its texture coordinate (a bulging shell).

standing, {floor, ceiling} heights in the renderer's frame, is for a thing standing in a room: floors seen from above at or below floor and ceilings seen from below at or above ceiling (surfaces within 45 degrees of level) do not hide it, so it shows whole where it sinks into its own floor or reaches into its own ceiling; every other nearer surface hides it as usual. It is drawn after the opaque scene, farthest instance first, and casts no shadow.

Summary

Types

rgb()

@type rgb() :: {number(), number(), number()}

t()

@type t() :: %CauldronGPU.Instance{
  depth_test: boolean(),
  hidden: boolean(),
  in_front: boolean(),
  materials: [CauldronGPU.Handle.t()],
  mesh: CauldronGPU.Handle.t(),
  shading: {rgb(), rgb(), {number(), number(), number()}} | nil,
  shadows: boolean(),
  snap: boolean(),
  standing: {number(), number()} | nil,
  swell: {number(), number(), number()} | nil,
  transform: CauldronGPU.Transform.t()
}