In the olden days, producers knew what visual effects were. Now they’ve gotten into this methodology where they’ll hire a middleman – a visual effects supervisor, and this person works for the producing studio.
They’re middle managers. And when you go into a review with one of them, there’s this weird sort of competition that happens.

It’s a game called ‘Find What’s Wrong With This Shot’. And there’s always going to be something wrong, because everything’s subjective. And you can micromanage it down to a pixel, and that happens all the time. We’re doing it digitally, so there’s no pressure to save on film costs or whatever, so it’s not unusual to go through 500 revisions of the same shot, moving pixels around and scrutinizing this or that.

That’s not how you manage artists. You encourage artists, and then you’ll get – you know – art.

If your idea of managing artists is just pointing out what’s wrong and making them fix it over and over again, you end up with artists who just stand around asking “OK lady, where do you want this sofa? You want it over there? No? Fine. You want it over there? I don’t give a fuck. I’ll put it wherever you want it.” It’s creative mismanagement, it’s part of the whole corporate modality. The fish stinks from the head on down. Back on Star Wars, Robocop, we never thought about what was wrong with a shot.

We just thought about how to make it better.

Phil Tippett

CustomShader3D: Cg shader editing in your comp

Moderator: SecondMan

User avatar
Kristof
Fusionista
Posts: 285
Joined: Thu Aug 07, 2014 12:30 pm
Been thanked: 3 times

Re: CustomShader3D: Cg shader editing in your comp

Post #46 by Kristof » Wed Sep 21, 2016 2:02 pm

Hey Chad, I'm trying to replace an object's normals by prerendered ones in eye space. Don't know how to get them in the .xyz channels. Could you maybe have a look?

Wonky code I got so far:

  1. {
  2.     Tools = ordered() {
  3.         DirectionalLight1 = LightDirectional {
  4.             Inputs = {
  5.                 ["Transform3DOp.Rotate.X"] = Input { Value = -38.2394366, },
  6.                 ["Transform3DOp.Rotate.Y"] = Input { Value = 38.2394366, },
  7.             },
  8.             ViewInfo = OperatorInfo { Pos = { 1155, -181.5 } },
  9.         },
  10.         Camera3D2 = Camera3D {
  11.             Inputs = {
  12.                 ["Transform3DOp.Translate.Z"] = Input { Value = 8, },
  13.                 AoV = Input { Value = 19.2642683071402, },
  14.                 ["Stereo.Mode"] = Input { Value = FuID { "OffAxis" }, },
  15.                 FilmGate = Input { Value = FuID { "BMD_URSA_4K_16x9" }, },
  16.                 ApertureW = Input { Value = 0.831496062992126, },
  17.                 ApertureH = Input { Value = 0.467716535433071, },
  18.                 ["SurfacePlaneInputs.ObjectID.ObjectID"] = Input { Value = 5, },
  19.                 ["MtlStdInputs.MaterialID"] = Input { Value = 7, },
  20.             },
  21.             ViewInfo = OperatorInfo { Pos = { 1155, -214.5 } },
  22.         },
  23.         Merge3D2 = Merge3D {
  24.             Inputs = {
  25.                 SceneInput1 = Input {
  26.                     SourceOp = "sphere_hiPly",
  27.                     Source = "Output",
  28.                 },
  29.                 SceneInput2 = Input {
  30.                     SourceOp = "Camera3D2",
  31.                     Source = "Output",
  32.                 },
  33.                 SceneInput3 = Input {
  34.                     SourceOp = "DirectionalLight1",
  35.                     Source = "Output",
  36.                 },
  37.             },
  38.             ViewInfo = OperatorInfo { Pos = { 1155, -115.5 } },
  39.         },
  40.         sphere_hiPly = Shape3D {
  41.             NameSet = true,
  42.             Inputs = {
  43.                 Shape = Input { Value = FuID { "SurfaceSphereInputs" }, },
  44.                 ["MtlStdInputs.MaterialID"] = Input { Value = 6, },
  45.                 ["SurfacePlaneInputs.ObjectID.ObjectID"] = Input { Value = 3, },
  46.                 ["SurfaceSphereInputs.ObjectID.ObjectID"] = Input { Value = 4, }
  47.             },
  48.             ViewInfo = OperatorInfo { Pos = { 935, -115.5 } },
  49.         },
  50.         Renderer3D1 = Renderer3D {
  51.             Inputs = {
  52.                 GlobalIn = Input { Value = 1001, },
  53.                 GlobalOut = Input { Value = 2001, },
  54.                 Width = Input { Value = 1920, },
  55.                 Height = Input { Value = 1080, },
  56.                 ["Gamut.SLogVersion"] = Input { Value = FuID { "SLog2" }, },
  57.                 SceneInput = Input {
  58.                     SourceOp = "Merge3D2",
  59.                     Source = "Output",
  60.                 },
  61.                 ["RendererSoftware.Channels.Nest"] = Input { Value = 1, },
  62.                 ["RendererSoftware.Channels.Normal"] = Input { Value = 1, },
  63.                 ["RendererSoftware.LightingEnabled"] = Input { Value = 1, },
  64.             },
  65.             ViewInfo = OperatorInfo { Pos = { 1265, -115.5 } },
  66.         },
  67.         ChannelBooleans1 = ChannelBoolean {
  68.             Inputs = {
  69.                 ToRed = Input { Value = 24, },
  70.                 ToGreen = Input { Value = 25, },
  71.                 ToBlue = Input { Value = 26, },
  72.                 Background = Input {
  73.                     SourceOp = "Renderer3D1",
  74.                     Source = "Output",
  75.                 },
  76.             },
  77.             ViewInfo = OperatorInfo { Pos = { 1430, -115.5 } },
  78.         },
  79.         Note2 = Note {
  80.             Inputs = {
  81.                 Comments = Input { Value = "Look through the camera", }
  82.             },
  83.             ViewInfo = StickyNoteInfo {
  84.                 Pos = { 1210, -16.5 },
  85.                 Flags = {
  86.                     Expanded = true
  87.                 },
  88.                 Size = { 196, 87.3761 }
  89.             },
  90.         },
  91.         sphere_loPly = Shape3D {
  92.             NameSet = true,
  93.             Inputs = {
  94.                 ["SurfacePlaneInputs.ObjectID.ObjectID"] = Input { Value = 3, },
  95.                 Shape = Input { Value = FuID { "SurfaceSphereInputs" }, },
  96.                 MaterialInput = Input {
  97.                     SourceOp = "CustomShader3D_ScreenSpaceMask_1_1_1_1",
  98.                     Source = "MaterialOutput",
  99.                 },
  100.                 ["MtlStdInputs.MaterialID"] = Input { Value = 6, },
  101.                 ["SurfaceSphereInputs.SubdivisionLevelBase"] = Input { Value = 4, },
  102.                 ["SurfaceSphereInputs.SubdivisionLevelHeight"] = Input { Value = 4, },
  103.                 ["SurfaceSphereInputs.ObjectID.ObjectID"] = Input { Value = 4, }
  104.             },
  105.             ViewInfo = OperatorInfo { Pos = { 935, 16.5 } },
  106.         },
  107.         preview = Merge3D {
  108.             CtrlWZoom = false,
  109.             NameSet = true,
  110.             Inputs = {
  111.                 SceneInput1 = Input {
  112.                     SourceOp = "sphere_loPly",
  113.                     Source = "Output",
  114.                 },
  115.                 SceneInput2 = Input {
  116.                     SourceOp = "Camera3D2",
  117.                     Source = "Output",
  118.                 },
  119.                 SceneInput3 = Input {
  120.                     SourceOp = "DirectionalLight1",
  121.                     Source = "Output",
  122.                 },
  123.             },
  124.             ViewInfo = OperatorInfo { Pos = { 1155, 16.5 } },
  125.         },
  126.         Note1 = Note {
  127.             Inputs = {
  128.                 Comments = Input { Value = "Trying to substitute the low poly object's normals by rendered normals.", }
  129.             },
  130.             ViewInfo = StickyNoteInfo {
  131.                 Pos = { 1265, 82.5 },
  132.                 Flags = {
  133.                     Expanded = true
  134.                 },
  135.                 Size = { 196, 238.697 }
  136.             },
  137.         },
  138.         CustomShader3D_ScreenSpaceMask_1_1_1_1 = Indicated.CustomShaderOperator3D {
  139.             NameSet = true,
  140.             CurrentSettings = 5,
  141.             CustomData = {
  142.                 Settings = {
  143.                     [1] = {
  144.                         Tools = ordered() {
  145.                             CustomShader3D_ScreenSpaceMask_1_1_1 = Indicated.CustomShaderOperator3D {
  146.                                 Inputs = {
  147.                                     ShaderTextInputs = Input { Value = "FuFloat4 EffectMask;\nFuFloat4 BgMtl;\nFuFloat4 FgMtl;\nfloat Dissolve;\nfloat4x4 Projection;\n\n" },
  148.                                     FgMtl = Input {
  149.                                         CustomData = {
  150.                                             Metadata = {
  151.                                                 Set = "FgMtl",
  152.                                                 Type = "Material"
  153.                                             }
  154.                                         },
  155.                                         SourceOp = "Blinn2_1",
  156.                                         Source = "MaterialOutput"
  157.                                     },
  158.                                     RCGroup = Input { Value = 1 },
  159.                                     RCMatrices = Input { Value = 256 },
  160.                                     FloatGroup = Input { Value = 1 },
  161.                                     Dissolve = Input {
  162.                                         Value = 1,
  163.                                         CustomData = {
  164.                                             Metadata = {
  165.                                                 Type = "Float",
  166.                                                 Set = "Dissolve"
  167.                                             }
  168.                                         }
  169.                                     },
  170.                                     BgMtl = Input {
  171.                                         CustomData = {
  172.                                             Metadata = {
  173.                                                 Set = "BgMtl",
  174.                                                 Type = "Material"
  175.                                             }
  176.                                         },
  177.                                         SourceOp = "Blinn2",
  178.                                         Source = "MaterialOutput"
  179.                                     },
  180.                                     EffectMask = Input {
  181.                                         CustomData = {
  182.                                             Metadata = {
  183.                                                 Set = "EffectMask",
  184.                                                 Type = "Material"
  185.                                             }
  186.                                         },
  187.                                         SourceOp = "Rectangle1",
  188.                                         Source = "Mask"
  189.                                     },
  190.                                     MaterialID = Input { Value = 1 },
  191.                                     MaterialGroup = Input { Value = 1 },
  192.                                     ShaderTextBody = Input { Value = "float4 Shade(inout FuFragment f)\n{\n\n   float3 OldTexCoord0 = f.TexCoord0;  // Buffer to store the UV's so we can mess with them in the shader\n\n  float4 proj = mul(Projection,float4((f.Position),1));   // Going from eye-space to clip-space.  To multiply the float4x4 projection matrix and float3 Position, we need to add a 4th component, 1.0.  \n    \n  proj /= proj.w;    // Divide to get from 4D clip to 3D NDC (normalized device coordinates)\n\n  f.TexCoord0 = proj.rgb * .5 + .5;   // Normalizing from [-1,1] to [0,1]\n\n float mask = EffectMask.Shade(f).a * Dissolve;  // We'll sample the alpha channel from the mask input with the new \n\n f.TexCoord0 = OldTexCoord0;  // Set the UV's back to the buffer values\n\n  float4 ret = lerp(BgMtl.Shade(f), FgMtl.Shade(f), mask);  // And use that to lerp between the Fg and Bg \n\n    return ret;\n\n}" }
  193.                                 },
  194.                                 ViewInfo = OperatorInfo {
  195.                                     Flags = {
  196.                                         ShowPic = true
  197.                                     },
  198.                                     Pos = { 3410, 445.5 }
  199.                                 },
  200.                                 CtrlWZoom = false,
  201.                                 NameSet = true,
  202.                                 UserControls = ordered() {
  203.                                     EffectMask = {
  204.                                         {
  205.                                             LINKID_DataType = "MtlGraph3D"
  206.                                         },
  207.                                         {
  208.                                             LINKID_DataType = "Image"
  209.                                         },
  210.                                         {
  211.                                             LINKID_AllowedDataType = "Image"
  212.                                         },
  213.                                         {
  214.                                             LINKID_AllowedDataType = "Mask"
  215.                                         },
  216.                                         LINK_Main = 3,
  217.                                         INP_AcceptsGLImages = true,
  218.                                         INPID_InputControl = "ImageControl",
  219.                                         IC_ControlPage = 0,
  220.                                         INP_Required = false,
  221.                                         INP_AcceptsMasks = true
  222.                                     },
  223.                                     BgMtl = {
  224.                                         {
  225.                                             LINKID_DataType = "MtlGraph3D"
  226.                                         },
  227.                                         {
  228.                                             LINKID_DataType = "Image"
  229.                                         },
  230.                                         {
  231.                                             LINKID_AllowedDataType = "Image"
  232.                                         },
  233.                                         {
  234.                                             LINKID_AllowedDataType = "Mask"
  235.                                         },
  236.                                         LINK_Main = 1,
  237.                                         INP_AcceptsGLImages = true,
  238.                                         INPID_InputControl = "ImageControl",
  239.                                         IC_ControlPage = 0,
  240.                                         INP_Required = false,
  241.                                         INP_AcceptsMasks = true
  242.                                     },
  243.                                     FgMtl = {
  244.                                         {
  245.                                             LINKID_DataType = "MtlGraph3D"
  246.                                         },
  247.                                         {
  248.                                             LINKID_DataType = "Image"
  249.                                         },
  250.                                         {
  251.                                             LINKID_AllowedDataType = "Image"
  252.                                         },
  253.                                         {
  254.                                             LINKID_AllowedDataType = "Mask"
  255.                                         },
  256.                                         LINK_Main = 2,
  257.                                         INP_AcceptsGLImages = true,
  258.                                         INPID_InputControl = "ImageControl",
  259.                                         IC_ControlPage = 0,
  260.                                         INP_Required = false,
  261.                                         INP_AcceptsMasks = true
  262.                                     },
  263.                                     EffectMaskLabel = {
  264.                                         ICD_Width = 0.9,
  265.                                         INP_External = false,
  266.                                         INPID_InputControl = "LabelControl",
  267.                                         IC_ControlPage = 1,
  268.                                         INP_Passive = true,
  269.                                         ICS_Name = "EffectMask"
  270.                                     },
  271.                                     EffectMaskDeleteButton = {
  272.                                         ICD_Width = 0.1,
  273.                                         INPID_InputControl = "MultiButtonControl",
  274.                                         IC_ControlPage = 1,
  275.                                         MBTNC_Type = "Toggle",
  276.                                         INP_DoNotifyChanged = 1,
  277.                                         INP_External = 0,
  278.                                         LINKID_DataType = "Number",
  279.                                         ICS_Name = "",
  280.                                         MBTNC_ButtonHeight = 18,
  281.                                         MBTNC_AddButton = "X"
  282.                                     },
  283.                                     BgMtlLabel = {
  284.                                         ICD_Width = 0.9,
  285.                                         INP_External = false,
  286.                                         INPID_InputControl = "LabelControl",
  287.                                         IC_ControlPage = 1,
  288.                                         INP_Passive = true,
  289.                                         ICS_Name = "BgMtl"
  290.                                     },
  291.                                     BgMtlDeleteButton = {
  292.                                         ICD_Width = 0.1,
  293.                                         INPID_InputControl = "MultiButtonControl",
  294.                                         IC_ControlPage = 1,
  295.                                         MBTNC_Type = "Toggle",
  296.                                         INP_DoNotifyChanged = 1,
  297.                                         INP_External = 0,
  298.                                         LINKID_DataType = "Number",
  299.                                         ICS_Name = "",
  300.                                         MBTNC_ButtonHeight = 18,
  301.                                         MBTNC_AddButton = "X"
  302.                                     },
  303.                                     FgMtlLabel = {
  304.                                         ICD_Width = 0.9,
  305.                                         INP_External = false,
  306.                                         INPID_InputControl = "LabelControl",
  307.                                         IC_ControlPage = 1,
  308.                                         INP_Passive = true,
  309.                                         ICS_Name = "FgMtl"
  310.                                     },
  311.                                     FgMtlDeleteButton = {
  312.                                         ICD_Width = 0.1,
  313.                                         INPID_InputControl = "MultiButtonControl",
  314.                                         IC_ControlPage = 1,
  315.                                         MBTNC_Type = "Toggle",
  316.                                         INP_DoNotifyChanged = 1,
  317.                                         INP_External = 0,
  318.                                         LINKID_DataType = "Number",
  319.                                         ICS_Name = "",
  320.                                         MBTNC_ButtonHeight = 18,
  321.                                         MBTNC_AddButton = "X"
  322.                                     },
  323.                                     Dissolve = {
  324.                                         IC_ControlPage = 0,
  325.                                         LINKID_DataType = "Number",
  326.                                         INPID_InputControl = "SliderControl"
  327.                                     },
  328.                                     DissolveLabel = {
  329.                                         ICD_Width = 0.9,
  330.                                         INP_External = false,
  331.                                         INPID_InputControl = "LabelControl",
  332.                                         IC_ControlPage = 1,
  333.                                         INP_Passive = true,
  334.                                         ICS_Name = "Dissolve"
  335.                                     },
  336.                                     DissolveDeleteButton = {
  337.                                         ICD_Width = 0.1,
  338.                                         INPID_InputControl = "MultiButtonControl",
  339.                                         IC_ControlPage = 1,
  340.                                         MBTNC_Type = "Toggle",
  341.                                         INP_DoNotifyChanged = 1,
  342.                                         INP_External = 0,
  343.                                         LINKID_DataType = "Number",
  344.                                         ICS_Name = "",
  345.                                         MBTNC_ButtonHeight = 18,
  346.                                         MBTNC_AddButton = "X"
  347.                                     }
  348.                                 },
  349.                                 CustomData = {
  350.                                 }
  351.                             }
  352.                         }
  353.                     },
  354.                     [2] = {
  355.                         Tools = ordered() {
  356.                             CustomShader3D_ScreenSpaceMask_1_1_1_1 = Indicated.CustomShaderOperator3D {
  357.                                 CtrlWZoom = false,
  358.                                 NameSet = true,
  359.                                 CustomData = {
  360.                                 },
  361.                                 Inputs = {
  362.                                     ShaderTextInputs = Input { Value = "FuFloat4 EffectMask;\nFuFloat4 BgMtl;\nFuFloat4 FgMtl;\nfloat Dissolve;\nfloat4x4 Projection;\n\n", },
  363.                                     ShaderTextBody = Input { Value = "float4 Shade(inout FuFragment f)\n{\n\n   float3 OldTexCoord0 = f.TexCoord0;  // Buffer to store the UV's so we can mess with them in the shader\n\n  float4 proj = mul(Projection,float4((f.Position),1));   // Going from eye-space to clip-space.  To multiply the float4x4 projection matrix and float3 Position, we need to add a 4th component, 1.0.  \n    \n  proj /= proj.w;    // Divide to get from 4D clip to 3D NDC (normalized device coordinates)\n\n  f.TexCoord0 = proj.rgb * .5 + .5;   // Normalizing from [-1,1] to [0,1]\n\n float4 ret = FgMtl.Shade(f);\n\n f.TexCoord0 = OldTexCoord0;  // Set the UV's back to the buffer values\n\n    return ret;\n\n}", },
  364.                                     RCGroup = Input { Value = 1, },
  365.                                     RCMatrices = Input { Value = 256, },
  366.                                     MaterialGroup = Input { Value = 1, },
  367.                                     FloatGroup = Input { Value = 1, },
  368.                                     MaterialID = Input { Value = 1, },
  369.                                     EffectMask = Input {
  370.                                         CustomData = {
  371.                                             Metadata = {
  372.                                                 Set = "EffectMask",
  373.                                                 Type = "Material",
  374.                                             }
  375.                                         },
  376.                                     },
  377.                                     BgMtl = Input {
  378.                                         SourceOp = "Blinn2_2",
  379.                                         Source = "MaterialOutput",
  380.                                         CustomData = {
  381.                                             Metadata = {
  382.                                                 Set = "BgMtl",
  383.                                                 Type = "Material",
  384.                                             }
  385.                                         },
  386.                                     },
  387.                                     FgMtl = Input {
  388.                                         SourceOp = "CookTorrance1",
  389.                                         Source = "MaterialOutput",
  390.                                         CustomData = {
  391.                                             Metadata = {
  392.                                                 Set = "FgMtl",
  393.                                                 Type = "Material",
  394.                                             }
  395.                                         },
  396.                                     },
  397.                                     Dissolve = Input {
  398.                                         Value = 1,
  399.                                         CustomData = {
  400.                                             Metadata = {
  401.                                                 Type = "Float",
  402.                                                 Set = "Dissolve",
  403.                                             }
  404.                                         },
  405.                                     },
  406.                                 },
  407.                                 ViewInfo = OperatorInfo {
  408.                                     Pos = { 1155, 115.5 },
  409.                                     Flags = {
  410.                                         ShowPic = true
  411.                                     }
  412.                                 },
  413.                                 UserControls = ordered() {
  414.                                     EffectMask = {
  415.                                         {
  416.                                             LINKID_DataType = "MtlGraph3D"
  417.                                         },
  418.                                         {
  419.                                             LINKID_DataType = "Image"
  420.                                         },
  421.                                         {
  422.                                             LINKID_AllowedDataType = "Image"
  423.                                         },
  424.                                         {
  425.                                             LINKID_AllowedDataType = "Mask"
  426.                                         },
  427.                                         LINK_Main = 3,
  428.                                         INP_AcceptsGLImages = true,
  429.                                         INPID_InputControl = "ImageControl",
  430.                                         IC_ControlPage = 0,
  431.                                         INP_Required = false,
  432.                                         INP_AcceptsMasks = true,
  433.                                     },
  434.                                     BgMtl = {
  435.                                         {
  436.                                             LINKID_DataType = "MtlGraph3D"
  437.                                         },
  438.                                         {
  439.                                             LINKID_DataType = "Image"
  440.                                         },
  441.                                         {
  442.                                             LINKID_AllowedDataType = "Image"
  443.                                         },
  444.                                         {
  445.                                             LINKID_AllowedDataType = "Mask"
  446.                                         },
  447.                                         LINK_Main = 1,
  448.                                         INP_AcceptsGLImages = true,
  449.                                         INPID_InputControl = "ImageControl",
  450.                                         IC_ControlPage = 0,
  451.                                         INP_Required = false,
  452.                                         INP_AcceptsMasks = true,
  453.                                     },
  454.                                     FgMtl = {
  455.                                         {
  456.                                             LINKID_DataType = "MtlGraph3D"
  457.                                         },
  458.                                         {
  459.                                             LINKID_DataType = "Image"
  460.                                         },
  461.                                         {
  462.                                             LINKID_AllowedDataType = "Image"
  463.                                         },
  464.                                         {
  465.                                             LINKID_AllowedDataType = "Mask"
  466.                                         },
  467.                                         LINK_Main = 2,
  468.                                         INP_AcceptsGLImages = true,
  469.                                         INPID_InputControl = "ImageControl",
  470.                                         IC_ControlPage = 0,
  471.                                         INP_Required = false,
  472.                                         INP_AcceptsMasks = true,
  473.                                     },
  474.                                     EffectMaskLabel = {
  475.                                         INPID_InputControl = "LabelControl",
  476.                                         IC_ControlPage = 1,
  477.                                         ICS_Name = "EffectMask",
  478.                                         ICD_Width = 0.9,
  479.                                         INP_Passive = true,
  480.                                         INP_External = false,
  481.                                     },
  482.                                     EffectMaskDeleteButton = {
  483.                                         LINKID_DataType = "Number",
  484.                                         INPID_InputControl = "MultiButtonControl",
  485.                                         INP_DoNotifyChanged = 1,
  486.                                         MBTNC_AddButton = "X",
  487.                                         MBTNC_Type = "Toggle",
  488.                                         ICD_Width = 0.1,
  489.                                         INP_External = 0,
  490.                                         ICS_Name = "",
  491.                                         IC_ControlPage = 1,
  492.                                         MBTNC_ButtonHeight = 18,
  493.                                     },
  494.                                     BgMtlLabel = {
  495.                                         INPID_InputControl = "LabelControl",
  496.                                         IC_ControlPage = 1,
  497.                                         ICS_Name = "BgMtl",
  498.                                         ICD_Width = 0.9,
  499.                                         INP_Passive = true,
  500.                                         INP_External = false,
  501.                                     },
  502.                                     BgMtlDeleteButton = {
  503.                                         LINKID_DataType = "Number",
  504.                                         INPID_InputControl = "MultiButtonControl",
  505.                                         INP_DoNotifyChanged = 1,
  506.                                         MBTNC_AddButton = "X",
  507.                                         MBTNC_Type = "Toggle",
  508.                                         ICD_Width = 0.1,
  509.                                         INP_External = 0,
  510.                                         ICS_Name = "",
  511.                                         IC_ControlPage = 1,
  512.                                         MBTNC_ButtonHeight = 18,
  513.                                     },
  514.                                     FgMtlLabel = {
  515.                                         INPID_InputControl = "LabelControl",
  516.                                         IC_ControlPage = 1,
  517.                                         ICS_Name = "FgMtl",
  518.                                         ICD_Width = 0.9,
  519.                                         INP_Passive = true,
  520.                                         INP_External = false,
  521.                                     },
  522.                                     FgMtlDeleteButton = {
  523.                                         LINKID_DataType = "Number",
  524.                                         INPID_InputControl = "MultiButtonControl",
  525.                                         INP_DoNotifyChanged = 1,
  526.                                         MBTNC_AddButton = "X",
  527.                                         MBTNC_Type = "Toggle",
  528.                                         ICD_Width = 0.1,
  529.                                         INP_External = 0,
  530.                                         ICS_Name = "",
  531.                                         IC_ControlPage = 1,
  532.                                         MBTNC_ButtonHeight = 18,
  533.                                     },
  534.                                     Dissolve = {
  535.                                         IC_ControlPage = 0,
  536.                                         LINKID_DataType = "Number",
  537.                                         INPID_InputControl = "SliderControl",
  538.                                     },
  539.                                     DissolveLabel = {
  540.                                         INPID_InputControl = "LabelControl",
  541.                                         IC_ControlPage = 1,
  542.                                         ICS_Name = "Dissolve",
  543.                                         ICD_Width = 0.9,
  544.                                         INP_Passive = true,
  545.                                         INP_External = false,
  546.                                     },
  547.                                     DissolveDeleteButton = {
  548.                                         LINKID_DataType = "Number",
  549.                                         INPID_InputControl = "MultiButtonControl",
  550.                                         INP_DoNotifyChanged = 1,
  551.                                         MBTNC_AddButton = "X",
  552.                                         MBTNC_Type = "Toggle",
  553.                                         ICD_Width = 0.1,
  554.                                         INP_External = 0,
  555.                                         ICS_Name = "",
  556.                                         IC_ControlPage = 1,
  557.                                         MBTNC_ButtonHeight = 18,
  558.                                     }
  559.                                 }
  560.                             }
  561.                         }
  562.                     },
  563.                     [3] = {
  564.                         Tools = ordered() {
  565.                             CustomShader3D_ScreenSpaceMask_1_1_1_1 = Indicated.CustomShaderOperator3D {
  566.                                 CtrlWZoom = false,
  567.                                 NameSet = true,
  568.                                 CustomData = {
  569.                                 },
  570.                                 Inputs = {
  571.                                     ShaderTextInputs = Input { Value = "FuFloat4 EffectMask;\nFuFloat4 BgMtl;\nFuFloat4 FgMtl;\nfloat Dissolve;\nfloat4x4 Projection;\n\n", },
  572.                                     ShaderTextBody = Input { Value = "float4 Shade(inout FuFragment f)\n{\n\n   float3 OldTexCoord0 = f.TexCoord0;  // Buffer to store the UV's so we can mess with them in the shader\n\n  float4 proj = mul(Projection,float4((f.Position),1));   // Going from eye-space to clip-space.  To multiply the float4x4 projection matrix and float3 Position, we need to add a 4th component, 1.0.  \n    \n  proj /= proj.w;    // Divide to get from 4D clip to 3D NDC (normalized device coordinates)\n\n  f.TexCoord0 = proj.xyz * .5 + .5;   // Normalizing from [-1,1] to [0,1]\n\n float4 ret = float4((FgMtl.Shade(f).xyz),1);\n\n f.TexCoord0 = OldTexCoord0;  // Set the UV's back to the buffer values\n\n    return ret;\n\n}", },
  573.                                     RCGroup = Input { Value = 1, },
  574.                                     RCMatrices = Input { Value = 256, },
  575.                                     MaterialGroup = Input { Value = 1, },
  576.                                     FloatGroup = Input { Value = 1, },
  577.                                     MaterialID = Input { Value = 1, },
  578.                                     EffectMask = Input {
  579.                                         CustomData = {
  580.                                             Metadata = {
  581.                                                 Set = "EffectMask",
  582.                                                 Type = "Material",
  583.                                             }
  584.                                         },
  585.                                     },
  586.                                     BgMtl = Input {
  587.                                         SourceOp = "Blinn2_2",
  588.                                         Source = "MaterialOutput",
  589.                                         CustomData = {
  590.                                             Metadata = {
  591.                                                 Set = "BgMtl",
  592.                                                 Type = "Material",
  593.                                             }
  594.                                         },
  595.                                     },
  596.                                     FgMtl = Input {
  597.                                         SourceOp = "CookTorrance1",
  598.                                         Source = "MaterialOutput",
  599.                                         CustomData = {
  600.                                             Metadata = {
  601.                                                 Set = "FgMtl",
  602.                                                 Type = "Material",
  603.                                             }
  604.                                         },
  605.                                     },
  606.                                     Dissolve = Input {
  607.                                         Value = 1,
  608.                                         CustomData = {
  609.                                             Metadata = {
  610.                                                 Type = "Float",
  611.                                                 Set = "Dissolve",
  612.                                             }
  613.                                         },
  614.                                     },
  615.                                 },
  616.                                 ViewInfo = OperatorInfo {
  617.                                     Pos = { 1155, 115.5 },
  618.                                     Flags = {
  619.                                         ShowPic = true
  620.                                     }
  621.                                 },
  622.                                 UserControls = ordered() {
  623.                                     EffectMask = {
  624.                                         {
  625.                                             LINKID_DataType = "MtlGraph3D"
  626.                                         },
  627.                                         {
  628.                                             LINKID_DataType = "Image"
  629.                                         },
  630.                                         {
  631.                                             LINKID_AllowedDataType = "Image"
  632.                                         },
  633.                                         {
  634.                                             LINKID_AllowedDataType = "Mask"
  635.                                         },
  636.                                         LINK_Main = 3,
  637.                                         INP_AcceptsGLImages = true,
  638.                                         INPID_InputControl = "ImageControl",
  639.                                         IC_ControlPage = 0,
  640.                                         INP_Required = false,
  641.                                         INP_AcceptsMasks = true,
  642.                                     },
  643.                                     BgMtl = {
  644.                                         {
  645.                                             LINKID_DataType = "MtlGraph3D"
  646.                                         },
  647.                                         {
  648.                                             LINKID_DataType = "Image"
  649.                                         },
  650.                                         {
  651.                                             LINKID_AllowedDataType = "Image"
  652.                                         },
  653.                                         {
  654.                                             LINKID_AllowedDataType = "Mask"
  655.                                         },
  656.                                         LINK_Main = 1,
  657.                                         INP_AcceptsGLImages = true,
  658.                                         INPID_InputControl = "ImageControl",
  659.                                         IC_ControlPage = 0,
  660.                                         INP_Required = false,
  661.                                         INP_AcceptsMasks = true,
  662.                                     },
  663.                                     FgMtl = {
  664.                                         {
  665.                                             LINKID_DataType = "MtlGraph3D"
  666.                                         },
  667.                                         {
  668.                                             LINKID_DataType = "Image"
  669.                                         },
  670.                                         {
  671.                                             LINKID_AllowedDataType = "Image"
  672.                                         },
  673.                                         {
  674.                                             LINKID_AllowedDataType = "Mask"
  675.                                         },
  676.                                         LINK_Main = 2,
  677.                                         INP_AcceptsGLImages = true,
  678.                                         INPID_InputControl = "ImageControl",
  679.                                         IC_ControlPage = 0,
  680.                                         INP_Required = false,
  681.                                         INP_AcceptsMasks = true,
  682.                                     },
  683.                                     EffectMaskLabel = {
  684.                                         INPID_InputControl = "LabelControl",
  685.                                         IC_ControlPage = 1,
  686.                                         ICS_Name = "EffectMask",
  687.                                         ICD_Width = 0.9,
  688.                                         INP_Passive = true,
  689.                                         INP_External = false,
  690.                                     },
  691.                                     EffectMaskDeleteButton = {
  692.                                         LINKID_DataType = "Number",
  693.                                         INPID_InputControl = "MultiButtonControl",
  694.                                         INP_DoNotifyChanged = 1,
  695.                                         MBTNC_AddButton = "X",
  696.                                         MBTNC_Type = "Toggle",
  697.                                         ICD_Width = 0.1,
  698.                                         INP_External = 0,
  699.                                         ICS_Name = "",
  700.                                         IC_ControlPage = 1,
  701.                                         MBTNC_ButtonHeight = 18,
  702.                                     },
  703.                                     BgMtlLabel = {
  704.                                         INPID_InputControl = "LabelControl",
  705.                                         IC_ControlPage = 1,
  706.                                         ICS_Name = "BgMtl",
  707.                                         ICD_Width = 0.9,
  708.                                         INP_Passive = true,
  709.                                         INP_External = false,
  710.                                     },
  711.                                     BgMtlDeleteButton = {
  712.                                         LINKID_DataType = "Number",
  713.                                         INPID_InputControl = "MultiButtonControl",
  714.                                         INP_DoNotifyChanged = 1,
  715.                                         MBTNC_AddButton = "X",
  716.                                         MBTNC_Type = "Toggle",
  717.                                         ICD_Width = 0.1,
  718.                                         INP_External = 0,
  719.                                         ICS_Name = "",
  720.                                         IC_ControlPage = 1,
  721.                                         MBTNC_ButtonHeight = 18,
  722.                                     },
  723.                                     FgMtlLabel = {
  724.                                         INPID_InputControl = "LabelControl",
  725.                                         IC_ControlPage = 1,
  726.                                         ICS_Name = "FgMtl",
  727.                                         ICD_Width = 0.9,
  728.                                         INP_Passive = true,
  729.                                         INP_External = false,
  730.                                     },
  731.                                     FgMtlDeleteButton = {
  732.                                         LINKID_DataType = "Number",
  733.                                         INPID_InputControl = "MultiButtonControl",
  734.                                         INP_DoNotifyChanged = 1,
  735.                                         MBTNC_AddButton = "X",
  736.                                         MBTNC_Type = "Toggle",
  737.                                         ICD_Width = 0.1,
  738.                                         INP_External = 0,
  739.                                         ICS_Name = "",
  740.                                         IC_ControlPage = 1,
  741.                                         MBTNC_ButtonHeight = 18,
  742.                                     },
  743.                                     Dissolve = {
  744.                                         IC_ControlPage = 0,
  745.                                         LINKID_DataType = "Number",
  746.                                         INPID_InputControl = "SliderControl",
  747.                                     },
  748.                                     DissolveLabel = {
  749.                                         INPID_InputControl = "LabelControl",
  750.                                         IC_ControlPage = 1,
  751.                                         ICS_Name = "Dissolve",
  752.                                         ICD_Width = 0.9,
  753.                                         INP_Passive = true,
  754.                                         INP_External = false,
  755.                                     },
  756.                                     DissolveDeleteButton = {
  757.                                         LINKID_DataType = "Number",
  758.                                         INPID_InputControl = "MultiButtonControl",
  759.                                         INP_DoNotifyChanged = 1,
  760.                                         MBTNC_AddButton = "X",
  761.                                         MBTNC_Type = "Toggle",
  762.                                         ICD_Width = 0.1,
  763.                                         INP_External = 0,
  764.                                         ICS_Name = "",
  765.                                         IC_ControlPage = 1,
  766.                                         MBTNC_ButtonHeight = 18,
  767.                                     }
  768.                                 }
  769.                             }
  770.                         }
  771.                     },
  772.                     [4] = {
  773.                         Tools = ordered() {
  774.                             CustomShader3D_ScreenSpaceMask_1_1_1_1 = Indicated.CustomShaderOperator3D {
  775.                                 CtrlWZoom = false,
  776.                                 NameSet = true,
  777.                                 CustomData = {
  778.                                 },
  779.                                 Inputs = {
  780.                                     ShaderTextInputs = Input { Value = "FuFloat4 EffectMask;\nFuFloat4 BgMtl;\nFuFloat4 FgMtl;\nfloat Dissolve;\nfloat4x4 Projection;\n\n", },
  781.                                     ShaderTextBody = Input { Value = "float4 Shade(inout FuFragment f)\n{\n\n   float3 OldTexCoord0 = f.TexCoord0;  // Buffer to store the UV's so we can mess with them in the shader\n\n  float4 proj = mul(Projection,float4((f.Position),1));   // Going from eye-space to clip-space.  To multiply the float4x4 projection matrix and float3 Position, we need to add a 4th component, 1.0.  \n    \n  proj /= proj.w;    // Divide to get from 4D clip to 3D NDC (normalized device coordinates)\n\n  f.TexCoord0 = proj.rgb * .5 + .5;   // Normalizing from [-1,1] to [0,1]\n\n float4 ret = float4((FgMtl.Shade(f).xyz),1);\n\n f.TexCoord0 = OldTexCoord0;  // Set the UV's back to the buffer values\n\n    return ret;\n\n}", },
  782.                                     RCGroup = Input { Value = 1, },
  783.                                     RCMatrices = Input { Value = 256, },
  784.                                     MaterialGroup = Input { Value = 1, },
  785.                                     FloatGroup = Input { Value = 1, },
  786.                                     MaterialID = Input { Value = 1, },
  787.                                     EffectMask = Input {
  788.                                         CustomData = {
  789.                                             Metadata = {
  790.                                                 Set = "EffectMask",
  791.                                                 Type = "Material",
  792.                                             }
  793.                                         },
  794.                                     },
  795.                                     BgMtl = Input {
  796.                                         SourceOp = "Blinn2_2",
  797.                                         Source = "MaterialOutput",
  798.                                         CustomData = {
  799.                                             Metadata = {
  800.                                                 Set = "BgMtl",
  801.                                                 Type = "Material",
  802.                                             }
  803.                                         },
  804.                                     },
  805.                                     FgMtl = Input {
  806.                                         SourceOp = "CookTorrance1",
  807.                                         Source = "MaterialOutput",
  808.                                         CustomData = {
  809.                                             Metadata = {
  810.                                                 Set = "FgMtl",
  811.                                                 Type = "Material",
  812.                                             }
  813.                                         },
  814.                                     },
  815.                                     Dissolve = Input {
  816.                                         Value = 1,
  817.                                         CustomData = {
  818.                                             Metadata = {
  819.                                                 Type = "Float",
  820.                                                 Set = "Dissolve",
  821.                                             }
  822.                                         },
  823.                                     },
  824.                                 },
  825.                                 ViewInfo = OperatorInfo {
  826.                                     Pos = { 1155, 115.5 },
  827.                                     Flags = {
  828.                                         ShowPic = true
  829.                                     }
  830.                                 },
  831.                                 UserControls = ordered() {
  832.                                     EffectMask = {
  833.                                         {
  834.                                             LINKID_DataType = "MtlGraph3D"
  835.                                         },
  836.                                         {
  837.                                             LINKID_DataType = "Image"
  838.                                         },
  839.                                         {
  840.                                             LINKID_AllowedDataType = "Image"
  841.                                         },
  842.                                         {
  843.                                             LINKID_AllowedDataType = "Mask"
  844.                                         },
  845.                                         LINK_Main = 3,
  846.                                         INP_AcceptsGLImages = true,
  847.                                         INPID_InputControl = "ImageControl",
  848.                                         IC_ControlPage = 0,
  849.                                         INP_Required = false,
  850.                                         INP_AcceptsMasks = true,
  851.                                     },
  852.                                     BgMtl = {
  853.                                         {
  854.                                             LINKID_DataType = "MtlGraph3D"
  855.                                         },
  856.                                         {
  857.                                             LINKID_DataType = "Image"
  858.                                         },
  859.                                         {
  860.                                             LINKID_AllowedDataType = "Image"
  861.                                         },
  862.                                         {
  863.                                             LINKID_AllowedDataType = "Mask"
  864.                                         },
  865.                                         LINK_Main = 1,
  866.                                         INP_AcceptsGLImages = true,
  867.                                         INPID_InputControl = "ImageControl",
  868.                                         IC_ControlPage = 0,
  869.                                         INP_Required = false,
  870.                                         INP_AcceptsMasks = true,
  871.                                     },
  872.                                     FgMtl = {
  873.                                         {
  874.                                             LINKID_DataType = "MtlGraph3D"
  875.                                         },
  876.                                         {
  877.                                             LINKID_DataType = "Image"
  878.                                         },
  879.                                         {
  880.                                             LINKID_AllowedDataType = "Image"
  881.                                         },
  882.                                         {
  883.                                             LINKID_AllowedDataType = "Mask"
  884.                                         },
  885.                                         LINK_Main = 2,
  886.                                         INP_AcceptsGLImages = true,
  887.                                         INPID_InputControl = "ImageControl",
  888.                                         IC_ControlPage = 0,
  889.                                         INP_Required = false,
  890.                                         INP_AcceptsMasks = true,
  891.                                     },
  892.                                     EffectMaskLabel = {
  893.                                         INPID_InputControl = "LabelControl",
  894.                                         IC_ControlPage = 1,
  895.                                         ICS_Name = "EffectMask",
  896.                                         ICD_Width = 0.9,
  897.                                         INP_Passive = true,
  898.                                         INP_External = false,
  899.                                     },
  900.                                     EffectMaskDeleteButton = {
  901.                                         LINKID_DataType = "Number",
  902.                                         INPID_InputControl = "MultiButtonControl",
  903.                                         INP_DoNotifyChanged = 1,
  904.                                         MBTNC_AddButton = "X",
  905.                                         MBTNC_Type = "Toggle",
  906.                                         ICD_Width = 0.1,
  907.                                         INP_External = 0,
  908.                                         ICS_Name = "",
  909.                                         IC_ControlPage = 1,
  910.                                         MBTNC_ButtonHeight = 18,
  911.                                     },
  912.                                     BgMtlLabel = {
  913.                                         INPID_InputControl = "LabelControl",
  914.                                         IC_ControlPage = 1,
  915.                                         ICS_Name = "BgMtl",
  916.                                         ICD_Width = 0.9,
  917.                                         INP_Passive = true,
  918.                                         INP_External = false,
  919.                                     },
  920.                                     BgMtlDeleteButton = {
  921.                                         LINKID_DataType = "Number",
  922.                                         INPID_InputControl = "MultiButtonControl",
  923.                                         INP_DoNotifyChanged = 1,
  924.                                         MBTNC_AddButton = "X",
  925.                                         MBTNC_Type = "Toggle",
  926.                                         ICD_Width = 0.1,
  927.                                         INP_External = 0,
  928.                                         ICS_Name = "",
  929.                                         IC_ControlPage = 1,
  930.                                         MBTNC_ButtonHeight = 18,
  931.                                     },
  932.                                     FgMtlLabel = {
  933.                                         INPID_InputControl = "LabelControl",
  934.                                         IC_ControlPage = 1,
  935.                                         ICS_Name = "FgMtl",
  936.                                         ICD_Width = 0.9,
  937.                                         INP_Passive = true,
  938.                                         INP_External = false,
  939.                                     },
  940.                                     FgMtlDeleteButton = {
  941.                                         LINKID_DataType = "Number",
  942.                                         INPID_InputControl = "MultiButtonControl",
  943.                                         INP_DoNotifyChanged = 1,
  944.                                         MBTNC_AddButton = "X",
  945.                                         MBTNC_Type = "Toggle",
  946.                                         ICD_Width = 0.1,
  947.                                         INP_External = 0,
  948.                                         ICS_Name = "",
  949.                                         IC_ControlPage = 1,
  950.                                         MBTNC_ButtonHeight = 18,
  951.                                     },
  952.                                     Dissolve = {
  953.                                         IC_ControlPage = 0,
  954.                                         LINKID_DataType = "Number",
  955.                                         INPID_InputControl = "SliderControl",
  956.                                     },
  957.                                     DissolveLabel = {
  958.                                         INPID_InputControl = "LabelControl",
  959.                                         IC_ControlPage = 1,
  960.                                         ICS_Name = "Dissolve",
  961.                                         ICD_Width = 0.9,
  962.                                         INP_Passive = true,
  963.                                         INP_External = false,
  964.                                     },
  965.                                     DissolveDeleteButton = {
  966.                                         LINKID_DataType = "Number",
  967.                                         INPID_InputControl = "MultiButtonControl",
  968.                                         INP_DoNotifyChanged = 1,
  969.                                         MBTNC_AddButton = "X",
  970.                                         MBTNC_Type = "Toggle",
  971.                                         ICD_Width = 0.1,
  972.                                         INP_External = 0,
  973.                                         ICS_Name = "",
  974.                                         IC_ControlPage = 1,
  975.                                         MBTNC_ButtonHeight = 18,
  976.                                     }
  977.                                 }
  978.                             }
  979.                         }
  980.                     },
  981.                     [5] = {
  982.                         Tools = ordered() {
  983.                             CustomShader3D_ScreenSpaceMask_1_1_1_1 = Indicated.CustomShaderOperator3D {
  984.                                 CtrlWZoom = false,
  985.                                 NameSet = true,
  986.                                 CustomData = {
  987.                                 },
  988.                                 Inputs = {
  989.                                     ShaderTextInputs = Input { Value = "FuFloat4 EffectMask;\nFuFloat4 BgMtl;\nFuFloat4 FgMtl;\nfloat Dissolve;\nfloat4x4 Projection;\n\n", },
  990.                                     ShaderTextBody = Input { Value = "float4 Shade(inout FuFragment f)\n{\n\n   float3 OldTexCoord0 = f.TexCoord0;  // Buffer to store the UV's so we can mess with them in the shader\n\n  float4 proj = mul(Projection,float4((f.Position),1));   // Going from eye-space to clip-space.  To multiply the float4x4 projection matrix and float3 Position, we need to add a 4th component, 1.0.  \n    \n  proj /= proj.w;    // Divide to get from 4D clip to 3D NDC (normalized device coordinates)\n\n  f.TexCoord0 = proj.rgb * .5 + .5;   // Normalizing from [-1,1] to [0,1]\n\n float4 ret = float4((FgMtl.Shade(f).xyz),1);\n\n f.TexCoord0 = OldTexCoord0;  // Set the UV's back to the buffer values\n\n    return ret;\n\n}", },
  991.                                     RCGroup = Input { Value = 1, },
  992.                                     RCMatrices = Input { Value = 256, },
  993.                                     MaterialGroup = Input { Value = 1, },
  994.                                     FloatGroup = Input { Value = 1, },
  995.                                     MaterialID = Input { Value = 1, },
  996.                                     EffectMask = Input {
  997.                                         CustomData = {
  998.                                             Metadata = {
  999.                                                 Set = "EffectMask",
  1000.                                                 Type = "Material",
  1001.                                             }
  1002.                                         },
  1003.                                     },
  1004.                                     BgMtl = Input {
  1005.                                         SourceOp = "Blinn2_2",
  1006.                                         Source = "MaterialOutput",
  1007.                                         CustomData = {
  1008.                                             Metadata = {
  1009.                                                 Set = "BgMtl",
  1010.                                                 Type = "Material",
  1011.                                             }
  1012.                                         },
  1013.                                     },
  1014.                                     FgMtl = Input {
  1015.                                         SourceOp = "ChannelBooleans1",
  1016.                                         Source = "Output",
  1017.                                         CustomData = {
  1018.                                             Metadata = {
  1019.                                                 Set = "FgMtl",
  1020.                                                 Type = "Material",
  1021.                                             }
  1022.                                         },
  1023.                                     },
  1024.                                     Dissolve = Input {
  1025.                                         Value = 1,
  1026.                                         CustomData = {
  1027.                                             Metadata = {
  1028.                                                 Type = "Float",
  1029.                                                 Set = "Dissolve",
  1030.                                             }
  1031.                                         },
  1032.                                     },
  1033.                                 },
  1034.                                 ViewInfo = OperatorInfo {
  1035.                                     Pos = { 1155, 115.5 },
  1036.                                     Flags = {
  1037.                                         ShowPic = true
  1038.                                     }
  1039.                                 },
  1040.                                 UserControls = ordered() {
  1041.                                     EffectMask = {
  1042.                                         {
  1043.                                             LINKID_DataType = "MtlGraph3D"
  1044.                                         },
  1045.                                         {
  1046.                                             LINKID_DataType = "Image"
  1047.                                         },
  1048.                                         {
  1049.                                             LINKID_AllowedDataType = "Image"
  1050.                                         },
  1051.                                         {
  1052.                                             LINKID_AllowedDataType = "Mask"
  1053.                                         },
  1054.                                         LINK_Main = 3,
  1055.                                         INP_AcceptsGLImages = true,
  1056.                                         INPID_InputControl = "ImageControl",
  1057.                                         IC_ControlPage = 0,
  1058.                                         INP_Required = false,
  1059.                                         INP_AcceptsMasks = true,
  1060.                                     },
  1061.                                     BgMtl = {
  1062.                                         {
  1063.                                             LINKID_DataType = "MtlGraph3D"
  1064.                                         },
  1065.                                         {
  1066.                                             LINKID_DataType = "Image"
  1067.                                         },
  1068.                                         {
  1069.                                             LINKID_AllowedDataType = "Image"
  1070.                                         },
  1071.                                         {
  1072.                                             LINKID_AllowedDataType = "Mask"
  1073.                                         },
  1074.                                         LINK_Main = 1,
  1075.                                         INP_AcceptsGLImages = true,
  1076.                                         INPID_InputControl = "ImageControl",
  1077.                                         IC_ControlPage = 0,
  1078.                                         INP_Required = false,
  1079.                                         INP_AcceptsMasks = true,
  1080.                                     },
  1081.                                     FgMtl = {
  1082.                                         {
  1083.                                             LINKID_DataType = "MtlGraph3D"
  1084.                                         },
  1085.                                         {
  1086.                                             LINKID_DataType = "Image"
  1087.                                         },
  1088.                                         {
  1089.                                             LINKID_AllowedDataType = "Image"
  1090.                                         },
  1091.                                         {
  1092.                                             LINKID_AllowedDataType = "Mask"
  1093.                                         },
  1094.                                         LINK_Main = 2,
  1095.                                         INP_AcceptsGLImages = true,
  1096.                                         INPID_InputControl = "ImageControl",
  1097.                                         IC_ControlPage = 0,
  1098.                                         INP_Required = false,
  1099.                                         INP_AcceptsMasks = true,
  1100.                                     },
  1101.                                     EffectMaskLabel = {
  1102.                                         INPID_InputControl = "LabelControl",
  1103.                                         IC_ControlPage = 1,
  1104.                                         ICS_Name = "EffectMask",
  1105.                                         ICD_Width = 0.9,
  1106.                                         INP_Passive = true,
  1107.                                         INP_External = false,
  1108.                                     },
  1109.                                     EffectMaskDeleteButton = {
  1110.                                         LINKID_DataType = "Number",
  1111.                                         INPID_InputControl = "MultiButtonControl",
  1112.                                         INP_DoNotifyChanged = 1,
  1113.                                         MBTNC_AddButton = "X",
  1114.                                         MBTNC_Type = "Toggle",
  1115.                                         ICD_Width = 0.1,
  1116.                                         INP_External = 0,
  1117.                                         ICS_Name = "",
  1118.                                         IC_ControlPage = 1,
  1119.                                         MBTNC_ButtonHeight = 18,
  1120.                                     },
  1121.                                     BgMtlLabel = {
  1122.                                         INPID_InputControl = "LabelControl",
  1123.                                         IC_ControlPage = 1,
  1124.                                         ICS_Name = "BgMtl",
  1125.                                         ICD_Width = 0.9,
  1126.                                         INP_Passive = true,
  1127.                                         INP_External = false,
  1128.                                     },
  1129.                                     BgMtlDeleteButton = {
  1130.                                         LINKID_DataType = "Number",
  1131.                                         INPID_InputControl = "MultiButtonControl",
  1132.                                         INP_DoNotifyChanged = 1,
  1133.                                         MBTNC_AddButton = "X",
  1134.                                         MBTNC_Type = "Toggle",
  1135.                                         ICD_Width = 0.1,
  1136.                                         INP_External = 0,
  1137.                                         ICS_Name = "",
  1138.                                         IC_ControlPage = 1,
  1139.                                         MBTNC_ButtonHeight = 18,
  1140.                                     },
  1141.                                     FgMtlLabel = {
  1142.                                         INPID_InputControl = "LabelControl",
  1143.                                         IC_ControlPage = 1,
  1144.                                         ICS_Name = "FgMtl",
  1145.                                         ICD_Width = 0.9,
  1146.                                         INP_Passive = true,
  1147.                                         INP_External = false,
  1148.                                     },
  1149.                                     FgMtlDeleteButton = {
  1150.                                         LINKID_DataType = "Number",
  1151.                                         INPID_InputControl = "MultiButtonControl",
  1152.                                         INP_DoNotifyChanged = 1,
  1153.                                         MBTNC_AddButton = "X",
  1154.                                         MBTNC_Type = "Toggle",
  1155.                                         ICD_Width = 0.1,
  1156.                                         INP_External = 0,
  1157.                                         ICS_Name = "",
  1158.                                         IC_ControlPage = 1,
  1159.                                         MBTNC_ButtonHeight = 18,
  1160.                                     },
  1161.                                     Dissolve = {
  1162.                                         IC_ControlPage = 0,
  1163.                                         LINKID_DataType = "Number",
  1164.                                         INPID_InputControl = "SliderControl",
  1165.                                     },
  1166.                                     DissolveLabel = {
  1167.                                         INPID_InputControl = "LabelControl",
  1168.                                         IC_ControlPage = 1,
  1169.                                         ICS_Name = "Dissolve",
  1170.                                         ICD_Width = 0.9,
  1171.                                         INP_Passive = true,
  1172.                                         INP_External = false,
  1173.                                     },
  1174.                                     DissolveDeleteButton = {
  1175.                                         LINKID_DataType = "Number",
  1176.                                         INPID_InputControl = "MultiButtonControl",
  1177.                                         INP_DoNotifyChanged = 1,
  1178.                                         MBTNC_AddButton = "X",
  1179.                                         MBTNC_Type = "Toggle",
  1180.                                         ICD_Width = 0.1,
  1181.                                         INP_External = 0,
  1182.                                         ICS_Name = "",
  1183.                                         IC_ControlPage = 1,
  1184.                                         MBTNC_ButtonHeight = 18,
  1185.                                     }
  1186.                                 },
  1187.                                 Name = "CustomShader3D_ScreenSpaceMask_1_1_1_1"
  1188.                             }
  1189.                         }
  1190.                     },
  1191.                     [6] = {
  1192.                         Tools = ordered() {
  1193.                             CustomShader3D_ScreenSpaceMask_1_1_1_1 = Indicated.CustomShaderOperator3D {
  1194.                                 CtrlWZoom = false,
  1195.                                 NameSet = true,
  1196.                                 CustomData = {
  1197.                                 },
  1198.                                 Inputs = {
  1199.                                     ShaderTextInputs = Input { Value = "FuFloat4 EffectMask;\nFuFloat4 BgMtl;\nFuFloat4 FgMtl;\nfloat Dissolve;\nfloat4x4 Projection;\n\n", },
  1200.                                     ShaderTextBody = Input { Value = "float4 Shade(inout FuFragment f)\n{\n\n   float3 OldTexCoord0 = f.TexCoord0;  // Buffer to store the UV's so we can mess with them in the shader\n\n  float4 proj = mul(Projection,float4((f.Position),1));   // Going from eye-space to clip-space.  To multiply the float4x4 projection matrix and float3 Position, we need to add a 4th component, 1.0.  \n    \n  proj /= proj.w;    // Divide to get from 4D clip to 3D NDC (normalized device coordinates)\n\n  f.TexCoord0 = proj.rgb * .5 + .5;   // Normalizing from [-1,1] to [0,1]\n\n float4 ret.xyz = float4((FgMtl.Shade(f).xyz),1);\n\n f.TexCoord0 = OldTexCoord0;  // Set the UV's back to the buffer values\n\n    return ret;\n\n}", },
  1201.                                     RCGroup = Input { Value = 1, },
  1202.                                     RCMatrices = Input { Value = 256, },
  1203.                                     MaterialGroup = Input { Value = 1, },
  1204.                                     FloatGroup = Input { Value = 1, },
  1205.                                     MaterialID = Input { Value = 1, },
  1206.                                     EffectMask = Input {
  1207.                                         CustomData = {
  1208.                                             Metadata = {
  1209.                                                 Set = "EffectMask",
  1210.                                                 Type = "Material",
  1211.                                             }
  1212.                                         },
  1213.                                     },
  1214.                                     BgMtl = Input {
  1215.                                         SourceOp = "Blinn2_2",
  1216.                                         Source = "MaterialOutput",
  1217.                                         CustomData = {
  1218.                                             Metadata = {
  1219.                                                 Set = "BgMtl",
  1220.                                                 Type = "Material",
  1221.                                             }
  1222.                                         },
  1223.                                     },
  1224.                                     FgMtl = Input {
  1225.                                         SourceOp = "ChannelBooleans1",
  1226.                                         Source = "Output",
  1227.                                         CustomData = {
  1228.                                             Metadata = {
  1229.                                                 Set = "FgMtl",
  1230.                                                 Type = "Material",
  1231.                                             }
  1232.                                         },
  1233.                                     },
  1234.                                     Dissolve = Input {
  1235.                                         Value = 1,
  1236.                                         CustomData = {
  1237.                                             Metadata = {
  1238.                                                 Type = "Float",
  1239.                                                 Set = "Dissolve",
  1240.                                             }
  1241.                                         },
  1242.                                     },
  1243.                                 },
  1244.                                 ViewInfo = OperatorInfo {
  1245.                                     Pos = { 1155, 115.5 },
  1246.                                     Flags = {
  1247.                                         ShowPic = true
  1248.                                     }
  1249.                                 },
  1250.                                 UserControls = ordered() {
  1251.                                     EffectMask = {
  1252.                                         {
  1253.                                             LINKID_DataType = "MtlGraph3D"
  1254.                                         },
  1255.                                         {
  1256.                                             LINKID_DataType = "Image"
  1257.                                         },
  1258.                                         {
  1259.                                             LINKID_AllowedDataType = "Image"
  1260.                                         },
  1261.                                         {
  1262.                                             LINKID_AllowedDataType = "Mask"
  1263.                                         },
  1264.                                         LINK_Main = 3,
  1265.                                         INP_AcceptsGLImages = true,
  1266.                                         INPID_InputControl = "ImageControl",
  1267.                                         IC_ControlPage = 0,
  1268.                                         INP_Required = false,
  1269.                                         INP_AcceptsMasks = true,
  1270.                                     },
  1271.                                     BgMtl = {
  1272.                                         {
  1273.                                             LINKID_DataType = "MtlGraph3D"
  1274.                                         },
  1275.                                         {
  1276.                                             LINKID_DataType = "Image"
  1277.                                         },
  1278.                                         {
  1279.                                             LINKID_AllowedDataType = "Image"
  1280.                                         },
  1281.                                         {
  1282.                                             LINKID_AllowedDataType = "Mask"
  1283.                                         },
  1284.                                         LINK_Main = 1,
  1285.                                         INP_AcceptsGLImages = true,
  1286.                                         INPID_InputControl = "ImageControl",
  1287.                                         IC_ControlPage = 0,
  1288.                                         INP_Required = false,
  1289.                                         INP_AcceptsMasks = true,
  1290.                                     },
  1291.                                     FgMtl = {
  1292.                                         {
  1293.                                             LINKID_DataType = "MtlGraph3D"
  1294.                                         },
  1295.                                         {
  1296.                                             LINKID_DataType = "Image"
  1297.                                         },
  1298.                                         {
  1299.                                             LINKID_AllowedDataType = "Image"
  1300.                                         },
  1301.                                         {
  1302.                                             LINKID_AllowedDataType = "Mask"
  1303.                                         },
  1304.                                         LINK_Main = 2,
  1305.                                         INP_AcceptsGLImages = true,
  1306.                                         INPID_InputControl = "ImageControl",
  1307.                                         IC_ControlPage = 0,
  1308.                                         INP_Required = false,
  1309.                                         INP_AcceptsMasks = true,
  1310.                                     },
  1311.                                     EffectMaskLabel = {
  1312.                                         INPID_InputControl = "LabelControl",
  1313.                                         IC_ControlPage = 1,
  1314.                                         ICS_Name = "EffectMask",
  1315.                                         ICD_Width = 0.9,
  1316.                                         INP_Passive = true,
  1317.                                         INP_External = false,
  1318.                                     },
  1319.                                     EffectMaskDeleteButton = {
  1320.                                         LINKID_DataType = "Number",
  1321.                                         INPID_InputControl = "MultiButtonControl",
  1322.                                         INP_DoNotifyChanged = 1,
  1323.                                         MBTNC_AddButton = "X",
  1324.                                         MBTNC_Type = "Toggle",
  1325.                                         ICD_Width = 0.1,
  1326.                                         INP_External = 0,
  1327.                                         ICS_Name = "",
  1328.                                         IC_ControlPage = 1,
  1329.                                         MBTNC_ButtonHeight = 18,
  1330.                                     },
  1331.                                     BgMtlLabel = {
  1332.                                         INPID_InputControl = "LabelControl",
  1333.                                         IC_ControlPage = 1,
  1334.                                         ICS_Name = "BgMtl",
  1335.                                         ICD_Width = 0.9,
  1336.                                         INP_Passive = true,
  1337.                                         INP_External = false,
  1338.                                     },
  1339.                                     BgMtlDeleteButton = {
  1340.                                         LINKID_DataType = "Number",
  1341.                                         INPID_InputControl = "MultiButtonControl",
  1342.                                         INP_DoNotifyChanged = 1,
  1343.                                         MBTNC_AddButton = "X",
  1344.                                         MBTNC_Type = "Toggle",
  1345.                                         ICD_Width = 0.1,
  1346.                                         INP_External = 0,
  1347.                                         ICS_Name = "",
  1348.                                         IC_ControlPage = 1,
  1349.                                         MBTNC_ButtonHeight = 18,
  1350.                                     },
  1351.                                     FgMtlLabel = {
  1352.                                         INPID_InputControl = "LabelControl",
  1353.                                         IC_ControlPage = 1,
  1354.                                         ICS_Name = "FgMtl",
  1355.                                         ICD_Width = 0.9,
  1356.                                         INP_Passive = true,
  1357.                                         INP_External = false,
  1358.                                     },
  1359.                                     FgMtlDeleteButton = {
  1360.                                         LINKID_DataType = "Number",
  1361.                                         INPID_InputControl = "MultiButtonControl",
  1362.                                         INP_DoNotifyChanged = 1,
  1363.                                         MBTNC_AddButton = "X",
  1364.                                         MBTNC_Type = "Toggle",
  1365.                                         ICD_Width = 0.1,
  1366.                                         INP_External = 0,
  1367.                                         ICS_Name = "",
  1368.                                         IC_ControlPage = 1,
  1369.                                         MBTNC_ButtonHeight = 18,
  1370.                                     },
  1371.                                     Dissolve = {
  1372.                                         IC_ControlPage = 0,
  1373.                                         LINKID_DataType = "Number",
  1374.                                         INPID_InputControl = "SliderControl",
  1375.                                     },
  1376.                                     DissolveLabel = {
  1377.                                         INPID_InputControl = "LabelControl",
  1378.                                         IC_ControlPage = 1,
  1379.                                         ICS_Name = "Dissolve",
  1380.                                         ICD_Width = 0.9,
  1381.                                         INP_Passive = true,
  1382.                                         INP_External = false,
  1383.                                     },
  1384.                                     DissolveDeleteButton = {
  1385.                                         LINKID_DataType = "Number",
  1386.                                         INPID_InputControl = "MultiButtonControl",
  1387.                                         INP_DoNotifyChanged = 1,
  1388.                                         MBTNC_AddButton = "X",
  1389.                                         MBTNC_Type = "Toggle",
  1390.                                         ICD_Width = 0.1,
  1391.                                         INP_External = 0,
  1392.                                         ICS_Name = "",
  1393.                                         IC_ControlPage = 1,
  1394.                                         MBTNC_ButtonHeight = 18,
  1395.                                     }
  1396.                                 }
  1397.                             }
  1398.                         }
  1399.                     }
  1400.                 }
  1401.             },
  1402.             Inputs = {
  1403.                 ShaderTextInputs = Input { Value = "FuFloat4 EffectMask;\nFuFloat4 BgMtl;\nFuFloat4 FgMtl;\nfloat Dissolve;\nfloat4x4 Projection;\n\n", },
  1404.                 ShaderTextBody = Input { Value = "float4 Shade(inout FuFragment f)\n{\n\n   float3 OldTexCoord0 = f.TexCoord0;  // Buffer to store the UV's so we can mess with them in the shader\n\n  float4 proj = mul(Projection,float4((f.Position),1));   // Going from eye-space to clip-space.  To multiply the float4x4 projection matrix and float3 Position, we need to add a 4th component, 1.0.  \n    \n  proj /= proj.w;    // Divide to get from 4D clip to 3D NDC (normalized device coordinates)\n\n  f.TexCoord0 = proj.rgb * .5 + .5;   // Normalizing from [-1,1] to [0,1]\n\n float4 ret = float4((FgMtl.Shade(f).xyz),1);\n\n f.TexCoord0 = OldTexCoord0;  // Set the UV's back to the buffer values\n\n    return ret;\n\n}", },
  1405.                 RCGroup = Input { Value = 1, },
  1406.                 RCMatrices = Input { Value = 256, },
  1407.                 MaterialGroup = Input { Value = 1, },
  1408.                 FloatGroup = Input { Value = 1, },
  1409.                 MaterialID = Input { Value = 1, },
  1410.                 EffectMask = Input {
  1411.                     CustomData = {
  1412.                         Metadata = {
  1413.                             Set = "EffectMask",
  1414.                             Type = "Material",
  1415.                         }
  1416.                     },
  1417.                 },
  1418.                 BgMtl = Input {
  1419.                     SourceOp = "Blinn2_2",
  1420.                     Source = "MaterialOutput",
  1421.                     CustomData = {
  1422.                         Metadata = {
  1423.                             Set = "BgMtl",
  1424.                             Type = "Material",
  1425.                         }
  1426.                     },
  1427.                 },
  1428.                 FgMtl = Input {
  1429.                     SourceOp = "ChannelBooleans1",
  1430.                     Source = "Output",
  1431.                     CustomData = {
  1432.                         Metadata = {
  1433.                             Set = "FgMtl",
  1434.                             Type = "Material",
  1435.                         }
  1436.                     },
  1437.                 },
  1438.                 Dissolve = Input {
  1439.                     Value = 1,
  1440.                     CustomData = {
  1441.                         Metadata = {
  1442.                             Type = "Float",
  1443.                             Set = "Dissolve",
  1444.                         }
  1445.                     },
  1446.                 },
  1447.             },
  1448.             ViewInfo = OperatorInfo {
  1449.                 Pos = { 1155, 115.5 },
  1450.                 Flags = {
  1451.                     ShowPic = true
  1452.                 }
  1453.             },
  1454.             UserControls = ordered() {
  1455.                 EffectMask = {
  1456.                     {
  1457.                         LINKID_DataType = "MtlGraph3D"
  1458.                     },
  1459.                     {
  1460.                         LINKID_DataType = "Image"
  1461.                     },
  1462.                     {
  1463.                         LINKID_AllowedDataType = "Image"
  1464.                     },
  1465.                     {
  1466.                         LINKID_AllowedDataType = "Mask"
  1467.                     },
  1468.                     LINK_Main = 3,
  1469.                     INP_AcceptsGLImages = true,
  1470.                     INPID_InputControl = "ImageControl",
  1471.                     IC_ControlPage = 0,
  1472.                     INP_Required = false,
  1473.                     INP_AcceptsMasks = true,
  1474.                 },
  1475.                 BgMtl = {
  1476.                     {
  1477.                         LINKID_DataType = "MtlGraph3D"
  1478.                     },
  1479.                     {
  1480.                         LINKID_DataType = "Image"
  1481.                     },
  1482.                     {
  1483.                         LINKID_AllowedDataType = "Image"
  1484.                     },
  1485.                     {
  1486.                         LINKID_AllowedDataType = "Mask"
  1487.                     },
  1488.                     LINK_Main = 1,
  1489.                     INP_AcceptsGLImages = true,
  1490.                     INPID_InputControl = "ImageControl",
  1491.                     IC_ControlPage = 0,
  1492.                     INP_Required = false,
  1493.                     INP_AcceptsMasks = true,
  1494.                 },
  1495.                 FgMtl = {
  1496.                     {
  1497.                         LINKID_DataType = "MtlGraph3D"
  1498.                     },
  1499.                     {
  1500.                         LINKID_DataType = "Image"
  1501.                     },
  1502.                     {
  1503.                         LINKID_AllowedDataType = "Image"
  1504.                     },
  1505.                     {
  1506.                         LINKID_AllowedDataType = "Mask"
  1507.                     },
  1508.                     LINK_Main = 2,
  1509.                     INP_AcceptsGLImages = true,
  1510.                     INPID_InputControl = "ImageControl",
  1511.                     IC_ControlPage = 0,
  1512.                     INP_Required = false,
  1513.                     INP_AcceptsMasks = true,
  1514.                 },
  1515.                 EffectMaskLabel = {
  1516.                     INPID_InputControl = "LabelControl",
  1517.                     IC_ControlPage = 1,
  1518.                     ICS_Name = "EffectMask",
  1519.                     ICD_Width = 0.9,
  1520.                     INP_Passive = true,
  1521.                     INP_External = false,
  1522.                 },
  1523.                 EffectMaskDeleteButton = {
  1524.                     LINKID_DataType = "Number",
  1525.                     INPID_InputControl = "MultiButtonControl",
  1526.                     INP_DoNotifyChanged = 1,
  1527.                     MBTNC_AddButton = "X",
  1528.                     MBTNC_Type = "Toggle",
  1529.                     ICD_Width = 0.1,
  1530.                     INP_External = 0,
  1531.                     ICS_Name = "",
  1532.                     IC_ControlPage = 1,
  1533.                     MBTNC_ButtonHeight = 18,
  1534.                 },
  1535.                 BgMtlLabel = {
  1536.                     INPID_InputControl = "LabelControl",
  1537.                     IC_ControlPage = 1,
  1538.                     ICS_Name = "BgMtl",
  1539.                     ICD_Width = 0.9,
  1540.                     INP_Passive = true,
  1541.                     INP_External = false,
  1542.                 },
  1543.                 BgMtlDeleteButton = {
  1544.                     LINKID_DataType = "Number",
  1545.                     INPID_InputControl = "MultiButtonControl",
  1546.                     INP_DoNotifyChanged = 1,
  1547.                     MBTNC_AddButton = "X",
  1548.                     MBTNC_Type = "Toggle",
  1549.                     ICD_Width = 0.1,
  1550.                     INP_External = 0,
  1551.                     ICS_Name = "",
  1552.                     IC_ControlPage = 1,
  1553.                     MBTNC_ButtonHeight = 18,
  1554.                 },
  1555.                 FgMtlLabel = {
  1556.                     INPID_InputControl = "LabelControl",
  1557.                     IC_ControlPage = 1,
  1558.                     ICS_Name = "FgMtl",
  1559.                     ICD_Width = 0.9,
  1560.                     INP_Passive = true,
  1561.                     INP_External = false,
  1562.                 },
  1563.                 FgMtlDeleteButton = {
  1564.                     LINKID_DataType = "Number",
  1565.                     INPID_InputControl = "MultiButtonControl",
  1566.                     INP_DoNotifyChanged = 1,
  1567.                     MBTNC_AddButton = "X",
  1568.                     MBTNC_Type = "Toggle",
  1569.                     ICD_Width = 0.1,
  1570.                     INP_External = 0,
  1571.                     ICS_Name = "",
  1572.                     IC_ControlPage = 1,
  1573.                     MBTNC_ButtonHeight = 18,
  1574.                 },
  1575.                 Dissolve = {
  1576.                     IC_ControlPage = 0,
  1577.                     LINKID_DataType = "Number",
  1578.                     INPID_InputControl = "SliderControl",
  1579.                 },
  1580.                 DissolveLabel = {
  1581.                     INPID_InputControl = "LabelControl",
  1582.                     IC_ControlPage = 1,
  1583.                     ICS_Name = "Dissolve",
  1584.                     ICD_Width = 0.9,
  1585.                     INP_Passive = true,
  1586.                     INP_External = false,
  1587.                 },
  1588.                 DissolveDeleteButton = {
  1589.                     LINKID_DataType = "Number",
  1590.                     INPID_InputControl = "MultiButtonControl",
  1591.                     INP_DoNotifyChanged = 1,
  1592.                     MBTNC_AddButton = "X",
  1593.                     MBTNC_Type = "Toggle",
  1594.                     ICD_Width = 0.1,
  1595.                     INP_External = 0,
  1596.                     ICS_Name = "",
  1597.                     IC_ControlPage = 1,
  1598.                     MBTNC_ButtonHeight = 18,
  1599.                 }
  1600.             }
  1601.         },
  1602.         Blinn2_2 = MtlBlinn {
  1603.             Inputs = {
  1604.                 MaterialID = Input { Value = 3, },
  1605.             },
  1606.             ViewInfo = OperatorInfo { Pos = { 990, 115.5 } },
  1607.         }
  1608.     }
  1609. }

Tags:

User avatar
Chad
Fusionator
Posts: 1006
Joined: Fri Aug 08, 2014 12:11 pm
Been thanked: 8 times

Re: CustomShader3D: Cg shader editing in your comp

Post #47 by Chad » Wed Sep 21, 2016 3:16 pm

Oh, so you want the actual normals to come from an image? Not the "color" of the fragment, but the normal?

User avatar
Chad
Fusionator
Posts: 1006
Joined: Fri Aug 08, 2014 12:11 pm
Been thanked: 8 times

Re: CustomShader3D: Cg shader editing in your comp

Post #48 by Chad » Wed Sep 21, 2016 3:38 pm

So there's an issue with Fusion's calculation of the camera projection, it automatically crops to the AABB of the scene. I'm assuming it's an optimization to prevent it from having to render the parts of the image that are empty?

MOST of the time, this isn't an issue because your scene's AABB is larger than your camera frustum. But for simple scenes like this it can mess you up. Workaround is to make you scene bigger by adding a big bounding box/sphere to your scene, or just zooming in or making your scene bigger.

Anyway, it's been reported as a defect/bug to the BDP.

But the shader itself just needs you to set the f.Normal. See below.

  1.  f.Normal = normalize(FgMtl.Shade(f).xyz*2-1);  // The image had normals from 0-1 because int.  
  2.  f.TexCoord0 = OldTexCoord0;  // Set the UV's back to the buffer values.  We'll won't reset the normals though.
  3.  return BgMtl.Shade(f);  //  Might as well get some Blinn action going.


  1. {
  2.     Tools = ordered() {
  3.         CustomShader3D_ScreenSpaceMask_1_1_1_1 = Indicated.CustomShaderOperator3D {
  4.             CtrlWZoom = false,
  5.             NameSet = true,
  6.             CurrentSettings = 5,
  7.             CustomData = {
  8.                 Settings = {
  9.                     [1] = {
  10.                         Tools = ordered() {
  11.                             CustomShader3D_ScreenSpaceMask_1_1_1 = Indicated.CustomShaderOperator3D {
  12.                                 Inputs = {
  13.                                     ShaderTextInputs = Input { Value = "FuFloat4 EffectMask;\nFuFloat4 BgMtl;\nFuFloat4 FgMtl;\nfloat Dissolve;\nfloat4x4 Projection;\n\n" },
  14.                                     FgMtl = Input {
  15.                                         Source = "MaterialOutput",
  16.                                         SourceOp = "Blinn2_1",
  17.                                         CustomData = {
  18.                                             Metadata = {
  19.                                                 Type = "Material",
  20.                                                 Set = "FgMtl"
  21.                                             }
  22.                                         }
  23.                                     },
  24.                                     RCGroup = Input { Value = 1 },
  25.                                     RCMatrices = Input { Value = 256 },
  26.                                     FloatGroup = Input { Value = 1 },
  27.                                     ShaderTextBody = Input { Value = "float4 Shade(inout FuFragment f)\n{\n\n   float3 OldTexCoord0 = f.TexCoord0;  // Buffer to store the UV's so we can mess with them in the shader\n\n  float4 proj = mul(Projection,float4((f.Position),1));   // Going from eye-space to clip-space.  To multiply the float4x4 projection matrix and float3 Position, we need to add a 4th component, 1.0.  \n    \n  proj /= proj.w;    // Divide to get from 4D clip to 3D NDC (normalized device coordinates)\n\n  f.TexCoord0 = proj.rgb * .5 + .5;   // Normalizing from [-1,1] to [0,1]\n\n float mask = EffectMask.Shade(f).a * Dissolve;  // We'll sample the alpha channel from the mask input with the new \n\n f.TexCoord0 = OldTexCoord0;  // Set the UV's back to the buffer values\n\n  float4 ret = lerp(BgMtl.Shade(f), FgMtl.Shade(f), mask);  // And use that to lerp between the Fg and Bg \n\n    return ret;\n\n}" },
  28.                                     BgMtl = Input {
  29.                                         Source = "MaterialOutput",
  30.                                         SourceOp = "Blinn2",
  31.                                         CustomData = {
  32.                                             Metadata = {
  33.                                                 Type = "Material",
  34.                                                 Set = "BgMtl"
  35.                                             }
  36.                                         }
  37.                                     },
  38.                                     MaterialID = Input { Value = 1 },
  39.                                     EffectMask = Input {
  40.                                         Source = "Mask",
  41.                                         SourceOp = "Rectangle1",
  42.                                         CustomData = {
  43.                                             Metadata = {
  44.                                                 Type = "Material",
  45.                                                 Set = "EffectMask"
  46.                                             }
  47.                                         }
  48.                                     },
  49.                                     MaterialGroup = Input { Value = 1 },
  50.                                     Dissolve = Input {
  51.                                         Value = 1,
  52.                                         CustomData = {
  53.                                             Metadata = {
  54.                                                 Set = "Dissolve",
  55.                                                 Type = "Float"
  56.                                             }
  57.                                         }
  58.                                     }
  59.                                 },
  60.                                 ViewInfo = OperatorInfo {
  61.                                     Flags = {
  62.                                         ShowPic = true
  63.                                     },
  64.                                     Pos = { 3410, 445.5 }
  65.                                 },
  66.                                 CtrlWZoom = false,
  67.                                 NameSet = true,
  68.                                 UserControls = ordered() {
  69.                                     EffectMask = {
  70.                                         {
  71.                                             LINKID_DataType = "MtlGraph3D"
  72.                                         },
  73.                                         {
  74.                                             LINKID_DataType = "Image"
  75.                                         },
  76.                                         {
  77.                                             LINKID_AllowedDataType = "Image"
  78.                                         },
  79.                                         {
  80.                                             LINKID_AllowedDataType = "Mask"
  81.                                         },
  82.                                         LINK_Main = 3,
  83.                                         INP_AcceptsGLImages = true,
  84.                                         INP_AcceptsMasks = true,
  85.                                         IC_ControlPage = 0,
  86.                                         INP_Required = false,
  87.                                         INPID_InputControl = "ImageControl"
  88.                                     },
  89.                                     BgMtl = {
  90.                                         {
  91.                                             LINKID_DataType = "MtlGraph3D"
  92.                                         },
  93.                                         {
  94.                                             LINKID_DataType = "Image"
  95.                                         },
  96.                                         {
  97.                                             LINKID_AllowedDataType = "Image"
  98.                                         },
  99.                                         {
  100.                                             LINKID_AllowedDataType = "Mask"
  101.                                         },
  102.                                         LINK_Main = 1,
  103.                                         INP_AcceptsGLImages = true,
  104.                                         INP_AcceptsMasks = true,
  105.                                         IC_ControlPage = 0,
  106.                                         INP_Required = false,
  107.                                         INPID_InputControl = "ImageControl"
  108.                                     },
  109.                                     FgMtl = {
  110.                                         {
  111.                                             LINKID_DataType = "MtlGraph3D"
  112.                                         },
  113.                                         {
  114.                                             LINKID_DataType = "Image"
  115.                                         },
  116.                                         {
  117.                                             LINKID_AllowedDataType = "Image"
  118.                                         },
  119.                                         {
  120.                                             LINKID_AllowedDataType = "Mask"
  121.                                         },
  122.                                         LINK_Main = 2,
  123.                                         INP_AcceptsGLImages = true,
  124.                                         INP_AcceptsMasks = true,
  125.                                         IC_ControlPage = 0,
  126.                                         INP_Required = false,
  127.                                         INPID_InputControl = "ImageControl"
  128.                                     },
  129.                                     EffectMaskLabel = {
  130.                                         ICD_Width = 0.9,
  131.                                         INP_External = false,
  132.                                         INPID_InputControl = "LabelControl",
  133.                                         IC_ControlPage = 1,
  134.                                         ICS_Name = "EffectMask",
  135.                                         INP_Passive = true
  136.                                     },
  137.                                     EffectMaskDeleteButton = {
  138.                                         ICD_Width = 0.1,
  139.                                         INPID_InputControl = "MultiButtonControl",
  140.                                         IC_ControlPage = 1,
  141.                                         MBTNC_Type = "Toggle",
  142.                                         INP_DoNotifyChanged = 1,
  143.                                         INP_External = 0,
  144.                                         LINKID_DataType = "Number",
  145.                                         ICS_Name = "",
  146.                                         MBTNC_AddButton = "X",
  147.                                         MBTNC_ButtonHeight = 18
  148.                                     },
  149.                                     BgMtlLabel = {
  150.                                         ICD_Width = 0.9,
  151.                                         INP_External = false,
  152.                                         INPID_InputControl = "LabelControl",
  153.                                         IC_ControlPage = 1,
  154.                                         ICS_Name = "BgMtl",
  155.                                         INP_Passive = true
  156.                                     },
  157.                                     BgMtlDeleteButton = {
  158.                                         ICD_Width = 0.1,
  159.                                         INPID_InputControl = "MultiButtonControl",
  160.                                         IC_ControlPage = 1,
  161.                                         MBTNC_Type = "Toggle",
  162.                                         INP_DoNotifyChanged = 1,
  163.                                         INP_External = 0,
  164.                                         LINKID_DataType = "Number",
  165.                                         ICS_Name = "",
  166.                                         MBTNC_AddButton = "X",
  167.                                         MBTNC_ButtonHeight = 18
  168.                                     },
  169.                                     FgMtlLabel = {
  170.                                         ICD_Width = 0.9,
  171.                                         INP_External = false,
  172.                                         INPID_InputControl = "LabelControl",
  173.                                         IC_ControlPage = 1,
  174.                                         ICS_Name = "FgMtl",
  175.                                         INP_Passive = true
  176.                                     },
  177.                                     FgMtlDeleteButton = {
  178.                                         ICD_Width = 0.1,
  179.                                         INPID_InputControl = "MultiButtonControl",
  180.                                         IC_ControlPage = 1,
  181.                                         MBTNC_Type = "Toggle",
  182.                                         INP_DoNotifyChanged = 1,
  183.                                         INP_External = 0,
  184.                                         LINKID_DataType = "Number",
  185.                                         ICS_Name = "",
  186.                                         MBTNC_AddButton = "X",
  187.                                         MBTNC_ButtonHeight = 18
  188.                                     },
  189.                                     Dissolve = {
  190.                                         IC_ControlPage = 0,
  191.                                         INPID_InputControl = "SliderControl",
  192.                                         LINKID_DataType = "Number"
  193.                                     },
  194.                                     DissolveLabel = {
  195.                                         ICD_Width = 0.9,
  196.                                         INP_External = false,
  197.                                         INPID_InputControl = "LabelControl",
  198.                                         IC_ControlPage = 1,
  199.                                         ICS_Name = "Dissolve",
  200.                                         INP_Passive = true
  201.                                     },
  202.                                     DissolveDeleteButton = {
  203.                                         ICD_Width = 0.1,
  204.                                         INPID_InputControl = "MultiButtonControl",
  205.                                         IC_ControlPage = 1,
  206.                                         MBTNC_Type = "Toggle",
  207.                                         INP_DoNotifyChanged = 1,
  208.                                         INP_External = 0,
  209.                                         LINKID_DataType = "Number",
  210.                                         ICS_Name = "",
  211.                                         MBTNC_AddButton = "X",
  212.                                         MBTNC_ButtonHeight = 18
  213.                                     }
  214.                                 },
  215.                                 CustomData = {
  216.                                 }
  217.                             }
  218.                         }
  219.                     },
  220.                     [2] = {
  221.                         Tools = ordered() {
  222.                             CustomShader3D_ScreenSpaceMask_1_1_1_1 = Indicated.CustomShaderOperator3D {
  223.                                 Inputs = {
  224.                                     ShaderTextInputs = Input { Value = "FuFloat4 EffectMask;\nFuFloat4 BgMtl;\nFuFloat4 FgMtl;\nfloat Dissolve;\nfloat4x4 Projection;\n\n" },
  225.                                     FgMtl = Input {
  226.                                         CustomData = {
  227.                                             Metadata = {
  228.                                                 Type = "Material",
  229.                                                 Set = "FgMtl"
  230.                                             }
  231.                                         },
  232.                                         SourceOp = "CookTorrance1",
  233.                                         Source = "MaterialOutput"
  234.                                     },
  235.                                     RCGroup = Input { Value = 1 },
  236.                                     RCMatrices = Input { Value = 256 },
  237.                                     FloatGroup = Input { Value = 1 },
  238.                                     Dissolve = Input {
  239.                                         Value = 1,
  240.                                         CustomData = {
  241.                                             Metadata = {
  242.                                                 Set = "Dissolve",
  243.                                                 Type = "Float"
  244.                                             }
  245.                                         }
  246.                                     },
  247.                                     BgMtl = Input {
  248.                                         CustomData = {
  249.                                             Metadata = {
  250.                                                 Type = "Material",
  251.                                                 Set = "BgMtl"
  252.                                             }
  253.                                         },
  254.                                         SourceOp = "Blinn2_2",
  255.                                         Source = "MaterialOutput"
  256.                                     },
  257.                                     EffectMask = Input {
  258.                                         CustomData = {
  259.                                             Metadata = {
  260.                                                 Type = "Material",
  261.                                                 Set = "EffectMask"
  262.                                             }
  263.                                         }
  264.                                     },
  265.                                     MaterialID = Input { Value = 1 },
  266.                                     MaterialGroup = Input { Value = 1 },
  267.                                     ShaderTextBody = Input { Value = "float4 Shade(inout FuFragment f)\n{\n\n   float3 OldTexCoord0 = f.TexCoord0;  // Buffer to store the UV's so we can mess with them in the shader\n\n  float4 proj = mul(Projection,float4((f.Position),1));   // Going from eye-space to clip-space.  To multiply the float4x4 projection matrix and float3 Position, we need to add a 4th component, 1.0.  \n    \n  proj /= proj.w;    // Divide to get from 4D clip to 3D NDC (normalized device coordinates)\n\n  f.TexCoord0 = proj.rgb * .5 + .5;   // Normalizing from [-1,1] to [0,1]\n\n float4 ret = FgMtl.Shade(f);\n\n f.TexCoord0 = OldTexCoord0;  // Set the UV's back to the buffer values\n\n    return ret;\n\n}" }
  268.                                 },
  269.                                 ViewInfo = OperatorInfo {
  270.                                     Flags = {
  271.                                         ShowPic = true
  272.                                     },
  273.                                     Pos = { 1155, 115.5 }
  274.                                 },
  275.                                 CtrlWZoom = false,
  276.                                 NameSet = true,
  277.                                 UserControls = ordered() {
  278.                                     EffectMask = {
  279.                                         {
  280.                                             LINKID_DataType = "MtlGraph3D"
  281.                                         },
  282.                                         {
  283.                                             LINKID_DataType = "Image"
  284.                                         },
  285.                                         {
  286.                                             LINKID_AllowedDataType = "Image"
  287.                                         },
  288.                                         {
  289.                                             LINKID_AllowedDataType = "Mask"
  290.                                         },
  291.                                         LINK_Main = 3,
  292.                                         INP_AcceptsGLImages = true,
  293.                                         INP_AcceptsMasks = true,
  294.                                         IC_ControlPage = 0,
  295.                                         INP_Required = false,
  296.                                         INPID_InputControl = "ImageControl"
  297.                                     },
  298.                                     BgMtl = {
  299.                                         {
  300.                                             LINKID_DataType = "MtlGraph3D"
  301.                                         },
  302.                                         {
  303.                                             LINKID_DataType = "Image"
  304.                                         },
  305.                                         {
  306.                                             LINKID_AllowedDataType = "Image"
  307.                                         },
  308.                                         {
  309.                                             LINKID_AllowedDataType = "Mask"
  310.                                         },
  311.                                         LINK_Main = 1,
  312.                                         INP_AcceptsGLImages = true,
  313.                                         INP_AcceptsMasks = true,
  314.                                         IC_ControlPage = 0,
  315.                                         INP_Required = false,
  316.                                         INPID_InputControl = "ImageControl"
  317.                                     },
  318.                                     FgMtl = {
  319.                                         {
  320.                                             LINKID_DataType = "MtlGraph3D"
  321.                                         },
  322.                                         {
  323.                                             LINKID_DataType = "Image"
  324.                                         },
  325.                                         {
  326.                                             LINKID_AllowedDataType = "Image"
  327.                                         },
  328.                                         {
  329.                                             LINKID_AllowedDataType = "Mask"
  330.                                         },
  331.                                         LINK_Main = 2,
  332.                                         INP_AcceptsGLImages = true,
  333.                                         INP_AcceptsMasks = true,
  334.                                         IC_ControlPage = 0,
  335.                                         INP_Required = false,
  336.                                         INPID_InputControl = "ImageControl"
  337.                                     },
  338.                                     EffectMaskLabel = {
  339.                                         ICD_Width = 0.9,
  340.                                         INP_External = false,
  341.                                         INPID_InputControl = "LabelControl",
  342.                                         IC_ControlPage = 1,
  343.                                         INP_Passive = true,
  344.                                         ICS_Name = "EffectMask"
  345.                                     },
  346.                                     EffectMaskDeleteButton = {
  347.                                         ICD_Width = 0.1,
  348.                                         INPID_InputControl = "MultiButtonControl",
  349.                                         IC_ControlPage = 1,
  350.                                         MBTNC_Type = "Toggle",
  351.                                         INP_DoNotifyChanged = 1,
  352.                                         INP_External = 0,
  353.                                         LINKID_DataType = "Number",
  354.                                         ICS_Name = "",
  355.                                         MBTNC_ButtonHeight = 18,
  356.                                         MBTNC_AddButton = "X"
  357.                                     },
  358.                                     BgMtlLabel = {
  359.                                         ICD_Width = 0.9,
  360.                                         INP_External = false,
  361.                                         INPID_InputControl = "LabelControl",
  362.                                         IC_ControlPage = 1,
  363.                                         INP_Passive = true,
  364.                                         ICS_Name = "BgMtl"
  365.                                     },
  366.                                     BgMtlDeleteButton = {
  367.                                         ICD_Width = 0.1,
  368.                                         INPID_InputControl = "MultiButtonControl",
  369.                                         IC_ControlPage = 1,
  370.                                         MBTNC_Type = "Toggle",
  371.                                         INP_DoNotifyChanged = 1,
  372.                                         INP_External = 0,
  373.                                         LINKID_DataType = "Number",
  374.                                         ICS_Name = "",
  375.                                         MBTNC_ButtonHeight = 18,
  376.                                         MBTNC_AddButton = "X"
  377.                                     },
  378.                                     FgMtlLabel = {
  379.                                         ICD_Width = 0.9,
  380.                                         INP_External = false,
  381.                                         INPID_InputControl = "LabelControl",
  382.                                         IC_ControlPage = 1,
  383.                                         INP_Passive = true,
  384.                                         ICS_Name = "FgMtl"
  385.                                     },
  386.                                     FgMtlDeleteButton = {
  387.                                         ICD_Width = 0.1,
  388.                                         INPID_InputControl = "MultiButtonControl",
  389.                                         IC_ControlPage = 1,
  390.                                         MBTNC_Type = "Toggle",
  391.                                         INP_DoNotifyChanged = 1,
  392.                                         INP_External = 0,
  393.                                         LINKID_DataType = "Number",
  394.                                         ICS_Name = "",
  395.                                         MBTNC_ButtonHeight = 18,
  396.                                         MBTNC_AddButton = "X"
  397.                                     },
  398.                                     Dissolve = {
  399.                                         IC_ControlPage = 0,
  400.                                         INPID_InputControl = "SliderControl",
  401.                                         LINKID_DataType = "Number"
  402.                                     },
  403.                                     DissolveLabel = {
  404.                                         ICD_Width = 0.9,
  405.                                         INP_External = false,
  406.                                         INPID_InputControl = "LabelControl",
  407.                                         IC_ControlPage = 1,
  408.                                         INP_Passive = true,
  409.                                         ICS_Name = "Dissolve"
  410.                                     },
  411.                                     DissolveDeleteButton = {
  412.                                         ICD_Width = 0.1,
  413.                                         INPID_InputControl = "MultiButtonControl",
  414.                                         IC_ControlPage = 1,
  415.                                         MBTNC_Type = "Toggle",
  416.                                         INP_DoNotifyChanged = 1,
  417.                                         INP_External = 0,
  418.                                         LINKID_DataType = "Number",
  419.                                         ICS_Name = "",
  420.                                         MBTNC_ButtonHeight = 18,
  421.                                         MBTNC_AddButton = "X"
  422.                                     }
  423.                                 },
  424.                                 CustomData = {
  425.                                 }
  426.                             }
  427.                         }
  428.                     },
  429.                     [3] = {
  430.                         Tools = ordered() {
  431.                             CustomShader3D_ScreenSpaceMask_1_1_1_1 = Indicated.CustomShaderOperator3D {
  432.                                 Inputs = {
  433.                                     ShaderTextInputs = Input { Value = "FuFloat4 EffectMask;\nFuFloat4 BgMtl;\nFuFloat4 FgMtl;\nfloat Dissolve;\nfloat4x4 Projection;\n\n" },
  434.                                     FgMtl = Input {
  435.                                         CustomData = {
  436.                                             Metadata = {
  437.                                                 Type = "Material",
  438.                                                 Set = "FgMtl"
  439.                                             }
  440.                                         },
  441.                                         SourceOp = "CookTorrance1",
  442.                                         Source = "MaterialOutput"
  443.                                     },
  444.                                     RCGroup = Input { Value = 1 },
  445.                                     RCMatrices = Input { Value = 256 },
  446.                                     FloatGroup = Input { Value = 1 },
  447.                                     Dissolve = Input {
  448.                                         Value = 1,
  449.                                         CustomData = {
  450.                                             Metadata = {
  451.                                                 Set = "Dissolve",
  452.                                                 Type = "Float"
  453.                                             }
  454.                                         }
  455.                                     },
  456.                                     BgMtl = Input {
  457.                                         CustomData = {
  458.                                             Metadata = {
  459.                                                 Type = "Material",
  460.                                                 Set = "BgMtl"
  461.                                             }
  462.                                         },
  463.                                         SourceOp = "Blinn2_2",
  464.                                         Source = "MaterialOutput"
  465.                                     },
  466.                                     EffectMask = Input {
  467.                                         CustomData = {
  468.                                             Metadata = {
  469.                                                 Type = "Material",
  470.                                                 Set = "EffectMask"
  471.                                             }
  472.                                         }
  473.                                     },
  474.                                     MaterialID = Input { Value = 1 },
  475.                                     MaterialGroup = Input { Value = 1 },
  476.                                     ShaderTextBody = Input { Value = "float4 Shade(inout FuFragment f)\n{\n\n   float3 OldTexCoord0 = f.TexCoord0;  // Buffer to store the UV's so we can mess with them in the shader\n\n  float4 proj = mul(Projection,float4((f.Position),1));   // Going from eye-space to clip-space.  To multiply the float4x4 projection matrix and float3 Position, we need to add a 4th component, 1.0.  \n    \n  proj /= proj.w;    // Divide to get from 4D clip to 3D NDC (normalized device coordinates)\n\n  f.TexCoord0 = proj.xyz * .5 + .5;   // Normalizing from [-1,1] to [0,1]\n\n float4 ret = float4((FgMtl.Shade(f).xyz),1);\n\n f.TexCoord0 = OldTexCoord0;  // Set the UV's back to the buffer values\n\n    return ret;\n\n}" }
  477.                                 },
  478.                                 ViewInfo = OperatorInfo {
  479.                                     Flags = {
  480.                                         ShowPic = true
  481.                                     },
  482.                                     Pos = { 1155, 115.5 }
  483.                                 },
  484.                                 CtrlWZoom = false,
  485.                                 NameSet = true,
  486.                                 UserControls = ordered() {
  487.                                     EffectMask = {
  488.                                         {
  489.                                             LINKID_DataType = "MtlGraph3D"
  490.                                         },
  491.                                         {
  492.                                             LINKID_DataType = "Image"
  493.                                         },
  494.                                         {
  495.                                             LINKID_AllowedDataType = "Image"
  496.                                         },
  497.                                         {
  498.                                             LINKID_AllowedDataType = "Mask"
  499.                                         },
  500.                                         LINK_Main = 3,
  501.                                         INP_AcceptsGLImages = true,
  502.                                         INP_AcceptsMasks = true,
  503.                                         IC_ControlPage = 0,
  504.                                         INP_Required = false,
  505.                                         INPID_InputControl = "ImageControl"
  506.                                     },
  507.                                     BgMtl = {
  508.                                         {
  509.                                             LINKID_DataType = "MtlGraph3D"
  510.                                         },
  511.                                         {
  512.                                             LINKID_DataType = "Image"
  513.                                         },
  514.                                         {
  515.                                             LINKID_AllowedDataType = "Image"
  516.                                         },
  517.                                         {
  518.                                             LINKID_AllowedDataType = "Mask"
  519.                                         },
  520.                                         LINK_Main = 1,
  521.                                         INP_AcceptsGLImages = true,
  522.                                         INP_AcceptsMasks = true,
  523.                                         IC_ControlPage = 0,
  524.                                         INP_Required = false,
  525.                                         INPID_InputControl = "ImageControl"
  526.                                     },
  527.                                     FgMtl = {
  528.                                         {
  529.                                             LINKID_DataType = "MtlGraph3D"
  530.                                         },
  531.                                         {
  532.                                             LINKID_DataType = "Image"
  533.                                         },
  534.                                         {
  535.                                             LINKID_AllowedDataType = "Image"
  536.                                         },
  537.                                         {
  538.                                             LINKID_AllowedDataType = "Mask"
  539.                                         },
  540.                                         LINK_Main = 2,
  541.                                         INP_AcceptsGLImages = true,
  542.                                         INP_AcceptsMasks = true,
  543.                                         IC_ControlPage = 0,
  544.                                         INP_Required = false,
  545.                                         INPID_InputControl = "ImageControl"
  546.                                     },
  547.                                     EffectMaskLabel = {
  548.                                         ICD_Width = 0.9,
  549.                                         INP_External = false,
  550.                                         INPID_InputControl = "LabelControl",
  551.                                         IC_ControlPage = 1,
  552.                                         INP_Passive = true,
  553.                                         ICS_Name = "EffectMask"
  554.                                     },
  555.                                     EffectMaskDeleteButton = {
  556.                                         ICD_Width = 0.1,
  557.                                         INPID_InputControl = "MultiButtonControl",
  558.                                         IC_ControlPage = 1,
  559.                                         MBTNC_Type = "Toggle",
  560.                                         INP_DoNotifyChanged = 1,
  561.                                         INP_External = 0,
  562.                                         LINKID_DataType = "Number",
  563.                                         ICS_Name = "",
  564.                                         MBTNC_ButtonHeight = 18,
  565.                                         MBTNC_AddButton = "X"
  566.                                     },
  567.                                     BgMtlLabel = {
  568.                                         ICD_Width = 0.9,
  569.                                         INP_External = false,
  570.                                         INPID_InputControl = "LabelControl",
  571.                                         IC_ControlPage = 1,
  572.                                         INP_Passive = true,
  573.                                         ICS_Name = "BgMtl"
  574.                                     },
  575.                                     BgMtlDeleteButton = {
  576.                                         ICD_Width = 0.1,
  577.                                         INPID_InputControl = "MultiButtonControl",
  578.                                         IC_ControlPage = 1,
  579.                                         MBTNC_Type = "Toggle",
  580.                                         INP_DoNotifyChanged = 1,
  581.                                         INP_External = 0,
  582.                                         LINKID_DataType = "Number",
  583.                                         ICS_Name = "",
  584.                                         MBTNC_ButtonHeight = 18,
  585.                                         MBTNC_AddButton = "X"
  586.                                     },
  587.                                     FgMtlLabel = {
  588.                                         ICD_Width = 0.9,
  589.                                         INP_External = false,
  590.                                         INPID_InputControl = "LabelControl",
  591.                                         IC_ControlPage = 1,
  592.                                         INP_Passive = true,
  593.                                         ICS_Name = "FgMtl"
  594.                                     },
  595.                                     FgMtlDeleteButton = {
  596.                                         ICD_Width = 0.1,
  597.                                         INPID_InputControl = "MultiButtonControl",
  598.                                         IC_ControlPage = 1,
  599.                                         MBTNC_Type = "Toggle",
  600.                                         INP_DoNotifyChanged = 1,
  601.                                         INP_External = 0,
  602.                                         LINKID_DataType = "Number",
  603.                                         ICS_Name = "",
  604.                                         MBTNC_ButtonHeight = 18,
  605.                                         MBTNC_AddButton = "X"
  606.                                     },
  607.                                     Dissolve = {
  608.                                         IC_ControlPage = 0,
  609.                                         INPID_InputControl = "SliderControl",
  610.                                         LINKID_DataType = "Number"
  611.                                     },
  612.                                     DissolveLabel = {
  613.                                         ICD_Width = 0.9,
  614.                                         INP_External = false,
  615.                                         INPID_InputControl = "LabelControl",
  616.                                         IC_ControlPage = 1,
  617.                                         INP_Passive = true,
  618.                                         ICS_Name = "Dissolve"
  619.                                     },
  620.                                     DissolveDeleteButton = {
  621.                                         ICD_Width = 0.1,
  622.                                         INPID_InputControl = "MultiButtonControl",
  623.                                         IC_ControlPage = 1,
  624.                                         MBTNC_Type = "Toggle",
  625.                                         INP_DoNotifyChanged = 1,
  626.                                         INP_External = 0,
  627.                                         LINKID_DataType = "Number",
  628.                                         ICS_Name = "",
  629.                                         MBTNC_ButtonHeight = 18,
  630.                                         MBTNC_AddButton = "X"
  631.                                     }
  632.                                 },
  633.                                 CustomData = {
  634.                                 }
  635.                             }
  636.                         }
  637.                     },
  638.                     [4] = {
  639.                         Tools = ordered() {
  640.                             CustomShader3D_ScreenSpaceMask_1_1_1_1 = Indicated.CustomShaderOperator3D {
  641.                                 Inputs = {
  642.                                     ShaderTextInputs = Input { Value = "FuFloat4 EffectMask;\nFuFloat4 BgMtl;\nFuFloat4 FgMtl;\nfloat Dissolve;\nfloat4x4 Projection;\n\n" },
  643.                                     FgMtl = Input {
  644.                                         CustomData = {
  645.                                             Metadata = {
  646.                                                 Type = "Material",
  647.                                                 Set = "FgMtl"
  648.                                             }
  649.                                         },
  650.                                         SourceOp = "CookTorrance1",
  651.                                         Source = "MaterialOutput"
  652.                                     },
  653.                                     RCGroup = Input { Value = 1 },
  654.                                     RCMatrices = Input { Value = 256 },
  655.                                     FloatGroup = Input { Value = 1 },
  656.                                     Dissolve = Input {
  657.                                         Value = 1,
  658.                                         CustomData = {
  659.                                             Metadata = {
  660.                                                 Set = "Dissolve",
  661.                                                 Type = "Float"
  662.                                             }
  663.                                         }
  664.                                     },
  665.                                     BgMtl = Input {
  666.                                         CustomData = {
  667.                                             Metadata = {
  668.                                                 Type = "Material",
  669.                                                 Set = "BgMtl"
  670.                                             }
  671.                                         },
  672.                                         SourceOp = "Blinn2_2",
  673.                                         Source = "MaterialOutput"
  674.                                     },
  675.                                     EffectMask = Input {
  676.                                         CustomData = {
  677.                                             Metadata = {
  678.                                                 Type = "Material",
  679.                                                 Set = "EffectMask"
  680.                                             }
  681.                                         }
  682.                                     },
  683.                                     MaterialID = Input { Value = 1 },
  684.                                     MaterialGroup = Input { Value = 1 },
  685.                                     ShaderTextBody = Input { Value = "float4 Shade(inout FuFragment f)\n{\n\n   float3 OldTexCoord0 = f.TexCoord0;  // Buffer to store the UV's so we can mess with them in the shader\n\n  float4 proj = mul(Projection,float4((f.Position),1));   // Going from eye-space to clip-space.  To multiply the float4x4 projection matrix and float3 Position, we need to add a 4th component, 1.0.  \n    \n  proj /= proj.w;    // Divide to get from 4D clip to 3D NDC (normalized device coordinates)\n\n  f.TexCoord0 = proj.rgb * .5 + .5;   // Normalizing from [-1,1] to [0,1]\n\n float4 ret = float4((FgMtl.Shade(f).xyz),1);\n\n f.TexCoord0 = OldTexCoord0;  // Set the UV's back to the buffer values\n\n    return ret;\n\n}" }
  686.                                 },
  687.                                 ViewInfo = OperatorInfo {
  688.                                     Flags = {
  689.                                         ShowPic = true
  690.                                     },
  691.                                     Pos = { 1155, 115.5 }
  692.                                 },
  693.                                 CtrlWZoom = false,
  694.                                 NameSet = true,
  695.                                 UserControls = ordered() {
  696.                                     EffectMask = {
  697.                                         {
  698.                                             LINKID_DataType = "MtlGraph3D"
  699.                                         },
  700.                                         {
  701.                                             LINKID_DataType = "Image"
  702.                                         },
  703.                                         {
  704.                                             LINKID_AllowedDataType = "Image"
  705.                                         },
  706.                                         {
  707.                                             LINKID_AllowedDataType = "Mask"
  708.                                         },
  709.                                         LINK_Main = 3,
  710.                                         INP_AcceptsGLImages = true,
  711.                                         INP_AcceptsMasks = true,
  712.                                         IC_ControlPage = 0,
  713.                                         INP_Required = false,
  714.                                         INPID_InputControl = "ImageControl"
  715.                                     },
  716.                                     BgMtl = {
  717.                                         {
  718.                                             LINKID_DataType = "MtlGraph3D"
  719.                                         },
  720.                                         {
  721.                                             LINKID_DataType = "Image"
  722.                                         },
  723.                                         {
  724.                                             LINKID_AllowedDataType = "Image"
  725.                                         },
  726.                                         {
  727.                                             LINKID_AllowedDataType = "Mask"
  728.                                         },
  729.                                         LINK_Main = 1,
  730.                                         INP_AcceptsGLImages = true,
  731.                                         INP_AcceptsMasks = true,
  732.                                         IC_ControlPage = 0,
  733.                                         INP_Required = false,
  734.                                         INPID_InputControl = "ImageControl"
  735.                                     },
  736.                                     FgMtl = {
  737.                                         {
  738.                                             LINKID_DataType = "MtlGraph3D"
  739.                                         },
  740.                                         {
  741.                                             LINKID_DataType = "Image"
  742.                                         },
  743.                                         {
  744.                                             LINKID_AllowedDataType = "Image"
  745.                                         },
  746.                                         {
  747.                                             LINKID_AllowedDataType = "Mask"
  748.                                         },
  749.                                         LINK_Main = 2,
  750.                                         INP_AcceptsGLImages = true,
  751.                                         INP_AcceptsMasks = true,
  752.                                         IC_ControlPage = 0,
  753.                                         INP_Required = false,
  754.                                         INPID_InputControl = "ImageControl"
  755.                                     },
  756.                                     EffectMaskLabel = {
  757.                                         ICD_Width = 0.9,
  758.                                         INP_External = false,
  759.                                         INPID_InputControl = "LabelControl",
  760.                                         IC_ControlPage = 1,
  761.                                         INP_Passive = true,
  762.                                         ICS_Name = "EffectMask"
  763.                                     },
  764.                                     EffectMaskDeleteButton = {
  765.                                         ICD_Width = 0.1,
  766.                                         INPID_InputControl = "MultiButtonControl",
  767.                                         IC_ControlPage = 1,
  768.                                         MBTNC_Type = "Toggle",
  769.                                         INP_DoNotifyChanged = 1,
  770.                                         INP_External = 0,
  771.                                         LINKID_DataType = "Number",
  772.                                         ICS_Name = "",
  773.                                         MBTNC_ButtonHeight = 18,
  774.                                         MBTNC_AddButton = "X"
  775.                                     },
  776.                                     BgMtlLabel = {
  777.                                         ICD_Width = 0.9,
  778.                                         INP_External = false,
  779.                                         INPID_InputControl = "LabelControl",
  780.                                         IC_ControlPage = 1,
  781.                                         INP_Passive = true,
  782.                                         ICS_Name = "BgMtl"
  783.                                     },
  784.                                     BgMtlDeleteButton = {
  785.                                         ICD_Width = 0.1,
  786.                                         INPID_InputControl = "MultiButtonControl",
  787.                                         IC_ControlPage = 1,
  788.                                         MBTNC_Type = "Toggle",
  789.                                         INP_DoNotifyChanged = 1,
  790.                                         INP_External = 0,
  791.                                         LINKID_DataType = "Number",
  792.                                         ICS_Name = "",
  793.                                         MBTNC_ButtonHeight = 18,
  794.                                         MBTNC_AddButton = "X"
  795.                                     },
  796.                                     FgMtlLabel = {
  797.                                         ICD_Width = 0.9,
  798.                                         INP_External = false,
  799.                                         INPID_InputControl = "LabelControl",
  800.                                         IC_ControlPage = 1,
  801.                                         INP_Passive = true,
  802.                                         ICS_Name = "FgMtl"
  803.                                     },
  804.                                     FgMtlDeleteButton = {
  805.                                         ICD_Width = 0.1,
  806.                                         INPID_InputControl = "MultiButtonControl",
  807.                                         IC_ControlPage = 1,
  808.                                         MBTNC_Type = "Toggle",
  809.                                         INP_DoNotifyChanged = 1,
  810.                                         INP_External = 0,
  811.                                         LINKID_DataType = "Number",
  812.                                         ICS_Name = "",
  813.                                         MBTNC_ButtonHeight = 18,
  814.                                         MBTNC_AddButton = "X"
  815.                                     },
  816.                                     Dissolve = {
  817.                                         IC_ControlPage = 0,
  818.                                         INPID_InputControl = "SliderControl",
  819.                                         LINKID_DataType = "Number"
  820.                                     },
  821.                                     DissolveLabel = {
  822.                                         ICD_Width = 0.9,
  823.                                         INP_External = false,
  824.                                         INPID_InputControl = "LabelControl",
  825.                                         IC_ControlPage = 1,
  826.                                         INP_Passive = true,
  827.                                         ICS_Name = "Dissolve"
  828.                                     },
  829.                                     DissolveDeleteButton = {
  830.                                         ICD_Width = 0.1,
  831.                                         INPID_InputControl = "MultiButtonControl",
  832.                                         IC_ControlPage = 1,
  833.                                         MBTNC_Type = "Toggle",
  834.                                         INP_DoNotifyChanged = 1,
  835.                                         INP_External = 0,
  836.                                         LINKID_DataType = "Number",
  837.                                         ICS_Name = "",
  838.                                         MBTNC_ButtonHeight = 18,
  839.                                         MBTNC_AddButton = "X"
  840.                                     }
  841.                                 },
  842.                                 CustomData = {
  843.                                 }
  844.                             }
  845.                         }
  846.                     },
  847.                     [5] = {
  848.                         Tools = ordered() {
  849.                             CustomShader3D_ScreenSpaceMask_1_1_1_1 = Indicated.CustomShaderOperator3D {
  850.                                 ViewInfo = OperatorInfo {
  851.                                     Flags = {
  852.                                         ShowPic = true
  853.                                     },
  854.                                     Pos = { 1155, 115.5 }
  855.                                 },
  856.                                 Inputs = {
  857.                                     ShaderTextInputs = Input { Value = "FuFloat4 EffectMask;\nFuFloat4 BgMtl;\nFuFloat4 FgMtl;\nfloat Dissolve;\nfloat4x4 Projection;\n\n" },
  858.                                     FgMtl = Input {
  859.                                         CustomData = {
  860.                                             Metadata = {
  861.                                                 Type = "Material",
  862.                                                 Set = "FgMtl"
  863.                                             }
  864.                                         },
  865.                                         SourceOp = "ChannelBooleans1",
  866.                                         Source = "Output"
  867.                                     },
  868.                                     RCGroup = Input { Value = 1 },
  869.                                     RCMatrices = Input { Value = 256 },
  870.                                     FloatGroup = Input { Value = 1 },
  871.                                     Dissolve = Input {
  872.                                         Value = 1,
  873.                                         CustomData = {
  874.                                             Metadata = {
  875.                                                 Set = "Dissolve",
  876.                                                 Type = "Float"
  877.                                             }
  878.                                         }
  879.                                     },
  880.                                     BgMtl = Input {
  881.                                         CustomData = {
  882.                                             Metadata = {
  883.                                                 Type = "Material",
  884.                                                 Set = "BgMtl"
  885.                                             }
  886.                                         },
  887.                                         SourceOp = "Blinn2_2",
  888.                                         Source = "MaterialOutput"
  889.                                     },
  890.                                     EffectMask = Input {
  891.                                         CustomData = {
  892.                                             Metadata = {
  893.                                                 Type = "Material",
  894.                                                 Set = "EffectMask"
  895.                                             }
  896.                                         }
  897.                                     },
  898.                                     MaterialID = Input { Value = 1 },
  899.                                     MaterialGroup = Input { Value = 1 },
  900.                                     ShaderTextBody = Input { Value = "float4 Shade(inout FuFragment f)\n{\n\n   float3 OldTexCoord0 = f.TexCoord0;  // Buffer to store the UV's so we can mess with them in the shader\n\n  float4 proj = mul(Projection,float4((f.Position),1));   // Going from eye-space to clip-space.  To multiply the float4x4 projection matrix and float3 Position, we need to add a 4th component, 1.0.  \n    \n  proj /= proj.w;    // Divide to get from 4D clip to 3D NDC (normalized device coordinates)\n\n  f.TexCoord0 = proj.rgb * .5 + .5;   // Normalizing from [-1,1] to [0,1]\n\n float4 ret = float4((FgMtl.Shade(f).xyz),1);\n\n f.TexCoord0 = OldTexCoord0;  // Set the UV's back to the buffer values\n\n    return ret;\n\n}" }
  901.                                 },
  902.                                 Name = "CustomShader3D_ScreenSpaceMask_1_1_1_1",
  903.                                 CtrlWZoom = false,
  904.                                 NameSet = true,
  905.                                 UserControls = ordered() {
  906.                                     EffectMask = {
  907.                                         {
  908.                                             LINKID_DataType = "MtlGraph3D"
  909.                                         },
  910.                                         {
  911.                                             LINKID_DataType = "Image"
  912.                                         },
  913.                                         {
  914.                                             LINKID_AllowedDataType = "Image"
  915.                                         },
  916.                                         {
  917.                                             LINKID_AllowedDataType = "Mask"
  918.                                         },
  919.                                         LINK_Main = 3,
  920.                                         INP_AcceptsGLImages = true,
  921.                                         INP_AcceptsMasks = true,
  922.                                         IC_ControlPage = 0,
  923.                                         INP_Required = false,
  924.                                         INPID_InputControl = "ImageControl"
  925.                                     },
  926.                                     BgMtl = {
  927.                                         {
  928.                                             LINKID_DataType = "MtlGraph3D"
  929.                                         },
  930.                                         {
  931.                                             LINKID_DataType = "Image"
  932.                                         },
  933.                                         {
  934.                                             LINKID_AllowedDataType = "Image"
  935.                                         },
  936.                                         {
  937.                                             LINKID_AllowedDataType = "Mask"
  938.                                         },
  939.                                         LINK_Main = 1,
  940.                                         INP_AcceptsGLImages = true,
  941.                                         INP_AcceptsMasks = true,
  942.                                         IC_ControlPage = 0,
  943.                                         INP_Required = false,
  944.                                         INPID_InputControl = "ImageControl"
  945.                                     },
  946.                                     FgMtl = {
  947.                                         {
  948.                                             LINKID_DataType = "MtlGraph3D"
  949.                                         },
  950.                                         {
  951.                                             LINKID_DataType = "Image"
  952.                                         },
  953.                                         {
  954.                                             LINKID_AllowedDataType = "Image"
  955.                                         },
  956.                                         {
  957.                                             LINKID_AllowedDataType = "Mask"
  958.                                         },
  959.                                         LINK_Main = 2,
  960.                                         INP_AcceptsGLImages = true,
  961.                                         INP_AcceptsMasks = true,
  962.                                         IC_ControlPage = 0,
  963.                                         INP_Required = false,
  964.                                         INPID_InputControl = "ImageControl"
  965.                                     },
  966.                                     EffectMaskLabel = {
  967.                                         ICD_Width = 0.9,
  968.                                         INP_External = false,
  969.                                         INPID_InputControl = "LabelControl",
  970.                                         IC_ControlPage = 1,
  971.                                         INP_Passive = true,
  972.                                         ICS_Name = "EffectMask"
  973.                                     },
  974.                                     EffectMaskDeleteButton = {
  975.                                         ICD_Width = 0.1,
  976.                                         INPID_InputControl = "MultiButtonControl",
  977.                                         IC_ControlPage = 1,
  978.                                         MBTNC_Type = "Toggle",
  979.                                         INP_DoNotifyChanged = 1,
  980.                                         INP_External = 0,
  981.                                         LINKID_DataType = "Number",
  982.                                         ICS_Name = "",
  983.                                         MBTNC_ButtonHeight = 18,
  984.                                         MBTNC_AddButton = "X"
  985.                                     },
  986.                                     BgMtlLabel = {
  987.                                         ICD_Width = 0.9,
  988.                                         INP_External = false,
  989.                                         INPID_InputControl = "LabelControl",
  990.                                         IC_ControlPage = 1,
  991.                                         INP_Passive = true,
  992.                                         ICS_Name = "BgMtl"
  993.                                     },
  994.                                     BgMtlDeleteButton = {
  995.                                         ICD_Width = 0.1,
  996.                                         INPID_InputControl = "MultiButtonControl",
  997.                                         IC_ControlPage = 1,
  998.                                         MBTNC_Type = "Toggle",
  999.                                         INP_DoNotifyChanged = 1,
  1000.                                         INP_External = 0,
  1001.                                         LINKID_DataType = "Number",
  1002.                                         ICS_Name = "",
  1003.                                         MBTNC_ButtonHeight = 18,
  1004.                                         MBTNC_AddButton = "X"
  1005.                                     },
  1006.                                     FgMtlLabel = {
  1007.                                         ICD_Width = 0.9,
  1008.                                         INP_External = false,
  1009.                                         INPID_InputControl = "LabelControl",
  1010.                                         IC_ControlPage = 1,
  1011.                                         INP_Passive = true,
  1012.                                         ICS_Name = "FgMtl"
  1013.                                     },
  1014.                                     FgMtlDeleteButton = {
  1015.                                         ICD_Width = 0.1,
  1016.                                         INPID_InputControl = "MultiButtonControl",
  1017.                                         IC_ControlPage = 1,
  1018.                                         MBTNC_Type = "Toggle",
  1019.                                         INP_DoNotifyChanged = 1,
  1020.                                         INP_External = 0,
  1021.                                         LINKID_DataType = "Number",
  1022.                                         ICS_Name = "",
  1023.                                         MBTNC_ButtonHeight = 18,
  1024.                                         MBTNC_AddButton = "X"
  1025.                                     },
  1026.                                     Dissolve = {
  1027.                                         IC_ControlPage = 0,
  1028.                                         INPID_InputControl = "SliderControl",
  1029.                                         LINKID_DataType = "Number"
  1030.                                     },
  1031.                                     DissolveLabel = {
  1032.                                         ICD_Width = 0.9,
  1033.                                         INP_External = false,
  1034.                                         INPID_InputControl = "LabelControl",
  1035.                                         IC_ControlPage = 1,
  1036.                                         INP_Passive = true,
  1037.                                         ICS_Name = "Dissolve"
  1038.                                     },
  1039.                                     DissolveDeleteButton = {
  1040.                                         ICD_Width = 0.1,
  1041.                                         INPID_InputControl = "MultiButtonControl",
  1042.                                         IC_ControlPage = 1,
  1043.                                         MBTNC_Type = "Toggle",
  1044.                                         INP_DoNotifyChanged = 1,
  1045.                                         INP_External = 0,
  1046.                                         LINKID_DataType = "Number",
  1047.                                         ICS_Name = "",
  1048.                                         MBTNC_ButtonHeight = 18,
  1049.                                         MBTNC_AddButton = "X"
  1050.                                     }
  1051.                                 },
  1052.                                 CustomData = {
  1053.                                 }
  1054.                             }
  1055.                         }
  1056.                     },
  1057.                     [6] = {
  1058.                         Tools = ordered() {
  1059.                             CustomShader3D_ScreenSpaceMask_1_1_1_1 = Indicated.CustomShaderOperator3D {
  1060.                                 Inputs = {
  1061.                                     ShaderTextInputs = Input { Value = "FuFloat4 EffectMask;\nFuFloat4 BgMtl;\nFuFloat4 FgMtl;\nfloat Dissolve;\nfloat4x4 Projection;\n\n" },
  1062.                                     FgMtl = Input {
  1063.                                         CustomData = {
  1064.                                             Metadata = {
  1065.                                                 Type = "Material",
  1066.                                                 Set = "FgMtl"
  1067.                                             }
  1068.                                         },
  1069.                                         SourceOp = "ChannelBooleans1",
  1070.                                         Source = "Output"
  1071.                                     },
  1072.                                     RCGroup = Input { Value = 1 },
  1073.                                     RCMatrices = Input { Value = 256 },
  1074.                                     FloatGroup = Input { Value = 1 },
  1075.                                     Dissolve = Input {
  1076.                                         Value = 1,
  1077.                                         CustomData = {
  1078.                                             Metadata = {
  1079.                                                 Set = "Dissolve",
  1080.                                                 Type = "Float"
  1081.                                             }
  1082.                                         }
  1083.                                     },
  1084.                                     BgMtl = Input {
  1085.                                         CustomData = {
  1086.                                             Metadata = {
  1087.                                                 Type = "Material",
  1088.                                                 Set = "BgMtl"
  1089.                                             }
  1090.                                         },
  1091.                                         SourceOp = "Blinn2_2",
  1092.                                         Source = "MaterialOutput"
  1093.                                     },
  1094.                                     EffectMask = Input {
  1095.                                         CustomData = {
  1096.                                             Metadata = {
  1097.                                                 Type = "Material",
  1098.                                                 Set = "EffectMask"
  1099.                                             }
  1100.                                         }
  1101.                                     },
  1102.                                     MaterialID = Input { Value = 1 },
  1103.                                     MaterialGroup = Input { Value = 1 },
  1104.                                     ShaderTextBody = Input { Value = "float4 Shade(inout FuFragment f)\n{\n\n   float3 OldTexCoord0 = f.TexCoord0;  // Buffer to store the UV's so we can mess with them in the shader\n\n  float4 proj = mul(Projection,float4((f.Position),1));   // Going from eye-space to clip-space.  To multiply the float4x4 projection matrix and float3 Position, we need to add a 4th component, 1.0.  \n    \n  proj /= proj.w;    // Divide to get from 4D clip to 3D NDC (normalized device coordinates)\n\n  f.TexCoord0 = proj.rgb * .5 + .5;   // Normalizing from [-1,1] to [0,1]\n\n float4 ret.xyz = float4((FgMtl.Shade(f).xyz),1);\n\n f.TexCoord0 = OldTexCoord0;  // Set the UV's back to the buffer values\n\n    return ret;\n\n}" }
  1105.                                 },
  1106.                                 ViewInfo = OperatorInfo {
  1107.                                     Flags = {
  1108.                                         ShowPic = true
  1109.                                     },
  1110.                                     Pos = { 1155, 115.5 }
  1111.                                 },
  1112.                                 CtrlWZoom = false,
  1113.                                 NameSet = true,
  1114.                                 UserControls = ordered() {
  1115.                                     EffectMask = {
  1116.                                         {
  1117.                                             LINKID_DataType = "MtlGraph3D"
  1118.                                         },
  1119.                                         {
  1120.                                             LINKID_DataType = "Image"
  1121.                                         },
  1122.                                         {
  1123.                                             LINKID_AllowedDataType = "Image"
  1124.                                         },
  1125.                                         {
  1126.                                             LINKID_AllowedDataType = "Mask"
  1127.                                         },
  1128.                                         LINK_Main = 3,
  1129.                                         INP_AcceptsGLImages = true,
  1130.                                         INP_AcceptsMasks = true,
  1131.                                         IC_ControlPage = 0,
  1132.                                         INP_Required = false,
  1133.                                         INPID_InputControl = "ImageControl"
  1134.                                     },
  1135.                                     BgMtl = {
  1136.                                         {
  1137.                                             LINKID_DataType = "MtlGraph3D"
  1138.                                         },
  1139.                                         {
  1140.                                             LINKID_DataType = "Image"
  1141.                                         },
  1142.                                         {
  1143.                                             LINKID_AllowedDataType = "Image"
  1144.                                         },
  1145.                                         {
  1146.                                             LINKID_AllowedDataType = "Mask"
  1147.                                         },
  1148.                                         LINK_Main = 1,
  1149.                                         INP_AcceptsGLImages = true,
  1150.                                         INP_AcceptsMasks = true,
  1151.                                         IC_ControlPage = 0,
  1152.                                         INP_Required = false,
  1153.                                         INPID_InputControl = "ImageControl"
  1154.                                     },
  1155.                                     FgMtl = {
  1156.                                         {
  1157.                                             LINKID_DataType = "MtlGraph3D"
  1158.                                         },
  1159.                                         {
  1160.                                             LINKID_DataType = "Image"
  1161.                                         },
  1162.                                         {
  1163.                                             LINKID_AllowedDataType = "Image"
  1164.                                         },
  1165.                                         {
  1166.                                             LINKID_AllowedDataType = "Mask"
  1167.                                         },
  1168.                                         LINK_Main = 2,
  1169.                                         INP_AcceptsGLImages = true,
  1170.                                         INP_AcceptsMasks = true,
  1171.                                         IC_ControlPage = 0,
  1172.                                         INP_Required = false,
  1173.                                         INPID_InputControl = "ImageControl"
  1174.                                     },
  1175.                                     EffectMaskLabel = {
  1176.                                         ICD_Width = 0.9,
  1177.                                         INP_External = false,
  1178.                                         INPID_InputControl = "LabelControl",
  1179.                                         IC_ControlPage = 1,
  1180.                                         INP_Passive = true,
  1181.                                         ICS_Name = "EffectMask"
  1182.                                     },
  1183.                                     EffectMaskDeleteButton = {
  1184.                                         ICD_Width = 0.1,
  1185.                                         INPID_InputControl = "MultiButtonControl",
  1186.                                         IC_ControlPage = 1,
  1187.                                         MBTNC_Type = "Toggle",
  1188.                                         INP_DoNotifyChanged = 1,
  1189.                                         INP_External = 0,
  1190.                                         LINKID_DataType = "Number",
  1191.                                         ICS_Name = "",
  1192.                                         MBTNC_ButtonHeight = 18,
  1193.                                         MBTNC_AddButton = "X"
  1194.                                     },
  1195.                                     BgMtlLabel = {
  1196.                                         ICD_Width = 0.9,
  1197.                                         INP_External = false,
  1198.                                         INPID_InputControl = "LabelControl",
  1199.                                         IC_ControlPage = 1,
  1200.                                         INP_Passive = true,
  1201.                                         ICS_Name = "BgMtl"
  1202.                                     },
  1203.                                     BgMtlDeleteButton = {
  1204.                                         ICD_Width = 0.1,
  1205.                                         INPID_InputControl = "MultiButtonControl",
  1206.                                         IC_ControlPage = 1,
  1207.                                         MBTNC_Type = "Toggle",
  1208.                                         INP_DoNotifyChanged = 1,
  1209.                                         INP_External = 0,
  1210.                                         LINKID_DataType = "Number",
  1211.                                         ICS_Name = "",
  1212.                                         MBTNC_ButtonHeight = 18,
  1213.                                         MBTNC_AddButton = "X"
  1214.                                     },
  1215.                                     FgMtlLabel = {
  1216.                                         ICD_Width = 0.9,
  1217.                                         INP_External = false,
  1218.                                         INPID_InputControl = "LabelControl",
  1219.                                         IC_ControlPage = 1,
  1220.                                         INP_Passive = true,
  1221.                                         ICS_Name = "FgMtl"
  1222.                                     },
  1223.                                     FgMtlDeleteButton = {
  1224.                                         ICD_Width = 0.1,
  1225.                                         INPID_InputControl = "MultiButtonControl",
  1226.                                         IC_ControlPage = 1,
  1227.                                         MBTNC_Type = "Toggle",
  1228.                                         INP_DoNotifyChanged = 1,
  1229.                                         INP_External = 0,
  1230.                                         LINKID_DataType = "Number",
  1231.                                         ICS_Name = "",
  1232.                                         MBTNC_ButtonHeight = 18,
  1233.                                         MBTNC_AddButton = "X"
  1234.                                     },
  1235.                                     Dissolve = {
  1236.                                         IC_ControlPage = 0,
  1237.                                         INPID_InputControl = "SliderControl",
  1238.                                         LINKID_DataType = "Number"
  1239.                                     },
  1240.                                     DissolveLabel = {
  1241.                                         ICD_Width = 0.9,
  1242.                                         INP_External = false,
  1243.                                         INPID_InputControl = "LabelControl",
  1244.                                         IC_ControlPage = 1,
  1245.                                         INP_Passive = true,
  1246.                                         ICS_Name = "Dissolve"
  1247.                                     },
  1248.                                     DissolveDeleteButton = {
  1249.                                         ICD_Width = 0.1,
  1250.                                         INPID_InputControl = "MultiButtonControl",
  1251.                                         IC_ControlPage = 1,
  1252.                                         MBTNC_Type = "Toggle",
  1253.                                         INP_DoNotifyChanged = 1,
  1254.                                         INP_External = 0,
  1255.                                         LINKID_DataType = "Number",
  1256.                                         ICS_Name = "",
  1257.                                         MBTNC_ButtonHeight = 18,
  1258.                                         MBTNC_AddButton = "X"
  1259.                                     }
  1260.                                 },
  1261.                                 CustomData = {
  1262.                                 }
  1263.                             }
  1264.                         }
  1265.                     }
  1266.                 }
  1267.             },
  1268.             Inputs = {
  1269.                 ShaderTextInputs = Input { Value = "FuFloat4 EffectMask;\nFuFloat4 BgMtl;\nFuFloat4 FgMtl;\nfloat Dissolve;\nfloat4x4 Projection;\n\n", },
  1270.                 ShaderTextBody = Input { Value = "float4 Shade(inout FuFragment f)\n{\n\n   float3 OldTexCoord0 = f.TexCoord0;  // Buffer to store the UV's so we can mess with them in the shader\n\n  float4 proj = mul(Projection,float4((f.Position),1));   // Going from eye-space to clip-space.  To multiply the float4x4 projection matrix and float3 Position, we need to add a 4th component, 1.0.  \n    \n  proj /= proj.w;    // Divide to get from 4D clip to 3D NDC (normalized device coordinates)\n\n  f.TexCoord0 = proj.rgb * .5 + .5;   // Normalizing from [-1,1] to [0,1]\n\n \n\n f.Normal = normalize(FgMtl.Shade(f).xyz*2-1);\n\n f.TexCoord0 = OldTexCoord0;  // Set the UV's back to the buffer values\n\n return BgMtl.Shade(f);\n\n}", },
  1271.                 RCGroup = Input { Value = 1, },
  1272.                 RCMatrices = Input { Value = 256, },
  1273.                 MaterialGroup = Input { Value = 1, },
  1274.                 FloatGroup = Input { Value = 1, },
  1275.                 MaterialID = Input { Value = 1, },
  1276.                 EffectMask = Input {
  1277.                     CustomData = {
  1278.                         Metadata = {
  1279.                             Type = "Material",
  1280.                             Set = "EffectMask",
  1281.                         }
  1282.                     },
  1283.                 },
  1284.                 BgMtl = Input {
  1285.                     SourceOp = "Blinn2_2",
  1286.                     Source = "MaterialOutput",
  1287.                     CustomData = {
  1288.                         Metadata = {
  1289.                             Type = "Material",
  1290.                             Set = "BgMtl",
  1291.                         }
  1292.                     },
  1293.                 },
  1294.                 FgMtl = Input {
  1295.                     SourceOp = "ChannelBooleans1",
  1296.                     Source = "Output",
  1297.                     CustomData = {
  1298.                         Metadata = {
  1299.                             Type = "Material",
  1300.                             Set = "FgMtl",
  1301.                         }
  1302.                     },
  1303.                 },
  1304.                 Dissolve = Input {
  1305.                     Value = 1,
  1306.                     CustomData = {
  1307.                         Metadata = {
  1308.                             Set = "Dissolve",
  1309.                             Type = "Float",
  1310.                         }
  1311.                     },
  1312.                 },
  1313.             },
  1314.             ViewInfo = OperatorInfo