Why do normal nodes unqiuely carry metadata? Or is it unique?

If you send an arbitrary, normalized vector to a Cycles shader’s normal input, it gets ignored:

If you can trace a path back to an actual normal, no matter how uselessly, the arbitrary vector gets used:

Ie, the vector is carrying some kind of data about type that gets inherited by derivative values-- there’s something telling Cycles, “Hey, this is ultimately a normal, it’s okay to use it.”

As far as I can tell, this is unique among Cycles nodes types. Colors don’t return 0 vectors from vector math nodes because they’re not vector data; vectors don’t return black from MixRGB nodes because they’re not color data. (Thank god.)

But I can’t see any good reason for why normals behave this way. Is there one? Is this just a weird bug? Are there any other types that carry metadata like this? Is there a reason it’s true for Cycles but not for Eevee?

There’s no metadata, this is most likely a bug in constant folding optimizations.

I don’t understand, but that’s okay; if it’s a bug, I don’t need to :slight_smile: I guess I’ll make a bug report.