1
0
Fork 0
mirror of https://github.com/luanti-org/luanti.git synced 2025-06-27 16:36:03 +00:00

Improved parallax mapping. Generate heightmaps on the fly.

This commit is contained in:
RealBadAngel 2015-06-14 21:13:36 +02:00
parent d105bf27dd
commit 43fcfbfe05
11 changed files with 310 additions and 241 deletions

View file

@ -680,42 +680,54 @@ ShaderInfo generate_shader(std::string name, u8 material_type, u8 drawtype,
shaders_header += itos(drawtype);
shaders_header += "\n";
if (g_settings->getBool("generate_normalmaps")){
shaders_header += "#define GENERATE_NORMALMAPS\n";
shaders_header += "#define NORMALMAPS_STRENGTH ";
shaders_header += ftos(g_settings->getFloat("normalmaps_strength"));
shaders_header += "\n";
float sample_step;
int smooth = (int)g_settings->getFloat("normalmaps_smooth");
switch (smooth){
case 0:
sample_step = 0.0078125; // 1.0 / 128.0
break;
case 1:
sample_step = 0.00390625; // 1.0 / 256.0
break;
case 2:
sample_step = 0.001953125; // 1.0 / 512.0
break;
default:
sample_step = 0.0078125;
break;
}
shaders_header += "#define SAMPLE_STEP ";
shaders_header += ftos(sample_step);
shaders_header += "\n";
if (g_settings->getBool("generate_normalmaps")) {
shaders_header += "#define GENERATE_NORMALMAPS 1\n";
} else {
shaders_header += "#define GENERATE_NORMALMAPS 0\n";
}
shaders_header += "#define NORMALMAPS_STRENGTH ";
shaders_header += ftos(g_settings->getFloat("normalmaps_strength"));
shaders_header += "\n";
float sample_step;
int smooth = (int)g_settings->getFloat("normalmaps_smooth");
switch (smooth){
case 0:
sample_step = 0.0078125; // 1.0 / 128.0
break;
case 1:
sample_step = 0.00390625; // 1.0 / 256.0
break;
case 2:
sample_step = 0.001953125; // 1.0 / 512.0
break;
default:
sample_step = 0.0078125;
break;
}
shaders_header += "#define SAMPLE_STEP ";
shaders_header += ftos(sample_step);
shaders_header += "\n";
if (g_settings->getBool("enable_bumpmapping"))
shaders_header += "#define ENABLE_BUMPMAPPING\n";
if (g_settings->getBool("enable_parallax_occlusion")){
int mode = g_settings->getFloat("parallax_occlusion_mode");
float scale = g_settings->getFloat("parallax_occlusion_scale");
float bias = g_settings->getFloat("parallax_occlusion_bias");
int iterations = g_settings->getFloat("parallax_occlusion_iterations");
shaders_header += "#define ENABLE_PARALLAX_OCCLUSION\n";
shaders_header += "#define PARALLAX_OCCLUSION_MODE ";
shaders_header += itos(mode);
shaders_header += "\n";
shaders_header += "#define PARALLAX_OCCLUSION_SCALE ";
shaders_header += ftos(g_settings->getFloat("parallax_occlusion_scale"));
shaders_header += ftos(scale);
shaders_header += "\n";
shaders_header += "#define PARALLAX_OCCLUSION_BIAS ";
shaders_header += ftos(g_settings->getFloat("parallax_occlusion_bias"));
shaders_header += ftos(bias);
shaders_header += "\n";
shaders_header += "#define PARALLAX_OCCLUSION_ITERATIONS ";
shaders_header += itos(iterations);
shaders_header += "\n";
}
@ -755,7 +767,6 @@ ShaderInfo generate_shader(std::string name, u8 material_type, u8 drawtype,
vertex_program = shaders_header + vertex_program;
if(geometry_program != "")
geometry_program = shaders_header + geometry_program;
// Call addHighLevelShaderMaterial() or addShaderMaterial()
const c8* vertex_program_ptr = 0;
const c8* pixel_program_ptr = 0;