Unity is pain

Hello all and sorry for my bad english.
I want to tell about my experience on unity last time.

I’m VFX creator of unity assetstore https://assetstore.unity.com/publishers/5224

Do you want to know how much time I spend on it?
Creating effects takes about 10% of the time… But I’m VFX creator…
WTF?
Because unity it’s pain for me.
Unity is very cool when you’re beginner. But if you want to create something beautiful, then hell begins.

Why am I writing this message? Because I again have undocumented features that I hate.
HDR color of materials in the linear space of the old rendering and HDRP / LWRP are different colors … And this is not even said anywhere.
I want to create effects, I do not want to deal with thousands of Unity problems.

Here is a list of platforms that I should support:
PC, mobiles, consoles, webGL (and other, which I can’t test)
Rendering API : VertexLit, Forward, Deffered, OpenGL, OpenGL 2.0/3.0
VR: Single pass/multi pass, instanced single pass
Color space: gamma/linear
And new rendering SRP (LWRP and HDRP).

How I did an effects?
Default particle shaders (particle/additive/blended) are not enough to create beautiful effects
Also they have colormask which bad on android.

Ok I’ll write myself shaders!
Unity does not have visual graph for shaders? Ok, I’ll learn shader language and will write myself uber shader for particles!
I need support lights for forward/deffered, ambient lights, shadows, fog, instancing, vr, linear/gamma, etc
Some features of shaders may not work and this is not possible to control. For example VFetch (vertex changing in shaders, like a water) does not supported on all openGLES 2.0 devices. But most of effects uses this feature.
Unity have limit of shader defines and after 10-15 defines in a shader I have perfomance spikes few seconds for compilation in runtime.
Right now unity released LWRP and HDRP and it’s pain for me again.
No documenation how to upgrade my shader. No multipass shaders. New light system, etc.
Ok, I’ll write myself light system (and right now It works everywhere)
All my shaders which used “surface shader” replaced to vert/frag shader with custom lights.

What about decals? Unity have projectors? Ok I’ll write custom shader for decals.
Projectors does not supported lights? Why? It’s unity undocumented feature!
Also, 1 decal + terrain = 2 terrain passes. Omg…
1 decal with empty scene = bad perfomance on android devices? Omg…
Ok I’ll write simple quad decals for android then.
New srp rendering released? Oh, projectors removed from LWRP? Ok, I’ll support my own screen space decals for everywhere.

What about distortions? (water, heat distortions, etc)
“grabpass” is bad on android. 1-2 fps with simple shader and empty scene?
Ok I’ll write myown grabpass using additional camera and small render texture.
Why not command buffer? Because it does not work with transparent objects.
Also, command buffer without HDR does not work with half screen size (or other size), again undocumented features…

After few years, unity released SRP rendering and removed “grabpass” for all. OMG?
Also, camera rendering does not work too.
How I should implement custom distortions? (for example water?)
Unity don’t have documentations… But people use lwrp / hdrp and my effects right now!
I’ll find all information about distortion rendering in the source code of unity.
What? Unity does not supported distortions with transparent pass? (like old grabpass)
I’ll find any methods for rendering transparent with distortions for LWRP and HDRP.
I’ll write several distortions shaders for several platform with several script for different rendering. Ok.

What about posteffects? (I use bloom for all effects).
It’s have bad perfomance on mobiles? undocumented feature: OnRenderImage always slow on android by default!
Ok I’ll write myself bloom for mobiles.
What about MRT rendering (custom shader which write color to first buffer and hdr brigthess to second)?
Unity have bug and MRT does not work correctly on half android devices…
Ok I’ll render bloom using another method. I’ll use rendering to texture and use it. But on last unity version it have again some bugs and when it will be fixed I don’t know.

With new rendering, unity replaced “_CameraDepthTexture” on LWRP/HDRP which I use for decals and other shader? I’ll write different shaders for different renderings again.

What about VR?
Unity have model “tick-tock” like a intel.
VR works → bug fixed → VR works → bug fixed, etc.
Each new version of unity can have VR bugs.

What about standard particle system?
Do you like bugs, when your sprite sheet does not work on unity 5.5 when you use sprite 7x5? But other sprite (for example 5x7) works? Lol.
Do you like noise module? Then you will have editor hanging for 5+ seconds when you try to change the particle system parameters.
Do you like new mesh aligment = view by default with new unity 2017?
New matrices from world to local space, ok I’ll rewrite shaders again.
What about pivot offset on different unity versions?
and other 100500 bugs.

What about custom scripts?
Unity does not have visual editor? Ok I’ll learn c#.
CancelInvoke cause crash of unity on all versions? Ok I’ll rewrite it
Dictionary does not supported on IOS with aot compilation? Ok I’ll rewrite it again.
ParticleSystem.main.startSize.multiplier does not work as expected? unity undocumented feature!
Unity changed lineRendering.count on lineRendering.numberCount? Ok.
What? They again changed lineRendering.numberCount on lineRendering.setVertexCount? WTF? Why they did that all time?
And other bugs,

I have not described even half of the problems that I have.
I’m VFX creator? But why I should know shaders language, c#, unity bugs, undocumented features and should write basic things for creating effects? Decals, shaders, posteffects, etc.

After upgrading all my packages to lwrp/hdrp I’ll write myown particle system on GPU, because unity still does not have it. (instead of hdrp).

This is how I create “effects”

5 Likes

But damn, they are pretty sweet when youve finished :wink:

In package manager
4113862--360769--upload_2019-1-17_13-54-53.png
Unity 2018.x

1 Like

I dont think shader graph is compatible with built-in pipeline.
Amplify Shader Editor can be used with HD, LW and built-in.

Don’t know to be honest. But Shader Graph can be used to create effect, then optimize generated shader script, if needed, by hand.

1 Like

I know, its not compatible

Shader graph released about few mounths ago. It’s only for srp rendering and don’t have most features which I use.
For example, distortions, depth, vfetch etc.
Anyway I should write shaders for old rendering.

Shader graph and amplify does not supported distortions with transparent objects. Alas, most of my effects uses this feature.
I thinks other features, like a screen space decals, blended particles, triplanar maping, and other I can write on amplify in the future.
Anyway, this shaders isn’t main problem for me.
Big pain for me it’s undocumented features, changes of default unity behaviour (script/particles, etc), bugs and no built-in tools (like a decals on, gpu particles on all platforms, ussable ribbon trails, etc).

1 Like

Where is the guarantee that tomorrow unity will not change the standard behavior again? For example, a matrix of projection in particles, or a depth buffer? (as I described above)
And I should rewrite all shaders again.
I want to support unity 2017.1/3/4 and unity 2018.1/2/3 and future releases and I should rewrite all shaders for different unity versions and for all packages.
I would use only the latest version of the unity
Unfortunately, according to the statistics of the unity, about half of the people still use unity 2017 or less.

That’s exactly why I own three of your products now. I didn’t want to do all that myself. :slight_smile:

2 Likes

You have never gurantee

You are not alone on the wagon. Many of us wants to use latest version, but things may break and does break, when porting to newer version. And that is not only shaders, or effects. That is why, as you noticed, people use for production stable Unity versions, rather experimental, or even latest.

You can never guarantee compatibility. You are the producer of the asset, and need to weight, where value is against spent time. Either support older version only, or go through latest changes and implement them, having multi support.
Surely benefits are, if you start producing latest support of Unity as well. but is it worth now? Or maybe wait for next stable version.

Problem with supporting multiple versions, while adding features, the work required is growing exponentially. For single dev / artist etc, that is quite a bit of hurdle to carry.

If you believe effort you putting is inadequate, you can change pricing. Yes I know is not ideal. But that where quality stuff comes with a price. For which people appreciate.

There is a reason for it. If we have out of the box solutions with unity, there would’t be a priority to buy such nice assets, if “few clicks” would lead to similar effects.

Shader graph probably already decapitated some simple shader assets.

But for sure, we can not expect Unity, to stay and sit in dark ages. It need evolve. And not all may be unity directly “fault”.
GPU features also evolve.

1 Like

It is said everywhere on the graphics experimental preview forum. In addition it’s not due to be finished until 2019.3 so I am locking this with “tough luck”.

5 Likes