Workaround for Efficient Outline Effect in UE4 with Instanced Stereo Rendering

I wrote this article after struggling to find any relevant UE4 documentation on the matter, and an extensive googling failed to provide me with the right incantations. So I've recorded my solution here for posterity, niche as it is, in hopes that someone with the same problem comes across this one day. So ride along with me and lets shave this Yak!

You can scroll down directly to the guts of the workaround here.

Context

I recently began work on a personal project in VR for a mobile chipset based headset. I installed the most recent version of Unreal 4 Engine to check out the official VR template project.

The template is a great springboard, especially for configuring all the dials & knobs in project settings for optimal VR rendering, such as setting up forward rendering, instanced stereo, anti aliasing set to MSAA, etc.

The template also comes with a great example implementation of a selection mechanic, an arc that appears from your controller when selecting a new location to teleport to:

For my project, I wanted to implement a new feature for selecting objects: placing an outline around an object. This is a very common effect in games and is sometimes accomplished using a post process. The basic idea is use a stencil buffer (and/or a depth buffer. I am going to refer to a stencil buffer for simplicity.), and in your outline material, you consider all the neighboring pixels of the stencil buffer, and if the current pixel is on the boundary of a stencil value change, then draw an outline there.

On a mobile chipset such as the Oculus Quest however, post processes are prohibitively expensive, because reading and writing out buffers the size of the entire viewport is a slow operation on that hardware.

Local Outlining

Tom Looman provides an excellent strategy to achieve a post proces effect like outlining while avoiding a full screen post process: use translucent meshes that locally surround an opaque object you wish to outline. The translucent object's material is where the outlining effect lives, so the outline is only calculated on the pixels of the viewport that the translucent mesh occupies. It also eliminates the need for adding an entire post process pass for the effect, because within the UE4 forward renderer, translucent objects are drawn in a pass after the opaque objects.

Trouble

So I paid a small fee to Tom’s Gumroad account to access an example implementation of this idea provided on his blog. The effect is well illustrated and easy to demonstrate in the project. However, it was really just a sketch of an idea, and not intended for specialized contexts like VR. Which, is totally fair.

Needless to say, I ran into some issues when attempting to use it in my VR project. For one, the effect is broken when using the VR template default of forward renderer with MSAA. And additionally, the outline appears in only one eye when the VR template default Instanced Stereo Rendering is enabled.

Bummer! Forward renderer & MSAA, & ISR is a really powerful set of rendering features I wanted to take advantage of on my VR project. I want to stick with forward because I am targeting mobile chipsets, so I’ll switch to FXAA for now. What about ISR? I can probably live without that, since I don’t know whether it will pay off for me yet: ISR helps you if you are CPU-bound. However, I had some time to look into it, and it just bugged me because It Should Work, so I dug a little bit and wanted to share what I found for posterity.

Workaround for Sampling Custom Depth & Stencil Correctly in ISR

The problem occurs when sampling into a stencil buffer to find boundaries on the stencil for our outline effect. We sample the stencil using screen space UV coordinates for the pixel currently being shaded.

However, when ISR is active, and the second eye, the right eye is being shaded, the screen space UV coordinates returned by the built in Screen Position material node give you incorrect results. To get correct results, you need to scale the U value by 0.5.

Additionally, after you’ve scaled the right eye U value by half, you need to sample your stencil or depth texture using an HLSL call. Submitting these coordinates into the built in Scene Texture material node does not give correct results. So you must perform the sample using a Custom material node with the HLSL:

return SceneTextureLookup(scaledUVs, 25, false);

13 and 25 are the hard-coded numbers for accessing custom depth and custom stencil buffers within UE4 HLSL, respectively. The false is just for disabling bilinear filtering.

This feels like a bug to me. Certainly not the desired behavior from my point of view as a user. Something is wrong with how the Screen Position and/or Scene Texture material nodes are handling the use case of Forward & ISR.

But there you have it. Here is a quick sketch of a material function that returns a sample from the custom stencil buffer and gives correct result whether you have ISR on or not. ISR is considered "off" by the shader system when the viewport is monocular, or if the viewport is stereo AND the left eye is being shaded. In other words if you query the ISR state in HLSL, it returns true only when the right eye is being shaded. This can be queried via return IsInstancedStereo(); HLSL call.

Note: For any picture of a node graph below, click image for larger res with more node visible

So basically anywhere that the original material is sampling custom depth or custom stencil, you'd use these material functions instead.

Disclaimer: I am not a tech art whiz so there may be a more efficient way to express this, but you get the idea.

Here's a beautiful image of a stereo pair rendered with ISR enabled and the outline effect in action!

And finally, here is a giant code block of the above material graph nodes I copied out of a vanilla UE4 version 4.27 project if you want to paste it in quickly:

Begin Object Class=/Script/UnrealEd.MaterialGraphNode Name="MaterialGraphNode_0" Begin Object Class=/Script/Engine.MaterialExpressionFunctionOutput Name="MaterialExpressionFunctionOutput_0" End Object Begin Object Name="MaterialExpressionFunctionOutput_0" OutputName="ISR Compatible CustomStencil Sample" Description="Corrects ScreenPositionUV coords if ISR is active" A=(Expression=MaterialExpressionLinearInterpolate'"MaterialGraphNode_4.MaterialExpressionLinearInterpolate_0"') Id=D28EECE6419C846496AA1891C0B48CAB MaterialExpressionEditorX=560 MaterialExpressionEditorY=-64 MaterialExpressionGuid=1F1D76044E3EDC9A7C93BB8059B1F8B5 Material=Material'"/Engine/Transient.Material_0"' bCollapsed=True End Object MaterialExpression=MaterialExpressionFunctionOutput'"MaterialExpressionFunctionOutput_0"' NodePosX=560 NodePosY=-64 NodeGuid=AD15827A49BE0AFABD3938A733080DF3 CustomProperties Pin (PinId=AFAD782C470D3E4670D099A8E613F6AF,PinName="Input",PinFriendlyName=NSLOCTEXT("MaterialGraphNode", "Space", " "),PinType.PinCategory="required",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,LinkedTo=(MaterialGraphNode_4 F6FCD6914B4777F5AF20449E957E2DEF,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) CustomProperties Pin (PinId=517FC0C643494E28F6DF51AA8C98483C,PinName="Output",PinFriendlyName=NSLOCTEXT("MaterialGraphNode", "Space", " "),Direction="EGPD_Output",PinType.PinCategory="",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) End Object Begin Object Class=/Script/UnrealEd.MaterialGraphNode Name="MaterialGraphNode_1" Begin Object Class=/Script/Engine.MaterialExpressionScreenPosition Name="MaterialExpressionScreenPosition_0" End Object Begin Object Name="MaterialExpressionScreenPosition_0" MaterialExpressionEditorX=-768 MaterialExpressionEditorY=16 MaterialExpressionGuid=9A8FB630495554391BB286B2B100F86D Material=Material'"/Engine/Transient.Material_0"' End Object MaterialExpression=MaterialExpressionScreenPosition'"MaterialExpressionScreenPosition_0"' NodePosX=-768 NodePosY=16 NodeGuid=2F2119DB439B74B03C3745B8ACBA6BA1 CustomProperties Pin (PinId=5E2CB06E46ABBABF14C627A6AFE3A25D,PinName="ViewportUV",Direction="EGPD_Output",PinType.PinCategory="",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,LinkedTo=(MaterialGraphNode_11 75BE5EFC4D3B053C24C75E848B61320B,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) CustomProperties Pin (PinId=EA45A16F466693AB80A9FD9AF0A676D2,PinName="PixelPosition",Direction="EGPD_Output",PinType.PinCategory="",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) End Object Begin Object Class=/Script/UnrealEd.MaterialGraphNode Name="MaterialGraphNode_2" Begin Object Class=/Script/Engine.MaterialExpressionCustom Name="MaterialExpressionCustom_0" End Object Begin Object Name="MaterialExpressionCustom_0" Code="return IsInstancedStereo();" OutputType=CMOT_Float1 Description="HLSL Is Instanced Stereo" Inputs= MaterialExpressionEditorX=304 MaterialExpressionEditorY=144 MaterialExpressionGuid=B0042A5F4CB82F3592AF55B62D686216 Material=Material'"/Engine/Transient.Material_0"' bCollapsed=True End Object MaterialExpression=MaterialExpressionCustom'"MaterialExpressionCustom_0"' NodePosX=304 NodePosY=144 NodeGuid=44D59AFC42655B46B6420F965B20E0FF CustomProperties Pin (PinId=F9BBFBC74BA789A53F7DE691C76BADA6,PinName="Output",PinFriendlyName=NSLOCTEXT("MaterialGraphNode", "Space", " "),Direction="EGPD_Output",PinType.PinCategory="",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,LinkedTo=(MaterialGraphNode_4 E5C4889D48EC78F9B96BB1AD9B8ACD73,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) End Object Begin Object Class=/Script/UnrealEd.MaterialGraphNode Name="MaterialGraphNode_3" Begin Object Class=/Script/Engine.MaterialExpressionMultiply Name="MaterialExpressionMultiply_0" End Object Begin Object Name="MaterialExpressionMultiply_0" A=(Expression=MaterialExpressionAdd'"MaterialGraphNode_11.MaterialExpressionAdd_0"') B=(Expression=MaterialExpressionConstant2Vector'"MaterialGraphNode_5.MaterialExpressionConstant2Vector_1"') MaterialExpressionEditorX=-352 MaterialExpressionEditorY=96 MaterialExpressionGuid=D09FCEA74763EBBAACB1F3BC52370412 Material=Material'"/Engine/Transient.Material_0"' End Object MaterialExpression=MaterialExpressionMultiply'"MaterialExpressionMultiply_0"' NodePosX=-352 NodePosY=96 NodeGuid=459FC8F14F75BF83A40C09AB0FF820FF CustomProperties Pin (PinId=1A8CB5F1457AA852E1B3A28069F0659B,PinName="A",PinType.PinCategory="optional",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,LinkedTo=(MaterialGraphNode_11 6C19BB66426869250EC3E4A05D3E7AC0,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) CustomProperties Pin (PinId=CA1F30334B53A59FC8B01D9DF938980C,PinName="B",PinType.PinCategory="optional",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,LinkedTo=(MaterialGraphNode_5 E85BC8284A85C212875EF5837ADA4D82,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) CustomProperties Pin (PinId=CFE9898641EDA4C7660ECFB9E23C4B93,PinName="Output",PinFriendlyName=NSLOCTEXT("MaterialGraphNode", "Space", " "),Direction="EGPD_Output",PinType.PinCategory="",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,LinkedTo=(MaterialGraphNode_7 B992B3264C6C08D50B08FB843AA2F5F6,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) End Object Begin Object Class=/Script/UnrealEd.MaterialGraphNode Name="MaterialGraphNode_4" Begin Object Class=/Script/Engine.MaterialExpressionLinearInterpolate Name="MaterialExpressionLinearInterpolate_0" End Object Begin Object Name="MaterialExpressionLinearInterpolate_0" A=(Expression=MaterialExpressionComponentMask'"MaterialGraphNode_9.MaterialExpressionComponentMask_2"') B=(Expression=MaterialExpressionComponentMask'"MaterialGraphNode_8.MaterialExpressionComponentMask_1"') Alpha=(Expression=MaterialExpressionCustom'"MaterialGraphNode_2.MaterialExpressionCustom_0"') MaterialExpressionEditorX=320 MaterialExpressionEditorY=-64 MaterialExpressionGuid=83FA158844D5BFD1C8B3FB991234CE1B Material=Material'"/Engine/Transient.Material_0"' bCollapsed=False End Object MaterialExpression=MaterialExpressionLinearInterpolate'"MaterialExpressionLinearInterpolate_0"' NodePosX=320 NodePosY=-64 NodeGuid=FB8EA15F418E32667F4432B696C63F87 CustomProperties Pin (PinId=94FFD9AB4A5D6D9DA5844BAF0C66B1CB,PinName="A",PinType.PinCategory="optional",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,LinkedTo=(MaterialGraphNode_9 2FA8D1CC46817C87BC5084B59EFEFF59,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) CustomProperties Pin (PinId=A0D8F07844A092041CE0D7A3510DD813,PinName="B",PinType.PinCategory="optional",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,LinkedTo=(MaterialGraphNode_8 28CAC6A7401B521F47FE419F220864FC,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) CustomProperties Pin (PinId=E5C4889D48EC78F9B96BB1AD9B8ACD73,PinName="Alpha",PinType.PinCategory="optional",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,LinkedTo=(MaterialGraphNode_2 F9BBFBC74BA789A53F7DE691C76BADA6,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) CustomProperties Pin (PinId=F6FCD6914B4777F5AF20449E957E2DEF,PinName="Output",PinFriendlyName=NSLOCTEXT("MaterialGraphNode", "Space", " "),Direction="EGPD_Output",PinType.PinCategory="",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,LinkedTo=(MaterialGraphNode_0 AFAD782C470D3E4670D099A8E613F6AF,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) End Object Begin Object Class=/Script/UnrealEd.MaterialGraphNode Name="MaterialGraphNode_5" Begin Object Class=/Script/Engine.MaterialExpressionConstant2Vector Name="MaterialExpressionConstant2Vector_1" End Object Begin Object Name="MaterialExpressionConstant2Vector_1" R=0.500000 G=1.000000 MaterialExpressionEditorX=-464 MaterialExpressionEditorY=160 MaterialExpressionGuid=CBD5440A46851D12F51C28BFAA8C2ADB Material=Material'"/Engine/Transient.Material_0"' End Object MaterialExpression=MaterialExpressionConstant2Vector'"MaterialExpressionConstant2Vector_1"' NodePosX=-464 NodePosY=160 NodeGuid=E5615BD04E1F9C3C9E77E58CC41B706A CustomProperties Pin (PinId=E85BC8284A85C212875EF5837ADA4D82,PinName="Output",PinFriendlyName=NSLOCTEXT("MaterialGraphNode", "Space", " "),Direction="EGPD_Output",PinType.PinCategory="",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,LinkedTo=(MaterialGraphNode_3 CA1F30334B53A59FC8B01D9DF938980C,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) End Object Begin Object Class=/Script/UnrealEd.MaterialGraphNode Name="MaterialGraphNode_6" Begin Object Class=/Script/Engine.MaterialExpressionSceneTexture Name="MaterialExpressionSceneTexture_0" End Object Begin Object Name="MaterialExpressionSceneTexture_0" Coordinates=(Expression=MaterialExpressionAdd'"MaterialGraphNode_11.MaterialExpressionAdd_0"') SceneTextureId=PPI_CustomStencil MaterialExpressionEditorX=-352 MaterialExpressionEditorY=-80 MaterialExpressionGuid=07011881442D2B45693E41AE2EBD7619 Material=Material'"/Engine/Transient.Material_0"' End Object MaterialExpression=MaterialExpressionSceneTexture'"MaterialExpressionSceneTexture_0"' NodePosX=-352 NodePosY=-80 NodeGuid=4C9B9CA94F78A2D61BFDA68206B741F2 CustomProperties Pin (PinId=14DDD3144C08185D8A87BE8301F6582E,PinName="UVs",PinType.PinCategory="optional",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,LinkedTo=(MaterialGraphNode_11 6C19BB66426869250EC3E4A05D3E7AC0,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) CustomProperties Pin (PinId=0AC8293D42D1E74EC2205EB9C1571AC9,PinName="Color",Direction="EGPD_Output",PinType.PinCategory="mask",PinType.PinSubCategory="rgba",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,LinkedTo=(MaterialGraphNode_9 57E2B0434A456A3DCDDB15B1E0D4C2DE,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) CustomProperties Pin (PinId=5EB64A2B48338E52E0BFC092AA0200D5,PinName="Size",Direction="EGPD_Output",PinType.PinCategory="",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) CustomProperties Pin (PinId=F836C96447DB0A95330A7190BDAB2B9D,PinName="InvSize",Direction="EGPD_Output",PinType.PinCategory="",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) End Object Begin Object Class=/Script/UnrealEd.MaterialGraphNode Name="MaterialGraphNode_7" Begin Object Class=/Script/Engine.MaterialExpressionCustom Name="MaterialExpressionCustom_1" End Object Begin Object Name="MaterialExpressionCustom_1" Code="return SceneTextureLookup(UVs, 25, false);" Description="HLSL SceneTextureLookup" Inputs(0)=(InputName="UVs",Input=(Expression=MaterialExpressionMultiply'"MaterialGraphNode_3.MaterialExpressionMultiply_0"')) MaterialExpressionEditorX=-160 MaterialExpressionEditorY=96 MaterialExpressionGuid=C85DE0CB4784CE2EA3B82A81EB2C4B21 Material=Material'"/Engine/Transient.Material_0"' Desc="Passing the scaled UVs to standard SceneTexture node does not work" bCommentBubbleVisible=True bCollapsed=True End Object MaterialExpression=MaterialExpressionCustom'"MaterialExpressionCustom_1"' NodePosX=-160 NodePosY=96 bCommentBubbleVisible=True NodeComment="Passing the scaled UVs to standard SceneTexture node does not work" NodeGuid=41E497B0473123009ECE279C5C8F056C CustomProperties Pin (PinId=B992B3264C6C08D50B08FB843AA2F5F6,PinName="UVs",PinType.PinCategory="required",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,LinkedTo=(MaterialGraphNode_3 CFE9898641EDA4C7660ECFB9E23C4B93,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) CustomProperties Pin (PinId=2F9DA9D1403E7D87D7151396236FFE1B,PinName="Output",PinFriendlyName=NSLOCTEXT("MaterialGraphNode", "Space", " "),Direction="EGPD_Output",PinType.PinCategory="",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,LinkedTo=(MaterialGraphNode_8 C52A299E4448F4202B6D86BAF13AB66F,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) End Object Begin Object Class=/Script/UnrealEd.MaterialGraphNode Name="MaterialGraphNode_8" Begin Object Class=/Script/Engine.MaterialExpressionComponentMask Name="MaterialExpressionComponentMask_1" End Object Begin Object Name="MaterialExpressionComponentMask_1" Input=(Expression=MaterialExpressionCustom'"MaterialGraphNode_7.MaterialExpressionCustom_1"') R=True MaterialExpressionEditorX=96 MaterialExpressionEditorY=96 MaterialExpressionGuid=3F22193644E857DD3852A09C0D05594D Material=Material'"/Engine/Transient.Material_0"' End Object MaterialExpression=MaterialExpressionComponentMask'"MaterialExpressionComponentMask_1"' NodePosX=96 NodePosY=96 NodeGuid=79FD88C34C901B706E1C15B7454063EB CustomProperties Pin (PinId=C52A299E4448F4202B6D86BAF13AB66F,PinName="Input",PinFriendlyName=NSLOCTEXT("MaterialGraphNode", "Space", " "),PinType.PinCategory="required",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,LinkedTo=(MaterialGraphNode_7 2F9DA9D1403E7D87D7151396236FFE1B,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) CustomProperties Pin (PinId=28CAC6A7401B521F47FE419F220864FC,PinName="Output",PinFriendlyName=NSLOCTEXT("MaterialGraphNode", "Space", " "),Direction="EGPD_Output",PinType.PinCategory="",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,LinkedTo=(MaterialGraphNode_4 A0D8F07844A092041CE0D7A3510DD813,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) End Object Begin Object Class=/Script/UnrealEd.MaterialGraphNode Name="MaterialGraphNode_9" Begin Object Class=/Script/Engine.MaterialExpressionComponentMask Name="MaterialExpressionComponentMask_2" End Object Begin Object Name="MaterialExpressionComponentMask_2" Input=(Expression=MaterialExpressionSceneTexture'"MaterialGraphNode_6.MaterialExpressionSceneTexture_0"',Mask=1,MaskR=1,MaskG=1,MaskB=1,MaskA=1) R=True MaterialExpressionEditorX=16 MaterialExpressionEditorY=-64 MaterialExpressionGuid=3F22193644E857DD3852A09C0D05594D Material=Material'"/Engine/Transient.Material_0"' End Object MaterialExpression=MaterialExpressionComponentMask'"MaterialExpressionComponentMask_2"' NodePosX=16 NodePosY=-64 NodeGuid=937F85AA44F3E2F62AFD9CB5B7E4C7E5 CustomProperties Pin (PinId=57E2B0434A456A3DCDDB15B1E0D4C2DE,PinName="Input",PinFriendlyName=NSLOCTEXT("MaterialGraphNode", "Space", " "),PinType.PinCategory="required",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,LinkedTo=(MaterialGraphNode_6 0AC8293D42D1E74EC2205EB9C1571AC9,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) CustomProperties Pin (PinId=2FA8D1CC46817C87BC5084B59EFEFF59,PinName="Output",PinFriendlyName=NSLOCTEXT("MaterialGraphNode", "Space", " "),Direction="EGPD_Output",PinType.PinCategory="",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,LinkedTo=(MaterialGraphNode_4 94FFD9AB4A5D6D9DA5844BAF0C66B1CB,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) End Object Begin Object Class=/Script/UnrealEd.MaterialGraphNode Name="MaterialGraphNode_10" Begin Object Class=/Script/Engine.MaterialExpressionFunctionInput Name="MaterialExpressionFunctionInput_0" End Object Begin Object Name="MaterialExpressionFunctionInput_0" InputName="CustomStencilSampleOffset" Id=AD959A9E41ADE8764C8288A2F38F0445 InputType=FunctionInput_Vector2 bUsePreviewValueAsDefault=True MaterialExpressionEditorX=-944 MaterialExpressionEditorY=-64 MaterialExpressionGuid=B9E287164B2E6AF6BEFC9E820BDF08ED Material=Material'"/Engine/Transient.Material_0"' bCollapsed=True End Object MaterialExpression=MaterialExpressionFunctionInput'"MaterialExpressionFunctionInput_0"' NodePosX=-944 NodePosY=-64 NodeGuid=FAF56CCC47EF059EEA0A68A753F70234 CustomProperties Pin (PinId=963D51C7475D3227359F06BE555BCA21,PinName="Preview",PinType.PinCategory="optional",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) CustomProperties Pin (PinId=DDD1FC494246E694935F2BB49AD425E7,PinName="Output",PinFriendlyName=NSLOCTEXT("MaterialGraphNode", "Space", " "),Direction="EGPD_Output",PinType.PinCategory="",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,LinkedTo=(MaterialGraphNode_11 82BD6B8546ED912FFF1937B3146375F8,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) End Object Begin Object Class=/Script/UnrealEd.MaterialGraphNode Name="MaterialGraphNode_11" Begin Object Class=/Script/Engine.MaterialExpressionAdd Name="MaterialExpressionAdd_0" End Object Begin Object Name="MaterialExpressionAdd_0" A=(Expression=MaterialExpressionFunctionInput'"MaterialGraphNode_10.MaterialExpressionFunctionInput_0"') B=(Expression=MaterialExpressionScreenPosition'"MaterialGraphNode_1.MaterialExpressionScreenPosition_0"') MaterialExpressionEditorX=-512 MaterialExpressionEditorY=-64 MaterialExpressionGuid=5598831C477D4096748140B8D23FBC7B Material=Material'"/Engine/Transient.Material_0"' End Object MaterialExpression=MaterialExpressionAdd'"MaterialExpressionAdd_0"' NodePosX=-512 NodePosY=-64 NodeGuid=315B827C446A441A9A9513815E90A11E CustomProperties Pin (PinId=82BD6B8546ED912FFF1937B3146375F8,PinName="A",PinType.PinCategory="optional",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,LinkedTo=(MaterialGraphNode_10 DDD1FC494246E694935F2BB49AD425E7,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) CustomProperties Pin (PinId=75BE5EFC4D3B053C24C75E848B61320B,PinName="B",PinType.PinCategory="optional",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,LinkedTo=(MaterialGraphNode_1 5E2CB06E46ABBABF14C627A6AFE3A25D,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) CustomProperties Pin (PinId=6C19BB66426869250EC3E4A05D3E7AC0,PinName="Output",PinFriendlyName=NSLOCTEXT("MaterialGraphNode", "Space", " "),Direction="EGPD_Output",PinType.PinCategory="",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,LinkedTo=(MaterialGraphNode_3 1A8CB5F1457AA852E1B3A28069F0659B,MaterialGraphNode_6 14DDD3144C08185D8A87BE8301F6582E,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) End Object Begin Object Class=/Script/UnrealEd.MaterialGraphNode Name="MaterialGraphNode_12" Begin Object Class=/Script/Engine.MaterialExpressionFunctionOutput Name="MaterialExpressionFunctionOutput_2" End Object Begin Object Name="MaterialExpressionFunctionOutput_2" OutputName="ISR Compatible CustomDepth Sample" A=(Expression=MaterialExpressionLinearInterpolate'"MaterialGraphNode_16.MaterialExpressionLinearInterpolate_1"') Id=5ABD5CEF4A69031BC4C90FB19D3FF204 MaterialExpressionEditorX=560 MaterialExpressionEditorY=544 MaterialExpressionGuid=D7DC3B24456D299BB9336F849298E277 Material=Material'"/Engine/Transient.Material_0"' bCollapsed=True End Object MaterialExpression=MaterialExpressionFunctionOutput'"MaterialExpressionFunctionOutput_2"' NodePosX=560 NodePosY=544 NodeGuid=162EF2BD4239A53D0CE803A16B170F2C CustomProperties Pin (PinId=3D0E9FA947AFF85A19D0B98179B5DA89,PinName="Input",PinFriendlyName=NSLOCTEXT("MaterialGraphNode", "Space", " "),PinType.PinCategory="required",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,LinkedTo=(MaterialGraphNode_16 40993A30453029E323F89D8B466DBD5D,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) CustomProperties Pin (PinId=6899AD5543074EC8C1883B8DBA48FBF5,PinName="Output",PinFriendlyName=NSLOCTEXT("MaterialGraphNode", "Space", " "),Direction="EGPD_Output",PinType.PinCategory="",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) End Object Begin Object Class=/Script/UnrealEd.MaterialGraphNode Name="MaterialGraphNode_13" Begin Object Class=/Script/Engine.MaterialExpressionScreenPosition Name="MaterialExpressionScreenPosition_1" End Object Begin Object Name="MaterialExpressionScreenPosition_1" MaterialExpressionEditorX=-752 MaterialExpressionEditorY=656 MaterialExpressionGuid=9A8FB630495554391BB286B2B100F86D Material=Material'"/Engine/Transient.Material_0"' bCollapsed=False End Object MaterialExpression=MaterialExpressionScreenPosition'"MaterialExpressionScreenPosition_1"' NodePosX=-752 NodePosY=656 NodeGuid=303BC50E485090F263F29AB8B3110398 CustomProperties Pin (PinId=76EAEB944F4358EB059F3F9979BB03ED,PinName="ViewportUV",Direction="EGPD_Output",PinType.PinCategory="",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,LinkedTo=(MaterialGraphNode_23 D0C416684DEE7DB74EFAC9B410CED999,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) CustomProperties Pin (PinId=329284FD4A2638483C02F082E17DDE8B,PinName="PixelPosition",Direction="EGPD_Output",PinType.PinCategory="",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) End Object Begin Object Class=/Script/UnrealEd.MaterialGraphNode Name="MaterialGraphNode_14" Begin Object Class=/Script/Engine.MaterialExpressionCustom Name="MaterialExpressionCustom_2" End Object Begin Object Name="MaterialExpressionCustom_2" Code="return IsInstancedStereo();" OutputType=CMOT_Float1 Description="HLSL Is Instanced Stereo" Inputs= MaterialExpressionEditorX=304 MaterialExpressionEditorY=752 MaterialExpressionGuid=B0042A5F4CB82F3592AF55B62D686216 Material=Material'"/Engine/Transient.Material_0"' bCollapsed=True End Object MaterialExpression=MaterialExpressionCustom'"MaterialExpressionCustom_2"' NodePosX=304 NodePosY=752 NodeGuid=A59BEA6A4A1E1419AD9992885E8C9F83 CustomProperties Pin (PinId=E819B3F14C54BF013EB39E807856FA0B,PinName="Output",PinFriendlyName=NSLOCTEXT("MaterialGraphNode", "Space", " "),Direction="EGPD_Output",PinType.PinCategory="",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,LinkedTo=(MaterialGraphNode_16 AE9AAB9F4F29178FE2CB8381C25BFACD,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) End Object Begin Object Class=/Script/UnrealEd.MaterialGraphNode Name="MaterialGraphNode_15" Begin Object Class=/Script/Engine.MaterialExpressionMultiply Name="MaterialExpressionMultiply_4" End Object Begin Object Name="MaterialExpressionMultiply_4" A=(Expression=MaterialExpressionAdd'"MaterialGraphNode_23.MaterialExpressionAdd_2"') B=(Expression=MaterialExpressionConstant2Vector'"MaterialGraphNode_17.MaterialExpressionConstant2Vector_3"') MaterialExpressionEditorX=-304 MaterialExpressionEditorY=704 MaterialExpressionGuid=D09FCEA74763EBBAACB1F3BC52370412 Material=Material'"/Engine/Transient.Material_0"' End Object MaterialExpression=MaterialExpressionMultiply'"MaterialExpressionMultiply_4"' NodePosX=-304 NodePosY=704 NodeGuid=87A606AE4E1FE79FAB10F3BE02111D29 CustomProperties Pin (PinId=1E58D8B447E3A6AD16816F9AEA24CFBB,PinName="A",PinType.PinCategory="optional",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,LinkedTo=(MaterialGraphNode_23 BD9448D8447CC614AF5E8ABCCE3DD7D7,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) CustomProperties Pin (PinId=60C5C6E842938A064122A9B674A43CC8,PinName="B",PinType.PinCategory="optional",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,LinkedTo=(MaterialGraphNode_17 208CBE36476ABE5581157688A8BBBC6D,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) CustomProperties Pin (PinId=B41DC2354F442B30B51BC3BB79A02165,PinName="Output",PinFriendlyName=NSLOCTEXT("MaterialGraphNode", "Space", " "),Direction="EGPD_Output",PinType.PinCategory="",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,LinkedTo=(MaterialGraphNode_19 4237C88F4F66DA837EDAA7B81C14991B,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) End Object Begin Object Class=/Script/UnrealEd.MaterialGraphNode Name="MaterialGraphNode_16" Begin Object Class=/Script/Engine.MaterialExpressionLinearInterpolate Name="MaterialExpressionLinearInterpolate_1" End Object Begin Object Name="MaterialExpressionLinearInterpolate_1" A=(Expression=MaterialExpressionComponentMask'"MaterialGraphNode_21.MaterialExpressionComponentMask_4"') B=(Expression=MaterialExpressionComponentMask'"MaterialGraphNode_20.MaterialExpressionComponentMask_3"') Alpha=(Expression=MaterialExpressionCustom'"MaterialGraphNode_14.MaterialExpressionCustom_2"') MaterialExpressionEditorX=320 MaterialExpressionEditorY=544 MaterialExpressionGuid=83FA158844D5BFD1C8B3FB991234CE1B Material=Material'"/Engine/Transient.Material_0"' bCollapsed=False End Object MaterialExpression=MaterialExpressionLinearInterpolate'"MaterialExpressionLinearInterpolate_1"' NodePosX=320 NodePosY=544 NodeGuid=0C2CFDA24B1041585B04B3A07C5E9718 CustomProperties Pin (PinId=714968E6465B7DFB10130A98EB5AA2DD,PinName="A",PinType.PinCategory="optional",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,LinkedTo=(MaterialGraphNode_21 567D866648ED7C51DA193086D6069009,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) CustomProperties Pin (PinId=B5D090344939485AED7928B970E95126,PinName="B",PinType.PinCategory="optional",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,LinkedTo=(MaterialGraphNode_20 B53176724C47F7AD5287019D22B8C468,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) CustomProperties Pin (PinId=AE9AAB9F4F29178FE2CB8381C25BFACD,PinName="Alpha",PinType.PinCategory="optional",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,LinkedTo=(MaterialGraphNode_14 E819B3F14C54BF013EB39E807856FA0B,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) CustomProperties Pin (PinId=40993A30453029E323F89D8B466DBD5D,PinName="Output",PinFriendlyName=NSLOCTEXT("MaterialGraphNode", "Space", " "),Direction="EGPD_Output",PinType.PinCategory="",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,LinkedTo=(MaterialGraphNode_12 3D0E9FA947AFF85A19D0B98179B5DA89,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) End Object Begin Object Class=/Script/UnrealEd.MaterialGraphNode Name="MaterialGraphNode_17" Begin Object Class=/Script/Engine.MaterialExpressionConstant2Vector Name="MaterialExpressionConstant2Vector_3" End Object Begin Object Name="MaterialExpressionConstant2Vector_3" R=0.500000 G=1.000000 MaterialExpressionEditorX=-432 MaterialExpressionEditorY=768 MaterialExpressionGuid=CBD5440A46851D12F51C28BFAA8C2ADB Material=Material'"/Engine/Transient.Material_0"' End Object MaterialExpression=MaterialExpressionConstant2Vector'"MaterialExpressionConstant2Vector_3"' NodePosX=-432 NodePosY=768 NodeGuid=47C638B54191E92D6D63E6A973373C33 CustomProperties Pin (PinId=208CBE36476ABE5581157688A8BBBC6D,PinName="Output",PinFriendlyName=NSLOCTEXT("MaterialGraphNode", "Space", " "),Direction="EGPD_Output",PinType.PinCategory="",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,LinkedTo=(MaterialGraphNode_15 60C5C6E842938A064122A9B674A43CC8,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) End Object Begin Object Class=/Script/UnrealEd.MaterialGraphNode Name="MaterialGraphNode_18" Begin Object Class=/Script/Engine.MaterialExpressionSceneTexture Name="MaterialExpressionSceneTexture_2" End Object Begin Object Name="MaterialExpressionSceneTexture_2" Coordinates=(Expression=MaterialExpressionAdd'"MaterialGraphNode_23.MaterialExpressionAdd_2"') SceneTextureId=PPI_CustomDepth MaterialExpressionEditorX=-320 MaterialExpressionEditorY=528 MaterialExpressionGuid=07011881442D2B45693E41AE2EBD7619 Material=Material'"/Engine/Transient.Material_0"' End Object MaterialExpression=MaterialExpressionSceneTexture'"MaterialExpressionSceneTexture_2"' NodePosX=-320 NodePosY=528 NodeGuid=E1AC855A410027347CD8BCA9F6B2FA9A CustomProperties Pin (PinId=B1AABAA54B693F48D3985081CD3BBB84,PinName="UVs",PinType.PinCategory="optional",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,LinkedTo=(MaterialGraphNode_23 BD9448D8447CC614AF5E8ABCCE3DD7D7,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) CustomProperties Pin (PinId=CD02839446A748051383AAA8402E9206,PinName="Color",Direction="EGPD_Output",PinType.PinCategory="mask",PinType.PinSubCategory="rgba",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,LinkedTo=(MaterialGraphNode_21 A7C187FF4076635AAC66BEB4CEE1F0DB,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) CustomProperties Pin (PinId=92CA605D46355648B0D0ABAAA0529377,PinName="Size",Direction="EGPD_Output",PinType.PinCategory="",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) CustomProperties Pin (PinId=5D847E564C10B931082A57BF7630B761,PinName="InvSize",Direction="EGPD_Output",PinType.PinCategory="",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) End Object Begin Object Class=/Script/UnrealEd.MaterialGraphNode Name="MaterialGraphNode_19" Begin Object Class=/Script/Engine.MaterialExpressionCustom Name="MaterialExpressionCustom_3" End Object Begin Object Name="MaterialExpressionCustom_3" Code="return SceneTextureLookup(UVs, 13, false);" Description="HLSL SceneTextureLookup" Inputs(0)=(InputName="UVs",Input=(Expression=MaterialExpressionMultiply'"MaterialGraphNode_15.MaterialExpressionMultiply_4"')) MaterialExpressionEditorX=-128 MaterialExpressionEditorY=704 MaterialExpressionGuid=C85DE0CB4784CE2EA3B82A81EB2C4B21 Material=Material'"/Engine/Transient.Material_0"' Desc="Passing the scaled UVs to standard SceneTexture node does not work" bCommentBubbleVisible=True End Object MaterialExpression=MaterialExpressionCustom'"MaterialExpressionCustom_3"' NodePosX=-128 NodePosY=704 bCommentBubbleVisible=True NodeComment="Passing the scaled UVs to standard SceneTexture node does not work" NodeGuid=316011D442DCCCACCC5CAA9B26CD69C5 CustomProperties Pin (PinId=4237C88F4F66DA837EDAA7B81C14991B,PinName="UVs",PinType.PinCategory="required",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,LinkedTo=(MaterialGraphNode_15 B41DC2354F442B30B51BC3BB79A02165,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) CustomProperties Pin (PinId=B4BCA50247F26AC1FEA8AB9740CF0BD7,PinName="Output",PinFriendlyName=NSLOCTEXT("MaterialGraphNode", "Space", " "),Direction="EGPD_Output",PinType.PinCategory="",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,LinkedTo=(MaterialGraphNode_20 B1DE988F48D115CE6CDF8A97687582AF,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) End Object Begin Object Class=/Script/UnrealEd.MaterialGraphNode Name="MaterialGraphNode_20" Begin Object Class=/Script/Engine.MaterialExpressionComponentMask Name="MaterialExpressionComponentMask_3" End Object Begin Object Name="MaterialExpressionComponentMask_3" Input=(Expression=MaterialExpressionCustom'"MaterialGraphNode_19.MaterialExpressionCustom_3"') R=True MaterialExpressionEditorX=128 MaterialExpressionEditorY=704 MaterialExpressionGuid=3F22193644E857DD3852A09C0D05594D Material=Material'"/Engine/Transient.Material_0"' End Object MaterialExpression=MaterialExpressionComponentMask'"MaterialExpressionComponentMask_3"' NodePosX=128 NodePosY=704 NodeGuid=CE0D34E9447D9B5C8D63DAAC1EBB9CC1 CustomProperties Pin (PinId=B1DE988F48D115CE6CDF8A97687582AF,PinName="Input",PinFriendlyName=NSLOCTEXT("MaterialGraphNode", "Space", " "),PinType.PinCategory="required",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,LinkedTo=(MaterialGraphNode_19 B4BCA50247F26AC1FEA8AB9740CF0BD7,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) CustomProperties Pin (PinId=B53176724C47F7AD5287019D22B8C468,PinName="Output",PinFriendlyName=NSLOCTEXT("MaterialGraphNode", "Space", " "),Direction="EGPD_Output",PinType.PinCategory="",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,LinkedTo=(MaterialGraphNode_16 B5D090344939485AED7928B970E95126,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) End Object Begin Object Class=/Script/UnrealEd.MaterialGraphNode Name="MaterialGraphNode_21" Begin Object Class=/Script/Engine.MaterialExpressionComponentMask Name="MaterialExpressionComponentMask_4" End Object Begin Object Name="MaterialExpressionComponentMask_4" Input=(Expression=MaterialExpressionSceneTexture'"MaterialGraphNode_18.MaterialExpressionSceneTexture_2"',Mask=1,MaskR=1,MaskG=1,MaskB=1,MaskA=1) R=True MaterialExpressionEditorX=32 MaterialExpressionEditorY=544 MaterialExpressionGuid=3F22193644E857DD3852A09C0D05594D Material=Material'"/Engine/Transient.Material_0"' End Object MaterialExpression=MaterialExpressionComponentMask'"MaterialExpressionComponentMask_4"' NodePosX=32 NodePosY=544 NodeGuid=999AC7744A5DC11DF9139EA4BA2EE0AC CustomProperties Pin (PinId=A7C187FF4076635AAC66BEB4CEE1F0DB,PinName="Input",PinFriendlyName=NSLOCTEXT("MaterialGraphNode", "Space", " "),PinType.PinCategory="required",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,LinkedTo=(MaterialGraphNode_18 CD02839446A748051383AAA8402E9206,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) CustomProperties Pin (PinId=567D866648ED7C51DA193086D6069009,PinName="Output",PinFriendlyName=NSLOCTEXT("MaterialGraphNode", "Space", " "),Direction="EGPD_Output",PinType.PinCategory="",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,LinkedTo=(MaterialGraphNode_16 714968E6465B7DFB10130A98EB5AA2DD,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) End Object Begin Object Class=/Script/UnrealEd.MaterialGraphNode Name="MaterialGraphNode_22" Begin Object Class=/Script/Engine.MaterialExpressionFunctionInput Name="MaterialExpressionFunctionInput_1" End Object Begin Object Name="MaterialExpressionFunctionInput_1" InputName="CustomDepthSampleOffset" Id=16ACEE894842389F6F591CA1B9047058 InputType=FunctionInput_Vector2 bUsePreviewValueAsDefault=True MaterialExpressionEditorX=-816 MaterialExpressionEditorY=544 MaterialExpressionGuid=B9E287164B2E6AF6BEFC9E820BDF08ED Material=Material'"/Engine/Transient.Material_0"' bCollapsed=True End Object MaterialExpression=MaterialExpressionFunctionInput'"MaterialExpressionFunctionInput_1"' NodePosX=-816 NodePosY=544 NodeGuid=1CEBFBE1433A9B5D8F6898A8E31588AC CustomProperties Pin (PinId=F2296ACD4FD8EC2530FF49BACEDEC32C,PinName="Preview",PinType.PinCategory="optional",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) CustomProperties Pin (PinId=A41C4E2448AF879D1B633C8BA2B41ECF,PinName="Output",PinFriendlyName=NSLOCTEXT("MaterialGraphNode", "Space", " "),Direction="EGPD_Output",PinType.PinCategory="",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,LinkedTo=(MaterialGraphNode_23 BFE801694F8EAF52DD9734B2BF78D34C,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) End Object Begin Object Class=/Script/UnrealEd.MaterialGraphNode Name="MaterialGraphNode_23" Begin Object Class=/Script/Engine.MaterialExpressionAdd Name="MaterialExpressionAdd_2" End Object Begin Object Name="MaterialExpressionAdd_2" A=(Expression=MaterialExpressionFunctionInput'"MaterialGraphNode_22.MaterialExpressionFunctionInput_1"') B=(Expression=MaterialExpressionScreenPosition'"MaterialGraphNode_13.MaterialExpressionScreenPosition_1"') MaterialExpressionEditorX=-480 MaterialExpressionEditorY=544 MaterialExpressionGuid=5598831C477D4096748140B8D23FBC7B Material=Material'"/Engine/Transient.Material_0"' End Object MaterialExpression=MaterialExpressionAdd'"MaterialExpressionAdd_2"' NodePosX=-480 NodePosY=544 NodeGuid=1B3DDA7C4AAC1AC03D275D8715C9BE8D CustomProperties Pin (PinId=BFE801694F8EAF52DD9734B2BF78D34C,PinName="A",PinType.PinCategory="optional",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,LinkedTo=(MaterialGraphNode_22 A41C4E2448AF879D1B633C8BA2B41ECF,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) CustomProperties Pin (PinId=D0C416684DEE7DB74EFAC9B410CED999,PinName="B",PinType.PinCategory="optional",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,LinkedTo=(MaterialGraphNode_13 76EAEB944F4358EB059F3F9979BB03ED,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) CustomProperties Pin (PinId=BD9448D8447CC614AF5E8ABCCE3DD7D7,PinName="Output",PinFriendlyName=NSLOCTEXT("MaterialGraphNode", "Space", " "),Direction="EGPD_Output",PinType.PinCategory="",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,LinkedTo=(MaterialGraphNode_15 1E58D8B447E3A6AD16816F9AEA24CFBB,MaterialGraphNode_18 B1AABAA54B693F48D3985081CD3BBB84,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) End Object