Merge pull request #93436 from Calinou/3d-editor-half-resolution-use-3d-scaling
Use Viewport's 3D Scaling in the 3D editor's Half Resolution option
This commit is contained in:
@ -712,9 +712,9 @@ void Node3DEditorViewport::cancel_transform() {
|
||||
}
|
||||
|
||||
void Node3DEditorViewport::_update_shrink() {
|
||||
bool shrink = view_display_menu->get_popup()->is_item_checked(view_display_menu->get_popup()->get_item_index(VIEW_HALF_RESOLUTION));
|
||||
subviewport_container->set_stretch_shrink(shrink ? 2 : 1);
|
||||
subviewport_container->set_texture_filter(shrink ? TEXTURE_FILTER_NEAREST : TEXTURE_FILTER_PARENT_NODE);
|
||||
const float scaling_3d_scale = GLOBAL_GET("rendering/scaling_3d/scale");
|
||||
const float shrink_factor = view_display_menu->get_popup()->is_item_checked(view_display_menu->get_popup()->get_item_index(VIEW_HALF_RESOLUTION)) ? 0.5 : 1.0;
|
||||
viewport->set_scaling_3d_scale(MAX(0.25, scaling_3d_scale * shrink_factor));
|
||||
}
|
||||
|
||||
float Node3DEditorViewport::get_znear() const {
|
||||
@ -738,11 +738,11 @@ Vector3 Node3DEditorViewport::_get_camera_position() const {
|
||||
}
|
||||
|
||||
Point2 Node3DEditorViewport::point_to_screen(const Vector3 &p_point) {
|
||||
return camera->unproject_position(p_point) * subviewport_container->get_stretch_shrink();
|
||||
return camera->unproject_position(p_point);
|
||||
}
|
||||
|
||||
Vector3 Node3DEditorViewport::get_ray_pos(const Vector2 &p_pos) const {
|
||||
return camera->project_ray_origin(p_pos / subviewport_container->get_stretch_shrink());
|
||||
return camera->project_ray_origin(p_pos);
|
||||
}
|
||||
|
||||
Vector3 Node3DEditorViewport::_get_camera_normal() const {
|
||||
@ -750,7 +750,7 @@ Vector3 Node3DEditorViewport::_get_camera_normal() const {
|
||||
}
|
||||
|
||||
Vector3 Node3DEditorViewport::get_ray(const Vector2 &p_pos) const {
|
||||
return camera->project_ray_normal(p_pos / subviewport_container->get_stretch_shrink());
|
||||
return camera->project_ray_normal(p_pos);
|
||||
}
|
||||
|
||||
void Node3DEditorViewport::_clear_selected() {
|
||||
@ -835,7 +835,7 @@ void Node3DEditorViewport::_select_clicked(bool p_allow_locked) {
|
||||
ObjectID Node3DEditorViewport::_select_ray(const Point2 &p_pos) const {
|
||||
Vector3 ray = get_ray(p_pos);
|
||||
Vector3 pos = get_ray_pos(p_pos);
|
||||
Vector2 shrinked_pos = p_pos / subviewport_container->get_stretch_shrink();
|
||||
Vector2 shrinked_pos = p_pos;
|
||||
|
||||
if (viewport->get_debug_draw() == Viewport::DEBUG_DRAW_SDFGI_PROBES) {
|
||||
RS::get_singleton()->sdfgi_set_debug_probe_select(pos, ray);
|
||||
@ -3129,8 +3129,6 @@ void Node3DEditorViewport::_project_settings_changed() {
|
||||
viewport->set_positional_shadow_atlas_quadrant_subdiv(2, Viewport::PositionalShadowAtlasQuadrantSubdiv(atlas_q2));
|
||||
viewport->set_positional_shadow_atlas_quadrant_subdiv(3, Viewport::PositionalShadowAtlasQuadrantSubdiv(atlas_q3));
|
||||
|
||||
_update_shrink();
|
||||
|
||||
// Update MSAA, screen-space AA and debanding if changed
|
||||
|
||||
const int msaa_mode = GLOBAL_GET("rendering/anti_aliasing/quality/msaa_3d");
|
||||
@ -3158,8 +3156,7 @@ void Node3DEditorViewport::_project_settings_changed() {
|
||||
const Viewport::Scaling3DMode scaling_3d_mode = Viewport::Scaling3DMode(int(GLOBAL_GET("rendering/scaling_3d/mode")));
|
||||
viewport->set_scaling_3d_mode(scaling_3d_mode);
|
||||
|
||||
const float scaling_3d_scale = GLOBAL_GET("rendering/scaling_3d/scale");
|
||||
viewport->set_scaling_3d_scale(scaling_3d_scale);
|
||||
_update_shrink();
|
||||
|
||||
const float fsr_sharpness = GLOBAL_GET("rendering/scaling_3d/fsr_sharpness");
|
||||
viewport->set_fsr_sharpness(fsr_sharpness);
|
||||
@ -3413,7 +3410,7 @@ void Node3DEditorViewport::_notification(int p_what) {
|
||||
}
|
||||
|
||||
if (show_info) {
|
||||
const String viewport_size = vformat(U"%d × %d", viewport->get_size().x, viewport->get_size().y);
|
||||
const String viewport_size = vformat(U"%d × %d", viewport->get_size().x * viewport->get_scaling_3d_scale(), viewport->get_size().y * viewport->get_scaling_3d_scale());
|
||||
String text;
|
||||
text += vformat(TTR("X: %s\n"), rtos(current_camera->get_position().x).pad_decimals(1));
|
||||
text += vformat(TTR("Y: %s\n"), rtos(current_camera->get_position().y).pad_decimals(1));
|
||||
@ -3422,7 +3419,7 @@ void Node3DEditorViewport::_notification(int p_what) {
|
||||
text += vformat(
|
||||
TTR("Size: %s (%.1fMP)\n"),
|
||||
viewport_size,
|
||||
viewport->get_size().x * viewport->get_size().y * 0.000001);
|
||||
viewport->get_size().x * viewport->get_size().y * Math::pow(viewport->get_scaling_3d_scale(), 2) * 0.000001);
|
||||
|
||||
text += "\n";
|
||||
text += vformat(TTR("Objects: %d\n"), viewport->get_render_info(Viewport::RENDER_INFO_TYPE_VISIBLE, Viewport::RENDER_INFO_OBJECTS_IN_FRAME));
|
||||
@ -4561,8 +4558,7 @@ void Node3DEditorViewport::update_transform_gizmo_view() {
|
||||
const int viewport_base_height = 400 * MAX(1, EDSCALE);
|
||||
gizmo_scale =
|
||||
(gizmo_size / Math::abs(dd)) * MAX(1, EDSCALE) *
|
||||
MIN(viewport_base_height, subviewport_container->get_size().height) / viewport_base_height /
|
||||
subviewport_container->get_stretch_shrink();
|
||||
MIN(viewport_base_height, subviewport_container->get_size().height) / viewport_base_height;
|
||||
Vector3 scale = Vector3(1, 1, 1) * gizmo_scale;
|
||||
|
||||
// if the determinant is zero, we should disable the gizmo from being rendered
|
||||
@ -4800,7 +4796,7 @@ Dictionary Node3DEditorViewport::get_state() const {
|
||||
d["grid"] = view_display_menu->get_popup()->is_item_checked(view_display_menu->get_popup()->get_item_index(VIEW_GRID));
|
||||
d["information"] = view_display_menu->get_popup()->is_item_checked(view_display_menu->get_popup()->get_item_index(VIEW_INFORMATION));
|
||||
d["frame_time"] = view_display_menu->get_popup()->is_item_checked(view_display_menu->get_popup()->get_item_index(VIEW_FRAME_TIME));
|
||||
d["half_res"] = subviewport_container->get_stretch_shrink() > 1;
|
||||
d["half_res"] = view_display_menu->get_popup()->is_item_checked(view_display_menu->get_popup()->get_item_index(VIEW_HALF_RESOLUTION));
|
||||
d["cinematic_preview"] = view_display_menu->get_popup()->is_item_checked(view_display_menu->get_popup()->get_item_index(VIEW_CINEMATIC_PREVIEW));
|
||||
if (previewing) {
|
||||
d["previewing"] = EditorNode::get_singleton()->get_edited_scene()->get_path_to(previewing);
|
||||
|
||||
Reference in New Issue
Block a user