@@ -145,6 +145,91 @@ CameraAttributes::~CameraAttributes() {
145145//////////////////////////////////////////////////////
146146/* CameraAttributesPractical */
147147
148+ void CameraAttributesPractical::set_motion_blur_enabled(bool p_enabled) {
149+ if (motion_blur_enabled == p_enabled) {
150+ return;
151+ }
152+ motion_blur_enabled = p_enabled;
153+ _update_motion_blur();
154+ notify_property_list_changed();
155+ }
156+
157+ bool CameraAttributesPractical::is_motion_blur_enabled() const {
158+ return motion_blur_enabled;
159+ }
160+
161+ void CameraAttributesPractical::set_motion_blur_intensity(float p_intensity) {
162+ p_intensity = MAX(0.0f, p_intensity);
163+ motion_blur_intensity = p_intensity;
164+ _update_motion_blur();
165+ }
166+
167+ float CameraAttributesPractical::get_motion_blur_intensity() const {
168+ return motion_blur_intensity;
169+ }
170+
171+ void CameraAttributesPractical::set_motion_blur_clamp_velocities_to_tile(bool p_clamp_velocities_to_tile) {
172+ if (motion_blur_clamp_velocities_to_tile == p_clamp_velocities_to_tile) {
173+ return;
174+ }
175+ motion_blur_clamp_velocities_to_tile = p_clamp_velocities_to_tile;
176+ _update_motion_blur();
177+ }
178+
179+ bool CameraAttributesPractical::is_motion_blur_clamp_velocities_to_tile() const {
180+ return motion_blur_clamp_velocities_to_tile;
181+ }
182+
183+ void CameraAttributesPractical::set_motion_blur_object_velocity_multiplier(float p_multiplier) {
184+ p_multiplier = MAX(0.0f, p_multiplier);
185+ motion_blur_object_velocity_multiplier = p_multiplier;
186+ _update_motion_blur();
187+ }
188+
189+ float CameraAttributesPractical::get_motion_blur_object_velocity_multiplier() const {
190+ return motion_blur_object_velocity_multiplier;
191+ }
192+
193+ void CameraAttributesPractical::set_motion_blur_movement_velocity_multiplier(float p_multiplier) {
194+ p_multiplier = MAX(0.0f, p_multiplier);
195+ motion_blur_movement_velocity_multiplier = p_multiplier;
196+ _update_motion_blur();
197+ }
198+
199+ float CameraAttributesPractical::get_motion_blur_movement_velocity_multiplier() const {
200+ return motion_blur_movement_velocity_multiplier;
201+ }
202+
203+ void CameraAttributesPractical::set_motion_blur_rotation_velocity_multiplier(float p_multiplier) {
204+ p_multiplier = MAX(0.0f, p_multiplier);
205+ motion_blur_rotation_velocity_multiplier = p_multiplier;
206+ _update_motion_blur();
207+ }
208+
209+ float CameraAttributesPractical::get_motion_blur_rotation_velocity_multiplier() const {
210+ return motion_blur_rotation_velocity_multiplier;
211+ }
212+
213+ void CameraAttributesPractical::set_motion_blur_velocity_lower_threshold(float p_threshold) {
214+ p_threshold = MAX(0.0f, p_threshold);
215+ motion_blur_velocity_lower_threshold = p_threshold;
216+ _update_motion_blur();
217+ }
218+
219+ float CameraAttributesPractical::get_motion_blur_velocity_lower_threshold() const {
220+ return motion_blur_velocity_lower_threshold;
221+ }
222+
223+ void CameraAttributesPractical::set_motion_blur_velocity_upper_threshold(float p_threshold) {
224+ p_threshold = MAX(0.0f, p_threshold);
225+ motion_blur_velocity_upper_threshold = p_threshold;
226+ _update_motion_blur();
227+ }
228+
229+ float CameraAttributesPractical::get_motion_blur_velocity_upper_threshold() const {
230+ return motion_blur_velocity_upper_threshold;
231+ }
232+
148233void CameraAttributesPractical::set_dof_blur_far_enabled(bool p_enabled) {
149234 dof_blur_far_enabled = p_enabled;
150235 _update_dof_blur();
@@ -210,6 +295,19 @@ float CameraAttributesPractical::get_dof_blur_amount() const {
210295 return dof_blur_amount;
211296}
212297
298+ void CameraAttributesPractical::_update_motion_blur() {
299+ RS::get_singleton()->camera_attributes_set_motion_blur(
300+ get_rid(),
301+ motion_blur_enabled,
302+ motion_blur_intensity,
303+ motion_blur_clamp_velocities_to_tile,
304+ motion_blur_object_velocity_multiplier,
305+ motion_blur_movement_velocity_multiplier,
306+ motion_blur_rotation_velocity_multiplier,
307+ motion_blur_velocity_lower_threshold,
308+ motion_blur_velocity_upper_threshold);
309+ }
310+
213311void CameraAttributesPractical::_update_dof_blur() {
214312 RS::get_singleton()->camera_attributes_set_dof_blur(
215313 get_rid(),
@@ -259,13 +357,38 @@ void CameraAttributesPractical::_validate_property(PropertyInfo &p_property) con
259357 if (!Engine::get_singleton()->is_editor_hint()) {
260358 return;
261359 }
360+
262361 if ((p_property.name != "dof_blur_far_enabled" && !dof_blur_far_enabled && p_property.name.begins_with("dof_blur_far_")) ||
263362 (p_property.name != "dof_blur_near_enabled" && !dof_blur_near_enabled && p_property.name.begins_with("dof_blur_near_"))) {
264363 p_property.usage = PROPERTY_USAGE_NO_EDITOR;
265364 }
365+
366+ if (p_property.name.begins_with("motion_blur_") && p_property.name != "motion_blur_enabled" && !motion_blur_enabled) {
367+ p_property.usage = PROPERTY_USAGE_NO_EDITOR;
368+ return;
369+ }
266370}
267371
268372void CameraAttributesPractical::_bind_methods() {
373+ // Motion blur
374+
375+ ClassDB::bind_method(D_METHOD("set_motion_blur_enabled", "enabled"), &CameraAttributesPractical::set_motion_blur_enabled);
376+ ClassDB::bind_method(D_METHOD("is_motion_blur_enabled"), &CameraAttributesPractical::is_motion_blur_enabled);
377+ ClassDB::bind_method(D_METHOD("set_motion_blur_intensity", "intensity"), &CameraAttributesPractical::set_motion_blur_intensity);
378+ ClassDB::bind_method(D_METHOD("get_motion_blur_intensity"), &CameraAttributesPractical::get_motion_blur_intensity);
379+ ClassDB::bind_method(D_METHOD("set_motion_blur_clamp_velocities_to_tile", "clamp_velocities_to_tile"), &CameraAttributesPractical::set_motion_blur_clamp_velocities_to_tile);
380+ ClassDB::bind_method(D_METHOD("is_motion_blur_clamp_velocities_to_tile"), &CameraAttributesPractical::is_motion_blur_clamp_velocities_to_tile);
381+ ClassDB::bind_method(D_METHOD("set_motion_blur_object_velocity_multiplier", "multiplier"), &CameraAttributesPractical::set_motion_blur_object_velocity_multiplier);
382+ ClassDB::bind_method(D_METHOD("get_motion_blur_object_velocity_multiplier"), &CameraAttributesPractical::get_motion_blur_object_velocity_multiplier);
383+ ClassDB::bind_method(D_METHOD("set_motion_blur_movement_velocity_multiplier", "multiplier"), &CameraAttributesPractical::set_motion_blur_movement_velocity_multiplier);
384+ ClassDB::bind_method(D_METHOD("get_motion_blur_movement_velocity_multiplier"), &CameraAttributesPractical::get_motion_blur_movement_velocity_multiplier);
385+ ClassDB::bind_method(D_METHOD("set_motion_blur_rotation_velocity_multiplier", "multiplier"), &CameraAttributesPractical::set_motion_blur_rotation_velocity_multiplier);
386+ ClassDB::bind_method(D_METHOD("get_motion_blur_rotation_velocity_multiplier"), &CameraAttributesPractical::get_motion_blur_rotation_velocity_multiplier);
387+ ClassDB::bind_method(D_METHOD("set_motion_blur_velocity_lower_threshold", "threshold"), &CameraAttributesPractical::set_motion_blur_velocity_lower_threshold);
388+ ClassDB::bind_method(D_METHOD("get_motion_blur_velocity_lower_threshold"), &CameraAttributesPractical::get_motion_blur_velocity_lower_threshold);
389+ ClassDB::bind_method(D_METHOD("set_motion_blur_velocity_upper_threshold", "threshold"), &CameraAttributesPractical::set_motion_blur_velocity_upper_threshold);
390+ ClassDB::bind_method(D_METHOD("get_motion_blur_velocity_upper_threshold"), &CameraAttributesPractical::get_motion_blur_velocity_upper_threshold);
391+
269392 // DOF blur
270393
271394 ClassDB::bind_method(D_METHOD("set_dof_blur_far_enabled", "enabled"), &CameraAttributesPractical::set_dof_blur_far_enabled);
@@ -289,6 +412,16 @@ void CameraAttributesPractical::_bind_methods() {
289412 ClassDB::bind_method(D_METHOD("set_auto_exposure_min_sensitivity", "min_sensitivity"), &CameraAttributesPractical::set_auto_exposure_min_sensitivity);
290413 ClassDB::bind_method(D_METHOD("get_auto_exposure_min_sensitivity"), &CameraAttributesPractical::get_auto_exposure_min_sensitivity);
291414
415+ ADD_GROUP("Motion Blur", "motion_blur_");
416+ ADD_PROPERTY(PropertyInfo(Variant::BOOL, "motion_blur_enabled", PROPERTY_HINT_GROUP_ENABLE), "set_motion_blur_enabled", "is_motion_blur_enabled");
417+ ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "motion_blur_intensity", PROPERTY_HINT_RANGE, "0.0,5.0,0.01,or_greater"), "set_motion_blur_intensity", "get_motion_blur_intensity");
418+ ADD_PROPERTY(PropertyInfo(Variant::BOOL, "motion_blur_clamp_velocities_to_tile"), "set_motion_blur_clamp_velocities_to_tile", "is_motion_blur_clamp_velocities_to_tile");
419+ ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "motion_blur_object_velocity_multiplier", PROPERTY_HINT_RANGE, "0.0,1.0,0.01"), "set_motion_blur_object_velocity_multiplier", "get_motion_blur_object_velocity_multiplier");
420+ ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "motion_blur_movement_velocity_multiplier", PROPERTY_HINT_RANGE, "0.0,1.0,0.01"), "set_motion_blur_movement_velocity_multiplier", "get_motion_blur_movement_velocity_multiplier");
421+ ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "motion_blur_rotation_velocity_multiplier", PROPERTY_HINT_RANGE, "0.0,1.0,0.01"), "set_motion_blur_rotation_velocity_multiplier", "get_motion_blur_rotation_velocity_multiplier");
422+ ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "motion_blur_velocity_lower_threshold", PROPERTY_HINT_RANGE, "0.0,10.0,0.01,or_greater"), "set_motion_blur_velocity_lower_threshold", "get_motion_blur_velocity_lower_threshold");
423+ ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "motion_blur_velocity_upper_threshold", PROPERTY_HINT_RANGE, "0.0,10.0,0.01,or_greater"), "set_motion_blur_velocity_upper_threshold", "get_motion_blur_velocity_upper_threshold");
424+
292425 ADD_GROUP("DOF Blur", "dof_blur_");
293426 ADD_PROPERTY(PropertyInfo(Variant::BOOL, "dof_blur_far_enabled"), "set_dof_blur_far_enabled", "is_dof_blur_far_enabled");
294427 ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "dof_blur_far_distance", PROPERTY_HINT_RANGE, "0.01,8192,0.01,exp,suffix:m"), "set_dof_blur_far_distance", "get_dof_blur_far_distance");
@@ -304,6 +437,7 @@ void CameraAttributesPractical::_bind_methods() {
304437}
305438
306439CameraAttributesPractical::CameraAttributesPractical() {
440+ _update_motion_blur();
307441 _update_dof_blur();
308442 _update_exposure();
309443 set_auto_exposure_min_sensitivity(0.0);
0 commit comments