I'm updating an age old script for generating a comp for Vray renderpasses and I'm having some trouble. The script stops at line 155 deleting unnecessary merge nodes with an error: "attempt to index global 'MG_VRayDiffuseFilter' (a nil value)". If i run the same delete-command (MG_VRayDiffuseFilter:Delete()) in console it works fine.
I'll appreciate help with this.
- ----------------------------------------------------------------------------
- -- VRay_Comp_RAW
- -- Creates a comp from Vray passes.
- -- Toolscript
- --
- -- Created: 19.8.2011
- ----------------------------------------------------------------------------
- fusion = Fusion()
- composition = fusion.GetCurrentComp() or fusion:GetCurrentComp()
- comp:StartUndo("Vray_Comp_RAW")
- -- Check if tool
- if not tool then
- print("Error: This script must be run as a Tool Script.")
- return
- end
- if tool:GetAttrs().TOOLS_RegID ~= "Loader" then
- print("Error: This script can only be run on a Loader tool.")
- return
- end
- -- Get loader path
- if (tool:GetAttrs().TOOLS_RegID == "Loader") then
- clip = tool.Clip[TIME_UNDEFINED]
- end
- -- Check base loader position
- tx,ty = comp.CurrentFrame.FlowView:GetPos(tool)
- -- Variables
- OL_Parse = {}
- OL_Parse = bmd.parseFilename(clip)
- OL_clean = OL_Parse.CleanName
- OL_path = OL_Parse.Path
- OL_ext = OL_Parse.Extension
- OL_fullpath = OL_Parse.FullPath
- -- Define node colors
- MG_tilecolor = {R = 0.41, G = 0.46, B = 1}
- MG_textcolor = {R = 0, G = 0, B = 0}
- LD_tilecolor = {R = 0.72, G = 0.61, B = 0.8}
- LD_textcolor = {R = 0, G = 0, B = 0}
- function AddPass(passname, blend, gain, px, py, applymode)
- -- Make a loader
- local pass_path = OL_path..OL_clean.."_"..passname.."0000"..OL_ext
- pass_loader = comp:AddTool("Loader", tx + px + 2, ty + py)
- pass_loader.Clip[TIME_UNDEFINED] = pass_path
- pass_loader:SetAttrs({TOOLS_Name = "LD_"..passname})
- pass_loader.Loop = 0
- pass_loader.TileColor = LD_tilecolor
- -- Create CB's for alpha divide
- AddCB1 = comp:AddTool("ChannelBoolean", tx + px + 2, ty + py + 4)
- AddCB1:SetAttrs({TOOLS_Name = "CB_Divide"..passname})
- AddCB1.Operation = 7
- AddCB1.ToRed = 8
- AddCB1.ToGreen = 8
- AddCB1.ToBlue = 8
- AddCB1.ToAlpha = 4
- AddCB2 = comp:AddTool("ChannelBoolean", tx + px + 2, ty + py + 5)
- AddCB2:SetAttrs({TOOLS_Name = "CB_Alpha"..passname})
- AddCB2.Operation = 0
- AddCB2.ToRed = 0
- AddCB2.ToGreen = 1
- AddCB2.ToBlue = 2
- AddCB2.ToAlpha = 16
- AddCB1.TileColor = LD_tilecolor
- AddCB1.TextColor = LD_textcolor
- AddCB2.TileColor = LD_tilecolor
- AddCB2.TextColor = LD_textcolor
- AddCB1.Background = pass_loader.Output
- AddCB2.Background = AddCB1.Output
- -- Create merge
- pass_merge = comp:AddTool("Merge", tx + px + 2, ty + py + 8)
- pass_merge:SetAttrs({TOOLS_Name = "MG_"..passname})
- pass_merge({Blend = blend})
- pass_merge({Gain = gain})
- pass_merge({ApplyMode = applymode})
- pass_merge.TileColor = MG_tilecolor
- pass_merge.TextColor = MG_textcolor
- pass_merge.Foreground = AddCB2.Output
- end
- function RGB_Masks(t, red, green, blue, alpha)
- -- Get tool position
- local tx,ty = comp.CurrentFrame.FlowView:GetPos(t)
- -- Create RGB Masks
- mask_R = comp:AddTool("BitmapMask", tx + -1, ty + 1)
- mask_R:SetAttrs({TOOLS_Name = red})
- mask_R.Channel = "Red"
- mask_R.TileColor = {R = 1, G = 0, B = 0}
- mask_R.Image = t.Output
- mask_G = comp:AddTool("BitmapMask", tx, ty + 1)
- mask_G:SetAttrs({TOOLS_Name = green})
- mask_G.Channel = "Green"
- mask_G.TileColor = {R = 0, G = 1, B = 0}
- mask_G.Image = t.Output
- mask_B = comp:AddTool("BitmapMask", tx + 1, ty + 1)
- mask_B:SetAttrs({TOOLS_Name = blue})
- mask_B.Channel = "Blue"
- mask_B.TileColor = {R = 0, G = 0, B = 1}
- mask_B.Image = t.Output
- mask_A = comp:AddTool("BitmapMask", tx + 2, ty + 1)
- mask_A:SetAttrs({TOOLS_Name = alpha})
- mask_A.Channel = "Alpha"
- mask_A.TileColor = {R = 1, G = 1, B = 1}
- mask_A.Image = t.Output
- end
- function AddMisc(state, px, py)
- AddGamut = comp:AddTool("GamutConvert", tx + px + 20, ty + py + 8)
- AddGamut:SetAttrs({TOOLS_Name = "Gamut_SRGB"})
- AddGamut.OutputSpace = "sRGB"
- AddGamut.PreDividePostMultiply = 1
- end
- function AddPassAlpha(passname, blend, gain, px, py, applymode)
- -- Make a loader
- local pass_path = OL_path..OL_clean.."_"..passname.."0000"..OL_ext
- pass_loader_alpha = comp:AddTool("Loader", tx + px + 2, ty + py)
- pass_loader_alpha.Clip[TIME_UNDEFINED] = pass_path
- pass_loader_alpha:SetAttrs({TOOLS_Name = "LD_"..passname})
- pass_loader_alpha.Loop = 0
- pass_loader_alpha.TileColor = LD_tilecolor
- end
- -- Generate comp
- comp:Lock()
- AddPass("VRayDiffuseFilter",0,1,0,0)
- AddPass("VRayRawGlobalIllumination",1,0,2,-2)
- AddPass("VRayRawLighting",1,0,4,-2)
- AddPass("VRaySelfIllumination",1,0,6,0)
- AddPass("VRaySSS2",1,0,8,0)
- AddPass("VRayRefraction",1,0,10,0)
- AddPass("VRayReflection",1,0,12,0)
- AddPass("VRaySpecular",1,0,14,0)
- AddPass("VRayWireColor",1,0,4,10)
- AddPass("MultiMatteElement",1,0,8,10)
- -- Delete unnecessary merges
- MG_VRayDiffuseFilter:Delete()
- MG_VRayRawGlobalIllumination:Delete()
- MG_VRayWireColor:Delete()
- MG_MultiMatteElement:Delete()
- -- Extra merge
- MG_RawTotalLighting = comp:AddTool("Merge", tx + 6, ty + 8)
- MG_RawTotalLighting:SetAttrs({TOOLS_Name = "MG_RawTotalLighting"})
- MG_RawTotalLighting({ApplyMode = "Multiply"})
- MG_RawTotalLighting.TileColor = MG_tilecolor
- MG_RawTotalLighting.TextColor = MG_textcolor
- MG_RawTotalLighting.Foreground = MG_VrayRawLighting.Output
- CB_AlphaVRayWireColor:Delete()
- CB_AlphaMultiMatteElement:Delete()
- RGB_Masks(CB_DivideVRayWireColor, "WC_Red", "WC_Green", "WC_Blue", "WC_Alpha")
- RGB_Masks(CB_DivideMultiMatteElement, "MM_Red", "MM_Green", "MM_Blue", "MM_Alpha")
- -- Connect nodes
- MG_RawTotalLighting.Background = CB_AlphaVRayDiffuseFilter.Output
- MG_VRaySSS2.Background = MG_VRaySelfIllumination.Output
- MG_VRaySelfIllumination.Background = MG_RawTotalLighting.Output
- MG_VRayRefraction.Background = MG_VRaySSS2.Output
- MG_VrayRawLighting.Background = CB_AlphaVRayRawGlobalIllumination.Output
- MG_VRayReflection.Background = MG_VRayRefraction.Output
- MG_VRaySpecular.Background = MG_VRayReflection.Output
- -- Misc
- AddPassAlpha("VRayAlpha",0,1,16,0)
- AddMisc("", 0, 0)
- MC = comp:AddTool("MatteControl", tx + 18, ty + 8)
- MC.MatteCombine = 4
- MC.PostMultiplyImage = 1
- MC:SetAttrs({TOOLS_Name = "MatteControl_Alpha"})
- MatteControl_Alpha.Foreground = LD_VrayAlpha.Output
- MatteControl_Alpha.Background = MG_VRaySpecular.Output
- Gamut_SRGB.Input = MatteControl_Alpha.Output
- -- ZDepth
- AddPassAlpha("VRayZDepth",0,1,16,14)
- CB_ZDepth = comp:AddTool("ChannelBoolean", tx + 18, ty + 17)
- CB_ZDepth:SetAttrs({TOOLS_Name = "CB_ZDepth"})
- CB_ZDepth.Operation = 0
- CB_ZDepth.ToAlpha = 0
- CB_ZDepth.Background = LD_VrayZDepth.Output
- -- Relight nodes
- AddPassAlpha("VRayBumpNormals",0,1,14,14)
- CB_NormalAux = comp:AddTool("ChannelBoolean", tx + 16, ty + 17)
- CB_NormalAux:SetAttrs({TOOLS_Name = "CB_Normals"})
- CB_NormalAux.Operation = 0
- CB_NormalAux.ToRed = 17
- CB_NormalAux.ToGreen = 17
- CB_NormalAux.ToBlue = 17
- CB_NormalAux.ToAlpha = 16
- CB_NormalAux.EnableExtraChannels = 1
- CB_NormalAux.ToXNormal = 0
- CB_NormalAux.ToYNormal = 1
- CB_NormalAux.ToZNormal = 2
- Shader = comp:AddTool("Shader", tx + 16, ty + 18)
- Shader:SetAttrs({TOOLS_Name = "Relight"})
- Shader.Ambient = 0
- Shader.Diffuse = 0.25
- Shader.Specular = 0.1
- CB_NormalAux.Background = LD_VRayBumpNormals.Output
- Relight.Input = CB_NormalAux.Output
- comp:EndUndo()
- comp:Unlock()
Mika
www.pinata.fi