--lua -- -------------------------- -- Camera Extender v1.0 - -------------------------- -- AUTHOR: Zoltan Erdokovy (zoltan.erdokovy@gmail.com) -- -- -- This script stores render paramaters (like resolution and global illumination settings) -- in camera items. -- -- -- USAGE: -- First, select a camera. (If more than one item is selected, then the camera with the lowest -- index will be used.) -- Run the script. It has different modes: -- -- @CameraExtender.lua SaveToCamera ---- Saves the actual render settings into the camera. For the list of processed parameters, see ---- the list bellow. -- -- @CameraExtender.lua LoadFromCamera ---- Overwrites the render settings with data stored in a camera item. ---- For the list of processed parameters, see the list bellow. -- -- @CameraExtender.lua InitCamera ---- It sets the item command for the selected camera. By default it offers to add the ---- "@CameraExtender.lua LoadFromCamera" command to it, which will run every time a camera is ---- selected in on of the 3D viewports. (Will not run if the camera is selected any other way.) ---- The dialog pops up so you can modify the command: change the path if necessary. -- ------------------------------------------------ -- -- If you find a bug or have a feature requests don't hesitate to contact me. :) -- ------------------------------------------------ -- This software is licensed under the -- Creative Commons Attribution-Share Alike 3.0 Unported License. -- For more info please visit -- http://creativecommons.org/licenses/by-sa/3.0/ ------------------------------------------------ --------------- -- Changelog -- --------------- -- -- v1.0 (2009-09-06): -- It's for Modo 401 SP1 and above! -- Removed parameters related to bug workarounds. Now SaveToCamera stores all the processed -- render settings in the camera, there is no need to manually do anything. -- -- v0.5: -- First release. -- ------------------------------------------------ version = "v1.0" SelectedCamera = "" -- The selected camera we are working with. RenderItem = "" -- The renderer in the scene. ResolutionUnit = "-" ResolutionX = "-" ResolutionY = "-" DPI = "-" PixelAspectRatio = "-" BucketX = "-" BucketY = "-" RenderRegion = "-" RenderRegionL = "-" RenderRegionR = "-" RenderRegionT = "-" RenderRegionB = "-" AASamples = "-" DOF = "-" MBlur = "-" Stereo = "-" RayShadow = "-" ReflDepth = "-" RefrDepth = "-" DispEnable = "-" DispRate = "-" DispRatio = "-" EdgeMin = "-" DispSmooth = "-" GIEnable = "-" GIRays = "-" GIBounces = "-" GIRange = "-" IrradCache = "-" IrradRays = "-" IrradRate = "-" IrradRatio = "-" IrradInterp = "-" Walkthrough = "-" DirectCaustics = "-" TotalPhotons = "-" LocalPhotons = "-" -- -- -- SPLIT STRING -- -- -- function SplitString(Input,Delimiter) local Result, i, j Result = {} i = 0 j = 0 --if(#Input == 1) then return Input end if (string.len(Input) == 1) then return Input end while true do j=string.find(Input,Delimiter,i+1,true) -- Find the next Delimiter in the string if j~=nil then -- If "not not" found then... table.insert(Result, string.sub(Input,i,j-1)) -- Save it in our array. i=j+1 -- Save just after where we found it for searching next time. else table.insert(Result, string.sub(Input,i)) -- Save what's left in our array. break -- Break at end, as it should be, according to the lua manual. end end return Result end -- -- -- GET CAMERA TAG -- -- -- function GetCameraTag() local Tag, Values Tag = "" Values = {} lx("select.drop item") lx("select.item "..SelectedCamera) Tag = lxq("item.tag string CAMX ?")[1] if Tag ~= nil then Values = SplitString(Tag,"|") ResolutionUnit = Values[1] ResolutionX = Values[2] ResolutionY = Values[3] DPI = Values[4] PixelAspectRatio = Values[5] BucketX = Values[6] BucketY = Values[7] RenderRegion = Values[8] RenderRegionL = Values[9] RenderRegionR = Values[10] RenderRegionT = Values[11] RenderRegionB = Values[12] AASamples = Values[13] DOF = Values[14] MBlur = Values[15] Stereo = Values[16] RayShadow = Values[17] ReflDepth = Values[18] RefrDepth = Values[19] DispEnable = Values[20] DispRate = Values[21] DispRatio = Values[22] EdgeMin = Values[23] DispSmooth = Values[24] GIEnable = Values[25] GIRays = Values[26] GIBounces = Values[27] GIRange = Values[28] IrradCache = Values[29] IrradRays = Values[30] IrradRate = Values[31] IrradRatio = Values[32] IrradInterp = Values[33] Walkthrough = Values[34] DirectCaustics = Values[35] TotalPhotons = Values[36] LocalPhotons = Values[37] else lxout("WARNING: No CAMX tag found.") end end -- -- -- SET CAMERA TAG -- -- -- function SetCameraTag() local Tag = "" lx("select.drop item") lx("select.item "..SelectedCamera) Tag = ResolutionUnit.."|"..ResolutionX.."|"..ResolutionY.."|"..DPI.."|"..PixelAspectRatio.."|"..BucketX.."|"..BucketY.."|"..RenderRegion.."|"..RenderRegionL.."|"..RenderRegionR.."|"..RenderRegionT.."|"..RenderRegionB.."|"..AASamples.."|"..DOF.."|"..MBlur.."|"..Stereo.."|"..RayShadow.."|"..ReflDepth.."|"..RefrDepth.."|"..DispEnable.."|"..DispRate.."|"..DispRatio.."|"..EdgeMin.."|"..DispSmooth.."|"..GIEnable.."|"..GIRays.."|"..GIBounces.."|"..GIRange.."|"..IrradCache.."|"..IrradRays.."|"..IrradRate.."|"..IrradRatio.."|"..IrradInterp.."|"..Walkthrough.."|"..DirectCaustics.."|"..TotalPhotons.."|"..LocalPhotons lx("item.tag string CAMX "..Tag) lxout(Tag) end -- -- -- GET VALUE -- -- -- function GetValue(Query,Var) Result = lxq(Query) if Result ~= nil then return Result[1] else return Var end end -- -- -- GET RENDER PROPERTIES -- -- -- function GetRenderProperties() lxout("GetRenderProperties()") lx("select.drop item") lx("select.item "..SelectedCamera) ResolutionX = GetValue("render.res 0 ?",ResolutionX) ResolutionY = GetValue("render.res 1 ?",ResolutionY) DPI = GetValue("render.dpi ?",DPI) lx("select.item "..RenderItem) ResolutionUnit = GetValue("item.channel resUnit ?",ResolutionUnit) PixelAspectRatio = GetValue("item.channel pAspect ?",PixelAspectRatio) BucketX = GetValue("item.channel polyRender$bucketX ?",BucketX) BucketY = GetValue("item.channel polyRender$bucketY ?",BucketY) RenderRegion = GetValue("item.channel polyRender$region ?",RenderRegion) RenderRegionL = GetValue("!item.channel polyRender$regX0 ?",RenderRegionL) RenderRegionR = GetValue("!item.channel polyRender$regX1 ?",RenderRegionR) RenderRegionT = GetValue("!item.channel polyRender$regY0 ?",RenderRegionT) RenderRegionB = GetValue("!item.channel polyRender$regY1 ?",RenderRegionB) -- Render settings -- AASamples = GetValue("item.channel polyRender$aa ?",AASamples) DOF = GetValue("item.channel polyRender$dof ?",DOF) MBlur = GetValue("item.channel polyRender$mBlur ?",MBlur) Stereo = GetValue("item.channel polyRender$stereo ?",Stereo) RayShadow = GetValue("item.channel rayShadow ?",RayShadow) ReflDepth = GetValue("item.channel reflDepth ?",ReflDepth) RefrDepth = GetValue("item.channel refrDepth ?",RefrDepth) DispEnable = GetValue("item.channel polyRender$dispEnable ?",DispEnable) DispRate = GetValue("!item.channel polyRender$dispRate ?",DispRate) DispRatio = GetValue("!item.channel polyRender$dispRatio ?",DispRatio) EdgeMin = GetValue("!item.channel polyRender$edgeMin ?",EdgeMin) DispSmooth = GetValue("!item.channel polyRender$dispSmooth ?",DispSmooth) -- GI settings -- GIEnable = GetValue("item.channel polyRender$globEnable ?",GIEnable) GIRays = GetValue("!item.channel polyRender$globRays ?",GIRays) GIBounces = GetValue("!item.channel polyRender$globLimit ?",GIBounces) GIRange = GetValue("!item.channel polyRender$globRange ?",GIRange) IrradCache = GetValue("!item.channel polyRender$irrCache ?",IrradCache) IrradRays = GetValue("!item.channel polyRender$irrRays ?",IrradRays) IrradRate = GetValue("!item.channel polyRender$irrRate ?",IrradRate) IrradRatio = GetValue("!item.channel polyRender$irrRatio ?",IrradRatio) IrradInterp = GetValue("!item.channel polyRender$irrVals ?",IrradInterp) Walkthrough = GetValue("!item.channel polyRender$irrWalk ?",Walkthrough) DirectCaustics = GetValue("!item.channel polyRender$causEnable ?",DirectCaustics) TotalPhotons = GetValue("!item.channel polyRender$causTotal ?",TotalPhotons) LocalPhotons = GetValue("!item.channel polyRender$causLocal ?",LocalPhotons) lx("select.drop item") lx("select.item "..SelectedCamera) end -- -- -- SET VALUE -- -- -- function SetValue(Command, Value) if Value ~= "-" then lx(Command..Value) end end -- -- -- SET RENDER PROPERTIES -- -- -- function SetRenderProperties() lxout("SetRenderProperties()") lx("select.drop item") SetValue("select.item ",SelectedCamera) -- Frame properties -- SetValue("render.camera ",SelectedCamera) SetValue("render.res 0 ",ResolutionX) SetValue("render.res 1 ",ResolutionY) SetValue("render.dpi ",DPI) SetValue("select.item ",RenderItem) SetValue("item.channel resUnit ",ResolutionUnit) SetValue("item.channel pAspect ",PixelAspectRatio) SetValue("item.channel polyRender$bucketX ",BucketX) SetValue("item.channel polyRender$bucketY ",BucketY) SetValue("item.channel polyRender$region ",RenderRegion) SetValue("!item.channel polyRender$regX0 ",RenderRegionL) SetValue("!item.channel polyRender$regX1 ",RenderRegionR) SetValue("!item.channel polyRender$regY0 ",RenderRegionT) SetValue("!item.channel polyRender$regY1 ",RenderRegionB) -- Render settings -- SetValue("item.channel polyRender$aa ",AASamples) SetValue("item.channel polyRender$dof ",DOF) SetValue("item.channel polyRender$mBlur ",MBlur) SetValue("item.channel polyRender$stereo ",Stereo) SetValue("item.channel rayShadow ",RayShadow) SetValue("item.channel reflDepth ",ReflDepth) SetValue("item.channel refrDepth ",RefrDepth) SetValue("item.channel polyRender$dispEnable ",DispEnable) SetValue("!item.channel polyRender$dispRate ",DispRate) SetValue("!item.channel polyRender$dispRatio ",DispRatio) SetValue("!item.channel polyRender$edgeMin ",EdgeMin) SetValue("!item.channel polyRender$dispSmooth ",DispSmooth) -- GI settings -- SetValue("item.channel polyRender$globEnable ",GIEnable) SetValue("!item.channel polyRender$globRays ",GIRays) SetValue("!item.channel polyRender$globLimit ",GIBounces) SetValue("!item.channel polyRender$globRange ",GIRange) SetValue("!item.channel polyRender$irrCache ",IrradCache) SetValue("!item.channel polyRender$irrRays ",IrradRays) SetValue("!item.channel polyRender$irrRate ",IrradRate) SetValue("!item.channel polyRender$irrRatio ",IrradRatio) SetValue("!item.channel polyRender$irrVals ",IrradInterp) SetValue("!item.channel polyRender$irrWalk ",Walkthrough) SetValue("item.channel polyRender$causEnable ",DirectCaustics) SetValue("!item.channel polyRender$causTotal ",TotalPhotons) SetValue("!item.channel polyRender$causLocal ",LocalPhotons) end -- -- -- EDIT CAMERA -- -- -- function EditCamera() lx("select.drop item") lx("select.item "..SelectedCamera) lx("item.tag string CAMX") end -- -- -- INIT CAMERA -- -- -- function InitCamera() lx("select.drop item") lx("select.item "..SelectedCamera) lx("?item.command mode:add cmd:\"@CameraExtender.lua LoadFromCamera\"") end -- -- -- GET RENDER ITEM -- -- -- function GetRenderItem() ItemCount = 0 ItemType = "" ItemID = "" ItemCount = lxq( "query sceneservice item.N ?")[1] for i = 0, ItemCount-1 do ItemType = lxq( "query sceneservice item.type ? "..i )[1] if ItemType == "polyRender" then ItemID = lxq( "query sceneservice item.id ? "..i )[1] end end --lxout(ItemID) return(ItemID) end -- -- -- MAIN -- -- -- Arg1 = arg[1] -- First argument -- Initialization -- SelectedCamera = lxq("query sceneservice selection ? camera") RenderItem = GetRenderItem() if SelectedCamera ~= nil then SelectedCamera = SelectedCamera[1] if (Arg1 ~= nil) then Arg1 = string.upper(Arg1) if Arg1 == "SAVETOCAMERA" then GetCameraTag() -- Get stored data to see if any previously nil ("-") field has valid value now. GetRenderProperties() SetCameraTag() elseif Arg1 == "LOADFROMCAMERA" then GetCameraTag() SetRenderProperties() elseif Arg1 == "INITCAMERA" then InitCamera() end else lxout("WARNING: No argument was passed.") end lx("select.drop item") lx("select.item "..SelectedCamera) -- Reselect the camera before leaving the script. else lxout("WARNING: No camera is selected.") end