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”
