Я использую обычное направленное освещение, по Фонгу, учитывая ambient и diffuse. Нормали высчитываются с помощью алгоритма усреднения: генерируем нормали для каждого треугольника, далее для вершин, которые входят в несколько треугольников, складываем все полученные нормали каждого треугольника, в который входит эта вершина, и усредняем. Пиксельный шейдер прост:
cbuffer ConstantBufferPS
{
float4 Direction; // направление света
float4 Color; // цвет света
float4 ambient_factor; // коэффициент фонового освещения
}
struct VS_INPUT
{
float4 Pos: SV_POSITION;
float3 Normal: TEXCOORD0;
float4 Color: COLOR0;
};
float4 main(VS_INPUT input): SV_Target
{
// ambient освещение
float4 ambient = (Color * ambient_factor.x) * input.Color;
// diffuse освещение
float4 diffuse = saturate(dot(input.Normal, Direction) * Color);
// устанавливаем прозрачность + итоговый свет
float4 out_color = (ambient + diffuse) * input.Color;
out_color.a = 1;
return out_color;
}
Объект не использует текстуру. Однако, при освещении, свет получается не очень мягким:
Как просчитать более мягкий свет? P.S.: я слышал про bump mapping, он придаст рельеф и освещение будет более мягким. Но хотелось бы услышать советы и по моей ситуации, быть может использовать другой алгоритм расчёта нормалей, etc
Оборудование для ресторана: новинки профессиональной кухонной техники
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
Я только начал заниматься программированием на языке Паскаль, и не могу понять эту строку, можете объяснить на языке с++?
Хотелось бы узнать можно ли с помощью с++ написать программу которая по заданому вектору строит до 5 типов диаграм в графическом режимеЕсли...
Имеется два класса Koords и ComlexityВ класс Complexity входит один объект класса Koords, при этом в классе Complexity есть функция, котороя оперирует значениями...