The #include flow (only the first Subshader level)
Category: Unity3D
[Good for shader debug] UAV RandomWriteTarget
Send data to c# script from shader: vert/frag and surface shaders!
Continue reading “[Good for shader debug] UAV RandomWriteTarget”
Shader Compilation
Import time – when you create a .shader file
- compile the shader variants only when needed, etc. platform, variants
Build time – when you build a player
- [level 1] ShaderLab -> glsl or hlsl or …etc
- if platform supports, from [level 2] hlsl -> IL or MetalSL to AIR…etc
- Cache identical shaders under Library/ShaderCache
- compile only not-yet-ever-compiled shaders (variants for this platform only)
Run time – when you open the app
- [level 3] glsl or hlsl or IL or AIR…etc -> driver (GPU bytecode)
- because target device is unknown for PC/mobile at buildtime
- Depends on driver, when to compile these codes e.g. only when it’s used
- use shader pre-warm to “use” shaders to trigger compilation
Sources from lukasc, robs, Unity Manual and https://blogs.unity3d.com/2014/05/06/shader-compilation-in-unity-4-5/
Mobile Graphics Optimization (for Artists)

Unite Europe 2016 – Optimizing Mobile Applications
https://www.youtube.com/watch?v=j4YAY36xjwE&list=PLX2vGYjWbI0RtPoeDoBUPnwY8USGra-pD&index=28
The uses of the 4 UVs
UnityObjectToClipPos(use float4 instead of float3)
In the past, we uses mul(UNITY_MATRIX_MVP, v.vertex) to convert vertex position from local to world space. v.vertex is float4 which has w component.
But in most cases w is = 1. To make vertex shader run faster, Unity replaced it with UnityObjectToClipPos(float3 pos), which ignores w component even you pass a float4 position instead of float3.
For some advanced users who still need the w component in their custom shaders, here is a cheaper UnityObjectToClipPos() function which respects the w component!😄
// More efficient than computing M*VP matrix product
inline float4 UnityObjectToClipPosRespectW(in float4 pos)
{
return mul(UNITY_MATRIX_VP, mul(unity_ObjectToWorld, pos));
}
This is provided by one of the Unity graphics developer, Yao.
MaterialPropertyDrawer in Shader – GUI without creating shaderGUI
📌Shader Tutorial Links
Unity Shader for Shuriken Particle System
I know many people are curious about how to make shaders available for Shuriken Particle System to use, the concept is very simple!!
Continue reading “Unity Shader for Shuriken Particle System”
2 Unity Packages are already up
As mentioned, the Lava Flowing Shader has been released for free on Unity Asset Store!
Link: https://www.assetstore.unity3d.com/en/#!/content/33635
As my knowledge about shader keeps growing slowly, I found that I can blend more than 2 layers of “UV”…..It is because the 2 texcoords limit only limits on input. Your FBX model can only have 2 UV channels but shader can make instances of the 2 UV texcoords and thus let you have more layers of texture blending. I will try to update the package later.
*************************
Another package Simple SeeThrough Shader has been released on Unity Asset Store also. Link: https://www.assetstore.unity3d.com/en/#!/content/33924


