Search Unity

SpriteAtlases keep changing their hash without sprites changing, polluting source control

Discussion in '2D' started by mh114, Oct 3, 2019.

  1. mh114

    mh114

    Joined:
    Nov 17, 2013
    Posts:
    295
    Since updating to Unity 2018.4.10 I noticed all of our sprite atlases keep changing the hashes in the .spriteatlas files. This results in lots of unnecessary noise in source control. Previously we were using 2018.4.8, I'm not sure if the problem started in .9 or .10. The serialization seems to have changed (introduced storedHash), but now the hashes keep changing all the time.

    This is the hash I'm talking about:
    totalSpriteSurfaceArea: 180224
    bindAsDefault: 1
    storedHash:
    serializedVersion: 2
    Hash: 7822d7233d93c2eed79db302c7a76c72


    Looks like a bug to me.
     
  2. amjaliks

    amjaliks

    Joined:
    Jul 11, 2015
    Posts:
    159
    It started in 2018.4.8f1.
     
    Last edited: Dec 12, 2019
    tigerleapgorge likes this.
  3. mh114

    mh114

    Joined:
    Nov 17, 2013
    Posts:
    295
    Hmm, we were using .8 for quite a long time (skipped over .9 due to lots of known issues) and I don't think we ever had this. In any case, I'll try to reproduce on a clean project and report a bug if I can get it to happen.
     
  4. mh114

    mh114

    Joined:
    Nov 17, 2013
    Posts:
    295
    Of course I didn't get it to deterministically happen on a new project. :( The atlas hashes changed once when I switched project and back to the repro, but then I couldn't get it to happen again. In our own project every atlas keeps changing almost all the time, not sure if it's triggered by entering play mode or saving anything or what..
     
  5. amjaliks

    amjaliks

    Joined:
    Jul 11, 2015
    Posts:
    159
    Sorry, typo... It started in 2018.4.9f1.

    My project was on 2018.3.5f1. I switched it to 2018.4.10f1, noticed this bug. Then I found your post and I tried both 2018.4.9f1 and 2018.4.8f1.
    I will still stick with 2018.4.8f1 and will hope it has no any other bugs that ruins my project.
     
    Last edited: Oct 9, 2019
  6. amjaliks

    amjaliks

    Joined:
    Jul 11, 2015
    Posts:
    159
    I couldn't replicate this in a fresh project too. A hash stays all zeros after all my attempt.

    I observer this only in my actual project.
     
  7. Pickyguy

    Pickyguy

    Joined:
    Aug 24, 2013
    Posts:
    13
    I just noticed this issue in Unity 2018.4.10 LTS. I tried to modify stored hash zero in each spriteatlas files, but hashes are changed after building asset bundles. This is very frustrating situation. I am worried about that modified hashes incur unnecessary asset updates.
     
  8. DarekRusin

    DarekRusin

    Joined:
    Nov 15, 2013
    Posts:
    47
  9. Venkify

    Venkify

    Unity Technologies

    Joined:
    Apr 7, 2015
    Posts:
    644
    Hi, could you please report a bug with a simple repro project ? I am unable to reproduce it with a new project in 2018.4.10. I am trying with an older project and will keep this thread posted.
     
  10. Pickyguy

    Pickyguy

    Joined:
    Aug 24, 2013
    Posts:
    13
    Hi, @Venkify

    Our project is checked out on iMac (iOS) and Windows (Android)

    1. Build on iMac and commit modified spriteatlases.
    2. Pull spriteatlas files on Windows.
    3. Build on Windows, new hashes are generated again. commit spriteatlas files
    4. Pull spriteatlas files on iMac, repeat step 1.

    I didn't try to reproduce with another simple project yet, I'm in tight schedule now.
     
    tigerleapgorge likes this.
  11. Venkify

    Venkify

    Unity Technologies

    Joined:
    Apr 7, 2015
    Posts:
    644
    storedHash represents the hash of current spriteAtlas cache available in the Library\AtlasCache folder.

    Prior to introduction of storedHash, every time Playmode is entered or player built, SpriteAtlas will be set to Dirty regardless of whether its packed or fetched from this cache. This created issues in Version Control Software as even though there is no change in SpriteAtlas contents, it is checked out( because due to dirty flag the same contents were just being overwritten to the file).

    With introduction of storedHash, SpriteAtlas object is only dirtied if the Atlas actually got packed and not fetched from cache.

    This is by design. When you move project to a new machine, there wont be ActiveCache folder available. Hence it repacks and set SpriteAtlas to dirty. However for the same set of sprites, with the same settings, if hash keeps changing, please let us know. We will take a look asap with immediate priority.
     
  12. amjaliks

    amjaliks

    Joined:
    Jul 11, 2015
    Posts:
    159
    I have no any issues with VCS/Git till I tried 2018.4.10, but now I have.

    I was able to reproduce this bug fo a moment in a fresh project created with 2018.4.10, but now it gone. It is a bit random in its nature.
    I have noticed the hash changes, when I switch to another platform and build.
     
  13. Pickyguy

    Pickyguy

    Joined:
    Aug 24, 2013
    Posts:
    13
    Do you mean that identical stored hash is generated between any platforms if they share same sprite atlas file? (This is my expectation)

    Otherwise, once sprite atlas is dirtied because packed atlas isn’t in cache, stored hashes could be different between machines or target platforms even though sprite atlas setting isn’t changed?

    I had checked out sprite atlas file on each machines, with no modification. I expected that no more new hashes are generated eventually when I repeat step 1-4, but It didn’t in my test. It shouldn’t make new hash in step 3.
     
  14. Noname1122

    Noname1122

    Joined:
    Jun 19, 2019
    Posts:
    13
    Hiya!
    Having just updated to 2019.3.0b6, I can confirm that this issue is now affecting all of my SpriteAtlases, across the project. Each time a dev is commits, they each seem to created new SpriteAtlas hashes, causing all those files to re-commit. I didn't have this issue in 2019.2 current release, so this seems new to somewhere in the .3 beta.
     
  15. mh114

    mh114

    Joined:
    Nov 17, 2013
    Posts:
    295
    This is indeed the problem, neither the sprites nor the settings have changed in any way. We do multiplatform development, but in this case the problem happens locally on the same machine (well, on several Windows machines). But it does seem very random, we used to get it constantly last week, but on last Friday it seemed to stop from happening. And then I saw it again on my home PC.
     
  16. Venkify

    Venkify

    Unity Technologies

    Joined:
    Apr 7, 2015
    Posts:
    644
    We are looking into this and will update this thread asap.
     
    Noname1122 and mh114 like this.
  17. mh114

    mh114

    Joined:
    Nov 17, 2013
    Posts:
    295
    Any news on this? I'm willing to test a custom debug build of 2018 LTS on our project if you want to add some debug editor logging to atlas hashing, to help track this down.
     
  18. Venkify

    Venkify

    Unity Technologies

    Joined:
    Apr 7, 2015
    Posts:
    644
    We have implemented a fix and we are currently testing it. Will post an update as soon as its available.
     
    fherbst, DarekRusin, v01pe_ and 3 others like this.
  19. fherbst

    fherbst

    Joined:
    Jun 24, 2012
    Posts:
    802
    Just wanted to report this as a bug and found this thread.
    Count me in for thinking that the hash should not change on platform change. It should hash which files are in, and the need to repack for another platform should be handled by the AssetDatabase itself, not some hash stored in a file on disk (as for all other files).
     
    amjaliks and DarekRusin like this.
  20. DarekRusin

    DarekRusin

    Joined:
    Nov 15, 2013
    Posts:
    47
    Exactly. Anything platform related should be kept out of source control. For devs like us, constantly switching between iOS and Android, it's a mess and with each commit we have to:

    * carefully filter out the NOISE and make sure not to commit those excessive hash changes
    * at the same time we have to watch out, because some of the files might have VALID atlas changes we'd want to commit
    * and when we do accidentally commit those hash changes than there's the dance with resolving CONFLICTS which everybody loves, especially artists ;)

    So yeah, I hope it was never intended as a feature, but just an ugly regression.

    @Venkify any idea on when we could expect the fix? I was counting on 2018.4.12 but it looks like it didn't make it yet.
     
    fherbst and amjaliks like this.
  21. mh114

    mh114

    Joined:
    Nov 17, 2013
    Posts:
    295
    I want to point out that for us this problem happens constantly, no platform changes needed. Just staying on Windows and we still get this daily, in fact just today I must've discarded those pesky atlas hash changes for at least two dozen times, for all of our atlases. These seconds add up and I must say this has been one of the most annoying Unity bugs for me personally. :/
     
    DarekRusin likes this.
  22. Venkify

    Venkify

    Unity Technologies

    Joined:
    Apr 7, 2015
    Posts:
    644
    Will post an update once the fix lands to 2018.4 version. This fix will ensure storedHash only changes if packing is required while entering playmode or building.
    @mh114 @DarekRusin @fherbst @amjaliks @Pickyguy @Noname1122 Agree with all your inputs. Will further investigate and fix storedHash so SpriteAtlas Object is only dirty if Inputs change. I will keep this thread updated. Apologies for the inconvenience caused.
     
  23. kobyle

    kobyle

    Joined:
    Feb 23, 2015
    Posts:
    92
    @Venkify this still exists in 2019.2.9, any solution?
     
  24. DarekRusin

    DarekRusin

    Joined:
    Nov 15, 2013
    Posts:
    47
    @Venkify I see that the new 2018.4.13 notes don't mention this fix so I'm guessing it didn't make it through?

    Meanwhile, I have 100+ files ready to commit in my project and only dozen of those are my changes. Rest is SpriteAtlas hash noise, which I have to sort through EVERY... DARN... TIME... ;)

    If this fix won't make it to 2018.4.14 either, can you please help us with a work around?
     
    mh114 likes this.
  25. Venkify

    Venkify

    Unity Technologies

    Joined:
    Apr 7, 2015
    Posts:
    644
    @DarekRusin The fix has been backported to 2018.4 and will be available on 2018.4.14 version. I will update once its released.
     
  26. Venkify

    Venkify

    Unity Technologies

    Joined:
    Apr 7, 2015
    Posts:
    644
    The fix has been backported to 2019.2 and will be available on 2019.2.15f1.
     
    luizb_unity and DarekRusin like this.
  27. Venkify

    Venkify

    Unity Technologies

    Joined:
    Apr 7, 2015
    Posts:
    644
    And for 2019.3 it will be available on 2019.3.0f1
     
    Last edited: Nov 25, 2019
  28. xiaoguangxing

    xiaoguangxing

    Joined:
    May 15, 2019
    Posts:
    14
    Is there planned time for 2018.4.14 version? It seems to make a different asset bundle hash on the same assets between two builds, which leads to unpredictable size of update when calculate patch which dependent on the hash of asset bundles.
     
    Last edited: Nov 27, 2019
  29. tadakun111

    tadakun111

    Joined:
    Jan 22, 2019
    Posts:
    2
    @Venkify This problem still exists in 2019.2.15f1. Even on the same platform, when I push the play button, SpriteAtlases change their hash.
     
  30. Venkify

    Venkify

    Unity Technologies

    Joined:
    Apr 7, 2015
    Posts:
    644
    @tadakun111 As mentioned above, the hash will change once when atlas is packed and will remain the same as long as there are no changes in Inputs or platform change. We are actively working on removing the need for hash to be stored in the Asset. Will post an update as soon as possible.
     
  31. tadakun111

    tadakun111

    Joined:
    Jan 22, 2019
    Posts:
    2
    @Venkify Even though Sprite Atlas setting is not changed, Sprite Atlas stored hash keep changing when atlas is built on a different machine.

    To reproduce:
    1. Build on Macbook and commit modified SpriteAtlases.
    2. Pull SpriteAtlases files on Windows PC.
    3. Open the project on Windows PC , then push the play button.
    4. SpriteAtlases change their hash.(Macbook and Windows PC's target platform is the same platform(Android).)

    Even if two diffrent Windows PC, it became the same result.
     
  32. DarekRusin

    DarekRusin

    Joined:
    Nov 15, 2013
    Posts:
    47
    Please don't crush my dreams for this to finally be fixed, for I've been checking the Unity downloads page daily, wishing and hoping to see 2018.4.14 there, with which our pain is promised to be gone and forgotten!
     
  33. Venkify

    Venkify

    Unity Technologies

    Joined:
    Apr 7, 2015
    Posts:
    644
    Just to add clarity for the current fix as mentioned above

    The current fix will ensure storedHash only changes if packing is required while entering playmode or building. (either change of Inputs/Platforms).

    We are working on a fix to remove the need to hash to be stored in the asset. Will post an update on that asap.
     
    tadakun111 likes this.
  34. DarekRusin

    DarekRusin

    Joined:
    Nov 15, 2013
    Posts:
    47
    Oh no... that sounds terrible. So you're saying that in our case, when we're building and switching between platforms, this fix in 2018.4.14 won't fix anything?

    1. What are our options for the next few weeks/months then?
    2. When was this bug introduced, precisely?
    3. What is the last good version of Unity?
     
  35. mh114

    mh114

    Joined:
    Nov 17, 2013
    Posts:
    295
    We didn't have this problem in 2018.4.8.
     
    amjaliks and DarekRusin like this.
  36. xiaoguangxing

    xiaoguangxing

    Joined:
    May 15, 2019
    Posts:
    14
    @Venkify Does this bug affects the hash/crc of asset bundle which build with BuildAssetBundleOptions.DeterministicAssetBundle enabled?
     
    DarekRusin likes this.
  37. henriqueranj

    henriqueranj

    Joined:
    Feb 18, 2016
    Posts:
    177
    Also adding my voice to this thread as I keep getting the hashes changing every now and then when building and/or entering play mode. This happened in a project that was migrated to Unity 2018.4.13f1.
     
  38. DarekRusin

    DarekRusin

    Joined:
    Nov 15, 2013
    Posts:
    47
    All right... so I checked version 2018.4.8 and indeed, as soon I downgraded it removed all mentions of stored hash from sprite atlases. I mean, entries like this one were removed:

    Code (csharp):
    1.     storedHash:
    2.       serializedVersion: 2
    3.       Hash: 554664114ea72e86abc210179f7ccf8a
    So it looks like this stored hash thing was actually added somewhere between 2018.4.9 and 2018.4.10.

    It was said earlier that "We are working on a fix to remove the need to hash to be stored in the asset." but apparently it's not like it was really needed there, at least not until very recently? I'm guessing it was an attempt to quickly fix some other issue (perhaps this one?) that resulted in sprite atlas assets being broken like this.

    And since apparently 2018.4.14 won't fix this the only viable option for production use seems to be a downgrade to 2018.4.8.

    Is there a better way out or a workaround, @Venkify ? Please advise.
     
    xiaoguangxing likes this.
  39. menshikh

    menshikh

    Joined:
    Mar 11, 2016
    Posts:
    7
    fherbst and DarekRusin like this.
  40. Venkify

    Venkify

    Unity Technologies

    Joined:
    Apr 7, 2015
    Posts:
    644
    Nice. Here is an alternate solution that resets storedHash after exiting Playmode or when building Player automatically :

    Code (CSharp):
    1. using System.Collections.Generic;
    2. using System.Reflection;
    3. using UnityEngine;
    4. using UnityEditor;
    5. using UnityEditor.Build;
    6. using UnityEditor.Build.Reporting;
    7. using UnityEditor.U2D;
    8. using UnityEngine.U2D;
    9.  
    10. [InitializeOnLoad]
    11. public static class ClearStoredHash
    12. {
    13.    
    14.     static ClearStoredHash()
    15.     {
    16.         EditorApplication.playmodeStateChanged += ModeChanged;
    17.     }
    18.     static void ModeChanged ()
    19.     {
    20.         if (!EditorApplication.isPlayingOrWillChangePlaymode && EditorApplication.isPlaying )
    21.         {
    22.             ClearStoredHashForSpriteAtlases();
    23.         }
    24.     }
    25.  
    26.     public static void ClearStoredHashForSpriteAtlases()
    27.     {
    28.         string[] guids = AssetDatabase.FindAssets("t:SpriteAtlas");
    29.         List<string> atlasAssets = new List<string>();
    30.  
    31.         foreach (string guid in guids)
    32.         {
    33.             var path = AssetDatabase.GUIDToAssetPath(guid);
    34.             atlasAssets.Add(path);
    35.         }
    36.      
    37.         // Clear StoredHash
    38.         Debug.Log("Clear Stored Hash of Atlases");
    39.         for (int i = 0; i < atlasAssets.Count; ++i)
    40.         {
    41.             SpriteAtlas atlas = AssetDatabase.LoadAssetAtPath<SpriteAtlas>(atlasAssets[i]);
    42.             SerializedObject serObj = new SerializedObject(atlas);
    43.             var storedHashPropBytes = serObj.FindProperty("m_EditorData.storedHash.bytes[0]");
    44.             var storedhashPropString = serObj.FindProperty("m_EditorData.storedHash.Hash");
    45.             if (null != storedHashPropBytes)
    46.             {
    47.                 var storedHashPropBytes0 = serObj.FindProperty("m_EditorData.storedHash.bytes[0]");
    48.                 var storedHashPropBytes1 = serObj.FindProperty("m_EditorData.storedHash.bytes[1]");
    49.                 var storedHashPropBytes2 = serObj.FindProperty("m_EditorData.storedHash.bytes[2]");
    50.                 var storedHashPropBytes3 = serObj.FindProperty("m_EditorData.storedHash.bytes[3]");
    51.                 var storedHashPropBytes4 = serObj.FindProperty("m_EditorData.storedHash.bytes[4]");
    52.                 var storedHashPropBytes5 = serObj.FindProperty("m_EditorData.storedHash.bytes[5]");
    53.                 var storedHashPropBytes6 = serObj.FindProperty("m_EditorData.storedHash.bytes[6]");
    54.                 var storedHashPropBytes7 = serObj.FindProperty("m_EditorData.storedHash.bytes[7]");
    55.                 var storedHashPropBytes8 = serObj.FindProperty("m_EditorData.storedHash.bytes[8]");
    56.                 var storedHashPropBytes9 = serObj.FindProperty("m_EditorData.storedHash.bytes[9]");
    57.                 var storedHashPropBytesA = serObj.FindProperty("m_EditorData.storedHash.bytes[10]");
    58.                 var storedHashPropBytesB = serObj.FindProperty("m_EditorData.storedHash.bytes[11]");
    59.                 var storedHashPropBytesC = serObj.FindProperty("m_EditorData.storedHash.bytes[12]");
    60.                 var storedHashPropBytesD = serObj.FindProperty("m_EditorData.storedHash.bytes[13]");
    61.                 var storedHashPropBytesE = serObj.FindProperty("m_EditorData.storedHash.bytes[14]");
    62.                 var storedHashPropBytesF = serObj.FindProperty("m_EditorData.storedHash.bytes[15]");
    63.                 string hash128 = storedHashPropBytes0.intValue.ToString("x") + storedHashPropBytes1.intValue.ToString("x") +
    64.                                  storedHashPropBytes2.intValue.ToString("x") + storedHashPropBytes3.intValue.ToString("x") +
    65.                                  storedHashPropBytes4.intValue.ToString("x") + storedHashPropBytes5.intValue.ToString("x") +
    66.                                  storedHashPropBytes6.intValue.ToString("x") + storedHashPropBytes7.intValue.ToString("x") +
    67.                                  storedHashPropBytes8.intValue.ToString("x") + storedHashPropBytes9.intValue.ToString("x") +
    68.                                  storedHashPropBytesA.intValue.ToString("x") + storedHashPropBytesB.intValue.ToString("x") +
    69.                                  storedHashPropBytesC.intValue.ToString("x") + storedHashPropBytesD.intValue.ToString("x") +
    70.                                  storedHashPropBytesE.intValue.ToString("x") + storedHashPropBytesF.intValue.ToString("x");
    71.                 Debug.LogFormat("{0} old storedHash for reference {1}", atlas.name, hash128);
    72.                 storedHashPropBytes0.intValue = 0;
    73.                 storedHashPropBytes1.intValue = 0;
    74.                 storedHashPropBytes2.intValue = 0;
    75.                 storedHashPropBytes3.intValue = 0;
    76.                 storedHashPropBytes4.intValue = 0;
    77.                 storedHashPropBytes5.intValue = 0;
    78.                 storedHashPropBytes6.intValue = 0;
    79.                 storedHashPropBytes7.intValue = 0;
    80.                 storedHashPropBytes8.intValue = 0;
    81.                 storedHashPropBytes9.intValue = 0;
    82.                 storedHashPropBytesA.intValue = 0;
    83.                 storedHashPropBytesB.intValue = 0;
    84.                 storedHashPropBytesC.intValue = 0;
    85.                 storedHashPropBytesD.intValue = 0;
    86.                 storedHashPropBytesE.intValue = 0;
    87.                 storedHashPropBytesF.intValue = 0;
    88.             }
    89.             else
    90.             {
    91.                 if (null != storedhashPropString)
    92.                 {
    93.                     storedhashPropString.stringValue = "";
    94.                 }
    95.             }
    96.          
    97.             serObj.ApplyModifiedProperties();
    98.             EditorUtility.SetDirty(atlas);
    99.             AssetDatabase.SaveAssets();
    100.         }
    101.     }
    102.  
    103. }
    104.  
    105. // Automatically called during Builds.
    106. class ClearStoredHashPreprocessBuild : IPreprocessBuildWithReport
    107. {
    108.     public int callbackOrder
    109.     {
    110.         get { return 0; }
    111.     }
    112.     public void OnPreprocessBuild(BuildReport report)
    113.     {
    114.         Debug.Log("ClearStoredHashPreprocessBuild");
    115.         ClearStoredHash.ClearStoredHashForSpriteAtlases();
    116.     }
    117. }
    PS:
    Please note this is an experimental script that solves the issue where storedHash changes if Atlas is packed during Enter Play mode or Build. Please ensure you backup your project before giving a test run.
    Also please note that we are close to getting it fully fixed. Will update this thread once its available.
     
    DarekRusin likes this.
  41. mh114

    mh114

    Joined:
    Nov 17, 2013
    Posts:
    295
    Yeah, 2018.4.14 is not really a solution.. :/

    Maybe just revert whatever hash related changes you did after 2018.4.8..? ;)
     
    OC01 and amjaliks like this.
  42. Moritz5thPlanet

    Moritz5thPlanet

    Joined:
    Feb 5, 2019
    Posts:
    73
    This hash keeps definitely changing for us, both in Unity 2019.2.14f1 and in 2019.3.0f1 on every clean checkout, branch change, etc.

    Code (JavaScript):
    1. diff --git a/tintin-unity/Assets/Art/UI/Atlas_Common.spriteatlas b/tintin-unity/Assets/Art/UI/Atlas_Common.spriteatlas
    2. index d2da4b316..d7309fa86 100644
    3. --- a/tintin-unity/Assets/Art/UI/Atlas_Common.spriteatlas
    4. +++ b/tintin-unity/Assets/Art/UI/Atlas_Common.spriteatlas
    5. @@ -41,7 +41,7 @@ SpriteAtlas:
    6.      bindAsDefault: 1
    7.      storedHash:
    8.        serializedVersion: 2
    9. -      Hash: bcd78405a58a3c2916fb2bc94c14b499
    10. +      Hash: ac6a0c6d9258801c0ba13b7c5563ca62
    11.    m_MasterAtlas: {fileID: 0}
    12.    m_PackedSprites:
    13.    - {fileID: 21300000, guid: 72060500a71aa4a948cfbd05dc98ce0b, type: 3}
    14. diff --git a/tintin-unity/Assets/Art/UI/Atlas_Rewards.spriteatlas b/tintin-unity/Assets/Art/UI/Atlas_Rewards.spriteatlas
    15. index dcfca7b68..c39b6d565 100644
    16. --- a/tintin-unity/Assets/Art/UI/Atlas_Rewards.spriteatlas
    17. +++ b/tintin-unity/Assets/Art/UI/Atlas_Rewards.spriteatlas
    18. @@ -35,7 +35,7 @@ SpriteAtlas:
    19.      bindAsDefault: 1
    20.      storedHash:
    21.        serializedVersion: 2
    22. -      Hash: 0a21268edbead71a49df0564aab80ac8
    23. +      Hash: f38b45e7665d1141b3726541d9cf1fa3
    24.    m_MasterAtlas: {fileID: 0}
    25.    m_PackedSprites:
    26.    - {fileID: 21300000, guid: 6ae00b0370c528e44af9efe4cdbb6668, type: 3}
    27. diff --git a/tintin-unity/Assets/Content/Maps/001_cgc_brussels/Stages/SourcePNGs/001_cgc_brussels_atlase.spriteatlas b/tintin-unity/Assets/Content/Maps/001_cgc_brussels/Stages/SourcePNGs/001_cgc_brussels_atlase.spriteatlas
    28. index ead94902d..fbcc46f3b 100644
    29. --- a/tintin-unity/Assets/Content/Maps/001_cgc_brussels/Stages/SourcePNGs/001_cgc_brussels_atlase.spriteatlas
    30. +++ b/tintin-unity/Assets/Content/Maps/001_cgc_brussels/Stages/SourcePNGs/001_cgc_brussels_atlase.spriteatlas
    31. @@ -54,7 +54,7 @@ SpriteAtlas:
    32.      bindAsDefault: 1
    33.      storedHash:
    34.        serializedVersion: 2
    35. -      Hash: 271e508a3511f34f2a69a2ab492a52fb
    36. +      Hash: 93daeb2433fda52dffebbf55e44ccc3c
    37.    m_MasterAtlas: {fileID: 0}
    38.    m_PackedSprites:
    39.    - {fileID: 21300000, guid: d71cf82084f3edb41b7ba5347d5fdbbc, type: 3}
    40.  
     
    Last edited: Dec 17, 2019
    fherbst likes this.
  43. GustavNinja

    GustavNinja

    Joined:
    Jun 13, 2016
    Posts:
    96
    Any update on a fix for this? Will this fix be available for 2019.2?
     
  44. Venkify

    Venkify

    Unity Technologies

    Joined:
    Apr 7, 2015
    Posts:
    644
    A fix has been implemented to remove storedHash and should be available in the next release of 2020.1 alpha.
    It will be backported to older versions subsequently. Will post an update once they are available.
     
    tadakun111 likes this.
  45. rzubek

    rzubek

    Joined:
    Aug 21, 2014
    Posts:
    72
    Just curious if the fix is being backported to 2019.2?

    The changing storedHash bug is still happening in 2019.2.17f1
     
    naoki_uniiity likes this.
  46. Radneto

    Radneto

    Joined:
    Mar 10, 2015
    Posts:
    5
    Could you let us know if it's coming to Unity 2018 LTS releases please?
     
  47. Venkify

    Venkify

    Unity Technologies

    Joined:
    Apr 7, 2015
    Posts:
    644
    The fix will be available in the following versions :
    2020.1 => 2020.1.0a19
    2019.3 => 2019.3.0f5

    2019.2 => 2019.2.19f1

    2018.4 => 2018.4.16f1

    This should fix removes storedHash from SpriteAtlas. Thank you for your patience while this issue was resolved.
     
  48. mh114

    mh114

    Joined:
    Nov 17, 2013
    Posts:
    295
    2018.4.16 has removed the storedHash from atlases as promised, so hopefully this issue is now behind us. I still question the decision to include this kind of change in a LTS release, especially considering how badly it broke things.
     
    DarekRusin likes this.
  49. Venkify

    Venkify

    Unity Technologies

    Joined:
    Apr 7, 2015
    Posts:
    644
    We have been addressing a few issues and improve packing for very large projects and this somehow slipped. Apologies for the inconvenience caused.
     
    mh114 likes this.
  50. fegabe

    fegabe

    Joined:
    Jan 3, 2015
    Posts:
    18
    Hello,

    I'm glad to see that is going to be fixed, I work in a small team using macOS and Windows and it's very annoying every time we need to use git. Though we're close to a production release so we can't risk now to upgrade our Unity version. That's why I came up with a solution that it's maybe useful for others. This will allow to ignore the `Hash: XXXXXXXXXXXXXXXX` line inside spriteatlas files using git filters

    1. Create or edit a gitattributes file iniside `<project root>/.gitattributes`. This change will be committed into repo and shared with your others team mates

    Code (JavaScript):
    1. *.spriteatlas filter=ignore-unity-spriteatlas-hash
    2. Define the filter inside `<project root>/.git/config`. This change won't be committed, so you have to ask other team members to do the same

    Code (JavaScript):
    1. [filter "ignore-unity-spriteatlas-hash"]
    2.         clean = sed '/Hash: [[:xdigit:]]/'d
    3.         smudge = cat
    I hope this helps you too