mirror of
https://github.com/minetest/minetest.git
synced 2024-11-27 01:53:45 +01:00
Make shading of CAOs optional (#10033)
This commit is contained in:
parent
0a1181f763
commit
3a6dfda358
@ -39,11 +39,15 @@ void main(void)
|
|||||||
lightVec = sunPosition - worldPosition;
|
lightVec = sunPosition - worldPosition;
|
||||||
eyeVec = -(gl_ModelViewMatrix * gl_Vertex).xyz;
|
eyeVec = -(gl_ModelViewMatrix * gl_Vertex).xyz;
|
||||||
|
|
||||||
|
#if (MATERIAL_TYPE == TILE_MATERIAL_PLAIN) || (MATERIAL_TYPE == TILE_MATERIAL_PLAIN_ALPHA)
|
||||||
|
vIDiff = 1.0;
|
||||||
|
#else
|
||||||
// This is intentional comparison with zero without any margin.
|
// This is intentional comparison with zero without any margin.
|
||||||
// If normal is not equal to zero exactly, then we assume it's a valid, just not normalized vector
|
// If normal is not equal to zero exactly, then we assume it's a valid, just not normalized vector
|
||||||
vIDiff = length(gl_Normal) == 0.0
|
vIDiff = length(gl_Normal) == 0.0
|
||||||
? 1.0
|
? 1.0
|
||||||
: directional_ambient(normalize(gl_Normal));
|
: directional_ambient(normalize(gl_Normal));
|
||||||
|
#endif
|
||||||
|
|
||||||
gl_FrontColor = gl_BackColor = gl_Color;
|
gl_FrontColor = gl_BackColor = gl_Color;
|
||||||
}
|
}
|
||||||
|
@ -6644,6 +6644,9 @@ Player properties need to be saved manually.
|
|||||||
|
|
||||||
damage_texture_modifier = "^[brighten",
|
damage_texture_modifier = "^[brighten",
|
||||||
-- Texture modifier to be applied for a short duration when object is hit
|
-- Texture modifier to be applied for a short duration when object is hit
|
||||||
|
|
||||||
|
shaded = true,
|
||||||
|
-- Setting this to 'false' disables diffuse lighting of entity
|
||||||
}
|
}
|
||||||
|
|
||||||
Entity definition
|
Entity definition
|
||||||
|
@ -55,6 +55,17 @@ minetest.register_entity("testentities:mesh", {
|
|||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
|
||||||
|
minetest.register_entity("testentities:mesh_unshaded", {
|
||||||
|
initial_properties = {
|
||||||
|
visual = "mesh",
|
||||||
|
mesh = "testnodes_pyramid.obj",
|
||||||
|
textures = {
|
||||||
|
"testnodes_mesh_stripes2.png"
|
||||||
|
},
|
||||||
|
shaded = false,
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
-- Advanced visual tests
|
-- Advanced visual tests
|
||||||
|
|
||||||
-- A test entity for testing animated and yaw-modulated sprites
|
-- A test entity for testing animated and yaw-modulated sprites
|
||||||
@ -71,4 +82,3 @@ minetest.register_entity("testentities:yawsprite", {
|
|||||||
self.object:set_sprite({x=0, y=0}, 1, 0, true)
|
self.object:set_sprite({x=0, y=0}, 1, 0, true)
|
||||||
end,
|
end,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
@ -577,10 +577,16 @@ void GenericCAO::addToScene(ITextureSource *tsrc)
|
|||||||
|
|
||||||
if (m_enable_shaders) {
|
if (m_enable_shaders) {
|
||||||
IShaderSource *shader_source = m_client->getShaderSource();
|
IShaderSource *shader_source = m_client->getShaderSource();
|
||||||
u32 shader_id = shader_source->getShader(
|
MaterialType material_type;
|
||||||
"object_shader",
|
|
||||||
(m_prop.use_texture_alpha) ? TILE_MATERIAL_ALPHA : TILE_MATERIAL_BASIC,
|
if (m_prop.shaded && m_prop.glow == 0)
|
||||||
NDT_NORMAL);
|
material_type = (m_prop.use_texture_alpha) ?
|
||||||
|
TILE_MATERIAL_ALPHA : TILE_MATERIAL_BASIC;
|
||||||
|
else
|
||||||
|
material_type = (m_prop.use_texture_alpha) ?
|
||||||
|
TILE_MATERIAL_PLAIN_ALPHA : TILE_MATERIAL_PLAIN;
|
||||||
|
|
||||||
|
u32 shader_id = shader_source->getShader("object_shader", material_type, NDT_NORMAL);
|
||||||
m_material_type = shader_source->getShaderInfo(shader_id).material;
|
m_material_type = shader_source->getShaderInfo(shader_id).material;
|
||||||
} else {
|
} else {
|
||||||
m_material_type = (m_prop.use_texture_alpha) ?
|
m_material_type = (m_prop.use_texture_alpha) ?
|
||||||
@ -1504,6 +1510,7 @@ bool GenericCAO::visualExpiryRequired(const ObjectProperties &new_) const
|
|||||||
return old.backface_culling != new_.backface_culling ||
|
return old.backface_culling != new_.backface_culling ||
|
||||||
old.is_visible != new_.is_visible ||
|
old.is_visible != new_.is_visible ||
|
||||||
old.mesh != new_.mesh ||
|
old.mesh != new_.mesh ||
|
||||||
|
old.shaded != new_.shaded ||
|
||||||
old.use_texture_alpha != new_.use_texture_alpha ||
|
old.use_texture_alpha != new_.use_texture_alpha ||
|
||||||
old.visual != new_.visual ||
|
old.visual != new_.visual ||
|
||||||
old.visual_size != new_.visual_size ||
|
old.visual_size != new_.visual_size ||
|
||||||
|
@ -341,7 +341,7 @@ bool checkMeshNormals(scene::IMesh *mesh)
|
|||||||
// hurting the performance and covering only really weird broken models.
|
// hurting the performance and covering only really weird broken models.
|
||||||
f32 length = buffer->getNormal(0).getLength();
|
f32 length = buffer->getNormal(0).getLength();
|
||||||
|
|
||||||
if (!std::isfinite(length) || std::fabs(length) < 1e-10f)
|
if (!std::isfinite(length) || length < 1e-10f)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -537,11 +537,13 @@ ShaderInfo generate_shader(const std::string &name, u8 material_type, u8 drawtyp
|
|||||||
shaderinfo.base_material = video::EMT_SOLID;
|
shaderinfo.base_material = video::EMT_SOLID;
|
||||||
break;
|
break;
|
||||||
case TILE_MATERIAL_ALPHA:
|
case TILE_MATERIAL_ALPHA:
|
||||||
|
case TILE_MATERIAL_PLAIN_ALPHA:
|
||||||
case TILE_MATERIAL_LIQUID_TRANSPARENT:
|
case TILE_MATERIAL_LIQUID_TRANSPARENT:
|
||||||
case TILE_MATERIAL_WAVING_LIQUID_TRANSPARENT:
|
case TILE_MATERIAL_WAVING_LIQUID_TRANSPARENT:
|
||||||
shaderinfo.base_material = video::EMT_TRANSPARENT_ALPHA_CHANNEL;
|
shaderinfo.base_material = video::EMT_TRANSPARENT_ALPHA_CHANNEL;
|
||||||
break;
|
break;
|
||||||
case TILE_MATERIAL_BASIC:
|
case TILE_MATERIAL_BASIC:
|
||||||
|
case TILE_MATERIAL_PLAIN:
|
||||||
case TILE_MATERIAL_WAVING_LEAVES:
|
case TILE_MATERIAL_WAVING_LEAVES:
|
||||||
case TILE_MATERIAL_WAVING_PLANTS:
|
case TILE_MATERIAL_WAVING_PLANTS:
|
||||||
case TILE_MATERIAL_WAVING_LIQUID_BASIC:
|
case TILE_MATERIAL_WAVING_LIQUID_BASIC:
|
||||||
@ -644,9 +646,11 @@ ShaderInfo generate_shader(const std::string &name, u8 material_type, u8 drawtyp
|
|||||||
"TILE_MATERIAL_WAVING_LIQUID_BASIC",
|
"TILE_MATERIAL_WAVING_LIQUID_BASIC",
|
||||||
"TILE_MATERIAL_WAVING_LIQUID_TRANSPARENT",
|
"TILE_MATERIAL_WAVING_LIQUID_TRANSPARENT",
|
||||||
"TILE_MATERIAL_WAVING_LIQUID_OPAQUE",
|
"TILE_MATERIAL_WAVING_LIQUID_OPAQUE",
|
||||||
|
"TILE_MATERIAL_PLAIN",
|
||||||
|
"TILE_MATERIAL_PLAIN_ALPHA",
|
||||||
};
|
};
|
||||||
|
|
||||||
for (int i = 0; i < 10; i++){
|
for (int i = 0; i < 12; i++){
|
||||||
shaders_header += "#define ";
|
shaders_header += "#define ";
|
||||||
shaders_header += materialTypes[i];
|
shaders_header += materialTypes[i];
|
||||||
shaders_header += " ";
|
shaders_header += " ";
|
||||||
|
@ -150,6 +150,8 @@ enum MaterialType{
|
|||||||
TILE_MATERIAL_WAVING_LIQUID_BASIC,
|
TILE_MATERIAL_WAVING_LIQUID_BASIC,
|
||||||
TILE_MATERIAL_WAVING_LIQUID_TRANSPARENT,
|
TILE_MATERIAL_WAVING_LIQUID_TRANSPARENT,
|
||||||
TILE_MATERIAL_WAVING_LIQUID_OPAQUE,
|
TILE_MATERIAL_WAVING_LIQUID_OPAQUE,
|
||||||
|
TILE_MATERIAL_PLAIN,
|
||||||
|
TILE_MATERIAL_PLAIN_ALPHA
|
||||||
};
|
};
|
||||||
|
|
||||||
// Material flags
|
// Material flags
|
||||||
|
@ -69,6 +69,7 @@ std::string ObjectProperties::dump()
|
|||||||
os << ", zoom_fov=" << zoom_fov;
|
os << ", zoom_fov=" << zoom_fov;
|
||||||
os << ", use_texture_alpha=" << use_texture_alpha;
|
os << ", use_texture_alpha=" << use_texture_alpha;
|
||||||
os << ", damage_texture_modifier=" << damage_texture_modifier;
|
os << ", damage_texture_modifier=" << damage_texture_modifier;
|
||||||
|
os << ", shaded=" << shaded;
|
||||||
return os.str();
|
return os.str();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -116,6 +117,7 @@ void ObjectProperties::serialize(std::ostream &os) const
|
|||||||
writeF32(os, zoom_fov);
|
writeF32(os, zoom_fov);
|
||||||
writeU8(os, use_texture_alpha);
|
writeU8(os, use_texture_alpha);
|
||||||
os << serializeString(damage_texture_modifier);
|
os << serializeString(damage_texture_modifier);
|
||||||
|
writeU8(os, shaded);
|
||||||
|
|
||||||
// Add stuff only at the bottom.
|
// Add stuff only at the bottom.
|
||||||
// Never remove anything, because we don't want new versions of this
|
// Never remove anything, because we don't want new versions of this
|
||||||
@ -170,5 +172,9 @@ void ObjectProperties::deSerialize(std::istream &is)
|
|||||||
use_texture_alpha = readU8(is);
|
use_texture_alpha = readU8(is);
|
||||||
try {
|
try {
|
||||||
damage_texture_modifier = deSerializeString(is);
|
damage_texture_modifier = deSerializeString(is);
|
||||||
|
u8 tmp = readU8(is);
|
||||||
|
if (is.eof())
|
||||||
|
throw SerializationError("");
|
||||||
|
shaded = tmp;
|
||||||
} catch (SerializationError &e) {}
|
} catch (SerializationError &e) {}
|
||||||
}
|
}
|
||||||
|
@ -61,6 +61,7 @@ struct ObjectProperties
|
|||||||
float eye_height = 1.625f;
|
float eye_height = 1.625f;
|
||||||
float zoom_fov = 0.0f;
|
float zoom_fov = 0.0f;
|
||||||
bool use_texture_alpha = false;
|
bool use_texture_alpha = false;
|
||||||
|
bool shaded = true;
|
||||||
|
|
||||||
ObjectProperties();
|
ObjectProperties();
|
||||||
std::string dump();
|
std::string dump();
|
||||||
|
@ -327,6 +327,7 @@ void read_object_properties(lua_State *L, int index,
|
|||||||
|
|
||||||
getfloatfield(L, -1, "zoom_fov", prop->zoom_fov);
|
getfloatfield(L, -1, "zoom_fov", prop->zoom_fov);
|
||||||
getboolfield(L, -1, "use_texture_alpha", prop->use_texture_alpha);
|
getboolfield(L, -1, "use_texture_alpha", prop->use_texture_alpha);
|
||||||
|
getboolfield(L, -1, "shaded", prop->shaded);
|
||||||
|
|
||||||
getstringfield(L, -1, "damage_texture_modifier", prop->damage_texture_modifier);
|
getstringfield(L, -1, "damage_texture_modifier", prop->damage_texture_modifier);
|
||||||
}
|
}
|
||||||
@ -411,6 +412,8 @@ void push_object_properties(lua_State *L, ObjectProperties *prop)
|
|||||||
lua_setfield(L, -2, "zoom_fov");
|
lua_setfield(L, -2, "zoom_fov");
|
||||||
lua_pushboolean(L, prop->use_texture_alpha);
|
lua_pushboolean(L, prop->use_texture_alpha);
|
||||||
lua_setfield(L, -2, "use_texture_alpha");
|
lua_setfield(L, -2, "use_texture_alpha");
|
||||||
|
lua_pushboolean(L, prop->shaded);
|
||||||
|
lua_setfield(L, -2, "shaded");
|
||||||
lua_pushlstring(L, prop->damage_texture_modifier.c_str(), prop->damage_texture_modifier.size());
|
lua_pushlstring(L, prop->damage_texture_modifier.c_str(), prop->damage_texture_modifier.size());
|
||||||
lua_setfield(L, -2, "damage_texture_modifier");
|
lua_setfield(L, -2, "damage_texture_modifier");
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user