Pixijs
RSamaium/CanvasEngine
Use this skill first for ANY PixiJS v8 task; it routes to the right specialized skill for the job.
Wire simulated values into visible WGSL material parameters in LunCoSim, such as load, heat, charge, slip, or temperature visualization.
$ npx skills add LunCoSim/lunco-sim --skill visualize-physics-with-shaders -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install LunCoSim/lunco-sim visualize-physics-with-shaders --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/LunCoSim/lunco-sim.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/visualize-physics-with-shaders .claude/skills/visualize-physics-with-shaders && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "visualize-physics-with-shaders" agent skill from https://github.com/LunCoSim/lunco-sim/tree/main/skills/visualize-physics-with-shaders into .claude/skills/visualize-physics-with-shaders/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "visualize-physics-with-shaders", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/LunCoSim/lunco-sim/tree/main/skills/visualize-physics-with-shadersType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add LunCoSim/lunco-sim --skill visualize-physics-with-shaders -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install LunCoSim/lunco-sim visualize-physics-with-shaders --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/LunCoSim/lunco-sim.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/visualize-physics-with-shaders .agents/skills/visualize-physics-with-shaders && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "visualize-physics-with-shaders" agent skill from https://github.com/LunCoSim/lunco-sim/tree/main/skills/visualize-physics-with-shaders into .agents/skills/visualize-physics-with-shaders/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "visualize-physics-with-shaders", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add LunCoSim/lunco-sim --skill visualize-physics-with-shaders -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install LunCoSim/lunco-sim visualize-physics-with-shaders --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/LunCoSim/lunco-sim.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/visualize-physics-with-shaders .cursor/skills/visualize-physics-with-shaders && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "visualize-physics-with-shaders" agent skill from https://github.com/LunCoSim/lunco-sim/tree/main/skills/visualize-physics-with-shaders into .cursor/skills/visualize-physics-with-shaders/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "visualize-physics-with-shaders", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/LunCoSim/lunco-sim.git --path skills/visualize-physics-with-shaders--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add LunCoSim/lunco-sim --skill visualize-physics-with-shaders -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install LunCoSim/lunco-sim visualize-physics-with-shaders --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/LunCoSim/lunco-sim.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/visualize-physics-with-shaders .gemini/skills/visualize-physics-with-shaders && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "visualize-physics-with-shaders" agent skill from https://github.com/LunCoSim/lunco-sim/tree/main/skills/visualize-physics-with-shaders into .gemini/skills/visualize-physics-with-shaders/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "visualize-physics-with-shaders", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install LunCoSim/lunco-sim visualize-physics-with-shadersInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add LunCoSim/lunco-sim --skill visualize-physics-with-shaders -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/LunCoSim/lunco-sim.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/visualize-physics-with-shaders .github/skills/visualize-physics-with-shaders && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "visualize-physics-with-shaders" agent skill from https://github.com/LunCoSim/lunco-sim/tree/main/skills/visualize-physics-with-shaders into .github/skills/visualize-physics-with-shaders/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "visualize-physics-with-shaders", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add LunCoSim/lunco-sim --skill visualize-physics-with-shaders -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install LunCoSim/lunco-sim visualize-physics-with-shaders --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/LunCoSim/lunco-sim.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/visualize-physics-with-shaders .opencode/skills/visualize-physics-with-shaders && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "visualize-physics-with-shaders" agent skill from https://github.com/LunCoSim/lunco-sim/tree/main/skills/visualize-physics-with-shaders into .opencode/skills/visualize-physics-with-shaders/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "visualize-physics-with-shaders", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
visualize-physics-with-shadersWire simulated values into visible WGSL material parameters in LunCoSim, such as load, heat, charge, slip, or temperature visualization.
Visualize Physics With Shaders is an agent skill from LunCoSim/lunco-sim. Wire simulated values into visible WGSL material parameters in LunCoSim, such as load, heat, charge, slip, or temperature visualization. Use for shader Material inputs, ShaderLook::live, USD connections, and values that must follow physics. Visual consequences are wired from authoritative outputs, not scripted; use compose-multidomain-twin for the physics and build-usd-scene for scene authoring.
Its SKILL.md is about 3.6k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Game Development, covering Shaders. The repository describes itself as: Collaborative Multiphysics Cosimulator For Space Missions 🌎🚀🌚. The licence is Apache-2.0.
Read from SKILL.md and the folder at commit d1c6f00. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
No scripts in the folder and no shell commands in SKILL.md (its code samples are usda and wgsl).
From the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Visualize Physics With Shaders loads about 3.6k tokens when it runs. Until then it costs about 108 tokens; SKILL.md has 1,904 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from LunCoSim/lunco-sim at commit d1c6f00, republished under its Apache-2.0 licence (© LunCoSim). 1,904 words, ~3,593 tokens.
.claude/skills/visualize-physics-with-shaders/SKILL.md (or your agent's skills folder).A visual is a consequence of physics, not a performance of it. A strut turns red because it is carrying load, on the same tick and by the same number the solver computed. Nothing samples a clock, nothing tweens, and nothing in rhai paints anything.
The chain is three links, each owned by the layer that knows the fact:
Modelica / avian ──► a port ──► a USD connection ──► a WGSL uniform
computes it publishes it wires it draws itThere is no shader-specific plumbing. Shader parameters are ordinary port
sinks: rewire_usd_connections turns any inputs:*.connect into a
SimConnection without caring what the target is, propagate_connections writes
it through PortRegistry, and lunco-render-bevy's SHADER_PARAM_BACKEND
receives it into ShaderLook::live, which rebind_changed_shader_look drains to
the GPU. Same graph as a thruster force or a battery load.
Connected names are seeded as empty slots in ShaderLook::live(). The compiled
wire resolves the slot at a topology boundary and writes by handle thereafter;
the first sample does not change the slot layout. Use set_value for authored
parameters and set_live for engine-owned updates so topology identity changes
only with the authored parameter shape.
1. Declare the parameter in the WGSL. The engine reflects the Material
struct — field names, offsets, and the //!@ annotations — straight out of the
file. A field that isn't declared here does not exist.
//!@ui base_color color "Strut colour"
//!@default base_color 0.55,0.57,0.60
//!@ui load_frac 0 1 "Load fraction (driven)"
//!@default load_frac 0.0
struct Material {
base_color: vec4<f32>,
load_frac: f32,
}
@fragment
fn fragment(in: VertexOutput) -> @location(0) vec4<f32> {
// The RAMP is a look decision and belongs here. The NUMBER being ramped is a
// physics result and does not.
let hot = vec3<f32>(1.0, 0.15, 0.05);
return vec4<f32>(mix(material.base_color.rgb, hot, material.load_frac), 1.0);
}2. Find the port that already publishes the physical result. Bodies,
colliders and joints expose their state as ports because they exist — a
PrismaticJoint's force is the spring's own reaction, in newtons, computed by
the solver that integrates it. Nothing needs authoring to make it available, and
a model written to restate it would be a second copy of the same fact.
3. Wire it on the BOUND GEOMETRY, and normalise ON THE WIRE. The sink's SSP
linear transformation (lunco:factor:<port> / lunco:offset:<port>) turns the
raw physical quantity into the shader's 0..1 parameter, so the rating is one
number sitting next to the wire that uses it. The shader saturates.
def Mesh "LegPX_Strut" (prepend apiSchemas = ["MaterialBindingAPI"])
{
rel material:binding = </Looks/StrutMat>
float inputs:load_frac.connect = </DescentLander/LegPX_Spring.outputs:force>
float lunco:factor:load_frac = 0.00066667 # 1 / 1500 N rated
}A lunco:factor: is a UNIT CONVERSION, and nothing else. It carries the
rating that takes newtons to a 0..1 fraction. Never put a SIGN in it. Which way
a mechanism travels is a fact about the joint, authored once in its
physics:localRot0; a sign in the factor states it a second time, and makes the
render wiring silently depend on an orientation it never names. If a wire needs
a negative factor to look right, the joint's axis is backwards — fix it there.
4. Verify. read_ports on the prim lists every declared parameter with its
live value; the inspector shows driven rows greyed out. If the value moves in
read_ports and the colour doesn't, the problem is the shader; if it doesn't
move there, the problem is the wire.
A shader uniform is not the only render-side sink. lunco-render-bevy's
SCENE_PROPERTY_BACKEND (scene_ports.rs) exposes the properties a simulation
legitimately drives, as scalar In ports on the prim that carries the component:
| Component | Ports |
|---|---|
PointLight | light_intensity, light_radius, light_color_r/g/b |
Transform | translation_x/y/z, scale_x/y/z |
def SphereLight "PlumeLight"
{
float inputs:light_intensity.connect = </…/Photometry.outputs:intensity>
float inputs:light_radius.connect = </…/Photometry.outputs:radius>
}The engine plume is the worked example end to end: propulsion and nozzle outputs
feed LunCo.Propulsion.PlumePhotometry, which derives the physical free-jet length,
visible length fraction, luminous power, and source radius. USD connects that length
fraction and the light outputs to a fixed-capacity WGSL cone and its child light.
WGSL owns the perceptual width response and flicker; Modelica owns the physical
length and photometry; Rhai supplies stimulus and verdicts only. Zero thrust is
therefore dark without a script-side visual mirror.
When a propulsion model publishes cluster-total thrust and flow but the vehicle
has one visual nozzle per engine, set
PlumePhotometry.engine_count to the configured nozzle count. Keep the input
thrust and flow aggregate; supply each nozzle's own exit radius and area. The
photometry model divides the extensive cluster values before deriving the
per-nozzle momentum flux, exit pressure, and light output. Connect the same
per-nozzle results to one fixed flame pair and one light at each nozzle. Source
the count from the Twin's typed engine-instance configuration and verify the
authored model parameter against it. Do not send the undivided cluster light to
every nozzle or calculate per-engine plume state in Rhai.
Set the fixed envelope's nozzle end on the measured bell exit plane and point its narrow end down the exhaust axis. Start its throttle and light intensity at zero; the simulation's live outputs reveal the flame during a burn. Keep vehicle-specific material paths in the vehicle composition layer; a reusable nozzle component must not point at a particular vehicle's absolute material path.
An authored connection proves only that a route exists. Before reporting a visible, simulation-driven flame, confirm the continuous model compiles and produces samples, then compare an idle sample with a powered sample:
render_throttle, visual_length_fraction, and
intensity are zero. radius may remain at its authored idle value; zero light
intensity and the shader's zero throttle keep the plume dark.If the model is unbalanced or has no run, report the authored wiring as present
and the dynamic/visual result as unverified. Do not make Rhai animate the flame to
hide a missing solver result. The Griffin status example is in its Twin's
contracts/implementation_gaps.md.
A driven Transform is not a licence to animate. A transform WIRED to a port is
a consequence — some model or joint published the number and the stage shows where
it came from. A transform COMPUTED per tick in a script is animation, and is still
forbidden. Also: drive a transform only on a prim nothing else moves, or the wire
fights the USD projector, a rigid body, or a joint.
A UsdShade input belongs to the material, which is shared by every prim
bound to it. A driven value is the opposite — per-instance; four legs each report
their own load. So the bound geometry is where the meaning lives, and the engine
makes that prim's material private (ShaderLook::unshared) so one leg's glow
does not paint its three siblings.
Be honest that this is a LunCo convention, not portable USD. Attribute
connections are core Sdf, so this is spec-legal and round-trips — but inputs:
is a UsdShade convention, and connectability is gated by
UsdShadeConnectableAPIBehavior, which registers Shader/NodeGraph/Material and
never a Gprim. Hydra's HdMaterialNetwork never walks this edge; usdchecker's
shading validators never see it; Omniverse and MaterialX (<geompropvalue>)
ignore it. The material:binding chain is portable, the drive is not.
The standard answer to "one material, varying per gprim" is primvars: plus a
UsdPrimvarReader node — and it would delete unshared and the private material
outright. We don't use it yet because the binder resolves a single shader, not a
network, so a reader node would have nothing to evaluate it. That is a deliberate
deferral with a known migration path, not the absence of a standard.
DECLARE A DRIVEN PARAMETER ON THE SHADER PRIM, not only in the WGSL. This is
the one that silently kills a wire. The authoring pass decides what counts as a
shader drive by intersecting the gprim's connected inputs: against the
parameters the bound Shader prim authors — it reads USD, not the reflected
schema, which does not exist until the .wgsl asset loads. A parameter that
appears in struct Material but is absent from the Shader prim is therefore not
in the driven set: the port backend refuses the write and the uniform sits at its
default forever. Author it with its resting value:
def Shader "Surface" {
uniform asset info:wgsl:sourceAsset = @lunco://shaders/strut_glow.wgsl@
float inputs:load_frac = 0 # ← declared here, or the wire is dead
}The Shader prim is the shader's interface; the WGSL is its implementation. Both must name the parameter.
A name neither declares is refused — and that is the feature. It surfaces as a
dangling-wire warning from propagation instead of the classic silent dead uniform.
If your wire logs as dangling, check the Shader prim's inputs: first, then the
WGSL field list.
Names are snake_case, because the reflection binds WGSL struct fields.
inputs:loadFrac and inputs:load_frac both reach load_frac, but a field
spelled loadFrac in the WGSL is unreachable.
Publish the physical quantity, not the driving term. A strut fed the
proximity-gated force pressed onto the leg reads fully loaded while still in
the air, and glows red before touchdown. The honest number is the spring's
own reaction, exactly zero until compression starts — and it comes off the
joint that integrates the spring (PrismaticJoint's force port), never from
a second copy of the spring law. When a visualization "happens too early",
suspect something is publishing an input rather than a result.
A wheel diagnostic must use its realization's result. Raycast wheels may expose solved tire and normal forces; jointed wheels may expose the solver's joint reaction. The body's integration accumulator is not a per-wheel contact force. If a debug arrow is drawn from a raw velocity or force, apply an explicit unit scale and cap its render length so a transient cannot become a line across the terrain.
Normalise on the WIRE, not in the shader, a script, or a model. The affine
lunco:factor:<port> / lunco:offset:<port> on the sink is exactly the SSP
LinearTransformation — a unit conversion, never a sign or an orientation
fixup — and a rating is one number: re-rating the strut is a
single edit next to the connection it scales. Writing a .mo to hold one
constant buys a whole solver instance and a second place for the number to
drift.
Don't collide with an //!@engine field. Fields annotated @engine are
filled by Rust every frame (sun_vis, albedo, sun_dir_world,
weight_rough). A wire pointed at one of those loses the race every frame,
silently. Pick a name the engine does not own.
Driven parameters are read-only in the inspector. An active override in
ShaderLook::live() is engine-owned and its control is disabled — editing it
would be a lie, since the next tick overwrites whatever was typed. Seeing the
value move is the point; editing it is not.
inputs: is the spelling for EVERY port, not just shader parameters. A
prim commonly carries simulation wires alongside its shader drives. The
material layer intersects against the shader's declared inputs precisely so
those simulation wires are not mistaken for shader drives — if you add a
parameter to the WGSL, check you have not just shadowed a sim port name.
A vec parameter cannot be driven by one wire. A connection carries one
f64. Drive components individually (inputs:tint_r) or ramp the colour inside
the shader from a scalar — the latter is almost always what you want, because
the ramp is a look decision.
set(me, "PbrLook.emissive.red", …)) — that is
animation, not visualization; it re-derives in a script what physics already
computed, and it drifts the moment the model is re-tuned.compose-multidomain-twin.© LunCoSim, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in skills/visualize-physics-with-shaders of LunCoSim/lunco-sim.
Open the folder on GitHubat commit d1c6f00
Visualize Physics With Shaders next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Visualize Physics With Shaders this skillLunCoSim/lunco-sim | 107 | — | ~3.6k | Automated safety check: Pass | Apache-2.0 | |
| PixijsRSamaium/CanvasEngine | 401 | 2 repos | ~1.6k | Automated safety check: Pass | MIT | |
| New ExperimentTresjs/tres | 3.8k | — | ~782 | Automated safety check: Pass | MIT | |
| Assets Shader List AllIvanMurzak/Unity-MCP | 4.4k | — | ~435 | Automated safety check: Pass | Apache-2.0 | |
| Handle Sdr Tonemap Lutclshortfuse/renodx | 4.5k | — | ~7.3k | Automated safety check: Pass | MIT | |
| Unreal Material and VFX Workflowflopperam/unreal-engine-mcp | 1.1k | — | ~927 | Automated safety check: Pass | None |
RSamaium/CanvasEngine
Use this skill first for ANY PixiJS v8 task; it routes to the right specialized skill for the job.
Tresjs/tres
Create a new experiment in TresJS Lab with all necessary files
IvanMurzak/Unity-MCP
List all shaders available in the project assets and packages, sorted by name.
clshortfuse/renodx
RenoDX HLSL/Slang shader workflow for proven shader-side SDR tonemap, hard clip, LUT, color grade, and HDR bridge changes.
flopperam/unreal-engine-mcp
Walks an Unreal Engine MCP agent through building materials, Niagara particle systems, Chaos destruction, and curve assets with inspect-then-edit steps.
BANANASJIM/rdc-cli
A skill your agent uses when working with RenderDoc capture files (.rdc), analyzing GPU frames, tracing shaders, inspecting draw calls, or running CI assertions against GPU captures.
LunCoSim/lunco-sim
Generate concise LunCoSim nightly GitHub release notes with platform downloads, installation guidance, an AI-agent mission prompt, and a changelog link.
LunCoSim/lunco-sim
Build or repair a reusable scene component through a live LunCoSim Editor session.
LunCoSim/lunco-sim
Build or review a componentized LunCoSim USD assembly with a realistic, dimensionally checkable presentation.
LunCoSim/lunco-sim
Author and review LunCoSim behavioral, asset-backed, component, mission, visual, and requirements-verification tests.
LunCoSim/lunco-sim
Create, extend, register, or debug a reusable LunCoSim Rhai tool library for live USD authoring, component linting, inspection, or test support.
LunCoSim/lunco-sim
Author an interactive tutorial, guided lesson, onboarding flow, coach-mark tour, or objectives checklist in LunCoSim.
Categories
Wire simulated values into visible WGSL material parameters in LunCoSim, such as load, heat, charge, slip, or temperature visualization. Visualize Physics With Shaders is an agent skill from LunCoSim/lunco-sim. Wire simulated values into visible WGSL material parameters in LunCoSim, such as load, heat, charge, slip, or temperature visualization.
Visualize Physics With Shaders fits situations like: shader Material inputs; shaderLook::live; USD connections; values that must follow physics.
Run `npx skills add LunCoSim/lunco-sim --skill visualize-physics-with-shaders -a claude-code`. Or copy the skill folder (skills/visualize-physics-with-shaders in LunCoSim/lunco-sim) into .claude/skills/visualize-physics-with-shaders in your project. Claude Code loads it when a task matches its description.
Run `npx skills add LunCoSim/lunco-sim --skill visualize-physics-with-shaders -a codex`. Or copy the skill folder (skills/visualize-physics-with-shaders in LunCoSim/lunco-sim) into .agents/skills/visualize-physics-with-shaders in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add LunCoSim/lunco-sim --skill visualize-physics-with-shaders -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/visualize-physics-with-shaders, .gemini/skills/visualize-physics-with-shaders, .github/skills/visualize-physics-with-shaders and .opencode/skills/visualize-physics-with-shaders in your project.
SKILL.md names no scripts, command-line tools or credentials: Visualize Physics With Shaders is instructions for the agent only.
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Visualize Physics With Shaders is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 3.6k tokens (SKILL.md is roughly 14k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Visualize Physics With Shaders: Pixijs (RSamaium/CanvasEngine, 401 stars), New Experiment (Tresjs/tres, 3.8k stars), Assets Shader List All (IvanMurzak/Unity-MCP, 4.4k stars) and Handle Sdr Tonemap Lut (clshortfuse/renodx, 4.5k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
LunCoSim (a GitHub organization) maintains it in LunCoSim/lunco-sim, which has 107 GitHub stars. The repository holds 40 skills in this directory. The repository was last updated on October 9, 2026.
Source: LunCoSim/lunco-sim on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.