DirectX11, направленное освещение

230
03 апреля 2018, 00:33

Я использую обычное направленное освещение, по Фонгу, учитывая 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

READ ALSO
Помощь по коду Pascal

Помощь по коду Pascal

Я только начал заниматься программированием на языке Паскаль, и не могу понять эту строку, можете объяснить на языке с++?

236
Построение графики на с++

Построение графики на с++

Хотелось бы узнать можно ли с помощью с++ написать программу которая по заданому вектору строит до 5 типов диаграм в графическом режимеЕсли...

247
Странная ошибка C3867

Странная ошибка C3867

ЗдравствуйтеПомогите исправить ошибку

202
Можно ли сделать другом класса функцию другого класса?

Можно ли сделать другом класса функцию другого класса?

Имеется два класса Koords и ComlexityВ класс Complexity входит один объект класса Koords, при этом в классе Complexity есть функция, котороя оперирует значениями...

237