add 'grahics.advanced-render' and 'graphics.shadows-quality' settings
This commit is contained in:
parent
b5253bff99
commit
b272d86619
@ -42,4 +42,6 @@ function on_open()
|
||||
create_setting("graphics.gamma", "Gamma", 0.05, "", "graphics.gamma.tooltip")
|
||||
create_checkbox("graphics.backlight", "Backlight", "graphics.backlight.tooltip")
|
||||
create_checkbox("graphics.dense-render", "Dense blocks render", "graphics.dense-render.tooltip")
|
||||
create_checkbox("graphics.advanced-render", "Advanced render", "graphics.advanced-render.tooltip")
|
||||
create_setting("graphics.shadows-quality", "Shadows quality", 1)
|
||||
end
|
||||
|
||||
@ -98,6 +98,8 @@ settings.V-Sync=Вертикальная Синхронизация
|
||||
settings.Key=Кнопка
|
||||
settings.Controls Search Mode=Поиск по привязанной кнопки управления
|
||||
settings.Limit Background FPS=Ограничить фоновую частоту кадров
|
||||
settings.Advanced render=Продвинутый рендер
|
||||
settings.Shadows quality=Качество теней
|
||||
|
||||
# Управление
|
||||
chunks.reload=Перезагрузить Чанки
|
||||
|
||||
@ -189,8 +189,7 @@ void ChunksRenderer::drawChunksShadowsPass(
|
||||
|
||||
atlas.getTexture()->bind();
|
||||
|
||||
for (int i = indices.size()-1; i >= 0; i--) {
|
||||
auto& chunk = chunks.getChunks()[indices[i].index];
|
||||
for (const auto& chunk : chunks.getChunks()) {
|
||||
if (chunk == nullptr) {
|
||||
continue;
|
||||
}
|
||||
@ -216,7 +215,6 @@ void ChunksRenderer::drawChunks(
|
||||
const auto& atlas = assets.require<Atlas>("blocks");
|
||||
|
||||
atlas.getTexture()->bind();
|
||||
update();
|
||||
|
||||
// [warning] this whole method is not thread-safe for chunks
|
||||
|
||||
|
||||
@ -345,7 +345,7 @@ void WorldRenderer::generateShadowsMap(const Camera& camera, const DrawContext&
|
||||
|
||||
const auto& settings = engine.getSettings();
|
||||
int resolution = shadowMap->getResolution();
|
||||
float shadowMapScale = 0.05f;
|
||||
float shadowMapScale = 0.2f / (1 << glm::max(0L, settings.graphics.shadowsQuality.get()));
|
||||
float shadowMapSize = resolution * shadowMapScale;
|
||||
shadowCamera = Camera(camera.position, shadowMapSize);
|
||||
shadowCamera.near = 0.1f;
|
||||
@ -393,6 +393,20 @@ void WorldRenderer::draw(
|
||||
camera.setAspectRatio(vp.x / static_cast<float>(vp.y));
|
||||
|
||||
const auto& settings = engine.getSettings();
|
||||
gbufferPipeline = settings.graphics.advancedRender.get();
|
||||
int shadowsQuality = settings.graphics.shadowsQuality.get();
|
||||
int resolution = 1024 << shadowsQuality;
|
||||
if (shadowsQuality > 0 && !shadows) {
|
||||
shadowMap = std::make_unique<ShadowMap>(resolution);
|
||||
shadows = true;
|
||||
} else if (shadowsQuality == 0) {
|
||||
shadowMap.reset();
|
||||
shadows = false;
|
||||
}
|
||||
if (shadows && shadowMap->getResolution() != resolution) {
|
||||
shadowMap = std::make_unique<ShadowMap>(resolution);
|
||||
}
|
||||
|
||||
const auto& worldInfo = world->getInfo();
|
||||
|
||||
float sqrtT = glm::sqrt(weather.t);
|
||||
@ -403,10 +417,9 @@ void WorldRenderer::draw(
|
||||
|
||||
skybox->refresh(pctx, worldInfo.daytime, mie, 4);
|
||||
|
||||
chunks->update();
|
||||
|
||||
if (shadows) {
|
||||
if (shadowMap == nullptr) {
|
||||
shadowMap = std::make_unique<ShadowMap>(1024 * 8);
|
||||
}
|
||||
generateShadowsMap(camera, pctx);
|
||||
}
|
||||
|
||||
|
||||
@ -74,6 +74,8 @@ SettingsHandler::SettingsHandler(EngineSettings& settings) {
|
||||
builder.add("chunk-max-vertices", &settings.graphics.chunkMaxVertices);
|
||||
builder.add("chunk-max-vertices-dense", &settings.graphics.chunkMaxVerticesDense);
|
||||
builder.add("chunk-max-renderers", &settings.graphics.chunkMaxRenderers);
|
||||
builder.add("advanced-render", &settings.graphics.advancedRender);
|
||||
builder.add("shadows-quality", &settings.graphics.shadowsQuality);
|
||||
|
||||
builder.section("ui");
|
||||
builder.add("language", &settings.ui.language);
|
||||
|
||||
@ -75,6 +75,10 @@ struct GraphicsSettings {
|
||||
IntegerSetting chunkMaxVerticesDense {800'000, 0, 8'000'000};
|
||||
/// @brief Limit of chunk renderers count
|
||||
IntegerSetting chunkMaxRenderers {6, -4, 32};
|
||||
/// @brief Advanced render pipeline
|
||||
FlagSetting advancedRender {true};
|
||||
/// @brief Shadows quality
|
||||
IntegerSetting shadowsQuality {0, 0, 2};
|
||||
};
|
||||
|
||||
struct DebugSettings {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user