スクリプト

Liquid Glass エフェクト

概要

Liquid Glassの質感を再現するエフェクトスクリプトです

詳細説明

概要

任意の図形にアニメーション効果としてこのスクリプトを適応することで、その図形をリキッドグラス風の物体に変化させることが可能です。


仕組み

図形のアルファ値からマスクとして図形の形をとり、背景をそのまま描画します。マスクに一様カーネル(ボックスぼかしと同じ原理です)をかけることで、ベゼルを形成します。(ガウスぼかしを使わないのは、S字になって距離に比例しないためです)

距離から、ガラス断面の高さを円弧で計算し、疑似的に再現します。
距離をxとするとき、計算式は 1 - sqrt(1 - (1 - x)**2) です。
そして、距離場の勾配から曲がる向きを決定します。勾配は輪郭に対して常に垂直であるため、反転すれば外向きの法線として使えます。円ならば中心からの放射方向と一致し、円以外の形状ならばその点の面の向きとなります。
ずらした一から背景を拾うとき、RGBでずらす量を少しずつ変えることで色収差(縁付近の色ずれ)を作ることができます。

なお、勾配の大きさは減衰にも使用しています。形をつぶして上下のベゼルがぶつかると勾配が消えてしまうので、これを描けることで継ぎ目がなめらかになります。薄いガラスほど屈折しない現実の物理学とも一致していますね。

最後にフレームバッファに直接αブレンドし、通常の描画を止めます。こうすることでこのスクリプトが実現しています。やったね。


導入方法

AviUtl2のデータファイル(一般的にはProgramData/aviutl2に存在します)の、ScriptフォルダにLiquidGlass.anm2を入れてください。


使用方法

適応したい図形に、アニメーション効果としてLiquidGlassを追加します


各パラメータの意味

項目 最小 最大 初期値 移動単位 内部値 意味
ベゼル幅 0 100 70 0.01 値/1000 → 0.070 輪郭から内側へどこまでを「縁」とするか。画面の高さが1.0の単位なので、1080pで約76pxです。
厚み 0 50 20 0.01 値/1000 → 0.020 ガラスの厚み。屈折量の係数です。
歪み 0 500 350 0.01 値/1000 → 0.350 屈折の強さ。厚みと掛け算されます。
色収差 0 100 100 0.01 値/1000 → 0.100 R と B のずらし量を G に対して どれだけ割合を変えるか。縁に色ずれが発生します。
ハイライト 0 200 0 0.01 値/1000 → 0.0 縁の傾斜が急な部分に加算する白の量。200 = 白を全量加算します。
距離場を確認 - - オフ - - デバッグ表示です。ぼかされたマスクをそのまま画面に出します。

作者(もし何か不具合があればの問い合わせ先)

X: https://x.com/tettu0530
Discord: tettu0530