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::Text("Options");
|
||||||
ImGui::Separator();
|
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;
|
bool should_recompile = false;
|
||||||
|
|
||||||
float render_scale = render_options.render_scale;
|
float render_scale = render_options.render_scale;
|
||||||
|
|
|
@ -10,6 +10,16 @@ enum class ShadowFilter {
|
||||||
PCSS
|
PCSS
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum class DisplayColorSpace {
|
||||||
|
Linear = 0,
|
||||||
|
SRGB = 1,
|
||||||
|
};
|
||||||
|
|
||||||
|
enum class TonemapOperator {
|
||||||
|
Linear = 0,
|
||||||
|
ExposureBased = 1
|
||||||
|
};
|
||||||
|
|
||||||
#if defined(PLATFORM_TVOS) || defined(PLATFORM_IOS)
|
#if defined(PLATFORM_TVOS) || defined(PLATFORM_IOS)
|
||||||
constexpr bool default_enable_ibl = false;
|
constexpr bool default_enable_ibl = false;
|
||||||
constexpr bool default_enable_normal_mapping = false;
|
constexpr bool default_enable_normal_mapping = false;
|
||||||
|
@ -25,6 +35,10 @@ constexpr int default_shadow_resolution = 2048;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
struct RenderOptions {
|
struct RenderOptions {
|
||||||
|
DisplayColorSpace display_color_space = DisplayColorSpace::SRGB;
|
||||||
|
TonemapOperator tonemapping = TonemapOperator::Linear;
|
||||||
|
float exposure = 1.0f;
|
||||||
|
|
||||||
bool dynamic_resolution = false;
|
bool dynamic_resolution = false;
|
||||||
double render_scale = 1.0f;
|
double render_scale = 1.0f;
|
||||||
|
|
||||||
|
|
|
@ -73,8 +73,7 @@ struct SceneInformation {
|
||||||
};
|
};
|
||||||
|
|
||||||
struct PostPushConstants {
|
struct PostPushConstants {
|
||||||
Vector4 viewport;
|
Vector4 viewport, options, transform_ops;
|
||||||
Vector4 options;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
struct UIPushConstant {
|
struct UIPushConstant {
|
||||||
|
@ -300,7 +299,9 @@ void Renderer::render(Scene* scene, int index) {
|
||||||
PostPushConstants pc;
|
PostPushConstants pc;
|
||||||
pc.options.x = render_options.enable_aa;
|
pc.options.x = render_options.enable_aa;
|
||||||
pc.options.y = fade;
|
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;
|
const auto [width, height] = render_extent;
|
||||||
pc.viewport = Vector4(1.0f / static_cast<float>(width), 1.0f / static_cast<float>(height), width, height);
|
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 {
|
layout(std430, push_constant, binding = 4) uniform PushConstant {
|
||||||
vec4 viewport;
|
vec4 viewport;
|
||||||
vec4 options;
|
vec4 options;
|
||||||
|
vec4 transform_ops;
|
||||||
};
|
};
|
||||||
|
|
||||||
#include "smaa.glsl"
|
#include "smaa.glsl"
|
||||||
|
@ -63,6 +64,13 @@ void main() {
|
||||||
vec3 sobelColor = vec3(0, 1, 1);
|
vec3 sobelColor = vec3(0, 1, 1);
|
||||||
|
|
||||||
vec3 hdrColor = sceneColor; // fading removed
|
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 {
|
layout(std430, push_constant, binding = 4) uniform readonlPushConstant {
|
||||||
vec4 viewport;
|
vec4 viewport;
|
||||||
float fade;
|
float fade;
|
||||||
bool performGammaCorrection;
|
vec4 transform_ops;
|
||||||
bool performAA;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#include "smaa.glsl"
|
#include "smaa.glsl"
|
||||||
|
|
Reference in a new issue