meetup.20260921 - tixl3d/tixl GitHub Wiki
TiXL Meetup 2026-09-21 / Output System, Projector Calibration & Compute-Shader Point Ops
A 3h58m TiXL developer meet-up: a long walkthrough of the new output system โ central outputs bound to displays, slices, physical surfaces measured in metres, straightening a venue photo and calibrating a projector from reference points, a full floor plan with pixel map for an immersive show โ plus the new machine-learning beat detection, then a community half on planning a field-driven quadtree effect, dissecting a compute-shader point operator as a template, 3D text curves and fixing their broken tangents.
๐ new feature ยท ๐ ๏ธ improvement ยท ๐ operator ยท ๐ walkthrough ยท ๐ง deep dive ยท ๐ฟ showcase ยท ๐ฏ planned ยท ๐ฌ discussion ยท โ ๏ธ heads-up
Chapters
- 0:00 ๐ Warm-up: a scrolling text wipe (TileableNoise, DirectionalBlur, AnimVec2)
- 9:30 ๐ A small test scene to route to an output (LoadObj, AdvancedFeedback, DetectEdges)
- 11:07 ๐ Retiring pinning, fixed resolutions and the screen manager
- 13:25 ๐ Central outputs: content bound to a display keeps rendering
- 16:05 ๐ Exporting without a wrapper op, and one render pipeline for player and editor
- 18:42 ๐ The setup view: board, flow outliner, several setups per composition
- 20:15 ๐ง Content, surfaces, outputs, machine-local bindings โ and free mirroring
- 24:04 ๐ Resolution flows: display changes, smart 0ร0 canvas, RenderTarget overrides
- 29:31 โ ๏ธ Stretched content on a display, and rescaling it in output mode
- 31:37 ๐ Two side-by-side displays from one double-wide output and slices
- 35:27 ๐ The board in metres: floor line, prop figure, physical surfaces
- 37:32 ๐ Mapping content onto surfaces, and simple corner-pin keystoning
- 41:44 ๐ฟ Watching the projection live through a webcam (VideoDeviceInput, RemapColor)
- 44:53 ๐ Reference photos: trace a surface, straighten it, give its lines real lengths
- 50:53 ๐ A band chase on one curtain (LinearGradient, Steps) via a slice region
- 56:05 ๐ฟ Calibrating a projector by dragging reference points onto the real thing
- 1:06:00 ๐ฟ Second try on a small table โ and this time the mapping fits
- 1:16:30 ๐ฏ An immersive venue: scaling the LPM Rome floor plan and tracing its walls
- 1:25:10 ๐ An NDI output at the venue's full pixel map; naming the wall patches
- 1:30:15 โ ๏ธ Previewing the mapping, and a projector-cam draw stage that isn't ready
- 1:35:30 ๐ฌ Feedback round; setups stored in the project's Meta/Setups folder
- 1:41:00 ๐ฟ Immersive test content: tori on radial points as an equirectangular room
- 1:44:05 ๐ฌ Knowing the physical space beats rebuilding it with nodes
- 1:47:18 ๐ฏ Roadmap: projector blending, masks, warp points, brightness correction
- 1:52:30 ๐ฌ The board as a thinking canvas; calibrating lasers and LED strips
- 1:56:30 โ ๏ธ Please test it; old demos need a central output, and the two export modes
- 2:00:20 ๐ Switching scenes on a bound output (PickTexture) and NDI inside the setup
- 2:06:46 ๐ Machine-learning beat detection: a 12 MB CPU model, live test and pitfalls
- 2:16:00 ๐ฌ Q&A: moving an effect between the feedback and post stages
- 2:19:20 ๐ฌ A field-driven quadtree subdivision effect
- 2:23:24 ๐ง Cells as points: a grid, a field picking the level, separator points
- 2:32:36 ๐ CollapseVertices and SubdivisionStretch as existing analogues
- 2:36:27 ๐ง Why sparse point buffers are cheap, and why compacting needs a readback
- 2:38:11 ๐ Duplicating SelectPointsWithSDF as a template, not CustomPointShader
- 2:42:36 ๐ ๏ธ Dragging a symbol into another namespace or project
- 2:44:13 ๐ง Anatomy of a compute-shader point operator
- 2:48:46 ๐ Editing the .hlsl in VS Code with HLSL Tools
- 2:56:01 ๐ง register(bN) slots, connection order and the field's injected code
- 3:01:35 โ ๏ธ Image fields need their samplers; sampler states and point sampling
- 3:07:00 ๐ Snapping point positions to a raster from a shader parameter
- 3:14:46 ๐ง Sampling the field per point, and log2 subdivision levels
- 3:18:20 ๐ NaN scale as the separator flag
- 3:20:42 ๐ง Spatial hashing, top-down vs. bottom-up, and when the CPU wins
- 3:29:30 ๐ฟ 3D text curves: even resampling, inner points and side loops
- 3:34:16 ๐ Rebuilding broken tangents in a CustomVertexShader
- 3:40:43 โ ๏ธ Why the tangents break: no tangent geometry attribute
- 3:42:32 ๐ฟ A blendable RepeatAtPoints, and stars from TransformSomePoints
- 3:45:00 ๐ฌ Deformable 3D text, flat bevels and the straight-skeleton algorithm
- 3:49:00 ๐ฏ Linux port: the first Vulkan-rendered frame
- 3:50:40 ๐ฌ Geometry attributes and domains, Houdini-style; wrap-up
