diff --git a/GLSL/Effect/y_flicker_GL/README.md b/GLSL/Effect/y_flicker_GL/README.md new file mode 100644 index 0000000..956e84f --- /dev/null +++ b/GLSL/Effect/y_flicker_GL/README.md @@ -0,0 +1,4 @@ +# y_flicker_GL + +If Remove: The 2nd input should be a locked frame frome the same clip as the 1st input. The locked frame should be at levels where you'd like to land the flicker free image. The Result is hopefully a flicker free front. +If Match: The 2nd input should be a clip you'd like apply the same flicker to, that already exists in input 1. The Result is a flickered Input 2. diff --git a/GLSL/Effect/y_flicker_GL/y_flicker_GL.png b/GLSL/Effect/y_flicker_GL/y_flicker_GL.png new file mode 100644 index 0000000..4bc4e8d Binary files /dev/null and b/GLSL/Effect/y_flicker_GL/y_flicker_GL.png differ diff --git a/GLSL/Effect/y_flicker_GL/y_flicker_GL.py b/GLSL/Effect/y_flicker_GL/y_flicker_GL.py new file mode 100644 index 0000000..442f0da --- /dev/null +++ b/GLSL/Effect/y_flicker_GL/y_flicker_GL.py @@ -0,0 +1,710 @@ +# -*- coding: utf-8 -*- +# DO NOT EDIT THIS FILE +# This file was automatically generated by Natron PyPlug exporter version 10. + +# Hand-written code should be added in a separate file named y_flicker_GLExt.py +# See http://natron.readthedocs.org/en/master/devel/groups.html#adding-hand-written-code-callbacks-etc +# Note that Viewers are never exported + +import NatronEngine +import sys + +# Try to import the extensions file where callbacks and hand-written code should be located. +try: + from y_flicker_GLExt import * +except ImportError: + pass + +def getPluginID(): + return "natron.community.plugins.y_flicker_GL" + +def getLabel(): + return "y_flicker_GL" + +def getVersion(): + return 1 + +def getIconPath(): + return "y_flicker_GL.png" + +def getGrouping(): + return "Community/GLSL/Effect" + +def createInstance(app,group): + # Create all nodes in the group + + # Create the parameters of the group node the same way we did for all internal nodes + lastNode = group + lastNode.setColor(1, 0.5765, 0.3333) + + # Create the user parameters + lastNode.Controls = lastNode.createPageParam("Controls", "Controls") + param = lastNode.createStringParam("sep01", "") + param.setType(NatronEngine.StringParam.TypeEnum.eStringTypeLabel) + + # Add the param to the page + lastNode.Controls.addParam(param) + + # Set param properties + param.setHelp("") + param.setAddNewLine(True) + param.setEvaluateOnChange(False) + param.setAnimationEnabled(False) + lastNode.sep01 = param + del param + + param = lastNode.createStringParam("sep02", "") + param.setType(NatronEngine.StringParam.TypeEnum.eStringTypeLabel) + + # Add the param to the page + lastNode.Controls.addParam(param) + + # Set param properties + param.setHelp("") + param.setAddNewLine(True) + param.setEvaluateOnChange(False) + param.setAnimationEnabled(False) + lastNode.sep02 = param + del param + + param = lastNode.createSeparatorParam("SETUP", "Setup") + + # Add the param to the page + lastNode.Controls.addParam(param) + + # Set param properties + param.setHelp("") + param.setAddNewLine(True) + param.setPersistent(False) + param.setEvaluateOnChange(False) + lastNode.SETUP = param + del param + + param = lastNode.createStringParam("sep03", "") + param.setType(NatronEngine.StringParam.TypeEnum.eStringTypeLabel) + + # Add the param to the page + lastNode.Controls.addParam(param) + + # Set param properties + param.setHelp("") + param.setAddNewLine(True) + param.setEvaluateOnChange(False) + param.setAnimationEnabled(False) + lastNode.sep03 = param + del param + + param = lastNode.createStringParam("sep04", "") + param.setType(NatronEngine.StringParam.TypeEnum.eStringTypeLabel) + + # Add the param to the page + lastNode.Controls.addParam(param) + + # Set param properties + param.setHelp("") + param.setAddNewLine(True) + param.setEvaluateOnChange(False) + param.setAnimationEnabled(False) + lastNode.sep04 = param + del param + + param = lastNode.createChoiceParam("opChoice", "Operation : ") + entries = [ ("Remove", ""), + ("Match", "")] + param.setOptions(entries) + del entries + + # Add the param to the page + lastNode.Controls.addParam(param) + + # Set param properties + param.setHelp("Try and match the chroma as well as luma.") + param.setAddNewLine(True) + param.setAnimationEnabled(True) + lastNode.opChoice = param + del param + + param = lastNode.createStringParam("sep05", "") + param.setType(NatronEngine.StringParam.TypeEnum.eStringTypeLabel) + + # Add the param to the page + lastNode.Controls.addParam(param) + + # Set param properties + param.setHelp("") + param.setAddNewLine(True) + param.setEvaluateOnChange(False) + param.setAnimationEnabled(False) + lastNode.sep05 = param + del param + + param = lastNode.createStringParam("sep06", "") + param.setType(NatronEngine.StringParam.TypeEnum.eStringTypeLabel) + + # Add the param to the page + lastNode.Controls.addParam(param) + + # Set param properties + param.setHelp("") + param.setAddNewLine(True) + param.setEvaluateOnChange(False) + param.setAnimationEnabled(False) + lastNode.sep06 = param + del param + + param = lastNode.createStringParam("sep07", "") + param.setType(NatronEngine.StringParam.TypeEnum.eStringTypeLabel) + + # Add the param to the page + lastNode.Controls.addParam(param) + + # Set param properties + param.setHelp("") + param.setAddNewLine(True) + param.setEvaluateOnChange(False) + param.setAnimationEnabled(False) + lastNode.sep07 = param + del param + + param = lastNode.createStringParam("sep08", "") + param.setType(NatronEngine.StringParam.TypeEnum.eStringTypeLabel) + + # Add the param to the page + lastNode.Controls.addParam(param) + + # Set param properties + param.setHelp("") + param.setAddNewLine(True) + param.setEvaluateOnChange(False) + param.setAnimationEnabled(False) + lastNode.sep08 = param + del param + + param = lastNode.createDoubleParam("Shadertoy1paramValueFloat0", "Average : ") + param.setMinimum(0, 0) + param.setMaximum(10, 0) + param.setDisplayMinimum(0, 0) + param.setDisplayMaximum(10, 0) + param.setDefaultValue(10, 0) + param.restoreDefaultValue(0) + + # Add the param to the page + lastNode.Controls.addParam(param) + + # Set param properties + param.setAddNewLine(True) + param.setAnimationEnabled(True) + lastNode.Shadertoy1paramValueFloat0 = param + del param + + param = lastNode.createStringParam("sep09", "") + param.setType(NatronEngine.StringParam.TypeEnum.eStringTypeLabel) + + # Add the param to the page + lastNode.Controls.addParam(param) + + # Set param properties + param.setHelp("") + param.setAddNewLine(True) + param.setEvaluateOnChange(False) + param.setAnimationEnabled(False) + lastNode.sep09 = param + del param + + param = lastNode.createStringParam("sep10", "") + param.setType(NatronEngine.StringParam.TypeEnum.eStringTypeLabel) + + # Add the param to the page + lastNode.Controls.addParam(param) + + # Set param properties + param.setHelp("") + param.setAddNewLine(True) + param.setEvaluateOnChange(False) + param.setAnimationEnabled(False) + lastNode.sep10 = param + del param + + param = lastNode.createBooleanParam("Shadertoy1paramValueBool2", "Match Chroma : ") + + # Add the param to the page + lastNode.Controls.addParam(param) + + # Set param properties + param.setAddNewLine(True) + param.setAnimationEnabled(True) + lastNode.Shadertoy1paramValueBool2 = param + del param + + param = lastNode.createStringParam("sep11", "") + param.setType(NatronEngine.StringParam.TypeEnum.eStringTypeLabel) + + # Add the param to the page + lastNode.Controls.addParam(param) + + # Set param properties + param.setHelp("") + param.setAddNewLine(True) + param.setEvaluateOnChange(False) + param.setAnimationEnabled(False) + lastNode.sep11 = param + del param + + param = lastNode.createStringParam("sep12", "") + param.setType(NatronEngine.StringParam.TypeEnum.eStringTypeLabel) + + # Add the param to the page + lastNode.Controls.addParam(param) + + # Set param properties + param.setHelp("") + param.setAddNewLine(True) + param.setEvaluateOnChange(False) + param.setAnimationEnabled(False) + lastNode.sep12 = param + del param + + lastNode.Credits = lastNode.createPageParam("Credits", "Credits") + param = lastNode.createStringParam("sep101", "") + param.setType(NatronEngine.StringParam.TypeEnum.eStringTypeLabel) + + # Add the param to the page + lastNode.Credits.addParam(param) + + # Set param properties + param.setHelp("") + param.setAddNewLine(True) + param.setEvaluateOnChange(False) + param.setAnimationEnabled(False) + lastNode.sep101 = param + del param + + param = lastNode.createStringParam("sep102", "") + param.setType(NatronEngine.StringParam.TypeEnum.eStringTypeLabel) + + # Add the param to the page + lastNode.Credits.addParam(param) + + # Set param properties + param.setHelp("") + param.setAddNewLine(True) + param.setEvaluateOnChange(False) + param.setAnimationEnabled(False) + lastNode.sep102 = param + del param + + param = lastNode.createSeparatorParam("NAME", "y_flicker_GL v1.0") + + # Add the param to the page + lastNode.Credits.addParam(param) + + # Set param properties + param.setHelp("") + param.setAddNewLine(True) + param.setPersistent(False) + param.setEvaluateOnChange(False) + lastNode.NAME = param + del param + + param = lastNode.createStringParam("sep103", "") + param.setType(NatronEngine.StringParam.TypeEnum.eStringTypeLabel) + + # Add the param to the page + lastNode.Credits.addParam(param) + + # Set param properties + param.setHelp("") + param.setAddNewLine(True) + param.setEvaluateOnChange(False) + param.setAnimationEnabled(False) + lastNode.sep103 = param + del param + + param = lastNode.createStringParam("sep104", "") + param.setType(NatronEngine.StringParam.TypeEnum.eStringTypeLabel) + + # Add the param to the page + lastNode.Credits.addParam(param) + + # Set param properties + param.setHelp("") + param.setAddNewLine(True) + param.setEvaluateOnChange(False) + param.setAnimationEnabled(False) + lastNode.sep104 = param + del param + + param = lastNode.createSeparatorParam("LINE103", "") + + # Add the param to the page + lastNode.Credits.addParam(param) + + # Set param properties + param.setHelp("") + param.setAddNewLine(True) + param.setPersistent(False) + param.setEvaluateOnChange(False) + lastNode.LINE103 = param + del param + + param = lastNode.createStringParam("sep105", "") + param.setType(NatronEngine.StringParam.TypeEnum.eStringTypeLabel) + + # Add the param to the page + lastNode.Credits.addParam(param) + + # Set param properties + param.setHelp("") + param.setAddNewLine(True) + param.setEvaluateOnChange(False) + param.setAnimationEnabled(False) + lastNode.sep105 = param + del param + + param = lastNode.createStringParam("sep106", "") + param.setType(NatronEngine.StringParam.TypeEnum.eStringTypeLabel) + + # Add the param to the page + lastNode.Credits.addParam(param) + + # Set param properties + param.setHelp("") + param.setAddNewLine(True) + param.setEvaluateOnChange(False) + param.setAnimationEnabled(False) + lastNode.sep106 = param + del param + + param = lastNode.createSeparatorParam("FR", "ShaderToy 0.8.8") + + # Add the param to the page + lastNode.Credits.addParam(param) + + # Set param properties + param.setHelp("") + param.setAddNewLine(True) + param.setPersistent(False) + param.setEvaluateOnChange(False) + lastNode.FR = param + del param + + param = lastNode.createStringParam("sep107", "") + param.setType(NatronEngine.StringParam.TypeEnum.eStringTypeLabel) + + # Add the param to the page + lastNode.Credits.addParam(param) + + # Set param properties + param.setHelp("") + param.setAddNewLine(True) + param.setEvaluateOnChange(False) + param.setAnimationEnabled(False) + lastNode.sep107 = param + del param + + param = lastNode.createStringParam("sep108", "") + param.setType(NatronEngine.StringParam.TypeEnum.eStringTypeLabel) + + # Add the param to the page + lastNode.Credits.addParam(param) + + # Set param properties + param.setHelp("") + param.setAddNewLine(True) + param.setEvaluateOnChange(False) + param.setAnimationEnabled(False) + lastNode.sep108 = param + del param + + param = lastNode.createSeparatorParam("CONVERSION", " (Fabrice Fernandez - 2018)") + + # Add the param to the page + lastNode.Credits.addParam(param) + + # Set param properties + param.setHelp("") + param.setAddNewLine(True) + param.setPersistent(False) + param.setEvaluateOnChange(False) + lastNode.CONVERSION = param + del param + + param = lastNode.createStringParam("sep109", "") + param.setType(NatronEngine.StringParam.TypeEnum.eStringTypeLabel) + + # Add the param to the page + lastNode.Credits.addParam(param) + + # Set param properties + param.setHelp("") + param.setAddNewLine(True) + param.setEvaluateOnChange(False) + param.setAnimationEnabled(False) + lastNode.sep109 = param + del param + + param = lastNode.createStringParam("sep110", "") + param.setType(NatronEngine.StringParam.TypeEnum.eStringTypeLabel) + + # Add the param to the page + lastNode.Credits.addParam(param) + + # Set param properties + param.setHelp("") + param.setAddNewLine(True) + param.setEvaluateOnChange(False) + param.setAnimationEnabled(False) + lastNode.sep110 = param + del param + + # Refresh the GUI with the newly created parameters + lastNode.setPagesOrder(['Controls', 'Credits', 'Node', 'Settings']) + lastNode.refreshUserParamsGUI() + del lastNode + + # Start of node "Output1" + lastNode = app.createNode("fr.inria.built-in.Output", 1, group) + lastNode.setLabel("Output2") + lastNode.setPosition(4992, 5275) + lastNode.setSize(80, 30) + lastNode.setColor(0.7, 0.7, 0.7) + groupOutput1 = lastNode + + del lastNode + # End of node "Output1" + + # Start of node "Source" + lastNode = app.createNode("fr.inria.built-in.Input", 1, group) + lastNode.setScriptName("Source") + lastNode.setLabel("Source") + lastNode.setPosition(4992, 4606) + lastNode.setSize(80, 30) + lastNode.setColor(1, 1, 1) + groupSource = lastNode + + del lastNode + # End of node "Source" + + # Start of node "Shadertoy1" + lastNode = app.createNode("net.sf.openfx.Shadertoy", 1, group) + lastNode.setScriptName("Shadertoy1") + lastNode.setLabel("Shadertoy1") + lastNode.setPosition(4992, 4896) + lastNode.setSize(80, 32) + lastNode.setColor(0.3, 0.5, 0.2) + groupShadertoy1 = lastNode + + param = lastNode.getParam("paramValueFloat0") + if param is not None: + param.setValue(10, 0) + del param + + param = lastNode.getParam("paramValueInt1") + if param is not None: + param.setValue(0, 0) + del param + + param = lastNode.getParam("paramValueBool2") + if param is not None: + param.setValue(False) + del param + + param = lastNode.getParam("imageShaderSource") + if param is not None: + param.setValue("//\n//\n// MMMMMMMMMMMMMMMMMMMMMMMMMMMM\n// MM. .MM\n// MM. .MMMMMMMMMMMMMMMMMMMMMM. .MM\n// MM. .MMMMMMMMMMMMMMMMMMMMMMMM. .MM\n// MM. .MMMM MMMMMMM MMM. .MM\n// MM. .MMM MMMMMM MMM. .MM\n// MM. .MmM MMMM MMM. .MM\n// MM. .MMM MM MMM. .MM\n// MM. .MMM M MMM. .MM\n// MM. .MMM MMM. .MM\n// MM. .MMM MMM. .MM\n// MM. .MMM M MMM. .MM\n// MM. .MMM MM MMM. .MM\n// MM. .MMM MMM MMM. .MM\n// MM. .MMM MMMM MMM. .MM\n// MM. .MMMMMMMMMMMMMMMMMMMMMMMM. .MM\n// MM. .MMMMMMMMMMMMMMMMMMMMMM. .MM\n// MM. .MM\n// MMMMMMMMMMMMMMMMMMMMMMMMMMMM\n//\n//\n//\n//\n// Adaptation pour Natron par F. Fernandez\n// Code original : y_flicker pour Autodesk Flame\n\n// Adapted to Natron by F.Fernandez\n// Original code : y_flicker for Autodesk Flame\n\n\n// iChannel0: Source,filter=linear,wrap=clamp\n// iChannel1: LockFrame,filter=linear,wrap=clamp\n// BBox: iChannel0\n\n\n#extension GL_ARB_shader_texture_lod : enable\n\nfloat adsk_getLuminance( vec3 rgb )\n{\n // Algorithm from Chapter 10 of Graphics Shaders.\n const vec3 W = vec3(0.2125, 0.7154, 0.0721);\n return dot(rgb, W);\n}\n\n\nvec2 res = vec2(iResolution.x, iResolution.y);\n\n\nuniform float lod = 10.0; // Average : (Level of detail. Higher is lower and usually what you want.), min=0.0, max=10.0\nuniform int operation = 0; // Operation : (Choose to remove flicker from input 1, or copy the flicker of input 1 to input 2.), min=0, max=1\nuniform bool match_chroma = false; // Match Chroma : (Try and match the chroma as well as luma.)\n\n\nvoid mainImage( out vec4 fragColor, in vec2 fragCoord )\n{\n\tvec2 st = fragCoord.xy / res;\n\n\tvec3 front = vec3(0.0);\n\tvec3 front_avg = texture2DLod(iChannel0, st, lod).rgb;\n\tvec3 lock_frame = texture2DLod(iChannel1, st, lod).rgb;\n\n\tvec3 new_gain = vec3(0.0);\n\n\tif (operation == 1) {\n\t\tif (lock_frame.r != 0.0) {\n\t\t\tnew_gain.r = front_avg.r / lock_frame.r;\n\t\t}\n\t\tif (lock_frame.g != 0.0) {\n\t\t\tnew_gain.g = front_avg.r / lock_frame.g;\n\t\t}\n\t\tif (lock_frame.b != 0.0) {\n\t\t\tnew_gain.b = front_avg.b / lock_frame.b;\n\t\t}\n\t\tfront = texture2D(iChannel1, st).rgb;\n\t} else {\n\t\tnew_gain = lock_frame / max(front_avg, vec3(.00001));\n\n\t\tif (front_avg.r != 0.0) {\n\t\t\tnew_gain.r = lock_frame.r / front_avg.r;\n\t\t}\n\t\tif (front_avg.g != 0.0) {\n\t\t\tnew_gain.g = lock_frame.r / front_avg.g;\n\t\t}\n\t\tif (front_avg.b != 0.0) {\n\t\t\tnew_gain.b = lock_frame.b / front_avg.b;\n\t\t}\n\n\t\tfront = texture2D(iChannel0, st).rgb;\n\t}\n\n\tnew_gain = clamp(new_gain, -5.0, 5.0);\n\n\tfloat gdif = adsk_getLuminance(new_gain.rgb);\n\n\tif (match_chroma) {\n\t\tfront *= new_gain;\n\t} else {\n\t\tfront *= gdif;\n\t}\n\n\tfragColor.rgb = front;\n}\n") + del param + + param = lastNode.getParam("mipmap0") + if param is not None: + param.set("linear") + del param + + param = lastNode.getParam("wrap0") + if param is not None: + param.set("clamp") + del param + + param = lastNode.getParam("inputLabel0") + if param is not None: + param.setValue("Source") + del param + + param = lastNode.getParam("mipmap1") + if param is not None: + param.set("linear") + del param + + param = lastNode.getParam("wrap1") + if param is not None: + param.set("clamp") + del param + + param = lastNode.getParam("inputLabel1") + if param is not None: + param.setValue("LockFrame") + del param + + param = lastNode.getParam("inputEnable2") + if param is not None: + param.setValue(False) + del param + + param = lastNode.getParam("inputEnable3") + if param is not None: + param.setValue(False) + del param + + param = lastNode.getParam("bbox") + if param is not None: + param.set("iChannel0") + del param + + param = lastNode.getParam("NatronParamFormatChoice") + if param is not None: + param.set("PC_Video") + del param + + param = lastNode.getParam("mouseParams") + if param is not None: + param.setValue(False) + del param + + param = lastNode.getParam("paramCount") + if param is not None: + param.setValue(3, 0) + del param + + param = lastNode.getParam("paramType0") + if param is not None: + param.set("float") + del param + + param = lastNode.getParam("paramName0") + if param is not None: + param.setValue("lod") + del param + + param = lastNode.getParam("paramLabel0") + if param is not None: + param.setValue("Average :") + del param + + param = lastNode.getParam("paramHint0") + if param is not None: + param.setValue("Level of detail. Higher is lower and usually what you want.") + del param + + param = lastNode.getParam("paramDefaultFloat0") + if param is not None: + param.setValue(10, 0) + del param + + param = lastNode.getParam("paramMinFloat0") + if param is not None: + param.setValue(0, 0) + del param + + param = lastNode.getParam("paramMaxFloat0") + if param is not None: + param.setValue(10, 0) + del param + + param = lastNode.getParam("paramType1") + if param is not None: + param.set("int") + del param + + param = lastNode.getParam("paramName1") + if param is not None: + param.setValue("operation") + del param + + param = lastNode.getParam("paramLabel1") + if param is not None: + param.setValue("Operation :") + del param + + param = lastNode.getParam("paramHint1") + if param is not None: + param.setValue("Choose to remove flicker from input 1, or copy the flicker of input 1 to input 2.") + del param + + param = lastNode.getParam("paramMinInt1") + if param is not None: + param.setValue(0, 0) + del param + + param = lastNode.getParam("paramMaxInt1") + if param is not None: + param.setValue(1, 0) + del param + + param = lastNode.getParam("paramType2") + if param is not None: + param.set("bool") + del param + + param = lastNode.getParam("paramName2") + if param is not None: + param.setValue("match_chroma") + del param + + param = lastNode.getParam("paramLabel2") + if param is not None: + param.setValue("Match Chroma :") + del param + + param = lastNode.getParam("paramHint2") + if param is not None: + param.setValue("Try and match the chroma as well as luma.") + del param + + del lastNode + # End of node "Shadertoy1" + + # Start of node "Lock_Frame" + lastNode = app.createNode("fr.inria.built-in.Input", 1, group) + lastNode.setScriptName("Lock_Frame") + lastNode.setLabel("Lock Frame") + lastNode.setPosition(5149, 4609) + lastNode.setSize(80, 32) + lastNode.setColor(1, 1, 1) + groupLock_Frame = lastNode + + del lastNode + # End of node "Lock_Frame" + + # Start of node "Dot1" + lastNode = app.createNode("fr.inria.built-in.Dot", 1, group) + lastNode.setScriptName("Dot1") + lastNode.setLabel("Dot1") + lastNode.setPosition(5182, 4905) + lastNode.setSize(15, 15) + lastNode.setColor(0.7, 0.7, 0.7) + groupDot1 = lastNode + + del lastNode + # End of node "Dot1" + + # Now that all nodes are created we can connect them together, restore expressions + groupOutput1.connectInput(0, groupShadertoy1) + groupShadertoy1.connectInput(0, groupSource) + groupShadertoy1.connectInput(1, groupDot1) + groupDot1.connectInput(0, groupLock_Frame) + + param = groupShadertoy1.getParam("paramValueFloat0") + group.getParam("Shadertoy1paramValueFloat0").setAsAlias(param) + del param + param = groupShadertoy1.getParam("paramValueInt1") + param.setExpression("thisGroup.opChoice.get()", False, 0) + del param + param = groupShadertoy1.getParam("paramValueBool2") + group.getParam("Shadertoy1paramValueBool2").setAsAlias(param) + del param + + try: + extModule = sys.modules["y_flicker_GLExt"] + except KeyError: + extModule = None + if extModule is not None and hasattr(extModule ,"createInstanceExt") and hasattr(extModule.createInstanceExt,"__call__"): + extModule.createInstanceExt(app,group) diff --git a/GLSL/Effect/y_flicker_GL/y_flicker_GL.xml b/GLSL/Effect/y_flicker_GL/y_flicker_GL.xml new file mode 100644 index 0000000..9cd7a80 --- /dev/null +++ b/GLSL/Effect/y_flicker_GL/y_flicker_GL.xml @@ -0,0 +1,10 @@ + + + y_flicker_GL + If Remove: The 2nd input should be a locked frame frome the same clip as the 1st input. The locked frame should be at levels where you'd like to land the flicker free image. The Result is hopefully a flicker free front. If Match: The 2nd input should be a clip you'd like apply the same flicker to, that already exists in input 1. The Result is a flickered Input 2. + 1.0 + @DATE@ + natron.community.plugins.y_flicker_GL + script + + diff --git a/GLSL/Effect/y_ixform_GL/README.md b/GLSL/Effect/y_ixform_GL/README.md new file mode 100644 index 0000000..66e3cd3 --- /dev/null +++ b/GLSL/Effect/y_ixform_GL/README.md @@ -0,0 +1,3 @@ +# y_ixform_GL + +Transform a thing. This is only cool if you input the optional black and white strength channel. The transormation will be multiplied by the value of the strength channel. diff --git a/GLSL/Effect/y_ixform_GL/y_ixform_GL.png b/GLSL/Effect/y_ixform_GL/y_ixform_GL.png new file mode 100644 index 0000000..4bc4e8d Binary files /dev/null and b/GLSL/Effect/y_ixform_GL/y_ixform_GL.png differ diff --git a/GLSL/Effect/y_ixform_GL/y_ixform_GL.py b/GLSL/Effect/y_ixform_GL/y_ixform_GL.py new file mode 100644 index 0000000..27254a2 --- /dev/null +++ b/GLSL/Effect/y_ixform_GL/y_ixform_GL.py @@ -0,0 +1,1384 @@ +# -*- coding: utf-8 -*- +# DO NOT EDIT THIS FILE +# This file was automatically generated by Natron PyPlug exporter version 10. + +# Hand-written code should be added in a separate file named y_ixform_GLExt.py +# See http://natron.readthedocs.org/en/master/devel/groups.html#adding-hand-written-code-callbacks-etc +# Note that Viewers are never exported + +import NatronEngine +import sys + +# Try to import the extensions file where callbacks and hand-written code should be located. +try: + from y_ixform_GLExt import * +except ImportError: + pass + +def getPluginID(): + return "natron.community.plugins.y_ixform_GL" + +def getLabel(): + return "y_ixform_GL" + +def getVersion(): + return 1.0 + +def getIconPath(): + return "y_ixform_GL.png" + +def getGrouping(): + return "Community/GLSL/Effect" + +def getPluginDescription(): + return "Transform a thing. This is only cool if you input the optional black and white strength channel. The transormation will be multiplied by the value of the strength channel." + +def createInstance(app,group): + # Create all nodes in the group + + # Create the parameters of the group node the same way we did for all internal nodes + lastNode = group + lastNode.setColor(1, 0.698, 0.8314) + + # Create the user parameters + lastNode.Controls = lastNode.createPageParam("Controls", "Controls") + param = lastNode.createStringParam("sep01", "") + param.setType(NatronEngine.StringParam.TypeEnum.eStringTypeLabel) + + # Add the param to the page + lastNode.Controls.addParam(param) + + # Set param properties + param.setHelp("") + param.setAddNewLine(True) + param.setEvaluateOnChange(False) + param.setAnimationEnabled(False) + lastNode.sep01 = param + del param + + param = lastNode.createStringParam("sep02", "") + param.setType(NatronEngine.StringParam.TypeEnum.eStringTypeLabel) + + # Add the param to the page + lastNode.Controls.addParam(param) + + # Set param properties + param.setHelp("") + param.setAddNewLine(True) + param.setEvaluateOnChange(False) + param.setAnimationEnabled(False) + lastNode.sep02 = param + del param + + param = lastNode.createSeparatorParam("TRANSFORM", "Transform") + + # Add the param to the page + lastNode.Controls.addParam(param) + + # Set param properties + param.setHelp("") + param.setAddNewLine(True) + param.setPersistent(False) + param.setEvaluateOnChange(False) + lastNode.TRANSFORM = param + del param + + param = lastNode.createStringParam("sep03", "") + param.setType(NatronEngine.StringParam.TypeEnum.eStringTypeLabel) + + # Add the param to the page + lastNode.Controls.addParam(param) + + # Set param properties + param.setHelp("") + param.setAddNewLine(True) + param.setEvaluateOnChange(False) + param.setAnimationEnabled(False) + lastNode.sep03 = param + del param + + param = lastNode.createStringParam("sep04", "") + param.setType(NatronEngine.StringParam.TypeEnum.eStringTypeLabel) + + # Add the param to the page + lastNode.Controls.addParam(param) + + # Set param properties + param.setHelp("") + param.setAddNewLine(True) + param.setEvaluateOnChange(False) + param.setAnimationEnabled(False) + lastNode.sep04 = param + del param + + param = lastNode.createDoubleParam("Shadertoy1_2paramValueFloat0", "Position X : ") + param.setDisplayMinimum(-2048, 0) + param.setDisplayMaximum(2048, 0) + + # Add the param to the page + lastNode.Controls.addParam(param) + + # Set param properties + param.setAddNewLine(True) + param.setAnimationEnabled(True) + lastNode.Shadertoy1_2paramValueFloat0 = param + del param + + param = lastNode.createDoubleParam("Shadertoy1_2paramValueFloat1", "Position Y : ") + param.setDisplayMinimum(-2048, 0) + param.setDisplayMaximum(2048, 0) + + # Add the param to the page + lastNode.Controls.addParam(param) + + # Set param properties + param.setAddNewLine(True) + param.setAnimationEnabled(True) + lastNode.Shadertoy1_2paramValueFloat1 = param + del param + + param = lastNode.createStringParam("sep05", "") + param.setType(NatronEngine.StringParam.TypeEnum.eStringTypeLabel) + + # Add the param to the page + lastNode.Controls.addParam(param) + + # Set param properties + param.setHelp("") + param.setAddNewLine(True) + param.setEvaluateOnChange(False) + param.setAnimationEnabled(False) + lastNode.sep05 = param + del param + + param = lastNode.createStringParam("sep06", "") + param.setType(NatronEngine.StringParam.TypeEnum.eStringTypeLabel) + + # Add the param to the page + lastNode.Controls.addParam(param) + + # Set param properties + param.setHelp("") + param.setAddNewLine(True) + param.setEvaluateOnChange(False) + param.setAnimationEnabled(False) + lastNode.sep06 = param + del param + + param = lastNode.createStringParam("sep07", "") + param.setType(NatronEngine.StringParam.TypeEnum.eStringTypeLabel) + + # Add the param to the page + lastNode.Controls.addParam(param) + + # Set param properties + param.setHelp("") + param.setAddNewLine(True) + param.setEvaluateOnChange(False) + param.setAnimationEnabled(False) + lastNode.sep07 = param + del param + + param = lastNode.createStringParam("sep08", "") + param.setType(NatronEngine.StringParam.TypeEnum.eStringTypeLabel) + + # Add the param to the page + lastNode.Controls.addParam(param) + + # Set param properties + param.setHelp("") + param.setAddNewLine(True) + param.setEvaluateOnChange(False) + param.setAnimationEnabled(False) + lastNode.sep08 = param + del param + + param = lastNode.createDoubleParam("Shadertoy1_2paramValueFloat2", "Scale : ") + param.setDisplayMinimum(0, 0) + param.setDisplayMaximum(10, 0) + + # Add the param to the page + lastNode.Controls.addParam(param) + + # Set param properties + param.setAddNewLine(True) + param.setAnimationEnabled(True) + lastNode.Shadertoy1_2paramValueFloat2 = param + del param + + param = lastNode.createDoubleParam("Shadertoy1_2paramValueFloat3", "Scale X : ") + param.setDisplayMinimum(0, 0) + param.setDisplayMaximum(10, 0) + param.setDefaultValue(1, 0) + param.restoreDefaultValue(0) + + # Add the param to the page + lastNode.Controls.addParam(param) + + # Set param properties + param.setAddNewLine(True) + param.setAnimationEnabled(True) + lastNode.Shadertoy1_2paramValueFloat3 = param + del param + + param = lastNode.createDoubleParam("Shadertoy1_2paramValueFloat4", "Scale Y : ") + param.setDisplayMinimum(0, 0) + param.setDisplayMaximum(10, 0) + param.setDefaultValue(1, 0) + param.restoreDefaultValue(0) + + # Add the param to the page + lastNode.Controls.addParam(param) + + # Set param properties + param.setAddNewLine(True) + param.setAnimationEnabled(True) + lastNode.Shadertoy1_2paramValueFloat4 = param + del param + + param = lastNode.createStringParam("sep09", "") + param.setType(NatronEngine.StringParam.TypeEnum.eStringTypeLabel) + + # Add the param to the page + lastNode.Controls.addParam(param) + + # Set param properties + param.setHelp("") + param.setAddNewLine(True) + param.setEvaluateOnChange(False) + param.setAnimationEnabled(False) + lastNode.sep09 = param + del param + + param = lastNode.createStringParam("sep10", "") + param.setType(NatronEngine.StringParam.TypeEnum.eStringTypeLabel) + + # Add the param to the page + lastNode.Controls.addParam(param) + + # Set param properties + param.setHelp("") + param.setAddNewLine(True) + param.setEvaluateOnChange(False) + param.setAnimationEnabled(False) + lastNode.sep10 = param + del param + + param = lastNode.createStringParam("sep11", "") + param.setType(NatronEngine.StringParam.TypeEnum.eStringTypeLabel) + + # Add the param to the page + lastNode.Controls.addParam(param) + + # Set param properties + param.setHelp("") + param.setAddNewLine(True) + param.setEvaluateOnChange(False) + param.setAnimationEnabled(False) + lastNode.sep11 = param + del param + + param = lastNode.createStringParam("sep12", "") + param.setType(NatronEngine.StringParam.TypeEnum.eStringTypeLabel) + + # Add the param to the page + lastNode.Controls.addParam(param) + + # Set param properties + param.setHelp("") + param.setAddNewLine(True) + param.setEvaluateOnChange(False) + param.setAnimationEnabled(False) + lastNode.sep12 = param + del param + + param = lastNode.createDoubleParam("Shadertoy1_2paramValueFloat5", "Rotation : ") + param.setDisplayMinimum(-306, 0) + param.setDisplayMaximum(360, 0) + + # Add the param to the page + lastNode.Controls.addParam(param) + + # Set param properties + param.setAddNewLine(True) + param.setAnimationEnabled(True) + lastNode.Shadertoy1_2paramValueFloat5 = param + del param + + param = lastNode.createStringParam("sep13", "") + param.setType(NatronEngine.StringParam.TypeEnum.eStringTypeLabel) + + # Add the param to the page + lastNode.Controls.addParam(param) + + # Set param properties + param.setHelp("") + param.setAddNewLine(True) + param.setEvaluateOnChange(False) + param.setAnimationEnabled(False) + lastNode.sep13 = param + del param + + param = lastNode.createStringParam("sep14", "") + param.setType(NatronEngine.StringParam.TypeEnum.eStringTypeLabel) + + # Add the param to the page + lastNode.Controls.addParam(param) + + # Set param properties + param.setHelp("") + param.setAddNewLine(True) + param.setEvaluateOnChange(False) + param.setAnimationEnabled(False) + lastNode.sep14 = param + del param + + param = lastNode.createStringParam("sep15", "") + param.setType(NatronEngine.StringParam.TypeEnum.eStringTypeLabel) + + # Add the param to the page + lastNode.Controls.addParam(param) + + # Set param properties + param.setHelp("") + param.setAddNewLine(True) + param.setEvaluateOnChange(False) + param.setAnimationEnabled(False) + lastNode.sep15 = param + del param + + param = lastNode.createStringParam("sep16", "") + param.setType(NatronEngine.StringParam.TypeEnum.eStringTypeLabel) + + # Add the param to the page + lastNode.Controls.addParam(param) + + # Set param properties + param.setHelp("") + param.setAddNewLine(True) + param.setEvaluateOnChange(False) + param.setAnimationEnabled(False) + lastNode.sep16 = param + del param + + param = lastNode.createDoubleParam("Shadertoy1_2paramValueFloat6", "Skew X : ") + param.setDisplayMinimum(-10, 0) + param.setDisplayMaximum(10, 0) + + # Add the param to the page + lastNode.Controls.addParam(param) + + # Set param properties + param.setAddNewLine(True) + param.setAnimationEnabled(True) + lastNode.Shadertoy1_2paramValueFloat6 = param + del param + + param = lastNode.createDoubleParam("Shadertoy1_2paramValueFloat7", "Skew Y : ") + param.setDisplayMinimum(-10, 0) + param.setDisplayMaximum(10, 0) + + # Add the param to the page + lastNode.Controls.addParam(param) + + # Set param properties + param.setAddNewLine(True) + param.setAnimationEnabled(True) + lastNode.Shadertoy1_2paramValueFloat7 = param + del param + + param = lastNode.createStringParam("sep17", "") + param.setType(NatronEngine.StringParam.TypeEnum.eStringTypeLabel) + + # Add the param to the page + lastNode.Controls.addParam(param) + + # Set param properties + param.setHelp("") + param.setAddNewLine(True) + param.setEvaluateOnChange(False) + param.setAnimationEnabled(False) + lastNode.sep17 = param + del param + + param = lastNode.createStringParam("sep18", "") + param.setType(NatronEngine.StringParam.TypeEnum.eStringTypeLabel) + + # Add the param to the page + lastNode.Controls.addParam(param) + + # Set param properties + param.setHelp("") + param.setAddNewLine(True) + param.setEvaluateOnChange(False) + param.setAnimationEnabled(False) + lastNode.sep18 = param + del param + + param = lastNode.createStringParam("sep19", "") + param.setType(NatronEngine.StringParam.TypeEnum.eStringTypeLabel) + + # Add the param to the page + lastNode.Controls.addParam(param) + + # Set param properties + param.setHelp("") + param.setAddNewLine(True) + param.setEvaluateOnChange(False) + param.setAnimationEnabled(False) + lastNode.sep19 = param + del param + + param = lastNode.createStringParam("sep20", "") + param.setType(NatronEngine.StringParam.TypeEnum.eStringTypeLabel) + + # Add the param to the page + lastNode.Controls.addParam(param) + + # Set param properties + param.setHelp("") + param.setAddNewLine(True) + param.setEvaluateOnChange(False) + param.setAnimationEnabled(False) + lastNode.sep20 = param + del param + + param = lastNode.createDouble2DParam("Shadertoy1_2paramValueVec211", "Center : ") + param.setDefaultValue(0.5, 0) + param.restoreDefaultValue(0) + param.setDefaultValue(0.5, 1) + param.restoreDefaultValue(1) + + # Add the param to the page + lastNode.Controls.addParam(param) + + # Set param properties + param.setAddNewLine(True) + param.setAnimationEnabled(True) + lastNode.Shadertoy1_2paramValueVec211 = param + del param + + param = lastNode.createStringParam("sep21", "") + param.setType(NatronEngine.StringParam.TypeEnum.eStringTypeLabel) + + # Add the param to the page + lastNode.Controls.addParam(param) + + # Set param properties + param.setHelp("") + param.setAddNewLine(True) + param.setEvaluateOnChange(False) + param.setAnimationEnabled(False) + lastNode.sep21 = param + del param + + param = lastNode.createStringParam("sep22", "") + param.setType(NatronEngine.StringParam.TypeEnum.eStringTypeLabel) + + # Add the param to the page + lastNode.Controls.addParam(param) + + # Set param properties + param.setHelp("") + param.setAddNewLine(True) + param.setEvaluateOnChange(False) + param.setAnimationEnabled(False) + lastNode.sep22 = param + del param + + param = lastNode.createSeparatorParam("OUTPUT", "Output") + + # Add the param to the page + lastNode.Controls.addParam(param) + + # Set param properties + param.setHelp("") + param.setAddNewLine(True) + param.setPersistent(False) + param.setEvaluateOnChange(False) + lastNode.OUTPUT = param + del param + + param = lastNode.createStringParam("sep23", "") + param.setType(NatronEngine.StringParam.TypeEnum.eStringTypeLabel) + + # Add the param to the page + lastNode.Controls.addParam(param) + + # Set param properties + param.setHelp("") + param.setAddNewLine(True) + param.setEvaluateOnChange(False) + param.setAnimationEnabled(False) + lastNode.sep23 = param + del param + + param = lastNode.createStringParam("sep24", "") + param.setType(NatronEngine.StringParam.TypeEnum.eStringTypeLabel) + + # Add the param to the page + lastNode.Controls.addParam(param) + + # Set param properties + param.setHelp("") + param.setAddNewLine(True) + param.setEvaluateOnChange(False) + param.setAnimationEnabled(False) + lastNode.sep24 = param + del param + + param = lastNode.createDoubleParam("Shadertoy1_2paramValueFloat8", "Transparency : ") + param.setMinimum(0, 0) + param.setMaximum(1, 0) + param.setDisplayMinimum(0, 0) + param.setDisplayMaximum(1, 0) + + # Add the param to the page + lastNode.Controls.addParam(param) + + # Set param properties + param.setAddNewLine(True) + param.setAnimationEnabled(True) + lastNode.Shadertoy1_2paramValueFloat8 = param + del param + + param = lastNode.createStringParam("sep25", "") + param.setType(NatronEngine.StringParam.TypeEnum.eStringTypeLabel) + + # Add the param to the page + lastNode.Controls.addParam(param) + + # Set param properties + param.setHelp("") + param.setAddNewLine(True) + param.setEvaluateOnChange(False) + param.setAnimationEnabled(False) + lastNode.sep25 = param + del param + + param = lastNode.createStringParam("sep26", "") + param.setType(NatronEngine.StringParam.TypeEnum.eStringTypeLabel) + + # Add the param to the page + lastNode.Controls.addParam(param) + + # Set param properties + param.setHelp("") + param.setAddNewLine(True) + param.setEvaluateOnChange(False) + param.setAnimationEnabled(False) + lastNode.sep26 = param + del param + + param = lastNode.createStringParam("sep27", "") + param.setType(NatronEngine.StringParam.TypeEnum.eStringTypeLabel) + + # Add the param to the page + lastNode.Controls.addParam(param) + + # Set param properties + param.setHelp("") + param.setAddNewLine(True) + param.setEvaluateOnChange(False) + param.setAnimationEnabled(False) + lastNode.sep27 = param + del param + + param = lastNode.createStringParam("sep28", "") + param.setType(NatronEngine.StringParam.TypeEnum.eStringTypeLabel) + + # Add the param to the page + lastNode.Controls.addParam(param) + + # Set param properties + param.setHelp("") + param.setAddNewLine(True) + param.setEvaluateOnChange(False) + param.setAnimationEnabled(False) + lastNode.sep28 = param + del param + + param = lastNode.createBooleanParam("Shadertoy1_2paramValueBool9", "Repeat Texture : ") + param.setDefaultValue(True) + param.restoreDefaultValue() + + # Add the param to the page + lastNode.Controls.addParam(param) + + # Set param properties + param.setAddNewLine(True) + param.setAnimationEnabled(True) + lastNode.Shadertoy1_2paramValueBool9 = param + del param + + param = lastNode.createBooleanParam("Shadertoy1_2paramValueBool10", "Wraped Only : ") + + # Add the param to the page + lastNode.Controls.addParam(param) + + # Set param properties + param.setAddNewLine(False) + param.setAnimationEnabled(True) + lastNode.Shadertoy1_2paramValueBool10 = param + del param + + param = lastNode.createStringParam("sep29", "") + param.setType(NatronEngine.StringParam.TypeEnum.eStringTypeLabel) + + # Add the param to the page + lastNode.Controls.addParam(param) + + # Set param properties + param.setHelp("") + param.setAddNewLine(True) + param.setEvaluateOnChange(False) + param.setAnimationEnabled(False) + lastNode.sep29 = param + del param + + param = lastNode.createStringParam("sep30", "") + param.setType(NatronEngine.StringParam.TypeEnum.eStringTypeLabel) + + # Add the param to the page + lastNode.Controls.addParam(param) + + # Set param properties + param.setHelp("") + param.setAddNewLine(True) + param.setEvaluateOnChange(False) + param.setAnimationEnabled(False) + lastNode.sep30 = param + del param + + lastNode.Credits = lastNode.createPageParam("Credits", "Credits") + param = lastNode.createStringParam("sep101", "") + param.setType(NatronEngine.StringParam.TypeEnum.eStringTypeLabel) + + # Add the param to the page + lastNode.Credits.addParam(param) + + # Set param properties + param.setHelp("") + param.setAddNewLine(True) + param.setEvaluateOnChange(False) + param.setAnimationEnabled(False) + lastNode.sep101 = param + del param + + param = lastNode.createStringParam("sep102", "") + param.setType(NatronEngine.StringParam.TypeEnum.eStringTypeLabel) + + # Add the param to the page + lastNode.Credits.addParam(param) + + # Set param properties + param.setHelp("") + param.setAddNewLine(True) + param.setEvaluateOnChange(False) + param.setAnimationEnabled(False) + lastNode.sep102 = param + del param + + param = lastNode.createSeparatorParam("NAME", "y_ixform_GL v1.0") + + # Add the param to the page + lastNode.Credits.addParam(param) + + # Set param properties + param.setHelp("") + param.setAddNewLine(True) + param.setPersistent(False) + param.setEvaluateOnChange(False) + lastNode.NAME = param + del param + + param = lastNode.createStringParam("sep103", "") + param.setType(NatronEngine.StringParam.TypeEnum.eStringTypeLabel) + + # Add the param to the page + lastNode.Credits.addParam(param) + + # Set param properties + param.setHelp("") + param.setAddNewLine(True) + param.setEvaluateOnChange(False) + param.setAnimationEnabled(False) + lastNode.sep103 = param + del param + + param = lastNode.createStringParam("sep104", "") + param.setType(NatronEngine.StringParam.TypeEnum.eStringTypeLabel) + + # Add the param to the page + lastNode.Credits.addParam(param) + + # Set param properties + param.setHelp("") + param.setAddNewLine(True) + param.setEvaluateOnChange(False) + param.setAnimationEnabled(False) + lastNode.sep104 = param + del param + + param = lastNode.createSeparatorParam("LINE103", "") + + # Add the param to the page + lastNode.Credits.addParam(param) + + # Set param properties + param.setHelp("") + param.setAddNewLine(True) + param.setPersistent(False) + param.setEvaluateOnChange(False) + lastNode.LINE103 = param + del param + + param = lastNode.createStringParam("sep105", "") + param.setType(NatronEngine.StringParam.TypeEnum.eStringTypeLabel) + + # Add the param to the page + lastNode.Credits.addParam(param) + + # Set param properties + param.setHelp("") + param.setAddNewLine(True) + param.setEvaluateOnChange(False) + param.setAnimationEnabled(False) + lastNode.sep105 = param + del param + + param = lastNode.createStringParam("sep106", "") + param.setType(NatronEngine.StringParam.TypeEnum.eStringTypeLabel) + + # Add the param to the page + lastNode.Credits.addParam(param) + + # Set param properties + param.setHelp("") + param.setAddNewLine(True) + param.setEvaluateOnChange(False) + param.setAnimationEnabled(False) + lastNode.sep106 = param + del param + + param = lastNode.createSeparatorParam("FR", "ShaderToy 0.8.8") + + # Add the param to the page + lastNode.Credits.addParam(param) + + # Set param properties + param.setHelp("") + param.setAddNewLine(True) + param.setPersistent(False) + param.setEvaluateOnChange(False) + lastNode.FR = param + del param + + param = lastNode.createStringParam("sep107", "") + param.setType(NatronEngine.StringParam.TypeEnum.eStringTypeLabel) + + # Add the param to the page + lastNode.Credits.addParam(param) + + # Set param properties + param.setHelp("") + param.setAddNewLine(True) + param.setEvaluateOnChange(False) + param.setAnimationEnabled(False) + lastNode.sep107 = param + del param + + param = lastNode.createStringParam("sep108", "") + param.setType(NatronEngine.StringParam.TypeEnum.eStringTypeLabel) + + # Add the param to the page + lastNode.Credits.addParam(param) + + # Set param properties + param.setHelp("") + param.setAddNewLine(True) + param.setEvaluateOnChange(False) + param.setAnimationEnabled(False) + lastNode.sep108 = param + del param + + param = lastNode.createSeparatorParam("CONVERSION", " (Fabrice Fernandez - 2018)") + + # Add the param to the page + lastNode.Credits.addParam(param) + + # Set param properties + param.setHelp("") + param.setAddNewLine(True) + param.setPersistent(False) + param.setEvaluateOnChange(False) + lastNode.CONVERSION = param + del param + + param = lastNode.createStringParam("sep109", "") + param.setType(NatronEngine.StringParam.TypeEnum.eStringTypeLabel) + + # Add the param to the page + lastNode.Credits.addParam(param) + + # Set param properties + param.setHelp("") + param.setAddNewLine(True) + param.setEvaluateOnChange(False) + param.setAnimationEnabled(False) + lastNode.sep109 = param + del param + + param = lastNode.createStringParam("sep110", "") + param.setType(NatronEngine.StringParam.TypeEnum.eStringTypeLabel) + + # Add the param to the page + lastNode.Credits.addParam(param) + + # Set param properties + param.setHelp("") + param.setAddNewLine(True) + param.setEvaluateOnChange(False) + param.setAnimationEnabled(False) + lastNode.sep110 = param + del param + + # Refresh the GUI with the newly created parameters + lastNode.setPagesOrder(['Controls', 'Credits', 'Node', 'Settings']) + lastNode.refreshUserParamsGUI() + del lastNode + + # Start of node "Output1" + lastNode = app.createNode("fr.inria.built-in.Output", 1, group) + lastNode.setLabel("Output2") + lastNode.setPosition(4570, 4150) + lastNode.setSize(80, 30) + lastNode.setColor(0.7, 0.7, 0.7) + groupOutput1 = lastNode + + del lastNode + # End of node "Output1" + + # Start of node "Front" + lastNode = app.createNode("fr.inria.built-in.Input", 1, group) + lastNode.setScriptName("Front") + lastNode.setLabel("Front") + lastNode.setPosition(4424, 3597) + lastNode.setSize(80, 32) + lastNode.setColor(1, 1, 1) + groupFront = lastNode + + del lastNode + # End of node "Front" + + # Start of node "Matte" + lastNode = app.createNode("fr.inria.built-in.Input", 1, group) + lastNode.setScriptName("Matte") + lastNode.setLabel("Matte") + lastNode.setPosition(4568, 3593) + lastNode.setSize(80, 32) + lastNode.setColor(1, 1, 1) + groupMatte = lastNode + + del lastNode + # End of node "Matte" + + # Start of node "Strength" + lastNode = app.createNode("fr.inria.built-in.Input", 1, group) + lastNode.setScriptName("Strength") + lastNode.setLabel("Strength") + lastNode.setPosition(4709, 3590) + lastNode.setSize(80, 32) + lastNode.setColor(1, 1, 1) + groupStrength = lastNode + + del lastNode + # End of node "Strength" + + # Start of node "Shadertoy1_2" + lastNode = app.createNode("net.sf.openfx.Shadertoy", 1, group) + lastNode.setScriptName("Shadertoy1_2") + lastNode.setLabel("Shadertoy1_2") + lastNode.setPosition(4570, 3926) + lastNode.setSize(80, 32) + lastNode.setColor(0.3, 0.5, 0.2) + groupShadertoy1_2 = lastNode + + param = lastNode.getParam("paramValueFloat0") + if param is not None: + param.setValue(0, 0) + del param + + param = lastNode.getParam("paramValueFloat1") + if param is not None: + param.setValue(0, 0) + del param + + param = lastNode.getParam("paramValueFloat2") + if param is not None: + param.setValue(0, 0) + del param + + param = lastNode.getParam("paramValueFloat3") + if param is not None: + param.setValue(1, 0) + del param + + param = lastNode.getParam("paramValueFloat4") + if param is not None: + param.setValue(1, 0) + del param + + param = lastNode.getParam("paramValueFloat5") + if param is not None: + param.setValue(0, 0) + del param + + param = lastNode.getParam("paramValueFloat6") + if param is not None: + param.setValue(0, 0) + del param + + param = lastNode.getParam("paramValueFloat7") + if param is not None: + param.setValue(0, 0) + del param + + param = lastNode.getParam("paramValueFloat8") + if param is not None: + param.setValue(0, 0) + del param + + param = lastNode.getParam("paramValueBool9") + if param is not None: + param.setValue(True) + del param + + param = lastNode.getParam("paramValueBool10") + if param is not None: + param.setValue(False) + del param + + param = lastNode.getParam("paramValueVec211") + if param is not None: + param.setValue(0.5, 0) + param.setValue(0.5, 1) + del param + + param = lastNode.getParam("imageShaderSource") + if param is not None: + param.setValue("//\n//\n// MMMMMMMMMMMMMMMMMMMMMMMMMMMM\n// MM. .MM\n// MM. .MMMMMMMMMMMMMMMMMMMMMM. .MM\n// MM. .MMMMMMMMMMMMMMMMMMMMMMMM. .MM\n// MM. .MMMM MMMMMMM MMM. .MM\n// MM. .MMM MMMMMM MMM. .MM\n// MM. .MmM MMMM MMM. .MM\n// MM. .MMM MM MMM. .MM\n// MM. .MMM M MMM. .MM\n// MM. .MMM MMM. .MM\n// MM. .MMM MMM. .MM\n// MM. .MMM M MMM. .MM\n// MM. .MMM MM MMM. .MM\n// MM. .MMM MMM MMM. .MM\n// MM. .MMM MMMM MMM. .MM\n// MM. .MMMMMMMMMMMMMMMMMMMMMMMM. .MM\n// MM. .MMMMMMMMMMMMMMMMMMMMMM. .MM\n// MM. .MM\n// MMMMMMMMMMMMMMMMMMMMMMMMMMMM\n//\n//\n//\n//\n// Adaptation pour Natron par F. Fernandez\n// Code original : y_ixform Matchbox pour Autodesk Flame\n\n// Adapted to Natron by F.Fernandez\n// Original code : y_ixform Matchbox for Autodesk Flame\n\n\n// iChannel0:Front,filter=linear,wrap=repeat\n// iChannel1:Matte,filter=linear,wrap=repeat\n// iChannel2:Strength,filter=linear,wrap=repeat\n// BBox: iChannel0\n\n\nfloat result_frameratio = iResolution.x/iResolution.y;\n\nvec2 res = vec2(iResolution.x, iResolution.y);\nvec2 texel = vec2(1.0) / res;\n\n\n\nuniform float pos_x = 0.0; // Position X : (Horizontal translation.)\nuniform float pos_y = 0.0; // Position Y : (Vertical translation.)\n\nuniform float scale = 0.0; // Scale : (Scale.)\nuniform float scale_x = 1.0; // Scale X : (Horizontal scale bias.)\nuniform float scale_y = 1.0; // Scale Y : (Vertical scale bias.)\n\nuniform float rot = 0.0; // Rotation : (Rotation.)\n\nuniform float skew_x = 0.0; // Skew X : (Horizontal skew.)\nuniform float skew_y = 0.0; // Skew Y : (Vertical skew.)\n\nuniform float trans = 0.0; // Transparency : (Transparency.)\n\nuniform bool repeat_texture = true; // Repeat Texture : (Repeat the Texture)\nuniform bool warped_only = false; // Wraped Only : (Output warped only. Default is to comp over the original.)\n\n//const vec2 center = vec2(.5);\n\nuniform vec2 center = vec2(0.5,0.5); // Center : (Center of scale and rotation.)\n\nbool isInTex( const vec2 coords )\n{\n\t return coords.x >= 0.0 && coords.x <= 1.0 &&\n\t\t coords.y >= 0.0 && coords.y <= 1.0;\n}\n\n\nvec2 pre(vec2 coords)\n{\n\tcoords -= center;\n\tcoords.x *= result_frameratio;\n\n\treturn coords;\n}\n\nvec2 post(vec2 coords)\n{\n\tcoords.x /= result_frameratio;\n\tcoords += center;\n\n\treturn coords;\n}\n\nvec2 rotate_coords(vec2 coords, float rot)\n{\n\tmat2 rm = mat2(\n\t\tcos(rot), sin(rot),\n\t\t-sin(rot), cos(rot)\n\t);\n\n\tcoords = pre(coords);\n\tcoords *= rm;\n\tcoords = post(coords);\n\n\treturn coords;\n}\n\nvec2 scale_coords(vec2 coords, vec2 scale_val)\n{\n\tcoords = pre(coords);\n\tcoords /= scale_val + vec2(1.0);\n\tcoords = post(coords);\n\n\treturn coords;\n}\n\nvec2 skew_coords(vec2 coords, vec2 skew_val)\n{\n\tmat2 sm = mat2(\n\t\t1.0, skew_val.x,\n\t\tskew_val.y, 1.0\n\t);\n\n\tcoords *= sm;\n\n\treturn coords;\n}\n\nvoid mainImage( out vec4 fragColor, in vec2 fragCoord )\n{\n\tvec2 st = fragCoord.xy / res;\n\n\tvec3 back = texture2D(iChannel0, st).rgb;\n\n\tfloat strength = texture2D(iChannel2, st).r;\n\n\tvec2 fcoords = st;\n\n\tvec2 s = vec2(strength);\n\n\tfcoords = scale_coords(fcoords, vec2(scale) * vec2(scale_x, scale_y) * s);\n\tfcoords = skew_coords(fcoords, vec2(skew_x, skew_y) * s);\n\tfcoords = fcoords - vec2(pos_x, pos_y) * s;\n\tfcoords = rotate_coords(fcoords, rot * strength);\n\n\tvec3 front = texture2D(iChannel0, fcoords).rgb;\n\tfloat matte = texture2D(iChannel1, fcoords).r;\n\n/*\n\tif (isInTex(fcoords)) {\n\t\tfront = texture2D(iChannel0, fcoords).rgb;\n\t} else {\n\t\tfcoords = 1.0 - fcoords;\n\t\tfront = texture2D(iChannel0, fcoords).rgb;\n\t}\n\t*/\n\n\tif (! repeat_texture && ! isInTex(fcoords)) {\n\t\tfront = vec3(0.0);\n\t\tmatte = 0.0;\n\t}\n\n\tfloat alpha = mix(matte, 0.0, trans);\n\n\tvec3 comp = mix(back, front, alpha);\n\tif (warped_only) {\n\t\tcomp = front * vec3(alpha) * vec3(strength);\n\t}\n\n\tfragColor = vec4(comp, alpha);\n}\n") + del param + + param = lastNode.getParam("mipmap0") + if param is not None: + param.set("linear") + del param + + param = lastNode.getParam("inputLabel0") + if param is not None: + param.setValue("Front") + del param + + param = lastNode.getParam("mipmap1") + if param is not None: + param.set("linear") + del param + + param = lastNode.getParam("inputLabel1") + if param is not None: + param.setValue("Matte") + del param + + param = lastNode.getParam("mipmap2") + if param is not None: + param.set("linear") + del param + + param = lastNode.getParam("inputLabel2") + if param is not None: + param.setValue("Strength") + del param + + param = lastNode.getParam("inputEnable3") + if param is not None: + param.setValue(False) + del param + + param = lastNode.getParam("bbox") + if param is not None: + param.set("iChannel0") + del param + + param = lastNode.getParam("NatronParamFormatChoice") + if param is not None: + param.set("PC_Video") + del param + + param = lastNode.getParam("mouseParams") + if param is not None: + param.setValue(False) + del param + + param = lastNode.getParam("paramCount") + if param is not None: + param.setValue(12, 0) + del param + + param = lastNode.getParam("paramType0") + if param is not None: + param.set("float") + del param + + param = lastNode.getParam("paramName0") + if param is not None: + param.setValue("pos_x") + del param + + param = lastNode.getParam("paramLabel0") + if param is not None: + param.setValue("Position X :") + del param + + param = lastNode.getParam("paramHint0") + if param is not None: + param.setValue("Horizontal translation.") + del param + + param = lastNode.getParam("paramType1") + if param is not None: + param.set("float") + del param + + param = lastNode.getParam("paramName1") + if param is not None: + param.setValue("pos_y") + del param + + param = lastNode.getParam("paramLabel1") + if param is not None: + param.setValue("Position Y :") + del param + + param = lastNode.getParam("paramHint1") + if param is not None: + param.setValue("Vertical translation.") + del param + + param = lastNode.getParam("paramType2") + if param is not None: + param.set("float") + del param + + param = lastNode.getParam("paramName2") + if param is not None: + param.setValue("scale") + del param + + param = lastNode.getParam("paramLabel2") + if param is not None: + param.setValue("Scale :") + del param + + param = lastNode.getParam("paramHint2") + if param is not None: + param.setValue("Scale.") + del param + + param = lastNode.getParam("paramType3") + if param is not None: + param.set("float") + del param + + param = lastNode.getParam("paramName3") + if param is not None: + param.setValue("scale_x") + del param + + param = lastNode.getParam("paramLabel3") + if param is not None: + param.setValue("Scale X :") + del param + + param = lastNode.getParam("paramHint3") + if param is not None: + param.setValue("Horizontal scale bias.") + del param + + param = lastNode.getParam("paramDefaultFloat3") + if param is not None: + param.setValue(1, 0) + del param + + param = lastNode.getParam("paramType4") + if param is not None: + param.set("float") + del param + + param = lastNode.getParam("paramName4") + if param is not None: + param.setValue("scale_y") + del param + + param = lastNode.getParam("paramLabel4") + if param is not None: + param.setValue("Scale Y :") + del param + + param = lastNode.getParam("paramHint4") + if param is not None: + param.setValue("Vertical scale bias.") + del param + + param = lastNode.getParam("paramDefaultFloat4") + if param is not None: + param.setValue(1, 0) + del param + + param = lastNode.getParam("paramType5") + if param is not None: + param.set("float") + del param + + param = lastNode.getParam("paramName5") + if param is not None: + param.setValue("rot") + del param + + param = lastNode.getParam("paramLabel5") + if param is not None: + param.setValue("Rotation :") + del param + + param = lastNode.getParam("paramHint5") + if param is not None: + param.setValue("Rotation.") + del param + + param = lastNode.getParam("paramType6") + if param is not None: + param.set("float") + del param + + param = lastNode.getParam("paramName6") + if param is not None: + param.setValue("skew_x") + del param + + param = lastNode.getParam("paramLabel6") + if param is not None: + param.setValue("Skew X :") + del param + + param = lastNode.getParam("paramHint6") + if param is not None: + param.setValue("Horizontal skew.") + del param + + param = lastNode.getParam("paramType7") + if param is not None: + param.set("float") + del param + + param = lastNode.getParam("paramName7") + if param is not None: + param.setValue("skew_y") + del param + + param = lastNode.getParam("paramLabel7") + if param is not None: + param.setValue("Skew Y :") + del param + + param = lastNode.getParam("paramHint7") + if param is not None: + param.setValue("Vertical skew.") + del param + + param = lastNode.getParam("paramType8") + if param is not None: + param.set("float") + del param + + param = lastNode.getParam("paramName8") + if param is not None: + param.setValue("trans") + del param + + param = lastNode.getParam("paramLabel8") + if param is not None: + param.setValue("Transparency :") + del param + + param = lastNode.getParam("paramHint8") + if param is not None: + param.setValue("Transparency.") + del param + + param = lastNode.getParam("paramType9") + if param is not None: + param.set("bool") + del param + + param = lastNode.getParam("paramName9") + if param is not None: + param.setValue("repeat_texture") + del param + + param = lastNode.getParam("paramLabel9") + if param is not None: + param.setValue("Repeat Texture :") + del param + + param = lastNode.getParam("paramHint9") + if param is not None: + param.setValue("Repeat the Texture") + del param + + param = lastNode.getParam("paramDefaultBool9") + if param is not None: + param.setValue(True) + del param + + param = lastNode.getParam("paramType10") + if param is not None: + param.set("bool") + del param + + param = lastNode.getParam("paramName10") + if param is not None: + param.setValue("warped_only") + del param + + param = lastNode.getParam("paramLabel10") + if param is not None: + param.setValue("Wraped Only :") + del param + + param = lastNode.getParam("paramHint10") + if param is not None: + param.setValue("Output warped only. Default is to comp over the original.") + del param + + param = lastNode.getParam("paramType11") + if param is not None: + param.set("vec2") + del param + + param = lastNode.getParam("paramName11") + if param is not None: + param.setValue("center") + del param + + param = lastNode.getParam("paramLabel11") + if param is not None: + param.setValue("Center :") + del param + + param = lastNode.getParam("paramHint11") + if param is not None: + param.setValue("Center of scale and rotation.") + del param + + param = lastNode.getParam("paramDefaultVec211") + if param is not None: + param.setValue(0.5, 0) + param.setValue(0.5, 1) + del param + + del lastNode + # End of node "Shadertoy1_2" + + # Start of node "Dot1" + lastNode = app.createNode("fr.inria.built-in.Dot", 1, group) + lastNode.setScriptName("Dot1") + lastNode.setLabel("Dot1") + lastNode.setPosition(4459, 3935) + lastNode.setSize(15, 15) + lastNode.setColor(0.7, 0.7, 0.7) + groupDot1 = lastNode + + del lastNode + # End of node "Dot1" + + # Start of node "Dot2" + lastNode = app.createNode("fr.inria.built-in.Dot", 1, group) + lastNode.setScriptName("Dot2") + lastNode.setLabel("Dot2") + lastNode.setPosition(4744, 3938) + lastNode.setSize(15, 15) + lastNode.setColor(0.7, 0.7, 0.7) + groupDot2 = lastNode + + del lastNode + # End of node "Dot2" + + # Start of node "Shuffle2" + lastNode = app.createNode("net.sf.openfx.ShufflePlugin", 3, group) + lastNode.setScriptName("Shuffle2") + lastNode.setLabel("Shuffle2") + lastNode.setPosition(4570, 3828) + lastNode.setSize(80, 32) + lastNode.setColor(0.6, 0.24, 0.39) + groupShuffle2 = lastNode + + param = lastNode.getParam("outputR") + if param is not None: + param.set("B.uk.co.thefoundry.OfxImagePlaneColour.A") + del param + + del lastNode + # End of node "Shuffle2" + + # Now that all nodes are created we can connect them together, restore expressions + groupOutput1.connectInput(0, groupShadertoy1_2) + groupShadertoy1_2.connectInput(0, groupDot1) + groupShadertoy1_2.connectInput(1, groupShuffle2) + groupShadertoy1_2.connectInput(2, groupDot2) + groupDot1.connectInput(0, groupFront) + groupDot2.connectInput(0, groupStrength) + groupShuffle2.connectInput(0, groupMatte) + + param = groupShadertoy1_2.getParam("paramValueFloat0") + group.getParam("Shadertoy1_2paramValueFloat0").setAsAlias(param) + del param + param = groupShadertoy1_2.getParam("paramValueFloat1") + group.getParam("Shadertoy1_2paramValueFloat1").setAsAlias(param) + del param + param = groupShadertoy1_2.getParam("paramValueFloat2") + group.getParam("Shadertoy1_2paramValueFloat2").setAsAlias(param) + del param + param = groupShadertoy1_2.getParam("paramValueFloat3") + group.getParam("Shadertoy1_2paramValueFloat3").setAsAlias(param) + del param + param = groupShadertoy1_2.getParam("paramValueFloat4") + group.getParam("Shadertoy1_2paramValueFloat4").setAsAlias(param) + del param + param = groupShadertoy1_2.getParam("paramValueFloat5") + group.getParam("Shadertoy1_2paramValueFloat5").setAsAlias(param) + del param + param = groupShadertoy1_2.getParam("paramValueFloat6") + group.getParam("Shadertoy1_2paramValueFloat6").setAsAlias(param) + del param + param = groupShadertoy1_2.getParam("paramValueFloat7") + group.getParam("Shadertoy1_2paramValueFloat7").setAsAlias(param) + del param + param = groupShadertoy1_2.getParam("paramValueFloat8") + group.getParam("Shadertoy1_2paramValueFloat8").setAsAlias(param) + del param + param = groupShadertoy1_2.getParam("paramValueBool9") + group.getParam("Shadertoy1_2paramValueBool9").setAsAlias(param) + del param + param = groupShadertoy1_2.getParam("paramValueBool10") + group.getParam("Shadertoy1_2paramValueBool10").setAsAlias(param) + del param + param = groupShadertoy1_2.getParam("paramValueVec211") + group.getParam("Shadertoy1_2paramValueVec211").setAsAlias(param) + del param + + try: + extModule = sys.modules["y_ixform_GLExt"] + except KeyError: + extModule = None + if extModule is not None and hasattr(extModule ,"createInstanceExt") and hasattr(extModule.createInstanceExt,"__call__"): + extModule.createInstanceExt(app,group) diff --git a/GLSL/Effect/y_ixform_GL/y_ixform_GL.xml b/GLSL/Effect/y_ixform_GL/y_ixform_GL.xml new file mode 100644 index 0000000..22fb792 --- /dev/null +++ b/GLSL/Effect/y_ixform_GL/y_ixform_GL.xml @@ -0,0 +1,10 @@ + + + y_ixform_GL + Transform a thing. This is only cool if you input the optional black and white strength channel. The transormation will be multiplied by the value of the strength channel. + 1.0 + @DATE@ + natron.community.plugins.y_ixform_GL + script + + diff --git a/Shadertoy/y_flicker.frag.glsl b/Shadertoy/y_flicker.frag.glsl new file mode 100644 index 0000000..46d5c13 --- /dev/null +++ b/Shadertoy/y_flicker.frag.glsl @@ -0,0 +1,104 @@ +// +// +// MMMMMMMMMMMMMMMMMMMMMMMMMMMM +// MM. .MM +// MM. .MMMMMMMMMMMMMMMMMMMMMM. .MM +// MM. .MMMMMMMMMMMMMMMMMMMMMMMM. .MM +// MM. .MMMM MMMMMMM MMM. .MM +// MM. .MMM MMMMMM MMM. .MM +// MM. .MmM MMMM MMM. .MM +// MM. .MMM MM MMM. .MM +// MM. .MMM M MMM. .MM +// MM. .MMM MMM. .MM +// MM. .MMM MMM. .MM +// MM. .MMM M MMM. .MM +// MM. .MMM MM MMM. .MM +// MM. .MMM MMM MMM. .MM +// MM. .MMM MMMM MMM. .MM +// MM. .MMMMMMMMMMMMMMMMMMMMMMMM. .MM +// MM. .MMMMMMMMMMMMMMMMMMMMMM. .MM +// MM. .MM +// MMMMMMMMMMMMMMMMMMMMMMMMMMMM +// +// +// +// +// Adaptation pour Natron par F. Fernandez +// Code original : y_flicker pour Autodesk Flame + +// Adapted to Natron by F.Fernandez +// Original code : y_flicker for Autodesk Flame + + +// iChannel0: Source,filter=linear,wrap=clamp +// iChannel1: LockFrame,filter=linear,wrap=clamp +// BBox: iChannel0 + + +#extension GL_ARB_shader_texture_lod : enable + +float adsk_getLuminance( vec3 rgb ) +{ + // Algorithm from Chapter 10 of Graphics Shaders. + const vec3 W = vec3(0.2125, 0.7154, 0.0721); + return dot(rgb, W); +} + + +vec2 res = vec2(iResolution.x, iResolution.y); + + +uniform float lod = 10.0; // Average : (Level of detail. Higher is lower and usually what you want.), min=0.0, max=10.0 +uniform int operation = 0; // Operation : (Choose to remove flicker from input 1, or copy the flicker of input 1 to input 2.), min=0, max=1 +uniform bool match_chroma = false; // Match Chroma : (Try and match the chroma as well as luma.) + + +void mainImage( out vec4 fragColor, in vec2 fragCoord ) +{ + vec2 st = fragCoord.xy / res; + + vec3 front = vec3(0.0); + vec3 front_avg = texture2DLod(iChannel0, st, lod).rgb; + vec3 lock_frame = texture2DLod(iChannel1, st, lod).rgb; + + vec3 new_gain = vec3(0.0); + + if (operation == 1) { + if (lock_frame.r != 0.0) { + new_gain.r = front_avg.r / lock_frame.r; + } + if (lock_frame.g != 0.0) { + new_gain.g = front_avg.r / lock_frame.g; + } + if (lock_frame.b != 0.0) { + new_gain.b = front_avg.b / lock_frame.b; + } + front = texture2D(iChannel1, st).rgb; + } else { + new_gain = lock_frame / max(front_avg, vec3(.00001)); + + if (front_avg.r != 0.0) { + new_gain.r = lock_frame.r / front_avg.r; + } + if (front_avg.g != 0.0) { + new_gain.g = lock_frame.r / front_avg.g; + } + if (front_avg.b != 0.0) { + new_gain.b = lock_frame.b / front_avg.b; + } + + front = texture2D(iChannel0, st).rgb; + } + + new_gain = clamp(new_gain, -5.0, 5.0); + + float gdif = adsk_getLuminance(new_gain.rgb); + + if (match_chroma) { + front *= new_gain; + } else { + front *= gdif; + } + + fragColor.rgb = front; +} diff --git a/Shadertoy/y_ixform.frag.glsl b/Shadertoy/y_ixform.frag.glsl new file mode 100644 index 0000000..dc11384 --- /dev/null +++ b/Shadertoy/y_ixform.frag.glsl @@ -0,0 +1,167 @@ +// +// +// MMMMMMMMMMMMMMMMMMMMMMMMMMMM +// MM. .MM +// MM. .MMMMMMMMMMMMMMMMMMMMMM. .MM +// MM. .MMMMMMMMMMMMMMMMMMMMMMMM. .MM +// MM. .MMMM MMMMMMM MMM. .MM +// MM. .MMM MMMMMM MMM. .MM +// MM. .MmM MMMM MMM. .MM +// MM. .MMM MM MMM. .MM +// MM. .MMM M MMM. .MM +// MM. .MMM MMM. .MM +// MM. .MMM MMM. .MM +// MM. .MMM M MMM. .MM +// MM. .MMM MM MMM. .MM +// MM. .MMM MMM MMM. .MM +// MM. .MMM MMMM MMM. .MM +// MM. .MMMMMMMMMMMMMMMMMMMMMMMM. .MM +// MM. .MMMMMMMMMMMMMMMMMMMMMM. .MM +// MM. .MM +// MMMMMMMMMMMMMMMMMMMMMMMMMMMM +// +// +// +// +// Adaptation pour Natron par F. Fernandez +// Code original : y_ixform Matchbox pour Autodesk Flame + +// Adapted to Natron by F.Fernandez +// Original code : y_ixform Matchbox for Autodesk Flame + + +// iChannel0:Front,filter=linear,wrap=repeat +// iChannel1:Matte,filter=linear,wrap=repeat +// iChannel2:Strength,filter=linear,wrap=repeat +// BBox: iChannel0 + + +float result_frameratio = iResolution.x/iResolution.y; + +vec2 res = vec2(iResolution.x, iResolution.y); +vec2 texel = vec2(1.0) / res; + + + +uniform float pos_x = 0.0; // Position X : (Horizontal translation.) +uniform float pos_y = 0.0; // Position Y : (Vertical translation.) + +uniform float scale = 0.0; // Scale : (Scale.) +uniform float scale_x = 1.0; // Scale X : (Horizontal scale bias.) +uniform float scale_y = 1.0; // Scale Y : (Vertical scale bias.) + +uniform float rot = 0.0; // Rotation : (Rotation.) + +uniform float skew_x = 0.0; // Skew X : (Horizontal skew.) +uniform float skew_y = 0.0; // Skew Y : (Vertical skew.) + +uniform float trans = 0.0; // Transparency : (Transparency.) + +uniform bool repeat_texture = true; // Repeat Texture : (Repeat the Texture) +uniform bool warped_only = false; // Wraped Only : (Output warped only. Default is to comp over the original.) + +//const vec2 center = vec2(.5); + +uniform vec2 center = vec2(0.5,0.5); // Center : (Center of scale and rotation.) + +bool isInTex( const vec2 coords ) +{ + return coords.x >= 0.0 && coords.x <= 1.0 && + coords.y >= 0.0 && coords.y <= 1.0; +} + + +vec2 pre(vec2 coords) +{ + coords -= center; + coords.x *= result_frameratio; + + return coords; +} + +vec2 post(vec2 coords) +{ + coords.x /= result_frameratio; + coords += center; + + return coords; +} + +vec2 rotate_coords(vec2 coords, float rot) +{ + mat2 rm = mat2( + cos(rot), sin(rot), + -sin(rot), cos(rot) + ); + + coords = pre(coords); + coords *= rm; + coords = post(coords); + + return coords; +} + +vec2 scale_coords(vec2 coords, vec2 scale_val) +{ + coords = pre(coords); + coords /= scale_val + vec2(1.0); + coords = post(coords); + + return coords; +} + +vec2 skew_coords(vec2 coords, vec2 skew_val) +{ + mat2 sm = mat2( + 1.0, skew_val.x, + skew_val.y, 1.0 + ); + + coords *= sm; + + return coords; +} + +void mainImage( out vec4 fragColor, in vec2 fragCoord ) +{ + vec2 st = fragCoord.xy / res; + + vec3 back = texture2D(iChannel0, st).rgb; + + float strength = texture2D(iChannel2, st).r; + + vec2 fcoords = st; + + vec2 s = vec2(strength); + + fcoords = scale_coords(fcoords, vec2(scale) * vec2(scale_x, scale_y) * s); + fcoords = skew_coords(fcoords, vec2(skew_x, skew_y) * s); + fcoords = fcoords - vec2(pos_x, pos_y) * s; + fcoords = rotate_coords(fcoords, rot * strength); + + vec3 front = texture2D(iChannel0, fcoords).rgb; + float matte = texture2D(iChannel1, fcoords).r; + +/* + if (isInTex(fcoords)) { + front = texture2D(iChannel0, fcoords).rgb; + } else { + fcoords = 1.0 - fcoords; + front = texture2D(iChannel0, fcoords).rgb; + } + */ + + if (! repeat_texture && ! isInTex(fcoords)) { + front = vec3(0.0); + matte = 0.0; + } + + float alpha = mix(matte, 0.0, trans); + + vec3 comp = mix(back, front, alpha); + if (warped_only) { + comp = front * vec3(alpha) * vec3(strength); + } + + fragColor = vec4(comp, alpha); +}