Addition of SDFGI for open world global illumination
Move GI to a deferred pass
This commit is contained in:
@ -39,31 +39,32 @@ float ReflectionProbe::get_intensity() const {
|
||||
return intensity;
|
||||
}
|
||||
|
||||
void ReflectionProbe::set_interior_ambient(Color p_ambient) {
|
||||
interior_ambient = p_ambient;
|
||||
RS::get_singleton()->reflection_probe_set_interior_ambient(probe, p_ambient);
|
||||
void ReflectionProbe::set_ambient_mode(AmbientMode p_mode) {
|
||||
ambient_mode = p_mode;
|
||||
RS::get_singleton()->reflection_probe_set_ambient_mode(probe, RS::ReflectionProbeAmbientMode(p_mode));
|
||||
_change_notify();
|
||||
}
|
||||
|
||||
void ReflectionProbe::set_interior_ambient_energy(float p_energy) {
|
||||
interior_ambient_energy = p_energy;
|
||||
RS::get_singleton()->reflection_probe_set_interior_ambient_energy(probe, p_energy);
|
||||
ReflectionProbe::AmbientMode ReflectionProbe::get_ambient_mode() const {
|
||||
return ambient_mode;
|
||||
}
|
||||
|
||||
float ReflectionProbe::get_interior_ambient_energy() const {
|
||||
return interior_ambient_energy;
|
||||
void ReflectionProbe::set_ambient_color(Color p_ambient) {
|
||||
ambient_color = p_ambient;
|
||||
RS::get_singleton()->reflection_probe_set_ambient_color(probe, p_ambient);
|
||||
}
|
||||
|
||||
Color ReflectionProbe::get_interior_ambient() const {
|
||||
return interior_ambient;
|
||||
void ReflectionProbe::set_ambient_color_energy(float p_energy) {
|
||||
ambient_color_energy = p_energy;
|
||||
RS::get_singleton()->reflection_probe_set_ambient_energy(probe, p_energy);
|
||||
}
|
||||
|
||||
void ReflectionProbe::set_interior_ambient_probe_contribution(float p_contribution) {
|
||||
interior_ambient_probe_contribution = p_contribution;
|
||||
RS::get_singleton()->reflection_probe_set_interior_ambient_probe_contribution(probe, p_contribution);
|
||||
float ReflectionProbe::get_ambient_color_energy() const {
|
||||
return ambient_color_energy;
|
||||
}
|
||||
|
||||
float ReflectionProbe::get_interior_ambient_probe_contribution() const {
|
||||
return interior_ambient_probe_contribution;
|
||||
Color ReflectionProbe::get_ambient_color() const {
|
||||
return ambient_color;
|
||||
}
|
||||
|
||||
void ReflectionProbe::set_max_distance(float p_distance) {
|
||||
@ -130,7 +131,6 @@ bool ReflectionProbe::is_box_projection_enabled() const {
|
||||
void ReflectionProbe::set_as_interior(bool p_enable) {
|
||||
interior = p_enable;
|
||||
RS::get_singleton()->reflection_probe_set_as_interior(probe, interior);
|
||||
_change_notify();
|
||||
}
|
||||
|
||||
bool ReflectionProbe::is_set_as_interior() const {
|
||||
@ -176,8 +176,8 @@ Vector<Face3> ReflectionProbe::get_faces(uint32_t p_usage_flags) const {
|
||||
}
|
||||
|
||||
void ReflectionProbe::_validate_property(PropertyInfo &property) const {
|
||||
if (property.name == "interior/ambient_color" || property.name == "interior/ambient_energy" || property.name == "interior/ambient_contrib") {
|
||||
if (!interior) {
|
||||
if (property.name == "interior/ambient_color" || property.name == "interior/ambient_color_energy") {
|
||||
if (ambient_mode != AMBIENT_COLOR) {
|
||||
property.usage = PROPERTY_USAGE_NOEDITOR | PROPERTY_USAGE_INTERNAL;
|
||||
}
|
||||
}
|
||||
@ -187,14 +187,14 @@ void ReflectionProbe::_bind_methods() {
|
||||
ClassDB::bind_method(D_METHOD("set_intensity", "intensity"), &ReflectionProbe::set_intensity);
|
||||
ClassDB::bind_method(D_METHOD("get_intensity"), &ReflectionProbe::get_intensity);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("set_interior_ambient", "ambient"), &ReflectionProbe::set_interior_ambient);
|
||||
ClassDB::bind_method(D_METHOD("get_interior_ambient"), &ReflectionProbe::get_interior_ambient);
|
||||
ClassDB::bind_method(D_METHOD("set_ambient_mode", "ambient"), &ReflectionProbe::set_ambient_mode);
|
||||
ClassDB::bind_method(D_METHOD("get_ambient_mode"), &ReflectionProbe::get_ambient_mode);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("set_interior_ambient_energy", "ambient_energy"), &ReflectionProbe::set_interior_ambient_energy);
|
||||
ClassDB::bind_method(D_METHOD("get_interior_ambient_energy"), &ReflectionProbe::get_interior_ambient_energy);
|
||||
ClassDB::bind_method(D_METHOD("set_ambient_color", "ambient"), &ReflectionProbe::set_ambient_color);
|
||||
ClassDB::bind_method(D_METHOD("get_ambient_color"), &ReflectionProbe::get_ambient_color);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("set_interior_ambient_probe_contribution", "ambient_probe_contribution"), &ReflectionProbe::set_interior_ambient_probe_contribution);
|
||||
ClassDB::bind_method(D_METHOD("get_interior_ambient_probe_contribution"), &ReflectionProbe::get_interior_ambient_probe_contribution);
|
||||
ClassDB::bind_method(D_METHOD("set_ambient_color_energy", "ambient_energy"), &ReflectionProbe::set_ambient_color_energy);
|
||||
ClassDB::bind_method(D_METHOD("get_ambient_color_energy"), &ReflectionProbe::get_ambient_color_energy);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("set_max_distance", "max_distance"), &ReflectionProbe::set_max_distance);
|
||||
ClassDB::bind_method(D_METHOD("get_max_distance"), &ReflectionProbe::get_max_distance);
|
||||
@ -226,24 +226,28 @@ void ReflectionProbe::_bind_methods() {
|
||||
ADD_PROPERTY(PropertyInfo(Variant::VECTOR3, "extents"), "set_extents", "get_extents");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::VECTOR3, "origin_offset"), "set_origin_offset", "get_origin_offset");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "box_projection"), "set_enable_box_projection", "is_box_projection_enabled");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "interior"), "set_as_interior", "is_set_as_interior");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "enable_shadows"), "set_enable_shadows", "are_shadows_enabled");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::INT, "cull_mask", PROPERTY_HINT_LAYERS_3D_RENDER), "set_cull_mask", "get_cull_mask");
|
||||
|
||||
ADD_GROUP("Interior", "interior_");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "interior_enable"), "set_as_interior", "is_set_as_interior");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::COLOR, "interior_ambient_color", PROPERTY_HINT_COLOR_NO_ALPHA), "set_interior_ambient", "get_interior_ambient");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "interior_ambient_energy", PROPERTY_HINT_RANGE, "0,16,0.01"), "set_interior_ambient_energy", "get_interior_ambient_energy");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "interior_ambient_contrib", PROPERTY_HINT_RANGE, "0,1,0.01"), "set_interior_ambient_probe_contribution", "get_interior_ambient_probe_contribution");
|
||||
ADD_GROUP("Ambient", "ambient_");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::INT, "ambient_mode", PROPERTY_HINT_ENUM, "Disabled,Environment,ConstantColor"), "set_ambient_mode", "get_ambient_mode");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::COLOR, "ambient_color", PROPERTY_HINT_COLOR_NO_ALPHA), "set_ambient_color", "get_ambient_color");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "ambient_color_energy", PROPERTY_HINT_RANGE, "0,16,0.01"), "set_ambient_color_energy", "get_ambient_color_energy");
|
||||
|
||||
BIND_ENUM_CONSTANT(UPDATE_ONCE);
|
||||
BIND_ENUM_CONSTANT(UPDATE_ALWAYS);
|
||||
|
||||
BIND_ENUM_CONSTANT(AMBIENT_DISABLED);
|
||||
BIND_ENUM_CONSTANT(AMBIENT_ENVIRONMENT);
|
||||
BIND_ENUM_CONSTANT(AMBIENT_COLOR);
|
||||
}
|
||||
|
||||
ReflectionProbe::ReflectionProbe() {
|
||||
intensity = 1.0;
|
||||
interior_ambient = Color(0, 0, 0);
|
||||
interior_ambient_probe_contribution = 0;
|
||||
interior_ambient_energy = 1.0;
|
||||
ambient_mode = AMBIENT_ENVIRONMENT;
|
||||
ambient_color = Color(0, 0, 0);
|
||||
ambient_color_energy = 1.0;
|
||||
max_distance = 0;
|
||||
extents = Vector3(1, 1, 1);
|
||||
origin_offset = Vector3(0, 0, 0);
|
||||
|
||||
Reference in New Issue
Block a user