Merge pull request #740 from MihailRis/ssao-quality-setting

ssao quality setting
This commit is contained in:
MihailRis 2025-12-19 19:15:51 +03:00 • committed by GitHub
commit 830e66283e
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
6 changed files with 27 additions and 10 deletions

View file

@ -44,6 +44,6 @@ function on_open()
create_checkbox("graphics.soft-lighting", "Soft lighting", "graphics.soft-lighting.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_checkbox("graphics.ssao", "SSAO", "graphics.ssao.tooltip")
create_setting("graphics.ssao", "SSAO", 1, "", "graphics.ssao.tooltip")
create_setting("graphics.shadows-quality", "Shadows quality", 1)
end

View file

@ -6,6 +6,7 @@
"cinematic"
],
"post-effect-slot": [
"default"
"default",
"ssao"
]
}

View file

@ -1,6 +1,6 @@
local function configure_SSAO()
-- Temporary using slot to configure built-in SSAO effect
local slot = gfx.posteffects.index("core:default")
local slot = gfx.posteffects.index("core:ssao")
gfx.posteffects.set_effect(slot, "ssao")
-- Generating random SSAO samples
@ -18,8 +18,18 @@ local function configure_SSAO()
Bytearray.append(buffer, byteutil.pack("fff", x, y, z))
end
gfx.posteffects.set_array(slot, "u_ssaoSamples", Bytearray_as_string(buffer))
-- SSAO effect configured, so 'core:default' slot may be reused now
-- for test purposes
local function update_ssao_quality(value)
value = math.min(value, 3)
gfx.posteffects.set_params(slot, {
u_kernelSize = value * 16,
u_radius = 0.4 / value,
u_bias = 0.006 / value / value,
})
end
events.on("core:setting.graphics.ssao.set", update_ssao_quality)
update_ssao_quality(core.get_setting("graphics.ssao"))
end
local function update_hand()

View file

@ -24,6 +24,12 @@ function tb_frame_tostring(frame)
return s
end
local core_set_setting = core.set_setting
function core.set_setting(name, value, ...)
core_set_setting(name, value, ...)
events.emit("core:setting."..name..".set", value)
end
local function complete_app_lib(app)
app.sleep = sleep
app.script = __VC_SCRIPT_NAME

View file

@ -1,7 +1,7 @@
#param vec3 u_ssaoSamples[64]
#param int u_kernelSize = 16
#param float u_radius = 0.4
#param float u_bias = 0.006
#param int u_kernelSize = 32
#param float u_radius = 0.2
#param float u_bias = 0.001
vec4 effect() {
vec2 noiseScale = u_screenSize / 4.0;

View file

@ -81,8 +81,8 @@ struct GraphicsSettings {
IntegerSetting chunkMaxRenderers {6, -4, 32};
/// @brief Advanced render pipeline
FlagSetting advancedRender {true};
/// @brief Screen space ambient occlusion
FlagSetting ssao {true};
/// @brief Screen space ambient occlusion quality
IntegerSetting ssao {1, 0, 2};
/// @brief Shadows quality
IntegerSetting shadowsQuality {0, 0, 3};
/// @brief Dense render distance