diff --git a/Effects/display.eff b/Effects/display.eff index a5624dcf4..3aaa20cc6 100644 --- a/Effects/display.eff +++ b/Effects/display.eff @@ -13,6 +13,13 @@ repeat normalized + + Textures\film-dirt.png + linear-mipmap-linear + repeat + repeat + normalized + /sim/rendering/rembrandt/cinema/vignette @@ -22,6 +29,11 @@ /sim/rendering/rembrandt/cinema/red-shift /sim/rendering/rembrandt/cinema/green-shift /sim/rendering/rembrandt/cinema/blue-shift + /sim/rendering/rembrandt/cinema/distortion + /sim/rendering/rembrandt/cinema/distortion-factor + /sim/rendering/rembrandt/cinema/color-fringe + /sim/rendering/rembrandt/cinema/color-fringe-factor + /sim/rendering/rembrandt/cinema/film-wear /sim/rendering/rembrandt/debug-buffer[0]/enabled @@ -34,103 +46,6 @@ /sim/rendering/rembrandt/debug-buffer[3]/name - - - - /sim/rendering/rembrandt/cinema/vignette - /sim/rendering/rembrandt/cinema/color-shift - - - 0.0 - /sim/rendering/rembrandt/show-buffers - - - - - - 99999 - RenderBin - - - 0 - buffer - lighting - - - 1 - buffer - bloom-3 - - - - Shaders/fullscreen.vert - Shaders/cinema.frag - - - lighting_tex - sampler-2d - 0 - - - bloom_tex - sampler-2d - 1 - - - - bloomEnabled - bool - bloom - - - bloomStrength - float - bloom-strength - - - bloomBuffers - bool - bloom-buffers - - - - vignette - bool - cinema/vignette - - - innerCircle - float - cinema/inner-circle - - - outerCircle - float - cinema/outer-circle - - - colorShift - bool - cinema/color-shift - - - redShift - float-vec3 - cinema/red-shift - - - greenShift - float-vec3 - cinema/green-shift - - - blueShift - float-vec3 - cinema/blue-shift - - - - /sim/rendering/rembrandt/night-vision @@ -221,6 +136,145 @@ + + + + + /sim/rendering/rembrandt/cinema/vignette + /sim/rendering/rembrandt/cinema/color-shift + /sim/rendering/rembrandt/cinema/distortion + + + 0.0 + /sim/rendering/rembrandt/show-buffers + + + + + + 99999 + RenderBin + + + 0 + buffer + lighting + + + 1 + buffer + bloom-3 + + + 2 + texture[1]/image + texture[1]/filter + texture[1]/wrap-s + texture[1]/wrap-t + texture[1]/internal-format + + + + Shaders/fullscreen.vert + Shaders/cinema.frag + + + lighting_tex + sampler-2d + 0 + + + bloom_tex + sampler-2d + 1 + + + film_tex + sampler-2d + 2 + + + + bloomEnabled + bool + bloom + + + bloomStrength + float + bloom-strength + + + bloomBuffers + bool + bloom-buffers + + + + vignette + bool + cinema/vignette + + + innerCircle + float + cinema/inner-circle + + + outerCircle + float + cinema/outer-circle + + + colorShift + bool + cinema/color-shift + + + redShift + float-vec3 + cinema/red-shift + + + greenShift + float-vec3 + cinema/green-shift + + + blueShift + float-vec3 + cinema/blue-shift + + + + distortion + bool + cinema/distortion + + + distortionFactor + float-vec3 + cinema/distortion-factor + + + + colorFringe + bool + cinema/color-fringe + + + colorFringeFactor + float + cinema/color-fringe-factor + + + + filmWear + bool + cinema/film-wear + + + diff --git a/Effects/ssao.eff b/Effects/ssao.eff index e25373a2e..31b36f44e 100644 --- a/Effects/ssao.eff +++ b/Effects/ssao.eff @@ -8,24 +8,7 @@ 0.03 800.0 - - - - - - 2.0 - - - - GL_ARB_shader_objects - GL_ARB_shading_language_100 - GL_ARB_vertex_shader - GL_ARB_fragment_shader - - - GL_EXT_gpu_shader4 - - + 0 @@ -98,77 +81,4 @@ - - - - 0 - buffer - depth - - - 1 - buffer - normal - - - 2 - buffer - spec-emis - - - 3 - noise - - - Shaders/ssao.vert - Shaders/ssao-ati.frag - Shaders/gbuffer-functions.frag - - - depth_tex - sampler-2d - 0 - - - normal_tex - sampler-2d - 1 - - - spec_emis_tex - sampler-2d - 2 - - - noise_tex - sampler-2d - 3 - - - g_scale - float - g_scale - - - g_bias - float - g_bias - - - g_intensity - float - g_intensity - - - g_sample_rad - float - g_sample_rad - - - random_size - float - random_size - - - diff --git a/Nasal/canvas/api.nas b/Nasal/canvas/api.nas index c6afbf777..2087254c6 100644 --- a/Nasal/canvas/api.nas +++ b/Nasal/canvas/api.nas @@ -701,12 +701,34 @@ var Path = { } }; +# Image +# ============================================================================== +# Class for an image element on a canvas +# +var Image = { + new: func(parent, id) + { + var m = { + parents: [Image, Element.new(parent, "image", id, arg)] + }; + m.color = _createColorNodes(m._node, "color"); + m.sourceRect = m._node.getNode("source", 1); + return m; + }, + + setFile: func(file) + { + me.set("file", file); + } +}; + # Element factories used by #Group elements to create children Group._element_factories = { "group": Group.new, "map": Map.new, "text": Text.new, - "path": Path.new + "path": Path.new, + "image": Image.new }; # Canvas diff --git a/Shaders/cinema.frag b/Shaders/cinema.frag index 1352e4215..d3033f078 100644 --- a/Shaders/cinema.frag +++ b/Shaders/cinema.frag @@ -1,5 +1,6 @@ uniform sampler2D lighting_tex; uniform sampler2D bloom_tex; +uniform sampler2D film_tex; uniform bool colorShift; uniform vec3 redShift; @@ -10,8 +11,16 @@ uniform bool vignette; uniform float innerCircle; uniform float outerCircle; +uniform bool distortion; +uniform vec3 distortionFactor; + +uniform bool colorFringe; +uniform float colorFringeFactor; + +uniform bool filmWear; + uniform vec2 fg_BufferSize; -// uniform float osg_SimulationTime; +uniform float osg_SimulationTime; // uniform float shutterFreq; // uniform float shutterDuration; @@ -20,28 +29,66 @@ uniform float bloomStrength; uniform bool bloomBuffers; void main() { - vec2 coords = gl_TexCoord[0].xy; - vec4 color = texture2D( lighting_tex, coords ); + vec2 c1 = gl_TexCoord[0].xy; + vec2 initialCoords = c1; + vec2 c2; + + if (distortion) { + c1 = 2.0 * initialCoords - vec2(1.,1.); + c1 *= vec2( 1.0, fg_BufferSize.y / fg_BufferSize.x ); + float r = length(c1); + + c1 += c1 * dot(distortionFactor.xy, vec2(r*r, r*r*r*r)); + c1 /= distortionFactor.z; + + c1 *= vec2( 1.0, fg_BufferSize.x / fg_BufferSize.y ); + c1 = c1 * .5 + .5; + + if (colorFringe) { + c2 = 2.0 * initialCoords - vec2(1.,1.); + c2 *= vec2( 1.0, fg_BufferSize.y / fg_BufferSize.x ); + r = length(c2); + + c2 += c2 * dot(distortionFactor.xy*colorFringeFactor, vec2(r*r, r*r*r*r)); + c2 /= distortionFactor.z; + + c2 *= vec2( 1.0, fg_BufferSize.x / fg_BufferSize.y ); + c2 = c2 * .5 + .5; + } + } + + vec3 dirt = vec3(1.0); + if (filmWear) { + dirt = texture2D(film_tex, initialCoords*vec2( 1.0, fg_BufferSize.y / fg_BufferSize.x ) + vec2(0.0, osg_SimulationTime * 7.7)).rgb; + } + + vec4 color = texture2D( lighting_tex, c1 ); if (bloomEnabled && bloomBuffers) - color = color + bloomStrength * texture2D( bloom_tex, coords ); + color += bloomStrength * texture2D( bloom_tex, c1 ); + + if (distortion && colorFringe) { + color.g = texture2D( lighting_tex, c2 ).g; + if (bloomEnabled && bloomBuffers) + color.g += bloomStrength * texture2D( bloom_tex, c2 ).g; + } if (colorShift) { - vec3 c2; - c2.r = dot(color, redShift); - c2.g = dot(color, greenShift); - c2.b = dot(color, blueShift); - color.rgb = c2; + vec3 col2; + col2.r = dot(color.rgb, redShift); + col2.g = dot(color.rgb, greenShift); + col2.b = dot(color.rgb, blueShift); + color.rgb = col2; } if (vignette) { - vec2 c = 2.0 * coords - vec2(1.,1.); + vec2 c = 2.0 * initialCoords - vec2(1.,1.); c = c * vec2( 1.0, fg_BufferSize.y / fg_BufferSize.x ); float l = length(c); float f = smoothstep( innerCircle, innerCircle * outerCircle, l ); - color.rgb = (1 - f) * color.rgb; + color.rgb = (1.0 - f) * color.rgb; } // if ((osg_FrameNumber % 6) == 0) // f = 1.0; - gl_FragColor = color; + gl_FragColor = color * vec4(dirt, 1.0); } diff --git a/Shaders/ssao-ati.frag b/Shaders/ssao-ati.frag deleted file mode 100644 index aef4f286b..000000000 --- a/Shaders/ssao-ati.frag +++ /dev/null @@ -1,63 +0,0 @@ -#version 120 -uniform sampler2D normal_tex; -uniform sampler2D depth_tex; -uniform sampler2D spec_emis_tex; -uniform sampler3D noise_tex; -uniform vec2 fg_BufferSize; -uniform vec3 fg_Planes; -uniform vec4 fg_du; -uniform vec4 fg_dv; -uniform float g_scale; -uniform float g_bias; -uniform float g_intensity; -uniform float g_sample_rad; -uniform float random_size; -uniform int osg_FrameNumber; - -varying vec4 ray; - -const vec2 v[4] = vec2[](vec2(1.0,0.0),vec2(-1.0,0.0),vec2(0.0,1.0),vec2(0.0,-1.0)); - -vec3 position( vec3 viewDir, vec2 coords, sampler2D depth_tex ); -vec3 normal_decode(vec2 enc); - -vec2 getRandom( in vec2 uv ) { - int level = osg_FrameNumber - ((osg_FrameNumber / 64) * 64); - return normalize( texture3D( noise_tex, vec3(uv*50.0, float(level) / 64.0) ).xy * 0.14 - 0.07 ); -} -vec3 getPosition(in vec2 uv, in vec2 uv0, in vec4 ray0) { - vec2 duv = uv - uv0; - vec4 ray = ray0 + fg_du * duv.x + fg_dv * duv.y; - vec3 viewDir = normalize( ray.xyz ); - return position(viewDir, uv, depth_tex); -} -float doAmbientOcclusion(in vec2 tcoord, in vec2 uv, in vec3 p, in vec3 cnorm, in vec4 ray) { - vec3 diff = getPosition(tcoord+uv,tcoord,ray)-p; - float d = length(diff); - vec3 v = diff / d; - d *= g_scale; - return max(0.0, dot( cnorm,v ) - g_bias) * (1.0/(1.0+d)) * g_intensity; -} -void main() { - vec2 coords = gl_TexCoord[0].xy; - float initialized = texture2D( spec_emis_tex, coords ).a; - if ( initialized < 0.1 ) - discard; - vec3 normal = normal_decode(texture2D( normal_tex, coords ).rg); - vec3 viewDir = normalize(ray.xyz); - vec3 pos = position(viewDir, coords, depth_tex); - vec2 rand = getRandom(coords); - float ao = 0.0; - float rad = g_sample_rad; - int iterations = 4; - for (int j = 0; j < 1; ++j ) { - vec2 coord1 = reflect( v[j], rand ) * rad; - vec2 coord2 = vec2( coord1.x*0.707 - coord1.y*0.707, coord1.x*0.707 + coord1.y*0.707 ); - ao += doAmbientOcclusion(coords,coord1*0.25,pos,normal,ray); - ao += doAmbientOcclusion(coords,coord2*0.5,pos,normal,ray); - ao += doAmbientOcclusion(coords,coord1*0.75,pos,normal,ray); - ao += doAmbientOcclusion(coords,coord2,pos,normal,ray); - } - ao /= 16.0; - gl_FragColor = vec4( vec3(1.0 - ao), 1.0 ); -} diff --git a/Shaders/ssao.frag b/Shaders/ssao.frag index 6cbe1b1d7..de29876e0 100644 --- a/Shaders/ssao.frag +++ b/Shaders/ssao.frag @@ -13,7 +13,7 @@ uniform float g_bias; uniform float g_intensity; uniform float g_sample_rad; uniform float random_size; -uniform unsigned int osg_FrameNumber; +uniform float osg_SimulationTime; varying vec4 ray; @@ -23,8 +23,8 @@ vec3 position( vec3 viewDir, vec2 coords, sampler2D depth_tex ); vec3 normal_decode(vec2 enc); vec2 getRandom( in vec2 uv ) { - unsigned int level = osg_FrameNumber - ((osg_FrameNumber / 64U) * 64U); - return normalize( texture3D( noise_tex, vec3(uv*50.0, float(level) / 64.0) ).xy * 0.14 - 0.07 ); + float level = osg_SimulationTime - float(int(osg_SimulationTime)); + return normalize( texture3D( noise_tex, vec3(uv*50.0, level) ).xy * 0.14 - 0.07 ); } vec3 getPosition(in vec2 uv, in vec2 uv0, in vec4 ray0) { vec2 duv = uv - uv0; diff --git a/Textures/film-dirt.png b/Textures/film-dirt.png new file mode 100644 index 000000000..06e28cb3f Binary files /dev/null and b/Textures/film-dirt.png differ diff --git a/gui/dialogs/rembrandt.xml b/gui/dialogs/rembrandt.xml index 2ea93a121..79b7d0135 100644 --- a/gui/dialogs/rembrandt.xml +++ b/gui/dialogs/rembrandt.xml @@ -195,7 +195,7 @@ - + hbox right @@ -234,7 +234,7 @@ 222 - + hbox right @@ -376,6 +376,24 @@ + + hbox + left + + + left + + night-vision + /sim/rendering/rembrandt/night-vision + + dialog-apply + night-vision + + + + + + hbox left @@ -389,6 +407,9 @@ dialog-apply vignette + + /sim/rendering/rembrandt/night-vision + 34 @@ -396,7 +417,10 @@ - /sim/rendering/rembrandt/cinema/vignette + + /sim/rendering/rembrandt/night-vision + /sim/rendering/rembrandt/cinema/vignette + @@ -410,7 +434,10 @@ inner-circle - /sim/rendering/rembrandt/cinema/vignette + + /sim/rendering/rembrandt/night-vision + /sim/rendering/rembrandt/cinema/vignette + @@ -419,7 +446,10 @@ true /sim/rendering/rembrandt/cinema/inner-circle - /sim/rendering/rembrandt/cinema/vignette + + /sim/rendering/rembrandt/night-vision + /sim/rendering/rembrandt/cinema/vignette + @@ -431,7 +461,10 @@ - /sim/rendering/rembrandt/cinema/vignette + + /sim/rendering/rembrandt/night-vision + /sim/rendering/rembrandt/cinema/vignette + @@ -445,7 +478,10 @@ outer-circle - /sim/rendering/rembrandt/cinema/vignette + + /sim/rendering/rembrandt/night-vision + /sim/rendering/rembrandt/cinema/vignette + @@ -454,7 +490,10 @@ true /sim/rendering/rembrandt/cinema/outer-circle - /sim/rendering/rembrandt/cinema/vignette + + /sim/rendering/rembrandt/night-vision + /sim/rendering/rembrandt/cinema/vignette + @@ -462,8 +501,6 @@ - - hbox left @@ -477,6 +514,9 @@ dialog-apply color-shift + + /sim/rendering/rembrandt/night-vision + 37 @@ -484,7 +524,10 @@ - /sim/rendering/rembrandt/cinema/color-shift + + /sim/rendering/rembrandt/night-vision + /sim/rendering/rembrandt/cinema/color-shift + @@ -498,7 +541,10 @@ red-shift-r - /sim/rendering/rembrandt/cinema/color-shift + + /sim/rendering/rembrandt/night-vision + /sim/rendering/rembrandt/cinema/color-shift + @@ -507,7 +553,10 @@ true /sim/rendering/rembrandt/cinema/red-shift/x - /sim/rendering/rembrandt/cinema/color-shift + + /sim/rendering/rembrandt/night-vision + /sim/rendering/rembrandt/cinema/color-shift + @@ -521,7 +570,10 @@ red-shift-g - /sim/rendering/rembrandt/cinema/color-shift + + /sim/rendering/rembrandt/night-vision + /sim/rendering/rembrandt/cinema/color-shift + @@ -530,7 +582,10 @@ true /sim/rendering/rembrandt/cinema/red-shift/y - /sim/rendering/rembrandt/cinema/color-shift + + /sim/rendering/rembrandt/night-vision + /sim/rendering/rembrandt/cinema/color-shift + @@ -544,7 +599,10 @@ red-shift-b - /sim/rendering/rembrandt/cinema/color-shift + + /sim/rendering/rembrandt/night-vision + /sim/rendering/rembrandt/cinema/color-shift + @@ -553,7 +611,10 @@ true /sim/rendering/rembrandt/cinema/red-shift/z - /sim/rendering/rembrandt/cinema/color-shift + + /sim/rendering/rembrandt/night-vision + /sim/rendering/rembrandt/cinema/color-shift + @@ -565,7 +626,10 @@ - /sim/rendering/rembrandt/cinema/color-shift + + /sim/rendering/rembrandt/night-vision + /sim/rendering/rembrandt/cinema/color-shift + @@ -579,7 +643,10 @@ green-shift-r - /sim/rendering/rembrandt/cinema/color-shift + + /sim/rendering/rembrandt/night-vision + /sim/rendering/rembrandt/cinema/color-shift + @@ -588,7 +655,10 @@ true /sim/rendering/rembrandt/cinema/green-shift/x - /sim/rendering/rembrandt/cinema/color-shift + + /sim/rendering/rembrandt/night-vision + /sim/rendering/rembrandt/cinema/color-shift + @@ -602,7 +672,10 @@ green-shift-g - /sim/rendering/rembrandt/cinema/color-shift + + /sim/rendering/rembrandt/night-vision + /sim/rendering/rembrandt/cinema/color-shift + @@ -611,7 +684,10 @@ true /sim/rendering/rembrandt/cinema/green-shift/y - /sim/rendering/rembrandt/cinema/color-shift + + /sim/rendering/rembrandt/night-vision + /sim/rendering/rembrandt/cinema/color-shift + @@ -625,7 +701,10 @@ green-shift-b - /sim/rendering/rembrandt/cinema/color-shift + + /sim/rendering/rembrandt/night-vision + /sim/rendering/rembrandt/cinema/color-shift + @@ -634,7 +713,10 @@ true /sim/rendering/rembrandt/cinema/green-shift/z - /sim/rendering/rembrandt/cinema/color-shift + + /sim/rendering/rembrandt/night-vision + /sim/rendering/rembrandt/cinema/color-shift + @@ -646,7 +728,10 @@ - /sim/rendering/rembrandt/cinema/color-shift + + /sim/rendering/rembrandt/night-vision + /sim/rendering/rembrandt/cinema/color-shift + @@ -660,7 +745,10 @@ blue-shift-r - /sim/rendering/rembrandt/cinema/color-shift + + /sim/rendering/rembrandt/night-vision + /sim/rendering/rembrandt/cinema/color-shift + @@ -669,7 +757,10 @@ true /sim/rendering/rembrandt/cinema/blue-shift/x - /sim/rendering/rembrandt/cinema/color-shift + + /sim/rendering/rembrandt/night-vision + /sim/rendering/rembrandt/cinema/color-shift + @@ -683,7 +774,10 @@ blue-shift-g - /sim/rendering/rembrandt/cinema/color-shift + + /sim/rendering/rembrandt/night-vision + /sim/rendering/rembrandt/cinema/color-shift + @@ -692,7 +786,10 @@ true /sim/rendering/rembrandt/cinema/blue-shift/y - /sim/rendering/rembrandt/cinema/color-shift + + /sim/rendering/rembrandt/night-vision + /sim/rendering/rembrandt/cinema/color-shift + @@ -706,7 +803,10 @@ blue-shift-b - /sim/rendering/rembrandt/cinema/color-shift + + /sim/rendering/rembrandt/night-vision + /sim/rendering/rembrandt/cinema/color-shift + @@ -715,33 +815,219 @@ true /sim/rendering/rembrandt/cinema/blue-shift/z - /sim/rendering/rembrandt/cinema/color-shift + + /sim/rendering/rembrandt/night-vision + /sim/rendering/rembrandt/cinema/color-shift + - - hbox left left - - night-vision - /sim/rendering/rembrandt/night-vision + + distortion + /sim/rendering/rembrandt/cinema/distortion dialog-apply - night-vision + distortion - + /sim/rendering/rembrandt/night-vision + + + + 48 + + + + + + /sim/rendering/rembrandt/night-vision + /sim/rendering/rembrandt/cinema/distortion + + + + + distortion-factor-x + -0.5 + 0.5 + 0.01 + /sim/rendering/rembrandt/cinema/distortion-factor/x + + dialog-apply + distortion-factor-x + + + + /sim/rendering/rembrandt/night-vision + /sim/rendering/rembrandt/cinema/distortion + + + + + + %.2f + true + /sim/rendering/rembrandt/cinema/distortion-factor/x + + + /sim/rendering/rembrandt/night-vision + /sim/rendering/rembrandt/cinema/distortion + + + + + distortion-factor-y + -0.5 + 0.5 + 0.01 + /sim/rendering/rembrandt/cinema/distortion-factor/y + + dialog-apply + distortion-factor-y + + + + /sim/rendering/rembrandt/night-vision + /sim/rendering/rembrandt/cinema/distortion + + + + + + %.2f + true + /sim/rendering/rembrandt/cinema/distortion-factor/y + + + /sim/rendering/rembrandt/night-vision + /sim/rendering/rembrandt/cinema/distortion + + + + + distortion-factor-z + 0.5 + 1.5 + 0.001 + /sim/rendering/rembrandt/cinema/distortion-factor/z + + dialog-apply + distortion-factor-z + + + + /sim/rendering/rembrandt/night-vision + /sim/rendering/rembrandt/cinema/distortion + + + + + + %.2f + true + /sim/rendering/rembrandt/cinema/distortion-factor/z + + + /sim/rendering/rembrandt/night-vision + /sim/rendering/rembrandt/cinema/distortion + + + + + + + hbox + left + + + left + + color-fringe + /sim/rendering/rembrandt/cinema/color-fringe + + dialog-apply + color-fringe + + + + /sim/rendering/rembrandt/night-vision + /sim/rendering/rembrandt/cinema/distortion + + + + + 42 + + + + + + /sim/rendering/rembrandt/night-vision + /sim/rendering/rembrandt/cinema/distortion + /sim/rendering/rembrandt/cinema/color-fringe + + + + + color-fringe-factor + 0.96 + 1.04 + 0.001 + /sim/rendering/rembrandt/cinema/color-fringe-factor + + dialog-apply + color-fringe-factor + + + + /sim/rendering/rembrandt/night-vision + /sim/rendering/rembrandt/cinema/distortion + /sim/rendering/rembrandt/cinema/color-fringe + + + + + + %.3f + true + /sim/rendering/rembrandt/cinema/color-fringe-factor + + + /sim/rendering/rembrandt/night-vision + /sim/rendering/rembrandt/cinema/distortion + /sim/rendering/rembrandt/cinema/color-fringe + + + + + + + hbox + left + + + left + + film-wear + /sim/rendering/rembrandt/cinema/film-wear + + dialog-apply + film-wear + + + + /sim/rendering/rembrandt/night-vision - /sim/rendering/rembrandt/cinema/color-shift /sim/rendering/rembrandt/cinema/vignette + /sim/rendering/rembrandt/cinema/color-shift - + diff --git a/preferences.xml b/preferences.xml index 02435746e..3ce1c0cd8 100644 --- a/preferences.xml +++ b/preferences.xml @@ -93,6 +93,15 @@ Started September 2000 by David Megginson, david@megginson.com .534 .131 + false + + 0.0 + 0.0 + 1.0 + + false + 1.0 + false 1.0 false