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);
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
There's no existing public thread on this issue, so head over to Questions & Answers just mention UE-377533 in the post.
| 0 |
| Component | UE - Rendering - Architecture - Materials |
|---|---|
| Affects Versions | 5.6, 5.7 |
| Created | May 1, 2026 |
|---|---|
| Updated | May 4, 2026 |