import msp_interface;
import shadow;
-layout(set=0) uniform EnvMap
-{
- mat3 env_world_matrix;
-};
-
layout(set=1) uniform sampler2D normal_map;
-layout(set=0) uniform samplerCube environment_map;
-layout(set=0) uniform samplerCube irradiance_map;
+layout(constant_id=auto) const bool use_instancing = false;
layout(constant_id=auto) const bool use_normal_map = false;
#pragma MSP stage(vertex)
virtual mat4 get_vertex_transform()
{
- return world_obj_matrix;
+ if(use_instancing)
+ return transpose(mat4(instance_transform[0], instance_transform[1], instance_transform[2], vec4(0.0, 0.0, 0.0, 1.0)));
+ else
+ return world_obj_matrix;
}
virtual mat3 get_normal_transform()
{
- return world_obj_normal_matrix;
+ if(use_instancing)
+ return transpose(mat3(instance_transform[0].xyz, instance_transform[1].xyz, instance_transform[2].xyz));
+ else
+ return world_obj_normal_matrix;
}
void standard_transform()
return IncomingLight(rel_pos/d, light_sources[index].color*attenuation);
}
-virtual vec3 get_environment_sample(vec3 direction, float roughness)
-{
- float lod = (2-roughness)*roughness*(textureQueryLevels(environment_map)-1);
- return textureLod(environment_map, env_world_matrix*direction, lod).rgb;
-}
-
-virtual vec3 get_reflection(vec3 normal, vec3 look)
-{
- vec3 reflect_dir = reflect(look, normal);
- return get_environment_sample(reflect_dir, 0.0);
-}
-
-virtual vec3 get_irradiance_sample(vec3 normal)
-{
- return texture(irradiance_map, env_world_matrix*normal).rgb;
-}
-
vec3 apply_fog(vec3 color)
{
float fog_value = exp(fog_coord*fog_density);