メインコンテンツまでスキップ

PenFXと画像効果

現在のLooksカテゴリは、標準Looksではなくpenfx extensionの動的カテゴリです。起動時に組み込みpackage penfx-builtinsを登録し、外部packageはImport shaderから追加します。

組み込みpackageには59ブロックと26個のfragment programがあります。各packageは独自のラベルとブロックを追加し、set-blend-modeでPenFXの合成モードとopacityを指定できます。

組み込みブロック

色・階調

contrast
brightness
gamma
saturation
alpha
color-grade
color-blindness
color-space-adjust
tone-map
auto-exposure
palette-swap
chroma-key
color-overlay
gradation-overlay

描画・ぼかし・形状

stroke
blob
rgb-shift
gaussian-blur
directional-blur
radial-blur
lens-blur
depth-of-field
fog
lens-distortion
bloom
deep-glow
edge-detection
sharpen
fxaa
difference-of-gaussians
kuwahara
chromatic-aberration
film-grain
dither
halftone
ascii
crt
vhs
glitch
vignette

合成・変形・バッファ

composition
framing
zoom
wavy
fractalnoise
pulse
pixelate
pixel-stretch
mirror
transform
duplicate
pixel-sort
color-adjustment
displacement-map
stack-current-drawing
render-buffer-stack
clear-buffer-stack
buffer-stack-size
set-blend-mode

実行契約

PenFXの通常ブロックは、VM primitiveの観点では同期的に処理されます。packageの展開、GLSLのcompile/link、program登録などの遅い処理はrunWithoutWaitingで開始し、VM primitiveからPromiseを返しません。

PenFXがObjectsのグループ、render pass、matte、frame graph内で実行された場合は、その位置を維持したままframe graphへ収集されます。frame外で直接実行する場合も、GL stateを保存・復元して後続のScratch描画へ影響させません。

色はpremultiplied alphaを前提とします。GLSLでRGBを処理する場合は必要に応じてstraight colorへ戻し、出力時にalphaを掛け直します。

u_timeu_frameは実時間ではなくMovieタイムライン由来です。同じフレーム内では同じ値になります。

外部シェーダー

外部のPenFX shader packageは、WebGL 1のGLSL ES 1.00 fragment shaderとmanifestで構成します。任意のJavaScriptは実行されません。形式、version 2 adapter、GLSLの予約uniform、サイズ制限はPenFXシェーダーパッケージを参照してください。