Posts Tagged ‘plug-in’

Fusion : 64bit plugins available

Friday, August 7th, 2009

Finally found a nice cheap good old Visual Studio 2005 Standard edition for my 64bit compiling needs.

Just quickly posting the download links in this post, going to do some restructuring of the site as well to make plugin updates and downloads a bit less messy and to get a better overview of what is available.

download : HoS_PixelMapper x64

download : HoS_MayaToxic2DMV x64

download : HoS_Tonemapper x64

download : HoS_Negative x64

Fusion : HoS_PixelMapper.plugin v1.1 update

Monday, June 22nd, 2009

Been using the plug-in a bit and added some  features and made some changes (some of which change the resulting output to the previous version.)

changes v1.1

  1. Added a Flip X, Flip Y and Rotate option so it is possible to flip the mapping image or rotate it in 90 degree steps (these operations happen before the cropping feature.)
  2. Center Position X-axis inverted so it now is easier to place your mapping image.
  3. Alpha is used as well now (this one seemed to have slipped through and i noticed it only till the last job.)
  4. When using a 8/16-bit integer image as UV map now works as well (not sure why you would want this, but hey, better save than sorry.)

visit the original post to download the latest version.

Fusion : hos_incrementalSave.eyeonscript

Thursday, June 4th, 2009

eyeonfusion120Here’s a script that mimics the way Autodesk Maya handles incremental saving of scene files.

Basically what it does is create a directory (if it is not already there) called incrementalSave in the directory your comp is located, in the incrementalSave directory another directory is created with the exact same name as your comp (including the extension)

Finally when both directories exist, the script copies your old scene file to the incrementalSave\compname directory and adds a 4 digit versioning number between the file name and the extension, separated by a ‘period’.

Every time you save, the directory structure is checked, and the script checks what the next highest versioning number should be, your old comp is copied, and the comp is saved (this way your final comp will always have the same name, where as you ‘backups’ are the only files that get incremented.)

The script has not been tested to death yet, so if you find anything, let me know.

Also, i have no idea whether or not this will play merry hell with Generations (as i have no idea whether or not Generations has a build in incremental saving system.)

Another thing you will notice is, that since this script copies the versioning file using the os.execute command, a DOS pop-up will appear for a couple of milliseconds, this is as far as i know, unavoidable, if someone however knows another way, please let me know.



Version 1.2 changelog:

  1. Changed the incremental save file pattern matching.

download : hos_incrementalSave_v1.2

.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
--[[
 hos_incrementalSave
 
 by S.Neve / House of Secrets
 
 some small updates from the inital release:
 
 v1.2 changes:
 - Changed the way the postfix increment number for the incremental backup comp
 is searched for, as in the older version a name like 'vfx_shot_01_31-448.comp
 would break the gsub expression for some unknown reason, returning a nil value.
 
 v1.1 changes:
 - creating the backup incremental file now uses the os.rename function to move
 the file, this worked in Lightwave and seems to behave the same in Fusion,
 this prevents the DOS box popup on saving.
 
 - renamed the script to match our other script and plugin naming conventions.
 
 - encapsulated the DOS file names in quotation marks to make creation in and
 of directories with spaces possible.
 
 v1.0 changes:
 - Initial release
 
]]--
 
function findpattern(text, pattern, start)
 return string.sub(text, string.find(text, pattern, start))
end
 
fa = composition:GetAttrs()
if fa.COMPS_FileName == "" then
 Save()
else
 pf = eyeon.parseFilename(MapPath(fa.COMPS_FileName))
 
 if not direxists( pf.Path .. "incrementalSave" ) then
 print("creating dir : " .. pf.Path .. "incrementalSave")
 os.execute("mkdir \"" .. pf.Path .. "incrementalSave\"")
 else
 --print("dir exists")
 end
 
 if not direxists( pf.Path .. "incrementalSave\\" .. pf.Name .. pf.Extension ) then
 print("creating dir : " .. pf.Path .. "incrementalSave\\" .. pf.Name .. pf.Extension)
 os.execute("mkdir \"" .. pf.Path .. "incrementalSave\\" .. pf.Name .. pf.Extension .. "\"")
 else
 --print("dir exists")
 end
 
 -- search inc saves
 path = pf.Path .. "incrementalSave\\" .. pf.Name .. pf.Extension .. "\\*.comp"
 dir = readdir(path)
 num = table.getn(dir)
 currentVersion = 0
 
 for i = 1,num do
 if not dir[i].IsDir then
 fileExtension = string.gsub( dir[i].Name, "[.][^.]*$", "")
 --fileNumberString = string.gsub( fileExtension, string.gsub( fileExtension, "[^.][0-9]+$", ""), "")
 fileNumberString = string.sub(fileExtension, string.find(fileExtension, "(%d+)$", 0))
 fileNumber = tonumber( fileNumberString )
 --print(fileNumberString)
 --print(fileNumber)
 if currentVersion < fileNumber then
 currentVersion = fileNumber
 end
 end
 end
 currentVersionString = "000" .. tostring(currentVersion + 1)
 currentVersionString = string.sub(currentVersionString, string.len(currentVersionString) - 3 , string.len(currentVersionString))
 
 dest =  pf.Path .. "incrementalSave\\" .. pf.Name .. pf.Extension .. "\\" .. pf.Name .. "." .. currentVersionString .. ".comp"
 src =  pf.Path .. pf.Name .. pf.Extension
 os.rename(src, dest) -- this seems to work in Lightwave, and does the same in Fusion, much cleaner isn't it?
 Save(src)
end

Version 1.1 changelog:

  1. Creating the backup incremental file now uses the os.rename function to move the file, this worked in Lightwave and seems to behave the same in Fusion, this prevents the DOS box popup on saving.
  2. Renamed the script to match our other script and plugin naming conventions.
  3. Encapsulated the DOS file names in quotation marks to make creation in and of directories with spaces possible.

download : hos_incrementalSave v1.1

.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
--[[
  hos_incrementalSave v1.1
 
  by S.Neve / House of Secrets
 
  some small updates from the inital release:
 
  v1.1 changes:
    - creating the backup incremental file now uses the os.rename function to move
    the file, this worked in Lightwave and seems to behave the same in Fusion,
    this prevents the DOS box popup on saving.
 
  - renamed the script to match our other script and plugin naming conventions.
 
  - encapsulated the DOS file names in quotation marks to make creation in and
    of directories with spaces possible.
 
  v1.0 changes:
  - Initial release
 
]]--
 
fa = composition:GetAttrs()
if fa.COMPS_FileName == "" then
    Save()
else
    pf = eyeon.parseFilename(MapPath(fa.COMPS_FileName))
 
    if not direxists( pf.Path .. "incrementalSave" ) then
        print("creating dir : " .. pf.Path .. "incrementalSave")
        os.execute("mkdir \"" .. pf.Path .. "incrementalSave\"")
    else
        --print("dir exists")
    end
 
    if not direxists( pf.Path .. "incrementalSave\\" .. pf.Name .. pf.Extension ) then
        print("creating dir : " .. pf.Path .. "incrementalSave\\" .. pf.Name .. pf.Extension)
        os.execute("mkdir \"" .. pf.Path .. "incrementalSave\\" .. pf.Name .. pf.Extension .. "\"")
    else
        --print("dir exists")
    end
 
    -- search inc saves
    path = pf.Path .. "incrementalSave\\" .. pf.Name .. pf.Extension .. "\\*.comp"
    dir = readdir(path)
    num = table.getn(dir)
    currentVersion = 0
 
    for i = 1,num do
        if not dir[i].IsDir then
            fileExtension = string.gsub( dir[i].Name, "[.][^.]*$", "")
            fileNumberString = string.gsub( fileExtension, string.gsub( fileExtension, "[0-9]+$", ""), "")
            fileNumber = tonumber( fileNumberString )
            if currentVersion < fileNumber then
                currentVersion = fileNumber
            end
        end
    end
    currentVersionString = "000" .. tostring(currentVersion + 1)
    currentVersionString = string.sub(currentVersionString, string.len(currentVersionString) - 3 , string.len(currentVersionString))
 
    dest =  pf.Path .. "incrementalSave\\" .. pf.Name .. pf.Extension .. "\\" .. pf.Name .. "." .. currentVersionString .. ".comp"
    src =  pf.Path .. pf.Name .. pf.Extension
    os.rename(src, dest) -- this seems to work in Lightwave, and does the same in Fusion, much cleaner isn't it?
    Save(src)
end

download : incrementalSave v1.0

.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
-- incrementalSave v1.0
-- by S.Neve - House of Secrets 03-06-2009
-- for latest version, check http://www.svennneve.com
 
fa = composition:GetAttrs()
if fa.COMPS_FileName == "" then
    Save()
else
    pf = eyeon.parseFilename(MapPath(fa.COMPS_FileName))
 
    if not direxists(pf.Path .. "incrementalSave") then
        print("creating dir : " .. pf.Path .. "incrementalSave")
        os.execute("mkdir " .. pf.Path .. "incrementalSave")
    else
        --print("dir exists")
    end
 
    if not direxists(pf.Path .. "incrementalSave\\" .. pf.Name .. pf.Extension) then
        print("creating dir : " .. pf.Path .. "incrementalSave\\" .. pf.Name .. pf.Extension)
        os.execute("mkdir " .. pf.Path .. "incrementalSave\\" .. pf.Name .. pf.Extension)
    else
        --print("dir exists")
    end
 
    -- search inc saves
    path = pf.Path .. "incrementalSave\\" .. pf.Name .. pf.Extension .. "\\*.comp"
    dir = readdir(path)
    num = table.getn(dir)
    currentVersion = 0
 
    for i = 1,num do
        if not dir[i].IsDir then
            fileExtension = string.gsub( dir[i].Name, "[.][^.]*$", "")
            fileNumberString = string.gsub( fileExtension, string.gsub( fileExtension, "[0-9]+$", ""), "")
            fileNumber = tonumber( fileNumberString )
            if currentVersion < fileNumber then
                currentVersion = fileNumber
            end
            print( currentVersion )
        end
    end
    currentVersionString = "000" .. tostring(currentVersion + 1)
    currentVersionString = string.sub(currentVersionString, string.len(currentVersionString) - 3 , string.len(currentVersionString))
 
    filename = pf.Path .. "incrementalSave\\" .. pf.Name .. pf.Extension .. "\\" .. pf.Name .. "." .. currentVersionString .. ".comp"
    os.execute("copy /Y " .. fa.COMPS_FileName .. " " .. filename)
    --Save(filename)
    Save(pf.Path .. pf.Name .. pf.Extension)
end

Fusion : HoS_Tonemapper.plugin

Thursday, May 28th, 2009

eyeonfusion120Here’s a tonemapping plug-in, still a work on progress.

It’s a tonemapper based on the Adaptive Global Luminance mapping as written in the paper ‘Comprehensive Fast Tone Mapping for High Dynamic Range Image Visualization‘ by Jiang Duan, Guoping Qiu and Min Chen.
For now i have left out the more complex linear scale histogram equalization blend curve (the math goes far beyond my knowledge so i’m brushing up on my algebra abit before i’m able to implement that feature.)

download : HoS_Tonemapper_x86

Fusion : HoS_PixelMapper.plugin

Wednesday, May 27th, 2009

eyeonfusion120Been working on this plugin last weekend, it does nothing revolutionary, basically it does the same as the default Deep Pixel Texture node, it allows you to map an image to a UV channel render.

I wrote the plugin more to learn a bit about the SDK and how the sub pixel sampling functions work (amazingly simple and incredibly well for that matter)

The only differences with the Deep Pixel Texture are that all options have viewport previews/handles and the plugin accepts UV as a Red Green image in the Background input, so you won’t need a Boolean tool to add Red Green data into a UV auxiliary channel.
It also has a crop option to pre crop the mapped image, you can also switch the view to you mapped image (to easily place crops) and you can switch to the actual cropped image.
The tool also offers different edge fill modes for pixels that fall outside the 0.0, 1.0 space of a UV map.

Another thing planned for this tool is to have an option where you can switch between using UV auxiliary channels instead of the Red Green channel, just for the heck of it.

So far, i made sure Fusion won’t explode when no inputs are present or when an input fails, but you never know, should it act funny, just let me know.

download : HoS_PixelMapper v1.1

download : HoS_PixelMapper v1.0

changes v1.1

  1. Added a Flip X, Flip Y and Rotate option so it is possible to flip the mapping image or rotate it in 90 degree steps (these operations happen before the cropping feature.)
  2. Center Position X-axis inverted so it now is easier to place your mapping image.
  3. Alpha is used as well now (this one seemed to have slipped through and i noticed it only till the last job.)
  4. When using a 8/16-bit integer image as UV map now works as well (not sure why you would want this, but hey, better save than sorry.)

changes v1.0

  1. initial release


pixelmapper

Fusion : HoS_Negative.plugin

Thursday, May 14th, 2009

eyeonfusion120And here it is ladies and gentlemen, the awesomest plug-in ever written by man, 2.5 years of research and programming, over 430.000 lines of code, strap into your seats and hold on:

The node, that inverts shit!

.

download : Hos_Negative

slicedbread_nap1

Fusion : HoS_MayaToxic2DMV.plugin

Thursday, May 14th, 2009

eyeonfusion120A Fusion plug-in that converts a Maya/MentalRay 2D Motion Vector (2dMVToxik) render pass to a normalized data set that Re:VisionFX’s ReelSmart Motion Blur can us.

All you as user need to do, is render out your 2dMVToxik pass as you normally would (either embedded as extra EXR pass or as a single RGB(A) file) and plug the following channels in the Background input:

red -> 2dMVToxic X-motion (the red channel by default.)
green -> 2dMXToxik Y-motion (the green channel by default.)

and plug the following channel into the Foreground input:

alpha -> the Alpha channel of the image that needs to be motion blurred.

When you have done that, the plug-in normalizes the channels according to the Displacement value so that when placed into the FG input of a ReelSmart Motion Blur Vectors node with the Max Displace set to the same value as the Displacement value of this plug-in, it should work exactly like the data that is produced by a shading plug-in like,  say lm2dmv.

This plug-in has been used extensively in our pipeline without any troubles so far, but should you run into something please let me know.
At the moment i have only compiled a x86 version and some small updates are planned, so keep an eye out for those.

download : hos_mayatoxic2dmv

Fusion : Toggle_Passthrough.eyeonscript

Wednesday, May 13th, 2009

eyeonfusion120Created a small script today to alleviate a small niggle i have, namely on a missing feature while working on a comp that became a bit sluggish because of the extensive use of optical flow based nodes, the ability to do quick multiple passthrough toggling by using a sort of pre selected set of nodes.

Before, in order to work with the comp and have it render refreshes fast enough to not be uncomfortable, i often found myself selecting all heavy task nodes (by digging through my comp flow by hand) and then toggle their passthrough state.

Now this isn’t a disaster, but switching between viewing the final product and the editting version takes time and breaks my working flow.

Here’s a small script that scans your comp flow for any nodes that have a line in their comments that contain the following string:

[!]

When you run the script it will toggle their passthrough state, the script becomes really handy when you attach it to a shortcut (you can do this with the Hotkey Manager.)

I haven’t fully tested it with animated comments yet, but it should work as it simply creates a large string comprised of all the text data it finds on an animation spline that is attached to the comments tab and then runs it through the standard Lua find function.

Offcourse you can quite easily change the comment string by simply editing the script, just change the string in line 24.

download : Toggle_Passthrough
.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
-- Toggle_Passthrough v1.0
-- by S.Neve - House of Secrets 13-05-2009
-- for latest version, check http://www.svennneve.com
 
local toollist = composition:GetToolList()
 
for i, tool in toollist do
	-- Finds all comments for tool.  Checks to see if it’s animated.
	message = ""
	if tool.Comments then
		if tool.Comments[TIME_UNDEFINED]=="" then
		else
			if tool.Comments:GetConnectedOutput() then
				x=tool.Comments:GetKeyFrames()
				for k, keyframe in x do
					message = message .. tool.Comments[keyframe]
				end
			else
				message = tool.Comments[TIME_UNDEFINED]
			end
		end
	end 
 
	if string.find(message, "[!]") then
		tool:SetAttrs({TOOLB_PassThrough = not tool:GetAttrs().TOOLB_PassThrough})
		print ("toggled passthrough on " .. tool:GetAttrs().TOOLS_Name .. "\n")
	end
end
  • Meta