BEER development update #3
Malt Weekly Report (July 3)
- Support for Pipeline Parameters. Pipeline Parameters are per type (Scene, World, Light, Camera, Object) custom properties declared from the Malt Pipeline and exposed in the host (Blender) UI.
- Support for Uniform Buffer Objects and Uniform Blocks reflection.
- Initial Lighting support (Sun, Point and Spot lights). No shadow maps yet.
— Miguel Pozo
Lit shader example:
uniform vec3 color_value = vec3(1.0,0.1,0.1);
//uniform sampler2D color_texture;
MAIN_PASS
{
//vec4 albedo = texture(color_texture, uv[0]) * vec4(color_value, 1);
vec4 albedo = vec4(color_value, 1);
for (int i = 0; i < scene_lights.sun_lights_count; i++)
{
SunLight sun_light = scene_lights.sun_lights[i];
COLOR += (albedo * vec4(sun_light.color,1)) * max(0, dot(-sun_light.direction, normal));
}
for (int i = 0; i < scene_lights.point_lights_count; i++)
{
PointLight point = scene_lights.point_lights[i];
float normalized_distance = distance(position, point.position) / point.radius;
normalized_distance = clamp(normalized_distance, 0, 1);
float d = dot(normalize(point.position - position), normal);
d = clamp(d,0,1);
COLOR += (albedo * vec4(point.color,1)) * (1.0 - normalized_distance) * d;
}
for (int i = 0; i < scene_lights.spot_lights_count; i++)
{
SpotLight spot = scene_lights.spot_lights[i];
float spot_angle = dot(spot.direction, normalize(position - spot.position));
spot.angle /= 2.0;
spot_angle = acos(spot_angle);
float normalized_distance = distance(position, spot.position) / spot.radius;
normalized_distance = clamp(normalized_distance, 0, 1);
float d = dot(-spot.direction, normal);
d = clamp(d,0,1);
if(spot_angle < spot.angle)
{
COLOR += (albedo * vec4(spot.color,1)) * (1.0 - normalized_distance) * d;
}
}
}
The repository | Update brief | Project Page | Donate to the Development