Some more GLES2 tuning..
This commit is contained in:
parent
3333166b07
commit
ce8294986d
|
@ -2227,6 +2227,7 @@ void RasterizerSceneGLES2::_render_render_list(RenderList::Element **p_elements,
|
||||||
if (p_env) {
|
if (p_env) {
|
||||||
state.scene_shader.set_uniform(SceneShaderGLES2::BG_ENERGY, p_env->bg_energy);
|
state.scene_shader.set_uniform(SceneShaderGLES2::BG_ENERGY, p_env->bg_energy);
|
||||||
state.scene_shader.set_uniform(SceneShaderGLES2::AMBIENT_SKY_CONTRIBUTION, p_env->ambient_sky_contribution);
|
state.scene_shader.set_uniform(SceneShaderGLES2::AMBIENT_SKY_CONTRIBUTION, p_env->ambient_sky_contribution);
|
||||||
|
|
||||||
state.scene_shader.set_uniform(SceneShaderGLES2::AMBIENT_COLOR, p_env->ambient_color);
|
state.scene_shader.set_uniform(SceneShaderGLES2::AMBIENT_COLOR, p_env->ambient_color);
|
||||||
state.scene_shader.set_uniform(SceneShaderGLES2::AMBIENT_ENERGY, p_env->ambient_energy);
|
state.scene_shader.set_uniform(SceneShaderGLES2::AMBIENT_ENERGY, p_env->ambient_energy);
|
||||||
|
|
||||||
|
|
|
@ -948,6 +948,7 @@ void RasterizerStorageGLES2::sky_set_texture(RID p_sky, RID p_panorama, int p_ra
|
||||||
shaders.cubemap_filter.set_uniform(CubemapFilterShaderGLES2::FACE_ID, i);
|
shaders.cubemap_filter.set_uniform(CubemapFilterShaderGLES2::FACE_ID, i);
|
||||||
|
|
||||||
float roughness = mm_level ? lod / (float)(mipmaps - 1) : 1;
|
float roughness = mm_level ? lod / (float)(mipmaps - 1) : 1;
|
||||||
|
roughness = MIN(1.0, roughness); //keep max at 1
|
||||||
shaders.cubemap_filter.set_uniform(CubemapFilterShaderGLES2::ROUGHNESS, roughness);
|
shaders.cubemap_filter.set_uniform(CubemapFilterShaderGLES2::ROUGHNESS, roughness);
|
||||||
|
|
||||||
glDrawArrays(GL_TRIANGLE_FAN, 0, 4);
|
glDrawArrays(GL_TRIANGLE_FAN, 0, 4);
|
||||||
|
@ -4492,13 +4493,13 @@ void RasterizerStorageGLES2::initialize() {
|
||||||
|
|
||||||
// radical inverse vdc cache texture
|
// radical inverse vdc cache texture
|
||||||
// used for cubemap filtering
|
// used for cubemap filtering
|
||||||
if (config.float_texture_supported) {
|
if (true /*||config.float_texture_supported*/) { //uint8 is similar and works everywhere
|
||||||
glGenTextures(1, &resources.radical_inverse_vdc_cache_tex);
|
glGenTextures(1, &resources.radical_inverse_vdc_cache_tex);
|
||||||
|
|
||||||
glActiveTexture(GL_TEXTURE0);
|
glActiveTexture(GL_TEXTURE0);
|
||||||
glBindTexture(GL_TEXTURE_2D, resources.radical_inverse_vdc_cache_tex);
|
glBindTexture(GL_TEXTURE_2D, resources.radical_inverse_vdc_cache_tex);
|
||||||
|
|
||||||
float radical_inverse[512];
|
uint8_t radical_inverse[512];
|
||||||
|
|
||||||
for (uint32_t i = 0; i < 512; i++) {
|
for (uint32_t i = 0; i < 512; i++) {
|
||||||
uint32_t bits = i;
|
uint32_t bits = i;
|
||||||
|
@ -4510,11 +4511,10 @@ void RasterizerStorageGLES2::initialize() {
|
||||||
bits = ((bits & 0x00FF00FF) << 8) | ((bits & 0xFF00FF00) >> 8);
|
bits = ((bits & 0x00FF00FF) << 8) | ((bits & 0xFF00FF00) >> 8);
|
||||||
|
|
||||||
float value = float(bits) * 2.3283064365386963e-10;
|
float value = float(bits) * 2.3283064365386963e-10;
|
||||||
|
radical_inverse[i] = uint8_t(CLAMP(value * 255.0, 0, 255));
|
||||||
radical_inverse[i] = value;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
glTexImage2D(GL_TEXTURE_2D, 0, GL_LUMINANCE, 512, 1, 0, GL_LUMINANCE, GL_FLOAT, radical_inverse);
|
glTexImage2D(GL_TEXTURE_2D, 0, GL_LUMINANCE, 512, 1, 0, GL_LUMINANCE, GL_UNSIGNED_BYTE, radical_inverse);
|
||||||
|
|
||||||
glBindTexture(GL_TEXTURE_2D, 0);
|
glBindTexture(GL_TEXTURE_2D, 0);
|
||||||
}
|
}
|
||||||
|
|
|
@ -167,17 +167,21 @@ void main() {
|
||||||
|
|
||||||
vec3 H = ImportanceSampleGGX(xi, roughness, N);
|
vec3 H = ImportanceSampleGGX(xi, roughness, N);
|
||||||
vec3 V = N;
|
vec3 V = N;
|
||||||
vec3 L = normalize(2.0 * dot(V, H) * H - V);
|
vec3 L = (2.0 * dot(V, H) * H - V);
|
||||||
|
|
||||||
float NdotL = clamp(dot(N, L), 0.0, 1.0);
|
float NdotL = clamp(dot(N, L), 0.0, 1.0);
|
||||||
|
|
||||||
if (NdotL > 0.0) {
|
if (NdotL > 0.0) {
|
||||||
|
|
||||||
#ifdef USE_SOURCE_PANORAMA
|
#ifdef USE_SOURCE_PANORAMA
|
||||||
sum.rgb += texturePanorama(source_panorama, L).rgb * NdotL;
|
vec3 val = texturePanorama(source_panorama, L).rgb;
|
||||||
#else
|
#else
|
||||||
sum.rgb += textureCubeLod(source_cube, L, 0.0).rgb * NdotL;
|
vec3 val = textureCubeLod(source_cube, L,0.0).rgb;
|
||||||
#endif
|
#endif
|
||||||
|
//mix using Linear, to approximate high end back-end
|
||||||
|
val = mix(pow((val + vec3(0.055)) * (1.0 / (1.0 + 0.055)), vec3(2.4)), val * (1.0 / 12.92), vec3(lessThan(val, vec3(0.04045))));
|
||||||
|
|
||||||
|
sum.rgb += val * NdotL;
|
||||||
|
|
||||||
sum.a += NdotL;
|
sum.a += NdotL;
|
||||||
}
|
}
|
||||||
|
@ -185,5 +189,8 @@ void main() {
|
||||||
|
|
||||||
sum /= sum.a;
|
sum /= sum.a;
|
||||||
|
|
||||||
|
vec3 a = vec3(0.055);
|
||||||
|
sum.rgb = mix((vec3(1.0) + a) * pow(sum.rgb, vec3(1.0 / 2.4)) - a, 12.92 * sum.rgb, vec3(lessThan(sum.rgb, vec3(0.0031308))));
|
||||||
|
|
||||||
gl_FragColor = vec4(sum.rgb, 1.0);
|
gl_FragColor = vec4(sum.rgb, 1.0);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1757,8 +1757,14 @@ FRAGMENT_SHADER_CODE
|
||||||
|
|
||||||
// environment BRDF approximation
|
// environment BRDF approximation
|
||||||
|
|
||||||
// TODO shadeless
|
|
||||||
{
|
{
|
||||||
|
|
||||||
|
#if defined(DIFFUSE_TOON)
|
||||||
|
//simplify for toon, as
|
||||||
|
specular_light *= specular * metallic * albedo * 2.0;
|
||||||
|
#else
|
||||||
|
//TODO: this curve is not really designed for gammaspace, should be adjusted
|
||||||
const vec4 c0 = vec4(-1.0, -0.0275, -0.572, 0.022);
|
const vec4 c0 = vec4(-1.0, -0.0275, -0.572, 0.022);
|
||||||
const vec4 c1 = vec4(1.0, 0.0425, 1.04, -0.04);
|
const vec4 c1 = vec4(1.0, 0.0425, 1.04, -0.04);
|
||||||
vec4 r = roughness * c0 + c1;
|
vec4 r = roughness * c0 + c1;
|
||||||
|
@ -1767,10 +1773,16 @@ FRAGMENT_SHADER_CODE
|
||||||
vec2 AB = vec2(-1.04, 1.04) * a004 + r.zw;
|
vec2 AB = vec2(-1.04, 1.04) * a004 + r.zw;
|
||||||
|
|
||||||
vec3 specular_color = metallic_to_specular_color(metallic, specular, albedo);
|
vec3 specular_color = metallic_to_specular_color(metallic, specular, albedo);
|
||||||
specular_light *= AB.x * specular_color + AB.y;
|
specular_light *= AB.x * specular_color + AB.y;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
gl_FragColor = vec4(ambient_light + diffuse_light + specular_light, alpha);
|
gl_FragColor = vec4(ambient_light + diffuse_light + specular_light, alpha);
|
||||||
|
|
||||||
|
//add emission if in base pass
|
||||||
|
#ifdef BASE_PASS
|
||||||
|
gl_FragColor.rgb += emission;
|
||||||
|
#endif
|
||||||
// gl_FragColor = vec4(normal, 1.0);
|
// gl_FragColor = vec4(normal, 1.0);
|
||||||
|
|
||||||
#endif //unshaded
|
#endif //unshaded
|
||||||
|
|
Loading…
Reference in New Issue