123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124 |
- #ifndef SPRITE_STANDARD_PASS_URP_INCLUDED
- #define SPRITE_STANDARD_PASS_URP_INCLUDED
- #include "Packages/com.unity.render-pipelines.universal/Shaders/2D/Include/LightingUtility.hlsl"
- #include "../Include/SpineCoreShaders/ShaderShared.cginc"
- #include "../Include/SpineCoreShaders/SpriteLighting.cginc"
- #if USE_SHAPE_LIGHT_TYPE_0
- SHAPE_LIGHT(0)
- #endif
- #if USE_SHAPE_LIGHT_TYPE_1
- SHAPE_LIGHT(1)
- #endif
- #if USE_SHAPE_LIGHT_TYPE_2
- SHAPE_LIGHT(2)
- #endif
- #if USE_SHAPE_LIGHT_TYPE_3
- SHAPE_LIGHT(3)
- #endif
- TEXTURE2D(_MaskTex);
- SAMPLER(sampler_MaskTex);
- struct VertexOutputSpriteURP2D
- {
- float4 pos : SV_POSITION;
- half4 vertexColor : COLOR;
- float3 texcoord : TEXCOORD0;
- float2 lightingUV : TEXCOORD1;
- half3 viewDirectionWS : TEXCOORD2;
- #if defined(_NORMALMAP)
- half4 normalWorld : TEXCOORD4;
- half4 tangentWorld : TEXCOORD5;
- half4 binormalWorld : TEXCOORD6;
- #else
- half3 normalWorld : TEXCOORD4;
- #endif
- #if defined(_RIM_LIGHTING)
- float4 positionWS : TEXCOORD8;
- #endif
- };
- VertexOutputSpriteURP2D CombinedShapeLightVertex(VertexInput input)
- {
- VertexOutputSpriteURP2D output = (VertexOutputSpriteURP2D)0;
- UNITY_SETUP_INSTANCE_ID(input);
- output.pos = calculateLocalPos(input.vertex);
- float4 clipVertex = output.pos / output.pos.w;
- output.lightingUV = ComputeScreenPos(clipVertex).xy;
- output.vertexColor = calculateVertexColor(input.color);
- output.texcoord = float3(calculateTextureCoord(input.texcoord), 0);
- float3 positionWS = TransformObjectToWorld(input.vertex.xyz);
- float backFaceSign = 1;
- #if defined(FIXED_NORMALS_BACKFACE_RENDERING)
- backFaceSign = calculateBackfacingSign(positionWS.xyz);
- #endif
- output.viewDirectionWS = GetCameraPositionWS() - positionWS;
- #if defined(_RIM_LIGHTING)
- output.positionWS = float4(positionWS, 1);
- #endif
- half3 normalWS = calculateSpriteWorldNormal(input, -backFaceSign);
- output.normalWorld.xyz = normalWS;
- #if defined(_RIM_LIGHTING)
- #if defined(_NORMALMAP)
- output.tangentWorld.xyz = calculateWorldTangent(input.tangent);
- output.binormalWorld.xyz = calculateSpriteWorldBinormal(input, output.normalWorld.xyz, output.tangentWorld.xyz, backFaceSign);
- #endif
- #endif
- return output;
- }
- #include "Packages/com.unity.render-pipelines.universal/Shaders/2D/Include/CombinedShapeLightShared.hlsl"
- half4 CombinedShapeLightFragment(VertexOutputSpriteURP2D input) : SV_Target
- {
- fixed4 texureColor = calculateTexturePixel(input.texcoord.xy);
- RETURN_UNLIT_IF_ADDITIVE_SLOT(texureColor, input.vertexColor) // shall be called before ALPHA_CLIP
- ALPHA_CLIP(texureColor, input.vertexColor)
- half4 main = texureColor * input.vertexColor;
- half4 mask = SAMPLE_TEXTURE2D(_MaskTex, sampler_MaskTex, input.texcoord.xy);
- #if UNITY_VERSION < 202120
- half4 pixel = half4(CombinedShapeLightShared(half4(main.rgb, 1), mask, input.lightingUV).rgb, main.a);
- #else
- SurfaceData2D surfaceData;
- InputData2D inputData;
- surfaceData.albedo = main.rgb;
- surfaceData.alpha = 1;
- surfaceData.mask = mask;
- inputData.uv = input.texcoord;
- inputData.lightingUV = input.lightingUV;
- half4 pixel = half4(CombinedShapeLightShared(surfaceData, inputData).rgb, main.a);
- #endif
- #if defined(_RIM_LIGHTING)
- #if defined(_NORMALMAP)
- half3 normalWS = calculateNormalFromBumpMap(input.texcoord.xy, input.tangentWorld.xyz, input.binormalWorld.xyz, input.normalWorld.xyz);
- #else
- half3 normalWS = input.normalWorld.xyz;
- #endif
- pixel.rgb = applyRimLighting(input.positionWS.xyz, normalWS, pixel);
- #endif
- APPLY_EMISSION(pixel.rgb, input.texcoord.xy)
- pixel = prepareLitPixelForOutput(pixel, texureColor.a, input.vertexColor.a);
- COLORISE(pixel)
- return pixel;
- }
- #endif
|