Description

When a Curve Atlas Row Parameter node is used with a Texture Sampler connected to the curve time input, the sample type uses derivative ops. This has negative performance implications for Nanite compute materials and should be avoided when possible.

The issue appears to be that the TMVM_None texture mip value mode used, causes the final UV coordinate to have a derivative status NotValid. To prevent this, we can use TMVM_MipLevel and force sampling mip 0 which should be accurate for curve atlases.

// Sample texture - use explicit mip level 0 since CurveLinearColorAtlas has no mips,

// avoiding dependency on derivative ops which break when non-trivial expressions feed InputTime

int32 MipLevel = Compiler->Constant(0.f);

return Compiler->TextureSample(AtlasCode, UV, SAMPLERTYPE_LinearColor, MipLevel, INDEX_NONE, TMVM_MipLevel, SSM_Clamp_WorldGroupSettings, TGM_None, AtlasRef, false);

Steps to Reproduce
  1. Create a material with curve atlas row parameter node fed by a texture sample node and assign the output to Base Color - or create a Two Sided material and use subsurface as in the example image.
  2. Save the material and assign it to a Nanite mesh
  3. Enable the Derivative Ops visualization (enable Nanite advanced visualizations first)

Expected

No derivative ops are used and the mesh with the assigned material is blue

Actual

Derivative ops are used and the mesh is red

Have Comments or More Details?

There's no existing public thread on this issue, so head over to Questions & Answers just mention UE-377533 in the post.

0
Login to Vote

Unresolved
CreatedMay 1, 2026
UpdatedMay 4, 2026
View Jira Issue