Здравствуйте, Господа и Господины 3д графики и годно кодного иллюзионизма!)) Я вот начал понимать наконец как работает шойдеры!) Но вот моменты которые никак не могу для себя уяснить хотел бы спросить. В частности меня интересует такой возможно глупый вопрос. Для чего сколярно делят переменные и константы. Я имею в виду float,Int,double,half итд. Я знаю что они с точкой без целое не целое и что количество бит которое они содержат разное, но почему к примеру в шейдере записывают некое число как half? почему через float не записать? Я знаю, возможно это глупый вопрос, видимо я чего то не понимаю. И если к примеру взять пример с шейдером из набора примеров к Хорс, то можно увидеть как используется константа с такой битностью.
const float4x4 MatWorldViewProj;
const float4x4 MatWorld;
// Light
const float3 AmbientClr; // Ambient Color
const float3 LightClr; // Light Color
const half LightInt; // Light Intensity
// Positions
float3 PosLight; // Light Position
float RngLight; // Light Range
float DotLight; // Light Soft
// Other
static float3 Color;
static float4 cD;
static float3 cN;
static float3 nLight;
объявили
а теперь
Color = cD.rgb*AmbientClr+(cD*nLight*LightClr*LightInt);
применили.
Стоит поменять битность, освещения нет. Ну это можно как то объяснить, но ведь число вычисляется с числами с другой битностью.
Этот пример называется Bump Light.На тот случай если у кого он есть в запасниках и может посмотреть.