Swarm Art in the Browser
This article documents an optional downstream bridge from
boids4R into ggWebGL. The creative use case is
generative browser art: compact schools, predator avoidance, obstacle
corridors, murmurations, and mixed-species swarms become animated
point/vector timelines that can be panned, zoomed, scrubbed, and
inspected in WebGL.
The CRAN-built vignette is documentation-only. It does not load
boids4R, does not execute GitHub-only package code, and
does not require optional ecosystem packages to be installed. The
runnable bridge remains in the package example script named below.
Boundary
The ownership split is deliberately narrow:
-
boids4Rowns simulation semantics: flocking state, rules, scenarios, and frame export. - The optional downstream bridge translates simulation frames into
renderer primitives when
boids4Ris installed separately. -
ggWebGLowns WebGL rendering: the htmlwidget, point and vector primitives, shader choice, timeline controls, hover, pan, zoom, and 3D orbit interaction.
This keeps the core ggWebGL package self-contained for
CRAN while preserving a clear optional integration path for development
installations.
Runnable Optional Demo
The optional example script is:
inst/examples/htmlwidget/downstream-boids4r-animation.R
When boids4R is installed separately, the script builds
two widgets:
- a 2D schooling scene rendered as exact-frame animated points and vectors
- a 3D murmuration scene rendered with the structured 3D view path
To run it in a development checkout or installed package, use:
source(system.file("examples", "htmlwidget", "downstream-boids4r-animation.R", package = "ggWebGL"))
widgets <- downstream_boids4r_widgets()
widgets$schooling_2d
widgets$murmuration_3d
The script is guarded: if boids4R is absent, it reports
that the optional demo was skipped instead of failing package
checks.
What To Inspect
The optional widgets are intended to demonstrate renderer capabilities rather than package-specific simulation interpretation:
- point primitives carry boid positions for each frame
- vector primitives show local velocity direction
- exact timeline filtering makes each scrubbed frame visually distinct
- 3D view metadata enables the murmuration scene to use browser camera controls
- shader settings remain owned by
ggWebGL, not by the simulation package
CRAN Position
boids4R is an optional development ecosystem package. It
is not listed in ggWebGL dependencies and is not required
for installation, examples, tests, or vignettes. This article is
retained as a documentation entry so downstream packages can see the
intended adapter boundary without making CRAN checks depend on
GitHub-only packages.