mirror of
https://github.com/overte-org/overte.git
synced 2025-08-09 08:21:24 +02:00
Working threshold mask and debug on Bloom
This commit is contained in:
parent
98d39ff9e0
commit
50ab73009a
3 changed files with 32 additions and 27 deletions
|
@ -70,21 +70,20 @@ void ThresholdAndDownsampleJob::run(const render::RenderContextPointer& renderCo
|
||||||
gpu::doInBatch(args->_context, [&](gpu::Batch& batch) {
|
gpu::doInBatch(args->_context, [&](gpu::Batch& batch) {
|
||||||
batch.enableStereo(false);
|
batch.enableStereo(false);
|
||||||
|
|
||||||
/* batch.setViewportTransform(halfViewport);
|
batch.setViewportTransform(halfViewport);
|
||||||
batch.setProjectionTransform(glm::mat4());
|
batch.setProjectionTransform(glm::mat4());
|
||||||
batch.resetViewTransform();
|
batch.resetViewTransform();
|
||||||
batch.setModelTransform(gpu::Framebuffer::evalSubregionTexcoordTransform(inputFrameBuffer->getSize(), args->_viewport));
|
batch.setModelTransform(gpu::Framebuffer::evalSubregionTexcoordTransform(inputFrameBuffer->getSize(), args->_viewport));
|
||||||
batch.setPipeline(_pipeline);*/
|
batch.setPipeline(_pipeline);
|
||||||
|
|
||||||
batch.setFramebuffer(_downsampledBuffer);
|
batch.setFramebuffer(_downsampledBuffer);
|
||||||
batch.clearColorFramebuffer(gpu::Framebuffer::BUFFER_COLOR0, gpu::Vec4(1.0f, 0.2f, 0.9f, 1.f));
|
batch.setResourceTexture(COLOR_MAP_SLOT, inputColor);
|
||||||
/*batch.setResourceTexture(COLOR_MAP_SLOT, inputColor);
|
|
||||||
batch._glUniform1f(THRESHOLD_SLOT, _threshold);
|
batch._glUniform1f(THRESHOLD_SLOT, _threshold);
|
||||||
batch.draw(gpu::TRIANGLE_STRIP, 4);
|
batch.draw(gpu::TRIANGLE_STRIP, 4);
|
||||||
|
|
||||||
batch.setViewportTransform(args->_viewport);
|
batch.setViewportTransform(args->_viewport);
|
||||||
batch.setResourceTexture(COLOR_MAP_SLOT, nullptr);
|
batch.setResourceTexture(COLOR_MAP_SLOT, nullptr);
|
||||||
batch.setFramebuffer(nullptr);*/
|
batch.setFramebuffer(nullptr);
|
||||||
});
|
});
|
||||||
|
|
||||||
outputs = _downsampledBuffer;
|
outputs = _downsampledBuffer;
|
||||||
|
@ -102,13 +101,14 @@ void DebugBloom::run(const render::RenderContextPointer& renderContext, const In
|
||||||
RenderArgs* args = renderContext->args;
|
RenderArgs* args = renderContext->args;
|
||||||
|
|
||||||
const auto frameBuffer = inputs.get0();
|
const auto frameBuffer = inputs.get0();
|
||||||
|
const auto framebufferSize = frameBuffer->getSize();
|
||||||
const auto level0FB = inputs.get1();
|
const auto level0FB = inputs.get1();
|
||||||
const gpu::TexturePointer levelTextures[1] = {
|
const gpu::TexturePointer levelTextures[1] = {
|
||||||
level0FB->getRenderBuffer(0)
|
level0FB->getRenderBuffer(0)
|
||||||
};
|
};
|
||||||
|
|
||||||
if (!_pipeline) {
|
if (!_pipeline) {
|
||||||
auto vs = gpu::StandardShaderLib::getDrawUnitQuadTexcoordVS();
|
auto vs = gpu::StandardShaderLib::getDrawViewportQuadTransformTexcoordVS();
|
||||||
auto ps = gpu::StandardShaderLib::getDrawTextureOpaquePS();
|
auto ps = gpu::StandardShaderLib::getDrawTextureOpaquePS();
|
||||||
gpu::ShaderPointer program = gpu::Shader::createProgram(vs, ps);
|
gpu::ShaderPointer program = gpu::Shader::createProgram(vs, ps);
|
||||||
|
|
||||||
|
@ -123,19 +123,16 @@ void DebugBloom::run(const render::RenderContextPointer& renderContext, const In
|
||||||
gpu::doInBatch(args->_context, [&](gpu::Batch& batch) {
|
gpu::doInBatch(args->_context, [&](gpu::Batch& batch) {
|
||||||
batch.enableStereo(false);
|
batch.enableStereo(false);
|
||||||
|
|
||||||
//batch.setFramebuffer(frameBuffer);
|
batch.setFramebuffer(frameBuffer);
|
||||||
batch.setViewportTransform(args->_viewport);
|
|
||||||
|
batch.setViewportTransform(args->_viewport);
|
||||||
|
batch.setProjectionTransform(glm::mat4());
|
||||||
|
batch.resetViewTransform();
|
||||||
|
batch.setModelTransform(gpu::Framebuffer::evalSubregionTexcoordTransform(glm::ivec2(framebufferSize.x, framebufferSize.y), args->_viewport));
|
||||||
|
|
||||||
glm::mat4 projMat;
|
|
||||||
Transform viewMat;
|
|
||||||
batch.setProjectionTransform(projMat);
|
|
||||||
batch.setViewTransform(viewMat, false);
|
|
||||||
batch.setPipeline(_pipeline);
|
batch.setPipeline(_pipeline);
|
||||||
batch.setResourceTexture(0, levelTextures[0]);
|
batch.setResourceTexture(0, levelTextures[0]);
|
||||||
|
|
||||||
batch.draw(gpu::TRIANGLE_STRIP, 4);
|
batch.draw(gpu::TRIANGLE_STRIP, 4);
|
||||||
|
|
||||||
batch.setResourceTexture(0, nullptr);
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -162,7 +159,9 @@ void Bloom::configure(const Config& config) {
|
||||||
|
|
||||||
void Bloom::build(JobModel& task, const render::Varying& inputs, render::Varying& outputs) {
|
void Bloom::build(JobModel& task, const render::Varying& inputs, render::Varying& outputs) {
|
||||||
const auto halfSizeBuffer = task.addJob<ThresholdAndDownsampleJob>("BloomThreshold", inputs);
|
const auto halfSizeBuffer = task.addJob<ThresholdAndDownsampleJob>("BloomThreshold", inputs);
|
||||||
|
const auto& input = inputs.get<Inputs>();
|
||||||
|
const auto& frameBuffer = input[1];
|
||||||
|
|
||||||
const auto debugInput = DebugBloom::Inputs(inputs.get<Bloom::Inputs>().get1(), halfSizeBuffer).asVarying();
|
const auto debugInput = DebugBloom::Inputs(frameBuffer, halfSizeBuffer).asVarying();
|
||||||
task.addJob<DebugBloom>("DebugBloom", debugInput);
|
task.addJob<DebugBloom>("DebugBloom", debugInput);
|
||||||
}
|
}
|
||||||
|
|
|
@ -22,19 +22,25 @@ void main(void) {
|
||||||
vec4 greens = textureGather(colorMap, varTexCoord0, 1);
|
vec4 greens = textureGather(colorMap, varTexCoord0, 1);
|
||||||
vec4 blues = textureGather(colorMap, varTexCoord0, 2);
|
vec4 blues = textureGather(colorMap, varTexCoord0, 2);
|
||||||
|
|
||||||
float hardness = 8;
|
|
||||||
vec4 rMask = clamp((reds-threshold) * hardness, 0, 1);
|
|
||||||
vec4 gMask = clamp((greens-threshold) * hardness, 0, 1);
|
|
||||||
vec4 bMask = clamp((blues-threshold) * hardness, 0, 1);
|
|
||||||
|
|
||||||
reds = smoothstep(vec4(0,0,0,0), reds, rMask);
|
|
||||||
greens = smoothstep(vec4(0,0,0,0), greens, gMask);
|
|
||||||
blues = smoothstep(vec4(0,0,0,0), blues, bMask);
|
|
||||||
|
|
||||||
vec3 texel0 = vec3(reds.x, greens.x, blues.x);
|
vec3 texel0 = vec3(reds.x, greens.x, blues.x);
|
||||||
vec3 texel1 = vec3(reds.y, greens.y, blues.y);
|
vec3 texel1 = vec3(reds.y, greens.y, blues.y);
|
||||||
vec3 texel2 = vec3(reds.z, greens.z, blues.z);
|
vec3 texel2 = vec3(reds.z, greens.z, blues.z);
|
||||||
vec3 texel3 = vec3(reds.w, greens.w, blues.w);
|
vec3 texel3 = vec3(reds.w, greens.w, blues.w);
|
||||||
|
|
||||||
outFragColor = vec4((texel0+texel1+texel2+texel3)/4.0, 1.0);
|
vec4 luminances;
|
||||||
|
vec3 luminanceWeights = vec3(0.3,0.5,0.2);
|
||||||
|
|
||||||
|
luminances.x = dot(texel0, luminanceWeights);
|
||||||
|
luminances.y = dot(texel1, luminanceWeights);
|
||||||
|
luminances.z = dot(texel2, luminanceWeights);
|
||||||
|
luminances.w = dot(texel0, luminanceWeights);
|
||||||
|
|
||||||
|
float hardness = 8;
|
||||||
|
vec4 mask = clamp((luminances-threshold) * hardness, 0, 1);
|
||||||
|
vec3 color;
|
||||||
|
|
||||||
|
color.x = dot(mask, reds);
|
||||||
|
color.y = dot(mask, greens);
|
||||||
|
color.z = dot(mask, blues);
|
||||||
|
outFragColor = vec4(color/4.0, 1.0);
|
||||||
}
|
}
|
||||||
|
|
|
@ -161,7 +161,7 @@ void RenderDeferredTask::build(JobModel& task, const render::Varying& input, ren
|
||||||
const auto transparentsInputs = DrawDeferred::Inputs(transparents, lightingModel).asVarying();
|
const auto transparentsInputs = DrawDeferred::Inputs(transparents, lightingModel).asVarying();
|
||||||
task.addJob<DrawDeferred>("DrawTransparentDeferred", transparentsInputs, shapePlumber);
|
task.addJob<DrawDeferred>("DrawTransparentDeferred", transparentsInputs, shapePlumber);
|
||||||
|
|
||||||
// LIght Cluster Grid Debuging job
|
// Light Cluster Grid Debuging job
|
||||||
{
|
{
|
||||||
const auto debugLightClustersInputs = DebugLightClusters::Inputs(deferredFrameTransform, deferredFramebuffer, lightingModel, linearDepthTarget, lightClusters).asVarying();
|
const auto debugLightClustersInputs = DebugLightClusters::Inputs(deferredFrameTransform, deferredFramebuffer, lightingModel, linearDepthTarget, lightClusters).asVarying();
|
||||||
task.addJob<DebugLightClusters>("DebugLightClusters", debugLightClustersInputs);
|
task.addJob<DebugLightClusters>("DebugLightClusters", debugLightClustersInputs);
|
||||||
|
|
Loading…
Reference in a new issue