I’ve noticed that I wanted to have specular reflections in my scenes, but found the “realistic” rendering of Unreal Engine 4 insufficient. Therefore I made a trick to emulate specular highlights. It is a trick, because the coordinate of the light source Is hardcoded in the shader. This means also that you can only emulate 1 light source. My example also does not take into account fall-off, so regardless of the distance of the lightsource, the phong is always at the same brightness and size. Distance dependent specular light can however easily be added by a multiply operation. You can do some cool tricks once you can control specular light as you can see in the screenshots below:
The base material code is calculated here:
Now you can easily modulate your specular color (red), add bloom (modulate > 1.0), render with a diffuse color and normal map.
You can also make realistic glass. Note that translucent material does not cast a shadow.
To avoid the reduction of translucency with opacity, you can just set the blend mode to additive and only render the specular light as a second render-pass (So first you render translucent water without opacity and, then you render a second mesh, just slightly above your water surface, with the specular highlights). (Still something needs to be made for reflections).
When using “Default lit” lighting mode, you can make use of normal maps, for nice, particle like effects. When using unlit mode, you can make force-field-like effects.
Dude…I have not yet reviewed your shader, but it looks completely awesome! Very cool idea.
I might give it a try when I have time and share my thoughts on it (will probably do that quite soon since I am working on some car rendering stuff where this could come in handy^^)
Just wanted to drop by and say thanks man for making this tutorial.
I’ve recently gotten inspired to go make a cartoony game in UE4 and my first thought was “how am I going to create the specular??!” but I found an answer quick.
FYI: I found a mistake in the tutorial: The object position should be replaced by pixel position (or it is called something like that). If you are very far from an object, the object position and pixel position are more or less equivalent, but up close you get very different results.
Hey isgoed, just wanted to thank you for this TUT, Ive been wanting an easy way to add a colored spec for a transition from ue3 to 4.
you have saved my life
keep being a bad ***
thanks again
So I noticed that you can also copy paste blueprints (as text); so for your convenience: This is my Material-Function F_Specular from my UE 4.11.2 Project. You can easily add this material function to your existing Materials:
Begin Object Class=MaterialGraphNode Name="MaterialGraphNode_18"
Begin Object Class=EdGraphPin Name="EdGraphPin_80426"
End Object
Begin Object Class=EdGraphPin Name="EdGraphPin_80425"
End Object
Begin Object Class=MaterialExpressionFunctionOutput Name="MaterialExpressionFunctionOutput_0"
End Object
Begin Object Name="EdGraphPin_80426"
PinName="Output"
PinFriendlyName=" "
Direction=EGPD_Output
End Object
Begin Object Name="EdGraphPin_80425"
PinName="Input"
PinFriendlyName=" "
PinType=(PinCategory="required")
LinkedTo(0)=EdGraphPin'MaterialGraphNode_19.EdGraphPin_80429'
End Object
Begin Object Name="MaterialExpressionFunctionOutput_0"
A=(Expression=MaterialExpressionPower'MaterialGraphNode_19.MaterialExpressionPower_0')
bLastPreviewed=True
Id=35D0033047C831402AEF5C98FECC5473
MaterialExpressionEditorX=-250
MaterialExpressionEditorY=375
MaterialExpressionGuid=DC7F39BD4679F1E0AE03C99C7EF36ED4
Material=Material'/Engine/Transient.Material_0'
End Object
MaterialExpression=MaterialExpressionFunctionOutput'MaterialExpressionFunctionOutput_0'
Pins(0)=EdGraphPin'EdGraphPin_80425'
Pins(1)=EdGraphPin'EdGraphPin_80426'
NodePosX=-250
NodePosY=375
NodeGuid=D3A16F9F40078B45108280B1B5E8C448
End Object
Begin Object Class=MaterialGraphNode Name="MaterialGraphNode_19"
Begin Object Class=EdGraphPin Name="EdGraphPin_80429"
End Object
Begin Object Class=EdGraphPin Name="EdGraphPin_80428"
End Object
Begin Object Class=EdGraphPin Name="EdGraphPin_80427"
End Object
Begin Object Class=MaterialExpressionPower Name="MaterialExpressionPower_0"
End Object
Begin Object Name="EdGraphPin_80429"
PinName="Output"
PinFriendlyName=" "
Direction=EGPD_Output
LinkedTo(0)=EdGraphPin'MaterialGraphNode_18.EdGraphPin_80425'
End Object
Begin Object Name="EdGraphPin_80428"
PinName="Exp"
PinType=(PinCategory="optional")
End Object
Begin Object Name="EdGraphPin_80427"
PinName="Base"
PinType=(PinCategory="required")
LinkedTo(0)=EdGraphPin'MaterialGraphNode_32.EdGraphPin_80464'
End Object
Begin Object Name="MaterialExpressionPower_0"
Base=(Expression=MaterialExpressionMin'MaterialGraphNode_32.MaterialExpressionMin_0')
ConstExponent=40.000000
MaterialExpressionEditorX=-560
MaterialExpressionEditorY=440
MaterialExpressionGuid=9F503533470CE5805D2B4B9048BBB2FB
Material=Material'/Engine/Transient.Material_0'
End Object
MaterialExpression=MaterialExpressionPower'MaterialExpressionPower_0'
Pins(0)=EdGraphPin'EdGraphPin_80427'
Pins(1)=EdGraphPin'EdGraphPin_80428'
Pins(2)=EdGraphPin'EdGraphPin_80429'
NodePosX=-560
NodePosY=440
NodeGuid=AF50DC93477729DF845F7498DB3ADC04
End Object
Begin Object Class=MaterialGraphNode Name="MaterialGraphNode_20"
Begin Object Class=EdGraphPin Name="EdGraphPin_80432"
End Object
Begin Object Class=EdGraphPin Name="EdGraphPin_80431"
End Object
Begin Object Class=EdGraphPin Name="EdGraphPin_80430"
End Object
Begin Object Class=MaterialExpressionMaterialFunctionCall Name="MaterialExpressionMaterialFunctionCall_0"
End Object
Begin Object Name="EdGraphPin_80432"
PinName="Reflection Vector"
Direction=EGPD_Output
LinkedTo(0)=EdGraphPin'MaterialGraphNode_25.EdGraphPin_80442'
End Object
Begin Object Name="EdGraphPin_80431"
PinName="CameraVector (V3)"
PinType=(PinCategory="optional")
LinkedTo(0)=EdGraphPin'MaterialGraphNode_26.EdGraphPin_80446'
End Object
Begin Object Name="EdGraphPin_80430"
PinName="Normal (V3)"
PinType=(PinCategory="optional")
LinkedTo(0)=EdGraphPin'MaterialGraphNode_21.EdGraphPin_80433'
End Object
Begin Object Name="MaterialExpressionMaterialFunctionCall_0"
MaterialFunction=MaterialFunction'/Engine/Functions/Engine_MaterialFunctions02/Utility/CustomReflectionVector.CustomReflectionVector'
FunctionInputs(0)=(ExpressionInputId=41DFA13C4219BE10B5068D96A0FF40CA,Input=(Expression=MaterialExpressionPixelNormalWS'MaterialGraphNode_21.MaterialExpressionPixelNormalWS_0',InputName="Normal"))
FunctionInputs(1)=(ExpressionInputId=28004D7B4A42C1E4E7DD328B7CE81115,Input=(Expression=MaterialExpressionSubtract'MaterialGraphNode_26.MaterialExpressionSubtract_1',InputName="CameraVector"))
FunctionOutputs(0)=(ExpressionOutputId=250DB93F499D65BE37807FBAB01777F8,Output=(OutputName="Reflection Vector"))
MaterialExpressionEditorX=-2320
MaterialExpressionEditorY=520
MaterialExpressionGuid=510DFFF54DAE7CA4E237BA99F055D0C1
Material=Material'/Engine/Transient.Material_0'
Outputs(0)=(OutputName="Reflection Vector")
End Object
MaterialExpression=MaterialExpressionMaterialFunctionCall'MaterialExpressionMaterialFunctionCall_0'
Pins(0)=EdGraphPin'EdGraphPin_80430'
Pins(1)=EdGraphPin'EdGraphPin_80431'
Pins(2)=EdGraphPin'EdGraphPin_80432'
NodePosX=-2320
NodePosY=520
NodeGuid=3C7FE8C1481D4914C2E42C9AC8D968DE
End Object
Begin Object Class=MaterialGraphNode Name="MaterialGraphNode_21"
Begin Object Class=EdGraphPin Name="EdGraphPin_80433"
End Object
Begin Object Class=MaterialExpressionPixelNormalWS Name="MaterialExpressionPixelNormalWS_0"
End Object
Begin Object Name="EdGraphPin_80433"
PinName="Output"
PinFriendlyName=" "
Direction=EGPD_Output
LinkedTo(0)=EdGraphPin'MaterialGraphNode_20.EdGraphPin_80430'
LinkedTo(1)=EdGraphPin'MaterialGraphNode_27.EdGraphPin_80447'
End Object
Begin Object Name="MaterialExpressionPixelNormalWS_0"
MaterialExpressionEditorX=-2640
MaterialExpressionEditorY=40
MaterialExpressionGuid=4B82EA3E4474FB3A2EE09C88CFD837D1
Material=Material'/Engine/Transient.Material_0'
End Object
MaterialExpression=MaterialExpressionPixelNormalWS'MaterialExpressionPixelNormalWS_0'
Pins(0)=EdGraphPin'EdGraphPin_80433'
NodePosX=-2640
NodePosY=40
NodeGuid=835B0BBB40E659938C6A63B33686A1B0
End Object
Begin Object Class=MaterialGraphNode Name="MaterialGraphNode_22"
Begin Object Class=EdGraphPin Name="EdGraphPin_80436"
End Object
Begin Object Class=EdGraphPin Name="EdGraphPin_80435"
End Object
Begin Object Class=EdGraphPin Name="EdGraphPin_80434"
End Object
Begin Object Class=MaterialExpressionDotProduct Name="MaterialExpressionDotProduct_0"
End Object
Begin Object Name="EdGraphPin_80436"
PinName="Output"
PinFriendlyName=" "
Direction=EGPD_Output
LinkedTo(0)=EdGraphPin'MaterialGraphNode_28.EdGraphPin_80454'
End Object
Begin Object Name="EdGraphPin_80435"
PinName="B"
PinType=(PinCategory="required")
LinkedTo(0)=EdGraphPin'MaterialGraphNode_25.EdGraphPin_80443'
End Object
Begin Object Name="EdGraphPin_80434"
PinName="A"
PinType=(PinCategory="required")
LinkedTo(0)=EdGraphPin'MaterialGraphNode_24.EdGraphPin_80441'
End Object
Begin Object Name="MaterialExpressionDotProduct_0"
A=(Expression=MaterialExpressionNormalize'MaterialGraphNode_24.MaterialExpressionNormalize_0')
B=(Expression=MaterialExpressionNormalize'MaterialGraphNode_25.MaterialExpressionNormalize_1')
MaterialExpressionEditorX=-1680
MaterialExpressionEditorY=340
MaterialExpressionGuid=A49C889F45A2E200C268C1AE857C19B8
Material=Material'/Engine/Transient.Material_0'
End Object
MaterialExpression=MaterialExpressionDotProduct'MaterialExpressionDotProduct_0'
Pins(0)=EdGraphPin'EdGraphPin_80434'
Pins(1)=EdGraphPin'EdGraphPin_80435'
Pins(2)=EdGraphPin'EdGraphPin_80436'
NodePosX=-1680
NodePosY=340
NodeGuid=38E1093B4D5A394DEC0D63B658F40A7D
End Object
Begin Object Class=MaterialGraphNode Name="MaterialGraphNode_23"
Begin Object Class=EdGraphPin Name="EdGraphPin_80439"
End Object
Begin Object Class=EdGraphPin Name="EdGraphPin_80438"
End Object
Begin Object Class=EdGraphPin Name="EdGraphPin_80437"
End Object
Begin Object Class=MaterialExpressionSubtract Name="MaterialExpressionSubtract_0"
End Object
Begin Object Name="EdGraphPin_80439"
PinName="Output"
PinFriendlyName=" "
Direction=EGPD_Output
LinkedTo(0)=EdGraphPin'MaterialGraphNode_24.EdGraphPin_80440'
LinkedTo(1)=EdGraphPin'MaterialGraphNode_27.EdGraphPin_80448'
End Object
Begin Object Name="EdGraphPin_80438"
PinName="B"
PinType=(PinCategory="optional")
LinkedTo(0)=EdGraphPin'MaterialGraphNode_34.EdGraphPin_80467'
End Object
Begin Object Name="EdGraphPin_80437"
PinName="A"
PinType=(PinCategory="optional")
LinkedTo(0)=EdGraphPin'MaterialGraphNode_33.EdGraphPin_80465'
End Object
Begin Object Name="MaterialExpressionSubtract_0"
A=(Expression=MaterialExpressionWorldPosition'MaterialGraphNode_33.MaterialExpressionWorldPosition_0')
B=(Expression=MaterialExpressionFunctionInput'MaterialGraphNode_34.MaterialExpressionFunctionInput_0')
MaterialExpressionEditorX=-2040
MaterialExpressionEditorY=220
MaterialExpressionGuid=26BFA4864FD804C160D524B0CE1A67A0
Material=Material'/Engine/Transient.Material_0'
End Object
MaterialExpression=MaterialExpressionSubtract'MaterialExpressionSubtract_0'
Pins(0)=EdGraphPin'EdGraphPin_80437'
Pins(1)=EdGraphPin'EdGraphPin_80438'
Pins(2)=EdGraphPin'EdGraphPin_80439'
NodePosX=-2040
NodePosY=220
NodeGuid=B2CB71A04D98046AB96EDDBA76592BCC
End Object
Begin Object Class=MaterialGraphNode Name="MaterialGraphNode_24"
Begin Object Class=EdGraphPin Name="EdGraphPin_80441"
End Object
Begin Object Class=EdGraphPin Name="EdGraphPin_80440"
End Object
Begin Object Class=MaterialExpressionNormalize Name="MaterialExpressionNormalize_0"
End Object
Begin Object Name="EdGraphPin_80441"
PinName="Output"
PinFriendlyName=" "
Direction=EGPD_Output
LinkedTo(0)=EdGraphPin'MaterialGraphNode_22.EdGraphPin_80434'
End Object
Begin Object Name="EdGraphPin_80440"
PinName="VectorInput"
PinType=(PinCategory="required")
LinkedTo(0)=EdGraphPin'MaterialGraphNode_23.EdGraphPin_80439'
End Object
Begin Object Name="MaterialExpressionNormalize_0"
VectorInput=(Expression=MaterialExpressionSubtract'MaterialGraphNode_23.MaterialExpressionSubtract_0')
MaterialExpressionEditorX=-1880
MaterialExpressionEditorY=300
MaterialExpressionGuid=74EA38C94C0DCD82FBA071BF43F862BE
Material=Material'/Engine/Transient.Material_0'
End Object
MaterialExpression=MaterialExpressionNormalize'MaterialExpressionNormalize_0'
Pins(0)=EdGraphPin'EdGraphPin_80440'
Pins(1)=EdGraphPin'EdGraphPin_80441'
NodePosX=-1880
NodePosY=300
NodeGuid=86F13B6D4C40D92ECC9E28A48A3D571D
End Object
Begin Object Class=MaterialGraphNode Name="MaterialGraphNode_25"
Begin Object Class=EdGraphPin Name="EdGraphPin_80443"
End Object
Begin Object Class=EdGraphPin Name="EdGraphPin_80442"
End Object
Begin Object Class=MaterialExpressionNormalize Name="MaterialExpressionNormalize_1"
End Object
Begin Object Name="EdGraphPin_80443"
PinName="Output"
PinFriendlyName=" "
Direction=EGPD_Output
LinkedTo(0)=EdGraphPin'MaterialGraphNode_22.EdGraphPin_80435'
End Object
Begin Object Name="EdGraphPin_80442"
PinName="VectorInput"
PinType=(PinCategory="required")
LinkedTo(0)=EdGraphPin'MaterialGraphNode_20.EdGraphPin_80432'
End Object
Begin Object Name="MaterialExpressionNormalize_1"
VectorInput=(Expression=MaterialExpressionMaterialFunctionCall'MaterialGraphNode_20.MaterialExpressionMaterialFunctionCall_0')
MaterialExpressionEditorX=-1960
MaterialExpressionEditorY=460
MaterialExpressionGuid=7CEC27AD4098EAF01CE164BDCAF110C8
Material=Material'/Engine/Transient.Material_0'
End Object
MaterialExpression=MaterialExpressionNormalize'MaterialExpressionNormalize_1'
Pins(0)=EdGraphPin'EdGraphPin_80442'
Pins(1)=EdGraphPin'EdGraphPin_80443'
NodePosX=-1960
NodePosY=460
NodeGuid=3C4ABF6040B85358641EC6B463AAAF65
End Object
Begin Object Class=MaterialGraphNode Name="MaterialGraphNode_26"
Begin Object Class=EdGraphPin Name="EdGraphPin_80446"
End Object
Begin Object Class=EdGraphPin Name="EdGraphPin_80445"
End Object
Begin Object Class=EdGraphPin Name="EdGraphPin_80444"
End Object
Begin Object Class=MaterialExpressionSubtract Name="MaterialExpressionSubtract_1"
End Object
Begin Object Name="EdGraphPin_80446"
PinName="Output"
PinFriendlyName=" "
Direction=EGPD_Output
LinkedTo(0)=EdGraphPin'MaterialGraphNode_20.EdGraphPin_80431'
End Object
Begin Object Name="EdGraphPin_80445"
PinName="B"
PinType=(PinCategory="optional")
LinkedTo(0)=EdGraphPin'MaterialGraphNode_35.EdGraphPin_80468'
End Object
Begin Object Name="EdGraphPin_80444"
PinName="A"
PinType=(PinCategory="optional")
End Object
Begin Object Name="MaterialExpressionSubtract_1"
B=(Expression=MaterialExpressionCameraVectorWS'MaterialGraphNode_35.MaterialExpressionCameraVectorWS_0')
ConstA=0.000000
MaterialExpressionEditorX=-2500
MaterialExpressionEditorY=560
MaterialExpressionGuid=B27C01E2443A6693C6120D926CC1F8DD
Material=Material'/Engine/Transient.Material_0'
End Object
MaterialExpression=MaterialExpressionSubtract'MaterialExpressionSubtract_1'
Pins(0)=EdGraphPin'EdGraphPin_80444'
Pins(1)=EdGraphPin'EdGraphPin_80445'
Pins(2)=EdGraphPin'EdGraphPin_80446'
NodePosX=-2500
NodePosY=560
NodeGuid=537EC56F49895E2E0431ABA91F1CEB3D
End Object
Begin Object Class=MaterialGraphNode Name="MaterialGraphNode_27"
Begin Object Class=EdGraphPin Name="EdGraphPin_80449"
End Object
Begin Object Class=EdGraphPin Name="EdGraphPin_80448"
End Object
Begin Object Class=EdGraphPin Name="EdGraphPin_80447"
End Object
Begin Object Class=MaterialExpressionDotProduct Name="MaterialExpressionDotProduct_1"
End Object
Begin Object Name="EdGraphPin_80449"
PinName="Output"
PinFriendlyName=" "
Direction=EGPD_Output
LinkedTo(0)=EdGraphPin'MaterialGraphNode_28.EdGraphPin_80450'
End Object
Begin Object Name="EdGraphPin_80448"
PinName="B"
PinType=(PinCategory="required")
LinkedTo(0)=EdGraphPin'MaterialGraphNode_23.EdGraphPin_80439'
End Object
Begin Object Name="EdGraphPin_80447"
PinName="A"
PinType=(PinCategory="required")
LinkedTo(0)=EdGraphPin'MaterialGraphNode_21.EdGraphPin_80433'
End Object
Begin Object Name="MaterialExpressionDotProduct_1"
A=(Expression=MaterialExpressionPixelNormalWS'MaterialGraphNode_21.MaterialExpressionPixelNormalWS_0')
B=(Expression=MaterialExpressionSubtract'MaterialGraphNode_23.MaterialExpressionSubtract_0')
MaterialExpressionEditorX=-1840
MaterialExpressionEditorY=120
MaterialExpressionGuid=6B3B5F2745CB4ACC65031A81CCADDC56
Material=Material'/Engine/Transient.Material_0'
End Object
MaterialExpression=MaterialExpressionDotProduct'MaterialExpressionDotProduct_1'
Pins(0)=EdGraphPin'EdGraphPin_80447'
Pins(1)=EdGraphPin'EdGraphPin_80448'
Pins(2)=EdGraphPin'EdGraphPin_80449'
NodePosX=-1840
NodePosY=120
NodeGuid=FA41C1104689112ADE3459819060CDD1
End Object
Begin Object Class=MaterialGraphNode Name="MaterialGraphNode_28"
Begin Object Class=EdGraphPin Name="EdGraphPin_80455"
End Object
Begin Object Class=EdGraphPin Name="EdGraphPin_80454"
End Object
Begin Object Class=EdGraphPin Name="EdGraphPin_80453"
End Object
Begin Object Class=EdGraphPin Name="EdGraphPin_80452"
End Object
Begin Object Class=EdGraphPin Name="EdGraphPin_80451"
End Object
Begin Object Class=EdGraphPin Name="EdGraphPin_80450"
End Object
Begin Object Class=MaterialExpressionIf Name="MaterialExpressionIf_0"
End Object
Begin Object Name="EdGraphPin_80455"
PinName="Output"
PinFriendlyName=" "
Direction=EGPD_Output
LinkedTo(0)=EdGraphPin'MaterialGraphNode_30.EdGraphPin_80457'
End Object
Begin Object Name="EdGraphPin_80454"
PinName="A<B"
PinType=(PinCategory="required")
LinkedTo(0)=EdGraphPin'MaterialGraphNode_22.EdGraphPin_80436'
End Object
Begin Object Name="EdGraphPin_80453"
PinName="A==B"
PinType=(PinCategory="optional")
End Object
Begin Object Name="EdGraphPin_80452"
PinName="A>=B"
PinType=(PinCategory="required")
LinkedTo(0)=EdGraphPin'MaterialGraphNode_29.EdGraphPin_80456'
End Object
Begin Object Name="EdGraphPin_80451"
PinName="B"
PinType=(PinCategory="optional")
End Object
Begin Object Name="EdGraphPin_80450"
PinName="A"
PinType=(PinCategory="required")
LinkedTo(0)=EdGraphPin'MaterialGraphNode_27.EdGraphPin_80449'
End Object
Begin Object Name="MaterialExpressionIf_0"
A=(Expression=MaterialExpressionDotProduct'MaterialGraphNode_27.MaterialExpressionDotProduct_1')
AGreaterThanB=(Expression=MaterialExpressionConstant'MaterialGraphNode_29.MaterialExpressionConstant_0')
ALessThanB=(Expression=MaterialExpressionDotProduct'MaterialGraphNode_22.MaterialExpressionDotProduct_0')
MaterialExpressionEditorX=-1500
MaterialExpressionEditorY=320
MaterialExpressionGuid=22FD26C24C4FD0776F97AAAD1414DACC
Material=Material'/Engine/Transient.Material_0'
End Object
MaterialExpression=MaterialExpressionIf'MaterialExpressionIf_0'
Pins(0)=EdGraphPin'EdGraphPin_80450'
Pins(1)=EdGraphPin'EdGraphPin_80451'
Pins(2)=EdGraphPin'EdGraphPin_80452'
Pins(3)=EdGraphPin'EdGraphPin_80453'
Pins(4)=EdGraphPin'EdGraphPin_80454'
Pins(5)=EdGraphPin'EdGraphPin_80455'
NodePosX=-1500
NodePosY=320
NodeGuid=1682D5F14805A0854FD0FDAF8191EF35
End Object
Begin Object Class=MaterialGraphNode Name="MaterialGraphNode_29"
Begin Object Class=EdGraphPin Name="EdGraphPin_80456"
End Object
Begin Object Class=MaterialExpressionConstant Name="MaterialExpressionConstant_0"
End Object
Begin Object Name="EdGraphPin_80456"
PinName="Output"
PinFriendlyName=" "
Direction=EGPD_Output
LinkedTo(0)=EdGraphPin'MaterialGraphNode_28.EdGraphPin_80452'
End Object
Begin Object Name="MaterialExpressionConstant_0"
MaterialExpressionEditorX=-1740
MaterialExpressionEditorY=520
MaterialExpressionGuid=0742581A4FA4FE5097146FA47B1F09DE
Material=Material'/Engine/Transient.Material_0'
End Object
MaterialExpression=MaterialExpressionConstant'MaterialExpressionConstant_0'
Pins(0)=EdGraphPin'EdGraphPin_80456'
NodePosX=-1740
NodePosY=520
NodeGuid=62BCD0F84846FAD2F8AE04BDE0B2E258
End Object
Begin Object Class=MaterialGraphNode Name="MaterialGraphNode_30"
Begin Object Class=EdGraphPin Name="EdGraphPin_80458"
End Object
Begin Object Class=EdGraphPin Name="EdGraphPin_80457"
End Object
Begin Object Class=MaterialExpressionComponentMask Name="MaterialExpressionComponentMask_0"
End Object
Begin Object Name="EdGraphPin_80458"
PinName="Output"
PinFriendlyName=" "
Direction=EGPD_Output
LinkedTo(0)=EdGraphPin'MaterialGraphNode_31.EdGraphPin_80459'
End Object
Begin Object Name="EdGraphPin_80457"
PinName="Input"
PinFriendlyName=" "
PinType=(PinCategory="required")
LinkedTo(0)=EdGraphPin'MaterialGraphNode_28.EdGraphPin_80455'
End Object
Begin Object Name="MaterialExpressionComponentMask_0"
Input=(Expression=MaterialExpressionIf'MaterialGraphNode_28.MaterialExpressionIf_0')
R=True
MaterialExpressionEditorX=-1320
MaterialExpressionEditorY=360
MaterialExpressionGuid=A6E8D2F4492655DE3B63078529DC4571
Material=Material'/Engine/Transient.Material_0'
End Object
MaterialExpression=MaterialExpressionComponentMask'MaterialExpressionComponentMask_0'
Pins(0)=EdGraphPin'EdGraphPin_80457'
Pins(1)=EdGraphPin'EdGraphPin_80458'
NodePosX=-1320
NodePosY=360
NodeGuid=46E6F3C04D22CA7DE4F14FA691014B21
End Object
Begin Object Class=MaterialGraphNode Name="MaterialGraphNode_31"
Begin Object Class=EdGraphPin Name="EdGraphPin_80461"
End Object
Begin Object Class=EdGraphPin Name="EdGraphPin_80460"
End Object
Begin Object Class=EdGraphPin Name="EdGraphPin_80459"
End Object
Begin Object Class=MaterialExpressionMax Name="MaterialExpressionMax_0"
End Object
Begin Object Name="EdGraphPin_80461"
PinName="Output"
PinFriendlyName=" "
Direction=EGPD_Output
LinkedTo(0)=EdGraphPin'MaterialGraphNode_32.EdGraphPin_80462'
End Object
Begin Object Name="EdGraphPin_80460"
PinName="B"
PinType=(PinCategory="optional")
End Object
Begin Object Name="EdGraphPin_80459"
PinName="A"
PinType=(PinCategory="optional")
LinkedTo(0)=EdGraphPin'MaterialGraphNode_30.EdGraphPin_80458'
End Object
Begin Object Name="MaterialExpressionMax_0"
A=(Expression=MaterialExpressionComponentMask'MaterialGraphNode_30.MaterialExpressionComponentMask_0')
ConstB=0.000000
MaterialExpressionEditorX=-1120
MaterialExpressionEditorY=360
MaterialExpressionGuid=9098B3944F61669A792CB698644CFDF3
Material=Material'/Engine/Transient.Material_0'
End Object
MaterialExpression=MaterialExpressionMax'MaterialExpressionMax_0'
Pins(0)=EdGraphPin'EdGraphPin_80459'
Pins(1)=EdGraphPin'EdGraphPin_80460'
Pins(2)=EdGraphPin'EdGraphPin_80461'
NodePosX=-1120
NodePosY=360
NodeGuid=08D14EC549979B2223FAC1B03257DCDA
End Object
Begin Object Class=MaterialGraphNode Name="MaterialGraphNode_32"
Begin Object Class=EdGraphPin Name="EdGraphPin_80464"
End Object
Begin Object Class=EdGraphPin Name="EdGraphPin_80463"
End Object
Begin Object Class=EdGraphPin Name="EdGraphPin_80462"
End Object
Begin Object Class=MaterialExpressionMin Name="MaterialExpressionMin_0"
End Object
Begin Object Name="EdGraphPin_80464"
PinName="Output"
PinFriendlyName=" "
Direction=EGPD_Output
LinkedTo(0)=EdGraphPin'MaterialGraphNode_19.EdGraphPin_80427'
End Object
Begin Object Name="EdGraphPin_80463"
PinName="B"
PinType=(PinCategory="optional")
End Object
Begin Object Name="EdGraphPin_80462"
PinName="A"
PinType=(PinCategory="optional")
LinkedTo(0)=EdGraphPin'MaterialGraphNode_31.EdGraphPin_80461'
End Object
Begin Object Name="MaterialExpressionMin_0"
A=(Expression=MaterialExpressionMax'MaterialGraphNode_31.MaterialExpressionMax_0')
ConstB=1.500000
MaterialExpressionEditorX=-720
MaterialExpressionEditorY=440
MaterialExpressionGuid=CA49C08A4FAF9056EA6A31AF711F85F3
Material=Material'/Engine/Transient.Material_0'
End Object
MaterialExpression=MaterialExpressionMin'MaterialExpressionMin_0'
Pins(0)=EdGraphPin'EdGraphPin_80462'
Pins(1)=EdGraphPin'EdGraphPin_80463'
Pins(2)=EdGraphPin'EdGraphPin_80464'
NodePosX=-720
NodePosY=440
NodeGuid=5594F97040456CFD3AB8E18C3EFF9CF9
End Object
Begin Object Class=MaterialGraphNode Name="MaterialGraphNode_33"
Begin Object Class=EdGraphPin Name="EdGraphPin_80465"
End Object
Begin Object Class=MaterialExpressionWorldPosition Name="MaterialExpressionWorldPosition_0"
End Object
Begin Object Name="EdGraphPin_80465"
PinName="Output"
PinFriendlyName=" "
Direction=EGPD_Output
LinkedTo(0)=EdGraphPin'MaterialGraphNode_23.EdGraphPin_80437'
End Object
Begin Object Name="MaterialExpressionWorldPosition_0"
MaterialExpressionEditorX=-2400
MaterialExpressionEditorY=176
MaterialExpressionGuid=33AC0B854C313B862EC0069D40543C6C
Material=Material'/Engine/Transient.Material_0'
End Object
MaterialExpression=MaterialExpressionWorldPosition'MaterialExpressionWorldPosition_0'
Pins(0)=EdGraphPin'EdGraphPin_80465'
NodePosX=-2400
NodePosY=176
NodeGuid=60C459A844B6FC45D94FF4B31064FD02
End Object
Begin Object Class=MaterialGraphNode Name="MaterialGraphNode_34"
Begin Object Class=EdGraphPin Name="EdGraphPin_80467"
End Object
Begin Object Class=EdGraphPin Name="EdGraphPin_80466"
End Object
Begin Object Class=MaterialExpressionFunctionInput Name="MaterialExpressionFunctionInput_0"
End Object
Begin Object Name="EdGraphPin_80467"
PinName="Output"
PinFriendlyName=" "
Direction=EGPD_Output
LinkedTo(0)=EdGraphPin'MaterialGraphNode_23.EdGraphPin_80438'
End Object
Begin Object Name="EdGraphPin_80466"
PinName="Preview"
PinType=(PinCategory="optional")
End Object
Begin Object Name="MaterialExpressionFunctionInput_0"
InputName="LightSourcePositon"
Id=1FD9998A4437359B9CD96DA9BB4ED611
PreviewValue=(X=0.000000,Y=1000.000000,Z=800.000000,W=1.000000)
MaterialExpressionEditorX=-2700
MaterialExpressionEditorY=300
MaterialExpressionGuid=9CDE91E543BB852CE381F4B1C26BC787
Material=Material'/Engine/Transient.Material_0'
Desc="Attach Light Source position here"
End Object
MaterialExpression=MaterialExpressionFunctionInput'MaterialExpressionFunctionInput_0'
Pins(0)=EdGraphPin'EdGraphPin_80466'
Pins(1)=EdGraphPin'EdGraphPin_80467'
NodePosX=-2700
NodePosY=300
NodeComment="Attach Light Source position here"
NodeGuid=338104064853548E07B226A4ABD06D11
End Object
Begin Object Class=MaterialGraphNode Name="MaterialGraphNode_35"
Begin Object Class=EdGraphPin Name="EdGraphPin_80468"
End Object
Begin Object Class=MaterialExpressionCameraVectorWS Name="MaterialExpressionCameraVectorWS_0"
End Object
Begin Object Name="EdGraphPin_80468"
PinName="Output"
PinFriendlyName=" "
Direction=EGPD_Output
LinkedTo(0)=EdGraphPin'MaterialGraphNode_26.EdGraphPin_80445'
End Object
Begin Object Name="MaterialExpressionCameraVectorWS_0"
MaterialExpressionEditorX=-2768
MaterialExpressionEditorY=656
MaterialExpressionGuid=7E6C9D1D48174B478F2CCDB70BEE923A
Material=Material'/Engine/Transient.Material_0'
End Object
MaterialExpression=MaterialExpressionCameraVectorWS'MaterialExpressionCameraVectorWS_0'
Pins(0)=EdGraphPin'EdGraphPin_80468'
NodePosX=-2768
NodePosY=656
NodeGuid=E15ADCF440DDE80130A7F88F7FCEBC60
End Object
Begin Object Class=MaterialGraphNode_Comment Name="MaterialGraphNode_Comment_4"
Begin Object Class=MaterialExpressionComment Name="MaterialExpressionComment_0"
End Object
Begin Object Name="MaterialExpressionComment_0"
SizeX=300
SizeY=320
Text="Light Source position in world space"
MaterialExpressionEditorX=-2720
MaterialExpressionEditorY=200
MaterialExpressionGuid=F7B35E8248FAB1C002C2FC9D02F485C5
Function=MaterialFunction'/Engine/Transient.F_Specular'
End Object
MaterialExpressionComment=MaterialExpressionComment'MaterialExpressionComment_0'
NodePosX=-2720
NodePosY=200
NodeWidth=300
NodeHeight=320
NodeComment="Light Source position in world space"
NodeGuid=33A0A9454713929DDC6337A64BD275BA
End Object
Begin Object Class=MaterialGraphNode_Comment Name="MaterialGraphNode_Comment_5"
Begin Object Class=MaterialExpressionComment Name="MaterialExpressionComment_1"
End Object
Begin Object Name="MaterialExpressionComment_1"
SizeX=380
SizeY=260
Text="Phong size (greater power is smaller phong)"
MaterialExpressionEditorX=-760
MaterialExpressionEditorY=320
MaterialExpressionGuid=9E3A2D8348BBF1FC2A883795EE938C45
Function=MaterialFunction'/Engine/Transient.F_Specular'
End Object
MaterialExpressionComment=MaterialExpressionComment'MaterialExpressionComment_1'
NodePosX=-760
NodePosY=320
NodeWidth=380
NodeHeight=260
NodeComment="Phong size (greater power is smaller phong)"
NodeGuid=87FB6DFD401D6E01AC8ECAB35A601097
End Object
Begin Object Class=MaterialGraphNode_Comment Name="MaterialGraphNode_Comment_6"
Begin Object Class=MaterialExpressionComment Name="MaterialExpressionComment_2"
End Object
Begin Object Name="MaterialExpressionComment_2"
SizeX=180
SizeY=400
Text="Only draw specular if reflected light is towards camera"
MaterialExpressionEditorX=-1160
MaterialExpressionEditorY=120
MaterialExpressionGuid=15F251BF47F74FDAB63748971DF9F53D
Function=MaterialFunction'/Engine/Transient.F_Specular'
End Object
MaterialExpressionComment=MaterialExpressionComment'MaterialExpressionComment_2'
NodePosX=-1160
NodePosY=120
NodeWidth=180
NodeHeight=400
NodeComment="Only draw specular if reflected light is towards camera"
NodeGuid=27CE19A44B0EE0DAB995E083357D9AB8
End Object
Begin Object Class=MaterialGraphNode_Comment Name="MaterialGraphNode_Comment_7"
Begin Object Class=MaterialExpressionComment Name="MaterialExpressionComment_3"
End Object
Begin Object Name="MaterialExpressionComment_3"
SizeX=200
SizeY=520
Text="Only draw specular if surface is facing the camera"
MaterialExpressionEditorX=-1540
MaterialExpressionEditorY=80
MaterialExpressionGuid=1B2E9F4C4F3D096CD7385CBE34C8841F
Function=MaterialFunction'/Engine/Transient.F_Specular'
End Object
MaterialExpressionComment=MaterialExpressionComment'MaterialExpressionComment_3'
NodePosX=-1540
NodePosY=80
NodeWidth=200
NodeHeight=520
NodeComment="Only draw specular if surface is facing the camera"
NodeGuid=1F8AAEF44FC5EA13D84D549E0456F149
End Object
Hmmm, no not really. It could be anything. Just play around with the camera, change some values of the constants. One of them should get you on the right track.