Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Live Coding やってみた
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
YM053
April 23, 2025
98
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Live Coding やってみた
YM053
April 23, 2025
More Decks by YM053
See All by YM053
unagipy_sweetsbank_2026.pdf
ym053
0
34
Featured
See All Featured
Measuring & Analyzing Core Web Vitals
bluesmoon
9
1k
Navigating Algorithm Shifts & AI Overviews - #SMXNext
aleyda
1
1.6k
Self-Hosted WebAssembly Runtime for Runtime-Neutral Checkpoint/Restore in Edge–Cloud Continuum
chikuwait
0
860
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
10k
The SEO identity crisis: Don't let AI make you average
varn
0
580
For a Future-Friendly Web
brad_frost
184
10k
Navigating Weather and Climate Data
rabernat
0
550
First, design no harm
axbom
PRO
2
1.3k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
16k
Docker and Python
trallard
47
4.2k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
2.2k
The SEO Collaboration Effect
kristinabergwall1
1
590
Transcript
Live Coding やってみた (React Three Fiber - custom shader のお話)
JAWS-UG浜松 + Hamamatsu.js 202504
自己紹介 YM053/ miyama_053 浜松の製造会社でソフトウェアエンジニア C++ / Python /TypeScript など触っています。
Live Coding
Live Coding - リアルタイムでプログラムを記述しながら 音楽やビジュアルエフェクトを演出するパフォーマンスです。 - 書いたコードが即座に音楽や映像として反映される。 プログラムがステージ上で「見える」のが特徴。 - 演者が即興でコードを書き(演奏)、
観客が踊るというパフォーマンスが繰り広げられる。 (Algorave(Algorithm + Rave)と呼ばれている。)
コーディング のインプロヴィゼーション - Live Coding はしばしば「ジャズ」に例えられる。 (演奏の計画 (chord 進行) はある程度あっても、実際の流れはその場のノリで決まる)
- その場の雰囲気、他の演奏者、オーディエンスの反応に応じて 演奏 (コーディング)する。 失敗も魅力の一つ。 - 他者との即興セッションも可能。 - コードは変化し続ける。"完成"はない。
モチベーション - 年末の Unagi Py の懇親会で Live Coding の話が盛り上がったため。 -
別件で、昨年あたりから少し Three.js を触っていて、 Live Coding で使えそうだなと思ったため。
Live Coding で 使われるツール 以下がメジャーなツールらしい。 - Tidal Cycles (Haskell) -
Sonic Pi (Ruby) - FoxDot (Python)
各種イベント https://www.youtube.com/watch?v=jLmD0oJkqOk&list=RDjLmD0oJkqOk&start_radio=1 https://www.youtube.com/watch?v=7qfCeIgtllY https://www.youtube.com/watch?v=Tjf-NJNfOP4
今日はコイツ ついてご紹介。 今回、 音楽演奏: FoxDot (Python) 映像演出: React Three Fiber
(Typescript) をトライしてみた。 今日は FoxDot ついては省略。 (また別の機会 (Unagi.Py) などで。)
FoxDot (LiveCoding (演奏)) SuperCollider (音源 (Synth)) システム構成 Web Browser (Three
React Fiber) (映像演出) OSC (Open Sound Control) WebMIDI MIDI pythonのプログラムに応じて メッセージ送信 音声に応じて メッセージ送信
React Three Fiber
React Three Fiber https://r3f.docs.pmnd.rs/getting-started/introduction https://github.com/pmndrs/react-three-fiber Three.js と React を統合するためのライブラリ (Three.js
は 3D graphics を browser 上で描画するための JavaScript Library)
const Box = (props: ThreeElements['mesh']) => { const meshRef =
useRef<THREE.Mesh>(null!) const [hovered, setHover] = useState(false) const [active, setActive] = useState(false) useFrame((state, delta) => { return (meshRef.current.rotation.x += delta) }) return ( <mesh {...props} ref={meshRef} scale={active ? 3 : 1.5} onClick={(event) => setActive(!active)} onPointerOver={(event) => setHover(true)} onPointerOut={(event) => setHover(false)}> <boxGeometry args={[1, 1, 1]} /> <meshStandardMaterial color={hovered ? 'hotpink' : '#2f74c0'} /> </mesh> ) }
シェーダー組み込み - React Three Fiber (Three.js) では、 カスタムの shader (GLSL)
を組み込むことが可能。 - Javascript だけでは難しいアニメーション制御可能。 - GPU 上で演算が可能。 (大量の particle を使った effect などが実現できる。)
組み込み方法 - (Three.js で用意されている 既存の material に) default で 組み込まれている
shader の一部を書き換えて使用する。 - 完全にカスタムな shader を作成することも可能。 * 初回 render の時に WebGL -> GPU driver に渡って、 compile (GPU driver) -> GPU に転送 されているっぽい? (Three.js manual を見た感じ。)
const RippleMaterial = shaderMaterial ( { uTime: 0, uOpacity: 0,
}, // Vertex Shader ` varying vec2 vUv; void main() { vUv = uv; gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0); } `, // Fragment Shader ` varying vec2 vUv; uniform float uTime; uniform float uOpacity; void main() { vec2 center = vec2(0.5, 0.5); float dist = distance(vUv, center); float rippleRadius = mod(uTime * 0.4, 1.0); float thickness = 0.02; float ripple = smoothstep(thickness, 0.0, abs(dist - rippleRadius)); float fade = smoothstep(0.7, 0.0, dist); vec3 innerColor = vec3(0.2, 0.4, 1.0); vec3 midColor = vec3(0.6, 0.3, 0.9); vec3 outerColor = vec3(1.0);
デモ
まとめ - Live Coding 実際やってみると面白いけど、結構ムズイ。 (セッションできるまで、まだ道のりは長そうだな。。。) - マシンスペック要求される。 - React
Three Fiber (Three.js) 結構遊べる。 (もう少しシェーダー(GLSL)を勉強してみよう。)
ご清聴ありがとうございました。
None