reckfellENGINE

Разрешение 3D: масштаб, фильтр и неизменный UI

Изменять внутреннее разрешение, отличать его от выходной текстуры и корректно обрабатывать недоступный upscaler.

На этой странице

Что меняется при scale

Scaling3DScale меняет внутреннее разрешение 3D, а не размер окна и не размеры canvas UI. Выходная текстура viewport сохраняет свой размер. Для изменения самого выхода SubViewport используйте его Size отдельно.

Выход 512×384Внутренний 3D-рендерДоля пикселей от Native
Scale 0.5256×19225%
Scale 1512×384100%
Scale 21024×768400%

Размеры подтверждены исходниками и диагностическим пространственным шейдером в OpenGL/Vulkan. GetTexture().GetImage() во всех этих случаях остаётся 512×384: это readback выхода, не прямое измерение внутреннего буфера.

Меньше пикселей может помочь при ограничении со стороны GPU. Если время уходит в скрипты, физику или подготовку кадра CPU, уменьшение разрешения может почти не изменить FPS. Четверть внутренних пикселей не означает четырёхкратное ускорение.

Запустить готовое сравнение

Используйте оба полных файла из руководства сглаживания: QualityPreset.cs и QualityLab3D.cs. Нужны C# SDK 1.0.0, net10.0, dotnet build и QualityLab3D.cs на Entity3D-корне .rscene.

Выбирайте Preset перед запуском: Native, HalfBilinear, HalfNearest или DoubleBilinear. Для воспроизводимого сравнения сохраняйте выходное разрешение неизменным; изображения ниже имеют 512×384. Синий индикатор размером 80×20 относится к CanvasLayer и сохраняет размер при смене 3D scale.

Сравнить фильтры

Внутренний scale 0.5 с bilinear: исходные данные увеличены до выхода

Scale 0.5 с nearest при том же выходном разрешении

Bilinear смешивает соседние samples при увеличении и выглядит мягче. Nearest сохраняет жёсткую сетку низкого разрешения. В проверке их реальные пиксели различались; UI остался в выходных координатах.

Scale 2 с bilinear downsampling в Compatibility

Scale 2 добавил частичное покрытие наклонных краёв после уменьшения. Это более дорогой способ по внутреннему числу пикселей; производительность не измерялась. Для downsampling используйте Bilinear: по исходникам FSR/MetalFX/Nearest при scale больше 1 заменяются внутренним bilinear.

Выбрать upscaler без ложного индикатора

В текущем коде Fsr и Fsr2 применяются в Forward+. Пример FsrHalf/Fsr2Half использует scale 0.5. В Forward+/Vulkan их кадры отличались от HalfBilinear. Временной Fsr2 сравнивался после накопления истории; движение и ghosting этим тестом не оцениваются.

В Compatibility запрос Fsr2 может быть отклонён, а getter продолжит показывать Fsr2. Если до запроса renderer использовал Bilinear, остаётся он; если Nearest — остаётся Nearest. Оба случая воспроизведены. Поэтому нельзя определять фактически применённый алгоритм одним GetScaling3DMode или обещать обязательный bilinear fallback для любого запроса.

QualityPreset.Apply проверяет renderer до изменения состояния. Если возвращён false, оставьте прежнее выбранное значение в игровом меню и сообщите, что режим недоступен. Настройки применяются к переданному viewport: изменение другого viewport не меняет активную игровую картинку.

MetalFX, Mobile, XR и другие GPU в этом примере не запускаются. Их поддержку и ограничения проверяйте отдельно. FsrSharpness не включает FSR и не меняет разрешение; его влияние на качество здесь не исследуется.

Управлять диапазоном и диагностировать

Для конечного Scaling3DScale Viewport ограничивает диапазон 0.1..2. Проверены запросы 0.01→0.1 и 9→2. Отбрасывайте NaN/бесконечность на входе вашего меню; не рассчитывайте на clamp как на полную валидацию любых float.

ПроблемаПроверка
GetTexture всё ещё прежнего размераЭто нормально: измеряется выход, не внутренний 3D-буфер
Вместе с 3D уменьшился весь интерфейсИзменён Size/общий stretch вместо отдельного 3D scale
FSR указан, картинка nearestЗапрос мог быть отклонён; проверить renderer, предупреждения и прежний режим
Пониженный scale не повысил FPSПрофиль CPU/GPU, физики, скриптов и других затрат
Тонкие детали пропалиНизкое внутреннее разрешение, фильтр и временной метод по отдельности

Динамический подбор разрешения требует отдельного контроллера с измерениями и ограничениями. Этот пример переключает фиксированные presets и не выдаёт их за готовую динамическую систему.

Viewport API · SubViewport API

Документация Reckfell EngineНаверх ↑
БЫСТРЫЙ ПЕРЕХОДНачало работыEntity и иерархияC# & .NET 10Сцены и префабы
Руководства и полный API Reckfell K
reckfellENGINE
RECKFELL ACCOUNT

Вход в аккаунт

Войдите в аккаунт Reckfell.

Один аккаунт для всей платформы Reckfell.