diff --git a/Assets/SpriteStudio6/Editor/Import/SSAE.cs b/Assets/SpriteStudio6/Editor/Import/SSAE.cs index ac457f1..cfc324c 100644 --- a/Assets/SpriteStudio6/Editor/Import/SSAE.cs +++ b/Assets/SpriteStudio6/Editor/Import/SSAE.cs @@ -7,6 +7,7 @@ All rights reserved. */ // #define STORE_ANIMATIONSETUP_FULL #define WARN_MESHVERTEX_COUNT +#define TRANSFORM_SET_SETUP_UNITYNATIVE using System.Collections; using System.Collections.Generic; @@ -2087,6 +2088,7 @@ string nameFileSSAE listNode = LibraryEditor_SpriteStudio6.Utility.XML.ListGetNode(nodeKey, "value/commands/value", managerNameSpace); int countCommand = listNode.Count; + bool[] tableActive = new bool[countCommand]; string[] tableIDCommand = new string[countCommand]; string[] tableTextNoteValue = new string[countCommand]; System.Xml.XmlNodeList[] tableNodeValueParams = new System.Xml.XmlNodeList[countCommand]; @@ -2097,6 +2099,9 @@ string nameFileSSAE } for(int i=0; i=1; j--) + { + animationParts.Cell.ListKey.RemoveAt(j); + } } } } @@ -3400,6 +3524,42 @@ LibraryEditor_SpriteStudio6.Import.SSAE.Information informationSSAE flagInUse = false; } + /* Patching of ivalid "Reference Cell" */ + /* MEMO: SpriteStudio6's Error avoidance behavior is that skeletal-animation */ + /* is unworked when "Mesh" part has "Reference-cell" datas. */ + animationParts.StatusParts &= ~Library_SpriteStudio6.Data.Animation.Parts.FlagBitStatus.NO_ANIMATION_SKELETAL; + switch(parts.Data.Feature) + { + case Library_SpriteStudio6.Data.Parts.Animation.KindFeature.ROOT: + case Library_SpriteStudio6.Data.Parts.Animation.KindFeature.NULL: + case Library_SpriteStudio6.Data.Parts.Animation.KindFeature.NORMAL: + break; + + case Library_SpriteStudio6.Data.Parts.Animation.KindFeature.INSTANCE: + case Library_SpriteStudio6.Data.Parts.Animation.KindFeature.EFFECT: + break; + + case Library_SpriteStudio6.Data.Parts.Animation.KindFeature.MASK: + break; + + case Library_SpriteStudio6.Data.Parts.Animation.KindFeature.JOINT: + case Library_SpriteStudio6.Data.Parts.Animation.KindFeature.BONE: + case Library_SpriteStudio6.Data.Parts.Animation.KindFeature.MOVENODE: + case Library_SpriteStudio6.Data.Parts.Animation.KindFeature.CONSTRAINT: + case Library_SpriteStudio6.Data.Parts.Animation.KindFeature.BONEPOINT: + break; + case Library_SpriteStudio6.Data.Parts.Animation.KindFeature.MESH: + if(true == animationParts.FlagCancelAnimationSkeletal) + { + animationParts.StatusParts |= Library_SpriteStudio6.Data.Animation.Parts.FlagBitStatus.NO_ANIMATION_SKELETAL; + } + break; + + case Library_SpriteStudio6.Data.Parts.Animation.KindFeature.TRANSFORM_CONSTRAINT: + case Library_SpriteStudio6.Data.Parts.Animation.KindFeature.CAMERA: + break; + } + if(false == flagInUse) { /* Not Use */ animationParts.StatusParts |= Library_SpriteStudio6.Data.Animation.Parts.FlagBitStatus.NOT_USED; @@ -3506,7 +3666,7 @@ LibraryEditor_SpriteStudio6.Import.SSAE.Information informationSSAE case Library_SpriteStudio6.Data.Parts.Animation.KindFeature.MASK: /* Create Draw-Order table */ - /* MEMO: Since "Mask" draws twice on "Draw" and "PreDraw", both tables are necessary. */ + /* MEMO: Since "Mask" draws twice on "Draw" and "PreDraw", both tables are necessary. */ animationParts.TableOrderDraw = new int[countFrame]; animationParts.TableOrderPreDraw = new int[countFrame]; for(int j=0; j= countVertexMesh) @@ -6233,6 +6399,7 @@ int indexAnimation scriptParts = informationSSAE.TableParts[i].ScriptPartsUnityNative; bool flagSetInitialDataParts = flagSetInitialData; + bool flagSetInitialGameObject = flagSetInitialData; if(null == scriptParts) { flagSetInitialDataParts = false; @@ -6318,6 +6485,17 @@ int indexAnimation } Vector3 scalingInitial = scalingSetup; +#if TRANSFORM_SET_SETUP_UNITYNATIVE + /* MEMO: TRS is set up after "setup" has been collected. */ + if(true == flagSetInitialGameObject) + { + gameObjectParts.transform.localPosition = positionInitial; + gameObjectParts.transform.localEulerAngles = rotationInitial; + gameObjectParts.transform.localScale = scalingInitial; + } +#else +#endif + /* Set Curves (TRS) */ float initialValue; UtilityModeUnity.AttributeConvertAnimationClipFloat( out initialValue, @@ -6355,7 +6533,6 @@ int indexAnimation /* in Transform.localEularAngles. */ /* So I convert Euler angles to quaternions and store them afterwards. */ { - /* MEMO: */ Vector3 initialValueRotateUnity = Vector3.zero; UtilityModeUnity.AttributeConvertAnimationClipRotateCorrectOrder( out initialValueRotateUnity, dataAnimation, @@ -6397,13 +6574,16 @@ int indexAnimation frameStart, frameEnd, framePerSecond ); +#if TRANSFORM_SET_SETUP_UNITYNATIVE +#else /* MEMO: TRS is set up after both "setup" and "animation's initial data" has been collected. */ - if(true == flagSetInitialDataParts) + if(true == flagSetInitialGameObject) { gameObjectParts.transform.localPosition = positionInitial; gameObjectParts.transform.localEulerAngles = rotationInitial; gameObjectParts.transform.localScale = scalingInitial; } +#endif /* Set Attributes for each (Parts') Feature */ switch(informationParts.Data.Feature) @@ -8908,7 +9088,7 @@ int idParts idPartsParent = informationParts.Data.IDParent; informationPartsParent = informationParts; while(0 <= idPartsParent) - { /* MEMO: */ + { if(true == string.IsNullOrEmpty(nameGameObject)) { nameGameObject = informationPartsParent.GameObjectUnityNative.name; @@ -10435,7 +10615,6 @@ int indexAnimation /* in Transform.localEularAngles. */ /* So I convert Euler angles to quaternions and store them afterwards. */ { - /* MEMO: */ Vector3 initialValueRotateUnity = Vector3.zero; UtilityModeUnity.AttributeConvertAnimationClipRotateCorrectOrder( out initialValueRotateUnity, dataAnimation, @@ -10481,7 +10660,6 @@ int indexAnimation /* MEMO: Currently, mode "UnityUI" does not support user-event. */ /* Set Attributes for each (Parts') Feature */ - /* MEMO: */ switch(informationParts.Data.Feature) { case Library_SpriteStudio6.Data.Parts.Animation.KindFeature.ROOT: diff --git a/Assets/SpriteStudio6/Editor/Import/SSCE.cs b/Assets/SpriteStudio6/Editor/Import/SSCE.cs index 6a65bc4..00c55f7 100644 --- a/Assets/SpriteStudio6/Editor/Import/SSCE.cs +++ b/Assets/SpriteStudio6/Editor/Import/SSCE.cs @@ -6,6 +6,11 @@ All rights reserved. */ +#if UNITY_2022_3_OR_NEWER +#define USE_SPRITEATLAS +#else +#endif + using System.Collections; using System.Collections.Generic; using UnityEngine; @@ -398,7 +403,10 @@ Information.Texture informationTexture importer.npotScale = TextureImporterNPOTScale.None; importer.textureType = TextureImporterType.Sprite; importer.spriteImportMode = SpriteImportMode.Multiple; +#if USE_SPRITEATLAS +#else importer.spritePackingTag = LibraryEditor_SpriteStudio6.Import.NameTagSpritePackerTexture; +#endif switch(informationTexture.Wrap) { @@ -788,7 +796,8 @@ public class Texture public LibraryEditor_SpriteStudio6.Import.Assets PrefabTexture; public LibraryEditor_SpriteStudio6.Import.Assets MaterialAnimationUnityNative; - public List ListSpriteMetaDataUnityNative; /* Temporary */ +// public List ListSpriteMetaDataUnityNative; /* Temporary */ + public List ListSpriteMetaDataUnityNative; /* Temporary */ public List ListSpriteUnityNative; #endregion Variables & Properties @@ -827,6 +836,26 @@ public string FileNameGetFullPath() return(NameDirectory + NameFileBody + NameFileExtension); } #endregion Functions + + /* ----------------------------------------------- Classes, Structs & Interfaces */ + #region Classes, Structs & Interfaces + /* MEMO: Copy of "UnityEditor.SpriteMetaData". */ + public struct InformationSprite + { + /* ----------------------------------------------- Variables & Properties */ + #region Variables & Properties + public int alignment; + public Vector4 border; + public string name; + public Vector2 pivot; + public Rect rect; + #endregion Variables & Properties + + /* ----------------------------------------------- Functions */ + #region Functions + #endregion Functions + } + #endregion Classes, Structs & Interfaces } #endregion Classes, Structs & Interfaces } @@ -896,7 +925,8 @@ LibraryEditor_SpriteStudio6.Import.SSCE.Information informationSSCE { const string messageLogPrefix = "Convert (CellMap)"; - List listSpriteMetaData = null; +// List listSpriteMetaData = null; + List listSpriteMetaData = null; string[] tableNameSprite = null; LibraryEditor_SpriteStudio6.Import.SSCE.Information.Texture informationTexture = null; /* "UnityEngine.Texture" and my "Texture", class-names are conflict unless fully-qualified. */ @@ -905,7 +935,8 @@ LibraryEditor_SpriteStudio6.Import.SSCE.Information informationSSCE informationTexture = informationSSPJ.TableInformationTexture[informationSSCE.IndexTexture]; if(null == informationTexture.ListSpriteMetaDataUnityNative) { - informationTexture.ListSpriteMetaDataUnityNative = new List(); +// informationTexture.ListSpriteMetaDataUnityNative = new List(); + informationTexture.ListSpriteMetaDataUnityNative = new List(); if(null == informationTexture.ListSpriteMetaDataUnityNative) { LogError(messageLogPrefix, "Not Enough Memory (CellMap WorkArea)", informationSSCE.FileNameGetFullPath(), informationSSPJ); @@ -915,7 +946,8 @@ LibraryEditor_SpriteStudio6.Import.SSCE.Information informationSSCE } listSpriteMetaData = informationTexture.ListSpriteMetaDataUnityNative; - SpriteMetaData spriteMetaData = new SpriteMetaData(); +// SpriteMetaData spriteMetaData = new SpriteMetaData(); + Information.Texture.InformationSprite spriteMetaData = new Information.Texture.InformationSprite(); Vector2 sizeTexture = new Vector2((float)informationTexture.SizeX, (float)informationTexture.SizeY); Vector2 sizeInverseTexture; sizeInverseTexture.x = 1.0f / sizeTexture.x; @@ -986,7 +1018,8 @@ LibraryEditor_SpriteStudio6.Import.SSCE.Information informationSSCE } return(false); } - private static string ConvertCellMapNameCreate(List listSpriteMetaData, string nameCell) +// private static string ConvertCellMapNameCreate(List listSpriteMetaData, string nameCell) + private static string ConvertCellMapNameCreate(List listSpriteMetaData, string nameCell) { bool flagRetry = true; int countRetry = 0; @@ -1037,8 +1070,15 @@ int indexTexture TextureImporter importer = TextureImporter.GetAtPath(informationTexture.PrefabTexture.TableName[0]) as TextureImporter; importer.spriteImportMode = SpriteImportMode.Multiple; +#if USE_SPRITEATLAS +#else importer.spritePackingTag = LibraryEditor_SpriteStudio6.Import.NameTagSpritePackerTexture; +#endif +#if false importer.spritesheet = informationTexture.ListSpriteMetaDataUnityNative.ToArray(); +#else + CellDataSetSprite(informationTexture.ListSpriteMetaDataUnityNative, importer); +#endif importer.spritePixelsPerUnit = 1.0f; bool flagEnableRead = false; if(true == setting.Basic.FlagTextureReadable) @@ -1085,7 +1125,166 @@ int indexTexture CellMapSetTexture_ErrorEnd:; return(false); } + private static void CellDataSetSprite(List listDataSprite, TextureImporter importer) + { +#if USE_SPRITEATLAS + UnityEditor.U2D.Sprites.SpriteDataProviderFactories factory = new UnityEditor.U2D.Sprites.SpriteDataProviderFactories(); + factory.Init(); + UnityEditor.U2D.Sprites.ISpriteEditorDataProvider provider = factory.GetSpriteEditorDataProviderFromObject(importer); + provider.InitSpriteEditorDataProvider(); + + /* Add sprites */ + SpriteRect[] tableSpriteRect = provider.GetSpriteRects(); + List listSpriteRect = (null == tableSpriteRect) + ? new List() + : new List(tableSpriteRect); + int countListExist = listSpriteRect.Count; + + bool[] tableFlagUsedSpriteRect = new bool[countListExist]; + int count = countListExist; + for(int i=0; i index) + { /* New Data */ + SpriteRect spriteRect = new SpriteRect(); + +// spriteRect.alignment = (SpriteAlignment)listDataSprite[i].alignment; + spriteRect.alignment = TableAlignment[listDataSprite[i].alignment]; + spriteRect.border = listDataSprite[i].border; + spriteRect.name = listDataSprite[i].name; + spriteRect.pivot = listDataSprite[i].pivot; + spriteRect.rect = listDataSprite[i].rect; +// spriteRect.spriteID = + + listSpriteRect.Add(spriteRect); + } + else + { /* Data Exsist */ +// listSpriteRect[index].alignment = (SpriteAlignment)listDataSprite[i].alignment; + listSpriteRect[index].alignment = TableAlignment[listDataSprite[i].alignment]; + listSpriteRect[index].border = listDataSprite[i].border; + listSpriteRect[index].name = listDataSprite[i].name; + listSpriteRect[index].pivot = listDataSprite[i].pivot; + listSpriteRect[index].rect = listDataSprite[i].rect; +// listSpriteRect[index].spriteID = + + tableFlagUsedSpriteRect[index] = true; + } + } + /* Delete unused cell */ + /* MEMO: List is erased by specifying indexes, so should be processed from the end. */ + /* However, don't concern in newly added data. */ + count = countListExist; + for(int i=(count-1); i>=0; i--) + { + if(false == tableFlagUsedSpriteRect[i]) + { + listSpriteRect.RemoveAt(i); + } + } + + /* Apply sprite datas */ + tableSpriteRect = listSpriteRect.ToArray(); + provider.SetSpriteRects(tableSpriteRect); + listSpriteRect.Clear(); + listSpriteRect = null; + + /* Apply sprites' name */ + UnityEditor.U2D.Sprites.ISpriteNameFileIdDataProvider providerName = provider.GetDataProvider(); + List listNamePairSprite = new List(providerName.GetNameFileIdPairs()); + + count = tableSpriteRect.Length; + for(int i=0; i index) + { /* New Data */ + UnityEditor.SpriteNameFileIdPair pair = new SpriteNameFileIdPair(tableSpriteRect[i].name, tableSpriteRect[i].spriteID); + listNamePairSprite.Add(pair); + } + else + { /* Data Exsist */ +// listNamePairSprite[index].name = tableSpriteRect[i].name; + listNamePairSprite[index].SetFileGUID(tableSpriteRect[i].spriteID); + } + } + providerName.SetNameFileIdPairs(listNamePairSprite); + listNamePairSprite.Clear(); + listNamePairSprite = null; + + /* Apply texture(-inporter) */ + provider.Apply(); +#else + int count = listDataSprite.Count; + SpriteMetaData[] tableSprite = new SpriteMetaData[count]; + for(int i=0; i listSpriteRect, string name) + { + int count = listSpriteRect.Count; + for(int i=0; i listPair, string name) + { + int count = listPair.Count; + for(int i=0; i countVertexCell) + { + countVertex = countVertexCell; + } + /* MEMO: Mapping-control attributes can not be set for "Mesh" parts, so UV recalculation occurs only when "Cell" is changed or initialized. */ + bool flagMeshInvalid = (0 != (dataAnimationParts.StatusParts & Data.Animation.Parts.FlagBitStatus.NO_ANIMATION_SKELETAL)); /* ? true : false */ if(0 != (Status & FlagBitStatus.UPDATE_UVTEXTURE)) { Vector4 uvTexture = Vector4.zero; Vector4 uvMinMax = Vector4.zero; Vector4 uvAverage = Vector4.zero; + if(true == flagMeshInvalid) + { + IndexVertexDraw = cellMap.TableCell[indexCell].Mesh.TableIndexVertex; + } + else + { + IndexVertexDraw = instanceRoot.DataAnimation.TableParts[idParts].Mesh.TableIndexVertex; + } + /* Calculate UV */ if(null != UVTextureDraw) { /* MEMO: Calculate UV when change Cell. (Mesh-Bind is not changed.) */ /* MEMO: Each UV-coordinate is as ratio when original Mesh-Cell's size is 1. */ - Vector2[] tableUVRate = instanceParts.Mesh.TableRateUV; float sizeTextureX = SizeTexture.x; float sizeTextureY = SizeTexture.y; float sizeInverseTextureX = 1.0f / sizeTextureX; float sizeInverseTextureY = 1.0f / sizeTextureY; float positionCellX = PositionCell.x; float positionCellY = PositionCell.y; - float sizeCellX = SizeCell.x; - float sizeCellY = SizeCell.y; - float rateUVX; - float rateUVY; - countTableUV = tableUVRate.Length; - bool flagSetUVMinMax = false; - for(int i=0; i= countTableBindMesh) || (0 >= countBoneList) + || (true == flagMeshInvalid) ) { /* not Skeletal-Animation / Skeletal-Animation, but has no bones */ if(true == Deform.Value.IsValid) { /* Use Deform */ /* Transform including "Deform" */ /* MEMO: In this case, "DeformDraw" is coordinate after posting "Deform". */ - if(0 != (Status & FlagBitStatus.UPDATE_DEFORM)) + if((0 != (Status & FlagBitStatus.UPDATE_DEFORM)) && (countVertex == Deform.Value.TableCoordinate.Length)) { Vector2[] tableVertexDeform = Deform.Value.TableCoordinate; - for(int i=0; i IDMaterialMainTexture) diff --git a/Assets/SpriteStudio6/Script/Script_SpriteStudio6_Replicate.cs b/Assets/SpriteStudio6/Script/Script_SpriteStudio6_Replicate.cs index aa7da62..35cd637 100644 --- a/Assets/SpriteStudio6/Script/Script_SpriteStudio6_Replicate.cs +++ b/Assets/SpriteStudio6/Script/Script_SpriteStudio6_Replicate.cs @@ -84,7 +84,6 @@ public bool StatusIsControlledTimeline { get { - /* MEMO: */ return(true == double.IsNaN(TimePreviousTimeline)); /* ? true : false */ } } diff --git a/Assets/SpriteStudio6/Shader/AddOn/Base/ShaderPixel_Sprite_ss-blur.cginc b/Assets/SpriteStudio6/Shader/AddOn/Base/ShaderPixel_Sprite_ss-blur.cginc index f572285..b7a2588 100644 --- a/Assets/SpriteStudio6/Shader/AddOn/Base/ShaderPixel_Sprite_ss-blur.cginc +++ b/Assets/SpriteStudio6/Shader/AddOn/Base/ShaderPixel_Sprite_ss-blur.cginc @@ -41,6 +41,8 @@ fixed4 PS_main(InputPS input) : PIXELSHADER_BINDOUTPUT out_color += tex2D(_MainTex, float2(tc.x, tc.y - defocused_y )); out_color /= 9.0f; /* Number of Sampling-point is 9 */ + out_color = PixelSolveColorspaceInput(out_color); + /* Blending Vertex-Color & Check Discarding-Pixel */ out_color *= input.ColorMain; PixelDiscardAlpha(out_color.a, 0.0f); @@ -49,6 +51,7 @@ fixed4 PS_main(InputPS input) : PIXELSHADER_BINDOUTPUT PixelSolvePMA(out_color, out_color.a); /* Finalize */ + out_color = PixelSolveColorspaceOutput(out_color); output = out_color; return(output); } diff --git a/Assets/SpriteStudio6/Shader/AddOn/Base/ShaderPixel_Sprite_ss-bmask.cginc b/Assets/SpriteStudio6/Shader/AddOn/Base/ShaderPixel_Sprite_ss-bmask.cginc index 5a8b564..433b903 100644 --- a/Assets/SpriteStudio6/Shader/AddOn/Base/ShaderPixel_Sprite_ss-bmask.cginc +++ b/Assets/SpriteStudio6/Shader/AddOn/Base/ShaderPixel_Sprite_ss-bmask.cginc @@ -30,7 +30,8 @@ fixed4 PS_main(InputPS input) : PIXELSHADER_BINDOUTPUT /* Texel Sampling */ fixed4 pixel = tex2D(_MainTex, input.Texture00UV.xy); PixelSynthesizeExternalAlpha(pixel.a, _AlphaTex, coord.xy, _EnableExternalAlpha); - PixelSolvePMA(pixel, pixel.a); + pixel = PixelSolveColorspaceInput(pixel); +// PixelSolvePMA(pixel, pixel.a); /* Check Discarding-Pixel */ float b = ParameterGetDiscard(fBrightness, pixel); @@ -42,7 +43,11 @@ fixed4 PS_main(InputPS input) : PIXELSHADER_BINDOUTPUT PixelSynthesizePartsColor(pixel, input); pixel.a = pixelA; + /* PreMultiplied-Alpha Solving */ + PixelSolvePMA(pixel, pixel.a); + /* Finalize */ + pixel = PixelSolveColorspaceOutput(pixel); output = pixel; return(output); } diff --git a/Assets/SpriteStudio6/Shader/AddOn/Base/ShaderPixel_Sprite_ss-circle.cginc b/Assets/SpriteStudio6/Shader/AddOn/Base/ShaderPixel_Sprite_ss-circle.cginc index 59195c0..bf535aa 100644 --- a/Assets/SpriteStudio6/Shader/AddOn/Base/ShaderPixel_Sprite_ss-circle.cginc +++ b/Assets/SpriteStudio6/Shader/AddOn/Base/ShaderPixel_Sprite_ss-circle.cginc @@ -58,7 +58,8 @@ fixed4 PS_main(InputPS input) : PIXELSHADER_BINDOUTPUT float2 texUV = float2(A_LU, A_TV) + st; fixed4 pixel = tex2D(_MainTex, texUV); PixelSynthesizeExternalAlpha(pixel.a, _AlphaTex, texUV.xy, _EnableExternalAlpha); - PixelSolvePMA(pixel, pixel.a); + pixel = PixelSolveColorspaceInput(pixel); +// PixelSolvePMA(pixel, pixel.a); /* Blending "Parts-Color" */ float pixelA = pixel.a; @@ -66,6 +67,7 @@ fixed4 PS_main(InputPS input) : PIXELSHADER_BINDOUTPUT pixel.a = pixelA; /* Finalize */ + pixel = PixelSolveColorspaceOutput(pixel); output = pixel; return(output); } diff --git a/Assets/SpriteStudio6/Shader/AddOn/Base/ShaderPixel_Sprite_ss-hsb.cginc b/Assets/SpriteStudio6/Shader/AddOn/Base/ShaderPixel_Sprite_ss-hsb.cginc index 93b44e5..44db204 100644 --- a/Assets/SpriteStudio6/Shader/AddOn/Base/ShaderPixel_Sprite_ss-hsb.cginc +++ b/Assets/SpriteStudio6/Shader/AddOn/Base/ShaderPixel_Sprite_ss-hsb.cginc @@ -73,6 +73,7 @@ fixed4 PS_main(InputPS input) : PIXELSHADER_BINDOUTPUT /* Texel Sampling */ fixed4 pixel = tex2D(_MainTex, input.Texture00UV.xy); PixelSynthesizeExternalAlpha(pixel.a, _AlphaTex, input.Texture00UV.xy, _EnableExternalAlpha); + pixel = PixelSolveColorspaceInput(pixel); PixelSolvePMA(pixel, pixel.a); /* Check Discarding-Pixel */ @@ -92,6 +93,8 @@ fixed4 PS_main(InputPS input) : PIXELSHADER_BINDOUTPUT pixel.a = pixelA; /* Finalize */ + PixelSolvePMA(pixel, pixel.a); + pixel = PixelSolveColorspaceOutput(pixel); output = pixel; return(output); } diff --git a/Assets/SpriteStudio6/Shader/AddOn/Base/ShaderPixel_Sprite_ss-move.cginc b/Assets/SpriteStudio6/Shader/AddOn/Base/ShaderPixel_Sprite_ss-move.cginc index 7aad602..c08420c 100644 --- a/Assets/SpriteStudio6/Shader/AddOn/Base/ShaderPixel_Sprite_ss-move.cginc +++ b/Assets/SpriteStudio6/Shader/AddOn/Base/ShaderPixel_Sprite_ss-move.cginc @@ -46,13 +46,15 @@ fixed4 PS_main(InputPS input) : PIXELSHADER_BINDOUTPUT Coord -= Vel; Pixel = tex2D(_MainTex, Coord); PixelSynthesizeExternalAlpha(Pixel.a, _AlphaTex, Coord.xy, _EnableExternalAlpha); - PixelSolvePMA(Pixel, Pixel.a); + Pixel = PixelSolveColorspaceInput(Pixel); +// PixelSolvePMA(Pixel, Pixel.a); float4 PixelShift; for(int i=1; i= _pixelA_) { \ + if(0.0 >= _pixelA_) { \ _pixelRGB_ = float4(0.0f, 0.0f, 0.0f, 0.0f); \ } else { \ _pixelRGB_.xyz *= _pixelA_; \ @@ -258,3 +258,61 @@ When "PS_OUTPUT_PMA" is not defined, process empty. #else #define PixelSolvePMA_ValidAlpha(_pixelRGB_,_pixelA_) #endif + +/* ********************************************************* */ +//! [for Vertex/Pixel-Shader] Solve ColorSpace Linear to Gamma +/*! +@param _pixleA_ + [In/Out] Pixel's RGBA (float4 / fixed4) + +@retval Return-Value + Adjusted RGB (float4) + +Solves differences in Color-Space settings. +*/ +float4 PixelSolveColorspaceInput(float4 color) +{ +#if defined(UNITY_COLORSPACE_GAMMA) + return(color); +#else +#if defined(PS_INPUT_PMA) + if((1.0 / 255.0) > color.a) { +// color = float4(0.0, 0.0, 0.0, 0.0); + color = color; + } else { + color.rgb = color.rgb / color.a; + } +#endif +// // color.rgb = color.rgb; +// color.rgb = sqrt(color.rgb); + color.rgb = pow(color.rgb, 1.0/2.2); +// color.rgb = (max(1.055h * pow(max(color, float4(0.0, 0.0, 0.0, 0.0)), 0.416666667) - 0.055, 0.0)).rgb; + + return(color); +#endif +} + +/* ********************************************************* */ +//! [for Vertex/Pixel-Shader] Solve ColorSpace Gamma to Linear +/*! +@param _pixleA_ + [In/Out] Pixel's RGBA (float4 / fixed4) + +@retval Return-Value + Adjusted RGB (float4) + +Solves differences in Color-Space settings. +*/ +float4 PixelSolveColorspaceOutput(float4 color) +{ +#if defined(UNITY_COLORSPACE_GAMMA) + return(color); +#else +// // color.rgb = color.rgb; +// color.rgb = (color * color).rgb; + color.rgb = (pow(color, 2.2)).rgb; +// color.rgb = (color * (color * (color * 0.305306011h + 0.682171111h) + 0.012522878h)).rgb; + + return(color); +#endif +} diff --git a/Assets/SpriteStudio6/Shader/Effect_SpriteStudio6.shader b/Assets/SpriteStudio6/Shader/Effect_SpriteStudio6.shader index e4775b0..f93c3be 100644 --- a/Assets/SpriteStudio6/Shader/Effect_SpriteStudio6.shader +++ b/Assets/SpriteStudio6/Shader/Effect_SpriteStudio6.shader @@ -21,6 +21,7 @@ Shader "Custom/SpriteStudio6/SS6PU/Effect" [Toggle(PS_NOT_DISCARD)] _NotDiscardPixel("Not Discard Pixel", Float) = 0 [Toggle(PS_OUTPUT_PMA)] _OutputPixelPMA("Output PreMultiplied Alpha", Float) = 0 + [Toggle(PS_INPUT_PMA)] _InputPixelPMA("Input PreMultiplied Alpha", Float) = 0 [HideInInspector] _ArgumentFs00("Argument Fs00", Vector) = (0,0,0,0) [HideInInspector] _ParameterFs00("Parameter Fs00", Vector) = (0,0,0,0) @@ -59,6 +60,7 @@ Shader "Custom/SpriteStudio6/SS6PU/Effect" // #define RESTRICT_SHADER_MODEL_3 #pragma multi_compile _ PS_NOT_DISCARD #pragma multi_compile _ PS_OUTPUT_PMA + #pragma multi_compile _ PS_INPUT_PMA #include "Base/Shader_Lib_SpriteStudio6.cginc" #include "Base/Shader_Data_SpriteStudio6.cginc" #include "Base/ShaderVertex_Effect_SpriteStudio6.cginc" diff --git a/Assets/SpriteStudio6/Shader/SkinnedMesh_UnityNative.shader b/Assets/SpriteStudio6/Shader/SkinnedMesh_UnityNative.shader index b7a418b..dd03962 100644 --- a/Assets/SpriteStudio6/Shader/SkinnedMesh_UnityNative.shader +++ b/Assets/SpriteStudio6/Shader/SkinnedMesh_UnityNative.shader @@ -23,6 +23,7 @@ Shader "Custom/SpriteStudio6/UnityNative/SkinnedMesh" [Toggle(PS_NOT_DISCARD)] _NotDiscardPixel("Not Discard Pixel", Float) = 0 [Toggle(PS_OUTPUT_PMA)] _OutputPixelPMA("Output PreMultiplied Alpha", Float) = 0 + [Toggle(PS_INPUT_PMA)] _InputPixelPMA("Input PreMultiplied Alpha", Float) = 0 [HideInInspector] _RendererColor("RendererColor", Color) = (1, 1, 1, 1) [HideInInspector] _Flip("Flip", Vector) = (1, 1, 1, 1) @@ -62,9 +63,11 @@ Shader "Custom/SpriteStudio6/UnityNative/SkinnedMesh" #include "UnityCG.cginc" #define RESTRICT_SHADER_MODEL_3 - #define PS_OPTION_NOT_DISCARD - #define PS_OPTION_OUTPUT_PMA + #pragma multi_compile _ PS_NOT_DISCARD + #pragma multi_compile _ PS_OUTPUT_PMA + #pragma multi_compile _ PS_INPUT_PMA #include "Base/Shader_Data_UnityNative.cginc" + #include "Base/Shader_Lib_SpriteStudio6.cginc" #include "Base/ShaderVertex_SkinnedMesh_UnityNative.cginc" #include "Base/ShaderPixel_Sprite_UnityNative.cginc" ENDCG diff --git a/Assets/SpriteStudio6/Shader/Sprite_SpriteStudio6.shader b/Assets/SpriteStudio6/Shader/Sprite_SpriteStudio6.shader index ad38976..8907477 100644 --- a/Assets/SpriteStudio6/Shader/Sprite_SpriteStudio6.shader +++ b/Assets/SpriteStudio6/Shader/Sprite_SpriteStudio6.shader @@ -21,6 +21,7 @@ Shader "Custom/SpriteStudio6/SS6PU/Sprite" [Toggle(PS_NOT_DISCARD)] _NotDiscardPixel("Not Discard Pixel", Float) = 0 [Toggle(PS_OUTPUT_PMA)] _OutputPixelPMA("Output PreMultiplied Alpha", Float) = 0 + [Toggle(PS_INPUT_PMA)] _InputPixelPMA("Input PreMultiplied Alpha", Float) = 0 [HideInInspector] _ArgumentFs00("Argument Fs00", Vector) = (0,0,0,0) [HideInInspector] _ParameterFs00("Parameter Fs00", Vector) = (0,0,0,0) @@ -59,6 +60,7 @@ Shader "Custom/SpriteStudio6/SS6PU/Sprite" // #define RESTRICT_SHADER_MODEL_3 #pragma multi_compile _ PS_NOT_DISCARD #pragma multi_compile _ PS_OUTPUT_PMA + #pragma multi_compile _ PS_INPUT_PMA #include "Base/Shader_Lib_SpriteStudio6.cginc" #include "Base/Shader_Data_SpriteStudio6.cginc" #include "Base/ShaderVertex_Sprite_SpriteStudio6.cginc" diff --git a/Assets/SpriteStudio6/Shader/Sprite_UnityNative.shader b/Assets/SpriteStudio6/Shader/Sprite_UnityNative.shader index 2e744b3..0245f6b 100644 --- a/Assets/SpriteStudio6/Shader/Sprite_UnityNative.shader +++ b/Assets/SpriteStudio6/Shader/Sprite_UnityNative.shader @@ -45,6 +45,7 @@ Shader "Custom/SpriteStudio6/UnityNative/Sprite" [Toggle(PS_NOT_DISCARD)] _NotDiscardPixel("Not Discard Pixel", Float) = 0 [Toggle(PS_OUTPUT_PMA)] _OutputPixelPMA("Output PreMultiplied Alpha", Float) = 0 + [Toggle(PS_INPUT_PMA)] _InputPixelPMA("Input PreMultiplied Alpha", Float) = 0 [HideInInspector] _RendererColor("RendererColor", Color) = (1, 1, 1, 1) [HideInInspector] _Flip("Flip", Vector) = (1, 1, 1, 1) @@ -91,7 +92,9 @@ Shader "Custom/SpriteStudio6/UnityNative/Sprite" // #define RESTRICT_UNITY_2017_2 #pragma multi_compile _ PS_NOT_DISCARD #pragma multi_compile _ PS_OUTPUT_PMA + #pragma multi_compile _ PS_INPUT_PMA #include "Base/Shader_Data_UnityNative.cginc" + #include "Base/Shader_Lib_SpriteStudio6.cginc" #include "Base/ShaderVertex_Sprite_UnityNative.cginc" #include "Base/ShaderPixel_Sprite_UnityNative.cginc" ENDCG diff --git a/Assets/SpriteStudio6/Shader/Sprite_UnityNative_NonBatch.shader b/Assets/SpriteStudio6/Shader/Sprite_UnityNative_NonBatch.shader index d2a4839..b4a4123 100644 --- a/Assets/SpriteStudio6/Shader/Sprite_UnityNative_NonBatch.shader +++ b/Assets/SpriteStudio6/Shader/Sprite_UnityNative_NonBatch.shader @@ -45,6 +45,7 @@ Shader "Custom/SpriteStudio6/UnityNative/Sprite_NonBatch" [Toggle(PS_NOT_DISCARD)] _NotDiscardPixel("Not Discard Pixel", Float) = 0 [Toggle(PS_OUTPUT_PMA)] _OutputPixelPMA("Output PreMultiplied Alpha", Float) = 0 + [Toggle(PS_INPUT_PMA)] _InputPixelPMA("Input PreMultiplied Alpha", Float) = 0 [HideInInspector] _RendererColor("RendererColor", Color) = (1, 1, 1, 1) [HideInInspector] _Flip("Flip", Vector) = (1, 1, 1, 1) @@ -92,7 +93,9 @@ Shader "Custom/SpriteStudio6/UnityNative/Sprite_NonBatch" // #define RESTRICT_UNITY_2017_2 #pragma multi_compile _ PS_NOT_DISCARD #pragma multi_compile _ PS_OUTPUT_PMA + #pragma multi_compile _ PS_INPUT_PMA #include "Base/Shader_Data_UnityNative.cginc" + #include "Base/Shader_Lib_SpriteStudio6.cginc" #include "Base/ShaderVertex_Sprite_UnityNative.cginc" #include "Base/ShaderPixel_Sprite_UnityNative.cginc" ENDCG diff --git a/Assets/SpriteStudio6/Shader/Sprite_UnityUI.shader b/Assets/SpriteStudio6/Shader/Sprite_UnityUI.shader index f5f3bb0..cd342aa 100644 --- a/Assets/SpriteStudio6/Shader/Sprite_UnityUI.shader +++ b/Assets/SpriteStudio6/Shader/Sprite_UnityUI.shader @@ -96,6 +96,7 @@ Shader "Custom/SpriteStudio6/UnityUI/Sprite" // #define RESTRICT_SHADER_MODEL_3 // #define RESTRICT_UNITY_2017_2 #include "Base/Shader_Data_UnityUI.cginc" + #include "Base/Shader_Lib_SpriteStudio6.cginc" #include "Base/ShaderVertex_Sprite_UnityUI.cginc" #include "Base/ShaderPixel_Sprite_UnityUI.cginc" ENDCG diff --git a/LICENSE b/LICENSE index 008ce14..83e73ea 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ The MIT License (MIT) -Copyright (c) Web Technology Corp. +Copyright (c) CRI Middleware Co., Ltd. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/plugins/player_settings/SS6PlayerForUnity.ss-playersettings b/plugins/player_settings/SS6PlayerForUnity.ss-playersettings index e67b61f..82f179a 100644 --- a/plugins/player_settings/SS6PlayerForUnity.ss-playersettings +++ b/plugins/player_settings/SS6PlayerForUnity.ss-playersettings @@ -1,9 +1,17 @@ - + 1 - SS6PlayerForUnity - SS6PlayerForUnity v1.1 + SS6PlayerForUnity_v2 + SS6PlayerForUnity v2.1 + + このプレイヤーでは表示結果が異なるものがあります。\n +詳しくは下記のページをご覧ください。\n +https://github.com/SpriteStudio/SS6PlayerForUnity + This player has some incompatibilities.\n +Please see the following page for the detail.\n +https://github.com/SpriteStudio/SS6PlayerForUnity + any sspj ssae @@ -48,6 +56,7 @@ IPRM EFCT DEFM + SHDR mix @@ -80,9 +89,26 @@ bone mesh + + default + ss-blur + ss-bmask + ss-circle + ss-hsb + ss-move + ss-noise + ss-outline + ss-pix + ss-scatter + ss-sepia + ss-spot + ss-step + ss-wave + 0 0 0 0 + official