|
@@ -661,7 +661,7 @@ vec4 volumetric_fog_process(vec2 screen_uv, float z) {
|
|
|
fog_pos.z = pow(fog_pos.z, implementation_data.volumetric_fog_detail_spread);
|
|
|
}
|
|
|
|
|
|
- return texture(sampler3D(volumetric_fog_texture, material_samplers[SAMPLER_LINEAR_CLAMP]), fog_pos);
|
|
|
+ return texture(sampler3D(volumetric_fog_texture, SAMPLER_LINEAR_CLAMP), fog_pos);
|
|
|
}
|
|
|
|
|
|
vec4 fog_process(vec3 vertex) {
|
|
@@ -675,10 +675,10 @@ vec4 fog_process(vec3 vertex) {
|
|
|
#ifdef USE_RADIANCE_CUBEMAP_ARRAY
|
|
|
float lod, blend;
|
|
|
blend = modf(mip_level * MAX_ROUGHNESS_LOD, lod);
|
|
|
- sky_fog_color = texture(samplerCubeArray(radiance_cubemap, material_samplers[SAMPLER_LINEAR_WITH_MIPMAPS_CLAMP]), vec4(cube_view, lod)).rgb;
|
|
|
- sky_fog_color = mix(sky_fog_color, texture(samplerCubeArray(radiance_cubemap, material_samplers[SAMPLER_LINEAR_WITH_MIPMAPS_CLAMP]), vec4(cube_view, lod + 1)).rgb, blend);
|
|
|
+ sky_fog_color = texture(samplerCubeArray(radiance_cubemap, SAMPLER_LINEAR_WITH_MIPMAPS_CLAMP), vec4(cube_view, lod)).rgb;
|
|
|
+ sky_fog_color = mix(sky_fog_color, texture(samplerCubeArray(radiance_cubemap, SAMPLER_LINEAR_WITH_MIPMAPS_CLAMP), vec4(cube_view, lod + 1)).rgb, blend);
|
|
|
#else
|
|
|
- sky_fog_color = textureLod(samplerCube(radiance_cubemap, material_samplers[SAMPLER_LINEAR_WITH_MIPMAPS_CLAMP]), cube_view, mip_level * MAX_ROUGHNESS_LOD).rgb;
|
|
|
+ sky_fog_color = textureLod(samplerCube(radiance_cubemap, SAMPLER_LINEAR_WITH_MIPMAPS_CLAMP), cube_view, mip_level * MAX_ROUGHNESS_LOD).rgb;
|
|
|
#endif //USE_RADIANCE_CUBEMAP_ARRAY
|
|
|
fog_color = mix(fog_color, sky_fog_color, scene_data_block.data.fog_aerial_perspective);
|
|
|
}
|
|
@@ -1124,11 +1124,11 @@ void fragment_shader(in SceneData scene_data) {
|
|
|
float lod, blend;
|
|
|
|
|
|
blend = modf(sqrt(roughness) * MAX_ROUGHNESS_LOD, lod);
|
|
|
- specular_light = texture(samplerCubeArray(radiance_cubemap, material_samplers[SAMPLER_LINEAR_WITH_MIPMAPS_CLAMP]), vec4(ref_vec, lod)).rgb;
|
|
|
- specular_light = mix(specular_light, texture(samplerCubeArray(radiance_cubemap, material_samplers[SAMPLER_LINEAR_WITH_MIPMAPS_CLAMP]), vec4(ref_vec, lod + 1)).rgb, blend);
|
|
|
+ specular_light = texture(samplerCubeArray(radiance_cubemap, SAMPLER_LINEAR_WITH_MIPMAPS_CLAMP), vec4(ref_vec, lod)).rgb;
|
|
|
+ specular_light = mix(specular_light, texture(samplerCubeArray(radiance_cubemap, SAMPLER_LINEAR_WITH_MIPMAPS_CLAMP), vec4(ref_vec, lod + 1)).rgb, blend);
|
|
|
|
|
|
#else
|
|
|
- specular_light = textureLod(samplerCube(radiance_cubemap, material_samplers[SAMPLER_LINEAR_WITH_MIPMAPS_CLAMP]), ref_vec, sqrt(roughness) * MAX_ROUGHNESS_LOD).rgb;
|
|
|
+ specular_light = textureLod(samplerCube(radiance_cubemap, SAMPLER_LINEAR_WITH_MIPMAPS_CLAMP), ref_vec, sqrt(roughness) * MAX_ROUGHNESS_LOD).rgb;
|
|
|
|
|
|
#endif //USE_RADIANCE_CUBEMAP_ARRAY
|
|
|
specular_light *= scene_data.IBL_exposure_normalization;
|
|
@@ -1148,9 +1148,9 @@ void fragment_shader(in SceneData scene_data) {
|
|
|
if (scene_data.use_ambient_cubemap) {
|
|
|
vec3 ambient_dir = scene_data.radiance_inverse_xform * normal;
|
|
|
#ifdef USE_RADIANCE_CUBEMAP_ARRAY
|
|
|
- vec3 cubemap_ambient = texture(samplerCubeArray(radiance_cubemap, material_samplers[SAMPLER_LINEAR_WITH_MIPMAPS_CLAMP]), vec4(ambient_dir, MAX_ROUGHNESS_LOD)).rgb;
|
|
|
+ vec3 cubemap_ambient = texture(samplerCubeArray(radiance_cubemap, SAMPLER_LINEAR_WITH_MIPMAPS_CLAMP), vec4(ambient_dir, MAX_ROUGHNESS_LOD)).rgb;
|
|
|
#else
|
|
|
- vec3 cubemap_ambient = textureLod(samplerCube(radiance_cubemap, material_samplers[SAMPLER_LINEAR_WITH_MIPMAPS_CLAMP]), ambient_dir, MAX_ROUGHNESS_LOD).rgb;
|
|
|
+ vec3 cubemap_ambient = textureLod(samplerCube(radiance_cubemap, SAMPLER_LINEAR_WITH_MIPMAPS_CLAMP), ambient_dir, MAX_ROUGHNESS_LOD).rgb;
|
|
|
#endif //USE_RADIANCE_CUBEMAP_ARRAY
|
|
|
cubemap_ambient *= scene_data.IBL_exposure_normalization;
|
|
|
ambient_light = mix(ambient_light, cubemap_ambient * scene_data.ambient_light_color_energy.a, scene_data.ambient_color_sky_mix);
|
|
@@ -1181,11 +1181,11 @@ void fragment_shader(in SceneData scene_data) {
|
|
|
|
|
|
float lod, blend;
|
|
|
blend = modf(roughness_lod, lod);
|
|
|
- vec3 clearcoat_light = texture(samplerCubeArray(radiance_cubemap, material_samplers[SAMPLER_LINEAR_WITH_MIPMAPS_CLAMP]), vec4(ref_vec, lod)).rgb;
|
|
|
- clearcoat_light = mix(clearcoat_light, texture(samplerCubeArray(radiance_cubemap, material_samplers[SAMPLER_LINEAR_WITH_MIPMAPS_CLAMP]), vec4(ref_vec, lod + 1)).rgb, blend);
|
|
|
+ vec3 clearcoat_light = texture(samplerCubeArray(radiance_cubemap, SAMPLER_LINEAR_WITH_MIPMAPS_CLAMP), vec4(ref_vec, lod)).rgb;
|
|
|
+ clearcoat_light = mix(clearcoat_light, texture(samplerCubeArray(radiance_cubemap, SAMPLER_LINEAR_WITH_MIPMAPS_CLAMP), vec4(ref_vec, lod + 1)).rgb, blend);
|
|
|
|
|
|
#else
|
|
|
- vec3 clearcoat_light = textureLod(samplerCube(radiance_cubemap, material_samplers[SAMPLER_LINEAR_WITH_MIPMAPS_CLAMP]), ref_vec, roughness_lod).rgb;
|
|
|
+ vec3 clearcoat_light = textureLod(samplerCube(radiance_cubemap, SAMPLER_LINEAR_WITH_MIPMAPS_CLAMP), ref_vec, roughness_lod).rgb;
|
|
|
|
|
|
#endif //USE_RADIANCE_CUBEMAP_ARRAY
|
|
|
specular_light += clearcoat_light * horizon * horizon * Fc * scene_data.ambient_light_color_energy.a;
|
|
@@ -1231,10 +1231,10 @@ void fragment_shader(in SceneData scene_data) {
|
|
|
|
|
|
if (uses_sh) {
|
|
|
uvw.z *= 4.0; //SH textures use 4 times more data
|
|
|
- vec3 lm_light_l0 = textureLod(sampler2DArray(lightmap_textures[ofs], material_samplers[SAMPLER_LINEAR_CLAMP]), uvw + vec3(0.0, 0.0, 0.0), 0.0).rgb;
|
|
|
- vec3 lm_light_l1n1 = textureLod(sampler2DArray(lightmap_textures[ofs], material_samplers[SAMPLER_LINEAR_CLAMP]), uvw + vec3(0.0, 0.0, 1.0), 0.0).rgb;
|
|
|
- vec3 lm_light_l1_0 = textureLod(sampler2DArray(lightmap_textures[ofs], material_samplers[SAMPLER_LINEAR_CLAMP]), uvw + vec3(0.0, 0.0, 2.0), 0.0).rgb;
|
|
|
- vec3 lm_light_l1p1 = textureLod(sampler2DArray(lightmap_textures[ofs], material_samplers[SAMPLER_LINEAR_CLAMP]), uvw + vec3(0.0, 0.0, 3.0), 0.0).rgb;
|
|
|
+ vec3 lm_light_l0 = textureLod(sampler2DArray(lightmap_textures[ofs], SAMPLER_LINEAR_CLAMP), uvw + vec3(0.0, 0.0, 0.0), 0.0).rgb;
|
|
|
+ vec3 lm_light_l1n1 = textureLod(sampler2DArray(lightmap_textures[ofs], SAMPLER_LINEAR_CLAMP), uvw + vec3(0.0, 0.0, 1.0), 0.0).rgb;
|
|
|
+ vec3 lm_light_l1_0 = textureLod(sampler2DArray(lightmap_textures[ofs], SAMPLER_LINEAR_CLAMP), uvw + vec3(0.0, 0.0, 2.0), 0.0).rgb;
|
|
|
+ vec3 lm_light_l1p1 = textureLod(sampler2DArray(lightmap_textures[ofs], SAMPLER_LINEAR_CLAMP), uvw + vec3(0.0, 0.0, 3.0), 0.0).rgb;
|
|
|
|
|
|
uint idx = instances.data[instance_index].gi_offset >> 20;
|
|
|
vec3 n = normalize(lightmaps.data[idx].normal_xform * normal);
|
|
@@ -1253,7 +1253,7 @@ void fragment_shader(in SceneData scene_data) {
|
|
|
|
|
|
} else {
|
|
|
uint idx = instances.data[instance_index].gi_offset >> 20;
|
|
|
- ambient_light += textureLod(sampler2DArray(lightmap_textures[ofs], material_samplers[SAMPLER_LINEAR_CLAMP]), uvw, 0.0).rgb * lightmaps.data[idx].exposure_normalization;
|
|
|
+ ambient_light += textureLod(sampler2DArray(lightmap_textures[ofs], SAMPLER_LINEAR_CLAMP), uvw, 0.0).rgb * lightmaps.data[idx].exposure_normalization;
|
|
|
}
|
|
|
}
|
|
|
#else
|
|
@@ -1373,18 +1373,18 @@ void fragment_shader(in SceneData scene_data) {
|
|
|
vec2 base_coord = screen_uv;
|
|
|
vec2 closest_coord = base_coord;
|
|
|
#ifdef USE_MULTIVIEW
|
|
|
- float closest_ang = dot(normal, textureLod(sampler2DArray(normal_roughness_buffer, material_samplers[SAMPLER_LINEAR_CLAMP]), vec3(base_coord, ViewIndex), 0.0).xyz * 2.0 - 1.0);
|
|
|
+ float closest_ang = dot(normal, textureLod(sampler2DArray(normal_roughness_buffer, SAMPLER_LINEAR_CLAMP), vec3(base_coord, ViewIndex), 0.0).xyz * 2.0 - 1.0);
|
|
|
#else // USE_MULTIVIEW
|
|
|
- float closest_ang = dot(normal, textureLod(sampler2D(normal_roughness_buffer, material_samplers[SAMPLER_LINEAR_CLAMP]), base_coord, 0.0).xyz * 2.0 - 1.0);
|
|
|
+ float closest_ang = dot(normal, textureLod(sampler2D(normal_roughness_buffer, SAMPLER_LINEAR_CLAMP), base_coord, 0.0).xyz * 2.0 - 1.0);
|
|
|
#endif // USE_MULTIVIEW
|
|
|
|
|
|
for (int i = 0; i < 4; i++) {
|
|
|
const vec2 neighbors[4] = vec2[](vec2(-1, 0), vec2(1, 0), vec2(0, -1), vec2(0, 1));
|
|
|
vec2 neighbour_coord = base_coord + neighbors[i] * scene_data.screen_pixel_size;
|
|
|
#ifdef USE_MULTIVIEW
|
|
|
- float neighbour_ang = dot(normal, textureLod(sampler2DArray(normal_roughness_buffer, material_samplers[SAMPLER_LINEAR_CLAMP]), vec3(neighbour_coord, ViewIndex), 0.0).xyz * 2.0 - 1.0);
|
|
|
+ float neighbour_ang = dot(normal, textureLod(sampler2DArray(normal_roughness_buffer, SAMPLER_LINEAR_CLAMP), vec3(neighbour_coord, ViewIndex), 0.0).xyz * 2.0 - 1.0);
|
|
|
#else // USE_MULTIVIEW
|
|
|
- float neighbour_ang = dot(normal, textureLod(sampler2D(normal_roughness_buffer, material_samplers[SAMPLER_LINEAR_CLAMP]), neighbour_coord, 0.0).xyz * 2.0 - 1.0);
|
|
|
+ float neighbour_ang = dot(normal, textureLod(sampler2D(normal_roughness_buffer, SAMPLER_LINEAR_CLAMP), neighbour_coord, 0.0).xyz * 2.0 - 1.0);
|
|
|
#endif // USE_MULTIVIEW
|
|
|
if (neighbour_ang > closest_ang) {
|
|
|
closest_ang = neighbour_ang;
|
|
@@ -1399,11 +1399,11 @@ void fragment_shader(in SceneData scene_data) {
|
|
|
}
|
|
|
|
|
|
#ifdef USE_MULTIVIEW
|
|
|
- vec4 buffer_ambient = textureLod(sampler2DArray(ambient_buffer, material_samplers[SAMPLER_LINEAR_CLAMP]), vec3(coord, ViewIndex), 0.0);
|
|
|
- vec4 buffer_reflection = textureLod(sampler2DArray(reflection_buffer, material_samplers[SAMPLER_LINEAR_CLAMP]), vec3(coord, ViewIndex), 0.0);
|
|
|
+ vec4 buffer_ambient = textureLod(sampler2DArray(ambient_buffer, SAMPLER_LINEAR_CLAMP), vec3(coord, ViewIndex), 0.0);
|
|
|
+ vec4 buffer_reflection = textureLod(sampler2DArray(reflection_buffer, SAMPLER_LINEAR_CLAMP), vec3(coord, ViewIndex), 0.0);
|
|
|
#else // USE_MULTIVIEW
|
|
|
- vec4 buffer_ambient = textureLod(sampler2D(ambient_buffer, material_samplers[SAMPLER_LINEAR_CLAMP]), coord, 0.0);
|
|
|
- vec4 buffer_reflection = textureLod(sampler2D(reflection_buffer, material_samplers[SAMPLER_LINEAR_CLAMP]), coord, 0.0);
|
|
|
+ vec4 buffer_ambient = textureLod(sampler2D(ambient_buffer, SAMPLER_LINEAR_CLAMP), coord, 0.0);
|
|
|
+ vec4 buffer_reflection = textureLod(sampler2D(reflection_buffer, SAMPLER_LINEAR_CLAMP), coord, 0.0);
|
|
|
#endif // USE_MULTIVIEW
|
|
|
|
|
|
ambient_light = mix(ambient_light, buffer_ambient.rgb, buffer_ambient.a);
|
|
@@ -1413,9 +1413,9 @@ void fragment_shader(in SceneData scene_data) {
|
|
|
|
|
|
if (bool(implementation_data.ss_effects_flags & SCREEN_SPACE_EFFECTS_FLAGS_USE_SSAO)) {
|
|
|
#ifdef USE_MULTIVIEW
|
|
|
- float ssao = texture(sampler2DArray(ao_buffer, material_samplers[SAMPLER_LINEAR_CLAMP]), vec3(screen_uv, ViewIndex)).r;
|
|
|
+ float ssao = texture(sampler2DArray(ao_buffer, SAMPLER_LINEAR_CLAMP), vec3(screen_uv, ViewIndex)).r;
|
|
|
#else
|
|
|
- float ssao = texture(sampler2D(ao_buffer, material_samplers[SAMPLER_LINEAR_CLAMP]), screen_uv).r;
|
|
|
+ float ssao = texture(sampler2D(ao_buffer, SAMPLER_LINEAR_CLAMP), screen_uv).r;
|
|
|
#endif
|
|
|
ao = min(ao, ssao);
|
|
|
ao_light_affect = mix(ao_light_affect, max(ao_light_affect, implementation_data.ssao_light_affect), implementation_data.ssao_ao_affect);
|
|
@@ -1500,9 +1500,9 @@ void fragment_shader(in SceneData scene_data) {
|
|
|
|
|
|
if (bool(implementation_data.ss_effects_flags & SCREEN_SPACE_EFFECTS_FLAGS_USE_SSIL)) {
|
|
|
#ifdef USE_MULTIVIEW
|
|
|
- vec4 ssil = textureLod(sampler2DArray(ssil_buffer, material_samplers[SAMPLER_LINEAR_CLAMP]), vec3(screen_uv, ViewIndex), 0.0);
|
|
|
+ vec4 ssil = textureLod(sampler2DArray(ssil_buffer, SAMPLER_LINEAR_CLAMP), vec3(screen_uv, ViewIndex), 0.0);
|
|
|
#else
|
|
|
- vec4 ssil = textureLod(sampler2D(ssil_buffer, material_samplers[SAMPLER_LINEAR_CLAMP]), screen_uv, 0.0);
|
|
|
+ vec4 ssil = textureLod(sampler2D(ssil_buffer, SAMPLER_LINEAR_CLAMP), screen_uv, 0.0);
|
|
|
#endif // USE_MULTIVIEW
|
|
|
ambient_light *= 1.0 - ssil.a;
|
|
|
ambient_light += ssil.rgb * albedo.rgb;
|
|
@@ -1786,7 +1786,7 @@ void fragment_shader(in SceneData scene_data) {
|
|
|
vec4 trans_coord = directional_lights.data[i].shadow_matrix1 * trans_vertex;
|
|
|
trans_coord /= trans_coord.w;
|
|
|
|
|
|
- float shadow_z = textureLod(sampler2D(directional_shadow_atlas, material_samplers[SAMPLER_LINEAR_CLAMP]), trans_coord.xy, 0.0).r;
|
|
|
+ float shadow_z = textureLod(sampler2D(directional_shadow_atlas, SAMPLER_LINEAR_CLAMP), trans_coord.xy, 0.0).r;
|
|
|
shadow_z *= directional_lights.data[i].shadow_z_range.x;
|
|
|
float z = trans_coord.z * directional_lights.data[i].shadow_z_range.x;
|
|
|
|
|
@@ -1796,7 +1796,7 @@ void fragment_shader(in SceneData scene_data) {
|
|
|
vec4 trans_coord = directional_lights.data[i].shadow_matrix2 * trans_vertex;
|
|
|
trans_coord /= trans_coord.w;
|
|
|
|
|
|
- float shadow_z = textureLod(sampler2D(directional_shadow_atlas, material_samplers[SAMPLER_LINEAR_CLAMP]), trans_coord.xy, 0.0).r;
|
|
|
+ float shadow_z = textureLod(sampler2D(directional_shadow_atlas, SAMPLER_LINEAR_CLAMP), trans_coord.xy, 0.0).r;
|
|
|
shadow_z *= directional_lights.data[i].shadow_z_range.y;
|
|
|
float z = trans_coord.z * directional_lights.data[i].shadow_z_range.y;
|
|
|
|
|
@@ -1806,7 +1806,7 @@ void fragment_shader(in SceneData scene_data) {
|
|
|
vec4 trans_coord = directional_lights.data[i].shadow_matrix3 * trans_vertex;
|
|
|
trans_coord /= trans_coord.w;
|
|
|
|
|
|
- float shadow_z = textureLod(sampler2D(directional_shadow_atlas, material_samplers[SAMPLER_LINEAR_CLAMP]), trans_coord.xy, 0.0).r;
|
|
|
+ float shadow_z = textureLod(sampler2D(directional_shadow_atlas, SAMPLER_LINEAR_CLAMP), trans_coord.xy, 0.0).r;
|
|
|
shadow_z *= directional_lights.data[i].shadow_z_range.z;
|
|
|
float z = trans_coord.z * directional_lights.data[i].shadow_z_range.z;
|
|
|
|
|
@@ -1817,7 +1817,7 @@ void fragment_shader(in SceneData scene_data) {
|
|
|
vec4 trans_coord = directional_lights.data[i].shadow_matrix4 * trans_vertex;
|
|
|
trans_coord /= trans_coord.w;
|
|
|
|
|
|
- float shadow_z = textureLod(sampler2D(directional_shadow_atlas, material_samplers[SAMPLER_LINEAR_CLAMP]), trans_coord.xy, 0.0).r;
|
|
|
+ float shadow_z = textureLod(sampler2D(directional_shadow_atlas, SAMPLER_LINEAR_CLAMP), trans_coord.xy, 0.0).r;
|
|
|
shadow_z *= directional_lights.data[i].shadow_z_range.w;
|
|
|
float z = trans_coord.z * directional_lights.data[i].shadow_z_range.w;
|
|
|
|