.lxs

照明制御のためのシェーダー言語。
関数をひとつ書く。すべてのフィクスチャがそれを実行する。それだけ。

Lighting Expression Shader · Open Format · MIT License

01概要

フラグメントシェーダーは「各ピクセルに対して実行される関数」というたった一つの概念で、映像表現を不可逆に変えた。.lxs は同じ概念を照明に適用する ——「各フィクスチャに対して実行される関数」。

現在の照明コンソールのEffect機能は、実質的にパラメータ化されたLFO(sin波の振幅・周波数・位相を設定するだけ)。これは1990年代のGPU固定機能パイプラインと同じ段階。.lxs はプログラマブルシェーダーの導入に相当する。

// spiral-galaxy.lxs — これだけで32台のムービングライトが螺旋を描く

@meta { name: "Spiral Galaxy"; fixtures: 32; }

@params {
  speed:  float = 1.0  [0.1, 3.0];
  radius: float = 3.0  [0.5, 8.0];
}

@fixture main(i, t) {
  pan   = sin(t * speed * 2 + i * 0.196) * radius;
  tilt  = cos(t * speed * 1.5 + i * 0.392) * radius * 0.67;
  dim   = sin(t * 0.8) * cos(i * PI) * 0.3 + 0.7;
  red   = sin(t + i * 0.1) * 0.5 + 0.5;
  green = sin(t * 0.7 + i * 0.2 + TAU/3) * 0.5 + 0.5;
  blue  = sin(t * 1.3 + i * 0.3 + TAU*2/3) * 0.5 + 0.5;
}

02数学が拓く無限の表現

照明の世界で「エフェクト」と呼ばれてきたものは、実はsin波のパラメータ調整に過ぎなかった。振幅、周波数、位相 —— この3つの数値を変えるだけ。.lxs は「数式そのものを書く」ことを可能にし、表現空間を次元ごと拡張する。

5つの関数で、無限の表現

sin, cos, noise, fract, clamp —— たった5つの基本関数の組み合わせから、これまでコンソールでは不可能だったパターンが次々と生まれる。

sin(t + i × TAU)

ウェーブ

位相差のあるsin波。照明の最も基本的な動き。これだけでも十分美しい。

sin(t×2 + i×0.2) × cos(t×1.5 + i×0.4)

リサージュ

2つのsin/cosの掛け合わせ。XとYの周波数比で無限のカーブを描く。

noise(t×0.3 + i×5) × fbm(i×3)

有機的運動

ノイズ関数で予測不能だが滑らかな動き。自然界のゆらぎを再現。

sin(i×f1) + sin(i×f2) + sin(i×f3)

干渉パターン

異なる周波数の波を重ねてモアレ。複雑さが単純さから自己組織化する。

fract(sin(n×12.99) × 43758.55)

擬似ランダム

ハッシュ関数でフィクスチャごとの固有値。ランダムだが再現可能。

bass × sin(i×TAU) + high × fract(hue)

音声反応

外部入力変数を数式に組み込むだけ。音とリアルタイムに対話する照明。

パラダイムシフト: preset → equation

Before: 固定機能パイプライン

  • 波形を選ぶ(sin / cos / ramp)
  • 振幅・周波数・位相を設定
  • プリセット切替で「変化」を表現
  • パターンの種類は有限(メーカー依存)
  • パターン共有は不可能

After: プログラマブルシェーダー

  • 数式を自由に書く
  • 関数を組み合わせ、ネストし、条件分岐する
  • 連続的な数学で「進化」を表現
  • パターンの種類は無限(ユーザーが創造)
  • URLひとつで世界と共有
表現可能なパターン数
~20
行で螺旋+カラー+ディマー
2–5
KB(AST JSON転送サイズ)
0
ベンダーロックイン

核心: 映像の世界では、テクスチャ→動画→シェーダーの進化が不可逆だった。同じ革命が照明で起きる。プリセット→キューシーケンス→.lxs。この進化は「より便利になる」のではなく、「表現の次元が変わる」。ShaderToyが映像表現を民主化したように、.lxs は照明表現を民主化する。

03構造的等価性

Fragment Shader (GPU)

ピクセル単位の色計算

各ピクセルの座標 uv と時間 iTime を受け取り、RGBA を返す。GPUが全ピクセルを並列処理。ShaderToy で世界中の作者がシェーダーを共有。

.lxs (Lighting)

フィクスチャ単位の制御計算

各フィクスチャのインデックス i と時間 t を受け取り、Pan/Tilt/Dim/RGB を返す。コンソールが全フィクスチャを逐次処理。共有プラットフォームは未開拓。

概念 Fragment Shader .lxs
処理単位pixelfixture
空間座標uv (0–1, 2D)i (0–1, 1D) + n (int)
時間iTimet
出力vec4 (RGBA)pan, tilt, dim, r, g, b, ...
パラメータuniforms@params
ファイル.glsl / .frag.lxs
共有文化ShaderToy未開拓(=巨大な機会)

04言語構文

.lxs ファイルは4つのブロックで構成される。@meta と @fixture が必須、他は任意。GLSLを書いたことがある人なら5分で書き始められる。

@meta

メタデータ

パターン名、作者、フィクスチャ数、FPS、タグ。ファイルの自己記述情報。

@params

パラメータ

UIフェーダーやOSCで制御可能な変数。型、デフォルト値、範囲を宣言。

@fixture

フィクスチャ関数(コア)

各フィクスチャで毎フレーム実行される関数。i(正規化インデックス)とt(時間)を受け取り、pan/tilt/dim/rgbを返す。

@aux / @input / @layout / @stack

拡張ブロック

補助フィクスチャ制御、外部入力バインディング(OSC/MIDI/Audio)、物理配置、レイヤー合成。

組み込み関数

// 三角関数
sin(x)  cos(x)  tan(x)  asin(x)  acos(x)  atan2(y, x)

// 算術
abs(x)  sqrt(x)  pow(x, y)  exp(x)  log(x)  sign(x)

// 補間
lerp(a, b, t)  smoothstep(x)  mix(a, b, t)  step(edge, x)

// 範囲
min(a, b)  max(a, b)  clamp(x, lo, hi)  saturate(x)

// ノイズ
noise(x)  noise2(x, y)  fbm(x, octaves)

// 丸め
floor(x)  ceil(x)  round(x)  fmod(x, y)  fract(x)

05なぜスポットライト制御に最適か

ムービングライト(スポットライト)は本質的に「時間の関数で動く数学的オブジェクト」だ。Pan/Tilt は極座標の角度、Dimmer は振幅、Color は3次元ベクトル —— すべてが数値。.lxs の「数式ひとつで全チャンネルを制御する」アプローチは、この性質に完全に一致する。

Pan / Tilt = 角度関数

ムービングヘッドの首振りは、sin/cos の出力そのもの。リサージュ曲線、螺旋、花弁パターン —— すべて三角関数の組み合わせで記述できる。

pan = sin(t×speed + i×TAU) × radius

Dimmer = 振幅エンベロープ

フェードイン、パルス、呼吸エフェクト、ストロボ。すべてが0–1の連続関数。clamp, smoothstep, fract で任意の波形を設計できる。

dim = smoothstep(fract(t × bpm / 60))

Color = 3Dベクトル空間

RGB は3次元空間の点。HSV→RGB 変換は6行の数式。色相の巡回、補色対比、温度グラデーション —— すべて幾何演算。

hue = fract(t × 0.1 + i × 0.3)

全出力チャンネルが数値 = 数式で完全制御

ムービングライトのすべての出力チャンネルは連続的な数値だ。これは偶然ではなく、照明器具の物理的性質から来ている。だからこそ、数式ベースの制御が自然にフィットする。

pan
角度
水平回転。sin/cos で円運動、atan2 で追従、noise で揺らぎ。
tilt
角度
垂直回転。pan と位相差を持たせるだけでリサージュが生まれる。
dim
0–1
明るさ。sin で呼吸、step でストロボ、clamp でフェード。
red
0–1
HSV→RGB変換で色相環を巡回、または直接指定。
green
0–1
120°位相差で自然な色彩変化を実現。
blue
0–1
240°位相差。3チャンネルで全スペクトルをカバー。
zoom
0–1
ビーム幅。dim と連動させて呼吸感、bass で拡縮。
focus
0–1
フォーカス。距離に応じた自動計算も数式で表現可能。
gobo
0–1
ゴボ回転速度。fract(t) でスムーズ回転。

本質的な適合: ムービングライトは「数学的に動く物体」であり、.lxs はその数学を直接書くためのフォーマットだ。中間抽象化(Effect Generator, Phaser)を経由する必要がない。意図がそのまま数式になり、数式がそのままフィクスチャ値になる。これは「便利なツール」ではなく「本質的な一致」。

// 呼吸する螺旋 — Pan/Tilt/Dim/Color が有機的に連動
@fixture main(i, t) {
  breath = sin(t * 0.4) * 0.5 + 0.5;       // 呼吸リズム
  pan   = sin(t + i * TAU) * (2 + breath * 4); // 呼吸で螺旋が広がる
  tilt  = cos(t * 0.7 + i * TAU) * (1.5 + breath * 3);
  dim   = breath * 0.6 + 0.3;               // 広がると明るく
  zoom  = 1.0 - breath * 0.5;               // 広がるとビーム絞る
  hue   = fract(t * 0.08 + i * 0.15);    // ゆっくり色相回転
  red   = saturate(abs(hue * 6 - 3) - 1);
  green = saturate(2 - abs(hue * 6 - 2));
  blue  = saturate(2 - abs(hue * 6 - 4));
}

06ライブデモ

32台のフィクスチャが .lxs の数式をリアルタイムに評価している。プリセットを切り替え、パラメータを調整して効果を確認。

25 fps

07サンプル

10個のサンプル .lxs ファイルがリポジトリに含まれている。基本パターンから音声反応・レイヤー合成まで。

01

Hello World

最小のシェーダー。sin波ひとつでディマーを上下。

beginner, minimal
02

Spiral Galaxy

リサージュ螺旋 + 120°位相差カラー。すべての基本。

spiral, lissajous, color
03

Breathing Grid

インデックスからグリッド座標を導出。呼吸するように膨縮。

grid, breathing, geometric
04

Wave Interference

3つのsin波を重ねてモアレ干渉パターンを生成。

wave, moiré, hypnotic
05

Particle Burst

花火のような放射状バースト。極座標 + 重力減衰。

explosion, firework
06

Aurora Color

ノイズによる有機的ドリフト + HSV→RGB全スペクトル巡回。

aurora, organic, slow
07

Noise Terrain

FBMノイズで群れのような有機的運動。

noise, swarm, generative
08

Reactive Beat

@input でオーディオバインド。低音でフラッシュ、高音で色変化。

audio, reactive, live
09

Layer Stack

位置 + カラー + ストロボを独立レイヤーで合成。

layers, modular
10

DNA Helix

奇数/偶数フィクスチャで二重螺旋。ストランド別カラー。

helix, dna, elegant

08アーキテクチャ

.lxs テキストはAST JSONにコンパイルされ、任意のランタイムで実行される。GLSLがSPIR-Vにコンパイルされるのと同じ二段構造。

人間/AIが書く
.LXS 人間可読テキスト。コメント、型注釈、名前付きパラメータ。
コンパイル
AST JSON マシン可読の中間表現。2–5 KB。OSC/HTTP/ファイルで転送。
ランタイム
EVAL ASTツリーウォーキングで20–30Hz評価。loadstring不使用、セキュア。
出力
DMX フィクスチャへ。ArtNet / sACN / コンソールネイティブ。

ランタイム対応状況

プラットフォーム ランタイム 状態
grandMA3Lua Plugin (AST eval)✅ Working
Node.jsJavaScript evaluator✅ Working
BrowserWebGL preview + JS eval✅ Working
TouchDesignerPython evaluator🔧 Planned
ETC EosExternal → sACN🔧 Planned
WASMUniversal high-perf📋 Future

ポータビリティの原則: .lxs ファイルは純粋な数学のみで構成され、コンソール固有のAPIを一切含まない。Cmd() や SetFixtureValues() はランタイム層の責任。GLSLとGPUドライバの関係と同じ。

09設計哲学

01

Math, not macros

.lxs は純粋な数学式。コンソール固有のコマンド、DMXアドレス、プロトコル詳細は含まない。純粋関数のみ。

02

Portable by design

同じ .lxs がどんなコンソール、ソフトウェア、ハードウェアでも動く。ランタイムが適応し、ファイルは変わらない。

03

AI-native

GLSL(2004年、人間用に設計)と違い、.lxs はAI時代に生まれた。LLMが生成できるほど短く、検証できるほど構造化され、人間が微調整できるほど可読。

04

Share everything

照明の知識はプロプライエタリなショーファイルに閉じ込められてきた。.lxs はパターンを共有可能、フォーク可能、合成可能にする。

10起源

.lxs は SPOTLIGHT AI プロジェクトから生まれた —— 自然言語で照明の意図を伝え、AIが数式に変換し、grandMA3でリアルタイム実行するシステム。AST JSON フォーマットと Lua ランタイムは、テキスト構文を設計する前にライブパフォーマンスで検証された。

仕様策定、リファレンス実装、サンプルパターン、MA3互換ブリッジを含むリポジトリは GitHub で MIT ライセンスのもと公開されている。

リポジトリを見る 言語仕様を読む

11マルチグループ・パターンルーティング

実際のライブやインスタレーションでは、ステージ上に異なる種類のフィクスチャが混在する —— フロントウォッシュ、バックムービング、フロアライト、ピンスポット。すべてに同じパターンを適用するのは非現実的だ。グループごとに異なる .lxs パターンをアサインし、独立した速度・スケールで制御する必要がある。

グループ × パターン ルーティング

Front Wash
aurora-color.lxs speed: 0.5
Fixture 1–8
Back Moving
spiral-galaxy.lxs speed: 1.2, radius: 5
Fixture 9–24
Floor Effect
wave-interference.lxs speed: 0.8
Fixture 25–32
Pin Spot
reactive-beat.lxs sensitivity: 2.0
Fixture 33–40
Audience Blinder
particle-burst.lxs speed: 0.6
Fixture 41–48

各グループは独立した .lxs パターンを持ち、個別のパラメータ値で動作する。グループ間の i(正規化インデックス)はそれぞれ 0–1 にリマップされるため、パターンはグループサイズに自動適応する。8台でも16台でも、同じ数式が同じ空間分布を描く。

SPATAI アプリ — グループ管理 UI

SPOTLIGHT AI(SPATAI)のコンパニオンアプリに、グループごとの .lxs パターンアサインメントと、パラメータのリアルタイム制御UIが必要になる。

SPATAI — Group Pattern Manager
Groups
Front Wash×8
Back Moving×16
Floor Effect×8
Pin Spot×8
Audience×8

Back Moving — Fixture 9–24 (16 units)

Pattern
Spiral Galaxy
spiral-galaxy.lxs
speed radius spread
▼ CHANGE
speed
1.2
radius
5.0
spread
0.196
プレビュー
MA3 へ送信
AI で生成...

技術アーキテクチャ

マルチグループ対応では、SPATAI アプリがルーターとして機能する。各グループに対して独立した AST JSON を保持し、独立した環境変数(i のリマップ、個別パラメータ値)で評価する。MA3 側では既にグループ概念が存在するため、グループ → フィクスチャのマッピングはコンソールのデータを参照する。

SPATAI App
.LXS × N グループ数ぶんの .lxs パターンを保持。各グループに独立したパラメータ値。
OSC Router
ROUTE グループIDとAST JSONをペアで送信。/spatai/group/{id}/equation で識別。
MA3 Plugin
EVAL × N グループごとに独立した evaluation loop。i はグループ内で 0–1 にリマップ。
Output
DMX 全グループの出力が統合されて 1 つの DMX Universe に出力。

自然言語との組み合わせ: 「バックの16台は螺旋で速めに、フロントの8台はオーロラでゆっくり、ピンスポットは音に反応」—— この一文をAIが解析し、3つのグループそれぞれに適切な .lxs パターンを自動生成・アサインできる。グループ × パターン × パラメータのルーティングが言語化されることで、照明オペレーションの意図がそのまま実行可能な構造になる。

12grandMA3 への提案 — 次の進化

grandMA3 は世界最高の照明コンソールであり、Lua プラグイン環境を提供する数少ないプラットフォームだ。だからこそ、SPOTLIGHT AI と .lxs フォーマットを最初に実現できた。しかし現在の実装はプラグインによるワークアラウンドであり、コンソールネイティブの統合には至っていない。以下は、MA Lighting に向けた具体的な拡張提案である。

Level 1 — Lua API 拡張(最小コスト・最大効果)

SetFixtureValues() API の公開

現在、Lua から フィクスチャ値を直接設定する公式 API がない。Cmd("Attribute ...") 経由のコマンド発行は低速で、25Hz の数式評価ループには不十分。DMX512 レベルの SetFixtureValue(fixture_id, attribute, value) を Lua API として公開するだけで、プラグインのパフォーマンスが劇的に向上する。これは .lxs に限らず、あらゆる Lua プラグイン開発者に恩恵をもたらす。

LOW EFFORTHIGH IMPACTLUA API
Level 2 — 数式エフェクトエンジン

Phaser に「Equation Mode」を追加

現在の Phaser は波形選択 + パラメータ調整の固定機能モデル。ここに「Equation」タブを追加し、.lxs の @fixture ブロックと等価な数式を直接入力できるようにする。sin(t + i * 0.3) * 3 と書くだけで、全フィクスチャのPanが螺旋を描く。既存の Phaser ワークフローと共存し、ユーザーが段階的に移行できる。技術的には AST JSON 評価エンジンをネイティブ C++ で実装するだけで、Lua プラグインで既に動作実証済み。

MED EFFORTHIGH IMPACTPHASERUX
Level 3 — .lxs ファイルのネイティブサポート

.lxs インポート / エクスポート

Show File に .lxs パターンを直接インポートする機能。Effect Pool に .lxs パターンをドラッグ&ドロップするだけで利用可能に。逆にコンソールで作成した Phaser Effect を .lxs 形式でエクスポートし、他のコンソールやソフトウェアと共有できる。照明業界初のオープンな Effect 交換フォーマットとなる。

MED EFFORTVERY HIGH IMPACTINTEROPOPEN FORMAT
Level 4 — AI アシスタント統合

自然言語 → .lxs → Phaser 自動生成

コマンドラインまたは専用UIに「32台で螺旋、暖色系、BPMに同期」と入力すると、AI が .lxs を生成し、即座に Phaser に適用される。SPOTLIGHT AI で実証済みのワークフローをコンソールにネイティブ統合する。照明デザイナーは数式を書く必要すらなく、意図を言葉で伝えるだけでよい。LLM の API コストは 1 クエリ 数円程度であり、ソフトウェアアップデートとして十分に実用的。

HIGH EFFORTTRANSFORMATIVEAINLP
Level 5 — コミュニティ・エコシステム

.lxs パターンライブラリ + マーケットプレイス

MA Lighting が .lxs パターンの共有プラットフォームを運営する。ShaderToy や Unreal Marketplace のように、世界中の照明デザイナーがパターンを投稿・フォーク・改良できる。コンソールから直接ブラウズしてワンクリックでロード。プロ用有料パターンの販売も可能。これは grandMA3 のプラットフォーム化であり、ハードウェア販売を超えた持続的なエコシステムの構築を意味する。

LONG TERMECOSYSTEMPLATFORMCOMMUNITY

MA Lighting にとっての戦略的意義

競争優位性

業界初のプログラマブルEffect

ETC Eos, ChamSys, Avolites のいずれもプログラマブルな数式エフェクトを持たない。grandMA3 が最初に実装すれば、技術リーダーシップを確立できる。

ロックイン脱却

オープン標準によるエコシステム拡大

閉じたショーファイル形式ではなく、.lxs という共通語をサポートすることで「grandMA3 で作ったパターンがどこでも動く」という信頼を獲得。結果として grandMA3 がハブになる。

次世代ユーザー

プログラマー層の取り込み

クリエイティブコーダー、メディアアーティスト、VJ はコンソールの操作体系に馴染みがない。しかし数式なら書ける。.lxs は照明の世界への新しい入口になり、grandMA3 のユーザーベースを拡大する。

AI時代の準備

LLM が直接生成できる制御フォーマット

AIは .showfile を生成できないが、.lxs なら生成できる。コンソールが .lxs をネイティブサポートすれば、AI → コンソールの直接パイプラインが開通する。これは数年以内に照明業界の標準ワークフローになる可能性が高い。

まとめ: Level 1(Lua API拡張)だけでも、プラグイン開発者コミュニティ全体に大きな価値を提供する。Level 2–3 で grandMA3 は照明業界初のプログラマブルコンソールとなり、Level 4–5 で AI 時代のプラットフォームとして確固たる地位を築く。.lxs フォーマットは MIT ライセンスで公開されており、MA Lighting は自由に採用・拡張できる。