Эта константа SHADER_NAME
никогда не используется в Three. js для условных выражений. (Я не думаю, что есть способ сравнить с MeshDepthMaterial
, потому что на самом деле это не числовое значение c. Это строка? Кто знает!)
Вместо этого, что делает Three. js это проверка, если что-то определено или не определено . Например:
- Если это
MeshStandardMaterial
, добавляется #define STANDARD
- Если это
MeshPhysicalMaterial
, добавляется #define PHYSICAL
затем он использует это определение, чтобы проверить, с каким материалом вы имеете дело
#ifdef PHYSICAL
// Perform physical material declarations
#elif defined( STANDARD )
// Perform standard material declarations
#else
// Neither type is defined
#endif
(вы должны использовать #elif defined()
, потому что #elseifdef
не существует. Вы можете увидеть все доступные директивы препроцессора на эта таблица, стр. 3 , в разделе «Препроцессор»)
Чтобы добавить этот тип функциональности к вашим пользовательским материалам, вам нужно будет сделать это в JavaScript:
if (material.type = "CustomDepthMaterial") {
material.defines = { "DEPTH": "" };
}
... в вашем шейдере это должно дать ...
#define SHADER_NAME CustomDepthMaterial
#define DEPTH
... а затем вы можете проверить, определено ли DEPTH
или нет.