3D・WebGL寄り

Flowmap JUNKBRANDING Mask React

OGLのFlowmapで歪ませたWebGL背景を、JUNKBRANDINGの白マスクで抜いて見せるReact実装です。

Y
Yutaka Kizaki
@junkbranding
2026年5月28日
読了時間: 7分
構成 / File Structure
</>Code Viewer
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182

📝 はじめに

このデモは、貼り付けられたOGLのFlowmapコードを、JUNKBRANDINGのSVGテキストマスク付きReactコンポーネントへ分解したものです。WebGL側は Component.jsxuseEffect() で初期化し、シェーダーは shaders.js、見た目の固定配置とブレンドは styles.css に分けています。

ポイントは、キャンバス自体を直接マスクするのではなく、白背景に黒い JUNKBRANDING テキストを置いたレイヤーへ mix-blend-mode: screen を使うことです。黒い文字部分だけ下のWebGLが見え、白い部分は白として残るため、CSSだけで抜き文字のような見せ方ができます。

🛠️ 実装のポイント

  • React側でWebGLのライフサイクルを閉じる OGLの RendererFlowmapProgramMeshuseEffect() 内で作成します。返り値のクリーンアップで requestAnimationFrame、resize、pointerイベント、生成したcanvasを破棄することで、記事プレビューを切り替えても処理が残らないようにしています。
  • シェーダーを別ファイルに分ける GLSL文字列はJSX内に置くと見通しが悪くなるため、shaders.js に分離しています。fragment shaderではFlowmapのRGB値を使って赤、緑、青のUVを少しずつずらし、ポインターの動きに色収差を重ねています。
  • SVGテキストをマスクとして扱う ロゴは text 要素で JUNKBRANDING として描画し、CSSの .flowmask-word で太さとサイズを管理しています。パスデータではなく文字列で管理できるため、ブランド名の変更や字間調整が簡単です。

💡 使いどころとカスタマイズ

  • 最適なユースケース: ブランドロゴのファーストビュー、音楽・ファッション系LP、展示会やキャンペーンサイトのキービジュアルに向いています。
  • 調整ダイヤル(パラメーター変更のヒント):
    • falloff0.18 に変更すると、ポインター周辺だけが鋭く歪む表現になります。
    • fragment shader内の flow.xy * 0.180.28 に上げると、色ズレと波打ちが強くなります。

タグ

WebGLJavaScriptSVGCSSアニメーションインタラクションUX

関連記事