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