UE5 Niagara Error occurs after compiling custom hlsl: ShaderCompileWorker failed with out-of-memory (00M) exception

After I compile my hlsl in Niagara module, I get error: ShaderCompileWorker failed with out-of-memory (00M) exception. Why it can happen? I didn’t allocate memory in the module, it is because compilation process itself will allocate memoty? Or compilation succeeded, but at the first time the new Niagara System runs, it crash due to the new module?


It is my simulation stage BlurDepth.

It is Bilateral Filtering module input.

It is Bilateral Filtering module output.

It is Bilateral Filtering module custom hlsl.

OutDepth = 0

#if GPU_SIMULATION

const int2 IndexOffsets[8]=
{
    int2(-1,0),
    int2(1,0),
    int2(0,-1),
    int2(0,1),

    int2(-1,-1),
    int2(-1,1),
    int2(1,-1),
    int2(1,1)
};

int2 NumCells;
Grid2D.GetNumCells(NumCells.x, NumCells.y);

float weightSum = 0;
float depthSum = 0;

float CurrDepth;
Grid2D.GetFloatValue<Attribute="Depth">(IndexX, IndexY, CurrDepth);

int2 Index=int2(IndexX,IndexY);

if(CurrDepth > 0)
{
    for (int xxx = 0; xxx < 8; ++xxx) 
    {
        const int2 IndexToUse = Index + IndexOffsets[xxx];
        if (IndexToUse.x >= 0 && IndexToUse.y >=0 && IndexToUse.x < NumCells.x && IndexToUse.y < NumCells.y)
        {
            float UVFactor = i * i + j * j;
            UVFactor = (-UVFactor) / (2 * UVSigma * UVSigma);
            float UVWeight = 1/(UVSigma * UVSigma * 2 * PI) * exp(UVFactor);

            float NeighborDepth;
            Grid2D.GetFloatValue<Attribute="Depth”>(IndexToUse.x, IndexToUse.y, NeighborDepth);
            float DepthDistance = NeighborDepth - CurrDepth;
            float DepthFactor = DepthDistance * DepthDistance;
            DepthFactor = (-DepthFactor) / (2 * DepthSigma * DepthSigma);
            float DepthWeight = (1 / (2 * PI * DepthSigma)) * exp(DepthFactor);

            weightSum += UVWeight * DepthWeight;
            depthSum += NeighborDepth * UVWeight * DepthWeight;
        
        }
    }
}

if(weightSum > 0){
    OutDepth = depthSum / weightSum;
}
#endif

Furthermore, if you want to know what does the module do:
Set Iteration Source as Data Interface , and drag RenderGrid2D to Data Interface , then in the module, if you set namespace of a value in map out as STACKCONTEXT , the value will be stored into Data Interface automatically.
The module does Bilateral Filtering on depth map stored in Grid 2D.

Finally knows why……it is because I have unicode characters in my code, it is my error.
By the way, the code is not finished. It has legacy variables such as i,j, but they are not problems.

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.