Archived
1
Fork 0

Create color space and tonemapping render options

This commit is contained in:
redstrate 2020-09-22 15:25:06 -04:00
parent e1bcb7085c
commit bcac561a1e
5 changed files with 33 additions and 7 deletions

View file

@ -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;

View file

@ -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;

View file

@ -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);

View file

@ -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);
}

View file

@ -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"