Create color space and tonemapping render options
This commit is contained in:
parent
e1bcb7085c
commit
bcac561a1e
5 changed files with 33 additions and 7 deletions
|
@ -103,6 +103,10 @@ void draw_renderer() {
|
|||
ImGui::Text("Options");
|
||||
ImGui::Separator();
|
||||
|
||||
ImGui::ComboEnum("Display Color Space", &render_options.display_color_space);
|
||||
ImGui::ComboEnum("Tonemapping", &render_options.tonemapping);
|
||||
ImGui::DragFloat("Exposure", &render_options.exposure, 0.1f);
|
||||
|
||||
bool should_recompile = false;
|
||||
|
||||
float render_scale = render_options.render_scale;
|
||||
|
|
|
@ -10,6 +10,16 @@ enum class ShadowFilter {
|
|||
PCSS
|
||||
};
|
||||
|
||||
enum class DisplayColorSpace {
|
||||
Linear = 0,
|
||||
SRGB = 1,
|
||||
};
|
||||
|
||||
enum class TonemapOperator {
|
||||
Linear = 0,
|
||||
ExposureBased = 1
|
||||
};
|
||||
|
||||
#if defined(PLATFORM_TVOS) || defined(PLATFORM_IOS)
|
||||
constexpr bool default_enable_ibl = false;
|
||||
constexpr bool default_enable_normal_mapping = false;
|
||||
|
@ -25,6 +35,10 @@ constexpr int default_shadow_resolution = 2048;
|
|||
#endif
|
||||
|
||||
struct RenderOptions {
|
||||
DisplayColorSpace display_color_space = DisplayColorSpace::SRGB;
|
||||
TonemapOperator tonemapping = TonemapOperator::Linear;
|
||||
float exposure = 1.0f;
|
||||
|
||||
bool dynamic_resolution = false;
|
||||
double render_scale = 1.0f;
|
||||
|
||||
|
|
|
@ -73,8 +73,7 @@ struct SceneInformation {
|
|||
};
|
||||
|
||||
struct PostPushConstants {
|
||||
Vector4 viewport;
|
||||
Vector4 options;
|
||||
Vector4 viewport, options, transform_ops;
|
||||
};
|
||||
|
||||
struct UIPushConstant {
|
||||
|
@ -300,7 +299,9 @@ void Renderer::render(Scene* scene, int index) {
|
|||
PostPushConstants pc;
|
||||
pc.options.x = render_options.enable_aa;
|
||||
pc.options.y = fade;
|
||||
pc.options.z = 1.0;
|
||||
pc.options.z = render_options.exposure;
|
||||
pc.transform_ops.x = (int)render_options.display_color_space;
|
||||
pc.transform_ops.y = (int)render_options.tonemapping;
|
||||
|
||||
const auto [width, height] = render_extent;
|
||||
pc.viewport = Vector4(1.0f / static_cast<float>(width), 1.0f / static_cast<float>(height), width, height);
|
||||
|
|
|
@ -8,6 +8,7 @@
|
|||
layout(std430, push_constant, binding = 4) uniform PushConstant {
|
||||
vec4 viewport;
|
||||
vec4 options;
|
||||
vec4 transform_ops;
|
||||
};
|
||||
|
||||
#include "smaa.glsl"
|
||||
|
@ -63,6 +64,13 @@ void main() {
|
|||
vec3 sobelColor = vec3(0, 1, 1);
|
||||
|
||||
vec3 hdrColor = sceneColor; // fading removed
|
||||
hdrColor = vec3(1.0) - exp(-hdrColor * options.z); // exposure
|
||||
outColor = vec4(from_linear_to_srgb(hdrColor) + (sobelColor * sobel), 1.0);
|
||||
|
||||
vec3 transformed_color = hdrColor;
|
||||
if(transform_ops.x == 1)
|
||||
transformed_color = from_linear_to_srgb(hdrColor);
|
||||
|
||||
if(transform_ops.y == 1)
|
||||
transformed_color = vec3(1.0) - exp(-hdrColor * options.z);
|
||||
|
||||
outColor = vec4(transformed_color + (sobelColor * sobel), 1.0);
|
||||
}
|
||||
|
|
|
@ -8,8 +8,7 @@
|
|||
layout(std430, push_constant, binding = 4) uniform readonlPushConstant {
|
||||
vec4 viewport;
|
||||
float fade;
|
||||
bool performGammaCorrection;
|
||||
bool performAA;
|
||||
vec4 transform_ops;
|
||||
};
|
||||
|
||||
#include "smaa.glsl"
|
||||
|
|
Reference in a new issue