You've already forked godot
mirror of
https://github.com/godotengine/godot.git
synced 2025-11-22 15:06:45 +00:00
Addition of FogVolumes, FogShaders, FogMaterial, and overhaul of VolumetricFog
Co-authored-by: Brian Semrau <brian.semrau@gmail.com>
This commit is contained in:
@@ -1096,6 +1096,7 @@ static const char *type_string[VisualShader::TYPE_MAX] = {
|
||||
"start_custom",
|
||||
"process_custom",
|
||||
"sky",
|
||||
"fog",
|
||||
};
|
||||
|
||||
bool VisualShader::_set(const StringName &p_name, const Variant &p_value) {
|
||||
@@ -1245,7 +1246,7 @@ void VisualShader::reset_state() {
|
||||
}
|
||||
void VisualShader::_get_property_list(List<PropertyInfo> *p_list) const {
|
||||
//mode
|
||||
p_list->push_back(PropertyInfo(Variant::INT, "mode", PROPERTY_HINT_ENUM, "Node3D,CanvasItem,Particles,Sky"));
|
||||
p_list->push_back(PropertyInfo(Variant::INT, "mode", PROPERTY_HINT_ENUM, "Node3D,CanvasItem,Particles,Sky,Fog"));
|
||||
//render modes
|
||||
|
||||
Map<String, String> blend_mode_enums;
|
||||
@@ -1636,7 +1637,7 @@ void VisualShader::_update_shader() const {
|
||||
Vector<VisualShader::DefaultTextureParam> default_tex_params;
|
||||
Set<StringName> classes;
|
||||
Map<int, int> insertion_pos;
|
||||
static const char *shader_mode_str[Shader::MODE_MAX] = { "spatial", "canvas_item", "particles", "sky" };
|
||||
static const char *shader_mode_str[Shader::MODE_MAX] = { "spatial", "canvas_item", "particles", "sky", "fog" };
|
||||
|
||||
global_code += String() + "shader_type " + shader_mode_str[shader_mode] + ";\n";
|
||||
|
||||
@@ -1684,7 +1685,7 @@ void VisualShader::_update_shader() const {
|
||||
global_code += "render_mode " + render_mode + ";\n\n";
|
||||
}
|
||||
|
||||
static const char *func_name[TYPE_MAX] = { "vertex", "fragment", "light", "start", "process", "collide", "start_custom", "process_custom", "sky" };
|
||||
static const char *func_name[TYPE_MAX] = { "vertex", "fragment", "light", "start", "process", "collide", "start_custom", "process_custom", "sky", "fog" };
|
||||
|
||||
String global_expressions;
|
||||
Set<String> used_uniform_names;
|
||||
@@ -1755,7 +1756,7 @@ void VisualShader::_update_shader() const {
|
||||
StringBuilder func_code;
|
||||
|
||||
bool is_empty_func = false;
|
||||
if (shader_mode != Shader::MODE_PARTICLES && shader_mode != Shader::MODE_SKY) {
|
||||
if (shader_mode != Shader::MODE_PARTICLES && shader_mode != Shader::MODE_SKY && shader_mode != Shader::MODE_FOG) {
|
||||
is_empty_func = true;
|
||||
}
|
||||
|
||||
@@ -2030,6 +2031,7 @@ void VisualShader::_bind_methods() {
|
||||
BIND_ENUM_CONSTANT(TYPE_START_CUSTOM);
|
||||
BIND_ENUM_CONSTANT(TYPE_PROCESS_CUSTOM);
|
||||
BIND_ENUM_CONSTANT(TYPE_SKY);
|
||||
BIND_ENUM_CONSTANT(TYPE_FOG);
|
||||
BIND_ENUM_CONSTANT(TYPE_MAX);
|
||||
|
||||
BIND_CONSTANT(NODE_ID_INVALID);
|
||||
@@ -2307,6 +2309,16 @@ const VisualShaderNodeInput::Port VisualShaderNodeInput::ports[] = {
|
||||
{ Shader::MODE_SKY, VisualShader::TYPE_SKY, VisualShaderNode::PORT_TYPE_VECTOR, "sky_coords", "vec3(SKY_COORDS, 0.0)" },
|
||||
{ Shader::MODE_SKY, VisualShader::TYPE_SKY, VisualShaderNode::PORT_TYPE_SCALAR, "time", "TIME" },
|
||||
|
||||
// Fog, Fog
|
||||
|
||||
{ Shader::MODE_FOG, VisualShader::TYPE_FOG, VisualShaderNode::PORT_TYPE_VECTOR, "world_position", "WORLD_POSITION" },
|
||||
{ Shader::MODE_FOG, VisualShader::TYPE_FOG, VisualShaderNode::PORT_TYPE_VECTOR, "object_position", "OBJECT_POSITION" },
|
||||
{ Shader::MODE_FOG, VisualShader::TYPE_FOG, VisualShaderNode::PORT_TYPE_VECTOR, "uvw", "UVW" },
|
||||
{ Shader::MODE_FOG, VisualShader::TYPE_FOG, VisualShaderNode::PORT_TYPE_VECTOR, "extents", "EXTENTS" },
|
||||
{ Shader::MODE_FOG, VisualShader::TYPE_FOG, VisualShaderNode::PORT_TYPE_TRANSFORM, "transform", "TRANSFORM" },
|
||||
{ Shader::MODE_FOG, VisualShader::TYPE_FOG, VisualShaderNode::PORT_TYPE_SCALAR, "sdf", "SDF" },
|
||||
{ Shader::MODE_FOG, VisualShader::TYPE_FOG, VisualShaderNode::PORT_TYPE_SCALAR, "time", "TIME" },
|
||||
|
||||
{ Shader::MODE_MAX, VisualShader::TYPE_MAX, VisualShaderNode::PORT_TYPE_TRANSFORM, nullptr, nullptr },
|
||||
};
|
||||
|
||||
@@ -2932,6 +2944,13 @@ const VisualShaderNodeOutput::Port VisualShaderNodeOutput::ports[] = {
|
||||
{ Shader::MODE_SKY, VisualShader::TYPE_SKY, VisualShaderNode::PORT_TYPE_VECTOR, "fog", "FOG.rgb" },
|
||||
{ Shader::MODE_SKY, VisualShader::TYPE_SKY, VisualShaderNode::PORT_TYPE_SCALAR, "fog_alpha", "FOG.a" },
|
||||
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
// Fog, Fog.
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
{ Shader::MODE_FOG, VisualShader::TYPE_FOG, VisualShaderNode::PORT_TYPE_SCALAR, "density", "DENSITY" },
|
||||
{ Shader::MODE_FOG, VisualShader::TYPE_FOG, VisualShaderNode::PORT_TYPE_VECTOR, "albedo", "ALBEDO" },
|
||||
{ Shader::MODE_FOG, VisualShader::TYPE_FOG, VisualShaderNode::PORT_TYPE_VECTOR, "emission", "EMISSION" },
|
||||
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
{ Shader::MODE_MAX, VisualShader::TYPE_MAX, VisualShaderNode::PORT_TYPE_TRANSFORM, nullptr, nullptr },
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user