Skip to content

Commit

Permalink
Shader Graph: add main light occlusion [closes #179]
Browse files Browse the repository at this point in the history
  • Loading branch information
Delt06 committed Jan 6, 2024
1 parent 27c4a71 commit 7da13ad
Show file tree
Hide file tree
Showing 9 changed files with 145 additions and 13 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ public static void CreateLitGraph()
ToonBlockFields.SurfaceDescription.GlobalRampUV,
ToonBlockFields.SurfaceDescription.ShadowColor,
ToonBlockFields.SurfaceDescription.DiffuseOffset,
ToonBlockFields.SurfaceDescription.MainLightOcclusion,
ToonBlockFields.SurfaceDescription.ShadowReceivePositionOffset,
ToonBlockFields.SurfaceDescription.SpecularColor,
ToonBlockFields.SurfaceDescription.SpecularSizeOffset,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@ float4 PS(PackedVaryings packedInput) : SV_TARGET
lightComputationParameters.albedo = albedo;
lightComputationParameters.shadowColor = surfaceDescription.ShadowColor;
lightComputationParameters.diffuseOffset = surfaceDescription.DiffuseOffset;
lightComputationParameters.mainLightOcclusion = surfaceDescription.MainLightOcclusion;
lightComputationParameters.shadowReceivePositionOffset = surfaceDescription.ShadowReceivePositionOffset;

#if _TOON_LIGHTING_SPECULAR
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -173,8 +173,6 @@ Varyings BuildVaryings(Attributes input, out VertexDescription vertexDescription
#if _FORCE_DISABLE_FOG
fogFactor = 1.0;
#endif // _FORCE_DISABLE_FOG



#ifdef _TOON_RP_ADDITIONAL_LIGHTS_VERTEX
LightComputationParameters lightComputationParameters = (LightComputationParameters) 0;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -110,6 +110,7 @@ public override void GetActiveBlocks(ref TargetActiveBlockContext context)
context.AddBlock(ToonBlockFields.SurfaceDescription.GlobalRampUV, !OverrideRamp);
context.AddBlock(ToonBlockFields.SurfaceDescription.ShadowColor);
context.AddBlock(ToonBlockFields.SurfaceDescription.DiffuseOffset);
context.AddBlock(ToonBlockFields.SurfaceDescription.MainLightOcclusion);
context.AddBlock(ToonBlockFields.SurfaceDescription.ShadowReceivePositionOffset);
}

Expand Down Expand Up @@ -413,6 +414,7 @@ private static class DefaultBlockMasks
ToonBlockFields.SurfaceDescription.GlobalRampUV,
ToonBlockFields.SurfaceDescription.ShadowColor,
ToonBlockFields.SurfaceDescription.DiffuseOffset,
ToonBlockFields.SurfaceDescription.MainLightOcclusion,
ToonBlockFields.SurfaceDescription.ShadowReceivePositionOffset,

ToonBlockFields.SurfaceDescription.OverrideRampThreshold,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,13 @@ public struct SurfaceDescription
"SURFACEDESCRIPTION_DIFFUSEOFFSET",
new FloatControl(0.0f), ShaderStage.Fragment
);

public static readonly BlockFieldDescriptor MainLightOcclusion = new(Name, "MainLightOcclusion",
"Main Light Occlusion",
"SURFACEDESCRIPTION_MAINLIGHTOCCLUSION",
new FloatControl(1.0f), ShaderStage.Fragment
);

public static readonly BlockFieldDescriptor ShadowReceivePositionOffset = new(Name,
"ShadowReceivePositionOffset",
"Shadow Receive Position Offset",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
void GetMainLightShadowAttenuation_float(
const float3 positionWs,
const float3 shadowReceivePositionOffset,
const float occlusion,
out float shadowAttenuation
)
{
Expand All @@ -34,7 +35,7 @@ void GetMainLightShadowAttenuation_float(

LightComputationParameters parameters = (LightComputationParameters) 0;
parameters.positionWs = positionWs;
shadowAttenuation = ApplyShadowRampAndPattern(parameters, light.shadowAttenuation);
shadowAttenuation = ApplyShadowRampAndPattern(parameters, light.shadowAttenuation * occlusion);

#else // !_TOON_RP_ANY_SHADOWS

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,9 @@
},
{
"m_Id": "7f06ae553af6490eb96cf2ca255010ae"
},
{
"m_Id": "d417e61b56474840a87a7745e3c4975e"
}
],
"m_Keywords": [],
Expand All @@ -29,6 +32,9 @@
},
{
"m_Id": "0d4ba147c7f443089ae2cd2598b301c4"
},
{
"m_Id": "61872d375f664550923019390c59af18"
}
],
"m_GroupDatas": [],
Expand Down Expand Up @@ -62,6 +68,20 @@
"m_SlotId": 1
}
},
{
"m_OutputSlot": {
"m_Node": {
"m_Id": "61872d375f664550923019390c59af18"
},
"m_SlotId": 0
},
"m_InputSlot": {
"m_Node": {
"m_Id": "af9c250353a24ab5a901970e4607b021"
},
"m_SlotId": 3
}
},
{
"m_OutputSlot": {
"m_Node": {
Expand Down Expand Up @@ -134,10 +154,10 @@
"m_Expanded": true,
"m_Position": {
"serializedVersion": "2",
"x": -739.9999389648438,
"y": 0.000002384185791015625,
"width": 136.0,
"height": 34.0
"x": -698.0,
"y": -0.00001049041748046875,
"width": 136.00006103515626,
"height": 34.0000114440918
}
},
"m_Slots": [
Expand Down Expand Up @@ -170,10 +190,10 @@
"m_Expanded": true,
"m_Position": {
"serializedVersion": "2",
"x": -839.0,
"y": 97.00000762939453,
"width": 235.00006103515626,
"height": 33.999977111816409
"x": -805.9999389648438,
"y": 60.0000114440918,
"width": 235.0,
"height": 33.99996566772461
}
},
"m_Slots": [
Expand Down Expand Up @@ -205,10 +225,28 @@
},
{
"m_Id": "7f06ae553af6490eb96cf2ca255010ae"
},
{
"m_Id": "d417e61b56474840a87a7745e3c4975e"
}
]
}

{
"m_SGVersion": 0,
"m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot",
"m_ObjectId": "1c0fd80c5a58409ea392436ae5a7335b",
"m_Id": 0,
"m_DisplayName": "Occlusion",
"m_SlotType": 1,
"m_Hidden": false,
"m_ShaderOutputName": "Out",
"m_StageCapability": 3,
"m_Value": 0.0,
"m_DefaultValue": 0.0,
"m_Labels": []
}

{
"m_SGVersion": 0,
"m_Type": "UnityEditor.ShaderGraph.Vector3MaterialSlot",
Expand All @@ -232,6 +270,42 @@
"m_Labels": []
}

{
"m_SGVersion": 0,
"m_Type": "UnityEditor.ShaderGraph.PropertyNode",
"m_ObjectId": "61872d375f664550923019390c59af18",
"m_Group": {
"m_Id": ""
},
"m_Name": "Property",
"m_DrawState": {
"m_Expanded": true,
"m_Position": {
"serializedVersion": "2",
"x": -698.0,
"y": 119.99998474121094,
"width": 127.00006103515625,
"height": 34.00001525878906
}
},
"m_Slots": [
{
"m_Id": "1c0fd80c5a58409ea392436ae5a7335b"
}
],
"synonyms": [],
"m_Precision": 0,
"m_PreviewExpanded": true,
"m_DismissedVersion": 0,
"m_PreviewMode": 0,
"m_CustomColors": {
"m_SerializableColors": []
},
"m_Property": {
"m_Id": "d417e61b56474840a87a7745e3c4975e"
}
}

{
"m_SGVersion": 0,
"m_Type": "UnityEditor.ShaderGraph.Vector3MaterialSlot",
Expand Down Expand Up @@ -385,6 +459,9 @@
{
"m_Id": "e1544fb9c25e43d1af59028f50cf9c0d"
},
{
"m_Id": "eea609025d73437e8a1e91a85ae64516"
},
{
"m_Id": "01f6e374008f4c3f8b5575a8b2e4e634"
}
Expand Down Expand Up @@ -429,6 +506,34 @@
"m_Labels": []
}

{
"m_SGVersion": 1,
"m_Type": "UnityEditor.ShaderGraph.Internal.Vector1ShaderProperty",
"m_ObjectId": "d417e61b56474840a87a7745e3c4975e",
"m_Guid": {
"m_GuidSerialized": "6e904b14-0155-414c-b688-f1ee625b6bca"
},
"m_Name": "Occlusion",
"m_DefaultRefNameVersion": 1,
"m_RefNameGeneratedByDisplayName": "Occlusion",
"m_DefaultReferenceName": "_Occlusion",
"m_OverrideReferenceName": "",
"m_GeneratePropertyBlock": true,
"m_UseCustomSlotLabel": false,
"m_CustomSlotLabel": "",
"m_DismissedVersion": 0,
"m_Precision": 0,
"overrideHLSLDeclaration": false,
"hlslDeclarationOverride": 0,
"m_Hidden": false,
"m_Value": 1.0,
"m_FloatType": 0,
"m_RangeValues": {
"x": 0.0,
"y": 1.0
}
}

{
"m_SGVersion": 0,
"m_Type": "UnityEditor.ShaderGraph.Vector3MaterialSlot",
Expand All @@ -452,3 +557,18 @@
"m_Labels": []
}

{
"m_SGVersion": 0,
"m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot",
"m_ObjectId": "eea609025d73437e8a1e91a85ae64516",
"m_Id": 3,
"m_DisplayName": "occlusion",
"m_SlotType": 0,
"m_Hidden": false,
"m_ShaderOutputName": "occlusion",
"m_StageCapability": 3,
"m_Value": 0.0,
"m_DefaultValue": 0.0,
"m_Labels": []
}

Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ struct LightComputationParameters
float4 albedo;
float4 shadowColor;
float diffuseOffset;
float mainLightOcclusion;
float3 shadowReceivePositionOffset;
float3 specularColor;
float specularSizeOffset;
Expand Down Expand Up @@ -101,11 +102,11 @@ float ApplyShadowRampAndPattern(const LightComputationParameters parameters, flo
float GetShadowAttenuation(const LightComputationParameters parameters, const Light light)
{
#if defined(_TOON_RP_BLOB_SHADOWS) && !defined(_RECEIVE_BLOB_SHADOWS)
return 1.0f;
return parameters.mainLightOcclusion == 1.0f ? 1.0f : ApplyShadowRampAndPattern(parameters, parameters.mainLightOcclusion);
#endif // _TOON_RP_BLOB_SHADOWS && _RECEIVE_BLOB_SHADOWS

#if defined(_TOON_RP_ANY_SHADOWS)
return ApplyShadowRampAndPattern(parameters, light.shadowAttenuation);
return ApplyShadowRampAndPattern(parameters, light.shadowAttenuation * parameters.mainLightOcclusion);
#else // !_TOON_RP_ANY_SHADOWS
return 1.0f;
#endif // _TOON_RP_ANY_SHADOWS
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ float3 ComputeLitOutputColor(const v2f IN, const float4 albedo)
lightComputationParameters.globalRampUv = IN.uv;
lightComputationParameters.albedo = albedo;
lightComputationParameters.shadowColor = _ShadowColor;
lightComputationParameters.mainLightOcclusion = 1;
#ifdef _TOON_LIGHTING_SPECULAR
lightComputationParameters.specularSizeOffset = _SpecularSizeOffset;
lightComputationParameters.specularColor = _SpecularColor;
Expand Down

0 comments on commit 7da13ad

Please sign in to comment.