From ecc4dfbfb3adf91d2dfc03ba0ec9a821fcc2390c Mon Sep 17 00:00:00 2001 From: hgn Date: Fri, 8 Jul 2022 19:46:45 +0100 Subject: [PATCH] reworked lighting uniforms --- .gitignore | 1 + blender_export.py | 20 ++- bvh.h | 3 - lighting.h | 104 +++++++++++ main.c | 5 +- render.h | 103 ++++++++++- scene.h | 4 - shaders/colour.fs | 9 + shaders/common_world.glsl | 57 +++++++ shaders/fscolour.h | 48 ++++++ shaders/gpos.fs | 30 ++++ shaders/gpos.h | 158 +++++++++++++++++ shaders/noise.glsl | 26 +++ shaders/planeinf.h | 22 --- shaders/sky.h | 2 +- shaders/sway.glsl | 112 ++++++++++++ shaders/terrain.fs | 35 ++-- shaders/terrain.h | 98 ++++++++--- shaders/vblend.fs | 80 +++++++++ shaders/vblend.h | 169 ++++++++++++++++++ shaders/vertex_standard.glsl | 4 + shaders/vg/blit.fs.glsl | 9 + shaders/vg/blit.vs.glsl | 8 + shaders/vg/character.fs.glsl | 16 ++ shaders/vg/character.vs.glsl | 28 +++ shaders/vg/gate.fs.glsl | 27 +++ shaders/vg/gate.vs.glsl | 22 +++ shaders/vg/standard.fs.glsl | 20 +++ shaders/vg/standard.vs.glsl | 23 +++ shaders/vg/terrain.fs.glsl | 8 + shaders/vg/terrain.vs.glsl | 6 + shaders/vg/unlit.fs.glsl | 15 ++ shaders/vg/water.fs.glsl | 20 +++ shaders/vg/water.vs.glsl | 18 ++ shaders/water.fs | 44 +++-- shaders/water.h | 142 ++++++++++----- shaders/water.vs | 5 - shaders/water_ref.glsl | 0 terrain.h | 17 ++ textures/gradients.png | Bin 186936 -> 39376 bytes vg.conf | 5 +- water.h | 38 ++--- world.h | 323 +++++++++++++++++++++++++++++++---- 43 files changed, 1671 insertions(+), 213 deletions(-) create mode 100644 lighting.h create mode 100644 shaders/colour.fs create mode 100644 shaders/common_world.glsl create mode 100644 shaders/fscolour.h create mode 100644 shaders/gpos.fs create mode 100644 shaders/gpos.h create mode 100644 shaders/noise.glsl create mode 100644 shaders/sway.glsl create mode 100644 shaders/vblend.fs create mode 100644 shaders/vblend.h create mode 100644 shaders/vertex_standard.glsl create mode 100644 shaders/vg/blit.fs.glsl create mode 100644 shaders/vg/blit.vs.glsl create mode 100644 shaders/vg/character.fs.glsl create mode 100644 shaders/vg/character.vs.glsl create mode 100644 shaders/vg/gate.fs.glsl create mode 100644 shaders/vg/gate.vs.glsl create mode 100644 shaders/vg/standard.fs.glsl create mode 100644 shaders/vg/standard.vs.glsl create mode 100644 shaders/vg/terrain.fs.glsl create mode 100644 shaders/vg/terrain.vs.glsl create mode 100644 shaders/vg/unlit.fs.glsl create mode 100644 shaders/vg/water.fs.glsl create mode 100644 shaders/vg/water.vs.glsl create mode 100644 shaders/water_ref.glsl diff --git a/.gitignore b/.gitignore index c400164..31dfd3c 100755 --- a/.gitignore +++ b/.gitignore @@ -27,6 +27,7 @@ restricted/ !*.fs !*.vs !*.gls +!*.glsl # Python source files !*.py diff --git a/blender_export.py b/blender_export.py index a13e84e..16b9764 100644 --- a/blender_export.py +++ b/blender_export.py @@ -212,16 +212,22 @@ def write_model(name): for j in range(3): vert = data.vertices[tri.vertices[j]] + li = tri.loops[j] co = vert.co - norm = data.loops[tri.loops[j]].normal + norm = data.loops[li].normal uv = (0,0) + colour = (1,1,1,1) if data.uv_layers: - uv = data.uv_layers.active.data[tri.loops[j]].uv + uv = data.uv_layers.active.data[li].uv + if data.vertex_colors: + colour = data.vertex_colors.active.data[li].color key = (round(co[0],4),round(co[1],4),round(co[2],4),\ round(norm[0],4),round(norm[1],4),round(norm[2],4),\ - round(uv[0],4),round(uv[1],4)) + round(uv[0],4),round(uv[1],4),\ + round(colour[0],4),round(colour[1],4),\ + round(colour[2],4),round(colour[3],4)) if key in boffa: indice_buffer += [boffa[key]] @@ -244,10 +250,10 @@ def write_model(name): v.norm[2] = -norm[1] v.uv[0] = uv[0] v.uv[1] = uv[1] - v.colour[0] = 1.0 - v.colour[1] = 1.0 - v.colour[2] = 1.0 - v.colour[3] = 1.0 + v.colour[0] = colour[0] + v.colour[1] = colour[1] + v.colour[2] = colour[2] + v.colour[3] = colour[3] vertex_buffer += [v] for i in range(3): diff --git a/bvh.h b/bvh.h index a6a7468..27e23b5 100644 --- a/bvh.h +++ b/bvh.h @@ -251,10 +251,7 @@ static int bh_select( bh_tree *bh, boxf box, u32 *buffer, int len ) if( inode->count ) { if( count + inode->count >= len ) - { - vg_error( "Maximum buffer reached!\n" ); return count; - } for( u32 i=0; icount; i++ ) buffer[ count ++ ] = inode->start+i; diff --git a/lighting.h b/lighting.h new file mode 100644 index 0000000..8f9bdb3 --- /dev/null +++ b/lighting.h @@ -0,0 +1,104 @@ +#ifndef LIGHTING_H +#define LIGHTING_H + +#include "common.h" +#include "scene.h" + +static int ray_world( v3f pos, v3f dir, ray_hit *hit ); + +typedef struct voxel_gi voxel_gi; + +struct voxel_gi +{ + GLuint hw_texture, + pt_texture; + + v3i pt_dims; /* Page table dimentions */ + i32 page_size; + + v3f origin; +}; + +static void voxel_gi_setup( voxel_gi *gi, scene *sc, + i32 page_size, float voxel_res ) +{ + v3_copy( sc->bbx[0], gi->origin ); + gi->page_size = page_size; + + v3f extent; + v3_sub( sc->bbx[1], sc->bbx[0], extent ); + + float fpage_size = voxel_res * (float)page_size; + + for( int i=0; i<3; i++ ) + { + i32 voxel_count = extent[i] / voxel_res; + gi->pt_dims[i] = (voxel_count+page_size-1) / page_size; + } + + i32 pt_capacity = gi->pt_dims[0]*gi->pt_dims[1]*gi->pt_dims[2]; + vg_info( "Page table size: %dkb\n", (pt_capacity*2*2)/1024 ); + + u16 *page_table = malloc( pt_capacity*sizeof(u16)*3 ); + + + u32 active_count = 0; + + for( int z=0; zpt_dims[2]; z++ ) + { + for( int y=0; ypt_dims[1]; y++ ) + { + for( int x=0; xpt_dims[0]; x++ ) + { + v3f base = {x,y,z}, + end = {x+1,y+1,z+1}; + + boxf page_region; + + v3_muladds( sc->bbx[0], base, ((float)page_size)*voxel_res, base ); + v3_muladds( sc->bbx[0], end, ((float)page_size)*voxel_res, end ); + v3_copy( base, page_region[0] ); + v3_copy( end, page_region[1] ); + + u32 nothing[2]; + if( bh_select( &sc->bhtris, page_region, nothing, 2 )) + { + active_count ++; + + /* Calculate lighting */ + } + } + } + } + + /* Calculate physical storage size */ + vg_info( "Hardware texture required size: %dmb\n", + ((active_count*page_size*page_size*page_size*1)/1024)/1024 ); + vg_info( "Required physical blocks: %d\n", active_count ); + + free( page_table ); +} + +static void compute_lighting_vertex( scene *sc ) +{ + v3f light_dir = { 0.2f, 1.0f, 1.0f }; + v3_normalize( light_dir ); + + for( int i=0; ivertex_count; i++ ) + { + model_vert *mv = &sc->verts[i]; + + ray_hit hit; + hit.dist = 100.0f; + + ray_world( mv->co, light_dir, &hit ); + float amt = hit.dist / 100.0f; + + mv->colour[0] = amt; + mv->colour[1] = amt; + mv->colour[2] = amt; + mv->colour[3] = 1.0f; + } +} + +#endif /* LIGHTING_H */ diff --git a/main.c b/main.c index b80a1a2..ba6f384 100644 --- a/main.c +++ b/main.c @@ -40,9 +40,10 @@ void vg_register(void) { shader_blit_register(); shader_standard_register(); + shader_vblend_register(); shader_unlit_register(); - terrain_register(); + world_register(); character_register(); water_register(); gate_register(); @@ -52,7 +53,7 @@ static void init_other(void) { render_init(); gate_init(); - terrain_init(); + world_init(); character_init(); audio_init(); } diff --git a/render.h b/render.h index d8bdc95..8285317 100644 --- a/render.h +++ b/render.h @@ -11,20 +11,35 @@ static struct pipeline GLuint fb_background, rgb_background; + + /* STD140 */ + struct ub_world_lighting + { + /* v3f (padded) */ + v4f g_directional, + g_sun_colour, + g_shadow_colour; + + v4f g_water_plane, + g_depth_bounds; + float g_water_fog; + } + ub_world_lighting; + + GLuint fb_depthmap, rgb_depthmap; + GLuint ubo_world_lighting, + ubo_world; } gpipeline; -struct framebuffer -{ - GLuint fb, colour, rb; - int div; - GLuint format; -}; - static void render_water_texture( m4x3f camera ); static void render_water_surface( m4x4f pv, m4x3f camera ); static void render_world( m4x4f projection, m4x3f camera ); +static void render_world_depth( m4x4f projection, m4x3f camera ); +/* + * Matrix Projections + */ /* * http://www.terathon.com/lengyel/Lengyel-Oblique.pdf */ @@ -54,6 +69,48 @@ static void pipeline_projection( m4x4f mat, float nearz, float farz ) nearz, farz ); } +/* + * Shaders + */ +static void shader_link_standard_ub( GLuint shader, int texture_id ) +{ + GLuint idx = glGetUniformBlockIndex( shader, "ub_world_lighting" ); + glUniformBlockBinding( shader, idx, 0 ); + + glActiveTexture( GL_TEXTURE0 + texture_id ); + glBindTexture( GL_TEXTURE_2D, gpipeline.rgb_depthmap ); + glUniform1i( glGetUniformLocation( shader, "g_world_depth" ), texture_id ); +} + +static void render_update_lighting_ub(void) +{ + glBindBuffer( GL_UNIFORM_BUFFER, gpipeline.ubo_world_lighting ); + + glBufferSubData( GL_UNIFORM_BUFFER, 0, sizeof(struct ub_world_lighting), + &gpipeline.ub_world_lighting ); +} + +static void render_alloc_ub(void) +{ + glGenBuffers( 1, &gpipeline.ubo_world_lighting ); + glBindBuffer( GL_UNIFORM_BUFFER, gpipeline.ubo_world_lighting ); + glBufferData( GL_UNIFORM_BUFFER, sizeof(struct ub_world_lighting), + NULL, GL_DYNAMIC_DRAW ); + + render_update_lighting_ub(); + glBindBufferBase( GL_UNIFORM_BUFFER, 0, gpipeline.ubo_world_lighting ); +} + +/* + * Framebuffers + */ +struct framebuffer +{ + GLuint fb, colour, rb; + int div; + GLuint format; +}; + static void fb_use( struct framebuffer *fb ) { if( !fb ) @@ -120,6 +177,9 @@ static void render_fb_resize(void) GL_RGB, GL_UNSIGNED_BYTE, NULL ); } +/* + * Vg + */ static void render_init(void) { glGenFramebuffers( 1, &gpipeline.fb_background ); @@ -136,6 +196,25 @@ static void render_init(void) GL_TEXTURE_2D, gpipeline.rgb_background, 0); + /* + * World depth map, maybe this should be moved to world.h + * TODO: review + */ + glGenFramebuffers( 1, &gpipeline.fb_depthmap ); + glBindFramebuffer( GL_FRAMEBUFFER, gpipeline.fb_depthmap ); + + glGenTextures( 1, &gpipeline.rgb_depthmap ); + glBindTexture( GL_TEXTURE_2D, gpipeline.rgb_depthmap ); + glTexImage2D( GL_TEXTURE_2D, 0, GL_R32F, 1024, 1024, 0, + GL_RED, GL_FLOAT, NULL ); + glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR ); + glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR ); + vg_tex2d_clamp(); + + glFramebufferTexture2D( GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, + GL_TEXTURE_2D, + gpipeline.rgb_depthmap, 0); + float quad[] = { 0.0f, 0.0f, 1.0f, 1.0f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f, 1.0f }; @@ -149,8 +228,18 @@ static void render_init(void) sizeof(float)*2, (void*)0 ); glEnableVertexAttribArray( 0 ); VG_CHECK_GL(); + + render_alloc_ub(); } +static void render_free(void) +{ + /* TODO: ... */ +} + +/* + * Utility + */ static void render_fsquad(void) { glBindVertexArray( gpipeline.fsquad.vao ); diff --git a/scene.h b/scene.h index 6f7c28c..76baf54 100644 --- a/scene.h +++ b/scene.h @@ -178,10 +178,6 @@ static void scene_add_foliage( scene *pscene, model *mdl, submodel *submodel, v4_copy( src->colour, pvert->colour ); v2_copy( src->uv, pvert->uv ); - - float rel_y = src->co[1] / submodel->bbx[1][1]; - pvert->colour[0] = rel_y; - pvert->colour[2] = rand_hue; } for( u32 i=0; iindice_count; i++ ) diff --git a/shaders/colour.fs b/shaders/colour.fs new file mode 100644 index 0000000..7eb290e --- /dev/null +++ b/shaders/colour.fs @@ -0,0 +1,9 @@ +out vec4 FragColor; +uniform vec4 uColour; + +in vec2 aUv; + +void main() +{ + FragColor = uColour; +} diff --git a/shaders/common_world.glsl b/shaders/common_world.glsl new file mode 100644 index 0000000..329226a --- /dev/null +++ b/shaders/common_world.glsl @@ -0,0 +1,57 @@ +layout (std140) uniform ub_world_lighting +{ + vec3 g_directional; + vec3 g_sun_colour; + vec3 g_shadow_colour; + vec4 g_water_plane; + vec4 g_depth_bounds; + float g_water_fog; +}; + +uniform sampler2D g_world_depth; + +// Standard diffuse + spec models +// ============================== + +vec3 do_light_diffuse( vec3 vfrag, vec3 wnormal ) +{ + float flight = dot( g_directional, wnormal )*0.5+0.5; + return vfrag * mix( g_shadow_colour, g_sun_colour, flight ); +} + +vec3 do_light_spec( vec3 vfrag, vec3 wnormal, vec3 halfview, float fintensity ) +{ + vec3 specdir = reflect( -g_directional, wnormal ); + float spec = pow(max(dot( halfview, specdir ), 0.0), 10.0); + return vfrag + g_sun_colour*spec*fintensity; +} + +float world_depth_sample( vec3 pos ) +{ + vec2 depth_coord = (pos.xz - g_depth_bounds.xy) * g_depth_bounds.zw; + return texture( g_world_depth, depth_coord ).r; +} + +float shadow_sample( vec3 vdir ) +{ + vec3 sample_pos = aCo + vdir; + float height_sample = world_depth_sample( sample_pos ); + + float fdelta = height_sample - sample_pos.y; + return clamp( fdelta, 0.1, 0.2 )-0.1; +} + +vec3 do_light_shadowing( vec3 vfrag ) +{ + float faccum = 0.0; + faccum += shadow_sample( vec3( 0.0, 0.5, 0.0 )); + faccum += shadow_sample( vec3( 2.0, 0.3, 0.0 )); + faccum += shadow_sample( vec3( 3.0, 1.0, 0.0 )); + faccum += shadow_sample( vec3( 5.0, 1.0, 0.0 )); + faccum += shadow_sample( vec3( 0.0, 0.5, 0.0 )*1.5); + faccum += shadow_sample( vec3( 2.0, 0.3, 0.0 )*1.5); + faccum += shadow_sample( vec3( 3.0, 1.0, 0.0 )*1.5); + faccum += shadow_sample( vec3( 5.0, 1.0, 0.0 )*1.5); + return mix( vfrag, g_shadow_colour, faccum ); +} + diff --git a/shaders/fscolour.h b/shaders/fscolour.h new file mode 100644 index 0000000..ccef7b0 --- /dev/null +++ b/shaders/fscolour.h @@ -0,0 +1,48 @@ +#ifndef SHADER_fscolour_H +#define SHADER_fscolour_H +static void shader_fscolour_link(void); +static void shader_fscolour_register(void); +static struct vg_shader _shader_fscolour = { + .name = "fscolour", + .link = shader_fscolour_link, + .vs = +{ +.orig_file = "../shaders/blit.vs", +.static_src = +"layout (location=0) in vec2 a_co;\n" +"out vec2 aUv;\n" +"\n" +"void main()\n" +"{\n" +" gl_Position = vec4(a_co*2.0-1.0,0.0,1.0);\n" +" aUv = a_co;\n" +"}\n" +""}, + .fs = +{ +.orig_file = "../shaders/colour.fs", +.static_src = +"out vec4 FragColor;\n" +"uniform vec4 uColour;\n" +"\n" +"in vec2 aUv;\n" +"\n" +"void main()\n" +"{\n" +" FragColor = uColour;\n" +"}\n" +""}, +}; + +static GLuint _uniform_fscolour_uColour; +static void shader_fscolour_uColour(v4f v){ + glUniform4fv( _uniform_fscolour_uColour, 1, v ); +} +static void shader_fscolour_register(void){ + vg_shader_register( &_shader_fscolour ); +} +static void shader_fscolour_use(void){ glUseProgram(_shader_fscolour.id); } +static void shader_fscolour_link(void){ + _uniform_fscolour_uColour = glGetUniformLocation( _shader_fscolour.id, "uColour" ); +} +#endif /* SHADER_fscolour_H */ diff --git a/shaders/gpos.fs b/shaders/gpos.fs new file mode 100644 index 0000000..b21f7a7 --- /dev/null +++ b/shaders/gpos.fs @@ -0,0 +1,30 @@ +out vec4 FragColor; + +uniform vec3 uCamera; + +in vec4 aColour; +in vec2 aUv; +in vec3 aNorm; +in vec3 aCo; + +#include "common_world.glsl" + +// Water blending +// ============== + +float water_depth( vec3 pos, vec3 halfview ) +{ + vec3 pnorm = g_water_plane.xyz; + float pdist = g_water_plane.w; + + float d = dot( pnorm, halfview ); + float t = dot((pnorm*pdist - pos), pnorm) / d; + return t * g_water_fog; +} + +void main() +{ + vec3 halfview = normalize( uCamera - aCo ); + vec3 world_pos = vec3( aCo.y, aCo.x, aCo.z ); + FragColor = vec4( world_pos, water_depth( aCo, halfview ) ); +} diff --git a/shaders/gpos.h b/shaders/gpos.h new file mode 100644 index 0000000..6b8d9cb --- /dev/null +++ b/shaders/gpos.h @@ -0,0 +1,158 @@ +#ifndef SHADER_gpos_H +#define SHADER_gpos_H +static void shader_gpos_link(void); +static void shader_gpos_register(void); +static struct vg_shader _shader_gpos = { + .name = "gpos", + .link = shader_gpos_link, + .vs = +{ +.orig_file = "../shaders/standard.vs", +.static_src = +"layout (location=0) in vec3 a_co;\n" +"layout (location=1) in vec3 a_norm;\n" +"layout (location=2) in vec4 a_colour;\n" +"layout (location=3) in vec2 a_uv;\n" +"\n" +"#line 2 0 \n" +"\n" +"uniform mat4 uPv;\n" +"uniform mat4x3 uMdl;\n" +"\n" +"out vec4 aColour;\n" +"out vec2 aUv;\n" +"out vec3 aNorm;\n" +"out vec3 aCo;\n" +"\n" +"void main()\n" +"{\n" +" gl_Position = uPv * vec4( uMdl * vec4(a_co,1.0), 1.0 );\n" +" aColour = a_colour;\n" +" aUv = a_uv;\n" +" aNorm = mat3(uMdl) * a_norm;\n" +" aCo = a_co;\n" +"}\n" +""}, + .fs = +{ +.orig_file = "../shaders/gpos.fs", +.static_src = +"out vec4 FragColor;\n" +"\n" +"uniform vec3 uCamera;\n" +"\n" +"in vec4 aColour;\n" +"in vec2 aUv;\n" +"in vec3 aNorm;\n" +"in vec3 aCo;\n" +"\n" +"#line 1 1 \n" +"layout (std140) uniform ub_world_lighting\n" +"{\n" +" vec3 g_directional;\n" +" vec3 g_sun_colour;\n" +" vec3 g_shadow_colour;\n" +" vec4 g_water_plane;\n" +" vec4 g_depth_bounds;\n" +" float g_water_fog;\n" +"};\n" +"\n" +"uniform sampler2D g_world_depth;\n" +"\n" +"// Standard diffuse + spec models\n" +"// ==============================\n" +"\n" +"vec3 do_light_diffuse( vec3 vfrag, vec3 wnormal )\n" +"{\n" +" float flight = dot( g_directional, wnormal )*0.5+0.5;\n" +" return vfrag * mix( g_shadow_colour, g_sun_colour, flight );\n" +"}\n" +"\n" +"vec3 do_light_spec( vec3 vfrag, vec3 wnormal, vec3 halfview, float fintensity )\n" +"{\n" +" vec3 specdir = reflect( -g_directional, wnormal );\n" +" float spec = pow(max(dot( halfview, specdir ), 0.0), 10.0);\n" +" return vfrag + g_sun_colour*spec*fintensity;\n" +"}\n" +"\n" +"float world_depth_sample( vec3 pos )\n" +"{\n" +" vec2 depth_coord = (pos.xz - g_depth_bounds.xy) * g_depth_bounds.zw; \n" +" return texture( g_world_depth, depth_coord ).r;\n" +"}\n" +"\n" +"float shadow_sample( vec3 vdir )\n" +"{\n" +" vec3 sample_pos = aCo + vdir;\n" +" float height_sample = world_depth_sample( sample_pos );\n" +"\n" +" float fdelta = height_sample - sample_pos.y;\n" +" return clamp( fdelta, 0.1, 0.2 )-0.1;\n" +"}\n" +"\n" +"vec3 do_light_shadowing( vec3 vfrag )\n" +"{\n" +" float faccum = 0.0;\n" +" faccum += shadow_sample( vec3( 0.0, 0.5, 0.0 ));\n" +" faccum += shadow_sample( vec3( 2.0, 0.3, 0.0 ));\n" +" faccum += shadow_sample( vec3( 3.0, 1.0, 0.0 ));\n" +" faccum += shadow_sample( vec3( 5.0, 1.0, 0.0 ));\n" +" faccum += shadow_sample( vec3( 0.0, 0.5, 0.0 )*1.5);\n" +" faccum += shadow_sample( vec3( 2.0, 0.3, 0.0 )*1.5);\n" +" faccum += shadow_sample( vec3( 3.0, 1.0, 0.0 )*1.5);\n" +" faccum += shadow_sample( vec3( 5.0, 1.0, 0.0 )*1.5);\n" +" return mix( vfrag, g_shadow_colour, faccum );\n" +"}\n" +"\n" +"\n" +"#line 11 0 \n" +"\n" +"// Water blending\n" +"// ==============\n" +"\n" +"float water_depth( vec3 pos, vec3 halfview )\n" +"{\n" +" vec3 pnorm = g_water_plane.xyz;\n" +" float pdist = g_water_plane.w;\n" +"\n" +" float d = dot( pnorm, halfview );\n" +" float t = dot((pnorm*pdist - pos), pnorm) / d;\n" +" return t * g_water_fog;\n" +"}\n" +"\n" +"void main()\n" +"{\n" +" vec3 halfview = normalize( uCamera - aCo );\n" +" vec3 world_pos = vec3( aCo.y, aCo.x, aCo.z );\n" +" FragColor = vec4( world_pos, water_depth( aCo, halfview ) );\n" +"}\n" +""}, +}; + +static GLuint _uniform_gpos_uPv; +static GLuint _uniform_gpos_uMdl; +static GLuint _uniform_gpos_uCamera; +static GLuint _uniform_gpos_g_world_depth; +static void shader_gpos_uPv(m4x4f m){ + glUniformMatrix4fv( _uniform_gpos_uPv, 1, GL_FALSE, (float *)m ); +} +static void shader_gpos_uMdl(m4x3f m){ + glUniformMatrix4x3fv( _uniform_gpos_uMdl, 1, GL_FALSE, (float *)m ); +} +static void shader_gpos_uCamera(v3f v){ + glUniform3fv( _uniform_gpos_uCamera, 1, v ); +} +static void shader_gpos_g_world_depth(int i){ + glUniform1i( _uniform_gpos_g_world_depth, i ); +} +static void shader_gpos_register(void){ + vg_shader_register( &_shader_gpos ); +} +static void shader_gpos_use(void){ glUseProgram(_shader_gpos.id); } +static void shader_gpos_link(void){ + _uniform_gpos_uPv = glGetUniformLocation( _shader_gpos.id, "uPv" ); + _uniform_gpos_uMdl = glGetUniformLocation( _shader_gpos.id, "uMdl" ); + _uniform_gpos_uCamera = glGetUniformLocation( _shader_gpos.id, "uCamera" ); + _uniform_gpos_g_world_depth = glGetUniformLocation( _shader_gpos.id, "g_world_depth" ); +} +#endif /* SHADER_gpos_H */ diff --git a/shaders/noise.glsl b/shaders/noise.glsl new file mode 100644 index 0000000..6736e35 --- /dev/null +++ b/shaders/noise.glsl @@ -0,0 +1,26 @@ +uniform sampler2D uTexNoise; + +float noise( vec3 x ) +{ + vec3 i = floor(x); + vec3 f = fract(x); + f = f*f*(3.0-2.0*f); + vec2 uv = (i.xy+vec2(37.0,17.0)*i.z) + f.xy; + vec2 rg = texture( uTexNoise, (uv+0.5)/256.0).yx; + return mix( rg.x, rg.y, f.z ); +} + +const mat3 m = mat3( 0.00, 0.80, 0.60, + -0.80, 0.36, -0.48, + -0.60, -0.48, 0.64 ); + +float fractalNoise( vec3 x ) +{ + vec3 q = 8.0*x; + float f; + f = 0.5000*noise( q ); q = m*q*2.01; + f += 0.2500*noise( q ); q = m*q*2.02; + f += 0.1250*noise( q ); q = m*q*2.03; + f += 0.0625*noise( q ); q = m*q*2.01; + return f; +} diff --git a/shaders/planeinf.h b/shaders/planeinf.h index 0cc17cd..d2a227a 100644 --- a/shaders/planeinf.h +++ b/shaders/planeinf.h @@ -37,28 +37,6 @@ static struct vg_shader _shader_planeinf = { { .orig_file = "../shaders/planeinf.fs", .static_src = -"vec4 water_surf( vec3 halfview, vec3 vnorm, float depthvalue, \n" -" vec4 beneath, vec4 above )\n" -"{\n" -" vec3 colour_shore = vec3( 0.21, 0.6, 0.8 );\n" -" vec3 colour_ocean = vec3( 0.01, 0.1, 0.2 );\n" -" vec3 surface_tint = mix(colour_shore, colour_ocean, depthvalue);\n" -"\n" -" float ffresnel = pow(1.0-dot( vnorm, halfview ),5.0);\n" -"\n" -" vec3 lightdir = vec3(0.95,0.0,-0.3);\n" -" vec3 specdir = reflect( -lightdir, vnorm );\n" -" float spec = pow(max(dot(halfview,specdir),0.0),20.0)*0.3;\n" -" \n" -" // Depth \n" -" float depthblend = pow( beneath.a,0.8 );\n" -"\n" -" // Composite\n" -" vec3 vsurface = mix(surface_tint, above.rgb, ffresnel );\n" -" //vsurface += spec;\n" -"\n" -" return vec4( vsurface,depthblend );\n" -"}\n" "\n" "#line 2 0 \n" "\n" diff --git a/shaders/sky.h b/shaders/sky.h index 01bc5c2..8e8c2c7 100644 --- a/shaders/sky.h +++ b/shaders/sky.h @@ -67,7 +67,7 @@ static struct vg_shader _shader_sky = { " vec3 colour_ocean = vec3( 0.61, 0.84, 0.9 );\n" " float fhorizon = step( aNorm.y * 0.5 + 0.5, 0.5 );\n" "\n" -" vec3 skycomp = mix(diffuse, vec3(1.0,1.0,1.0), cloud_e*(1.0-fblend*3.0));\n" +" vec3 skycomp = mix(diffuse, vec3(1.0,1.0,1.0), cloud_e);\n" " FragColor = vec4(skycomp,1.0);\n" "}\n" ""}, diff --git a/shaders/sway.glsl b/shaders/sway.glsl new file mode 100644 index 0000000..6cd92d0 --- /dev/null +++ b/shaders/sway.glsl @@ -0,0 +1,112 @@ + + "uniform mat4 uPv;" + "uniform mat4x3 uMdl;" + "uniform float uTime;" + "uniform float uSwayAmt;" + "" + "out vec4 aColour;" + "out vec2 aUv;" + "out vec3 aNorm;" + "out vec3 aCo;" + "" + "vec3 compute_sway( vec3 pos )" + "{" + "vec4 sines = vec4( sin(uTime + pos.x)*1.0," + "sin(uTime*1.2 + pos.z*2.0)*1.1," + "sin(uTime*2.33)*0.5," + "sin(uTime*0.6 + pos.x*0.3)*1.3 );" + + "vec3 offset = vec3( sines.x+sines.y*sines.w, 0.0, sines.x+sines.z );" + "return pos + offset*a_colour.r*uSwayAmt;" + "}" + "" + "void main()" + "{" + "vec3 swaypos = compute_sway( a_co );" + "gl_Position = uPv * vec4(uMdl * vec4(swaypos,1.0), 1.0 );" + "aColour = a_colour;" + "aUv = a_uv;" + "aNorm = normalize(mat3(uMdl) * a_norm);" + "aCo = a_co;" + "}", + /* Fragment */ + "out vec4 FragColor;" + "" + "uniform int uMode;" + "uniform sampler2D uTexMain;" + "uniform sampler2D uTexGradients;" + "" + /*Include*/ SHADER_VALUE_NOISE_3D + "" + "in vec4 aColour;" + "in vec2 aUv;" + "in vec3 aNorm;" + "in vec3 aCo;" + "" + "void main()" + "{" + "vec4 colour = vec4(1.0,0.0,0.5,1.0);" + "vec4 diffuse = texture( uTexMain, aUv );" + + "if( uMode == 1 )" + "{" + "colour = vec4(aNorm * 0.5 + 0.5, 1.0);" + "}" + "if( uMode == 2 )" + "{" + "colour = aColour;" + "}" + "if( uMode == 3 )" + "{" + "float light = dot(aNorm, vec3(0.2,0.8,0.1));" + "vec3 grid3 = fract(aCo);" + + "colour = vec4(vec3(light)*(1.0-grid3*0.3),1.0);" + "}" + "if( uMode == 4 )" + "{" + "colour = vec4( aUv, 0.0, 1.0 );" + "}" + "if( uMode == 5 )" + "{" + "if( diffuse.a < 0.45 ) discard;" + "colour = diffuse;" + "}" + "if( uMode == 6 )" + "{" + "float r1 = fractalNoise(aCo);" + "colour = vec4( vec3(r1), 1.0 );" + "}" + "if( uMode == 7 )" + "{" + "if( diffuse.a < 0.2 ) discard;" + "float lighting = 1.0 - aColour.g*0.8;" + + "float light1 = max(0.0,dot(-vec3(0.5,-0.8,0.25), aNorm));" + "float light2 = max(0.0,dot(-vec3(-0.8,0.5,-0.25), aNorm));" + "vec3 lt = vec3(0.2,0.2,0.2 ) + " + "vec3(1.0,1.0,0.9)*light1 + " + "vec3(0.1,0.3,0.4 )*light2;" + + + "colour = vec4(vec3(pow(lighting,1.6)*(diffuse.r*0.7+0.5)),1.0);" + "colour = vec4(colour.rgb*lt,1.0);" + + "vec2 gradUV = vec2(lighting*1.9,aColour.b*0.8);" + "vec4 gradient_sample = texture( uTexGradients, gradUV );" + "colour = colour*gradient_sample;" + "}" + "if( uMode == 8 )" + "{" + "if( diffuse.a < 0.45 ) discard;" + "float light = 1.0 - aColour.g;" + "light = pow(light,1.6)*(diffuse.r*0.7+0.5);" + "float r1 = fractalNoise(aCo*0.01);" + + "vec2 gradUV = vec2(light*1.9,r1+aColour.b);" + "vec4 gradient_sample = texture( uTexGradients, gradUV );" + "colour = gradient_sample*light;" + "}" + + "FragColor = colour;" + "}" diff --git a/shaders/terrain.fs b/shaders/terrain.fs index a6d2400..84482af 100644 --- a/shaders/terrain.fs +++ b/shaders/terrain.fs @@ -3,27 +3,24 @@ out vec4 FragColor; uniform sampler2D uTexGarbage; uniform sampler2D uTexGradients; uniform vec3 uCamera; -uniform vec4 uPlane; in vec4 aColour; in vec2 aUv; in vec3 aNorm; in vec3 aCo; -float water_depth( vec3 pos, vec3 dir, vec4 plane ) -{ - float d = dot( plane.xyz, dir ); - float t = dot((plane.xyz*plane.w - pos),plane.xyz) / d; - return t*0.04; -} +#include "common_world.glsl" void main() { + vec3 vfrag = vec3(0.5,0.5,0.5); + + // ws modulation vec4 wgarbage = texture( uTexGarbage, aCo.xz * 0.015 ); // Creating normal patches vec3 modnorm = (wgarbage.rgb-0.4) * 1.4; - vec3 qnorm = normalize(floor(aNorm*4.0+modnorm) * 0.25); + vec3 qnorm = normalize(floor(aNorm*4.0+modnorm)*0.25) + vec3(0.001,0.0,0.0); vec2 dir = normalize(qnorm.xz); vec2 uvdiffuse = aCo.xz * 0.02; uvdiffuse = mat2(dir.y, dir.x, -dir.x, dir.y) * uvdiffuse; @@ -33,22 +30,16 @@ void main() // Colour blending float amtgrass = step(qnorm.y,0.6); - float amtsand = min(max((aCo.y - 10.0) * -0.08,0.0)*qnorm.y,1.0); - vec2 uvgradients = vec2( rgarbage.a, -amtgrass*0.125 ) + aUv; - vec3 diffuse = texture( uTexGradients, uvgradients ).rgb; - diffuse = mix( diffuse, vec3(1.0,0.9,0.7), amtsand ); + float amtsand = min(max((aCo.y - 10.0) * -0.1,0.0)*qnorm.y,1.0); + vec2 uvgradients = aUv + vec2( amtgrass*0.5 + rgarbage.a*0.4, 0.0 ); + vfrag = texture( uTexGradients, uvgradients ).rgb; + vfrag = mix( vfrag, vec3(1.0,0.9,0.8), amtsand ); // Lighting - vec3 lightdir = vec3(0.95,0.0,-0.3); - vec3 shadow = vec3(0.27,0.25,0.34); - float light1 = dot( lightdir, mix(qnorm,aNorm,amtsand) )*0.5+0.5; - diffuse = diffuse * (light1*vec3(1.0,0.96,0.9)*1.2 + shadow*(1.0-light1)); - - // Specular lighting vec3 halfview = normalize( uCamera - aCo ); - vec3 specdir = reflect( -lightdir, qnorm ); - float spec = pow(max(dot(halfview,specdir),0.0),10.0) * 0.2*rgarbage.r; - diffuse += spec * vec3(1.0,0.8,0.8); + vfrag = do_light_diffuse( vfrag, qnorm ); + vfrag = do_light_spec( vfrag, qnorm, halfview, 0.2 * rgarbage.a ); + vfrag = do_light_shadowing( vfrag ); - FragColor = vec4(diffuse, water_depth(aCo,halfview,uPlane)); + FragColor = vec4( vfrag, 1.0 ); } diff --git a/shaders/terrain.h b/shaders/terrain.h index 9bbb939..ce834d4 100644 --- a/shaders/terrain.h +++ b/shaders/terrain.h @@ -42,27 +42,83 @@ static struct vg_shader _shader_terrain = { "uniform sampler2D uTexGarbage;\n" "uniform sampler2D uTexGradients;\n" "uniform vec3 uCamera;\n" -"uniform vec4 uPlane;\n" "\n" "in vec4 aColour;\n" "in vec2 aUv;\n" "in vec3 aNorm;\n" "in vec3 aCo;\n" "\n" -"float water_depth( vec3 pos, vec3 dir, vec4 plane )\n" +"#line 1 1 \n" +"layout (std140) uniform ub_world_lighting\n" "{\n" -" float d = dot( plane.xyz, dir );\n" -" float t = dot((plane.xyz*plane.w - pos),plane.xyz) / d;\n" -" return t*0.04;\n" +" vec3 g_directional;\n" +" vec3 g_sun_colour;\n" +" vec3 g_shadow_colour;\n" +" vec4 g_water_plane;\n" +" vec4 g_depth_bounds;\n" +" float g_water_fog;\n" +"};\n" +"\n" +"uniform sampler2D g_world_depth;\n" +"\n" +"// Standard diffuse + spec models\n" +"// ==============================\n" +"\n" +"vec3 do_light_diffuse( vec3 vfrag, vec3 wnormal )\n" +"{\n" +" float flight = dot( g_directional, wnormal )*0.5+0.5;\n" +" return vfrag * mix( g_shadow_colour, g_sun_colour, flight );\n" "}\n" "\n" +"vec3 do_light_spec( vec3 vfrag, vec3 wnormal, vec3 halfview, float fintensity )\n" +"{\n" +" vec3 specdir = reflect( -g_directional, wnormal );\n" +" float spec = pow(max(dot( halfview, specdir ), 0.0), 10.0);\n" +" return vfrag + g_sun_colour*spec*fintensity;\n" +"}\n" +"\n" +"float world_depth_sample( vec3 pos )\n" +"{\n" +" vec2 depth_coord = (pos.xz - g_depth_bounds.xy) * g_depth_bounds.zw; \n" +" return texture( g_world_depth, depth_coord ).r;\n" +"}\n" +"\n" +"float shadow_sample( vec3 vdir )\n" +"{\n" +" vec3 sample_pos = aCo + vdir;\n" +" float height_sample = world_depth_sample( sample_pos );\n" +"\n" +" float fdelta = height_sample - sample_pos.y;\n" +" return clamp( fdelta, 0.1, 0.2 )-0.1;\n" +"}\n" +"\n" +"vec3 do_light_shadowing( vec3 vfrag )\n" +"{\n" +" float faccum = 0.0;\n" +" faccum += shadow_sample( vec3( 0.0, 0.5, 0.0 ));\n" +" faccum += shadow_sample( vec3( 2.0, 0.3, 0.0 ));\n" +" faccum += shadow_sample( vec3( 3.0, 1.0, 0.0 ));\n" +" faccum += shadow_sample( vec3( 5.0, 1.0, 0.0 ));\n" +" faccum += shadow_sample( vec3( 0.0, 0.5, 0.0 )*1.5);\n" +" faccum += shadow_sample( vec3( 2.0, 0.3, 0.0 )*1.5);\n" +" faccum += shadow_sample( vec3( 3.0, 1.0, 0.0 )*1.5);\n" +" faccum += shadow_sample( vec3( 5.0, 1.0, 0.0 )*1.5);\n" +" return mix( vfrag, g_shadow_colour, faccum );\n" +"}\n" +"\n" +"\n" +"#line 13 0 \n" +"\n" "void main()\n" "{\n" +" vec3 vfrag = vec3(0.5,0.5,0.5);\n" +"\n" +" // ws modulation\n" " vec4 wgarbage = texture( uTexGarbage, aCo.xz * 0.015 );\n" " \n" " // Creating normal patches\n" " vec3 modnorm = (wgarbage.rgb-0.4) * 1.4;\n" -" vec3 qnorm = normalize(floor(aNorm*4.0+modnorm) * 0.25);\n" +" vec3 qnorm = normalize(floor(aNorm*4.0+modnorm)*0.25) + vec3(0.001,0.0,0.0);\n" " vec2 dir = normalize(qnorm.xz);\n" " vec2 uvdiffuse = aCo.xz * 0.02;\n" " uvdiffuse = mat2(dir.y, dir.x, -dir.x, dir.y) * uvdiffuse;\n" @@ -72,24 +128,18 @@ static struct vg_shader _shader_terrain = { "\n" " // Colour blending\n" " float amtgrass = step(qnorm.y,0.6);\n" -" float amtsand = min(max((aCo.y - 10.0) * -0.08,0.0)*qnorm.y,1.0);\n" -" vec2 uvgradients = vec2( rgarbage.a, -amtgrass*0.125 ) + aUv;\n" -" vec3 diffuse = texture( uTexGradients, uvgradients ).rgb;\n" -" diffuse = mix( diffuse, vec3(1.0,0.9,0.7), amtsand );\n" +" float amtsand = min(max((aCo.y - 10.0) * -0.1,0.0)*qnorm.y,1.0);\n" +" vec2 uvgradients = aUv + vec2( amtgrass*0.5 + rgarbage.a*0.4, 0.0 );\n" +" vfrag = texture( uTexGradients, uvgradients ).rgb;\n" +" vfrag = mix( vfrag, vec3(1.0,0.9,0.8), amtsand );\n" "\n" " // Lighting\n" -" vec3 lightdir = vec3(0.95,0.0,-0.3);\n" -" vec3 shadow = vec3(0.3,0.25,0.34);\n" -" float light1 = dot( lightdir, mix(qnorm,aNorm,amtsand) )*0.5+0.5;\n" -" diffuse = diffuse * (light1*vec3(1.0,0.96,0.9)*1.2 + shadow*(1.0-light1));\n" -" \n" -" // Specular lighting\n" " vec3 halfview = normalize( uCamera - aCo );\n" -" vec3 specdir = reflect( -lightdir, qnorm );\n" -" float spec = pow(max(dot(halfview,specdir),0.0),10.0) * 0.2*rgarbage.r;\n" -" diffuse += spec * vec3(1.0,0.8,0.8);\n" +" vfrag = do_light_diffuse( vfrag, qnorm );\n" +" vfrag = do_light_spec( vfrag, qnorm, halfview, 0.2 * rgarbage.a );\n" +" vfrag = do_light_shadowing( vfrag );\n" "\n" -" FragColor = vec4(diffuse, water_depth(aCo,halfview,uPlane));\n" +" FragColor = vec4( vfrag, 1.0 );\n" "}\n" ""}, }; @@ -99,7 +149,7 @@ static GLuint _uniform_terrain_uMdl; static GLuint _uniform_terrain_uTexGarbage; static GLuint _uniform_terrain_uTexGradients; static GLuint _uniform_terrain_uCamera; -static GLuint _uniform_terrain_uPlane; +static GLuint _uniform_terrain_g_world_depth; static void shader_terrain_uPv(m4x4f m){ glUniformMatrix4fv( _uniform_terrain_uPv, 1, GL_FALSE, (float *)m ); } @@ -115,8 +165,8 @@ static void shader_terrain_uTexGradients(int i){ static void shader_terrain_uCamera(v3f v){ glUniform3fv( _uniform_terrain_uCamera, 1, v ); } -static void shader_terrain_uPlane(v4f v){ - glUniform4fv( _uniform_terrain_uPlane, 1, v ); +static void shader_terrain_g_world_depth(int i){ + glUniform1i( _uniform_terrain_g_world_depth, i ); } static void shader_terrain_register(void){ vg_shader_register( &_shader_terrain ); @@ -128,6 +178,6 @@ static void shader_terrain_link(void){ _uniform_terrain_uTexGarbage = glGetUniformLocation( _shader_terrain.id, "uTexGarbage" ); _uniform_terrain_uTexGradients = glGetUniformLocation( _shader_terrain.id, "uTexGradients" ); _uniform_terrain_uCamera = glGetUniformLocation( _shader_terrain.id, "uCamera" ); - _uniform_terrain_uPlane = glGetUniformLocation( _shader_terrain.id, "uPlane" ); + _uniform_terrain_g_world_depth = glGetUniformLocation( _shader_terrain.id, "g_world_depth" ); } #endif /* SHADER_terrain_H */ diff --git a/shaders/vblend.fs b/shaders/vblend.fs new file mode 100644 index 0000000..690f5c7 --- /dev/null +++ b/shaders/vblend.fs @@ -0,0 +1,80 @@ +out vec4 FragColor; + +uniform sampler2D uTexGarbage; +uniform sampler2D uTexGradients; +uniform sampler2D uTexDepth; +uniform vec4 uDepthBounds; +uniform vec3 uCamera; +uniform vec4 uPlane; + +in vec4 aColour; +in vec2 aUv; +in vec3 aNorm; +in vec3 aCo; + +float water_depth( vec3 pos, vec3 dir, vec4 plane ) +{ + float d = dot( plane.xyz, dir ); + float t = dot((plane.xyz*plane.w - pos),plane.xyz) / d; + return t*0.04; +} + +float sample_height( vec3 pos ) +{ + vec2 depth_coords = (pos.xz-uDepthBounds.xy)*uDepthBounds.zw; + return texture( uTexDepth, depth_coords ).r; +} + +float create_shadowing( vec3 vdir ) +{ + return clamp( sample_height( aCo+vdir ) - (aCo.y+vdir.y), 0.1, 0.2 )-0.1; +} + +void main() +{ + vec4 wgarbage = texture( uTexGarbage, aCo.xz * 0.160 ); + + // Creating normal patches + vec3 modnorm = (wgarbage.rgb-0.4) * 1.4; + vec3 qnorm = normalize(floor(aNorm*4.0+modnorm)*0.25) + vec3(0.001,0.0,0.0); + + vec3 tangent0 = normalize(cross(qnorm,vec3(0.0,1.0,0.0))); + vec3 tangent1 = cross(qnorm,tangent0); + vec2 uvdiffuse = vec2( dot(tangent0,aCo), dot(tangent1,aCo) ) * 0.160; + + // Patch local noise + vec4 rgarbage = texture( uTexGarbage, uvdiffuse ); + + // Colour blending + float fblendclip = step(0.380,aColour.r + (rgarbage.r-0.5)*-1.740)*0.320; + vec2 uvgradients = aUv + vec2( fblendclip, 0.0 ); + + vec3 diffuse = texture( uTexGradients, uvgradients ).rgb; + diffuse -= rgarbage.a*0.04; + + // Lighting + vec3 lightdir = normalize(vec3(0.5,0.5,-0.1)); + vec3 shadow = vec3(0.27,0.25,0.34); + float light1 = dot( lightdir, aNorm )*0.5+0.5; + diffuse = diffuse * (light1*vec3(1.0,0.96,0.9)*1.2 + shadow*(1.0-light1)); + + // Specular lighting + vec3 halfview = normalize( uCamera - aCo ); + vec3 specdir = reflect( -lightdir, qnorm ); + float spec = pow(max(dot(halfview,specdir),0.0),10.0) * 0.3*rgarbage.r; + //diffuse += spec * vec3(1.0,0.8,0.8); + + float faccum = 0.0; + vec3 offs = vec3(rgarbage.x, 0.0, rgarbage.z)*4.0; + faccum += create_shadowing( vec3( 0.0, 0.5, 0.0 )*0.6); + faccum += create_shadowing( vec3( 2.0, 0.3, 0.0 )*0.6); + faccum += create_shadowing( vec3( 3.0, 1.0, 0.0 )*0.6); + faccum += create_shadowing( vec3( 5.0, 1.0, 0.0 )*0.6); + faccum += create_shadowing( vec3( 0.0, 0.5, 0.0 )*0.6*1.5+offs); + faccum += create_shadowing( vec3( 2.0, 0.3, 0.0 )*0.6*1.5); + faccum += create_shadowing( vec3( 3.0, 1.0, 0.0 )*0.6*1.5-offs); + faccum += create_shadowing( vec3( 5.0, 1.0, 0.0 )*0.6*1.5); + diffuse = mix( diffuse, vec3(0.15,0.1,0.2), min(faccum*1.0,1.0)); + + FragColor = vec4(diffuse, water_depth(aCo,halfview,uPlane)); +} diff --git a/shaders/vblend.h b/shaders/vblend.h new file mode 100644 index 0000000..26d7a51 --- /dev/null +++ b/shaders/vblend.h @@ -0,0 +1,169 @@ +#ifndef SHADER_vblend_H +#define SHADER_vblend_H +static void shader_vblend_link(void); +static void shader_vblend_register(void); +static struct vg_shader _shader_vblend = { + .name = "vblend", + .link = shader_vblend_link, + .vs = +{ +.orig_file = "../shaders/terrain.vs", +.static_src = +"layout (location=0) in vec3 a_co;\n" +"layout (location=1) in vec3 a_norm;\n" +"layout (location=2) in vec4 a_colour;\n" +"layout (location=3) in vec2 a_uv;\n" +"\n" +"#line 2 0 \n" +"\n" +"uniform mat4 uPv;\n" +"uniform mat4x3 uMdl;\n" +"\n" +"out vec4 aColour;\n" +"out vec2 aUv;\n" +"out vec3 aNorm;\n" +"out vec3 aCo;\n" +"\n" +"void main()\n" +"{\n" +" gl_Position = uPv * vec4( uMdl * vec4(a_co,1.0), 1.0 );\n" +" aColour = a_colour;\n" +" aUv = a_uv;\n" +" aNorm = mat3(uMdl) * a_norm;\n" +" aCo = a_co;\n" +"}\n" +""}, + .fs = +{ +.orig_file = "../shaders/vblend.fs", +.static_src = +"out vec4 FragColor;\n" +"\n" +"uniform sampler2D uTexGarbage;\n" +"uniform sampler2D uTexGradients;\n" +"uniform sampler2D uTexDepth;\n" +"uniform vec4 uDepthBounds;\n" +"uniform vec3 uCamera;\n" +"uniform vec4 uPlane;\n" +"\n" +"in vec4 aColour;\n" +"in vec2 aUv;\n" +"in vec3 aNorm;\n" +"in vec3 aCo;\n" +"\n" +"float water_depth( vec3 pos, vec3 dir, vec4 plane )\n" +"{\n" +" float d = dot( plane.xyz, dir );\n" +" float t = dot((plane.xyz*plane.w - pos),plane.xyz) / d;\n" +" return t*0.04;\n" +"}\n" +"\n" +"float sample_height( vec3 pos )\n" +"{\n" +" vec2 depth_coords = (pos.xz-uDepthBounds.xy)*uDepthBounds.zw;\n" +" return texture( uTexDepth, depth_coords ).r;\n" +"}\n" +"\n" +"float create_shadowing( vec3 vdir )\n" +"{\n" +" return clamp( sample_height( aCo+vdir ) - (aCo.y+vdir.y), 0.1, 0.2 )-0.1;\n" +"}\n" +"\n" +"void main()\n" +"{\n" +" vec4 wgarbage = texture( uTexGarbage, aCo.xz * 0.160 );\n" +" \n" +" // Creating normal patches\n" +" vec3 modnorm = (wgarbage.rgb-0.4) * 1.4;\n" +" vec3 qnorm = normalize(floor(aNorm*4.0+modnorm)*0.25) + vec3(0.001,0.0,0.0);\n" +"\n" +" vec3 tangent0 = normalize(cross(qnorm,vec3(0.0,1.0,0.0)));\n" +" vec3 tangent1 = cross(qnorm,tangent0);\n" +" vec2 uvdiffuse = vec2( dot(tangent0,aCo), dot(tangent1,aCo) ) * 0.160;\n" +" \n" +" // Patch local noise\n" +" vec4 rgarbage = texture( uTexGarbage, uvdiffuse );\n" +"\n" +" // Colour blending\n" +" float fblendclip = step(0.380,aColour.r + (rgarbage.r-0.5)*-1.740)*0.320;\n" +" vec2 uvgradients = aUv + vec2( fblendclip, 0.0 );\n" +"\n" +" vec3 diffuse = texture( uTexGradients, uvgradients ).rgb;\n" +" diffuse -= rgarbage.a*0.04;\n" +"\n" +" // Lighting\n" +" vec3 lightdir = normalize(vec3(0.5,0.5,-0.1));\n" +" vec3 shadow = vec3(0.27,0.25,0.34);\n" +" float light1 = dot( lightdir, aNorm )*0.5+0.5;\n" +" diffuse = diffuse * (light1*vec3(1.0,0.96,0.9)*1.2 + shadow*(1.0-light1));\n" +" \n" +" // Specular lighting\n" +" vec3 halfview = normalize( uCamera - aCo );\n" +" vec3 specdir = reflect( -lightdir, qnorm );\n" +" float spec = pow(max(dot(halfview,specdir),0.0),10.0) * 0.3*rgarbage.r;\n" +" //diffuse += spec * vec3(1.0,0.8,0.8);\n" +"\n" +" float faccum = 0.0;\n" +" vec3 offs = vec3(rgarbage.x, 0.0, rgarbage.z)*4.0;\n" +" faccum += create_shadowing( vec3( 0.0, 0.5, 0.0 )*0.6);\n" +" faccum += create_shadowing( vec3( 2.0, 0.3, 0.0 )*0.6);\n" +" faccum += create_shadowing( vec3( 3.0, 1.0, 0.0 )*0.6);\n" +" faccum += create_shadowing( vec3( 5.0, 1.0, 0.0 )*0.6);\n" +" faccum += create_shadowing( vec3( 0.0, 0.5, 0.0 )*0.6*1.5+offs);\n" +" faccum += create_shadowing( vec3( 2.0, 0.3, 0.0 )*0.6*1.5);\n" +" faccum += create_shadowing( vec3( 3.0, 1.0, 0.0 )*0.6*1.5-offs);\n" +" faccum += create_shadowing( vec3( 5.0, 1.0, 0.0 )*0.6*1.5);\n" +" diffuse = mix( diffuse, vec3(0.15,0.1,0.2), min(faccum*1.0,1.0));\n" +"\n" +" FragColor = vec4(diffuse, water_depth(aCo,halfview,uPlane));\n" +"}\n" +""}, +}; + +static GLuint _uniform_vblend_uPv; +static GLuint _uniform_vblend_uMdl; +static GLuint _uniform_vblend_uTexGarbage; +static GLuint _uniform_vblend_uTexGradients; +static GLuint _uniform_vblend_uTexDepth; +static GLuint _uniform_vblend_uDepthBounds; +static GLuint _uniform_vblend_uCamera; +static GLuint _uniform_vblend_uPlane; +static void shader_vblend_uPv(m4x4f m){ + glUniformMatrix4fv( _uniform_vblend_uPv, 1, GL_FALSE, (float *)m ); +} +static void shader_vblend_uMdl(m4x3f m){ + glUniformMatrix4x3fv( _uniform_vblend_uMdl, 1, GL_FALSE, (float *)m ); +} +static void shader_vblend_uTexGarbage(int i){ + glUniform1i( _uniform_vblend_uTexGarbage, i ); +} +static void shader_vblend_uTexGradients(int i){ + glUniform1i( _uniform_vblend_uTexGradients, i ); +} +static void shader_vblend_uTexDepth(int i){ + glUniform1i( _uniform_vblend_uTexDepth, i ); +} +static void shader_vblend_uDepthBounds(v4f v){ + glUniform4fv( _uniform_vblend_uDepthBounds, 1, v ); +} +static void shader_vblend_uCamera(v3f v){ + glUniform3fv( _uniform_vblend_uCamera, 1, v ); +} +static void shader_vblend_uPlane(v4f v){ + glUniform4fv( _uniform_vblend_uPlane, 1, v ); +} +static void shader_vblend_register(void){ + vg_shader_register( &_shader_vblend ); +} +static void shader_vblend_use(void){ glUseProgram(_shader_vblend.id); } +static void shader_vblend_link(void){ + _uniform_vblend_uPv = glGetUniformLocation( _shader_vblend.id, "uPv" ); + _uniform_vblend_uMdl = glGetUniformLocation( _shader_vblend.id, "uMdl" ); + _uniform_vblend_uTexGarbage = glGetUniformLocation( _shader_vblend.id, "uTexGarbage" ); + _uniform_vblend_uTexGradients = glGetUniformLocation( _shader_vblend.id, "uTexGradients" ); + _uniform_vblend_uTexDepth = glGetUniformLocation( _shader_vblend.id, "uTexDepth" ); + _uniform_vblend_uDepthBounds = glGetUniformLocation( _shader_vblend.id, "uDepthBounds" ); + _uniform_vblend_uCamera = glGetUniformLocation( _shader_vblend.id, "uCamera" ); + _uniform_vblend_uPlane = glGetUniformLocation( _shader_vblend.id, "uPlane" ); +} +#endif /* SHADER_vblend_H */ diff --git a/shaders/vertex_standard.glsl b/shaders/vertex_standard.glsl new file mode 100644 index 0000000..0b46d33 --- /dev/null +++ b/shaders/vertex_standard.glsl @@ -0,0 +1,4 @@ +layout (location=0) in vec3 a_co; +layout (location=1) in vec3 a_norm; +layout (location=2) in vec4 a_colour; +layout (location=3) in vec2 a_uv; diff --git a/shaders/vg/blit.fs.glsl b/shaders/vg/blit.fs.glsl new file mode 100644 index 0000000..b98d5e8 --- /dev/null +++ b/shaders/vg/blit.fs.glsl @@ -0,0 +1,9 @@ +out vec4 FragColor; +uniform sampler2D uTexMain; + +in vec2 aUv; + +void main() +{ + FragColor = texture( uTexMain, aUv ); +} diff --git a/shaders/vg/blit.vs.glsl b/shaders/vg/blit.vs.glsl new file mode 100644 index 0000000..2593725 --- /dev/null +++ b/shaders/vg/blit.vs.glsl @@ -0,0 +1,8 @@ +layout (location=0) in vec2 a_co; +out vec2 aUv; + +void main() +{ + gl_Position = vec4(a_co*2.0-1.0,0.0,1.0); + aUv = a_co; +} diff --git a/shaders/vg/character.fs.glsl b/shaders/vg/character.fs.glsl new file mode 100644 index 0000000..d3c2bea --- /dev/null +++ b/shaders/vg/character.fs.glsl @@ -0,0 +1,16 @@ +out vec4 FragColor; + +uniform sampler2D uTexMain; +uniform vec4 uColour; + +in vec4 aColour; +in vec2 aUv; +in vec3 aNorm; +in vec3 aCo; +in float aOpacity; + +void main() +{ + vec3 diffuse = texture( uTexMain, aUv ).rgb; + FragColor = vec4(pow(diffuse,vec3(1.0)),aOpacity); +} diff --git a/shaders/vg/character.vs.glsl b/shaders/vg/character.vs.glsl new file mode 100644 index 0000000..7f79f4d --- /dev/null +++ b/shaders/vg/character.vs.glsl @@ -0,0 +1,28 @@ +layout (location=0) in vec3 a_co; +layout (location=1) in vec3 a_norm; +layout (location=2) in vec4 a_colour; +layout (location=3) in vec2 a_uv; + +#line 2 0 + +uniform mat4 uPv; +uniform mat4x3 uMdl; +uniform float uOpacity; + +out vec4 aColour; +out vec2 aUv; +out vec3 aNorm; +out vec3 aCo; +out float aOpacity; + +void main() +{ + vec3 world_pos = uMdl * vec4(a_co,1.0); + gl_Position = uPv * vec4(world_pos,1.0); + + aColour = a_colour; + aUv = a_uv; + aNorm = mat3(uMdl) * a_norm; + aCo = a_co; + aOpacity = 1.0-(gl_Position.y+0.5)*uOpacity; +} diff --git a/shaders/vg/gate.fs.glsl b/shaders/vg/gate.fs.glsl new file mode 100644 index 0000000..ba48f1e --- /dev/null +++ b/shaders/vg/gate.fs.glsl @@ -0,0 +1,27 @@ +out vec4 FragColor; + +uniform sampler2D uTexMain; +uniform sampler2D uTexWater; +uniform vec2 uInvRes; +uniform float uTime; +uniform vec3 uCam; + +in vec3 aNorm; +in vec2 aUv; +in vec3 aCo; + +void main() +{ + vec2 ssuv = gl_FragCoord.xy*uInvRes; + vec4 mapwater = texture( uTexWater, vec2(aUv.x,aUv.y-uTime)); + + float undistort = smoothstep(0.1,0.6,distance( uCam, aCo )*0.1); + vec2 trimedge = smoothstep(0.0,0.2,1.0-abs(ssuv-0.5)*2.0); + undistort *= trimedge.x * trimedge.y; + + vec2 warpamt = (mapwater.rg-0.5)*0.05*aUv.y*undistort; + vec4 mapbackbuffer = texture( uTexMain, ssuv + warpamt ); + + float opacity = 1.0-smoothstep(0.4,1.0,aUv.y); + FragColor = vec4( mapbackbuffer.rgb, opacity ); +} diff --git a/shaders/vg/gate.vs.glsl b/shaders/vg/gate.vs.glsl new file mode 100644 index 0000000..e33c754 --- /dev/null +++ b/shaders/vg/gate.vs.glsl @@ -0,0 +1,22 @@ +layout (location=0) in vec3 a_co; +layout (location=1) in vec3 a_norm; +layout (location=2) in vec4 a_colour; +layout (location=3) in vec2 a_uv; + +#line 2 0 +uniform mat4 uPv; +uniform mat4x3 uMdl; + +out vec3 aNorm; +out vec2 aUv; +out vec3 aCo; + +void main() +{ + vec3 world_pos = uMdl * vec4( a_co, 1.0 ); + gl_Position = uPv * vec4(world_pos,1.0); + + aNorm = a_norm; + aCo = world_pos; + aUv = a_uv; +} diff --git a/shaders/vg/standard.fs.glsl b/shaders/vg/standard.fs.glsl new file mode 100644 index 0000000..e3f05c8 --- /dev/null +++ b/shaders/vg/standard.fs.glsl @@ -0,0 +1,20 @@ +out vec4 FragColor; + +uniform sampler2D uTexMain; +uniform vec4 uColour; + +in vec4 aColour; +in vec2 aUv; +in vec3 aNorm; +in vec3 aCo; + +void main() +{ + vec3 diffuse = texture( uTexMain, aUv ).rgb; + float light1 = max(0.0,dot(-vec3(0.5,-0.8,0.25), aNorm)); + float light2 = max(0.0,dot(-vec3(-0.8,0.5,-0.25), aNorm)); + diffuse += vec3(0.2,0.2,0.2) + + vec3(1.0,1.0,0.9)*light1 + + vec3(0.1,0.3,0.4)*light2; + FragColor = vec4(diffuse*uColour.rgb, aColour.a*uColour.a); +} diff --git a/shaders/vg/standard.vs.glsl b/shaders/vg/standard.vs.glsl new file mode 100644 index 0000000..f755542 --- /dev/null +++ b/shaders/vg/standard.vs.glsl @@ -0,0 +1,23 @@ +layout (location=0) in vec3 a_co; +layout (location=1) in vec3 a_norm; +layout (location=2) in vec4 a_colour; +layout (location=3) in vec2 a_uv; + +#line 2 0 + +uniform mat4 uPv; +uniform mat4x3 uMdl; + +out vec4 aColour; +out vec2 aUv; +out vec3 aNorm; +out vec3 aCo; + +void main() +{ + gl_Position = uPv * vec4( uMdl * vec4(a_co,1.0), 1.0 ); + aColour = a_colour; + aUv = a_uv; + aNorm = mat3(uMdl) * a_norm; + aCo = a_co; +} diff --git a/shaders/vg/terrain.fs.glsl b/shaders/vg/terrain.fs.glsl new file mode 100644 index 0000000..7bcdab8 --- /dev/null +++ b/shaders/vg/terrain.fs.glsl @@ -0,0 +1,8 @@ +// Nothing + +#line 2 0 + +void main() +{ + +} diff --git a/shaders/vg/terrain.vs.glsl b/shaders/vg/terrain.vs.glsl new file mode 100644 index 0000000..5bb262b --- /dev/null +++ b/shaders/vg/terrain.vs.glsl @@ -0,0 +1,6 @@ +uniform mat4x3 uMdl; + +void main() +{ + +} diff --git a/shaders/vg/unlit.fs.glsl b/shaders/vg/unlit.fs.glsl new file mode 100644 index 0000000..ec4d7ae --- /dev/null +++ b/shaders/vg/unlit.fs.glsl @@ -0,0 +1,15 @@ +out vec4 FragColor; + +uniform sampler2D uTexMain; +uniform vec4 uColour; + +in vec4 aColour; +in vec2 aUv; +in vec3 aNorm; +in vec3 aCo; + +void main() +{ + vec3 diffuse = texture( uTexMain, aUv ).rgb; + FragColor = vec4(pow(diffuse,vec3(1.0)),1.0); +} diff --git a/shaders/vg/water.fs.glsl b/shaders/vg/water.fs.glsl new file mode 100644 index 0000000..b352e39 --- /dev/null +++ b/shaders/vg/water.fs.glsl @@ -0,0 +1,20 @@ +out vec4 FragColor; + +uniform sampler2D uTexMain; +uniform sampler2D uTexDudv; +uniform vec2 uInvRes; +uniform float uTime; + +in vec2 aUv; + +void main() +{ + vec2 ssuv = gl_FragCoord.xy*uInvRes; + vec4 dudva = texture( uTexDudv, aUv + vec2(uTime*0.04f,uTime*0.03f) ); + vec4 dudvb = texture( uTexDudv, aUv - vec2(uTime*0.1,uTime*0.054) ); + + vec2 distortamt = (dudva.rg-0.5) * (dudvb.ba-0.5) * 2.0; + + vec4 reflected = texture( uTexMain, ssuv+distortamt ); + FragColor = vec4(reflected.rgb*1.0,reflected.a); +} diff --git a/shaders/vg/water.vs.glsl b/shaders/vg/water.vs.glsl new file mode 100644 index 0000000..7751336 --- /dev/null +++ b/shaders/vg/water.vs.glsl @@ -0,0 +1,18 @@ +layout (location=0) in vec3 a_co; +layout (location=1) in vec3 a_norm; +layout (location=2) in vec4 a_colour; +layout (location=3) in vec2 a_uv; + +#line 2 0 + +uniform mat4 uPv; +uniform mat4x3 uMdl; + +out vec2 aUv; + +void main() +{ + vec3 world_pos = uMdl * vec4( a_co, 1.0 ); + gl_Position = uPv * vec4(world_pos,1.0); + aUv = vec2(world_pos[0],world_pos[2])*0.15; +} diff --git a/shaders/water.fs b/shaders/water.fs index 1de00ec..0be4389 100644 --- a/shaders/water.fs +++ b/shaders/water.fs @@ -1,21 +1,43 @@ -#include "water_ref.glsl" - out vec4 FragColor; uniform sampler2D uTexMain; uniform sampler2D uTexDudv; -uniform sampler2D uTexDepth; uniform sampler2D uTexBack; uniform vec2 uInvRes; uniform float uTime; - uniform vec3 uCamera; uniform float uSurfaceY; -in vec4 aUv; +in vec4 aColour; +in vec2 aUv; +in vec3 aNorm; in vec3 aCo; -in float aDepth; + +#include "common_world.glsl" + +vec4 water_surf( vec3 halfview, vec3 vnorm, float depthvalue, + vec4 beneath, vec4 above ) +{ + vec3 colour_shore = vec3( 0.21, 0.6, 0.8 ); + vec3 colour_ocean = vec3( 0.01, 0.1, 0.2 ); + vec3 surface_tint = mix(colour_shore, colour_ocean, depthvalue); + + float ffresnel = pow(1.0-dot( vnorm, halfview ),5.0); + + vec3 lightdir = vec3(0.95,0.0,-0.3); + vec3 specdir = reflect( -lightdir, vnorm ); + float spec = pow(max(dot(halfview,specdir),0.0),20.0)*0.3; + + // Depth + float depthblend = pow( beneath.a,0.8 ); + + // Composite + vec3 vsurface = mix(surface_tint, above.rgb, ffresnel ); + //vsurface += spec; + + return vec4( vsurface,depthblend ); +} void main() { @@ -23,10 +45,12 @@ void main() vec2 ssuv = gl_FragCoord.xy*uInvRes; // Surface colour composite - float depthvalue = texture( uTexDepth, aUv.zw ).r; + float depthvalue = clamp( -world_depth_sample( aCo )*(1.0/25.0), 0.0, 1.0 ); - vec4 dudva = texture(uTexDudv, aUv.xy + vec2(uTime*0.008,uTime*0.006))-0.5; - vec4 dudvb = texture(uTexDudv, aUv.xy*7.0-vec2(uTime*0.003,uTime*0.03))-0.5; + vec2 world_coord = aCo.xz * 0.008; + vec4 time_offsets = vec4( uTime ) * vec4( 0.008, 0.006, 0.003, 0.03 ); + vec4 dudva = texture( uTexDudv, world_coord + time_offsets.xy )-0.5; + vec4 dudvb = texture( uTexDudv, world_coord *7.0 - time_offsets.zw )-0.5; vec3 surfnorm = dudva.rgb + dudvb.rgb; surfnorm = normalize(vec3(0.0,1.0,0.0) + dudva.xyz*0.4 + dudvb.xyz*0.1); @@ -43,8 +67,6 @@ void main() vec4 beneath = texture( uTexBack, ssuv ); // Fog - //vec4 horizon = vec4( 0.5, 0.6, 0.9, 1.0 ); - vec4 horizon = vec4( 0.7,0.8,0.88, 1.0 ); float fdist = pow(length( aCo.xz-uCamera.xz ) * 0.00047, 2.6); // Composite diff --git a/shaders/water.h b/shaders/water.h index 995cdb8..e9c0883 100644 --- a/shaders/water.h +++ b/shaders/water.h @@ -7,7 +7,7 @@ static struct vg_shader _shader_water = { .link = shader_water_link, .vs = { -.orig_file = "../shaders/water.vs", +.orig_file = "../shaders/standard.vs", .static_src = "layout (location=0) in vec3 a_co;\n" "layout (location=1) in vec3 a_norm;\n" @@ -18,28 +18,102 @@ static struct vg_shader _shader_water = { "\n" "uniform mat4 uPv;\n" "uniform mat4x3 uMdl;\n" -"uniform vec4 uDepthBounds;\n" "\n" -"out vec4 aUv;\n" +"out vec4 aColour;\n" +"out vec2 aUv;\n" +"out vec3 aNorm;\n" "out vec3 aCo;\n" -"out float aDepth;\n" "\n" "void main()\n" "{\n" -" vec3 world_pos = uMdl * vec4( a_co, 1.0 );\n" -" gl_Position = uPv * vec4(world_pos,1.0);\n" -"\n" -" vec2 depth_coords = (world_pos.xz-uDepthBounds.xy)*uDepthBounds.zw;\n" -" aUv = vec4(world_pos.xz*0.005,depth_coords);\n" -" aCo = world_pos;\n" -"\n" -" aDepth = gl_Position.z;\n" +" gl_Position = uPv * vec4( uMdl * vec4(a_co,1.0), 1.0 );\n" +" aColour = a_colour;\n" +" aUv = a_uv;\n" +" aNorm = mat3(uMdl) * a_norm;\n" +" aCo = a_co;\n" "}\n" ""}, .fs = { .orig_file = "../shaders/water.fs", .static_src = +"out vec4 FragColor;\n" +"\n" +"uniform sampler2D uTexMain;\n" +"uniform sampler2D uTexDudv;\n" +"uniform sampler2D uTexBack;\n" +"\n" +"uniform vec2 uInvRes;\n" +"uniform float uTime;\n" +"uniform vec3 uCamera;\n" +"uniform float uSurfaceY;\n" +"\n" +"in vec4 aColour;\n" +"in vec2 aUv;\n" +"in vec3 aNorm;\n" +"in vec3 aCo;\n" +"\n" +"#line 1 1 \n" +"layout (std140) uniform ub_world_lighting\n" +"{\n" +" vec3 g_directional;\n" +" vec3 g_sun_colour;\n" +" vec3 g_shadow_colour;\n" +" vec4 g_water_plane;\n" +" vec4 g_depth_bounds;\n" +" float g_water_fog;\n" +"};\n" +"\n" +"uniform sampler2D g_world_depth;\n" +"\n" +"// Standard diffuse + spec models\n" +"// ==============================\n" +"\n" +"vec3 do_light_diffuse( vec3 vfrag, vec3 wnormal )\n" +"{\n" +" float flight = dot( g_directional, wnormal )*0.5+0.5;\n" +" return vfrag * mix( g_shadow_colour, g_sun_colour, flight );\n" +"}\n" +"\n" +"vec3 do_light_spec( vec3 vfrag, vec3 wnormal, vec3 halfview, float fintensity )\n" +"{\n" +" vec3 specdir = reflect( -g_directional, wnormal );\n" +" float spec = pow(max(dot( halfview, specdir ), 0.0), 10.0);\n" +" return vfrag + g_sun_colour*spec*fintensity;\n" +"}\n" +"\n" +"float world_depth_sample( vec3 pos )\n" +"{\n" +" vec2 depth_coord = (pos.xz - g_depth_bounds.xy) * g_depth_bounds.zw; \n" +" return texture( g_world_depth, depth_coord ).r;\n" +"}\n" +"\n" +"float shadow_sample( vec3 vdir )\n" +"{\n" +" vec3 sample_pos = aCo + vdir;\n" +" float height_sample = world_depth_sample( sample_pos );\n" +"\n" +" float fdelta = height_sample - sample_pos.y;\n" +" return clamp( fdelta, 0.1, 0.2 )-0.1;\n" +"}\n" +"\n" +"vec3 do_light_shadowing( vec3 vfrag )\n" +"{\n" +" float faccum = 0.0;\n" +" faccum += shadow_sample( vec3( 0.0, 0.5, 0.0 ));\n" +" faccum += shadow_sample( vec3( 2.0, 0.3, 0.0 ));\n" +" faccum += shadow_sample( vec3( 3.0, 1.0, 0.0 ));\n" +" faccum += shadow_sample( vec3( 5.0, 1.0, 0.0 ));\n" +" faccum += shadow_sample( vec3( 0.0, 0.5, 0.0 )*1.5);\n" +" faccum += shadow_sample( vec3( 2.0, 0.3, 0.0 )*1.5);\n" +" faccum += shadow_sample( vec3( 3.0, 1.0, 0.0 )*1.5);\n" +" faccum += shadow_sample( vec3( 5.0, 1.0, 0.0 )*1.5);\n" +" return mix( vfrag, g_shadow_colour, faccum );\n" +"}\n" +"\n" +"\n" +"#line 18 0 \n" +"\n" "vec4 water_surf( vec3 halfview, vec3 vnorm, float depthvalue, \n" " vec4 beneath, vec4 above )\n" "{\n" @@ -63,35 +137,18 @@ static struct vg_shader _shader_water = { " return vec4( vsurface,depthblend );\n" "}\n" "\n" -"#line 2 0 \n" -"\n" -"out vec4 FragColor;\n" -"\n" -"uniform sampler2D uTexMain;\n" -"uniform sampler2D uTexDudv;\n" -"uniform sampler2D uTexDepth;\n" -"uniform sampler2D uTexBack;\n" -"\n" -"uniform vec2 uInvRes;\n" -"uniform float uTime;\n" -"\n" -"uniform vec3 uCamera;\n" -"uniform float uSurfaceY;\n" -"\n" -"in vec4 aUv;\n" -"in vec3 aCo;\n" -"in float aDepth;\n" -"\n" "void main()\n" "{\n" " // Create texture coords\n" " vec2 ssuv = gl_FragCoord.xy*uInvRes;\n" " \n" " // Surface colour composite\n" -" float depthvalue = texture( uTexDepth, aUv.zw ).r;\n" +" float depthvalue = clamp( -world_depth_sample( aCo )*(1.0/25.0), 0.0, 1.0 );\n" "\n" -" vec4 dudva = texture(uTexDudv, aUv.xy + vec2(uTime*0.008,uTime*0.006))-0.5;\n" -" vec4 dudvb = texture(uTexDudv, aUv.xy*7.0-vec2(uTime*0.003,uTime*0.03))-0.5;\n" +" vec2 world_coord = aCo.xz * 0.008;\n" +" vec4 time_offsets = vec4( uTime ) * vec4( 0.008, 0.006, 0.003, 0.03 );\n" +" vec4 dudva = texture( uTexDudv, world_coord + time_offsets.xy )-0.5;\n" +" vec4 dudvb = texture( uTexDudv, world_coord *7.0 - time_offsets.zw )-0.5;\n" "\n" " vec3 surfnorm = dudva.rgb + dudvb.rgb;\n" " surfnorm = normalize(vec3(0.0,1.0,0.0) + dudva.xyz*0.4 + dudvb.xyz*0.1);\n" @@ -108,8 +165,6 @@ static struct vg_shader _shader_water = { " vec4 beneath = texture( uTexBack, ssuv );\n" "\n" " // Fog\n" -" //vec4 horizon = vec4( 0.5, 0.6, 0.9, 1.0 );\n" -" vec4 horizon = vec4( 0.7,0.8,0.88, 1.0 );\n" " float fdist = pow(length( aCo.xz-uCamera.xz ) * 0.00047, 2.6);\n" "\n" " // Composite\n" @@ -122,33 +177,26 @@ static struct vg_shader _shader_water = { static GLuint _uniform_water_uPv; static GLuint _uniform_water_uMdl; -static GLuint _uniform_water_uDepthBounds; static GLuint _uniform_water_uTexMain; static GLuint _uniform_water_uTexDudv; -static GLuint _uniform_water_uTexDepth; static GLuint _uniform_water_uTexBack; static GLuint _uniform_water_uInvRes; static GLuint _uniform_water_uTime; static GLuint _uniform_water_uCamera; static GLuint _uniform_water_uSurfaceY; +static GLuint _uniform_water_g_world_depth; static void shader_water_uPv(m4x4f m){ glUniformMatrix4fv( _uniform_water_uPv, 1, GL_FALSE, (float *)m ); } static void shader_water_uMdl(m4x3f m){ glUniformMatrix4x3fv( _uniform_water_uMdl, 1, GL_FALSE, (float *)m ); } -static void shader_water_uDepthBounds(v4f v){ - glUniform4fv( _uniform_water_uDepthBounds, 1, v ); -} static void shader_water_uTexMain(int i){ glUniform1i( _uniform_water_uTexMain, i ); } static void shader_water_uTexDudv(int i){ glUniform1i( _uniform_water_uTexDudv, i ); } -static void shader_water_uTexDepth(int i){ - glUniform1i( _uniform_water_uTexDepth, i ); -} static void shader_water_uTexBack(int i){ glUniform1i( _uniform_water_uTexBack, i ); } @@ -164,6 +212,9 @@ static void shader_water_uCamera(v3f v){ static void shader_water_uSurfaceY(float f){ glUniform1f( _uniform_water_uSurfaceY, f ); } +static void shader_water_g_world_depth(int i){ + glUniform1i( _uniform_water_g_world_depth, i ); +} static void shader_water_register(void){ vg_shader_register( &_shader_water ); } @@ -171,14 +222,13 @@ static void shader_water_use(void){ glUseProgram(_shader_water.id); } static void shader_water_link(void){ _uniform_water_uPv = glGetUniformLocation( _shader_water.id, "uPv" ); _uniform_water_uMdl = glGetUniformLocation( _shader_water.id, "uMdl" ); - _uniform_water_uDepthBounds = glGetUniformLocation( _shader_water.id, "uDepthBounds" ); _uniform_water_uTexMain = glGetUniformLocation( _shader_water.id, "uTexMain" ); _uniform_water_uTexDudv = glGetUniformLocation( _shader_water.id, "uTexDudv" ); - _uniform_water_uTexDepth = glGetUniformLocation( _shader_water.id, "uTexDepth" ); _uniform_water_uTexBack = glGetUniformLocation( _shader_water.id, "uTexBack" ); _uniform_water_uInvRes = glGetUniformLocation( _shader_water.id, "uInvRes" ); _uniform_water_uTime = glGetUniformLocation( _shader_water.id, "uTime" ); _uniform_water_uCamera = glGetUniformLocation( _shader_water.id, "uCamera" ); _uniform_water_uSurfaceY = glGetUniformLocation( _shader_water.id, "uSurfaceY" ); + _uniform_water_g_world_depth = glGetUniformLocation( _shader_water.id, "g_world_depth" ); } #endif /* SHADER_water_H */ diff --git a/shaders/water.vs b/shaders/water.vs index a78bf30..6fbee77 100644 --- a/shaders/water.vs +++ b/shaders/water.vs @@ -2,20 +2,15 @@ uniform mat4 uPv; uniform mat4x3 uMdl; -uniform vec4 uDepthBounds; out vec4 aUv; out vec3 aCo; -out float aDepth; void main() { vec3 world_pos = uMdl * vec4( a_co, 1.0 ); gl_Position = uPv * vec4(world_pos,1.0); - vec2 depth_coords = (world_pos.xz-uDepthBounds.xy)*uDepthBounds.zw; aUv = vec4(world_pos.xz*0.005,depth_coords); aCo = world_pos; - - aDepth = gl_Position.z; } diff --git a/shaders/water_ref.glsl b/shaders/water_ref.glsl new file mode 100644 index 0000000..e69de29 diff --git a/terrain.h b/terrain.h index 81b311a..b5e7e53 100644 --- a/terrain.h +++ b/terrain.h @@ -3,6 +3,7 @@ static void render_terrain(m4x4f projection, v3f camera); static void render_sky(m4x3f camera); +#if 0 #ifndef TERRAIN_H #define TERRAIN_H @@ -50,6 +51,12 @@ static void terrain_init(void) free(msky); } +static void bind_terrain_textures(void) +{ + vg_tex2d_bind( &tex_terrain_noise, 0 ); + vg_tex2d_bind( &tex_terrain_colours, 1 ); +} + static void render_terrain(m4x4f projection, v3f camera) { shader_terrain_use(); @@ -65,6 +72,15 @@ static void render_terrain(m4x4f projection, v3f camera) shader_terrain_uMdl( identity_matrix ); shader_terrain_uCamera( camera ); shader_terrain_uPlane( (v4f){ 0.0f,1.0f,0.0f, wrender.height } ); + + glActiveTexture( GL_TEXTURE2 ); + glBindTexture( GL_TEXTURE_2D, wrender.depthmap ); + shader_terrain_uTexDepth( 2 ); + shader_terrain_uDepthBounds( (v4f){ + wrender.depthbounds[0][0], + wrender.depthbounds[0][2], + 1.0f/ (wrender.depthbounds[1][0]-wrender.depthbounds[0][0]), + 1.0f/ (wrender.depthbounds[1][2]-wrender.depthbounds[0][2])} ); } static void render_lowerdome( m4x3f camera ) @@ -124,3 +140,4 @@ static void render_sky(m4x3f camera) } #endif +#endif diff --git a/textures/gradients.png b/textures/gradients.png index 201e051be348de5d38248dcb411fd30b101cb852..64f8ae00be155dd101a0be63a45a6b97e299b27e 100644 GIT binary patch delta 35457 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 Mrz_5-)|r_4e-2eap literal 186936 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[0] < world.sm_road.vertex_count; } +static void world_register(void) +{ + shader_terrain_register(); + shader_sky_register(); + shader_planeinf_register(); + shader_gpos_register(); + shader_fscolour_register(); +} + +static void world_free(void) +{ + /* TODO.. */ +} + +static void render_world_depth( m4x4f projection, m4x3f camera ); static void world_load(void) { - /* Setup scene */ + /* + * Setup scene + * + * TODO: Call world_free when its ready here + * + */ scene_init( &world.geo ); model *mworld = vg_asset_read( "models/mp_dev.mdl" ); @@ -81,6 +100,17 @@ static void world_load(void) scene_add_model( &world.geo, mworld, sm, sm->pivot, 0.0f, 1.0f ); } + for( int i=0; ilayer_count; i++ ) + { + submodel *sm = model_get_submodel( mworld, i ); + if( !strcmp( sm->material, "vertex_blend" ) ) + { + m4x3f transform; + q_m3x3( sm->q, transform ); + v3_copy( sm->pivot, transform[3] ); + scene_add_foliage( &world.geo, mworld, sm, transform ); + } + } scene_copy_slice( &world.geo, &world.sm_road ); for( int i=0; ilayer_count; i++ ) @@ -90,11 +120,8 @@ static void world_load(void) scene_add_model( &world.geo, mworld, sm, sm->pivot, 0.0f, 1.0f ); } - scene_copy_slice( &world.geo, &world.sm_terrain ); - vg_info( "BBX: %.3f %.3f %.3f -> %.3f %.3f %.3f\n", - world.geo.bbx[0][0], world.geo.bbx[0][1], world.geo.bbx[0][2], - world.geo.bbx[1][0], world.geo.bbx[1][1], world.geo.bbx[1][2] ); + scene_copy_slice( &world.geo, &world.sm_terrain ); /* * TODO: Parametric marker import @@ -150,11 +177,9 @@ static void world_load(void) break; } } - - scene_upload( &world.geo ); - scene_bh_create( &world.geo ); - water_compute_depth( world.geo.bbx ); + scene_bh_create( &world.geo ); + scene_upload( &world.geo ); scene_init( &world.foliage ); model *mfoliage = vg_asset_read("models/rs_foliage.mdl"); @@ -171,7 +196,8 @@ static void world_load(void) submodel *sm = model_get_submodel( mworld, i ); if( !strcmp( sm->material, "surf" ) || !strcmp( sm->material, "terrain" ) || - !strcmp( sm->material, "water" ) ) + !strcmp( sm->material, "water" ) || + !strcmp( sm->material, "vertex_blend") ) continue; m4x3f transform; @@ -188,8 +214,6 @@ static void world_load(void) rb_update_transform( rb ); } - free( mworld ); - v3f volume; v3_sub( world.geo.bbx[1], world.geo.bbx[0], volume ); volume[1] = 1.0f; @@ -241,8 +265,237 @@ static void world_load(void) free( mfoliage ); scene_upload( &world.foliage ); + + /* Prop layer */ + scene_init( &world.props ); + for( int i=0; ilayer_count; i++ ) + { + submodel *sm = model_get_submodel( mworld, i ); + if( !strcmp( sm->material, "vertex_blend" ) ) + { + m4x3f transform; + q_m3x3( sm->q, transform ); + v3_copy( sm->pivot, transform[3] ); + scene_add_foliage( &world.props, mworld, sm, transform ); + } + } + + scene_upload( &world.props ); + free( mworld ); bh_create( &world.bhcubes, &bh_system_rigidbodies, world.temp_rbs, world.rb_count ); + + /* + * Rendering the depth map + */ + m4x4f ortho; + m4x3f camera; + + v3f extent; + v3_sub( world.geo.bbx[1], world.geo.bbx[0], extent ); + + float fl = world.geo.bbx[0][0], + fr = world.geo.bbx[1][0], + fb = world.geo.bbx[0][2], + ft = world.geo.bbx[1][2], + rl = 1.0f / (fr-fl), + tb = 1.0f / (ft-fb); + + m4x4_zero( ortho ); + ortho[0][0] = 2.0f * rl; + ortho[2][1] = 2.0f * tb; + ortho[3][0] = (fr + fl) * -rl; + ortho[3][1] = (ft + fb) * -tb; + ortho[3][3] = 1.0f; + m4x3_identity( camera ); + + glViewport( 0, 0, 1024, 1024 ); + glDisable(GL_DEPTH_TEST); + glBindFramebuffer( GL_FRAMEBUFFER, gpipeline.fb_depthmap ); + shader_fscolour_use(); + shader_fscolour_uColour( (v4f){-9999.0f,-9999.0f,-9999.0f,-9999.0f} ); + render_fsquad(); + + glEnable(GL_BLEND); + glBlendFunc(GL_ONE, GL_ONE); + glBlendEquation(GL_MAX); + render_world_depth( ortho, camera ); + glDisable(GL_BLEND); + glEnable(GL_DEPTH_TEST); + + /* + * TODO: World settings entity + */ + struct ub_world_lighting *winfo = &gpipeline.ub_world_lighting; + + v3f sundir = { 0.5f, 0.8f, 0.2f }; + v3_normalize( sundir ); + v3_copy( sundir, winfo->g_directional ); + v3_copy( (v3f){ 1.2f,1.152f,1.08f }, winfo->g_sun_colour ); + v3_copy( (v3f){ 0.15f,0.1f,0.2f }, winfo->g_shadow_colour ); + v4_copy( wrender.plane, winfo->g_water_plane ); + + v4f bounds; + bounds[0] = world.geo.bbx[0][0]; + bounds[1] = world.geo.bbx[0][2]; + bounds[2] = 1.0f/ (world.geo.bbx[1][0]-world.geo.bbx[0][0]); + bounds[3] = 1.0f/ (world.geo.bbx[1][2]-world.geo.bbx[0][2]); + v4_copy( bounds, winfo->g_depth_bounds ); + + winfo->g_water_fog = 0.04f; + render_update_lighting_ub(); +} + +static void world_init(void) +{ + vg_tex2d_init( (vg_tex2d *[]){ &tex_terrain_colours, + &tex_terrain_noise }, 2 ); + + + model *msky = vg_asset_read("models/rs_skydome.mdl"); + model_unpack( msky, &world.skydome ); + + world.dome_lower = *submodel_get( msky, "dome_lower" ); + world.dome_upper = *submodel_get( msky, "dome_upper" ); + + free(msky); +} + +/* + * Rendering + */ + +static void bind_terrain_textures(void) +{ + vg_tex2d_bind( &tex_terrain_noise, 0 ); + vg_tex2d_bind( &tex_terrain_colours, 1 ); +} + +static void render_props( m4x4f projection, v3f camera ) +{ + m4x3f identity_matrix; + m4x3_identity( identity_matrix ); + + shader_vblend_use(); + shader_vblend_uTexGarbage(0); + shader_vblend_uTexGradients(1); + shader_link_standard_ub( _shader_vblend.id, 2 ); + bind_terrain_textures(); + + shader_vblend_uPv( projection ); + shader_vblend_uMdl( identity_matrix ); + shader_vblend_uCamera( camera ); + + scene_bind( &world.props ); + scene_draw( &world.props ); +} + +static void render_terrain( m4x4f projection, v3f camera ) +{ + m4x3f identity_matrix; + m4x3_identity( identity_matrix ); + + shader_terrain_use(); + shader_terrain_uTexGarbage(0); + shader_terrain_uTexGradients(1); + shader_link_standard_ub( _shader_terrain.id, 2 ); + bind_terrain_textures(); + + shader_terrain_uPv( projection ); + shader_terrain_uMdl( identity_matrix ); + shader_terrain_uCamera( camera ); + + scene_bind( &world.geo ); + scene_draw( &world.geo ); + + glDisable(GL_CULL_FACE); + scene_bind( &world.foliage ); + scene_draw( &world.foliage ); + glEnable(GL_CULL_FACE); +} + +static void render_lowerdome( m4x3f camera ) +{ + m4x4f projection, full; + pipeline_projection( projection, 0.4f, 1000.0f ); + + m4x3f inverse; + m3x3_transpose( camera, inverse ); + v3_copy((v3f){0.0f,0.0f,0.0f}, inverse[3]); + m4x3_expand( inverse, full ); + m4x4_mul( projection, full, full ); + + m4x3f identity_matrix; + m4x3_identity( identity_matrix ); + + shader_planeinf_use(); + shader_planeinf_uMdl(identity_matrix); + shader_planeinf_uPv(full); + shader_planeinf_uCamera(camera[3]); + shader_planeinf_uPlane( (v4f){0.0f,1.0f,0.0f, water_height()} ); + + submodel_draw( &world.dome_lower ); +} + +static void render_sky(m4x3f camera) +{ + m4x4f projection, full; + pipeline_projection( projection, 0.4f, 1000.0f ); + + m4x3f inverse; + m3x3_transpose( camera, inverse ); + v3_copy((v3f){0.0f,0.0f,0.0f}, inverse[3]); + m4x3_expand( inverse, full ); + m4x4_mul( projection, full, full ); + + m4x3f identity_matrix; + m4x3_identity( identity_matrix ); + + shader_sky_use(); + shader_sky_uMdl(identity_matrix); + shader_sky_uPv(full); + shader_sky_uTexGarbage(0); + shader_sky_uTime( vg_time ); + + vg_tex2d_bind( &tex_terrain_noise, 0 ); + + glDepthMask( GL_FALSE ); + glDisable( GL_DEPTH_TEST ); + + mesh_bind( &world.skydome ); + submodel_draw( &world.dome_upper ); + + glEnable( GL_DEPTH_TEST ); + glDepthMask( GL_TRUE ); +} + +static void render_world( m4x4f projection, m4x3f camera ) +{ + render_sky( camera ); + render_terrain( projection, camera[3] ); + /* render props... */ +} + +static void render_world_depth( m4x4f projection, m4x3f camera ) +{ + m4x3f identity_matrix; + m4x3_identity( identity_matrix ); + + shader_gpos_use(); + shader_gpos_uCamera( camera[3] ); + shader_gpos_uPv( projection ); + shader_gpos_uMdl( identity_matrix ); + + scene_bind( &world.geo ); + scene_draw( &world.geo ); + + glDisable(GL_CULL_FACE); + scene_bind( &world.foliage ); + scene_draw( &world.foliage ); + glEnable(GL_CULL_FACE); + + scene_bind( &world.props ); + scene_draw( &world.props ); } #endif /* WORLD_H */ -- 2.25.1