Jump to: Board index » General » Fusion

Image Plane match 2D easily

Learn about 3D compositing, animation, broadcast design and VFX workflows.
  • Author
  • Message
Offline

Ryan Bloomer

  • Posts: 765
  • Joined: Tue Jul 09, 2013 6:58 pm

Image Plane match 2D easily

PostMon Mar 28, 2016 7:29 pm

Is there a way to force an image plane to scale when moving it back and forth in Z. So the rendered view always looks the same (or at least relative) but the distance between each plan changes. I'm trying to add slight 3D parallax to an original 2D comp, but have I to manually move in Z and then scale to match the original 2D reference.
Offline

Stefan Kirste

  • Posts: 142
  • Joined: Wed Jul 30, 2014 8:45 am

Re: Image Plane match 2D easily

PostTue Mar 29, 2016 8:55 am

u can use expression on the size of the imageplane, like: x*Camera1.Z
Offline
User avatar

Chad Capeland

  • Posts: 3025
  • Joined: Mon Nov 10, 2014 9:40 pm

Re: Image Plane match 2D easily

PostTue Mar 29, 2016 2:09 pm

Displace3D has an option to displace in camera space.
Chad Capeland
Indicated, LLC
www.floweffects.com
Offline

Ryan Bloomer

  • Posts: 765
  • Joined: Tue Jul 09, 2013 6:58 pm

Re: Image Plane match 2D easily

PostTue Mar 29, 2016 9:28 pm

Thanks guys, I'll try these out and see if I can get it to work the way I want.

Cheers,
Offline

Sander de Regt

  • Posts: 3566
  • Joined: Thu Nov 13, 2014 10:09 pm

Re: Image Plane match 2D easily

PostTue Mar 29, 2016 10:05 pm

Maybe this will help?
I've used 3 instanced cameras with the images connected to them so you can use the distance in the image tab in the way you describe, to keep the images matched to the frame size. Then I use a 4th camera that started out matched to the other three to create the movement.

Of course when you keep scaling the images you will never achieve parallax since you need to move something past the camera to achieve this.

Code: Select all
{
   Tools = ordered() {
      Polygon1_1 = PolylineMask {
         DrawMode = "InsertAndModify",
         DrawMode2 = "InsertAndModify",
         Inputs = {
            MaskWidth = Input { Value = 1920, },
            MaskHeight = Input { Value = 1080, },
            PixelAspect = Input { Value = { 1, 1, }, },
            ClippingMode = Input { Value = FuID { "None", }, },
            Polyline = Input {
               SourceOp = "Polygon1_1Polyline",
               Source = "Value",
            },
            Polyline2 = Input {
               Value = Polyline {
               },
               Disabled = true,
            },
         },
         ViewInfo = OperatorInfo { Pos = { 50, -31, }, },
      },
      Polygon1_1Polyline = BezierSpline {
         SplineColor = { Red = 173, Green = 255, Blue = 47, },
         NameSet = true,
         KeyFrames = {
            [0] = { 0, Flags = { Linear = true, LockedY = true, }, Value = Polyline {
                  Closed = true,
                  Points = {
                     { Linear = true, X = -0.547210276126862, Y = -0.509523808956146, LX = 0.0175250271956126, LY = -0.0114285747210185, RX = 0.0397813448460437, RY = 0.142463087590281, },
                     { X = -0.427866237215213, Y = -0.0821345607474995, LX = -0.0113895538549517, LY = -0.0112328855002585, RX = 0.0749591630038409, RY = 0.0739280665371534, },
                     { X = -0.174647351943879, Y = -0.0021345592148086, LX = -0.0851047313698957, LY = -0.0320362711422784, RX = 0.0507157274795061, RY = 0.00572934543771493, },
                     { X = -0.0222868380735821, Y = 0.00738926739566576, LX = -0.0470273133308724, LY = 0.0368314801145649, RX = 0.0613365511322104, RY = -0.0480383803222487, },
                     { X = 0.177283975586364, Y = -0.0364202628852195, LX = -0.0267772820096054, LY = 0.00704237577158425, RX = 0.0648185471522327, RY = -0.0170471583281095, },
                     { X = 0.372562949508562, Y = 0.0035797299054568, LX = -0.0865707049614589, LY = -0.00922103054313763, RX = 0.0464856665443729, RY = 0.00495139494606879, },
                     { X = 0.485223908168057, Y = -0.143086920242208, LX = -0.0317628829674503, LY = 0.00442249050885229, RX = 0.0699378914045075, RY = -0.0097377703800545, },
                     { X = 0.655579388141632, Y = -0.362857133150101, LX = -0.0163221759169957, LY = 0.024146448747254, RX = 0.0168647097662138, RY = -0.0249490541014919, },
                     { X = 0.695278942584991, Y = -0.456190466880798, LX = -0.0114174223385728, LY = 0.0341921398146028, RX = -0.00406403995208297, RY = -0.0249031479018075, },
                     { Linear = true, X = 0.683086822728743, Y = -0.530899910586221, LX = 0.00406403995208297, LY = 0.0249031479018075, RX = -0.392574005756255, RY = -0.00430320751099359, },
                     { Linear = true, X = -0.494635194540024, Y = -0.543809533119202, LX = 0.392574005756255, LY = 0.00430320751099359, RX = -0.0175250271956126, RY = 0.0114285747210185, },
                  },
               }, },
         },
      },
      Background1_1 = Background {
         Inputs = {
            GlobalOut = Input { Value = 100, },
            Width = Input { Value = 1920, },
            Height = Input { Value = 1080, },
            ["Gamut.SLogVersion"] = Input { Value = FuID { "SLog2", }, },
            TopLeftRed = Input { Value = 0.532645925925926, },
            TopLeftGreen = Input { Value = 0.5407514781246, },
            TopLeftBlue = Input { Value = 0.613333333333333, },
            Gradient = Input {
               Value = Gradient {
                  Colors = {
                     [0] = { 0, 0, 0, 1, },
                     [1] = { 1, 1, 1, 1, },
                  },
               },
            },
            EffectMask = Input {
               SourceOp = "Polygon1_1",
               Source = "Mask",
            },
         },
         ViewInfo = OperatorInfo { Pos = { 68, 1, }, },
      },
      Polygon1 = PolylineMask {
         DrawMode = "InsertAndModify",
         DrawMode2 = "InsertAndModify",
         Inputs = {
            MaskWidth = Input { Value = 1920, },
            MaskHeight = Input { Value = 1080, },
            PixelAspect = Input { Value = { 1, 1, }, },
            ClippingMode = Input { Value = FuID { "None", }, },
            Polyline = Input {
               SourceOp = "Polygon1Polyline",
               Source = "Value",
            },
            Polyline2 = Input {
               Value = Polyline {
               },
               Disabled = true,
            },
         },
         ViewInfo = OperatorInfo { Pos = { 50, 46.5, }, },
      },
      Polygon1Polyline = BezierSpline {
         SplineColor = { Red = 173, Green = 255, Blue = 47, },
         NameSet = true,
         KeyFrames = {
            [0] = { 0, Flags = { Linear = true, LockedY = true, }, Value = Polyline {
                  Closed = true,
                  Points = {
                     { Linear = true, X = -0.581339968959626, Y = -0.549295776245629, LX = 0.0175250271956126, LY = -0.0114285747210185, RX = 0.0755125465996064, RY = 0.114988181082401, },
                     { X = -0.354802328266788, Y = -0.20433125125982, LX = -0.01264380211514, LY = -0.0124698810204534, RX = 0.0403505109755198, RY = 0.0397954718364921, },
                     { X = -0.222828078188587, Y = -0.130045535441415, LX = -0.0458118695513407, LY = -0.0172451219909565, RX = 0.0393419173654057, RY = 0.00444444841808744, },
                     { X = -0.104802328266788, Y = -0.116712185021416, LX = -0.0364806888696974, LY = 0.0285714337371644, RX = 0.0529249082555807, RY = -0.0414504373716991, },
                     { X = 0.0668126421220881, Y = -0.210964669678388, LX = -0.0314266828181139, LY = 0.00849871949388634, RX = 0.0150784432178189, RY = -0.00407768440968805, },
                     { X = 0.106571060500454, Y = -0.208140762921349, LX = -0.0110857509793159, LY = 0.00291553205730689, RX = 0.0401682055174454, RY = -0.0105641639514647, },
                     { X = 0.227815699658703, Y = -0.187188389178292, LX = -0.0536480686695279, LY = -0.00571429422923493, RX = 0.0800853904309158, RY = 0.00853025086894409, },
                     { X = 0.468159061751675, Y = -0.164331229802148, LX = -0.0547210155894315, LY = 0.00761905562309997, RX = 0.0551696444185553, RY = -0.00768152025330465, },
                     { X = 0.633395087800335, Y = -0.192902656670586, LX = -0.0128755474806854, LY = 0.0190476287546612, RX = 0.0168647097662138, RY = -0.0249490541014919, },
                     { X = 0.673094642243695, Y = -0.286235990401284, LX = -0.0114174223385728, LY = 0.0341921398146028, RX = -0.00804583744923877, RY = -0.0948119624914732, },
                     { Linear = true, X = 0.648957129895978, Y = -0.570671877875704, LX = 0.00804583744923877, LY = 0.0948119624914732, RX = -0.392574005756255, RY = -0.00430320751099359, },
                     { Linear = true, X = -0.528764887372788, Y = -0.583581500408684, LX = 0.392574005756255, LY = 0.00430320751099359, RX = -0.0175250271956126, RY = 0.0114285747210185, },
                  },
               }, },
         },
      },
      Background1 = Background {
         Inputs = {
            GlobalOut = Input { Value = 100, },
            Width = Input { Value = 1920, },
            Height = Input { Value = 1080, },
            ["Gamut.SLogVersion"] = Input { Value = FuID { "SLog2", }, },
            TopLeftRed = Input { Value = 0.382115555555556, },
            TopLeftGreen = Input { Value = 0.387930408219821, },
            TopLeftBlue = Input { Value = 0.44, },
            Gradient = Input {
               Value = Gradient {
                  Colors = {
                     [0] = { 0, 0, 0, 1, },
                     [1] = { 1, 1, 1, 1, },
                  },
               },
            },
            EffectMask = Input {
               SourceOp = "Polygon1",
               Source = "Mask",
            },
         },
         ViewInfo = OperatorInfo { Pos = { 50, 79.5, }, },
      },
      Polygon1_2 = PolylineMask {
         DrawMode = "InsertAndModify",
         DrawMode2 = "InsertAndModify",
         Inputs = {
            MaskWidth = Input { Value = 1920, },
            MaskHeight = Input { Value = 1080, },
            PixelAspect = Input { Value = { 1, 1, }, },
            ClippingMode = Input { Value = FuID { "None", }, },
            Polyline = Input {
               SourceOp = "Polygon1_2Polyline",
               Source = "Value",
            },
            Polyline2 = Input {
               Value = Polyline {
               },
               Disabled = true,
            },
         },
         ViewInfo = OperatorInfo { Pos = { 45, 128.5, }, },
      },
      Polygon1_2Polyline = BezierSpline {
         SplineColor = { Red = 173, Green = 255, Blue = 47, },
         NameSet = true,
         KeyFrames = {
            [0] = { 0, Flags = { Linear = true, LockedY = true, }, Value = Polyline {
                  Closed = true,
                  Points = {
                     { Linear = true, X = -0.547210276126862, Y = -0.509523808956146, LX = 0.0175250271956126, LY = -0.0114285747210185, RX = 0.0341620527538278, RY = 0.0224455159051078, },
                     { Linear = true, X = -0.444724117865378, Y = -0.442187261240823, LX = -0.0341620527538278, LY = -0.0224455159051078, RX = 0.00577971339225771, RY = 0.0666090028437357, },
                     { Linear = true, X = -0.427384977688605, Y = -0.242360252709616, LX = -0.00577971339225771, LY = -0.0666090028437357, RX = 0.00810218292244511, RY = 0.00682195040914748, },
                     { Linear = true, X = -0.40307842892127, Y = -0.221894401482173, LX = -0.00810218292244511, LY = -0.00682195040914748, RX = 0.0023651495682494, RY = -0.0621923442303188, },
                     { Linear = true, X = -0.395982980216522, Y = -0.40847143417313, LX = -0.0023651495682494, LY = 0.0621923442303188, RX = 0.0211216507636767, RY = 0.0113952354779319, },
                     { Linear = true, X = -0.332618027925491, Y = -0.374285727739334, LX = -0.0211216507636767, LY = -0.0113952354779319, RX = 0.004016018476609, RY = 0.0203039418326484, },
                     { Linear = true, X = -0.320569972495664, Y = -0.313373902241389, LX = -0.004016018476609, LY = -0.0203039418326484, RX = 0.00946639757470171, RY = 0.0174170261716086, },
                     { Linear = true, X = -0.292170779771559, Y = -0.261122823726563, LX = -0.00946639757470171, LY = -0.0174170261716086, RX = 0.0305090006414231, RY = -0.0129590627314552, },
                     { Linear = true, X = -0.20064377784729, Y = -0.300000011920929, LX = -0.0305090006414231, LY = 0.0129590627314552, RX = 0.0161619142913, RY = 0.0410805385642582, },
                     { Linear = true, X = -0.15215803497339, Y = -0.176758396228154, LX = -0.0161619142913, LY = -0.0410805385642582, RX = 0.0160446087903049, RY = -0.032950054615263, },
                     { Linear = true, X = -0.104024208602476, Y = -0.275608560073943, LX = -0.0160446087903049, LY = 0.032950054615263, RX = 0.00713539355899473, RY = -0.00368603380899581, },
                     { Linear = true, X = -0.0826180279254913, Y = -0.286666661500931, LX = -0.00713539355899473, LY = 0.00368603380899581, RX = 0.0202019824799635, RY = 0.00855625966238595, },
                     { Linear = true, X = -0.0220120804856008, Y = -0.260997882513773, LX = -0.0202019824799635, LY = -0.00855625966238595, RX = 0.0189199410352286, RY = -0.0259874861013321, },
                     { Linear = true, X = 0.034747742620085, Y = -0.338960340817769, LX = -0.0189199410352286, LY = 0.0259874861013321, RX = 0.0132027760238649, RY = 0.0163165684541067, },
                     { Linear = true, X = 0.0743560706916796, Y = -0.290010635455449, LX = -0.0132027760238649, LY = -0.0163165684541067, RX = 0.0120085550949127, RY = -0.00650247267314367, },
                     { Linear = true, X = 0.110381735976418, Y = -0.30951805347488, LX = -0.0120085550949127, LY = 0.00650247267314367, RX = 0.00612454162177782, RY = -0.0228590619753278, },
                     { Linear = true, X = 0.128755360841751, Y = -0.378095239400864, LX = -0.00612454162177782, LY = 0.0228590619753278, RX = 0.0208745133211684, RY = 0.0268990035473354, },
                     { Linear = true, X = 0.191378900805256, Y = -0.297398228758857, LX = -0.0208745133211684, LY = -0.0268990035473354, RX = 0.0152772045740924, RY = 0.0103805061370607, },
                     { Linear = true, X = 0.237210514527534, Y = -0.266256710347675, LX = -0.0152772045740924, LY = -0.0103805061370607, RX = 0.00426316182415543, RY = -0.0302953851033771, },
                     { Linear = true, X = 0.25, Y = -0.357142865657806, LX = -0.00426316182415543, LY = 0.0302953851033771, RX = 0.0175492378519328, RY = 0.0267370926576948, },
                     { Linear = true, X = 0.302647713555798, Y = -0.276931587684722, LX = -0.0175492378519328, LY = -0.0267370926576948, RX = 0.0150286358313499, RY = -0.0187488736046685, },
                     { Linear = true, X = 0.347733621049848, Y = -0.333178208498728, LX = -0.0150286358313499, LY = 0.0187488736046685, RX = 0.0109104969044441, RY = 0.0235093464927068, },
                     { Linear = true, X = 0.380465111763181, Y = -0.262650169020607, LX = -0.0109104969044441, LY = -0.0235093464927068, RX = 0.0235115171587348, RY = 0.000761660867267181, },
                     { Linear = true, X = 0.450999663239385, Y = -0.260365186418806, LX = -0.0235115171587348, LY = -0.000761660867267181, RX = 0.013114566284529, RY = -0.0246401732876187, },
                     { Linear = true, X = 0.490343362092972, Y = -0.334285706281662, LX = -0.013114566284529, LY = 0.0246401732876187, RX = 0.0550786753495534, RY = -0.00952380895614624, },
                     { Linear = true, X = 0.655579388141632, Y = -0.362857133150101, LX = -0.0550786753495534, LY = 0.00952380895614624, RX = 0.0132331848144531, RY = -0.0311111112435659, },
                     { Linear = true, X = 0.695278942584991, Y = -0.456190466880798, LX = -0.0132331848144531, LY = 0.0311111112435659, RX = -0.00406403995208297, RY = -0.0249031479018075, },
                     { Linear = true, X = 0.683086822728743, Y = -0.530899910586221, LX = 0.00406403995208297, LY = 0.0249031479018075, RX = -0.392574005756255, RY = -0.00430320751099359, },
                     { Linear = true, X = -0.494635194540024, Y = -0.543809533119202, LX = 0.392574005756255, LY = 0.00430320751099359, RX = -0.0175250271956126, RY = 0.0114285747210185, },
                  },
               }, },
         },
      },
      Camera3D1 = Camera3D {
         Inputs = {
            ["Transform3DOp.Translate.X"] = Input { Value = 1, },
            AoV = Input { Value = 35, },
            FLength = Input { Value = 8.55128562207972, },
            ["Stereo.Mode"] = Input { Value = FuID { "OffAxis", }, },
            FilmBack = Input { Value = 1, },
            FilmGate = Input { Value = FuID { "HD", }, },
            ApertureW = Input { Value = 0.3775, },
            ApertureH = Input { Value = 0.2123, },
            ["SurfacePlaneInputs.ObjectID.ObjectID"] = Input { Value = 2, },
            ImageInput = Input {
               SourceOp = "Background1_1",
               Source = "Output",
            },
            ["MtlStdInputs.MaterialID"] = Input { Value = 2, },
         },
         ViewInfo = OperatorInfo { Pos = { 280, 2, }, },
      },
      Instance_Camera3D1_1 = Camera3D {
         SourceOp = "Camera3D1",
         Inputs = {
            SceneInput = Input { },
            ["Transform3DOp.Translation"] = Input { },
            ["Transform3DOp.Rotation"] = Input { },
            ["Transform3DOp.PivotNest"] = Input { },
            ["Transform3DOp.ScaleNest"] = Input { },
            ["Transform3DOp.TargetNest"] = Input { },
            ["Stereo.Nest"] = Input { },
            ["Stereo.RightCamera"] = Input { },
            FilmBack = Input { Value = 1, },
            ControlVis = Input { },
            IDepth = Input { Value = 25, },
            ["SurfacePlaneInputs.Visibility.Nest"] = Input { },
            ["SurfacePlaneInputs.Lighting.Nest"] = Input { },
            ["SurfacePlaneInputs.Matte.Nest"] = Input { },
            ["SurfacePlaneInputs.BlendMode.Nest"] = Input { },
            ["SurfacePlaneInputs.Controls.Nest"] = Input { },
            ["SurfacePlaneInputs.ObjectID.Nest"] = Input { },
            ImageInput = Input {
               SourceOp = "Background1_2",
               Source = "Output",
            },
            ["MtlStdInputs.Diffuse.Nest"] = Input { },
            ["MtlStdInputs.Specular.Nest"] = Input { },
            ["MtlStdInputs.Transmittance.Nest"] = Input { },
            ["MtlStdInputs.MaterialIDNest"] = Input { },
            StartEndRenderScripts = Input { },
         },
         ViewInfo = OperatorInfo { Pos = { 316, 167, }, },
      },
      Background1_2 = Background {
         Inputs = {
            GlobalOut = Input { Value = 100, },
            Width = Input { Value = 1920, },
            Height = Input { Value = 1080, },
            ["Gamut.SLogVersion"] = Input { Value = FuID { "SLog2", }, },
            TopLeftRed = Input { Value = 0.231585185185185, },
            TopLeftGreen = Input { Value = 0.235109338315043, },
            TopLeftBlue = Input { Value = 0.266666666666667, },
            Gradient = Input {
               Value = Gradient {
                  Colors = {
                     [0] = { 0, 0, 0, 1, },
                     [1] = { 1, 1, 1, 1, },
                  },
               },
            },
            EffectMask = Input {
               SourceOp = "Polygon1_2",
               Source = "Mask",
            },
         },
         ViewInfo = OperatorInfo { Pos = { 71, 172.5, }, },
      },
      Instance_Camera3D1 = Camera3D {
         SourceOp = "Camera3D1",
         Inputs = {
            SceneInput = Input { },
            ["Transform3DOp.Translation"] = Input { },
            ["Transform3DOp.Rotation"] = Input { },
            ["Transform3DOp.PivotNest"] = Input { },
            ["Transform3DOp.ScaleNest"] = Input { },
            ["Transform3DOp.TargetNest"] = Input { },
            ["Stereo.Nest"] = Input { },
            ["Stereo.RightCamera"] = Input { },
            FilmBack = Input { Value = 1, },
            ControlVis = Input { },
            IDepth = Input { Value = 75, },
            ["SurfacePlaneInputs.Visibility.Nest"] = Input { },
            ["SurfacePlaneInputs.Lighting.Nest"] = Input { },
            ["SurfacePlaneInputs.Matte.Nest"] = Input { },
            ["SurfacePlaneInputs.BlendMode.Nest"] = Input { },
            ["SurfacePlaneInputs.Controls.Nest"] = Input { },
            ["SurfacePlaneInputs.ObjectID.Nest"] = Input { },
            ImageInput = Input {
               SourceOp = "Background1",
               Source = "Output",
            },
            ["MtlStdInputs.Diffuse.Nest"] = Input { },
            ["MtlStdInputs.Specular.Nest"] = Input { },
            ["MtlStdInputs.Transmittance.Nest"] = Input { },
            ["MtlStdInputs.MaterialIDNest"] = Input { },
            StartEndRenderScripts = Input { },
         },
         ViewInfo = OperatorInfo { Pos = { 344, 81, }, },
      },
      RenderCAM = Camera3D {
         NameSet = true,
         Inputs = {
            ["Transform3DOp.Translate.X"] = Input {
               SourceOp = "RenderCAMXOffset",
               Source = "Value",
            },
            ["Transform3DOp.Translate.Z"] = Input { Value = -3.4972678, },
            AoV = Input { Value = 35, },
            FLength = Input { Value = 8.55128562207972, },
            ["Stereo.Mode"] = Input { Value = FuID { "OffAxis", }, },
            FilmBack = Input { Value = 1, },
            FilmGate = Input { Value = FuID { "HD", }, },
            ApertureW = Input { Value = 0.3775, },
            ApertureH = Input { Value = 0.2123, },
            IDepth = Input { Value = 25, },
            ["SurfacePlaneInputs.ObjectID.ObjectID"] = Input { Value = 2, },
            ["MtlStdInputs.MaterialID"] = Input { Value = 2, },
         },
         ViewInfo = OperatorInfo { Pos = { 452, 212, }, },
      },
      RenderCAMXOffset = BezierSpline {
         SplineColor = { Red = 250, Green = 59, Blue = 49, },
         NameSet = true,
         KeyFrames = {
            [0] = { 1.0218579, RH = { 33.3333333333333, 1.6484517, }, Flags = { Linear = true, }, },
            [100] = { 2.9016393, LH = { 66.6666666666667, 2.2750455, }, Flags = { Linear = true, }, },
         },
      },
      Merge3D1 = Merge3D {
         Inputs = {
            SceneInput1 = Input {
               SourceOp = "Camera3D1",
               Source = "Output",
            },
            SceneInput2 = Input {
               SourceOp = "Instance_Camera3D1_1",
               Source = "Output",
            },
            SceneInput3 = Input {
               SourceOp = "Instance_Camera3D1",
               Source = "Output",
            },
            SceneInput4 = Input {
               SourceOp = "RenderCAM",
               Source = "Output",
            },
         },
         ViewInfo = OperatorInfo { Pos = { 560, 95, }, },
      },
      Renderer3D1 = Renderer3D {
         CtrlWZoom = false,
         Inputs = {
            GlobalOut = Input { Value = 100, },
            Width = Input { Value = 1920, },
            Height = Input { Value = 1080, },
            ["Gamut.SLogVersion"] = Input { Value = FuID { "SLog2", }, },
            SceneInput = Input {
               SourceOp = "Merge3D1",
               Source = "Output",
            },
            CameraSelector = Input { Value = FuID { "RenderCAM", }, },
            RendererType = Input { Value = FuID { "RendererOpenGL", }, },
         },
         ViewInfo = OperatorInfo { Pos = { 670, 95, }, },
      },
   },
}
Sander de Regt

ShadowMaker SdR
The Netherlands

Return to Fusion

Who is online

Users browsing this forum: Bryan Ray and 23 guests