• Stars
    star
    228
  • Rank 174,251 (Top 4 %)
  • Language
    C++
  • License
    MIT License
  • Created about 7 years ago
  • Updated 12 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

After Effects Plug-in enabling to use GLSL written in ISF as an effect

ISF4AE - Interactive Shader Format for After Effects




After Effects plugin to allows you to use GLSL code written in the Interactive Shader Format as an effect. In short, it's an effect that lets you build effects by yourself -- without struggling with the complicated C++ SDK.

Supported Environments

The plugin has been confirmed to work in the following environments. However, it should generally work in CC 2022 or later on any macOS:

  • CC 2023 on macOS Monterey (Apple Silicon, Intel)

Additional ISF Specification

Since ISF was originally designed for real-time purposes, such as VJing, it has some limitations that do not align with After Effects' charasteristics. This section describes how the plugin interprets ISFs and interoperates with After Effects. The following explanation assumes that you have already understood the specification of ISF.

Limitations

Currently, the plugin does not support several types of inputs, persistent buffers, or custom vertex shaders. It also has a maximum of 16 inputs (excluding "inputImage" and reserved uniforms "i4a_" as mentioned later).

Supported Input Types

Note that "event", "audio", and "audioFFT" are not yet supported currently.

  • "bool": displayed as a checkbox.
  • "long": displayed as a dropdown list.
  • "float": displayed as a slider by default. You can specify a type of UI by setting either constant below as a property "UNIT".
    • "default": just a scalar; the value will be passed as it is.
    • "length": represents a length in px. It is also displayed as a slider, but the value will be mapped from 0...<layer's width> to 0...1 when passed to a shader.
    • "percent": displayed with "%" suffix. The value will be bounded as a uniform with divided by 100. For example, 50% in the Effect Controls panel will be passed as 0.5 to the shader.
    • "direction": displayed as an angle input, and the range of value will be mapped so that radians in OpenGL coordinate (Y-up right-handed) match with a direction that the rotary knob UI is pointing. The internal conversion from AE to GLSL is equivalent to the following formula: radians(90 - value). It would be suitable for representing absolute angle that should be consistent visually between the knob UI and the output.
    • "angle": similar to the above, displayed as an angle input, but uses a conversion formula radians(-value) instead. It is suitable for representing relative angle changes -- hue offset of HSL adjustment, for instance.
  • "point2D": represents a position in px. It will be mapped to OpenGL's normalized coordinate; (0, 0) at the bottom-left corner, (1, 1) at the top-right corner of the layer.
  • "color": displayed as a color picker.
  • "image": displayed as a layer reference input.

Other Addotional Properties for Inputs

"MIN" and "MAX" only affects the range of slider UI in the Effect Controls panel and users can still set the values outside of the range. To forcibly constrain the value within the range, you can use the plugin's custom properties "CLAMP_MIN" and "CLAMP_MAX" in boolean value.

ISF Built-in Uniforms

Here is how the plugin determines the value of ISF built-in uniforms

Uniform Description
TIME When you load a shader referring to this uniform, the hidden parameters appear in the Effect Controls panel. You can use either layer time or custom value.
TIMEDELTA Always set to a value that equals to an expression thisComp.frameDuration
FRAMEINDEX Equivalent to TIME / TIMEDELTA, or TIME * fps.

ISF4AE-specific Uniforms

Inputs with names beginning with i4a_ are reserved by the plugin. When you define the inputs shown below, the plugin automatically binds values that can be useful for accessing the status of the Preview panel from a shader.

Name ISF Type Description
"i4a_Downsample" point2D Downsampling factor in Preview panel. For instance, the value is set to (0.5, 0.5) in half resolution.
"i4a_CustomUI" bool Set to true when the effect requests an image for Custom Comp UI, which is only visible when you click and focus the effect title in the Timeline / Effect Controls panels. The pass returned by a shader will be overlayed onto the result layer.
NOTE: you cannot refer to any image inputs on this pass.
"i4a_UIForegroundColor"
"i4a_UIShadowColor"
bool For referring to After Effects' current color scheme to draw Custom Comp UI. Only available when i4a_CustomUI is true.
"i4a_UIShadowOffset" point2D Same as above. Unlike user-defined inputs, the range of value is not normalized and will be passed in absolute px.
"i4a_UIStrokeWidth"
"i4a_UIVertexSize"
float Same as above. Passed in px.

How to Build

  1. Download After Effects Plug-in SDK 2022 Mac - Oct 2021.

  2. Clone this repository, including its submodule, by following the steps below:

# At the root folder of SDK
cd Examples/Effect
git clone https://github.com/baku89/ISF4AE.git
cd ISF4AE
git submodule update --init
  1. Open the Xcode project and build it. The binary will automatically be copied under /Library/Application Support/Adobe/Common/Plug-ins/7.0/MediaCore/.

License

This plugin has been published under an MIT License. See the included LICENSE file.

Similar Projects

  • PixelsWorld: Scripting environment supporting Lua, GLSL, and shadertoy.com.
  • Pixel Blender Accelator: A plugin to run Pixel Blender, a shader format supported in Adobe products previously, in modern versions of AE.
  • AE-GLSL: Working-in-progress repository by cryo9, which hinted me how to interoperate OpenGL and After Effects SDK.
  • AE_tl_math: an plugin project which allows users to write math expression for each pixels, or GLSL shaders. It also bundles a nice pane to edit and update code in realtime.

Acknowledgments

  • mizt: One of the visual artists having an ability to buidl a plugin for After Effects. We've traded lots of tips on AESDK.
  • 0b5vr: He also gave me many advices for handling OpenGL.
  • Patricio Gonzalez Vivo: One of my reason for being hooked on shaders is his cool project The Book of Shaders. This plugin once aimed to support the format of its editor.

More Repositories

1

glisp

Glisp is a Lisp-based design tool that combines generative approaches with traditional design methods, empowering artists to discover new forms of expression.
TypeScript
986
star
2

pentool

Vector graphics editor with programmable pen tools
JavaScript
311
star
3

ThePerfectInsiderED

tools for "Subete ga F ni naru" Ending
Processing
254
star
4

VirtualMapper

A realtime preview tool for projection mapping
C++
228
star
5

ui-study

Parameters UI Study
JavaScript
220
star
6

tethr

JavaScript/TypeScript library built on top of WebUSB for controlling digital cameras from browsers.
TypeScript
102
star
7

nops

Digital Assets to supplement non-procedural features of Houdini
Python
88
star
8

pave

A environment-agnostic toolkit for manipulating SVG/Path2D curves
TypeScript
62
star
9

kindolphin

JavaScript
57
star
10

group_inou-EYE

tool for making group_inou "EYE"
JavaScript
56
star
11

bndr-js

A monadic library for composing and filtering various types of user inputs to generate event handling
TypeScript
47
star
12

GLSLRenderer

GLSL renderer for video production
C++
41
star
13

4DVJ

JavaScript
38
star
14

koma

Vue
35
star
15

imai-fly

Tools for the video "imai - Fly feat. 79, Kaho Nakamura"
C++
21
star
16

feedback-displacement

Making mind-bending images using feedback pixel displacement
JavaScript
19
star
17

FeedbackDisplacement

JavaScript
17
star
18

glisp-lang

TypeScript
15
star
19

BKFX

C++
13
star
20

BKISF

GLSL
12
star
21

houdini-viewport-projection-shader

A custom viewport shader supporting various types of texture projections
GLSL
12
star
22

ofxAEKeyframe

An addon encodes oF animations into After Effects's keyframe data.
C++
10
star
23

ATA

Tools for "Olga Bell - ATA"
GLSL
8
star
24

bk_AEScripts

My ExtendScript for After Effects
JavaScript
8
star
25

jssst40-tuts

JavaScript
8
star
26

depthcope-tools

Shooting system for 'depthcope'
C++
8
star
27

houdini-scripts

Miscellaneous scripts for Houdini
Python
8
star
28

dragonframe-osc

An integration of Dragonframe and OSC
JavaScript
7
star
29

linearly

A collection of utility functions that relates to linear algebra and graphics programming.
TypeScript
7
star
30

ae-keyframes

TypeScript
6
star
31

wordle-solver

TypeScript
4
star
32

GrayScottGenerator

generates a turing pattern with gray-scott model and export an image sequence
C++
4
star
33

unim

TypeScript
3
star
34

p5-study

p5 sketches written at interactive coding workshop
Processing
3
star
35

monkey-ts

TypeScript implementation of Monkey to study programming language design, which I thought might be helpful for my Glisp project.
TypeScript
3
star
36

tweeq

Vue
2
star
37

inertial-easing

JavaScript
2
star
38

philadelphia

C
2
star
39

PXCA

WebGL cellular automaton demo
JavaScript
2
star
40

miniml-ts

TypeScript implementation of MiniML to study programming language design, which I thought might be helpful for my Glisp project.
TypeScript
2
star
41

Fuse

JavaScript
1
star
42

computational-diary

JavaScript
1
star
43

KF

JavaScript
1
star
44

urigagarn-for

All source codes of http://urigagarn.jp/for
HTML
1
star
45

BLNK_OFFICE

JavaScript
1
star
46

recursive-christmas-tree

For Christmas XP 2016
JavaScript
1
star