docs.unity3d.com
Search Results for

    Show / Hide Table of Contents

    Custom HLSL Operator

    Menu Path : Operator > HLSL > Custom HLSL

    The Custom HLSL Operator allows you to write an HLSL function that takes inputs and produce outputs. For general information about Custom HLSL nodes, refer to Custom HLSL Nodes.

    Specific constraints

    • Function must either return a value or have at least one out/inout parameter
    • Function do not support parameters of type VFXAttributes
    • Function can take a maximum of 4 parameters

    Each function parameter with no access modifier or in/inout access modifier will match an input port.
    The return value will match the operator output. If you use the access modifier out or inout for some function parameters, then they will generate an output port.

    Here is an example of a valid function declaration:

    float Distance(in float3 a, in float3 b)
    {
      return distance(a, b);
    }
    

    Another example with an out modifier:

    bool IsClose(in float3 a, in float3 b, float threshold, out float d)
    {
      d = distance(a, b);
      if (d >= threshold)
        return true;
      return false;
    }
    

    A sample with comments

    /// a: the tooltip for parameter a
    /// b: the tooltip for parameter b
    float Distance(in float3 a, in float3 b)
    {
      return distance(a, b);
    }
    

    You can also give a name to the output for the return value.
    In the sample below, the output port in the graph will be named sqr

    /// return: sqr
    float Square(in float t)
    {
      return t * t;
    }
    

    Include other HLSL files

    You can include any valid HLSL file with the standard #include directive. The path to the included file can be:

    • Relative to the VFX asset where the block will be used
    • Absolute starting from the Assets/ folder.
    • Absolute starting from the Packages/ folder.

    For the Custom HLSL operator, the #include directive is only supported when used with hlsl file (not embedded code).

    #include "HLSL/common.hlsl"
    
    float SomeFunctionName(in float someValue)
    {
        // use any function or variable declared in the included file
    }
    
    In This Article
    Back to top
    Copyright © 2025 Unity Technologies — Trademarks and terms of use
    • Legal
    • Privacy Policy
    • Cookie Policy
    • Do Not Sell or Share My Personal Information
    • Your Privacy Choices (Cookie Settings)