2D Toolkit Forum

2D Toolkit => Support => Topic started by: nachobeard on September 05, 2017, 11:48:59 pm

Title: sprite shimmering after upgrading from unity 4.7 to unity 2017
Post by: nachobeard on September 05, 2017, 11:48:59 pm
hello

I just spent a little while upgrading my project from unity 4.7 (using 2dtk 2.5.6) to unity 5 (using 2dtk 2.5.8.6).

so far the transition is going fine except that I get this weird shimmering pixels on sprites.

I've attached two GIFs where you can see what I mean.  in both GIFs the camera is locked to the main character, and the main character is moving vertically (shimering2.gif is just a zoomed-in version of the first).  It seems that having the camera locked to the main character and then having the main character move vertically makes it more noticeable.

the sprite doesn't have any weird scaling or anything like that.  it was literally working 100% ok in 2.5.6

any suggestions as to what might be causing this?

thanks.
Title: Re: sprite shimmering after upgrading from unity 4.7 to unity 2017
Post by: nachobeard on September 06, 2017, 12:11:30 am
I took a screenshot of the old project running on the old version and compared to the new one.

you'll need to open the image and zoom in a little but you can easily see that in the new project the feet are misaligned wrt the shadow and the platform (where the pink arrows are pointing).

as you can see in the old version everything aligned perfectly.
Title: Re: sprite shimmering after upgrading from unity 4.7 to unity 2017
Post by: nachobeard on September 06, 2017, 01:07:32 am
and here's another comparison shot of what the screen output looks like with x1 zooming, before and after.
for this one you'll really need to download the image and zoom in in photoshop or whatever, you'll see there's something's going on with the main character sprite in the chin and feet (compare to the left, which is correct).  it seems to be skipping some rows and duplicating others.

there's also something going on with the platform buttons, an entire row of pixels has disappared and one of the other rows has been duplicated.

incidentally I should mention I'm the guy who you sent some code to fix pixel seams in between tiles.  it was a while back.
anyway adding these code modifications doesn't seem to have any effect.  thought I should mention it just in case.

regards.
Title: Re: sprite shimmering after upgrading from unity 4.7 to unity 2017
Post by: nachobeard on September 07, 2017, 10:02:26 am
hello again

seems this is something related to needHalfTexelOffset in line 664 of tk2dCamera.cs

Code: [Select]
// Only need the half texel offset on PC/D3D, when not running in d3d11 mode
bool isWebPlayer = false;
#if !UNITY_5_4_OR_NEWER
isWebPlayer = Application.platform == RuntimePlatform.WindowsWebPlayer;
#endif

bool needHalfTexelOffset = (Application.platform == RuntimePlatform.WindowsPlayer ||
isWebPlayer ||
Application.platform == RuntimePlatform.WindowsEditor);

it seems the texel offset is being applied on D3D9, which according to your own comment in the code it shouldn't be.
(switching to D3D11 gets rid of the shimmering)

could you do an official fix for this?

thanks
Title: Re: sprite shimmering after upgrading from unity 4.7 to unity 2017
Post by: unikronsoftware on September 07, 2017, 12:47:58 pm
Hi,

Sorry for the delay - I am waiting to get back to my office so I can test this on a windows computer. But yes, it should be testing if its in DX11 - I thought that change had already been made, but perhaps never got merged... I shall investigate.
Title: Re: sprite shimmering after upgrading from unity 4.7 to unity 2017
Post by: nachobeard on September 08, 2017, 12:04:51 am
ok! glad I could help a little bit
Title: Re: sprite shimmering after upgrading from unity 4.7 to unity 2017
Post by: unikronsoftware on September 10, 2017, 09:35:55 pm
Hi,

I've been investigating this and I'm getting a bit confused. Old unity, in dx9 NEEDs the 0.5 texel offset. DX11 on the same version didn't. I am going to start digging up older versions to try to get to the bottom of this, so I can create an appropriate workaround that works on different versions.

Do you have a temporary fix for your current version now?
Title: Re: sprite shimmering after upgrading from unity 4.7 to unity 2017
Post by: nachobeard on September 13, 2017, 12:18:12 am
Hi

I have a temporary fixed, but there are a few platforms and hw combinations I can't test, so an official fix would be welcome.

Thanks
Title: Re: sprite shimmering after upgrading from unity 4.7 to unity 2017
Post by: nachobeard on September 25, 2017, 11:24:47 am
hello

is this still giving you trouble or did you manage to solve it?
thanks.
Title: Re: sprite shimmering after upgrading from unity 4.7 to unity 2017
Post by: unikronsoftware on September 25, 2017, 11:36:40 pm
Hi,

I have a solution thats more or less tested, but I am travelling until this weekend. I would very much like to run some final tests before releasing this, it could have huge repercussions to lots of people if I make any mistakes. Hopefully this weekend.

Apologies for the inconvenience.
Title: Re: sprite shimmering after upgrading from unity 4.7 to unity 2017
Post by: unikronsoftware on October 04, 2017, 11:51:51 pm
Apologies for the delays but I have released an update with this issue fixed and tested with all the combinations of supported Unity versions (5.5+) and permutations. Let me know if it works for you
Title: Re: sprite shimmering after upgrading from unity 4.7 to unity 2017
Post by: nachobeard on November 11, 2017, 12:53:27 am
ah, I missed this somehow, will test asap!
thanks for taking a look at it.
Title: Re: sprite shimmering after upgrading from unity 4.7 to unity 2017
Post by: nachobeard on November 22, 2017, 11:41:15 am
hello,  I just updated to the new version of 2d toolkit, here are my findings.

I've tried running from the editor and also the windows standalone player (unity 2017.2.0f3).  here are the results:

-using d3d9: still get shimmering (if I just set halfTexel to 0 in the code, the shimmering goes away and it looks correct)
-using d3d11: no shimmering

it would seem d3d9 doesn't need the half texel offset, at least in my version of unity.
maybe old unity needs it like you were saying in a previous post.

do you think this issue might also appear in iOS? I can't check easily.

ty
Title: Re: sprite shimmering after upgrading from unity 4.7 to unity 2017
Post by: unikronsoftware on November 24, 2017, 01:09:05 am
Hi,

This won't be an issue in iOS as far as I am aware. Its a d3d9 issue to be specific.
Its weird that you can still see issues with the version submitted here, it was 100% reproducible on mine and behaved as I expected it (I had / still have a test case that demonstrates this).

I will look in 2017.2 and see what it does in there...
Title: Re: sprite shimmering after upgrading from unity 4.7 to unity 2017
Post by: nachobeard on January 14, 2018, 10:48:02 pm
hello!

was this something you were able to look at in the new release?
I looked at the notes but couldn't tell.

many thanks
Title: Re: sprite shimmering after upgrading from unity 4.7 to unity 2017
Post by: unikronsoftware on January 17, 2018, 10:33:27 pm
Hi,

I did at the time, but now Unity 2018 is getting released so I'm going to look at it again!
Caveat - If any fix is required for 2018 it possibly won't be in the next tk2d update.