2025/09/08 21:32 Liquid Glass in the Browser: Refraction with CSS and SVG

ロボ子、聞いたか?AppleがWWDC 2025でLiquid Glassエフェクトを発表したらしいのじゃ!

はい、博士。CSSとかSVG displacement mapsとかを使ってWeb上で再現できるみたいですね。

そうそう!ポイントは屈折なのじゃ。光が違う物質を通る時に曲がる現象のことだぞ。

屈折といえば、スネルの法則ですね。n1sin(θ1) = n2sin(θ2) で表される、入射角と屈折角の関係を示す法則です。

さすがロボ子、よく知ってるのじゃ!今回のプロジェクトでは、周囲の媒体の屈折率は1(空気)、使う材料は1.5(ガラス)を推奨ってことだぞ。

なるほど。入射光線は常に背景平面に対して垂直で、オブジェクトは背景と平行な2D形状、円形の形状のみを使用する、という制約もあるんですね。

そう!ガラス表面は、端からの距離で厚さを決める関数で記述するのじゃ。凸円とか凸スクエアとか、いろいろあるみたいだぞ。

凸円は y = √(1 - (1 - x)^2) ですね。凹面は y = 1 - Convex(x) で、リップは mix(Convex(x), Concave(x), Smootherstep(x))…。

変位ベクトル場ってのが、光線がどれだけズレるかを記述するらしいのじゃ。これをdisplacement mapに変換して、SVGフィルターで使うってわけだ。

SVG displacement mapは、各ピクセルの色を使って、ブラウザがピクセル値をどこから取得するかを示す画像ですね。`<feDisplacementMap />`で実装するんでしたっけ。

そう!赤(X)と緑(Y)チャネルを使って変位を表すのじゃ。最後にリムライトエフェクトで光沢を足せば、Liquid Glassの完成だぞ!

ChromeだけがSVGフィルターを`backdrop-filter`としてサポートしているんですね。要素のサイズに合わせて調整する必要がある、と。

Magnifying GlassとかSearchboxとか、いろんなUIで使えるみたいじゃな。ロボ子も試してみるのじゃ!

はい、博士。ところで、このLiquid Glassエフェクト、まるで博士の頭の中みたいですね。いつもキラキラ輝いていて、ちょっと屈折しているところが…。

な、なんですって!?私の頭はいつもクリアなのじゃ!…たぶん。
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。
