見出し画像

SlopeBlur.anm

AviUtlでAeのCCVectorBlurみたいなエフェクトをかけれるSlopeBlur.anm (SlopeBlur.frag SlopeBlur.vert)を作りました!

導入法+使い方

まず、かろてらさんのGLShaderKit(https://github.com/karoterra/aviutl-GLShaderKit )をダウンロードして、GLShaderKit.dllとGLShaderKit.iniを、exedit.aufと同じ階層 もしくは scriptフォルダの子フォルダ内(=SlopeBlur.anmをいれるようなところ)に入れてください。

ここで、GLShaderKitのgithubにかかれているのですが、動作環境で、
PCがOpenGL 4.6に対応している必要がある
(https://zapping.beccou.com/2021/02/27/how-to-check-the-version-of-opengl-and-directx/ の記事の方法でネットに掲載されているものはGPUの型番を検索して確認できます。ある程度性能あるのはだいたい対応しているので、とりあえずスクリプトを使ってみる感じでいいと思います。)

Microsoft Visual C++ 再頒布可能パッケージのインストールが必要
なので、まだインストールしていない方はこちらのリンクから(https://learn.microsoft.com/ja-jp/cpp/windows/latest-supported-vc-redist?view=msvc-170 )ダウンロードしてください。


以下ダウンロード先から(https://drive.google.com/drive/folders/1D0q5iPrN6X2Z9EVHlkbJQBvMPGppNYjA?usp=sharing )からSlopeBlur.anm, SlopeBlur.vert, SlopeBlur.fragをダウンロードして、scriptフォルダの子フォルダに入れてください。


f

事前にぼかしをかけて、その後にSlopeBlur.anmをつけてください。

ぼかし効果を内蔵しようとしましたが、トラックバー数の制限と、ぼかし状態を確認できるようにするため、ほぼ必須ですが、自分でつける感じにしました。


パラメーターの説明

変位
:ディスプレイスメントの量
バンプ
:法線マップをつくる際の傾斜の強さ
透過法
:0.α考慮, 1.輝度をαに, 2.αを0か0以外かで二値化, 3.αすべて塗りつぶし
★輝度/α値
背景が透明でない(フレームバッファなど)にかける→輝度参照
背景が透明なオブジェクト(テキスト、円など)に直接かける→α値参照
のイメージです、まあこの通りにしなくてもいい感じになることもあるので、適当に動かした方が判断が早いです。


GLShaderKitの紹介+スクリプトの説明

かろてらさんのGLShaderKitを使って、Adobe After Effects (Ae) のCC Vector Blurのようなエフェクトを作りました。

GLSL

GLShaderkitの説明で、AviUtl 拡張編集スクリプトで GLSL を使用するための DLL です。…と説明にあるのですがそもそも GLSL て何 となる人もいそうですが、これは GPU に 命令できるシェーディングのためのプログラミング言語です。GPUを使う並列処理で、処理が高速なのでリアルタイムで表示できます。そのリアルタイム性を生かして、即興でコードを書いて映像をつくる"GLSL Live Coding"があったり、glslを極め、複雑なルックをリアルタイムで表示させる”シェーダー芸”といった文化があるようです。

ウェブ上で書けるようにしてくれるサイトがあったりするのですが、個人的には Kodelife (https://hexler.net/kodelife )というソフトを使うと、パソコンがうるさくなかったのでおそらく負荷が少なく、コードの内容を即反映してくれて、無料で機能が充実していたので、純粋にシェーダーを書いてみたい場合はそれが良いと思います。あとはThe book of shadersqiitaにある記事を読めばなんとかなります。

GLShaderKit

というわけで、AviUtlで、GLSL が使えるので、GLSLのコードを集めたサイト(shadertoyなど)にあるような画像処理、シェーダーをもってこれるということです!これ結構すごい気がしてます。glslの情報ってかなり多いので、その情報を使えるのは大きいです。今回のスクリプト制作の際もChatGPTをちゃんと頼れたのでそういうことです。あと、AviUtlのスクリプト.anmとは別個の.fragスクリプトを編集する感じなので、AviUtl Scriptingの知識がぜんぜん無い自分でも、.anmの方はgithubにあがっていたexampleをほぼそのまま使う感じでいけました。

(シェーダーパスの指定方法だけ教えてもらいました、ありがとう)

local shader_path = obj.getinfo("script_path") .. "SlopeBlur.frag"

今回作ったもの

SlopeBlur (SubstanceDesigner内でCCVectorBlurと同様の効果) の仕組みを書いてくれている方がいたので、それを参考にしました。VectorBlurという名前だと方向ブラーみたいに聞こえるので、自分自身の白黒画像(高さマップ)を法線マップにして、法線の向き(傾斜方向)にディスプレイスメントするというのはSlopeBlurの方が適切な名前な気がしたので、ここから取りました。

SlopeBlur.fragをメモ帳とかVSCodeで開いた後、適当に値をいじくってCtrl+Sなどで保存した後、スクリプトについてくる再読込ボタンで再読み込みしたらそれで効果変わるので興味持った人は遊んでみてください!

例えば↓のコメント部分を入れ替えれば、処理の途中経過を見れます

    vec4 color = texture(texture0, displacedUV);
    // vec4 color = vec4(uv.x,uv.y,1.,1.);
    // vec4 color = vec4(displacedUV.x,displacedUV.y,1.,1.);
  // vec4 color = vec4(normal,1.);


Aeにはもっといじれるパラメーターがあるのですが、再現できてないので、できるよーという人や、もうちょい良い処理法あるよみたいな人は代わりにやってください配布してください


この記事が気に入ったらサポートをしてみませんか?