Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Select an option

  • Save AndrewHazelden/e400440618f2276baa561e459d412ee6 to your computer and use it in GitHub Desktop.

Select an option

Save AndrewHazelden/e400440618f2276baa561e459d412ee6 to your computer and use it in GitHub Desktop.
Create STMaps for the left and right eye views from a BMD Ursa Cine Immersive camera. Then use the STMapper fuse node to warp the images, and view the results with the Kartaverse kvrViewer node.
{
Tools = ordered() {
kvrViewer1 = Fuse.kvrViewer {
CtrlWZoom = false,
Inputs = {
ImageProjection = Input { Value = 2, },
InputStereo = Input { Value = 2, },
Anaglyph = Input { Value = 1, },
Image1 = Input {
SourceOp = "Combiner1",
Source = "Output",
}
},
ViewInfo = OperatorInfo { Pos = { 715, 247.5 } },
Colors = { TileColor = { R = 0.266666666666667, G = 0.56078431372549, B = 0.396078431372549 }, },
Version = 500
},
Combiner1 = Combiner {
CustomData = {
ToolVersion = 2,
},
Inputs = {
Image1 = Input {
SourceOp = "Left_STMapper",
Source = "Output",
},
Image2 = Input {
SourceOp = "Right_STMapper",
Source = "Output",
},
AddMetadata = Input { Value = 1, }
},
ViewInfo = OperatorInfo { Pos = { 550, 248.712 } },
Colors = { TileColor = { R = 0.266666666666667, G = 0.56078431372549, B = 0.396078431372549 }, }
},
Left_PanoMap = PanoMap {
NameSet = true,
Inputs = {
From = Input { Value = FuID { "Immersive" }, },
To = Input { Value = FuID { "VR180" }, },
Input = Input {
SourceOp = "Left_STMap_CustomTool",
Source = "Output",
}
},
ViewInfo = OperatorInfo { Pos = { 550, 148.5 } },
Colors = { TileColor = { R = 0.266666666666667, G = 0.56078431372549, B = 0.396078431372549 }, }
},
Left_STMapper = Fuse.STMapper {
NameSet = true,
Inputs = {
Texture = Input {
SourceOp = "Splitter1",
Source = "Image1",
},
Input = Input {
SourceOp = "Left_PanoMap",
Source = "Output",
}
},
ViewInfo = OperatorInfo { Pos = { 550, 181.5 } },
Colors = { TileColor = { R = 0.266666666666667, G = 0.56078431372549, B = 0.396078431372549 }, },
Version = 120
},
Right_PanoMap = PanoMap {
NameSet = true,
Inputs = {
From = Input { Value = FuID { "Immersive" }, },
To = Input { Value = FuID { "VR180" }, },
Input = Input {
SourceOp = "Right_STMap_CustomTool",
Source = "Output",
}
},
ViewInfo = OperatorInfo { Pos = { 550, 346.5 } },
Colors = { TileColor = { R = 0.266666666666667, G = 0.56078431372549, B = 0.396078431372549 }, }
},
Loader1 = Loader {
Clips = {
Clip {
ID = "Clip1",
Filename = "Comp:\\A001_07101529_C002.0319.exr",
FormatID = "OpenEXRFormat",
StartFrame = 319,
LengthSetManually = true,
TrimIn = 0,
TrimOut = 0,
ExtendFirst = 0,
ExtendLast = 0,
Loop = 0,
AspectMode = 0,
Depth = 5,
TimeCode = 0,
GlobalStart = 0,
GlobalEnd = 0
}
},
CtrlWZoom = false,
Inputs = {
Depth = Input { Value = 5, },
["Gamut.SLogVersion"] = Input { Value = FuID { "SLog2" }, },
["Clip1.OpenEXRFormat.DeepOutputMode"] = Input { Disabled = true, },
["Clip1.OpenEXRFormat.RedName"] = Input { Value = FuID { "R" }, },
["Clip1.OpenEXRFormat.GreenName"] = Input { Value = FuID { "G" }, },
["Clip1.OpenEXRFormat.BlueName"] = Input { Value = FuID { "B" }, },
["Clip1.OpenEXRFormat.AlphaName"] = Input { Value = FuID { "A" }, }
},
ViewInfo = OperatorInfo { Pos = { 165, 247.5 } },
Colors = { TileColor = { R = 0.266666666666667, G = 0.56078431372549, B = 0.396078431372549 }, }
},
Right_STMap_CustomTool = Custom {
NameSet = true,
Inputs = {
LUTIn1 = Input {
SourceOp = "Right_STMap_CustomToolLUTIn1",
Source = "Value",
},
LUTIn2 = Input {
SourceOp = "Right_STMap_CustomToolLUTIn2",
Source = "Value",
},
LUTIn3 = Input {
SourceOp = "Right_STMap_CustomToolLUTIn3",
Source = "Value",
},
LUTIn4 = Input {
SourceOp = "Right_STMap_CustomToolLUTIn4",
Source = "Value",
},
RedExpression = Input { Value = "x", },
GreenExpression = Input { Value = "y", },
BlueExpression = Input { Value = "0", },
AlphaExpression = Input { Value = "1", },
Image1 = Input {
SourceOp = "Splitter1",
Source = "Image2",
}
},
ViewInfo = OperatorInfo { Pos = { 440, 346.5 } },
Colors = { TileColor = { R = 0.266666666666667, G = 0.56078431372549, B = 0.396078431372549 }, }
},
Right_STMap_CustomToolLUTIn1 = LUTBezier {
KeyColorSplines = {
[0] = {
[0] = { 0, RH = { 0.333333333333333, 0.333333333333333 }, Flags = { Linear = true } },
[1] = { 1, LH = { 0.666666666666667, 0.666666666666667 }, Flags = { Linear = true } }
}
},
SplineColor = { Red = 0, Green = 0, Blue = 0 },
CtrlWZoom = false,
},
Right_STMap_CustomToolLUTIn2 = LUTBezier {
KeyColorSplines = {
[0] = {
[0] = { 0, RH = { 0.333333333333333, 0.333333333333333 }, Flags = { Linear = true } },
[1] = { 1, LH = { 0.666666666666667, 0.666666666666667 }, Flags = { Linear = true } }
}
},
SplineColor = { Red = 0, Green = 0, Blue = 0 },
CtrlWZoom = false,
},
Right_STMap_CustomToolLUTIn3 = LUTBezier {
KeyColorSplines = {
[0] = {
[0] = { 0, RH = { 0.333333333333333, 0.333333333333333 }, Flags = { Linear = true } },
[1] = { 1, LH = { 0.666666666666667, 0.666666666666667 }, Flags = { Linear = true } }
}
},
SplineColor = { Red = 0, Green = 0, Blue = 0 },
CtrlWZoom = false,
},
Right_STMap_CustomToolLUTIn4 = LUTBezier {
KeyColorSplines = {
[0] = {
[0] = { 0, RH = { 0.333333333333333, 0.333333333333333 }, Flags = { Linear = true } },
[1] = { 1, LH = { 0.666666666666667, 0.666666666666667 }, Flags = { Linear = true } }
}
},
SplineColor = { Red = 0, Green = 0, Blue = 0 },
CtrlWZoom = false,
},
Right_STMapper = Fuse.STMapper {
NameSet = true,
Inputs = {
Texture = Input {
SourceOp = "Splitter1",
Source = "Image2",
},
Input = Input {
SourceOp = "Right_PanoMap",
Source = "Output",
}
},
ViewInfo = OperatorInfo { Pos = { 550, 313.5 } },
Colors = { TileColor = { R = 0.266666666666667, G = 0.56078431372549, B = 0.396078431372549 }, },
Version = 120
},
Left_STMap_CustomTool = Custom {
NameSet = true,
Inputs = {
LUTIn1 = Input {
SourceOp = "CustomTool1LUTIn1",
Source = "Value",
},
LUTIn2 = Input {
SourceOp = "CustomTool1LUTIn2",
Source = "Value",
},
LUTIn3 = Input {
SourceOp = "CustomTool1LUTIn3",
Source = "Value",
},
LUTIn4 = Input {
SourceOp = "CustomTool1LUTIn4",
Source = "Value",
},
RedExpression = Input { Value = "x", },
GreenExpression = Input { Value = "y", },
BlueExpression = Input { Value = "0", },
AlphaExpression = Input { Value = "1", },
Image1 = Input {
SourceOp = "Splitter1",
Source = "Image1",
}
},
ViewInfo = OperatorInfo { Pos = { 440, 148.5 } },
Colors = { TileColor = { R = 0.266666666666667, G = 0.56078431372549, B = 0.396078431372549 }, }
},
CustomTool1LUTIn1 = LUTBezier {
KeyColorSplines = {
[0] = {
[0] = { 0, RH = { 0.333333333333333, 0.333333333333333 }, Flags = { Linear = true } },
[1] = { 1, LH = { 0.666666666666667, 0.666666666666667 }, Flags = { Linear = true } }
}
},
SplineColor = { Red = 0, Green = 0, Blue = 0 },
CtrlWZoom = false,
},
CustomTool1LUTIn2 = LUTBezier {
KeyColorSplines = {
[0] = {
[0] = { 0, RH = { 0.333333333333333, 0.333333333333333 }, Flags = { Linear = true } },
[1] = { 1, LH = { 0.666666666666667, 0.666666666666667 }, Flags = { Linear = true } }
}
},
SplineColor = { Red = 0, Green = 0, Blue = 0 },
CtrlWZoom = false,
},
CustomTool1LUTIn3 = LUTBezier {
KeyColorSplines = {
[0] = {
[0] = { 0, RH = { 0.333333333333333, 0.333333333333333 }, Flags = { Linear = true } },
[1] = { 1, LH = { 0.666666666666667, 0.666666666666667 }, Flags = { Linear = true } }
}
},
SplineColor = { Red = 0, Green = 0, Blue = 0 },
CtrlWZoom = false,
},
CustomTool1LUTIn4 = LUTBezier {
KeyColorSplines = {
[0] = {
[0] = { 0, RH = { 0.333333333333333, 0.333333333333333 }, Flags = { Linear = true } },
[1] = { 1, LH = { 0.666666666666667, 0.666666666666667 }, Flags = { Linear = true } }
}
},
SplineColor = { Red = 0, Green = 0, Blue = 0 },
CtrlWZoom = false,
},
Splitter1 = Splitter {
CustomData = {
ToolVersion = 2,
},
Inputs = {
Split = Input { Value = FuID { "Layers" }, },
Input = Input {
SourceOp = "Loader1",
Source = "Output",
},
Image1Layer = Input { Value = FuID { "Left" }, },
Image2Layer = Input { Value = FuID { "Right" }, }
},
ViewInfo = OperatorInfo { Pos = { 275, 247.5 } },
Colors = { TileColor = { R = 0.266666666666667, G = 0.56078431372549, B = 0.396078431372549 }, }
},
Note1 = Note {
Inputs = {
Comments = Input { Value = "Create STMaps for the left and right eye views from a BMD Ursa Cine Immersive camera. Then use the STMapper fuse node to warp the images, and view the results with the Kartaverse kvrViewer node.", }
},
ViewInfo = StickyNoteInfo {
Pos = { 146.943, 29.7879 },
Flags = {
Expanded = true
},
Size = { 578.667, 74.697 }
},
Colors = { TileColor = { R = 0.266666666666667, G = 0.56078431372549, B = 0.396078431372549 }, }
},
Underlay1 = Underlay {
ViewInfo = UnderlayInfo {
Pos = { 440, -5.71218 },
Size = { 753.667, 465.879 }
},
Colors = { TileColor = { R = 0.266666666666667, G = 0.56078431372549, B = 0.396078431372549 }, }
}
}
}
@AndrewHazelden
Copy link
Author

This page from the Apple Immersive Media Support docs explain how the Apple Vision Pro HMD's immersive media playback APIs can generate STMap warping templates for internal media reprojection needs based upon ILPD metadata.

To help give immersive content creators a base STMap warping template, to validate their other tools against, I threw together a quick Fusion comp to output a preview quality STMap via the PanoMap node's "Immersive -> VR180" conversion options:

PanoMap Conversion

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment