[orx-fx] Add noiseGain and noiseSeed to MipBloom

This commit is contained in:
Edwin Jakobs
2021-02-01 21:19:34 +01:00
parent 10099c7d9a
commit f5ab40aad6
3 changed files with 38 additions and 22 deletions

View File

@@ -82,6 +82,7 @@ fun main() {
blur.window = 5
blur.sigma = 3.0
blur.gain = 3.0
blur.noiseSeed = seconds
}
is FrameBlur -> {
blur.blend = 0.05

View File

@@ -17,12 +17,14 @@ class BloomDownscale : Filter(filterShaderFromUrl(filterFragmentUrl("blur/bloom-
class BloomUpscale : Filter(filterShaderFromUrl(filterFragmentUrl("blur/bloom-upscale.frag"))) {
var gain: Double by parameters
var shape: Double by parameters
var seed: Double by parameters
var noiseSeed: Double by parameters
var noiseGain: Double by parameters
init {
gain = 1.0
shape = 1.0
seed = 1.0
noiseSeed = 1.0
noiseGain = 0.25
}
}
@@ -46,6 +48,15 @@ open class MipBloom<T : Filter>(val blur: T) : Filter(filterShaderFromUrl(filter
@DoubleParameter("gain", 0.0, 4.0)
var gain: Double = 1.0
/**
* noise gain. low noise gains will result in visible banding of the image. default value is 0.25
*/
@DoubleParameter("noise gain", 0.0, 1.0)
var noiseGain: Double = 0.25
@DoubleParameter("noise seed", 0.0, 1000.0)
var noiseSeed: Double = 0.0
@BooleanParameter("sRGB")
var sRGB = true
@@ -89,6 +100,8 @@ open class MipBloom<T : Filter>(val blur: T) : Filter(filterShaderFromUrl(filter
linearize.apply(sourceCopy!!, sourceCopy!!)
}
upscale.noiseGain = noiseGain
upscale.noiseSeed = noiseSeed
downScale.apply(sourceCopy!!, intermediates[0])
blur.apply(intermediates[0], intermediates[0])
@@ -131,7 +144,6 @@ class HashBloom : MipBloom<HashBlur>(blur = HashBlur()) {
@Description("Gaussian bloom")
class GaussianBloom : MipBloom<GaussianBlur>(blur = GaussianBlur()) {
/**
* blur sample window, default value is 5
*/
@@ -144,6 +156,7 @@ class GaussianBloom : MipBloom<GaussianBlur>(blur = GaussianBlur()) {
@DoubleParameter("kernel sigma", 0.0, 25.0)
var sigma: Double = 1.0
override fun apply(source: Array<ColorBuffer>, target: Array<ColorBuffer>) {
blur.window = window
blur.sigma = sigma

View File

@@ -5,10 +5,12 @@ float nrand(vec2 n) {
}
// -- based on https://github.com/excess-demogroup/even-laster-engine/blob/a451a89f6bd6d3c6017d5890b92d9f72823bc742/src/shaders/bloom_upscale.frag
uniform float seed;
uniform float noiseSeed;
uniform float shape;
uniform float gain;
uniform float noiseGain;
in vec2 v_texCoord0;
out vec4 o_output;
@@ -25,51 +27,51 @@ vec4 sampleBloom(vec2 pos, float shape) {
{
float weight = pow(0.0, shape);
vec2 rnd = vec2(nrand(3 + 0.0 + pos.xy + seed),
nrand(5 + 0.0 + pos.yx - seed));
vec2 rnd = vec2(nrand(3 + 0.0 + pos.xy + noiseSeed),
nrand(5 + 0.0 + pos.yx - noiseSeed));
rnd = (rnd * 2 - 1) / textureSize(tex0, 0);
sum += textureLod(tex0, pos + rnd * 0.25, 0.0) * weight;
sum += textureLod(tex0, pos + rnd * noiseGain, 0.0) * weight;
total += weight;
}
{
float weight = pow(1.0, shape);
vec2 rnd = vec2(nrand(3 + 0.0 + pos.xy + seed),
nrand(5 + 0.0 + pos.yx - seed));
vec2 rnd = vec2(nrand(3 + 0.0 + pos.xy + noiseSeed),
nrand(5 + 0.0 + pos.yx - noiseSeed));
rnd = (rnd * 2 - 1) / textureSize(tex1, 0);
sum += textureLod(tex1, pos + rnd * 0.25, 0.0) * weight;
sum += textureLod(tex1, pos + rnd * noiseGain, 0.0) * weight;
total += weight;
}
{
float weight = pow(2.0, shape);
vec2 rnd = vec2(nrand(3 + 0.0 + pos.xy + seed),
nrand(5 + 0.0 + pos.yx - seed));
vec2 rnd = vec2(nrand(3 + 0.0 + pos.xy + noiseSeed),
nrand(5 + 0.0 + pos.yx - noiseSeed));
rnd = (rnd * 2 - 1) / textureSize(tex2, 0);
sum += textureLod(tex2, pos + rnd * 0.25, 0.0) * weight;
sum += textureLod(tex2, pos + rnd * noiseGain, 0.0) * weight;
total += weight;
}
{
float weight = pow(3.0, shape);
vec2 rnd = vec2(nrand(3 + 0.0 + pos.xy + seed),
nrand(5 + 0.0 + pos.yx - seed));
vec2 rnd = vec2(nrand(3 + 0.0 + pos.xy + noiseSeed),
nrand(5 + 0.0 + pos.yx - noiseSeed));
rnd = (rnd * 3 - 1) / textureSize(tex3, 0);
sum += textureLod(tex3, pos + rnd * 0.25, 0.0) * weight;
sum += textureLod(tex3, pos + rnd * noiseGain, 0.0) * weight;
total += weight;
}
{
float weight = pow(4.0, shape);
vec2 rnd = vec2(nrand(3 + 0.0 + pos.xy + seed),
nrand(5 + 0.0 + pos.yx - seed));
vec2 rnd = vec2(nrand(3 + 0.0 + pos.xy + noiseSeed),
nrand(5 + 0.0 + pos.yx - noiseSeed));
rnd = (rnd * 3 - 1) / textureSize(tex3, 0);
sum += textureLod(tex4, pos + rnd * 0.25, 0.0) * weight;
sum += textureLod(tex4, pos + rnd * noiseGain, 0.0) * weight;
total += weight;
}
{
float weight = pow(5.0, shape);
vec2 rnd = vec2(nrand(3 + 0.0 + pos.xy + seed),
nrand(5 + 0.0 + pos.yx - seed));
vec2 rnd = vec2(nrand(3 + 0.0 + pos.xy + noiseSeed),
nrand(5 + 0.0 + pos.yx - noiseSeed));
rnd = (rnd * 3 - 1) / textureSize(tex3, 0);
sum += textureLod(tex5, pos + rnd * 0.25, 0.0) * weight;
sum += textureLod(tex5, pos + rnd * noiseGain, 0.0) * weight;
total += weight;
}