Andrei Hilevich

Tools by a programmer, for programmers

I'm a software engineer with over 20 years of experience building complex systems. I make Unity tools that let programmers work the way they know best: in code, with their IDE, their version control and the habits they've built over the years.

Products

Shader Script

Write Unity shaders in C#.

Shader Script turns C# classes into shaders for the Universal and the High Definition Render Pipelines: every pass each pipeline needs, the material properties, and a Material Inspector that looks and works like the pipeline's own.

using Ahilevich.ShaderScript;

[Shader]
public class Glow : ShaderScript.Unlit
{
    [MainColor] public float4 Color { get; } = new float4(0.2f, 0.8f, 1, 1);
    [Range(0, 5)] public float Power { get; } = 2;

    public override void Vert(VertexInput IN, ref VertexOutput OUT) { }

    public override void Frag(FragmentInput IN, ref UnlitFragmentOutput OUT)
    {
        float3 viewDir = ShaderApi.GetWorldSpaceNormalizeViewDir(IN.positionWS);
        float rim = ShaderLib.FresnelEffect(IN.normalWS, viewDir, Power);
        OUT.albedo = (half3)(Color.rgb * rim);
    }
}
  • Plain C#. Code completion, refactoring, navigation and compile errors in your IDE.
  • One shader for URP and HDRP. A single class works on every render pipeline in your project.
  • Shared code. The same C# functions run in your shaders and in your scripts.
  • Version control friendly. Readable diffs, clean merges, code review as usual.
Coming soon to the Asset Store Documentation Support

About

Computers have been my life since school, and games were a big part of the reason why. For more than 20 years I've been designing complex systems that demand deep understanding and careful modeling: high-load and scalable architectures, multithreading, performance optimization.

I love digging into new and exciting technology, especially when it's hard. Lately that means 3D rendering. I was building a ray-tracing renderer of my own: it started on the CPU, and when that got too slow, I moved it to the GPU with HLSL. Writing HLSL was painful: no code completion, no documentation at hand, no help from the IDE. So I wrote a C# to HLSL translator for myself, using the Roslyn source generators I knew from earlier projects. It worked better than I expected: almost any code I wrote translated to HLSL.

When I looked for something similar, I found nothing for Unity at all, only a few engine-agnostic open-source projects limited to compute shaders. That's how Shader Script began. Now I'm in Unity to follow a long-held dream: making my own games, or at least parts of them.

Contact

I read every bug report and feature request myself, usually within two working days.