forked from EsotericSoftware/spine-runtimes
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[unity] URP shaders: Fixed DoF effect ignoring written depth when Dec…
…al feature is enabled. Closes EsotericSoftware#2283.
- Loading branch information
1 parent
80f5973
commit 5eca100
Showing
7 changed files
with
248 additions
and
2 deletions.
There are no files selected for viewing
74 changes: 74 additions & 0 deletions
74
...es/com.esotericsoftware.spine.urp-shaders/Shaders/Include/Spine-DepthNormalsPass-URP.hlsl
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,74 @@ | ||
#ifndef SPRITES_DEPTH_NORMALS_PASS_URP_INCLUDED | ||
#define SPRITES_DEPTH_NORMALS_PASS_URP_INCLUDED | ||
|
||
#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/CommonMaterial.hlsl" | ||
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl" | ||
|
||
struct AttributesSpine | ||
{ | ||
float4 positionOS : POSITION; | ||
float3 normalOS : NORMAL; | ||
float4 vertexColor : COLOR; | ||
float2 texcoord : TEXCOORD0; | ||
UNITY_VERTEX_INPUT_INSTANCE_ID | ||
}; | ||
|
||
struct VaryingsSpine | ||
{ | ||
float3 normalWS : NORMAL; | ||
float4 positionCS : SV_POSITION; | ||
float4 texcoordAndAlpha: TEXCOORD0; | ||
UNITY_VERTEX_OUTPUT_STEREO | ||
}; | ||
|
||
VaryingsSpine DepthNormalsVertex(AttributesSpine input) | ||
{ | ||
VaryingsSpine output = (VaryingsSpine)0; | ||
UNITY_SETUP_INSTANCE_ID(input); | ||
UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(output); | ||
|
||
half3 fixedNormal = half3(0, 0, -1); | ||
half3 normalWS = normalize(mul((float3x3)unity_ObjectToWorld, fixedNormal)); | ||
|
||
#ifdef _DOUBLE_SIDED_LIGHTING | ||
// unfortunately we have to compute the sign here in the vertex shader | ||
// instead of using VFACE in fragment shader stage. | ||
half3 viewDirWS = UNITY_MATRIX_V[2].xyz; | ||
half faceSign = sign(dot(viewDirWS, normalWS)); | ||
normalWS *= faceSign; | ||
#endif | ||
output.normalWS = normalWS; | ||
|
||
output.texcoordAndAlpha.xyz = float3(TRANSFORM_TEX(input.texcoord, _MainTex).xy, 0); | ||
output.texcoordAndAlpha.a = input.vertexColor.a; | ||
output.positionCS = TransformObjectToHClip(input.positionOS.xyz); | ||
return output; | ||
} | ||
|
||
void DepthNormalsFragment(VaryingsSpine input, | ||
out half4 outNormalWS : SV_Target0 | ||
#ifdef _WRITE_RENDERING_LAYERS | ||
, out float4 outRenderingLayers : SV_Target1 | ||
#endif | ||
) | ||
{ | ||
fixed4 texureColor = tex2D(_MainTex, input.texcoordAndAlpha.xy); | ||
clip(texureColor.a * input.texcoordAndAlpha.a - _Cutoff); | ||
|
||
float3 normalWS = input.normalWS; | ||
#if defined(_GBUFFER_NORMALS_OCT) | ||
float2 octNormalWS = PackNormalOctQuadEncode(normalWS); // values between [-1, +1], must use fp32 on some platforms. | ||
float2 remappedOctNormalWS = saturate(octNormalWS * 0.5 + 0.5); // values between [ 0, 1] | ||
half3 packedNormalWS = PackFloat2To888(remappedOctNormalWS); // values between [ 0, 1] | ||
outNormalWS = half4(packedNormalWS, 0.0); | ||
#else | ||
outNormalWS = half4(normalWS, 0.0); | ||
#endif | ||
|
||
#ifdef USE_WRITE_RENDERING_LAYERS | ||
uint renderingLayers = GetMeshRenderingLayerBackwardsCompatible(); | ||
outRenderingLayers = float4(EncodeMeshRenderingLayer(renderingLayers), 0, 0, 0); | ||
#endif | ||
} | ||
|
||
#endif |
7 changes: 7 additions & 0 deletions
7
...m.esotericsoftware.spine.urp-shaders/Shaders/Include/Spine-DepthNormalsPass-URP.hlsl.meta
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
88 changes: 88 additions & 0 deletions
88
...esotericsoftware.spine.urp-shaders/Shaders/Include/Spine-Sprite-DepthNormalsPass-URP.hlsl
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,88 @@ | ||
#ifndef SPRITES_DEPTH_NORMALS_PASS_URP_INCLUDED | ||
#define SPRITES_DEPTH_NORMALS_PASS_URP_INCLUDED | ||
|
||
#include "Include/Spine-Sprite-Common-URP.hlsl" | ||
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl" | ||
#include "SpineCoreShaders/SpriteLighting.cginc" | ||
#include "SpineCoreShaders/Spine-Common.cginc" | ||
#include "Spine-Common-URP.hlsl" | ||
|
||
//#include "Include/Spine-Sprite-Common-URP.hlsl" | ||
//#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl" | ||
|
||
struct VaryingsSprite | ||
{ | ||
float4 pos : SV_POSITION; | ||
fixed4 vertexColor : COLOR; | ||
float3 texcoord : TEXCOORD0; | ||
|
||
#if defined(_NORMALMAP) | ||
half4 normalWorld : TEXCOORD4; | ||
half4 tangentWorld : TEXCOORD5; | ||
half4 binormalWorld : TEXCOORD6; | ||
#else | ||
half3 normalWorld : TEXCOORD4; | ||
#endif | ||
UNITY_VERTEX_INPUT_INSTANCE_ID | ||
UNITY_VERTEX_OUTPUT_STEREO | ||
}; | ||
|
||
VaryingsSprite DepthNormalsVertexSprite(VertexInput input) | ||
{ | ||
VaryingsSprite output = (VaryingsSprite)0; | ||
UNITY_SETUP_INSTANCE_ID(input); | ||
UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(output); | ||
|
||
output.pos = calculateLocalPos(input.vertex); | ||
output.vertexColor = calculateVertexColor(input.color); | ||
output.texcoord = float3(calculateTextureCoord(input.texcoord), 0); | ||
|
||
float backFaceSign = 1; | ||
#if defined(FIXED_NORMALS_BACKFACE_RENDERING) | ||
backFaceSign = calculateBackfacingSign(positionWS.xyz); | ||
#endif | ||
|
||
half3 normalWS = calculateSpriteWorldNormal(input, -backFaceSign); | ||
output.normalWorld.xyz = normalWS; | ||
#if defined(_NORMALMAP) | ||
output.tangentWorld.xyz = calculateWorldTangent(input.tangent); | ||
output.binormalWorld.xyz = calculateSpriteWorldBinormal(input, output.normalWorld.xyz, output.tangentWorld.xyz, backFaceSign); | ||
#endif | ||
|
||
return output; | ||
} | ||
|
||
void DepthNormalsFragmentSprite(VaryingsSprite input, | ||
out half4 outNormalWS : SV_Target0 | ||
#ifdef _WRITE_RENDERING_LAYERS | ||
, out float4 outRenderingLayers : SV_Target1 | ||
#endif | ||
) | ||
{ | ||
UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(input); | ||
|
||
fixed4 texureColor = calculateTexturePixel(input.texcoord.xy); | ||
ALPHA_CLIP(texureColor, input.vertexColor) | ||
|
||
#if defined(PER_PIXEL_LIGHTING) && defined(_NORMALMAP) | ||
half3 normalWS = calculateNormalFromBumpMap(input.texcoord.xy, input.tangentWorld.xyz, input.binormalWorld.xyz, input.normalWorld.xyz); | ||
#else | ||
half3 normalWS = input.normalWorld.xyz; | ||
#endif | ||
|
||
#if defined(_GBUFFER_NORMALS_OCT) | ||
float2 octNormalWS = PackNormalOctQuadEncode(normalWS); // values between [-1, +1], must use fp32 on some platforms. | ||
float2 remappedOctNormalWS = saturate(octNormalWS * 0.5 + 0.5); // values between [ 0, 1] | ||
half3 packedNormalWS = PackFloat2To888(remappedOctNormalWS); // values between [ 0, 1] | ||
outNormalWS = half4(packedNormalWS, 0.0); | ||
#else | ||
outNormalWS = half4(normalWS, 0.0); | ||
#endif | ||
|
||
#ifdef USE_WRITE_RENDERING_LAYERS | ||
uint renderingLayers = GetMeshRenderingLayerBackwardsCompatible(); | ||
outRenderingLayers = float4(EncodeMeshRenderingLayer(renderingLayers), 0, 0, 0); | ||
#endif | ||
} | ||
|
||
#endif |
7 changes: 7 additions & 0 deletions
7
...ricsoftware.spine.urp-shaders/Shaders/Include/Spine-Sprite-DepthNormalsPass-URP.hlsl.meta
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters