From 919b7badcb380e597ff0274dfb29c9e2fbc2bf81 Mon Sep 17 00:00:00 2001 From: Harald Csaszar Date: Tue, 10 Mar 2020 14:10:31 +0100 Subject: [PATCH] [unity] Added missing `Fixed Normal Space` option `World-Space` to all Sprite shaders (including URP and LWRP packages). Closes #1638. --- CHANGELOG.md | 1 + .../Editor/Shaders/SpineSpriteShaderGUI.cs | 6 +++- .../Sprite/CGIncludes/SpriteLighting.cginc | 32 +++++++++++-------- .../Shaders/Sprite/SpritesPixelLit.shader | 4 +-- .../Shaders/Sprite/SpritesVertexLit.shader | 2 +- .../Shaders/Spine-Sprite-LW.shader | 14 ++++---- .../Shaders/Spine-Sprite-URP.shader | 2 +- 7 files changed, 36 insertions(+), 25 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e2ce4d78b..ef091dbdf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -216,6 +216,7 @@ * **Example:** You can find an example scene in the package under `com.esotericsoftware.spine.urp-shaders-3.8/Examples/URP Shaders.unity` that demonstrates usage of the URP shaders. * Spine Preferences now provide an **`Atlas Texture Settings`** parameter for applying customizable texture import settings at all newly imported Spine atlas textures. When exporting atlas textures from Spine with `Premultiply alpha` enabled (the default), you can leave it at `PMATexturePreset`. If you have disabled `Premultiply alpha`, set it to the included `StraightAlphaTexturePreset` asset. You can also create your own `TextureImporter` `Preset` asset and assign it here (include `PMA` or `Straight` in the name). In Unity versions before 2018.3 you can use `Texture2D` template assets instead of the newer `Preset` assets. Materials created for imported textures will also have the `Straight Alpha Texture` parameter configured accordingly. + * All `Sprite` shaders (including URP and LWRP extension packages) now provide an additional `Fixed Normal Space` option `World-Space`. PReviously options were limited to `View-Space` and `Model-Space`. * **Changes of default values** * `SkeletonMecanim`'s `Layer Mix Mode` now defaults to `MixMode.MixNext` instead of `MixMode.MixAlways`. diff --git a/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Shaders/SpineSpriteShaderGUI.cs b/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Shaders/SpineSpriteShaderGUI.cs index bc37a71bf..679500e3e 100644 --- a/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Shaders/SpineSpriteShaderGUI.cs +++ b/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Shaders/SpineSpriteShaderGUI.cs @@ -78,6 +78,7 @@ public class SpineSpriteShaderGUI : SpineShaderWithOutlineGUI { MeshNormals = -1, FixedNormalsViewSpace = 0, FixedNormalsModelSpace = 1, + FixedNormalsWorldSpace = 2 }; MaterialProperty _mainTexture = null; @@ -162,7 +163,7 @@ public class SpineSpriteShaderGUI : SpineShaderWithOutlineGUI { static GUIContent _pixelSnapText = new GUIContent("Pixel Snap"); //static GUIContent _customRenderTypetagsText = new GUIContent("Use Custom RenderType tags"); static GUIContent _fixedNormalSpaceText = new GUIContent("Fixed Normal Space"); - static GUIContent[] _fixedNormalSpaceOptions = { new GUIContent("View-Space"), new GUIContent("Model-Space") }; + static GUIContent[] _fixedNormalSpaceOptions = { new GUIContent("View-Space"), new GUIContent("Model-Space"), new GUIContent("World-Space") }; static GUIContent _rimLightingToggleText = new GUIContent("Rim Lighting", "Enable Rim Lighting."); static GUIContent _rimColorText = new GUIContent("Rim Color"); static GUIContent _rimPowerText = new GUIContent("Rim Power"); @@ -1084,6 +1085,8 @@ public class SpineSpriteShaderGUI : SpineShaderWithOutlineGUI { static eNormalsMode GetMaterialNormalsMode (Material material) { if (material.IsKeywordEnabled("_FIXED_NORMALS_VIEWSPACE") || material.IsKeywordEnabled("_FIXED_NORMALS_VIEWSPACE_BACKFACE")) return eNormalsMode.FixedNormalsViewSpace; + if (material.IsKeywordEnabled("_FIXED_NORMALS_WORLDSPACE")) + return eNormalsMode.FixedNormalsWorldSpace; if (material.IsKeywordEnabled("_FIXED_NORMALS_MODELSPACE") || material.IsKeywordEnabled("_FIXED_NORMALS_MODELSPACE_BACKFACE")) return eNormalsMode.FixedNormalsModelSpace; @@ -1101,6 +1104,7 @@ public class SpineSpriteShaderGUI : SpineShaderWithOutlineGUI { static void SetNormalsMode (Material material, eNormalsMode normalsMode, bool allowBackFaceRendering) { SetKeyword(material, "_FIXED_NORMALS_VIEWSPACE", normalsMode == eNormalsMode.FixedNormalsViewSpace && !allowBackFaceRendering); SetKeyword(material, "_FIXED_NORMALS_VIEWSPACE_BACKFACE", normalsMode == eNormalsMode.FixedNormalsViewSpace && allowBackFaceRendering); + SetKeyword(material, "_FIXED_NORMALS_WORLDSPACE", normalsMode == eNormalsMode.FixedNormalsWorldSpace); SetKeyword(material, "_FIXED_NORMALS_MODELSPACE", normalsMode == eNormalsMode.FixedNormalsModelSpace && !allowBackFaceRendering); SetKeyword(material, "_FIXED_NORMALS_MODELSPACE_BACKFACE", normalsMode == eNormalsMode.FixedNormalsModelSpace && allowBackFaceRendering); } diff --git a/spine-unity/Assets/Spine/Runtime/spine-unity/Shaders/Sprite/CGIncludes/SpriteLighting.cginc b/spine-unity/Assets/Spine/Runtime/spine-unity/Shaders/Sprite/CGIncludes/SpriteLighting.cginc index 018ca93cd..3d8824935 100644 --- a/spine-unity/Assets/Spine/Runtime/spine-unity/Shaders/Sprite/CGIncludes/SpriteLighting.cginc +++ b/spine-unity/Assets/Spine/Runtime/spine-unity/Shaders/Sprite/CGIncludes/SpriteLighting.cginc @@ -2,7 +2,7 @@ #define SPRITE_LIGHTING_INCLUDED //Check for using mesh normals -#if !defined(_FIXED_NORMALS_VIEWSPACE) && !defined(_FIXED_NORMALS_VIEWSPACE_BACKFACE) && !defined(_FIXED_NORMALS_MODELSPACE) && !defined(_FIXED_NORMALS_MODELSPACE_BACKFACE) +#if !defined(_FIXED_NORMALS_VIEWSPACE) && !defined(_FIXED_NORMALS_VIEWSPACE_BACKFACE) && !defined(_FIXED_NORMALS_MODELSPACE) && !defined(_FIXED_NORMALS_MODELSPACE_BACKFACE) && !defined(_FIXED_NORMALS_WORLDSPACE) #define MESH_NORMALS #endif @@ -53,9 +53,9 @@ inline float calculateBackfacingSign(float3 worldPos) inline half3 calculateSpriteWorldNormal(VertexInput vertex, float backFaceSign) { #if defined(MESH_NORMALS) - + return calculateWorldNormal(vertex.normal); - + #else // !MESH_NORMALS float3 normal = getFixedNormal(); @@ -65,24 +65,27 @@ inline half3 calculateSpriteWorldNormal(VertexInput vertex, float backFaceSign) //Rotate fixed normal by inverse view matrix to convert the fixed normal into world space float3x3 invView = transpose((float3x3)UNITY_MATRIX_V); return normalize(mul(invView, normal)); +#elif defined (_FIXED_NORMALS_WORLDSPACE) + //World space fixed normal + return normal; #else - //Model space fixed normal. -#if defined(FIXED_NORMALS_BACKFACE_RENDERING) + //Model space fixed normal. +#if defined(FIXED_NORMALS_BACKFACE_RENDERING) //If back face rendering is enabled and the sprite is facing away from the camera (ie we're rendering the backface) then need to flip the normal normal *= backFaceSign; #endif return calculateWorldNormal(normal); #endif - + #endif // !MESH_NORMALS } inline half3 calculateSpriteViewNormal(VertexInput vertex, float backFaceSign) { #if defined(MESH_NORMALS) - + return normalize(mul((float3x3)UNITY_MATRIX_IT_MV, vertex.normal)); - + #else // !MESH_NORMALS float3 normal = getFixedNormal(); @@ -90,15 +93,18 @@ inline half3 calculateSpriteViewNormal(VertexInput vertex, float backFaceSign) #if defined(_FIXED_NORMALS_VIEWSPACE) || defined(_FIXED_NORMALS_VIEWSPACE_BACKFACE) //View space fixed normal return normal; +#elif defined (_FIXED_NORMALS_WORLDSPACE) + //World space fixed normal + return normalize(mul((float3x3)UNITY_MATRIX_V, normal)); #else //Model space fixed normal -#if defined(FIXED_NORMALS_BACKFACE_RENDERING) +#if defined(FIXED_NORMALS_BACKFACE_RENDERING) //If back face rendering is enabled and the sprite is facing away from the camera (ie we're rendering the backface) then need to flip the normal normal *= backFaceSign; #endif return normalize(mul((float3x3)UNITY_MATRIX_IT_MV, normal)); #endif - + #endif // !MESH_NORMALS } @@ -166,11 +172,11 @@ inline fixed3 applyRimLighting(fixed3 posWorld, fixed3 normalWorld, fixed4 pixel float invDot = 1.0 - saturate(dot(normalWorld, viewDir)); float rimPower = pow(invDot, _RimPower); float rim = saturate(rimPower * _RimColor.a); - + #if defined(_DIFFUSE_RAMP) rim = calculateDiffuseRamp(rim).r; #endif - + return lerp(pixel.rgb, _RimColor.xyz * pixel.a, rim); } @@ -197,4 +203,4 @@ uniform float _EmissionPower; #endif //!_EMISSION -#endif // SPRITE_LIGHTING_INCLUDED \ No newline at end of file +#endif // SPRITE_LIGHTING_INCLUDED diff --git a/spine-unity/Assets/Spine/Runtime/spine-unity/Shaders/Sprite/SpritesPixelLit.shader b/spine-unity/Assets/Spine/Runtime/spine-unity/Shaders/Sprite/SpritesPixelLit.shader index ac15682d0..acd4e5e33 100644 --- a/spine-unity/Assets/Spine/Runtime/spine-unity/Shaders/Sprite/SpritesPixelLit.shader +++ b/spine-unity/Assets/Spine/Runtime/spine-unity/Shaders/Sprite/SpritesPixelLit.shader @@ -81,7 +81,7 @@ Shader "Spine/Sprite/Pixel Lit" #pragma target 3.0 #pragma shader_feature _ _ALPHABLEND_ON _ALPHAPREMULTIPLY_ON _ADDITIVEBLEND _ADDITIVEBLEND_SOFT _MULTIPLYBLEND _MULTIPLYBLEND_X2 - #pragma shader_feature _ _FIXED_NORMALS_VIEWSPACE _FIXED_NORMALS_VIEWSPACE_BACKFACE _FIXED_NORMALS_MODELSPACE _FIXED_NORMALS_MODELSPACE_BACKFACE + #pragma shader_feature _ _FIXED_NORMALS_VIEWSPACE _FIXED_NORMALS_VIEWSPACE_BACKFACE _FIXED_NORMALS_MODELSPACE _FIXED_NORMALS_MODELSPACE_BACKFACE _FIXED_NORMALS_WORLDSPACE #pragma shader_feature _ _SPECULAR _SPECULAR_GLOSSMAP #pragma shader_feature _NORMALMAP #pragma shader_feature _ALPHA_CLIP @@ -118,7 +118,7 @@ Shader "Spine/Sprite/Pixel Lit" #pragma target 3.0 #pragma shader_feature _ _ALPHABLEND_ON _ALPHAPREMULTIPLY_ON _ADDITIVEBLEND _ADDITIVEBLEND_SOFT _MULTIPLYBLEND _MULTIPLYBLEND_X2 - #pragma shader_feature _ _FIXED_NORMALS_VIEWSPACE _FIXED_NORMALS_VIEWSPACE_BACKFACE _FIXED_NORMALS_MODELSPACE _FIXED_NORMALS_MODELSPACE_BACKFACE + #pragma shader_feature _ _FIXED_NORMALS_VIEWSPACE _FIXED_NORMALS_VIEWSPACE_BACKFACE _FIXED_NORMALS_MODELSPACE _FIXED_NORMALS_MODELSPACE_BACKFACE _FIXED_NORMALS_WORLDSPACE #pragma shader_feature _ _SPECULAR _SPECULAR_GLOSSMAP #pragma shader_feature _NORMALMAP #pragma shader_feature _ALPHA_CLIP diff --git a/spine-unity/Assets/Spine/Runtime/spine-unity/Shaders/Sprite/SpritesVertexLit.shader b/spine-unity/Assets/Spine/Runtime/spine-unity/Shaders/Sprite/SpritesVertexLit.shader index c567e4af7..b58ad42a5 100644 --- a/spine-unity/Assets/Spine/Runtime/spine-unity/Shaders/Sprite/SpritesVertexLit.shader +++ b/spine-unity/Assets/Spine/Runtime/spine-unity/Shaders/Sprite/SpritesVertexLit.shader @@ -82,7 +82,7 @@ Shader "Spine/Sprite/Vertex Lit" #pragma target 3.0 #pragma shader_feature _ _ALPHABLEND_ON _ALPHAPREMULTIPLY_ON _ADDITIVEBLEND _ADDITIVEBLEND_SOFT _MULTIPLYBLEND _MULTIPLYBLEND_X2 - #pragma shader_feature _ _FIXED_NORMALS_VIEWSPACE _FIXED_NORMALS_VIEWSPACE_BACKFACE _FIXED_NORMALS_MODELSPACE _FIXED_NORMALS_MODELSPACE_BACKFACE + #pragma shader_feature _ _FIXED_NORMALS_VIEWSPACE _FIXED_NORMALS_VIEWSPACE_BACKFACE _FIXED_NORMALS_MODELSPACE _FIXED_NORMALS_MODELSPACE_BACKFACE _FIXED_NORMALS_WORLDSPACE #pragma shader_feature _ _SPECULAR _SPECULAR_GLOSSMAP #pragma shader_feature _NORMALMAP #pragma shader_feature _ALPHA_CLIP diff --git a/spine-unity/Modules/com.esotericsoftware.spine.lwrp-shaders/Shaders/Spine-Sprite-LW.shader b/spine-unity/Modules/com.esotericsoftware.spine.lwrp-shaders/Shaders/Spine-Sprite-LW.shader index f85306bef..aca16c403 100644 --- a/spine-unity/Modules/com.esotericsoftware.spine.lwrp-shaders/Shaders/Spine-Sprite-LW.shader +++ b/spine-unity/Modules/com.esotericsoftware.spine.lwrp-shaders/Shaders/Spine-Sprite-LW.shader @@ -9,7 +9,7 @@ Shader "Lightweight Render Pipeline/Spine/Sprite" _BumpMap("Normal Map", 2D) = "bump" {} [MaterialToggle] PixelSnap("Pixel snap", Float) = 0 - [PerRendererData] _AlphaTex("External Alpha", 2D) = "white" {} + [PerRendererData] _AlphaTex("External Alpha", 2D) = "white" {} [PerRendererData] _EnableExternalAlpha("Enable External Alpha", Float) = 0 _EmissionColor("Color", Color) = (0,0,0,0) @@ -83,7 +83,7 @@ Shader "Lightweight Render Pipeline/Spine/Sprite" // ------------------------------------- // Material Keywords #pragma shader_feature _ _ALPHABLEND_ON _ALPHAPREMULTIPLY_ON _ADDITIVEBLEND _ADDITIVEBLEND_SOFT _MULTIPLYBLEND _MULTIPLYBLEND_X2 - #pragma shader_feature _ _FIXED_NORMALS_VIEWSPACE _FIXED_NORMALS_VIEWSPACE_BACKFACE _FIXED_NORMALS_MODELSPACE _FIXED_NORMALS_MODELSPACE_BACKFACE + #pragma shader_feature _ _FIXED_NORMALS_VIEWSPACE _FIXED_NORMALS_VIEWSPACE_BACKFACE _FIXED_NORMALS_MODELSPACE _FIXED_NORMALS_MODELSPACE_BACKFACE _FIXED_NORMALS_WORLDSPACE #pragma shader_feature _ _SPECULAR _SPECULAR_GLOSSMAP #pragma shader_feature _NORMALMAP #pragma shader_feature _ALPHA_CLIP @@ -99,7 +99,7 @@ Shader "Lightweight Render Pipeline/Spine/Sprite" #pragma multi_compile_fog #pragma multi_compile _ PIXELSNAP_ON #pragma multi_compile _ ETC1_EXTERNAL_ALPHA - + // ------------------------------------- // Lightweight Pipeline keywords #pragma multi_compile _ _MAIN_LIGHT_SHADOWS @@ -108,17 +108,17 @@ Shader "Lightweight Render Pipeline/Spine/Sprite" #pragma multi_compile _ _ADDITIONAL_LIGHT_SHADOWS #pragma multi_compile _ _SHADOWS_SOFT #pragma multi_compile _ _MIXED_LIGHTING_SUBTRACTIVE - + // ------------------------------------- // Unity defined keywords #pragma multi_compile _ DIRLIGHTMAP_COMBINED #pragma multi_compile _ LIGHTMAP_ON #pragma multi_compile_fog - + //-------------------------------------- // GPU Instancing #pragma multi_compile_instancing - + //-------------------------------------- // Spine related keywords #pragma shader_feature _ _STRAIGHT_ALPHA_INPUT @@ -216,7 +216,7 @@ Shader "Lightweight Render Pipeline/Spine/Sprite" ENDHLSL } } - + FallBack "Hidden/InternalErrorShader" CustomEditor "SpineSpriteShaderGUI" } diff --git a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/Spine-Sprite-URP.shader b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/Spine-Sprite-URP.shader index 61fa6ac55..79402b040 100644 --- a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/Spine-Sprite-URP.shader +++ b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/Spine-Sprite-URP.shader @@ -82,7 +82,7 @@ Shader "Universal Render Pipeline/Spine/Sprite" // ------------------------------------- // Material Keywords #pragma shader_feature _ _ALPHABLEND_ON _ALPHAPREMULTIPLY_ON _ADDITIVEBLEND _ADDITIVEBLEND_SOFT _MULTIPLYBLEND _MULTIPLYBLEND_X2 - #pragma shader_feature _ _FIXED_NORMALS_VIEWSPACE _FIXED_NORMALS_VIEWSPACE_BACKFACE _FIXED_NORMALS_MODELSPACE _FIXED_NORMALS_MODELSPACE_BACKFACE + #pragma shader_feature _ _FIXED_NORMALS_VIEWSPACE _FIXED_NORMALS_VIEWSPACE_BACKFACE _FIXED_NORMALS_MODELSPACE _FIXED_NORMALS_MODELSPACE_BACKFACE _FIXED_NORMALS_WORLDSPACE #pragma shader_feature _ _SPECULAR _SPECULAR_GLOSSMAP #pragma shader_feature _NORMALMAP #pragma shader_feature _ALPHA_CLIP