Created
October 25, 2025 20:53
-
-
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.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| { | |
| 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 }, } | |
| } | |
| } | |
| } |
Author
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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: