mirror of
https://github.com/EsotericSoftware/spine-runtimes.git
synced 2026-02-06 15:24:55 +08:00
Merge branch '4.1' into 4.2-beta
This commit is contained in:
commit
48d372bef3
@ -151,6 +151,8 @@
|
||||
* Added Spine Preferences setting `Reload SkeletonData after Play`. When enabled, the shared `SkeletonData` of all skeletons in the active scene is reloaded (from the `.json` or `.skel.bytes` file) after exiting play-mode. You can disable this setting to avoid the reloading delay if you can ensure that there are no (accidental) modifications to the shared `SkeletonData` during play-mode (otherwise it would carry over its effect into subsequent plays). Defaults to `true` (the safe setting), which maintains existing behaviour.
|
||||
* Added `SkeletonAnimationMulti` sample component methods `SetActiveSkeleton(int index)` and getter property `SkeletonAnimations` to more easily apply changes at all SkeletonAnimation instances instead of only the active one.
|
||||
* PMA textures now have `sRGB (Color Texture)` disabled by default, the preset template `PMATexturePreset.preset` has been adjusted accordingly. As PMA textures are only allowed with Gamma color space, `sRGB (Color Texture)` shall be disabled to prevent border artifacts when mipmaps are enabled. In Gamma color space having this setting disabled has no drawbacks, only benefits.
|
||||
* `SkeletonRenderTexture` and `SkeletonGraphicRenderTexture` components now support automatic down-scaling when required size on screen exceeds `Max Render Texture Size`.
|
||||
* Added `Spine/SkeletonGraphic Fill` shader to provide functionality of `Spine/Skeleton Fill` shader for `SkeletonGraphic`.
|
||||
|
||||
* **Breaking changes**
|
||||
* Made `SkeletonGraphic.unscaledTime` parameter protected, use the new property `UnscaledTime` instead.
|
||||
|
||||
@ -248,7 +248,8 @@ namespace Spine.Unity.Examples {
|
||||
}
|
||||
|
||||
Vector2 targetCameraViewportSize = targetCamera.pixelRect.size;
|
||||
commandBuffer.SetViewport(new Rect(-screenSpaceMin, targetCameraViewportSize));
|
||||
Rect viewportRect = new Rect(-screenSpaceMin * downScaleFactor, targetCameraViewportSize * downScaleFactor);
|
||||
commandBuffer.SetViewport(viewportRect);
|
||||
}
|
||||
|
||||
protected override void AssignMeshAtRenderer () {
|
||||
|
||||
@ -167,7 +167,8 @@ namespace Spine.Unity.Examples {
|
||||
commandBuffer.SetProjectionMatrix(targetCamera.projectionMatrix);
|
||||
commandBuffer.SetViewMatrix(targetCamera.worldToCameraMatrix);
|
||||
Vector2 targetCameraViewportSize = targetCamera.pixelRect.size;
|
||||
commandBuffer.SetViewport(new Rect(-screenSpaceMin, targetCameraViewportSize));
|
||||
Rect viewportRect = new Rect(-screenSpaceMin * downScaleFactor, targetCameraViewportSize * downScaleFactor);
|
||||
commandBuffer.SetViewport(viewportRect);
|
||||
}
|
||||
|
||||
protected void RenderToRenderTexture () {
|
||||
|
||||
@ -47,8 +47,10 @@ namespace Spine.Unity.Examples {
|
||||
public Camera targetCamera;
|
||||
|
||||
protected CommandBuffer commandBuffer;
|
||||
protected Vector2Int requiredRenderTextureSize;
|
||||
protected Vector2Int screenSize;
|
||||
protected Vector2Int usedRenderTextureSize;
|
||||
protected Vector2Int allocatedRenderTextureSize;
|
||||
protected Vector2 downScaleFactor = Vector2.one;
|
||||
|
||||
protected Vector3 worldCornerNoDistortion0;
|
||||
protected Vector3 worldCornerNoDistortion1;
|
||||
@ -89,17 +91,22 @@ namespace Spine.Unity.Examples {
|
||||
uvCorner2 = MathUtilities.InverseLerp(screenSpaceMin, screenSpaceMax, screenCorner2);
|
||||
uvCorner3 = MathUtilities.InverseLerp(screenSpaceMin, screenSpaceMax, screenCorner3);
|
||||
|
||||
requiredRenderTextureSize = new Vector2Int(
|
||||
Math.Min(maxRenderTextureSize, Math.Abs((int)screenSpaceMax.x - (int)screenSpaceMin.x)),
|
||||
Math.Min(maxRenderTextureSize, Math.Abs((int)screenSpaceMax.y - (int)screenSpaceMin.y)));
|
||||
screenSize = new Vector2Int(Math.Abs((int)screenSpaceMax.x - (int)screenSpaceMin.x),
|
||||
Math.Abs((int)screenSpaceMax.y - (int)screenSpaceMin.y));
|
||||
usedRenderTextureSize = new Vector2Int(
|
||||
Math.Min(maxRenderTextureSize, screenSize.x),
|
||||
Math.Min(maxRenderTextureSize, screenSize.y));
|
||||
downScaleFactor = new Vector2(
|
||||
(float)usedRenderTextureSize.x / (float)screenSize.x,
|
||||
(float)usedRenderTextureSize.y / (float)screenSize.y);
|
||||
|
||||
PrepareRenderTexture();
|
||||
}
|
||||
|
||||
protected void PrepareRenderTexture () {
|
||||
Vector2Int textureSize = new Vector2Int(
|
||||
Mathf.NextPowerOfTwo(requiredRenderTextureSize.x),
|
||||
Mathf.NextPowerOfTwo(requiredRenderTextureSize.y));
|
||||
Mathf.NextPowerOfTwo(usedRenderTextureSize.x),
|
||||
Mathf.NextPowerOfTwo(usedRenderTextureSize.y));
|
||||
|
||||
if (textureSize != allocatedRenderTextureSize) {
|
||||
if (renderTexture)
|
||||
@ -135,8 +142,12 @@ namespace Spine.Unity.Examples {
|
||||
};
|
||||
quadMesh.normals = normals;
|
||||
|
||||
float maxU = (float)requiredRenderTextureSize.x / (float)allocatedRenderTextureSize.x;
|
||||
float maxV = (float)requiredRenderTextureSize.y / (float)allocatedRenderTextureSize.y;
|
||||
float maxU = (float)usedRenderTextureSize.x / (float)allocatedRenderTextureSize.x;
|
||||
float maxV = (float)usedRenderTextureSize.y / (float)allocatedRenderTextureSize.y;
|
||||
if (downScaleFactor.x < 1 || downScaleFactor.y < 1) {
|
||||
maxU = downScaleFactor.x * (float)screenSize.x / (float)allocatedRenderTextureSize.x;
|
||||
maxV = downScaleFactor.y * (float)screenSize.y / (float)allocatedRenderTextureSize.y;
|
||||
}
|
||||
Vector2[] uv = new Vector2[4] {
|
||||
new Vector2(uvCorner0.x * maxU, uvCorner0.y * maxV),
|
||||
new Vector2(uvCorner1.x * maxU, uvCorner1.y * maxV),
|
||||
|
||||
@ -26,6 +26,11 @@ fixed4 _Color;
|
||||
fixed4 _TextureSampleAdd;
|
||||
float4 _ClipRect;
|
||||
|
||||
#ifdef ENABLE_FILL
|
||||
float4 _FillColor;
|
||||
float _FillPhase;
|
||||
#endif
|
||||
|
||||
VertexOutput vert (VertexInput IN) {
|
||||
VertexOutput OUT;
|
||||
|
||||
@ -73,6 +78,9 @@ fixed4 frag (VertexOutput IN) : SV_Target
|
||||
clip (color.a - 0.001);
|
||||
#endif
|
||||
|
||||
#ifdef ENABLE_FILL
|
||||
color.rgb = lerp(color.rgb, (_FillColor.rgb * color.a), _FillPhase); // make sure to PMA _FillColor.
|
||||
#endif
|
||||
return color;
|
||||
}
|
||||
|
||||
|
||||
@ -0,0 +1,78 @@
|
||||
Shader "Spine/SkeletonGraphic Fill"
|
||||
{
|
||||
Properties
|
||||
{
|
||||
_FillColor("FillColor", Color) = (1,1,1,1)
|
||||
_FillPhase("FillPhase", Range(0, 1)) = 0
|
||||
[PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {}
|
||||
[Toggle(_STRAIGHT_ALPHA_INPUT)] _StraightAlphaInput("Straight Alpha Texture", Int) = 0
|
||||
[Toggle(_CANVAS_GROUP_COMPATIBLE)] _CanvasGroupCompatible("CanvasGroup Compatible", Int) = 1
|
||||
_Color("Tint", Color) = (1,1,1,1)
|
||||
|
||||
[HideInInspector][Enum(UnityEngine.Rendering.CompareFunction)] _StencilComp("Stencil Comparison", Float) = 8
|
||||
[HideInInspector] _Stencil("Stencil ID", Float) = 0
|
||||
[HideInInspector][Enum(UnityEngine.Rendering.StencilOp)] _StencilOp("Stencil Operation", Float) = 0
|
||||
[HideInInspector] _StencilWriteMask("Stencil Write Mask", Float) = 255
|
||||
[HideInInspector] _StencilReadMask("Stencil Read Mask", Float) = 255
|
||||
|
||||
[HideInInspector] _ColorMask("Color Mask", Float) = 15
|
||||
|
||||
[Toggle(UNITY_UI_ALPHACLIP)] _UseUIAlphaClip("Use Alpha Clip", Float) = 0
|
||||
|
||||
// Outline properties are drawn via custom editor.
|
||||
[HideInInspector] _OutlineWidth("Outline Width", Range(0,8)) = 3.0
|
||||
[HideInInspector] _OutlineColor("Outline Color", Color) = (1,1,0,1)
|
||||
[HideInInspector] _OutlineReferenceTexWidth("Reference Texture Width", Int) = 1024
|
||||
[HideInInspector] _ThresholdEnd("Outline Threshold", Range(0,1)) = 0.25
|
||||
[HideInInspector] _OutlineSmoothness("Outline Smoothness", Range(0,1)) = 1.0
|
||||
[HideInInspector][MaterialToggle(_USE8NEIGHBOURHOOD_ON)] _Use8Neighbourhood("Sample 8 Neighbours", Float) = 1
|
||||
[HideInInspector] _OutlineOpaqueAlpha("Opaque Alpha", Range(0,1)) = 1.0
|
||||
[HideInInspector] _OutlineMipLevel("Outline Mip Level", Range(0,3)) = 0
|
||||
}
|
||||
|
||||
SubShader
|
||||
{
|
||||
Tags
|
||||
{
|
||||
"Queue" = "Transparent"
|
||||
"IgnoreProjector" = "True"
|
||||
"RenderType" = "Transparent"
|
||||
"PreviewType" = "Plane"
|
||||
"CanUseSpriteAtlas" = "True"
|
||||
}
|
||||
|
||||
Stencil
|
||||
{
|
||||
Ref[_Stencil]
|
||||
Comp[_StencilComp]
|
||||
Pass[_StencilOp]
|
||||
ReadMask[_StencilReadMask]
|
||||
WriteMask[_StencilWriteMask]
|
||||
}
|
||||
|
||||
Cull Off
|
||||
Lighting Off
|
||||
ZWrite Off
|
||||
ZTest[unity_GUIZTestMode]
|
||||
Fog { Mode Off }
|
||||
Blend One OneMinusSrcAlpha
|
||||
ColorMask[_ColorMask]
|
||||
|
||||
Pass
|
||||
{
|
||||
Name "Normal"
|
||||
|
||||
CGPROGRAM
|
||||
#pragma shader_feature _ _STRAIGHT_ALPHA_INPUT
|
||||
#pragma shader_feature _ _CANVAS_GROUP_COMPATIBLE
|
||||
#pragma vertex vert
|
||||
#pragma fragment frag
|
||||
#pragma target 2.0
|
||||
|
||||
#define ENABLE_FILL
|
||||
#include "CGIncludes/Spine-SkeletonGraphic-NormalPass.cginc"
|
||||
ENDCG
|
||||
}
|
||||
}
|
||||
CustomEditor "SpineShaderWithOutlineGUI"
|
||||
}
|
||||
@ -0,0 +1,10 @@
|
||||
fileFormatVersion: 2
|
||||
guid: c02377d9afbb50e49ab27049e59fb5f8
|
||||
ShaderImporter:
|
||||
externalObjects: {}
|
||||
defaultTextures: []
|
||||
nonModifiableTextures: []
|
||||
preprocessorOverride: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
Loading…
x
Reference in New Issue
Block a user