Th oixel "белый", если каждый из трехцветных каналов дерева равен >= 1.0
. Это можно проверить, протестировав, если сумма цветовых каналов равна 3,0. Конечно, необходимо убедиться, что три цветовых канала ограничены первыми 1,0:
bool is_white = dot(vec3(1.0), clamp(lightCol.rgb, 0.0, 1.0)) > 2.999;
или
float white = step(2.999, dot(vec3(1.0), clamp(lightCol.rgb, 0.0, 1.0)));
В этом случае вместо clamp(lightCol.rgb, 0.0, 1.0)
может использоваться min(vec3(1.0), lightCol.rgb)
.
Если хорошо известно, что каждый из трех цветовых каналов равен <= 1.0
, то выражение можно упростить:
dot(vec3(1.0), lightCol.rgb) > 2.999
Обратите внимание, что в этом случае произведение dot
вычисляет:
1.0*lightCol.r + 1.0*lightCol.g + 1.0*lightCol.b
и luma
можно рассчитать следующим образом:
float luma = dot(vec3(0.2126, 0.7152, 0.0722), lightCol.rgb);