You've already forked godot
mirror of
https://github.com/godotengine/godot.git
synced 2025-11-26 15:46:23 +00:00
Merge pull request #72075 from Maran23/extents-to-size
Replace Extents with Size in VoxelGI, ReflectionProbe, FogVolume, Decal and GPUParticles*3D
This commit is contained in:
@@ -30,14 +30,14 @@
|
||||
|
||||
#include "decal.h"
|
||||
|
||||
void Decal::set_extents(const Vector3 &p_extents) {
|
||||
extents = p_extents;
|
||||
RS::get_singleton()->decal_set_extents(decal, p_extents);
|
||||
void Decal::set_size(const Vector3 &p_size) {
|
||||
size = p_size;
|
||||
RS::get_singleton()->decal_set_size(decal, p_size);
|
||||
update_gizmos();
|
||||
}
|
||||
|
||||
Vector3 Decal::get_extents() const {
|
||||
return extents;
|
||||
Vector3 Decal::get_size() const {
|
||||
return size;
|
||||
}
|
||||
|
||||
void Decal::set_texture(DecalTexture p_type, const Ref<Texture2D> &p_texture) {
|
||||
@@ -147,8 +147,8 @@ uint32_t Decal::get_cull_mask() const {
|
||||
|
||||
AABB Decal::get_aabb() const {
|
||||
AABB aabb;
|
||||
aabb.position = -extents;
|
||||
aabb.size = extents * 2.0;
|
||||
aabb.position = -size / 2;
|
||||
aabb.size = size;
|
||||
return aabb;
|
||||
}
|
||||
|
||||
@@ -181,8 +181,8 @@ PackedStringArray Decal::get_configuration_warnings() const {
|
||||
}
|
||||
|
||||
void Decal::_bind_methods() {
|
||||
ClassDB::bind_method(D_METHOD("set_extents", "extents"), &Decal::set_extents);
|
||||
ClassDB::bind_method(D_METHOD("get_extents"), &Decal::get_extents);
|
||||
ClassDB::bind_method(D_METHOD("set_size", "size"), &Decal::set_size);
|
||||
ClassDB::bind_method(D_METHOD("get_size"), &Decal::get_size);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("set_texture", "type", "texture"), &Decal::set_texture);
|
||||
ClassDB::bind_method(D_METHOD("get_texture", "type"), &Decal::get_texture);
|
||||
@@ -217,7 +217,7 @@ void Decal::_bind_methods() {
|
||||
ClassDB::bind_method(D_METHOD("set_cull_mask", "mask"), &Decal::set_cull_mask);
|
||||
ClassDB::bind_method(D_METHOD("get_cull_mask"), &Decal::get_cull_mask);
|
||||
|
||||
ADD_PROPERTY(PropertyInfo(Variant::VECTOR3, "extents", PROPERTY_HINT_RANGE, "0,1024,0.001,or_greater,suffix:m"), "set_extents", "get_extents");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::VECTOR3, "size", PROPERTY_HINT_RANGE, "0,1024,0.001,or_greater,suffix:m"), "set_size", "get_size");
|
||||
|
||||
ADD_GROUP("Textures", "texture_");
|
||||
ADD_PROPERTYI(PropertyInfo(Variant::OBJECT, "texture_albedo", PROPERTY_HINT_RESOURCE_TYPE, "Texture"), "set_texture", "get_texture", TEXTURE_ALBEDO);
|
||||
@@ -252,6 +252,24 @@ void Decal::_bind_methods() {
|
||||
BIND_ENUM_CONSTANT(TEXTURE_MAX);
|
||||
}
|
||||
|
||||
#ifndef DISABLE_DEPRECATED
|
||||
bool Decal::_set(const StringName &p_name, const Variant &p_value) {
|
||||
if (p_name == "extents") { // Compatibility with Godot 3.x.
|
||||
set_size((Vector3)p_value * 2);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
bool Decal::_get(const StringName &p_name, Variant &r_property) const {
|
||||
if (p_name == "extents") { // Compatibility with Godot 3.x.
|
||||
r_property = size / 2;
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
#endif // DISABLE_DEPRECATED
|
||||
|
||||
Decal::Decal() {
|
||||
decal = RenderingServer::get_singleton()->decal_create();
|
||||
RS::get_singleton()->instance_set_base(get_instance(), decal);
|
||||
|
||||
@@ -47,7 +47,7 @@ public:
|
||||
|
||||
private:
|
||||
RID decal;
|
||||
Vector3 extents = Vector3(1, 1, 1);
|
||||
Vector3 size = Vector3(2, 2, 2);
|
||||
Ref<Texture2D> textures[TEXTURE_MAX];
|
||||
real_t emission_energy = 1.0;
|
||||
real_t albedo_mix = 1.0;
|
||||
@@ -63,12 +63,16 @@ private:
|
||||
protected:
|
||||
static void _bind_methods();
|
||||
void _validate_property(PropertyInfo &p_property) const;
|
||||
#ifndef DISABLE_DEPRECATED
|
||||
bool _set(const StringName &p_name, const Variant &p_value);
|
||||
bool _get(const StringName &p_name, Variant &r_property) const;
|
||||
#endif // DISABLE_DEPRECATED
|
||||
|
||||
public:
|
||||
virtual PackedStringArray get_configuration_warnings() const override;
|
||||
|
||||
void set_extents(const Vector3 &p_extents);
|
||||
Vector3 get_extents() const;
|
||||
void set_size(const Vector3 &p_size);
|
||||
Vector3 get_size() const;
|
||||
|
||||
void set_texture(DecalTexture p_type, const Ref<Texture2D> &p_texture);
|
||||
Ref<Texture2D> get_texture(DecalTexture p_type) const;
|
||||
|
||||
@@ -34,36 +34,54 @@
|
||||
///////////////////////////
|
||||
|
||||
void FogVolume::_bind_methods() {
|
||||
ClassDB::bind_method(D_METHOD("set_extents", "extents"), &FogVolume::set_extents);
|
||||
ClassDB::bind_method(D_METHOD("get_extents"), &FogVolume::get_extents);
|
||||
ClassDB::bind_method(D_METHOD("set_size", "size"), &FogVolume::set_size);
|
||||
ClassDB::bind_method(D_METHOD("get_size"), &FogVolume::get_size);
|
||||
ClassDB::bind_method(D_METHOD("set_shape", "shape"), &FogVolume::set_shape);
|
||||
ClassDB::bind_method(D_METHOD("get_shape"), &FogVolume::get_shape);
|
||||
ClassDB::bind_method(D_METHOD("set_material", "material"), &FogVolume::set_material);
|
||||
ClassDB::bind_method(D_METHOD("get_material"), &FogVolume::get_material);
|
||||
|
||||
ADD_PROPERTY(PropertyInfo(Variant::VECTOR3, "extents", PROPERTY_HINT_RANGE, "0.01,1024,0.01,or_greater,suffix:m"), "set_extents", "get_extents");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::VECTOR3, "size", PROPERTY_HINT_RANGE, "0.01,1024,0.01,or_greater,suffix:m"), "set_size", "get_size");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::INT, "shape", PROPERTY_HINT_ENUM, "Ellipsoid (Local),Cone (Local),Cylinder (Local),Box (Local),World (Global)"), "set_shape", "get_shape");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "material", PROPERTY_HINT_RESOURCE_TYPE, "FogMaterial,ShaderMaterial"), "set_material", "get_material");
|
||||
}
|
||||
|
||||
void FogVolume::_validate_property(PropertyInfo &p_property) const {
|
||||
if (p_property.name == "extents" && shape == RS::FOG_VOLUME_SHAPE_WORLD) {
|
||||
if (p_property.name == "size" && shape == RS::FOG_VOLUME_SHAPE_WORLD) {
|
||||
p_property.usage = PROPERTY_USAGE_NONE;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
void FogVolume::set_extents(const Vector3 &p_extents) {
|
||||
extents = p_extents;
|
||||
extents.x = MAX(0.0, extents.x);
|
||||
extents.y = MAX(0.0, extents.y);
|
||||
extents.z = MAX(0.0, extents.z);
|
||||
RS::get_singleton()->fog_volume_set_extents(_get_volume(), extents);
|
||||
#ifndef DISABLE_DEPRECATED
|
||||
bool FogVolume::_set(const StringName &p_name, const Variant &p_value) {
|
||||
if (p_name == "extents") { // Compatibility with Godot 3.x.
|
||||
set_size((Vector3)p_value * 2);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
bool FogVolume::_get(const StringName &p_name, Variant &r_property) const {
|
||||
if (p_name == "extents") { // Compatibility with Godot 3.x.
|
||||
r_property = size / 2;
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
#endif // DISABLE_DEPRECATED
|
||||
|
||||
void FogVolume::set_size(const Vector3 &p_size) {
|
||||
size = p_size;
|
||||
size.x = MAX(0.0, size.x);
|
||||
size.y = MAX(0.0, size.y);
|
||||
size.z = MAX(0.0, size.z);
|
||||
RS::get_singleton()->fog_volume_set_size(_get_volume(), size);
|
||||
update_gizmos();
|
||||
}
|
||||
|
||||
Vector3 FogVolume::get_extents() const {
|
||||
return extents;
|
||||
Vector3 FogVolume::get_size() const {
|
||||
return size;
|
||||
}
|
||||
|
||||
void FogVolume::set_shape(RS::FogVolumeShape p_type) {
|
||||
@@ -94,7 +112,7 @@ Ref<Material> FogVolume::get_material() const {
|
||||
|
||||
AABB FogVolume::get_aabb() const {
|
||||
if (shape != RS::FOG_VOLUME_SHAPE_WORLD) {
|
||||
return AABB(-extents, extents * 2);
|
||||
return AABB(-size / 2, size);
|
||||
}
|
||||
return AABB();
|
||||
}
|
||||
|
||||
@@ -40,7 +40,7 @@
|
||||
class FogVolume : public VisualInstance3D {
|
||||
GDCLASS(FogVolume, VisualInstance3D);
|
||||
|
||||
Vector3 extents = Vector3(1, 1, 1);
|
||||
Vector3 size = Vector3(2, 2, 2);
|
||||
Ref<Material> material;
|
||||
RS::FogVolumeShape shape = RS::FOG_VOLUME_SHAPE_BOX;
|
||||
|
||||
@@ -50,10 +50,14 @@ protected:
|
||||
_FORCE_INLINE_ RID _get_volume() { return volume; }
|
||||
static void _bind_methods();
|
||||
void _validate_property(PropertyInfo &p_property) const;
|
||||
#ifndef DISABLE_DEPRECATED
|
||||
bool _set(const StringName &p_name, const Variant &p_value);
|
||||
bool _get(const StringName &p_name, Variant &r_property) const;
|
||||
#endif // DISABLE_DEPRECATED
|
||||
|
||||
public:
|
||||
void set_extents(const Vector3 &p_extents);
|
||||
Vector3 get_extents() const;
|
||||
void set_size(const Vector3 &p_size);
|
||||
Vector3 get_size() const;
|
||||
|
||||
void set_shape(RS::FogVolumeShape p_type);
|
||||
RS::FogVolumeShape get_shape() const;
|
||||
|
||||
@@ -95,24 +95,42 @@ GPUParticlesCollisionSphere3D::~GPUParticlesCollisionSphere3D() {
|
||||
///////////////////////////
|
||||
|
||||
void GPUParticlesCollisionBox3D::_bind_methods() {
|
||||
ClassDB::bind_method(D_METHOD("set_extents", "extents"), &GPUParticlesCollisionBox3D::set_extents);
|
||||
ClassDB::bind_method(D_METHOD("get_extents"), &GPUParticlesCollisionBox3D::get_extents);
|
||||
ClassDB::bind_method(D_METHOD("set_size", "size"), &GPUParticlesCollisionBox3D::set_size);
|
||||
ClassDB::bind_method(D_METHOD("get_size"), &GPUParticlesCollisionBox3D::get_size);
|
||||
|
||||
ADD_PROPERTY(PropertyInfo(Variant::VECTOR3, "extents", PROPERTY_HINT_RANGE, "0.01,1024,0.01,or_greater,suffix:m"), "set_extents", "get_extents");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::VECTOR3, "size", PROPERTY_HINT_RANGE, "0.01,1024,0.01,or_greater,suffix:m"), "set_size", "get_size");
|
||||
}
|
||||
|
||||
void GPUParticlesCollisionBox3D::set_extents(const Vector3 &p_extents) {
|
||||
extents = p_extents;
|
||||
RS::get_singleton()->particles_collision_set_box_extents(_get_collision(), extents);
|
||||
#ifndef DISABLE_DEPRECATED
|
||||
bool GPUParticlesCollisionBox3D::_set(const StringName &p_name, const Variant &p_value) {
|
||||
if (p_name == "extents") { // Compatibility with Godot 3.x.
|
||||
set_size((Vector3)p_value * 2);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
bool GPUParticlesCollisionBox3D::_get(const StringName &p_name, Variant &r_property) const {
|
||||
if (p_name == "extents") { // Compatibility with Godot 3.x.
|
||||
r_property = size / 2;
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
#endif // DISABLE_DEPRECATED
|
||||
|
||||
void GPUParticlesCollisionBox3D::set_size(const Vector3 &p_size) {
|
||||
size = p_size;
|
||||
RS::get_singleton()->particles_collision_set_box_extents(_get_collision(), size / 2);
|
||||
update_gizmos();
|
||||
}
|
||||
|
||||
Vector3 GPUParticlesCollisionBox3D::get_extents() const {
|
||||
return extents;
|
||||
Vector3 GPUParticlesCollisionBox3D::get_size() const {
|
||||
return size;
|
||||
}
|
||||
|
||||
AABB GPUParticlesCollisionBox3D::get_aabb() const {
|
||||
return AABB(-extents, extents * 2);
|
||||
return AABB(-size / 2, size);
|
||||
}
|
||||
|
||||
GPUParticlesCollisionBox3D::GPUParticlesCollisionBox3D() :
|
||||
@@ -359,7 +377,7 @@ Vector3i GPUParticlesCollisionSDF3D::get_estimated_cell_size() const {
|
||||
static const int subdivs[RESOLUTION_MAX] = { 16, 32, 64, 128, 256, 512 };
|
||||
int subdiv = subdivs[get_resolution()];
|
||||
|
||||
AABB aabb(-extents, extents * 2);
|
||||
AABB aabb(-size / 2, size);
|
||||
|
||||
float cell_size = aabb.get_longest_axis_size() / float(subdiv);
|
||||
|
||||
@@ -374,7 +392,7 @@ Ref<Image> GPUParticlesCollisionSDF3D::bake() {
|
||||
static const int subdivs[RESOLUTION_MAX] = { 16, 32, 64, 128, 256, 512 };
|
||||
int subdiv = subdivs[get_resolution()];
|
||||
|
||||
AABB aabb(-extents, extents * 2);
|
||||
AABB aabb(-size / 2, size);
|
||||
|
||||
float cell_size = aabb.get_longest_axis_size() / float(subdiv);
|
||||
|
||||
@@ -515,8 +533,8 @@ PackedStringArray GPUParticlesCollisionSDF3D::get_configuration_warnings() const
|
||||
}
|
||||
|
||||
void GPUParticlesCollisionSDF3D::_bind_methods() {
|
||||
ClassDB::bind_method(D_METHOD("set_extents", "extents"), &GPUParticlesCollisionSDF3D::set_extents);
|
||||
ClassDB::bind_method(D_METHOD("get_extents"), &GPUParticlesCollisionSDF3D::get_extents);
|
||||
ClassDB::bind_method(D_METHOD("set_size", "size"), &GPUParticlesCollisionSDF3D::set_size);
|
||||
ClassDB::bind_method(D_METHOD("get_size"), &GPUParticlesCollisionSDF3D::get_size);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("set_resolution", "resolution"), &GPUParticlesCollisionSDF3D::set_resolution);
|
||||
ClassDB::bind_method(D_METHOD("get_resolution"), &GPUParticlesCollisionSDF3D::get_resolution);
|
||||
@@ -532,7 +550,7 @@ void GPUParticlesCollisionSDF3D::_bind_methods() {
|
||||
ClassDB::bind_method(D_METHOD("set_bake_mask_value", "layer_number", "value"), &GPUParticlesCollisionSDF3D::set_bake_mask_value);
|
||||
ClassDB::bind_method(D_METHOD("get_bake_mask_value", "layer_number"), &GPUParticlesCollisionSDF3D::get_bake_mask_value);
|
||||
|
||||
ADD_PROPERTY(PropertyInfo(Variant::VECTOR3, "extents", PROPERTY_HINT_RANGE, "0.01,1024,0.01,or_greater,suffix:m"), "set_extents", "get_extents");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::VECTOR3, "size", PROPERTY_HINT_RANGE, "0.01,1024,0.01,or_greater,suffix:m"), "set_size", "get_size");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::INT, "resolution", PROPERTY_HINT_ENUM, "16,32,64,128,256,512"), "set_resolution", "get_resolution");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "thickness", PROPERTY_HINT_RANGE, "0.0,2.0,0.01,suffix:m"), "set_thickness", "get_thickness");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::INT, "bake_mask", PROPERTY_HINT_LAYERS_3D_RENDER), "set_bake_mask", "get_bake_mask");
|
||||
@@ -547,6 +565,24 @@ void GPUParticlesCollisionSDF3D::_bind_methods() {
|
||||
BIND_ENUM_CONSTANT(RESOLUTION_MAX);
|
||||
}
|
||||
|
||||
#ifndef DISABLE_DEPRECATED
|
||||
bool GPUParticlesCollisionSDF3D::_set(const StringName &p_name, const Variant &p_value) {
|
||||
if (p_name == "extents") { // Compatibility with Godot 3.x.
|
||||
set_size((Vector3)p_value * 2);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
bool GPUParticlesCollisionSDF3D::_get(const StringName &p_name, Variant &r_property) const {
|
||||
if (p_name == "extents") { // Compatibility with Godot 3.x.
|
||||
r_property = size / 2;
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
#endif // DISABLE_DEPRECATED
|
||||
|
||||
void GPUParticlesCollisionSDF3D::set_thickness(float p_thickness) {
|
||||
thickness = p_thickness;
|
||||
}
|
||||
@@ -555,14 +591,14 @@ float GPUParticlesCollisionSDF3D::get_thickness() const {
|
||||
return thickness;
|
||||
}
|
||||
|
||||
void GPUParticlesCollisionSDF3D::set_extents(const Vector3 &p_extents) {
|
||||
extents = p_extents;
|
||||
RS::get_singleton()->particles_collision_set_box_extents(_get_collision(), extents);
|
||||
void GPUParticlesCollisionSDF3D::set_size(const Vector3 &p_size) {
|
||||
size = p_size;
|
||||
RS::get_singleton()->particles_collision_set_box_extents(_get_collision(), size / 2);
|
||||
update_gizmos();
|
||||
}
|
||||
|
||||
Vector3 GPUParticlesCollisionSDF3D::get_extents() const {
|
||||
return extents;
|
||||
Vector3 GPUParticlesCollisionSDF3D::get_size() const {
|
||||
return size;
|
||||
}
|
||||
|
||||
void GPUParticlesCollisionSDF3D::set_resolution(Resolution p_resolution) {
|
||||
@@ -610,7 +646,7 @@ Ref<Texture3D> GPUParticlesCollisionSDF3D::get_texture() const {
|
||||
}
|
||||
|
||||
AABB GPUParticlesCollisionSDF3D::get_aabb() const {
|
||||
return AABB(-extents, extents * 2);
|
||||
return AABB(-size / 2, size);
|
||||
}
|
||||
|
||||
GPUParticlesCollisionSDF3D::BakeBeginFunc GPUParticlesCollisionSDF3D::bake_begin_function = nullptr;
|
||||
@@ -675,8 +711,8 @@ void GPUParticlesCollisionHeightField3D::_notification(int p_what) {
|
||||
}
|
||||
|
||||
void GPUParticlesCollisionHeightField3D::_bind_methods() {
|
||||
ClassDB::bind_method(D_METHOD("set_extents", "extents"), &GPUParticlesCollisionHeightField3D::set_extents);
|
||||
ClassDB::bind_method(D_METHOD("get_extents"), &GPUParticlesCollisionHeightField3D::get_extents);
|
||||
ClassDB::bind_method(D_METHOD("set_size", "size"), &GPUParticlesCollisionHeightField3D::set_size);
|
||||
ClassDB::bind_method(D_METHOD("get_size"), &GPUParticlesCollisionHeightField3D::get_size);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("set_resolution", "resolution"), &GPUParticlesCollisionHeightField3D::set_resolution);
|
||||
ClassDB::bind_method(D_METHOD("get_resolution"), &GPUParticlesCollisionHeightField3D::get_resolution);
|
||||
@@ -687,7 +723,7 @@ void GPUParticlesCollisionHeightField3D::_bind_methods() {
|
||||
ClassDB::bind_method(D_METHOD("set_follow_camera_enabled", "enabled"), &GPUParticlesCollisionHeightField3D::set_follow_camera_enabled);
|
||||
ClassDB::bind_method(D_METHOD("is_follow_camera_enabled"), &GPUParticlesCollisionHeightField3D::is_follow_camera_enabled);
|
||||
|
||||
ADD_PROPERTY(PropertyInfo(Variant::VECTOR3, "extents", PROPERTY_HINT_RANGE, "0.01,1024,0.01,or_greater,suffix:m"), "set_extents", "get_extents");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::VECTOR3, "size", PROPERTY_HINT_RANGE, "0.01,1024,0.01,or_greater,suffix:m"), "set_size", "get_size");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::INT, "resolution", PROPERTY_HINT_ENUM, "256 (Fastest),512 (Fast),1024 (Average),2048 (Slow),4096 (Slower),8192 (Slowest)"), "set_resolution", "get_resolution");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::INT, "update_mode", PROPERTY_HINT_ENUM, "When Moved (Fast),Always (Slow)"), "set_update_mode", "get_update_mode");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "follow_camera_enabled"), "set_follow_camera_enabled", "is_follow_camera_enabled");
|
||||
@@ -704,15 +740,33 @@ void GPUParticlesCollisionHeightField3D::_bind_methods() {
|
||||
BIND_ENUM_CONSTANT(UPDATE_MODE_ALWAYS);
|
||||
}
|
||||
|
||||
void GPUParticlesCollisionHeightField3D::set_extents(const Vector3 &p_extents) {
|
||||
extents = p_extents;
|
||||
RS::get_singleton()->particles_collision_set_box_extents(_get_collision(), extents);
|
||||
#ifndef DISABLE_DEPRECATED
|
||||
bool GPUParticlesCollisionHeightField3D::_set(const StringName &p_name, const Variant &p_value) {
|
||||
if (p_name == "extents") { // Compatibility with Godot 3.x.
|
||||
set_size((Vector3)p_value * 2);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
bool GPUParticlesCollisionHeightField3D::_get(const StringName &p_name, Variant &r_property) const {
|
||||
if (p_name == "extents") { // Compatibility with Godot 3.x.
|
||||
r_property = size / 2;
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
#endif // DISABLE_DEPRECATED
|
||||
|
||||
void GPUParticlesCollisionHeightField3D::set_size(const Vector3 &p_size) {
|
||||
size = p_size;
|
||||
RS::get_singleton()->particles_collision_set_box_extents(_get_collision(), size / 2);
|
||||
update_gizmos();
|
||||
RS::get_singleton()->particles_collision_height_field_update(_get_collision());
|
||||
}
|
||||
|
||||
Vector3 GPUParticlesCollisionHeightField3D::get_extents() const {
|
||||
return extents;
|
||||
Vector3 GPUParticlesCollisionHeightField3D::get_size() const {
|
||||
return size;
|
||||
}
|
||||
|
||||
void GPUParticlesCollisionHeightField3D::set_resolution(Resolution p_resolution) {
|
||||
@@ -745,7 +799,7 @@ bool GPUParticlesCollisionHeightField3D::is_follow_camera_enabled() const {
|
||||
}
|
||||
|
||||
AABB GPUParticlesCollisionHeightField3D::get_aabb() const {
|
||||
return AABB(-extents, extents * 2);
|
||||
return AABB(-size / 2, size);
|
||||
}
|
||||
|
||||
GPUParticlesCollisionHeightField3D::GPUParticlesCollisionHeightField3D() :
|
||||
@@ -857,24 +911,42 @@ GPUParticlesAttractorSphere3D::~GPUParticlesAttractorSphere3D() {
|
||||
///////////////////////////
|
||||
|
||||
void GPUParticlesAttractorBox3D::_bind_methods() {
|
||||
ClassDB::bind_method(D_METHOD("set_extents", "extents"), &GPUParticlesAttractorBox3D::set_extents);
|
||||
ClassDB::bind_method(D_METHOD("get_extents"), &GPUParticlesAttractorBox3D::get_extents);
|
||||
ClassDB::bind_method(D_METHOD("set_size", "size"), &GPUParticlesAttractorBox3D::set_size);
|
||||
ClassDB::bind_method(D_METHOD("get_size"), &GPUParticlesAttractorBox3D::get_size);
|
||||
|
||||
ADD_PROPERTY(PropertyInfo(Variant::VECTOR3, "extents", PROPERTY_HINT_RANGE, "0.01,1024,0.01,or_greater,suffix:m"), "set_extents", "get_extents");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::VECTOR3, "size", PROPERTY_HINT_RANGE, "0.01,1024,0.01,or_greater,suffix:m"), "set_size", "get_size");
|
||||
}
|
||||
|
||||
void GPUParticlesAttractorBox3D::set_extents(const Vector3 &p_extents) {
|
||||
extents = p_extents;
|
||||
RS::get_singleton()->particles_collision_set_box_extents(_get_collision(), extents);
|
||||
#ifndef DISABLE_DEPRECATED
|
||||
bool GPUParticlesAttractorBox3D::_set(const StringName &p_name, const Variant &p_value) {
|
||||
if (p_name == "extents") { // Compatibility with Godot 3.x.
|
||||
set_size((Vector3)p_value * 2);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
bool GPUParticlesAttractorBox3D::_get(const StringName &p_name, Variant &r_property) const {
|
||||
if (p_name == "extents") { // Compatibility with Godot 3.x.
|
||||
r_property = size / 2;
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
#endif // DISABLE_DEPRECATED
|
||||
|
||||
void GPUParticlesAttractorBox3D::set_size(const Vector3 &p_size) {
|
||||
size = p_size;
|
||||
RS::get_singleton()->particles_collision_set_box_extents(_get_collision(), size / 2);
|
||||
update_gizmos();
|
||||
}
|
||||
|
||||
Vector3 GPUParticlesAttractorBox3D::get_extents() const {
|
||||
return extents;
|
||||
Vector3 GPUParticlesAttractorBox3D::get_size() const {
|
||||
return size;
|
||||
}
|
||||
|
||||
AABB GPUParticlesAttractorBox3D::get_aabb() const {
|
||||
return AABB(-extents, extents * 2);
|
||||
return AABB(-size / 2, size);
|
||||
}
|
||||
|
||||
GPUParticlesAttractorBox3D::GPUParticlesAttractorBox3D() :
|
||||
@@ -887,24 +959,42 @@ GPUParticlesAttractorBox3D::~GPUParticlesAttractorBox3D() {
|
||||
///////////////////////////
|
||||
|
||||
void GPUParticlesAttractorVectorField3D::_bind_methods() {
|
||||
ClassDB::bind_method(D_METHOD("set_extents", "extents"), &GPUParticlesAttractorVectorField3D::set_extents);
|
||||
ClassDB::bind_method(D_METHOD("get_extents"), &GPUParticlesAttractorVectorField3D::get_extents);
|
||||
ClassDB::bind_method(D_METHOD("set_size", "size"), &GPUParticlesAttractorVectorField3D::set_size);
|
||||
ClassDB::bind_method(D_METHOD("get_size"), &GPUParticlesAttractorVectorField3D::get_size);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("set_texture", "texture"), &GPUParticlesAttractorVectorField3D::set_texture);
|
||||
ClassDB::bind_method(D_METHOD("get_texture"), &GPUParticlesAttractorVectorField3D::get_texture);
|
||||
|
||||
ADD_PROPERTY(PropertyInfo(Variant::VECTOR3, "extents", PROPERTY_HINT_RANGE, "0.01,1024,0.01,or_greater,suffix:m"), "set_extents", "get_extents");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::VECTOR3, "size", PROPERTY_HINT_RANGE, "0.01,1024,0.01,or_greater,suffix:m"), "set_size", "get_size");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "texture", PROPERTY_HINT_RESOURCE_TYPE, "Texture3D"), "set_texture", "get_texture");
|
||||
}
|
||||
|
||||
void GPUParticlesAttractorVectorField3D::set_extents(const Vector3 &p_extents) {
|
||||
extents = p_extents;
|
||||
RS::get_singleton()->particles_collision_set_box_extents(_get_collision(), extents);
|
||||
#ifndef DISABLE_DEPRECATED
|
||||
bool GPUParticlesAttractorVectorField3D::_set(const StringName &p_name, const Variant &p_value) {
|
||||
if (p_name == "extents") { // Compatibility with Godot 3.x.
|
||||
set_size((Vector3)p_value * 2);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
bool GPUParticlesAttractorVectorField3D::_get(const StringName &p_name, Variant &r_property) const {
|
||||
if (p_name == "extents") { // Compatibility with Godot 3.x.
|
||||
r_property = size / 2;
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
#endif // DISABLE_DEPRECATED
|
||||
|
||||
void GPUParticlesAttractorVectorField3D::set_size(const Vector3 &p_size) {
|
||||
size = p_size;
|
||||
RS::get_singleton()->particles_collision_set_box_extents(_get_collision(), size / 2);
|
||||
update_gizmos();
|
||||
}
|
||||
|
||||
Vector3 GPUParticlesAttractorVectorField3D::get_extents() const {
|
||||
return extents;
|
||||
Vector3 GPUParticlesAttractorVectorField3D::get_size() const {
|
||||
return size;
|
||||
}
|
||||
|
||||
void GPUParticlesAttractorVectorField3D::set_texture(const Ref<Texture3D> &p_texture) {
|
||||
@@ -918,7 +1008,7 @@ Ref<Texture3D> GPUParticlesAttractorVectorField3D::get_texture() const {
|
||||
}
|
||||
|
||||
AABB GPUParticlesAttractorVectorField3D::get_aabb() const {
|
||||
return AABB(-extents, extents * 2);
|
||||
return AABB(-size / 2, size);
|
||||
}
|
||||
|
||||
GPUParticlesAttractorVectorField3D::GPUParticlesAttractorVectorField3D() :
|
||||
|
||||
@@ -74,14 +74,18 @@ public:
|
||||
class GPUParticlesCollisionBox3D : public GPUParticlesCollision3D {
|
||||
GDCLASS(GPUParticlesCollisionBox3D, GPUParticlesCollision3D);
|
||||
|
||||
Vector3 extents = Vector3(1, 1, 1);
|
||||
Vector3 size = Vector3(2, 2, 2);
|
||||
|
||||
protected:
|
||||
static void _bind_methods();
|
||||
#ifndef DISABLE_DEPRECATED
|
||||
bool _set(const StringName &p_name, const Variant &p_value);
|
||||
bool _get(const StringName &p_name, Variant &r_property) const;
|
||||
#endif // DISABLE_DEPRECATED
|
||||
|
||||
public:
|
||||
void set_extents(const Vector3 &p_extents);
|
||||
Vector3 get_extents() const;
|
||||
void set_size(const Vector3 &p_size);
|
||||
Vector3 get_size() const;
|
||||
|
||||
virtual AABB get_aabb() const override;
|
||||
|
||||
@@ -108,7 +112,7 @@ public:
|
||||
typedef void (*BakeEndFunc)();
|
||||
|
||||
private:
|
||||
Vector3 extents = Vector3(1, 1, 1);
|
||||
Vector3 size = Vector3(2, 2, 2);
|
||||
Resolution resolution = RESOLUTION_64;
|
||||
uint32_t bake_mask = 0xFFFFFFFF;
|
||||
Ref<Texture3D> texture;
|
||||
@@ -160,6 +164,10 @@ private:
|
||||
|
||||
protected:
|
||||
static void _bind_methods();
|
||||
#ifndef DISABLE_DEPRECATED
|
||||
bool _set(const StringName &p_name, const Variant &p_value);
|
||||
bool _get(const StringName &p_name, Variant &r_property) const;
|
||||
#endif // DISABLE_DEPRECATED
|
||||
|
||||
public:
|
||||
virtual PackedStringArray get_configuration_warnings() const override;
|
||||
@@ -167,8 +175,8 @@ public:
|
||||
void set_thickness(float p_thickness);
|
||||
float get_thickness() const;
|
||||
|
||||
void set_extents(const Vector3 &p_extents);
|
||||
Vector3 get_extents() const;
|
||||
void set_size(const Vector3 &p_size);
|
||||
Vector3 get_size() const;
|
||||
|
||||
void set_resolution(Resolution p_resolution);
|
||||
Resolution get_resolution() const;
|
||||
@@ -217,7 +225,7 @@ public:
|
||||
};
|
||||
|
||||
private:
|
||||
Vector3 extents = Vector3(1, 1, 1);
|
||||
Vector3 size = Vector3(2, 2, 2);
|
||||
Resolution resolution = RESOLUTION_1024;
|
||||
bool follow_camera_mode = false;
|
||||
|
||||
@@ -226,10 +234,14 @@ private:
|
||||
protected:
|
||||
void _notification(int p_what);
|
||||
static void _bind_methods();
|
||||
#ifndef DISABLE_DEPRECATED
|
||||
bool _set(const StringName &p_name, const Variant &p_value);
|
||||
bool _get(const StringName &p_name, Variant &r_property) const;
|
||||
#endif // DISABLE_DEPRECATED
|
||||
|
||||
public:
|
||||
void set_extents(const Vector3 &p_extents);
|
||||
Vector3 get_extents() const;
|
||||
void set_size(const Vector3 &p_size);
|
||||
Vector3 get_size() const;
|
||||
|
||||
void set_resolution(Resolution p_resolution);
|
||||
Resolution get_resolution() const;
|
||||
@@ -301,14 +313,18 @@ public:
|
||||
class GPUParticlesAttractorBox3D : public GPUParticlesAttractor3D {
|
||||
GDCLASS(GPUParticlesAttractorBox3D, GPUParticlesAttractor3D);
|
||||
|
||||
Vector3 extents = Vector3(1, 1, 1);
|
||||
Vector3 size = Vector3(2, 2, 2);
|
||||
|
||||
protected:
|
||||
static void _bind_methods();
|
||||
#ifndef DISABLE_DEPRECATED
|
||||
bool _set(const StringName &p_name, const Variant &p_value);
|
||||
bool _get(const StringName &p_name, Variant &r_property) const;
|
||||
#endif // DISABLE_DEPRECATED
|
||||
|
||||
public:
|
||||
void set_extents(const Vector3 &p_extents);
|
||||
Vector3 get_extents() const;
|
||||
void set_size(const Vector3 &p_size);
|
||||
Vector3 get_size() const;
|
||||
|
||||
virtual AABB get_aabb() const override;
|
||||
|
||||
@@ -319,15 +335,19 @@ public:
|
||||
class GPUParticlesAttractorVectorField3D : public GPUParticlesAttractor3D {
|
||||
GDCLASS(GPUParticlesAttractorVectorField3D, GPUParticlesAttractor3D);
|
||||
|
||||
Vector3 extents = Vector3(1, 1, 1);
|
||||
Vector3 size = Vector3(2, 2, 2);
|
||||
Ref<Texture3D> texture;
|
||||
|
||||
protected:
|
||||
static void _bind_methods();
|
||||
#ifndef DISABLE_DEPRECATED
|
||||
bool _set(const StringName &p_name, const Variant &p_value);
|
||||
bool _get(const StringName &p_name, Variant &r_property) const;
|
||||
#endif // DISABLE_DEPRECATED
|
||||
|
||||
public:
|
||||
void set_extents(const Vector3 &p_extents);
|
||||
Vector3 get_extents() const;
|
||||
void set_size(const Vector3 &p_size);
|
||||
Vector3 get_size() const;
|
||||
|
||||
void set_texture(const Ref<Texture3D> &p_texture);
|
||||
Ref<Texture3D> get_texture() const;
|
||||
|
||||
@@ -85,38 +85,40 @@ float ReflectionProbe::get_mesh_lod_threshold() const {
|
||||
return mesh_lod_threshold;
|
||||
}
|
||||
|
||||
void ReflectionProbe::set_extents(const Vector3 &p_extents) {
|
||||
extents = p_extents;
|
||||
void ReflectionProbe::set_size(const Vector3 &p_size) {
|
||||
size = p_size;
|
||||
|
||||
for (int i = 0; i < 3; i++) {
|
||||
if (extents[i] < 0.01) {
|
||||
extents[i] = 0.01;
|
||||
float half_size = size[i] / 2;
|
||||
if (half_size < 0.01) {
|
||||
half_size = 0.01;
|
||||
}
|
||||
|
||||
if (extents[i] - 0.01 < ABS(origin_offset[i])) {
|
||||
origin_offset[i] = SIGN(origin_offset[i]) * (extents[i] - 0.01);
|
||||
if (half_size - 0.01 < ABS(origin_offset[i])) {
|
||||
origin_offset[i] = SIGN(origin_offset[i]) * (half_size - 0.01);
|
||||
}
|
||||
}
|
||||
|
||||
RS::get_singleton()->reflection_probe_set_extents(probe, extents);
|
||||
RS::get_singleton()->reflection_probe_set_size(probe, size);
|
||||
RS::get_singleton()->reflection_probe_set_origin_offset(probe, origin_offset);
|
||||
|
||||
update_gizmos();
|
||||
}
|
||||
|
||||
Vector3 ReflectionProbe::get_extents() const {
|
||||
return extents;
|
||||
Vector3 ReflectionProbe::get_size() const {
|
||||
return size;
|
||||
}
|
||||
|
||||
void ReflectionProbe::set_origin_offset(const Vector3 &p_extents) {
|
||||
origin_offset = p_extents;
|
||||
void ReflectionProbe::set_origin_offset(const Vector3 &p_offset) {
|
||||
origin_offset = p_offset;
|
||||
|
||||
for (int i = 0; i < 3; i++) {
|
||||
if (extents[i] - 0.01 < ABS(origin_offset[i])) {
|
||||
origin_offset[i] = SIGN(origin_offset[i]) * (extents[i] - 0.01);
|
||||
float half_size = size[i] / 2;
|
||||
if (half_size - 0.01 < ABS(origin_offset[i])) {
|
||||
origin_offset[i] = SIGN(origin_offset[i]) * (half_size - 0.01);
|
||||
}
|
||||
}
|
||||
RS::get_singleton()->reflection_probe_set_extents(probe, extents);
|
||||
RS::get_singleton()->reflection_probe_set_size(probe, size);
|
||||
RS::get_singleton()->reflection_probe_set_origin_offset(probe, origin_offset);
|
||||
|
||||
update_gizmos();
|
||||
@@ -174,7 +176,7 @@ ReflectionProbe::UpdateMode ReflectionProbe::get_update_mode() const {
|
||||
AABB ReflectionProbe::get_aabb() const {
|
||||
AABB aabb;
|
||||
aabb.position = -origin_offset;
|
||||
aabb.size = origin_offset + extents;
|
||||
aabb.size = origin_offset + size / 2;
|
||||
return aabb;
|
||||
}
|
||||
|
||||
@@ -205,8 +207,8 @@ void ReflectionProbe::_bind_methods() {
|
||||
ClassDB::bind_method(D_METHOD("set_mesh_lod_threshold", "ratio"), &ReflectionProbe::set_mesh_lod_threshold);
|
||||
ClassDB::bind_method(D_METHOD("get_mesh_lod_threshold"), &ReflectionProbe::get_mesh_lod_threshold);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("set_extents", "extents"), &ReflectionProbe::set_extents);
|
||||
ClassDB::bind_method(D_METHOD("get_extents"), &ReflectionProbe::get_extents);
|
||||
ClassDB::bind_method(D_METHOD("set_size", "size"), &ReflectionProbe::set_size);
|
||||
ClassDB::bind_method(D_METHOD("get_size"), &ReflectionProbe::get_size);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("set_origin_offset", "origin_offset"), &ReflectionProbe::set_origin_offset);
|
||||
ClassDB::bind_method(D_METHOD("get_origin_offset"), &ReflectionProbe::get_origin_offset);
|
||||
@@ -229,7 +231,7 @@ void ReflectionProbe::_bind_methods() {
|
||||
ADD_PROPERTY(PropertyInfo(Variant::INT, "update_mode", PROPERTY_HINT_ENUM, "Once (Fast),Always (Slow)"), "set_update_mode", "get_update_mode");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "intensity", PROPERTY_HINT_RANGE, "0,1,0.01"), "set_intensity", "get_intensity");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "max_distance", PROPERTY_HINT_RANGE, "0,16384,0.1,or_greater,exp,suffix:m"), "set_max_distance", "get_max_distance");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::VECTOR3, "extents", PROPERTY_HINT_NONE, "suffix:m"), "set_extents", "get_extents");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::VECTOR3, "size", PROPERTY_HINT_NONE, "suffix:m"), "set_size", "get_size");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::VECTOR3, "origin_offset", PROPERTY_HINT_NONE, "suffix:m"), "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");
|
||||
@@ -250,6 +252,24 @@ void ReflectionProbe::_bind_methods() {
|
||||
BIND_ENUM_CONSTANT(AMBIENT_COLOR);
|
||||
}
|
||||
|
||||
#ifndef DISABLE_DEPRECATED
|
||||
bool ReflectionProbe::_set(const StringName &p_name, const Variant &p_value) {
|
||||
if (p_name == "extents") { // Compatibility with Godot 3.x.
|
||||
set_size((Vector3)p_value * 2);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
bool ReflectionProbe::_get(const StringName &p_name, Variant &r_property) const {
|
||||
if (p_name == "extents") { // Compatibility with Godot 3.x.
|
||||
r_property = size / 2;
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
#endif // DISABLE_DEPRECATED
|
||||
|
||||
ReflectionProbe::ReflectionProbe() {
|
||||
probe = RenderingServer::get_singleton()->reflection_probe_create();
|
||||
RS::get_singleton()->instance_set_base(get_instance(), probe);
|
||||
|
||||
@@ -52,7 +52,7 @@ private:
|
||||
RID probe;
|
||||
float intensity = 1.0;
|
||||
float max_distance = 0.0;
|
||||
Vector3 extents = Vector3(10, 10, 10);
|
||||
Vector3 size = Vector3(20, 20, 20);
|
||||
Vector3 origin_offset = Vector3(0, 0, 0);
|
||||
bool box_projection = false;
|
||||
bool enable_shadows = false;
|
||||
@@ -68,6 +68,10 @@ private:
|
||||
protected:
|
||||
static void _bind_methods();
|
||||
void _validate_property(PropertyInfo &p_property) const;
|
||||
#ifndef DISABLE_DEPRECATED
|
||||
bool _set(const StringName &p_name, const Variant &p_value);
|
||||
bool _get(const StringName &p_name, Variant &r_property) const;
|
||||
#endif // DISABLE_DEPRECATED
|
||||
|
||||
public:
|
||||
void set_intensity(float p_intensity);
|
||||
@@ -91,10 +95,10 @@ public:
|
||||
void set_mesh_lod_threshold(float p_pixels);
|
||||
float get_mesh_lod_threshold() const;
|
||||
|
||||
void set_extents(const Vector3 &p_extents);
|
||||
Vector3 get_extents() const;
|
||||
void set_size(const Vector3 &p_size);
|
||||
Vector3 get_size() const;
|
||||
|
||||
void set_origin_offset(const Vector3 &p_extents);
|
||||
void set_origin_offset(const Vector3 &p_offset);
|
||||
Vector3 get_origin_offset() const;
|
||||
|
||||
void set_as_interior(bool p_enable);
|
||||
|
||||
@@ -237,6 +237,24 @@ void VoxelGIData::_bind_methods() {
|
||||
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "interior"), "set_interior", "is_interior");
|
||||
}
|
||||
|
||||
#ifndef DISABLE_DEPRECATED
|
||||
bool VoxelGI::_set(const StringName &p_name, const Variant &p_value) {
|
||||
if (p_name == "extents") { // Compatibility with Godot 3.x.
|
||||
set_size((Vector3)p_value * 2);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
bool VoxelGI::_get(const StringName &p_name, Variant &r_property) const {
|
||||
if (p_name == "extents") { // Compatibility with Godot 3.x.
|
||||
r_property = size / 2;
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
#endif // DISABLE_DEPRECATED
|
||||
|
||||
VoxelGIData::VoxelGIData() {
|
||||
probe = RS::get_singleton()->voxel_gi_create();
|
||||
}
|
||||
@@ -273,14 +291,14 @@ VoxelGI::Subdiv VoxelGI::get_subdiv() const {
|
||||
return subdiv;
|
||||
}
|
||||
|
||||
void VoxelGI::set_extents(const Vector3 &p_extents) {
|
||||
// Prevent very small extents as these break baking if other extents are set very high.
|
||||
extents = Vector3(MAX(1.0, p_extents.x), MAX(1.0, p_extents.y), MAX(1.0, p_extents.z));
|
||||
void VoxelGI::set_size(const Vector3 &p_size) {
|
||||
// Prevent very small size dimensions as these breaks baking if other size dimensions are set very high.
|
||||
size = Vector3(MAX(1.0, p_size.x), MAX(1.0, p_size.y), MAX(1.0, p_size.z));
|
||||
update_gizmos();
|
||||
}
|
||||
|
||||
Vector3 VoxelGI::get_extents() const {
|
||||
return extents;
|
||||
Vector3 VoxelGI::get_size() const {
|
||||
return size;
|
||||
}
|
||||
|
||||
void VoxelGI::set_camera_attributes(const Ref<CameraAttributes> &p_camera_attributes) {
|
||||
@@ -300,7 +318,7 @@ void VoxelGI::_find_meshes(Node *p_at_node, List<PlotMesh> &plot_meshes) {
|
||||
|
||||
Transform3D xf = get_global_transform().affine_inverse() * mi->get_global_transform();
|
||||
|
||||
if (AABB(-extents, extents * 2).intersects(xf.xform(aabb))) {
|
||||
if (AABB(-size / 2, size).intersects(xf.xform(aabb))) {
|
||||
PlotMesh pm;
|
||||
pm.local_xform = xf;
|
||||
pm.mesh = mesh;
|
||||
@@ -328,7 +346,7 @@ void VoxelGI::_find_meshes(Node *p_at_node, List<PlotMesh> &plot_meshes) {
|
||||
|
||||
Transform3D xf = get_global_transform().affine_inverse() * (s->get_global_transform() * mxf);
|
||||
|
||||
if (AABB(-extents, extents * 2).intersects(xf.xform(aabb))) {
|
||||
if (AABB(-size / 2, size).intersects(xf.xform(aabb))) {
|
||||
PlotMesh pm;
|
||||
pm.local_xform = xf;
|
||||
pm.mesh = mesh;
|
||||
@@ -352,7 +370,7 @@ Vector3i VoxelGI::get_estimated_cell_size() const {
|
||||
static const int subdiv_value[SUBDIV_MAX] = { 6, 7, 8, 9 };
|
||||
int cell_subdiv = subdiv_value[subdiv];
|
||||
int axis_cell_size[3];
|
||||
AABB bounds = AABB(-extents, extents * 2.0);
|
||||
AABB bounds = AABB(-size / 2, size);
|
||||
int longest_axis = bounds.get_longest_axis_index();
|
||||
axis_cell_size[longest_axis] = 1 << cell_subdiv;
|
||||
|
||||
@@ -390,7 +408,7 @@ void VoxelGI::bake(Node *p_from_node, bool p_create_visual_debug) {
|
||||
|
||||
Voxelizer baker;
|
||||
|
||||
baker.begin_bake(subdiv_value[subdiv], AABB(-extents, extents * 2.0), exposure_normalization);
|
||||
baker.begin_bake(subdiv_value[subdiv], AABB(-size / 2, size), exposure_normalization);
|
||||
|
||||
List<PlotMesh> mesh_list;
|
||||
|
||||
@@ -448,7 +466,7 @@ void VoxelGI::bake(Node *p_from_node, bool p_create_visual_debug) {
|
||||
|
||||
RS::get_singleton()->voxel_gi_set_baked_exposure_normalization(probe_data_new->get_rid(), exposure_normalization);
|
||||
|
||||
probe_data_new->allocate(baker.get_to_cell_space_xform(), AABB(-extents, extents * 2.0), baker.get_voxel_gi_octree_size(), baker.get_voxel_gi_octree_cells(), baker.get_voxel_gi_data_cells(), df, baker.get_voxel_gi_level_cell_count());
|
||||
probe_data_new->allocate(baker.get_to_cell_space_xform(), AABB(-size / 2, size), baker.get_voxel_gi_octree_size(), baker.get_voxel_gi_octree_cells(), baker.get_voxel_gi_data_cells(), df, baker.get_voxel_gi_level_cell_count());
|
||||
|
||||
set_probe_data(probe_data_new);
|
||||
#ifdef TOOLS_ENABLED
|
||||
@@ -468,7 +486,7 @@ void VoxelGI::_debug_bake() {
|
||||
}
|
||||
|
||||
AABB VoxelGI::get_aabb() const {
|
||||
return AABB(-extents, extents * 2);
|
||||
return AABB(-size / 2, size);
|
||||
}
|
||||
|
||||
PackedStringArray VoxelGI::get_configuration_warnings() const {
|
||||
@@ -489,8 +507,8 @@ void VoxelGI::_bind_methods() {
|
||||
ClassDB::bind_method(D_METHOD("set_subdiv", "subdiv"), &VoxelGI::set_subdiv);
|
||||
ClassDB::bind_method(D_METHOD("get_subdiv"), &VoxelGI::get_subdiv);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("set_extents", "extents"), &VoxelGI::set_extents);
|
||||
ClassDB::bind_method(D_METHOD("get_extents"), &VoxelGI::get_extents);
|
||||
ClassDB::bind_method(D_METHOD("set_size", "size"), &VoxelGI::set_size);
|
||||
ClassDB::bind_method(D_METHOD("get_size"), &VoxelGI::get_size);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("set_camera_attributes", "camera_attributes"), &VoxelGI::set_camera_attributes);
|
||||
ClassDB::bind_method(D_METHOD("get_camera_attributes"), &VoxelGI::get_camera_attributes);
|
||||
@@ -500,7 +518,7 @@ void VoxelGI::_bind_methods() {
|
||||
ClassDB::set_method_flags(get_class_static(), _scs_create("debug_bake"), METHOD_FLAGS_DEFAULT | METHOD_FLAG_EDITOR);
|
||||
|
||||
ADD_PROPERTY(PropertyInfo(Variant::INT, "subdiv", PROPERTY_HINT_ENUM, "64,128,256,512"), "set_subdiv", "get_subdiv");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::VECTOR3, "extents", PROPERTY_HINT_NONE, "suffix:m"), "set_extents", "get_extents");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::VECTOR3, "size", PROPERTY_HINT_NONE, "suffix:m"), "set_size", "get_size");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "camera_attributes", PROPERTY_HINT_RESOURCE_TYPE, "CameraAttributesPractical,CameraAttributesPhysical"), "set_camera_attributes", "get_camera_attributes");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "data", PROPERTY_HINT_RESOURCE_TYPE, "VoxelGIData", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_ALWAYS_DUPLICATE), "set_probe_data", "get_probe_data");
|
||||
|
||||
|
||||
@@ -118,7 +118,7 @@ private:
|
||||
RID voxel_gi;
|
||||
|
||||
Subdiv subdiv = SUBDIV_128;
|
||||
Vector3 extents = Vector3(10, 10, 10);
|
||||
Vector3 size = Vector3(20, 20, 20);
|
||||
Ref<CameraAttributes> camera_attributes;
|
||||
|
||||
struct PlotMesh {
|
||||
@@ -133,6 +133,10 @@ private:
|
||||
|
||||
protected:
|
||||
static void _bind_methods();
|
||||
#ifndef DISABLE_DEPRECATED
|
||||
bool _set(const StringName &p_name, const Variant &p_value);
|
||||
bool _get(const StringName &p_name, Variant &r_property) const;
|
||||
#endif // DISABLE_DEPRECATED
|
||||
|
||||
public:
|
||||
static BakeBeginFunc bake_begin_function;
|
||||
@@ -145,8 +149,8 @@ public:
|
||||
void set_subdiv(Subdiv p_subdiv);
|
||||
Subdiv get_subdiv() const;
|
||||
|
||||
void set_extents(const Vector3 &p_extents);
|
||||
Vector3 get_extents() const;
|
||||
void set_size(const Vector3 &p_size);
|
||||
Vector3 get_size() const;
|
||||
|
||||
void set_camera_attributes(const Ref<CameraAttributes> &p_camera_attributes);
|
||||
Ref<CameraAttributes> get_camera_attributes() const;
|
||||
|
||||
@@ -159,7 +159,7 @@ uniform sampler3D density_texture: hint_default_white;
|
||||
void fog() {
|
||||
DENSITY = density * clamp(exp2(-height_falloff * (WORLD_POSITION.y - OBJECT_POSITION.y)), 0.0, 1.0);
|
||||
DENSITY *= texture(density_texture, UVW).r;
|
||||
DENSITY *= pow(clamp(-SDF / min(min(EXTENTS.x, EXTENTS.y), EXTENTS.z), 0.0, 1.0), edge_fade);
|
||||
DENSITY *= pow(clamp(-2.0 * SDF / min(min(SIZE.x, SIZE.y), SIZE.z), 0.0, 1.0), edge_fade);
|
||||
ALBEDO = albedo.rgb;
|
||||
EMISSION = emission.rgb;
|
||||
}
|
||||
|
||||
@@ -2936,7 +2936,7 @@ const VisualShaderNodeInput::Port VisualShaderNodeInput::ports[] = {
|
||||
{ Shader::MODE_FOG, VisualShader::TYPE_FOG, VisualShaderNode::PORT_TYPE_VECTOR_3D, "world_position", "WORLD_POSITION" },
|
||||
{ Shader::MODE_FOG, VisualShader::TYPE_FOG, VisualShaderNode::PORT_TYPE_VECTOR_3D, "object_position", "OBJECT_POSITION" },
|
||||
{ Shader::MODE_FOG, VisualShader::TYPE_FOG, VisualShaderNode::PORT_TYPE_VECTOR_3D, "uvw", "UVW" },
|
||||
{ Shader::MODE_FOG, VisualShader::TYPE_FOG, VisualShaderNode::PORT_TYPE_VECTOR_3D, "extents", "EXTENTS" },
|
||||
{ Shader::MODE_FOG, VisualShader::TYPE_FOG, VisualShaderNode::PORT_TYPE_VECTOR_3D, "size", "SIZE" },
|
||||
{ Shader::MODE_FOG, VisualShader::TYPE_FOG, VisualShaderNode::PORT_TYPE_SCALAR, "sdf", "SDF" },
|
||||
{ Shader::MODE_FOG, VisualShader::TYPE_FOG, VisualShaderNode::PORT_TYPE_SCALAR, "time", "TIME" },
|
||||
|
||||
|
||||
Reference in New Issue
Block a user