From 63fe317d7db724162561da52aa382c82ac3c29be Mon Sep 17 00:00:00 2001 From: hgn Date: Sun, 19 Nov 2023 02:36:27 +0000 Subject: [PATCH] mini world rendering adjustments --- blender_export.py | 7 +- build.c | 1 + ent_miniworld.c | 5 +- ent_miniworld.h | 2 +- entity.h | 3 +- maps_src/dev_hub/main.mdl | Bin 434648 -> 194664 bytes model.h | 2 +- player.c | 2 + respawn.c | 2 + shaders/common_world.glsl | 10 +- shaders/light_clearskies.glsl | 46 ++- shaders/model_board_view.h | 52 ++- shaders/model_character_view.h | 52 ++- shaders/model_entity.h | 52 ++- shaders/model_sky.h | 52 ++- shaders/model_sky_space.fs | 51 +++ shaders/model_sky_space.h | 505 +++++++++++++++++++++++++++++ shaders/scene_cubemapped.h | 52 ++- shaders/scene_depth.h | 52 ++- shaders/scene_font.h | 52 ++- shaders/scene_fxglow.h | 52 ++- shaders/scene_override.fs | 17 +- shaders/scene_override.h | 71 ++-- shaders/scene_override.vs | 2 +- shaders/scene_position.h | 52 ++- shaders/scene_route.h | 52 ++- shaders/scene_scoretext.h | 52 ++- shaders/scene_standard.h | 52 ++- shaders/scene_standard_alphatest.h | 52 ++- shaders/scene_terrain.h | 52 ++- shaders/scene_vertex_blend.h | 52 ++- shaders/scene_water.h | 52 ++- shaders/scene_water_fast.h | 52 ++- world.h | 5 + world_load.c | 9 +- world_render.c | 76 +++-- world_render.h | 5 +- 37 files changed, 1447 insertions(+), 258 deletions(-) create mode 100644 shaders/model_sky_space.fs create mode 100644 shaders/model_sky_space.h diff --git a/blender_export.py b/blender_export.py index 51b25dd..b4a501d 100644 --- a/blender_export.py +++ b/blender_export.py @@ -43,7 +43,7 @@ sr_entity_list = [ ('ent_miniworld', 'Mini World', '', 22 ) ] -MDL_VERSION_NR = 103 +MDL_VERSION_NR = 104 SR_TRIGGERABLE = [ 'ent_audio', 'ent_ccmd', 'ent_gate', 'ent_challenge', \ 'ent_relay', 'ent_skateshop', 'ent_objective', 'ent_route',\ 'ent_miniworld' ] @@ -469,7 +469,8 @@ class ent_worldinfo(Structure): _fields_ = [("pstr_name",c_uint32), ("pstr_author",c_uint32), # unused ("pstr_desc",c_uint32), # unused - ("timezone",c_float)] + ("timezone",c_float), + ("pstr_skybox",c_uint32)] #} class ent_ccmd(Structure): @@ -1889,6 +1890,7 @@ def sr_compile( collection ): worldinfo.pstr_author = sr_compile_string( obj_data.author ) worldinfo.pstr_desc = sr_compile_string( obj_data.desc ) worldinfo.timezone = obj_data.timezone + worldinfo.pstr_skybox = sr_compile_string( obj_data.skybox ) sr_ent_push( worldinfo ) #} elif ent_type == 'ent_ccmd':#{ @@ -3270,6 +3272,7 @@ class SR_OBJECT_ENT_WORLD_INFO(bpy.types.PropertyGroup): desc: bpy.props.StringProperty(name="Description") author: bpy.props.StringProperty(name="Author") timezone: bpy.props.FloatProperty(name="Timezone(hrs) (UTC0 +hrs)") + skybox: bpy.props.StringProperty(name="Skybox") #} class SR_OBJECT_ENT_CCMD(bpy.types.PropertyGroup): diff --git a/build.c b/build.c index 417c319..4cf3b34 100644 --- a/build.c +++ b/build.c @@ -260,6 +260,7 @@ void build_shaders(void){ /* Models */ _S( "model_sky", "model.vs", "model_sky.fs" ); + _S( "model_sky_space", "model.vs", "model_sky_space.fs" ); _S( "model_menu", "model.vs", "model_menu.fs" ); _S( "model_character_view", "model_skinned.vs", "model_character_view.fs" ); _S( "model_board_view", "model.vs", "model_character_view.fs" ); diff --git a/ent_miniworld.c b/ent_miniworld.c index 414b2f6..bc59d47 100644 --- a/ent_miniworld.c +++ b/ent_miniworld.c @@ -28,9 +28,12 @@ static void ent_miniworld_render( world_instance *host_world ){ if( miniworld->purpose == k_world_purpose_invalid ) return; + world_instance *dest_world = &world_static.instances[miniworld->purpose]; + + m4x3f mmdl; mdl_transform_m4x3( &miniworld->transform, mmdl ); - render_world_override( &world_static.instances[miniworld->purpose], mmdl ); + render_world_override( dest_world, host_world, mmdl ); //render_world_routes( , &skaterift.cam, 1 ); } diff --git a/ent_miniworld.h b/ent_miniworld.h index 693a157..73b660e 100644 --- a/ent_miniworld.h +++ b/ent_miniworld.h @@ -4,7 +4,7 @@ #include "entity.h" struct { - u32 active_id; /* TODO: world references in entity ID */ + u32 active_id; } static global_miniworld; diff --git a/entity.h b/entity.h index 72a6667..cab16c8 100644 --- a/entity.h +++ b/entity.h @@ -59,7 +59,7 @@ enum entity_alias{ }; static u32 mdl_entity_id_type( u32 entity_id ){ - return (entity_id & 0xffff0000) >> 16; + return (entity_id & 0x0fff0000) >> 16; } static u32 mdl_entity_id_id( u32 entity_id ){ @@ -373,6 +373,7 @@ struct ent_menuitem{ struct ent_worldinfo{ u32 pstr_name, pstr_author, pstr_desc; f32 timezone; + u32 pstr_skybox; }; static ent_marker *ent_find_marker( mdl_context *mdl, diff --git a/maps_src/dev_hub/main.mdl b/maps_src/dev_hub/main.mdl index 4925d9f0420bbe5f0aa0d438dda104c62619b102..106e213105632022dc9de5da022840c63e07cf74 100644 GIT binary patch delta 64877 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 z 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 J`Ss?P{{bzJ^q2qu diff --git a/model.h b/model.h index dae6038..da01223 100644 --- a/model.h +++ b/model.h @@ -8,7 +8,7 @@ #include "skaterift.h" #define MDL_VERSION_MIN 101 -#define MDL_VERSION_NR 103 +#define MDL_VERSION_NR 104 enum mdl_shader{ k_shader_standard = 0, diff --git a/player.c b/player.c index b1788c6..348bb74 100644 --- a/player.c +++ b/player.c @@ -11,6 +11,7 @@ #include "network.h" #include "network_common.h" #include "world_routes.h" +#include "ent_miniworld.h" static int localplayer_cmd_respawn( int argc, const char *argv[] ){ ent_spawn *rp = NULL, *r; @@ -250,6 +251,7 @@ static void player__reset(void){ world_static.focused_entity = 0; world_static.active_trigger_volume_count = 0; world_static.last_use = 0.0; + global_miniworld.active_id = 0; world_entity_unfocus(); localplayer.boundary_hash ^= NETMSG_BOUNDARY_BIT; diff --git a/respawn.c b/respawn.c index df1c66b..084844d 100644 --- a/respawn.c +++ b/respawn.c @@ -247,6 +247,7 @@ static void respawn_begin_chooser(void){ vg_strcat( &text, "home" ); } +#if 0 static void respawn_chooser_shader_uniforms(void){ v4f uPlayerPos, uSpawnPos; v4_zero( uPlayerPos ); @@ -263,5 +264,6 @@ static void respawn_chooser_shader_uniforms(void){ shader_scene_override_uPlayerPos( uPlayerPos ); shader_scene_override_uSpawnPos( uSpawnPos ); } +#endif #endif /* RESPAWN_C */ diff --git a/shaders/common_world.glsl b/shaders/common_world.glsl index b734743..0bc4e7b 100644 --- a/shaders/common_world.glsl +++ b/shaders/common_world.glsl @@ -89,19 +89,11 @@ float newlight_specular( vec3 wnormal, vec3 dir, vec3 halfview, float exponent ) return pow(max(dot( halfview, specdir ), 0.0), exponent); } -vec3 scene_apply_fog( vec3 vfrag, vec3 colour, float fdist ) -{ +vec3 scene_apply_fog( vec3 vfrag, vec3 colour, float fdist ){ float dist = pow(fdist*0.0010,0.78); return mix( vfrag, colour, min( 1.0, dist ) ); } -vec3 rand33(vec3 p3) -{ - p3 = fract(p3 * vec3(.1031, .1030, .0973)); - p3 += dot(p3, p3.yxz+33.33); - return fract((p3.xxy + p3.yxx)*p3.zyx); -} - vec3 scene_calculate_light( int light_index, vec3 halfview, vec3 co, vec3 normal ) { diff --git a/shaders/light_clearskies.glsl b/shaders/light_clearskies.glsl index 5b97f97..0af3be0 100644 --- a/shaders/light_clearskies.glsl +++ b/shaders/light_clearskies.glsl @@ -6,7 +6,7 @@ //const vec3 SUN_COLOUR = vec3( 1.10, 0.89, 0.35 ); const float SUN_ANGLE = 0.0001; -const float PI = 3.14159265; +const float PI = 3.14159265358979323846264; //struct world_info //{ @@ -18,6 +18,37 @@ const float PI = 3.14159265; // vec3 sun_dir; //}; +vec3 rand33(vec3 p3) +{ + p3 = fract(p3 * vec3(.1031, .1030, .0973)); + p3 += dot(p3, p3.yxz+33.33); + return fract((p3.xxy + p3.yxx)*p3.zyx); +} + +float stars( vec3 rd, float rr, float size ){ + vec3 co = rd * rr; + + float a = atan(co.y, length(co.xz)) + 4.0 * PI; + + float spaces = 1.0 / rr; + size = (rr * 0.0015) * fwidth(a) * 1000.0 * size; + a -= mod(a, spaces) - spaces * 0.5; + + float count = floor(sqrt(pow(rr, 2.0) * (1.0 - pow(sin(a), 2.0))) * 3.0); + + float plane = atan(co.z, co.x) + 4.0 * PI; + plane = plane - mod(plane, PI / count); + + vec2 delta = rand33(vec3(plane, a, 0.0)).xy; + + float level = sin(a + spaces * (delta.y - 0.5) * (1.0 - size)) * rr; + float ydist = sqrt(rr * rr - level * level); + float angle = plane + (PI * (delta.x * (1.0-size) + size * 0.5) / count); + vec3 center = vec3(cos(angle) * ydist, level, sin(angle) * ydist); + float star = smoothstep(size, 0.0, distance(center, co)); + return star; +} + float luminance( vec3 v ) { return dot( v, vec3(0.2126, 0.7152, 0.0722) ); @@ -52,8 +83,19 @@ vec3 clearskies_sky( vec3 ray_dir ) vec3 sun_colour = mix( vec3(1.0), g_sunset_colour.rgb, g_sunset_phase*0.5 ); sun_colour *= sun_shape; + + + float star = 0.0; + float star_blend = 10.0*max(0.0,(1.0-g_day_phase*2.0)); + + if( star_blend > 0.001 ){ + for( float j = 1.0; j <= 4.1; j += 1.0 ){ + float m = mix(0.6, 0.9, smoothstep(1.0, 2.0, j)); + star += stars( ray_dir, 1.94 * pow( 1.64, j ), m ) * (1.0/pow(4.0, j)); + } + } - vec3 composite = sky_colour + sun_colour; + vec3 composite = sky_colour + sun_colour + star*star_blend; return composite; } diff --git a/shaders/model_board_view.h b/shaders/model_board_view.h index 3f08cf0..19e3b2c 100644 --- a/shaders/model_board_view.h +++ b/shaders/model_board_view.h @@ -127,7 +127,7 @@ static struct vg_shader _shader_model_board_view = { "//const vec3 SUN_COLOUR = vec3( 1.10, 0.89, 0.35 );\n" "\n" "const float SUN_ANGLE = 0.0001;\n" -"const float PI = 3.14159265;\n" +"const float PI = 3.14159265358979323846264;\n" "\n" "//struct world_info\n" "//{\n" @@ -139,6 +139,37 @@ static struct vg_shader _shader_model_board_view = { "// vec3 sun_dir;\n" "//};\n" "\n" +"vec3 rand33(vec3 p3)\n" +"{\n" +" p3 = fract(p3 * vec3(.1031, .1030, .0973));\n" +" p3 += dot(p3, p3.yxz+33.33);\n" +" return fract((p3.xxy + p3.yxx)*p3.zyx);\n" +"}\n" +"\n" +"float stars( vec3 rd, float rr, float size ){\n" +" vec3 co = rd * rr;\n" +"\n" +" float a = atan(co.y, length(co.xz)) + 4.0 * PI;\n" +"\n" +" float spaces = 1.0 / rr;\n" +" size = (rr * 0.0015) * fwidth(a) * 1000.0 * size;\n" +" a -= mod(a, spaces) - spaces * 0.5;\n" +"\n" +" float count = floor(sqrt(pow(rr, 2.0) * (1.0 - pow(sin(a), 2.0))) * 3.0);\n" +" \n" +" float plane = atan(co.z, co.x) + 4.0 * PI;\n" +" plane = plane - mod(plane, PI / count);\n" +"\n" +" vec2 delta = rand33(vec3(plane, a, 0.0)).xy;\n" +"\n" +" float level = sin(a + spaces * (delta.y - 0.5) * (1.0 - size)) * rr;\n" +" float ydist = sqrt(rr * rr - level * level);\n" +" float angle = plane + (PI * (delta.x * (1.0-size) + size * 0.5) / count);\n" +" vec3 center = vec3(cos(angle) * ydist, level, sin(angle) * ydist);\n" +" float star = smoothstep(size, 0.0, distance(center, co));\n" +" return star;\n" +"}\n" +"\n" "float luminance( vec3 v )\n" "{\n" " return dot( v, vec3(0.2126, 0.7152, 0.0722) );\n" @@ -173,8 +204,15 @@ static struct vg_shader _shader_model_board_view = { " \n" " vec3 sun_colour = mix( vec3(1.0), g_sunset_colour.rgb, g_sunset_phase*0.5 );\n" " sun_colour *= sun_shape;\n" +"\n" +"\n" +" float star = 0.0;\n" +" for( float j = 1.0; j <= 4.1; j += 1.0 ){\n" +" float m = mix(0.6, 0.9, smoothstep(1.0, 2.0, j));\n" +" star += stars( ray_dir, 1.94 * pow( 1.64, j ), m ) * (1.0 / pow(4.0, j));\n" +" }\n" " \n" -" vec3 composite = sky_colour + sun_colour;\n" +" vec3 composite = sky_colour + sun_colour + star*10.0*max(0.0,(1.0-g_day_phase*2.0));\n" " return composite;\n" "}\n" "\n" @@ -245,19 +283,11 @@ static struct vg_shader _shader_model_board_view = { " return pow(max(dot( halfview, specdir ), 0.0), exponent);\n" "}\n" "\n" -"vec3 scene_apply_fog( vec3 vfrag, vec3 colour, float fdist )\n" -"{\n" +"vec3 scene_apply_fog( vec3 vfrag, vec3 colour, float fdist ){\n" " float dist = pow(fdist*0.0010,0.78);\n" " return mix( vfrag, colour, min( 1.0, dist ) );\n" "}\n" "\n" -"vec3 rand33(vec3 p3)\n" -"{\n" -" p3 = fract(p3 * vec3(.1031, .1030, .0973));\n" -" p3 += dot(p3, p3.yxz+33.33);\n" -" return fract((p3.xxy + p3.yxx)*p3.zyx);\n" -"}\n" -"\n" "vec3 scene_calculate_light( int light_index, \n" " vec3 halfview, vec3 co, vec3 normal )\n" "{\n" diff --git a/shaders/model_character_view.h b/shaders/model_character_view.h index bbfee78..03df443 100644 --- a/shaders/model_character_view.h +++ b/shaders/model_character_view.h @@ -135,7 +135,7 @@ static struct vg_shader _shader_model_character_view = { "//const vec3 SUN_COLOUR = vec3( 1.10, 0.89, 0.35 );\n" "\n" "const float SUN_ANGLE = 0.0001;\n" -"const float PI = 3.14159265;\n" +"const float PI = 3.14159265358979323846264;\n" "\n" "//struct world_info\n" "//{\n" @@ -147,6 +147,37 @@ static struct vg_shader _shader_model_character_view = { "// vec3 sun_dir;\n" "//};\n" "\n" +"vec3 rand33(vec3 p3)\n" +"{\n" +" p3 = fract(p3 * vec3(.1031, .1030, .0973));\n" +" p3 += dot(p3, p3.yxz+33.33);\n" +" return fract((p3.xxy + p3.yxx)*p3.zyx);\n" +"}\n" +"\n" +"float stars( vec3 rd, float rr, float size ){\n" +" vec3 co = rd * rr;\n" +"\n" +" float a = atan(co.y, length(co.xz)) + 4.0 * PI;\n" +"\n" +" float spaces = 1.0 / rr;\n" +" size = (rr * 0.0015) * fwidth(a) * 1000.0 * size;\n" +" a -= mod(a, spaces) - spaces * 0.5;\n" +"\n" +" float count = floor(sqrt(pow(rr, 2.0) * (1.0 - pow(sin(a), 2.0))) * 3.0);\n" +" \n" +" float plane = atan(co.z, co.x) + 4.0 * PI;\n" +" plane = plane - mod(plane, PI / count);\n" +"\n" +" vec2 delta = rand33(vec3(plane, a, 0.0)).xy;\n" +"\n" +" float level = sin(a + spaces * (delta.y - 0.5) * (1.0 - size)) * rr;\n" +" float ydist = sqrt(rr * rr - level * level);\n" +" float angle = plane + (PI * (delta.x * (1.0-size) + size * 0.5) / count);\n" +" vec3 center = vec3(cos(angle) * ydist, level, sin(angle) * ydist);\n" +" float star = smoothstep(size, 0.0, distance(center, co));\n" +" return star;\n" +"}\n" +"\n" "float luminance( vec3 v )\n" "{\n" " return dot( v, vec3(0.2126, 0.7152, 0.0722) );\n" @@ -181,8 +212,15 @@ static struct vg_shader _shader_model_character_view = { " \n" " vec3 sun_colour = mix( vec3(1.0), g_sunset_colour.rgb, g_sunset_phase*0.5 );\n" " sun_colour *= sun_shape;\n" +"\n" +"\n" +" float star = 0.0;\n" +" for( float j = 1.0; j <= 4.1; j += 1.0 ){\n" +" float m = mix(0.6, 0.9, smoothstep(1.0, 2.0, j));\n" +" star += stars( ray_dir, 1.94 * pow( 1.64, j ), m ) * (1.0 / pow(4.0, j));\n" +" }\n" " \n" -" vec3 composite = sky_colour + sun_colour;\n" +" vec3 composite = sky_colour + sun_colour + star*10.0*max(0.0,(1.0-g_day_phase*2.0));\n" " return composite;\n" "}\n" "\n" @@ -253,19 +291,11 @@ static struct vg_shader _shader_model_character_view = { " return pow(max(dot( halfview, specdir ), 0.0), exponent);\n" "}\n" "\n" -"vec3 scene_apply_fog( vec3 vfrag, vec3 colour, float fdist )\n" -"{\n" +"vec3 scene_apply_fog( vec3 vfrag, vec3 colour, float fdist ){\n" " float dist = pow(fdist*0.0010,0.78);\n" " return mix( vfrag, colour, min( 1.0, dist ) );\n" "}\n" "\n" -"vec3 rand33(vec3 p3)\n" -"{\n" -" p3 = fract(p3 * vec3(.1031, .1030, .0973));\n" -" p3 += dot(p3, p3.yxz+33.33);\n" -" return fract((p3.xxy + p3.yxx)*p3.zyx);\n" -"}\n" -"\n" "vec3 scene_calculate_light( int light_index, \n" " vec3 halfview, vec3 co, vec3 normal )\n" "{\n" diff --git a/shaders/model_entity.h b/shaders/model_entity.h index 581cbff..585c897 100644 --- a/shaders/model_entity.h +++ b/shaders/model_entity.h @@ -127,7 +127,7 @@ static struct vg_shader _shader_model_entity = { "//const vec3 SUN_COLOUR = vec3( 1.10, 0.89, 0.35 );\n" "\n" "const float SUN_ANGLE = 0.0001;\n" -"const float PI = 3.14159265;\n" +"const float PI = 3.14159265358979323846264;\n" "\n" "//struct world_info\n" "//{\n" @@ -139,6 +139,37 @@ static struct vg_shader _shader_model_entity = { "// vec3 sun_dir;\n" "//};\n" "\n" +"vec3 rand33(vec3 p3)\n" +"{\n" +" p3 = fract(p3 * vec3(.1031, .1030, .0973));\n" +" p3 += dot(p3, p3.yxz+33.33);\n" +" return fract((p3.xxy + p3.yxx)*p3.zyx);\n" +"}\n" +"\n" +"float stars( vec3 rd, float rr, float size ){\n" +" vec3 co = rd * rr;\n" +"\n" +" float a = atan(co.y, length(co.xz)) + 4.0 * PI;\n" +"\n" +" float spaces = 1.0 / rr;\n" +" size = (rr * 0.0015) * fwidth(a) * 1000.0 * size;\n" +" a -= mod(a, spaces) - spaces * 0.5;\n" +"\n" +" float count = floor(sqrt(pow(rr, 2.0) * (1.0 - pow(sin(a), 2.0))) * 3.0);\n" +" \n" +" float plane = atan(co.z, co.x) + 4.0 * PI;\n" +" plane = plane - mod(plane, PI / count);\n" +"\n" +" vec2 delta = rand33(vec3(plane, a, 0.0)).xy;\n" +"\n" +" float level = sin(a + spaces * (delta.y - 0.5) * (1.0 - size)) * rr;\n" +" float ydist = sqrt(rr * rr - level * level);\n" +" float angle = plane + (PI * (delta.x * (1.0-size) + size * 0.5) / count);\n" +" vec3 center = vec3(cos(angle) * ydist, level, sin(angle) * ydist);\n" +" float star = smoothstep(size, 0.0, distance(center, co));\n" +" return star;\n" +"}\n" +"\n" "float luminance( vec3 v )\n" "{\n" " return dot( v, vec3(0.2126, 0.7152, 0.0722) );\n" @@ -173,8 +204,15 @@ static struct vg_shader _shader_model_entity = { " \n" " vec3 sun_colour = mix( vec3(1.0), g_sunset_colour.rgb, g_sunset_phase*0.5 );\n" " sun_colour *= sun_shape;\n" +"\n" +"\n" +" float star = 0.0;\n" +" for( float j = 1.0; j <= 4.1; j += 1.0 ){\n" +" float m = mix(0.6, 0.9, smoothstep(1.0, 2.0, j));\n" +" star += stars( ray_dir, 1.94 * pow( 1.64, j ), m ) * (1.0 / pow(4.0, j));\n" +" }\n" " \n" -" vec3 composite = sky_colour + sun_colour;\n" +" vec3 composite = sky_colour + sun_colour + star*10.0*max(0.0,(1.0-g_day_phase*2.0));\n" " return composite;\n" "}\n" "\n" @@ -245,19 +283,11 @@ static struct vg_shader _shader_model_entity = { " return pow(max(dot( halfview, specdir ), 0.0), exponent);\n" "}\n" "\n" -"vec3 scene_apply_fog( vec3 vfrag, vec3 colour, float fdist )\n" -"{\n" +"vec3 scene_apply_fog( vec3 vfrag, vec3 colour, float fdist ){\n" " float dist = pow(fdist*0.0010,0.78);\n" " return mix( vfrag, colour, min( 1.0, dist ) );\n" "}\n" "\n" -"vec3 rand33(vec3 p3)\n" -"{\n" -" p3 = fract(p3 * vec3(.1031, .1030, .0973));\n" -" p3 += dot(p3, p3.yxz+33.33);\n" -" return fract((p3.xxy + p3.yxx)*p3.zyx);\n" -"}\n" -"\n" "vec3 scene_calculate_light( int light_index, \n" " vec3 halfview, vec3 co, vec3 normal )\n" "{\n" diff --git a/shaders/model_sky.h b/shaders/model_sky.h index 9d2131e..882e174 100644 --- a/shaders/model_sky.h +++ b/shaders/model_sky.h @@ -129,7 +129,7 @@ static struct vg_shader _shader_model_sky = { "//const vec3 SUN_COLOUR = vec3( 1.10, 0.89, 0.35 );\n" "\n" "const float SUN_ANGLE = 0.0001;\n" -"const float PI = 3.14159265;\n" +"const float PI = 3.14159265358979323846264;\n" "\n" "//struct world_info\n" "//{\n" @@ -141,6 +141,37 @@ static struct vg_shader _shader_model_sky = { "// vec3 sun_dir;\n" "//};\n" "\n" +"vec3 rand33(vec3 p3)\n" +"{\n" +" p3 = fract(p3 * vec3(.1031, .1030, .0973));\n" +" p3 += dot(p3, p3.yxz+33.33);\n" +" return fract((p3.xxy + p3.yxx)*p3.zyx);\n" +"}\n" +"\n" +"float stars( vec3 rd, float rr, float size ){\n" +" vec3 co = rd * rr;\n" +"\n" +" float a = atan(co.y, length(co.xz)) + 4.0 * PI;\n" +"\n" +" float spaces = 1.0 / rr;\n" +" size = (rr * 0.0015) * fwidth(a) * 1000.0 * size;\n" +" a -= mod(a, spaces) - spaces * 0.5;\n" +"\n" +" float count = floor(sqrt(pow(rr, 2.0) * (1.0 - pow(sin(a), 2.0))) * 3.0);\n" +" \n" +" float plane = atan(co.z, co.x) + 4.0 * PI;\n" +" plane = plane - mod(plane, PI / count);\n" +"\n" +" vec2 delta = rand33(vec3(plane, a, 0.0)).xy;\n" +"\n" +" float level = sin(a + spaces * (delta.y - 0.5) * (1.0 - size)) * rr;\n" +" float ydist = sqrt(rr * rr - level * level);\n" +" float angle = plane + (PI * (delta.x * (1.0-size) + size * 0.5) / count);\n" +" vec3 center = vec3(cos(angle) * ydist, level, sin(angle) * ydist);\n" +" float star = smoothstep(size, 0.0, distance(center, co));\n" +" return star;\n" +"}\n" +"\n" "float luminance( vec3 v )\n" "{\n" " return dot( v, vec3(0.2126, 0.7152, 0.0722) );\n" @@ -175,8 +206,15 @@ static struct vg_shader _shader_model_sky = { " \n" " vec3 sun_colour = mix( vec3(1.0), g_sunset_colour.rgb, g_sunset_phase*0.5 );\n" " sun_colour *= sun_shape;\n" +"\n" +"\n" +" float star = 0.0;\n" +" for( float j = 1.0; j <= 4.1; j += 1.0 ){\n" +" float m = mix(0.6, 0.9, smoothstep(1.0, 2.0, j));\n" +" star += stars( ray_dir, 1.94 * pow( 1.64, j ), m ) * (1.0 / pow(4.0, j));\n" +" }\n" " \n" -" vec3 composite = sky_colour + sun_colour;\n" +" vec3 composite = sky_colour + sun_colour + star*10.0*max(0.0,(1.0-g_day_phase*2.0));\n" " return composite;\n" "}\n" "\n" @@ -247,19 +285,11 @@ static struct vg_shader _shader_model_sky = { " return pow(max(dot( halfview, specdir ), 0.0), exponent);\n" "}\n" "\n" -"vec3 scene_apply_fog( vec3 vfrag, vec3 colour, float fdist )\n" -"{\n" +"vec3 scene_apply_fog( vec3 vfrag, vec3 colour, float fdist ){\n" " float dist = pow(fdist*0.0010,0.78);\n" " return mix( vfrag, colour, min( 1.0, dist ) );\n" "}\n" "\n" -"vec3 rand33(vec3 p3)\n" -"{\n" -" p3 = fract(p3 * vec3(.1031, .1030, .0973));\n" -" p3 += dot(p3, p3.yxz+33.33);\n" -" return fract((p3.xxy + p3.yxx)*p3.zyx);\n" -"}\n" -"\n" "vec3 scene_calculate_light( int light_index, \n" " vec3 halfview, vec3 co, vec3 normal )\n" "{\n" diff --git a/shaders/model_sky_space.fs b/shaders/model_sky_space.fs new file mode 100644 index 0000000..442e97e --- /dev/null +++ b/shaders/model_sky_space.fs @@ -0,0 +1,51 @@ +uniform sampler2D uTexGarbage; + +in vec4 aColour; +in vec2 aUv; +in vec3 aNorm; +in vec3 aCo; +in vec3 aWorldCo; + +// Spooky! +const vec3 uCamera = vec3(0.0); + +#include "common_world.glsl" +#include "motion_vectors_fs.glsl" + +float stars1( vec3 rd, float rr, float size ){ + vec3 co = rd * rr; + + float a = atan(co.y, length(co.xz)) + 4.0 * PI; + + float spaces = 1.0 / rr; + size = (rr * 0.0015) * fwidth(a) * 1000.0 * size; + a -= mod(a, spaces) - spaces * 0.5; + + float count = floor(sqrt(pow(rr, 2.0) * (1.0 - pow(sin(a), 2.0))) * 3.0); + + float plane = atan(co.z, co.x) + 4.0 * PI; + plane = plane - mod(plane, PI / count); + + vec2 delta = rand33(vec3(plane, a, 0.0)).xy; + + float level = sin(a + spaces * (delta.y - 0.5) * (1.0 - size)) * rr; + float ydist = sqrt(rr * rr - level * level); + float angle = plane + (PI * (delta.x * (1.0-size) + size * 0.5) / count); + vec3 center = vec3(cos(angle) * ydist, level, sin(angle) * ydist); + float star = smoothstep(size, 0.0, distance(center, co)); + return star; +} + +void main(){ + compute_motion_vectors(); + + vec3 rd = -normalize(aNorm); + + float star = 0.0; + for( float j = 1.0; j <= 4.1; j += 1.0 ){ + float m = mix(0.6, 0.9, smoothstep(1.0, 2.0, j)); + star += stars( rd, 1.94 * pow( 1.64, j ), m ) * (1.0 / pow(4.0, j)); + } + + oColour = vec4( vec3(star*20.0), 1.0); +} diff --git a/shaders/model_sky_space.h b/shaders/model_sky_space.h new file mode 100644 index 0000000..7251196 --- /dev/null +++ b/shaders/model_sky_space.h @@ -0,0 +1,505 @@ +#ifndef SHADER_model_sky_space_H +#define SHADER_model_sky_space_H +static void shader_model_sky_space_link(void); +static void shader_model_sky_space_register(void); +static struct vg_shader _shader_model_sky_space = { + .name = "model_sky_space", + .link = shader_model_sky_space_link, + .vs = +{ +.orig_file = "shaders/model.vs", +.static_src = +"layout (location=0) in vec3 a_co;\n" +"layout (location=1) in vec3 a_norm;\n" +"layout (location=2) in vec2 a_uv;\n" +"layout (location=3) in vec4 a_colour;\n" +"layout (location=4) in vec4 a_weights;\n" +"layout (location=5) in ivec4 a_groups;\n" +"\n" +"#line 1 1 \n" +"const float k_motion_lerp_amount = 0.01;\n" +"\n" +"#line 2 0 \n" +"\n" +"out vec3 aMotionVec0;\n" +"out vec3 aMotionVec1;\n" +"\n" +"void vs_motion_out( vec4 vproj0, vec4 vproj1 )\n" +"{\n" +" // This magically solves some artifacting errors!\n" +" //\n" +" vproj1 = vproj0*(1.0-k_motion_lerp_amount) + vproj1*k_motion_lerp_amount;\n" +"\n" +" aMotionVec0 = vec3( vproj0.xy, vproj0.w );\n" +" aMotionVec1 = vec3( vproj1.xy, vproj1.w );\n" +"}\n" +"\n" +"#line 9 0 \n" +"\n" +"uniform mat4x3 uMdl;\n" +"uniform mat4 uPv;\n" +"uniform mat4 uPvmPrev;\n" +"\n" +"out vec4 aColour;\n" +"out vec2 aUv;\n" +"out vec3 aNorm;\n" +"out vec3 aCo;\n" +"out vec3 aWorldCo;\n" +"\n" +"void main()\n" +"{\n" +" vec3 world_pos0 = uMdl * vec4( a_co, 1.0 );\n" +" vec4 vproj0 = uPv * vec4( world_pos0, 1.0 );\n" +" vec4 vproj1 = uPvmPrev * vec4( a_co, 1.0 );\n" +"\n" +" vs_motion_out( vproj0, vproj1 );\n" +"\n" +" gl_Position = vproj0;\n" +" aWorldCo = world_pos0;\n" +" aColour = a_colour;\n" +" aUv = a_uv;\n" +" aNorm = mat3(uMdl) * a_norm;\n" +" aCo = a_co;\n" +"}\n" +""}, + .fs = +{ +.orig_file = "shaders/model_sky_space.fs", +.static_src = +"uniform sampler2D uTexGarbage;\n" +"\n" +"in vec4 aColour;\n" +"in vec2 aUv;\n" +"in vec3 aNorm;\n" +"in vec3 aCo;\n" +"in vec3 aWorldCo;\n" +"\n" +"// Spooky!\n" +"const vec3 uCamera = vec3(0.0);\n" +"\n" +"#line 1 1 \n" +"layout (location = 0) out vec4 oColour;\n" +"\n" +"// OpenGL wiki: Recommends do not use vec3 because of drivers. hence the v4s...\n" +"layout (std140) uniform ub_world_lighting\n" +"{\n" +" vec4 g_cube_min;\n" +" vec4 g_cube_inv_range;\n" +"\n" +" vec4 g_water_plane;\n" +" vec4 g_depth_bounds;\n" +"\n" +" vec4 g_daysky_colour;\n" +" vec4 g_nightsky_colour;\n" +" vec4 g_sunset_colour;\n" +" vec4 g_ambient_colour;\n" +" vec4 g_sunset_ambient;\n" +" vec4 g_sun_colour;\n" +" vec4 g_sun_dir;\n" +" vec4 g_board_0;\n" +" vec4 g_board_1;\n" +"\n" +" float g_water_fog;\n" +" float g_time;\n" +" float g_realtime;\n" +" float g_shadow_length;\n" +" float g_shadow_spread;\n" +"\n" +" float g_time_of_day;\n" +" float g_day_phase;\n" +" float g_sunset_phase;\n" +"\n" +" int g_light_preview;\n" +" int g_shadow_samples;\n" +"\n" +" int g_debug_indices;\n" +" int g_debug_complexity;\n" +"};\n" +"\n" +"uniform sampler2D g_world_depth;\n" +"uniform samplerBuffer uLightsArray;\n" +"uniform usampler3D uLightsIndex;\n" +"\n" +"#line 1 1 \n" +"//const vec3 DAYSKY_COLOUR = vec3( 0.37, 0.54, 0.97 );\n" +"//const vec3 NIGHTSKY_COLOUR = vec3( 0.03, 0.05, 0.20 );\n" +"//const vec3 SUNSET_COLOUR = vec3( 1.00, 0.32, 0.01 );\n" +"//const vec3 AMBIENT_COLOUR = vec3( 0.13, 0.17, 0.35 );\n" +"//const vec3 SUNSET_AMBIENT = vec3( 0.25, 0.17, 0.51 );\n" +"//const vec3 SUN_COLOUR = vec3( 1.10, 0.89, 0.35 );\n" +"\n" +"const float SUN_ANGLE = 0.0001;\n" +"const float PI = 3.14159265358979323846264;\n" +"\n" +"//struct world_info\n" +"//{\n" +"// float time,\n" +"// time_of_day,\n" +"// day_phase,\n" +"// sunset_phase;\n" +"// \n" +"// vec3 sun_dir;\n" +"//};\n" +"\n" +"vec3 rand33(vec3 p3)\n" +"{\n" +" p3 = fract(p3 * vec3(.1031, .1030, .0973));\n" +" p3 += dot(p3, p3.yxz+33.33);\n" +" return fract((p3.xxy + p3.yxx)*p3.zyx);\n" +"}\n" +"\n" +"float stars( vec3 rd, float rr, float size ){\n" +" vec3 co = rd * rr;\n" +"\n" +" float a = atan(co.y, length(co.xz)) + 4.0 * PI;\n" +"\n" +" float spaces = 1.0 / rr;\n" +" size = (rr * 0.0015) * fwidth(a) * 1000.0 * size;\n" +" a -= mod(a, spaces) - spaces * 0.5;\n" +"\n" +" float count = floor(sqrt(pow(rr, 2.0) * (1.0 - pow(sin(a), 2.0))) * 3.0);\n" +" \n" +" float plane = atan(co.z, co.x) + 4.0 * PI;\n" +" plane = plane - mod(plane, PI / count);\n" +"\n" +" vec2 delta = rand33(vec3(plane, a, 0.0)).xy;\n" +"\n" +" float level = sin(a + spaces * (delta.y - 0.5) * (1.0 - size)) * rr;\n" +" float ydist = sqrt(rr * rr - level * level);\n" +" float angle = plane + (PI * (delta.x * (1.0-size) + size * 0.5) / count);\n" +" vec3 center = vec3(cos(angle) * ydist, level, sin(angle) * ydist);\n" +" float star = smoothstep(size, 0.0, distance(center, co));\n" +" return star;\n" +"}\n" +"\n" +"float luminance( vec3 v )\n" +"{\n" +" return dot( v, vec3(0.2126, 0.7152, 0.0722) );\n" +"}\n" +"\n" +"vec3 clearskies_ambient( vec3 dir )\n" +"{\n" +" float sun_azimuth = g_sunset_phase * (dot( dir.xz, g_sun_dir.xz )*0.4+0.6);\n" +" float sky_gradient = dir.y;\n" +" \n" +" /* Blend phase colours */\n" +" vec3 ambient = g_daysky_colour.rgb * (g_day_phase-g_sunset_phase*0.1);\n" +" ambient += g_sunset_colour.rgb * (1.0-dir.y*0.5)*sun_azimuth;\n" +" ambient += g_nightsky_colour.rgb * (1.0-g_day_phase);\n" +" \n" +" /* Add gradient */\n" +" ambient -= sky_gradient * luminance(ambient);\n" +" \n" +" return ambient;\n" +"}\n" +"\n" +"vec3 clearskies_sky( vec3 ray_dir )\n" +"{\n" +" ray_dir.y = abs( ray_dir.y );\n" +" vec3 sky_colour = clearskies_ambient( ray_dir );\n" +" \n" +" /* Sun */\n" +" float sun_theta = dot( ray_dir, g_sun_dir.xyz );\n" +" float sun_size = max( 0.0, sun_theta * 0.5 + 0.5 + SUN_ANGLE );\n" +" float sun_shape = pow( sun_size, 2000.0 );\n" +" sun_shape += sun_size * max(g_sun_dir.y,0.0) * 0.5;\n" +" \n" +" vec3 sun_colour = mix( vec3(1.0), g_sunset_colour.rgb, g_sunset_phase*0.5 );\n" +" sun_colour *= sun_shape;\n" +"\n" +"\n" +" float star = 0.0;\n" +" for( float j = 1.0; j <= 4.1; j += 1.0 ){\n" +" float m = mix(0.6, 0.9, smoothstep(1.0, 2.0, j));\n" +" star += stars( ray_dir, 1.94 * pow( 1.64, j ), m ) * (1.0 / pow(4.0, j));\n" +" }\n" +" \n" +" vec3 composite = sky_colour + sun_colour + star*10.0*max(0.0,(1.0-g_day_phase*2.0));\n" +" return composite;\n" +"}\n" +"\n" +"vec3 clearskies_lighting( vec3 normal, float shadow, vec3 halfview )\n" +"{\n" +" float fresnel = 1.0 - abs(dot(normal,halfview));\n" +"\n" +" vec3 reflect_colour = mix( g_daysky_colour.rgb, g_sunset_colour.rgb, \n" +" g_sunset_phase );\n" +"\n" +" vec3 sky_reflection = 0.5 * fresnel * reflect_colour;\n" +" vec3 light_sun = max(0.0,dot(normal,g_sun_dir.xyz)*0.75+0.25) \n" +" * g_sun_colour.rgb * g_day_phase;\n" +"\n" +" float scaled_shadow = max( shadow, 1.0 - max(g_sun_dir.y,0.0) );\n" +" vec3 ambient = mix( g_ambient_colour.rgb, g_sunset_ambient.rgb, \n" +" g_sunset_phase );\n" +"\n" +" return ambient + (light_sun + sky_reflection) * shadow;\n" +"}\n" +"\n" +"#line 44 0 \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 world_water_depth( vec3 pos )\n" +"{\n" +" float ref_depth = g_water_plane.y*g_water_plane.w;\n" +" return world_depth_sample( pos ) - ref_depth;\n" +"}\n" +"\n" +"float shadow_sample( vec3 co ){\n" +" float height_sample = world_depth_sample( co );\n" +"\n" +" float fdelta = height_sample - co.y;\n" +" return clamp( fdelta, 0.2, 0.4 )-0.2;\n" +"}\n" +"\n" +"float newlight_compute_sun_shadow( vec3 co, vec3 dir ){\n" +" if( g_shadow_samples == 0 ){\n" +" return 1.0;\n" +" }\n" +"\n" +" float fspread = g_shadow_spread;\n" +" float flength = g_shadow_length;\n" +"\n" +" float famt = 0.0;\n" +" famt += shadow_sample(co+(dir+vec3(-0.56,0.55, 0.30)*fspread)*flength*0.1);\n" +" famt += shadow_sample(co+(dir+vec3( 0.80,0.68, 0.34)*fspread)*flength*0.2);\n" +" famt += shadow_sample(co+(dir+vec3( 0.78,0.07,-0.06)*fspread)*flength*0.3);\n" +" famt += shadow_sample(co+(dir+vec3(-0.59,0.07,-0.42)*fspread)*flength*0.4);\n" +"\n" +" //famt+=shadow_sample(co+(dir+vec3(-0.790,-0.933,-0.875)*fspread)*flength*0.5);\n" +" //famt+=shadow_sample(co+(dir+vec3( 0.807,-0.690, 0.472)*fspread)*flength*0.6);\n" +" //famt+=shadow_sample(co+(dir+vec3( 0.522,-0.379, 0.350)*fspread)*flength*0.7);\n" +" //famt+=shadow_sample(co+(dir+vec3( 0.483, 0.201, 0.306)*fspread)*flength*0.8);\n" +"\n" +" return 1.0 - famt;\n" +"}\n" +"\n" +"float newlight_specular( vec3 wnormal, vec3 dir, vec3 halfview, float exponent )\n" +"{\n" +" vec3 specdir = reflect( -dir, wnormal );\n" +" return pow(max(dot( halfview, specdir ), 0.0), exponent);\n" +"}\n" +"\n" +"vec3 scene_apply_fog( vec3 vfrag, vec3 colour, float fdist ){\n" +" float dist = pow(fdist*0.0010,0.78);\n" +" return mix( vfrag, colour, min( 1.0, dist ) );\n" +"}\n" +"\n" +"vec3 scene_calculate_light( int light_index, \n" +" vec3 halfview, vec3 co, vec3 normal )\n" +"{\n" +" vec4 light_colour = texelFetch( uLightsArray, light_index+0 );\n" +" vec4 light_co = texelFetch( uLightsArray, light_index+1 );\n" +" vec4 light_dir = texelFetch( uLightsArray, light_index+2 );\n" +"\n" +" vec3 light_delta = light_co.xyz-co;\n" +" float dist2 = dot(light_delta,light_delta);\n" +"\n" +" light_delta = normalize( light_delta );\n" +"\n" +" float quadratic = dist2*100.0;\n" +" float attenuation = 1.0/( 1.0 + quadratic );\n" +" attenuation *= max( dot( light_delta, normal ), 0.0 );\n" +"\n" +" float falloff = max( 0.0, 1.0-(dist2*light_co.w) );\n" +"\n" +" if( light_dir.w < 0.999999 ){\n" +" float spot_theta = max( 0.0, dot( light_delta, -light_dir.xyz ) );\n" +" falloff *= max( 0.0, (spot_theta - light_dir.w) / (1.0-light_dir.w) );\n" +" }\n" +"\n" +" return light_colour.rgb * attenuation * falloff \n" +" * step( g_day_phase, light_colour.w );\n" +"}\n" +"\n" +"vec3 scene_calculate_packed_light_patch( uint packed_index, \n" +" vec3 halfview, vec3 co, vec3 normal )\n" +"{\n" +" uint light_count = packed_index & 0x3u;\n" +"\n" +" vec3 l = vec3(0.0);\n" +"\n" +" if( light_count >= 1u ){\n" +" int index_0 = int( ((packed_index >> 2u) & 0x3ffu) * 3u );\n" +" int index_1 = int( ((packed_index >> 12u) & 0x3ffu) * 3u );\n" +" int index_2 = int( ((packed_index >> 22u) & 0x3ffu) * 3u );\n" +"\n" +" l += scene_calculate_light( index_0, halfview, co, normal );\n" +"\n" +" if( light_count >= 2u ){\n" +" l += scene_calculate_light( index_1, halfview, co, normal );\n" +"\n" +" if( light_count >= 3u ){\n" +" l += scene_calculate_light( index_2, halfview, co, normal );\n" +" }\n" +" }\n" +" }\n" +"\n" +" return l;\n" +"}\n" +"\n" +"vec3 world_compute_lighting( vec3 diffuse, vec3 normal, vec3 co,\n" +" float light_mask )\n" +"{\n" +" if( g_light_preview == 1 )\n" +" diffuse = vec3(0.75);\n" +"\n" +" // Lighting\n" +" vec3 halfview = uCamera - co;\n" +" float fdist = length(halfview);\n" +" halfview /= fdist;\n" +"\n" +" float world_shadow = newlight_compute_sun_shadow( \n" +" co, g_sun_dir.xyz * (1.0/(max(g_sun_dir.y,0.0)+0.2)) );\n" +"\n" +" vec3 total_light = clearskies_lighting( \n" +" normal, min( light_mask, world_shadow ), halfview );\n" +"\n" +" vec3 cube_coord = (co - g_cube_min.xyz) * g_cube_inv_range.xyz;\n" +" cube_coord = floor( cube_coord );\n" +"\n" +" if( g_debug_indices == 1 )\n" +" {\n" +" return rand33(cube_coord);\n" +" }\n" +"\n" +" if( g_debug_complexity == 1 )\n" +" {\n" +" ivec3 coord = ivec3( cube_coord );\n" +" uvec4 index_sample = texelFetch( uLightsIndex, coord, 0 );\n" +"\n" +" uint light_count = (index_sample.x & 0x3u) + (index_sample.y & 0x3u);\n" +" return vec3( float(light_count)*(1.0/6.0), 0.0, 0.5 );\n" +" }\n" +"\n" +" // FIXME: this coord should absolutely must be clamped!\n" +" \n" +" ivec3 coord = ivec3( cube_coord );\n" +" uvec4 index_sample = texelFetch( uLightsIndex, coord, 0 );\n" +"\n" +" total_light += \n" +" scene_calculate_packed_light_patch( index_sample.x,\n" +" halfview, co, normal ) \n" +" * light_mask;\n" +" total_light += \n" +" scene_calculate_packed_light_patch( index_sample.y,\n" +" halfview, co, normal )\n" +" * light_mask;\n" +"\n" +" // Take a section of the sky function to give us a matching fog colour\n" +"\n" +" vec3 fog_colour = clearskies_ambient( -halfview );\n" +" float sun_theta = dot( -halfview, g_sun_dir.xyz );\n" +" float sun_size = max( 0.0, sun_theta * 0.5 + 0.5 );\n" +" float sun_shape = sun_size * max(g_sun_dir.y,0.0) * 0.5;\n" +" \n" +" vec3 sun_colour = mix( vec3(1.0), g_sunset_colour.rgb, g_sunset_phase*0.5 );\n" +" sun_colour *= sun_shape;\n" +"\n" +" fog_colour += sun_colour;\n" +" return scene_apply_fog( diffuse * total_light, fog_colour, fdist );\n" +"}\n" +"\n" +"#line 13 0 \n" +"#line 1 2 \n" +"const float k_motion_lerp_amount = 0.01;\n" +"\n" +"#line 2 0 \n" +"\n" +"layout (location = 1) out vec2 oMotionVec;\n" +"\n" +"in vec3 aMotionVec0;\n" +"in vec3 aMotionVec1;\n" +"\n" +"void compute_motion_vectors()\n" +"{\n" +" // Write motion vectors\n" +" vec2 vmotion0 = aMotionVec0.xy / aMotionVec0.z;\n" +" vec2 vmotion1 = aMotionVec1.xy / aMotionVec1.z;\n" +"\n" +" oMotionVec = (vmotion1-vmotion0) * (1.0/k_motion_lerp_amount);\n" +"}\n" +"\n" +"#line 14 0 \n" +"\n" +"float stars1( vec3 rd, float rr, float size ){\n" +" vec3 co = rd * rr;\n" +"\n" +" float a = atan(co.y, length(co.xz)) + 4.0 * PI;\n" +"\n" +" float spaces = 1.0 / rr;\n" +" size = (rr * 0.0015) * fwidth(a) * 1000.0 * size;\n" +" a -= mod(a, spaces) - spaces * 0.5;\n" +"\n" +" float count = floor(sqrt(pow(rr, 2.0) * (1.0 - pow(sin(a), 2.0))) * 3.0);\n" +" \n" +" float plane = atan(co.z, co.x) + 4.0 * PI;\n" +" plane = plane - mod(plane, PI / count);\n" +"\n" +" vec2 delta = rand33(vec3(plane, a, 0.0)).xy;\n" +"\n" +" float level = sin(a + spaces * (delta.y - 0.5) * (1.0 - size)) * rr;\n" +" float ydist = sqrt(rr * rr - level * level);\n" +" float angle = plane + (PI * (delta.x * (1.0-size) + size * 0.5) / count);\n" +" vec3 center = vec3(cos(angle) * ydist, level, sin(angle) * ydist);\n" +" float star = smoothstep(size, 0.0, distance(center, co));\n" +" return star;\n" +"}\n" +"\n" +"void main(){\n" +" compute_motion_vectors();\n" +"\n" +" vec3 rd = -normalize(aNorm);\n" +"\n" +" float star = 0.0;\n" +" for( float j = 1.0; j <= 4.1; j += 1.0 ){\n" +" float m = mix(0.6, 0.9, smoothstep(1.0, 2.0, j));\n" +" star += stars( rd, 1.94 * pow( 1.64, j ), m ) * (1.0 / pow(4.0, j));\n" +" }\n" +"\n" +" oColour = vec4( vec3(star*20.0), 1.0);\n" +"}\n" +""}, +}; + +static GLuint _uniform_model_sky_space_uMdl; +static GLuint _uniform_model_sky_space_uPv; +static GLuint _uniform_model_sky_space_uPvmPrev; +static GLuint _uniform_model_sky_space_uTexGarbage; +static GLuint _uniform_model_sky_space_g_world_depth; +static GLuint _uniform_model_sky_space_uLightsArray; +static GLuint _uniform_model_sky_space_uLightsIndex; +static void shader_model_sky_space_uMdl(m4x3f m){ + glUniformMatrix4x3fv(_uniform_model_sky_space_uMdl,1,GL_FALSE,(float*)m); +} +static void shader_model_sky_space_uPv(m4x4f m){ + glUniformMatrix4fv(_uniform_model_sky_space_uPv,1,GL_FALSE,(float*)m); +} +static void shader_model_sky_space_uPvmPrev(m4x4f m){ + glUniformMatrix4fv(_uniform_model_sky_space_uPvmPrev,1,GL_FALSE,(float*)m); +} +static void shader_model_sky_space_uTexGarbage(int i){ + glUniform1i(_uniform_model_sky_space_uTexGarbage,i); +} +static void shader_model_sky_space_g_world_depth(int i){ + glUniform1i(_uniform_model_sky_space_g_world_depth,i); +} +static void shader_model_sky_space_register(void){ + vg_shader_register( &_shader_model_sky_space ); +} +static void shader_model_sky_space_use(void){ glUseProgram(_shader_model_sky_space.id); } +static void shader_model_sky_space_link(void){ + _uniform_model_sky_space_uMdl = glGetUniformLocation( _shader_model_sky_space.id, "uMdl" ); + _uniform_model_sky_space_uPv = glGetUniformLocation( _shader_model_sky_space.id, "uPv" ); + _uniform_model_sky_space_uPvmPrev = glGetUniformLocation( _shader_model_sky_space.id, "uPvmPrev" ); + _uniform_model_sky_space_uTexGarbage = glGetUniformLocation( _shader_model_sky_space.id, "uTexGarbage" ); + _uniform_model_sky_space_g_world_depth = glGetUniformLocation( _shader_model_sky_space.id, "g_world_depth" ); + _uniform_model_sky_space_uLightsArray = glGetUniformLocation( _shader_model_sky_space.id, "uLightsArray" ); + _uniform_model_sky_space_uLightsIndex = glGetUniformLocation( _shader_model_sky_space.id, "uLightsIndex" ); +} +#endif /* SHADER_model_sky_space_H */ diff --git a/shaders/scene_cubemapped.h b/shaders/scene_cubemapped.h index 1d59884..4c90269 100644 --- a/shaders/scene_cubemapped.h +++ b/shaders/scene_cubemapped.h @@ -129,7 +129,7 @@ static struct vg_shader _shader_scene_cubemapped = { "//const vec3 SUN_COLOUR = vec3( 1.10, 0.89, 0.35 );\n" "\n" "const float SUN_ANGLE = 0.0001;\n" -"const float PI = 3.14159265;\n" +"const float PI = 3.14159265358979323846264;\n" "\n" "//struct world_info\n" "//{\n" @@ -141,6 +141,37 @@ static struct vg_shader _shader_scene_cubemapped = { "// vec3 sun_dir;\n" "//};\n" "\n" +"vec3 rand33(vec3 p3)\n" +"{\n" +" p3 = fract(p3 * vec3(.1031, .1030, .0973));\n" +" p3 += dot(p3, p3.yxz+33.33);\n" +" return fract((p3.xxy + p3.yxx)*p3.zyx);\n" +"}\n" +"\n" +"float stars( vec3 rd, float rr, float size ){\n" +" vec3 co = rd * rr;\n" +"\n" +" float a = atan(co.y, length(co.xz)) + 4.0 * PI;\n" +"\n" +" float spaces = 1.0 / rr;\n" +" size = (rr * 0.0015) * fwidth(a) * 1000.0 * size;\n" +" a -= mod(a, spaces) - spaces * 0.5;\n" +"\n" +" float count = floor(sqrt(pow(rr, 2.0) * (1.0 - pow(sin(a), 2.0))) * 3.0);\n" +" \n" +" float plane = atan(co.z, co.x) + 4.0 * PI;\n" +" plane = plane - mod(plane, PI / count);\n" +"\n" +" vec2 delta = rand33(vec3(plane, a, 0.0)).xy;\n" +"\n" +" float level = sin(a + spaces * (delta.y - 0.5) * (1.0 - size)) * rr;\n" +" float ydist = sqrt(rr * rr - level * level);\n" +" float angle = plane + (PI * (delta.x * (1.0-size) + size * 0.5) / count);\n" +" vec3 center = vec3(cos(angle) * ydist, level, sin(angle) * ydist);\n" +" float star = smoothstep(size, 0.0, distance(center, co));\n" +" return star;\n" +"}\n" +"\n" "float luminance( vec3 v )\n" "{\n" " return dot( v, vec3(0.2126, 0.7152, 0.0722) );\n" @@ -175,8 +206,15 @@ static struct vg_shader _shader_scene_cubemapped = { " \n" " vec3 sun_colour = mix( vec3(1.0), g_sunset_colour.rgb, g_sunset_phase*0.5 );\n" " sun_colour *= sun_shape;\n" +"\n" +"\n" +" float star = 0.0;\n" +" for( float j = 1.0; j <= 4.1; j += 1.0 ){\n" +" float m = mix(0.6, 0.9, smoothstep(1.0, 2.0, j));\n" +" star += stars( ray_dir, 1.94 * pow( 1.64, j ), m ) * (1.0 / pow(4.0, j));\n" +" }\n" " \n" -" vec3 composite = sky_colour + sun_colour;\n" +" vec3 composite = sky_colour + sun_colour + star*10.0*max(0.0,(1.0-g_day_phase*2.0));\n" " return composite;\n" "}\n" "\n" @@ -247,19 +285,11 @@ static struct vg_shader _shader_scene_cubemapped = { " return pow(max(dot( halfview, specdir ), 0.0), exponent);\n" "}\n" "\n" -"vec3 scene_apply_fog( vec3 vfrag, vec3 colour, float fdist )\n" -"{\n" +"vec3 scene_apply_fog( vec3 vfrag, vec3 colour, float fdist ){\n" " float dist = pow(fdist*0.0010,0.78);\n" " return mix( vfrag, colour, min( 1.0, dist ) );\n" "}\n" "\n" -"vec3 rand33(vec3 p3)\n" -"{\n" -" p3 = fract(p3 * vec3(.1031, .1030, .0973));\n" -" p3 += dot(p3, p3.yxz+33.33);\n" -" return fract((p3.xxy + p3.yxx)*p3.zyx);\n" -"}\n" -"\n" "vec3 scene_calculate_light( int light_index, \n" " vec3 halfview, vec3 co, vec3 normal )\n" "{\n" diff --git a/shaders/scene_depth.h b/shaders/scene_depth.h index efe52b8..160fd02 100644 --- a/shaders/scene_depth.h +++ b/shaders/scene_depth.h @@ -128,7 +128,7 @@ static struct vg_shader _shader_scene_depth = { "//const vec3 SUN_COLOUR = vec3( 1.10, 0.89, 0.35 );\n" "\n" "const float SUN_ANGLE = 0.0001;\n" -"const float PI = 3.14159265;\n" +"const float PI = 3.14159265358979323846264;\n" "\n" "//struct world_info\n" "//{\n" @@ -140,6 +140,37 @@ static struct vg_shader _shader_scene_depth = { "// vec3 sun_dir;\n" "//};\n" "\n" +"vec3 rand33(vec3 p3)\n" +"{\n" +" p3 = fract(p3 * vec3(.1031, .1030, .0973));\n" +" p3 += dot(p3, p3.yxz+33.33);\n" +" return fract((p3.xxy + p3.yxx)*p3.zyx);\n" +"}\n" +"\n" +"float stars( vec3 rd, float rr, float size ){\n" +" vec3 co = rd * rr;\n" +"\n" +" float a = atan(co.y, length(co.xz)) + 4.0 * PI;\n" +"\n" +" float spaces = 1.0 / rr;\n" +" size = (rr * 0.0015) * fwidth(a) * 1000.0 * size;\n" +" a -= mod(a, spaces) - spaces * 0.5;\n" +"\n" +" float count = floor(sqrt(pow(rr, 2.0) * (1.0 - pow(sin(a), 2.0))) * 3.0);\n" +" \n" +" float plane = atan(co.z, co.x) + 4.0 * PI;\n" +" plane = plane - mod(plane, PI / count);\n" +"\n" +" vec2 delta = rand33(vec3(plane, a, 0.0)).xy;\n" +"\n" +" float level = sin(a + spaces * (delta.y - 0.5) * (1.0 - size)) * rr;\n" +" float ydist = sqrt(rr * rr - level * level);\n" +" float angle = plane + (PI * (delta.x * (1.0-size) + size * 0.5) / count);\n" +" vec3 center = vec3(cos(angle) * ydist, level, sin(angle) * ydist);\n" +" float star = smoothstep(size, 0.0, distance(center, co));\n" +" return star;\n" +"}\n" +"\n" "float luminance( vec3 v )\n" "{\n" " return dot( v, vec3(0.2126, 0.7152, 0.0722) );\n" @@ -174,8 +205,15 @@ static struct vg_shader _shader_scene_depth = { " \n" " vec3 sun_colour = mix( vec3(1.0), g_sunset_colour.rgb, g_sunset_phase*0.5 );\n" " sun_colour *= sun_shape;\n" +"\n" +"\n" +" float star = 0.0;\n" +" for( float j = 1.0; j <= 4.1; j += 1.0 ){\n" +" float m = mix(0.6, 0.9, smoothstep(1.0, 2.0, j));\n" +" star += stars( ray_dir, 1.94 * pow( 1.64, j ), m ) * (1.0 / pow(4.0, j));\n" +" }\n" " \n" -" vec3 composite = sky_colour + sun_colour;\n" +" vec3 composite = sky_colour + sun_colour + star*10.0*max(0.0,(1.0-g_day_phase*2.0));\n" " return composite;\n" "}\n" "\n" @@ -246,19 +284,11 @@ static struct vg_shader _shader_scene_depth = { " return pow(max(dot( halfview, specdir ), 0.0), exponent);\n" "}\n" "\n" -"vec3 scene_apply_fog( vec3 vfrag, vec3 colour, float fdist )\n" -"{\n" +"vec3 scene_apply_fog( vec3 vfrag, vec3 colour, float fdist ){\n" " float dist = pow(fdist*0.0010,0.78);\n" " return mix( vfrag, colour, min( 1.0, dist ) );\n" "}\n" "\n" -"vec3 rand33(vec3 p3)\n" -"{\n" -" p3 = fract(p3 * vec3(.1031, .1030, .0973));\n" -" p3 += dot(p3, p3.yxz+33.33);\n" -" return fract((p3.xxy + p3.yxx)*p3.zyx);\n" -"}\n" -"\n" "vec3 scene_calculate_light( int light_index, \n" " vec3 halfview, vec3 co, vec3 normal )\n" "{\n" diff --git a/shaders/scene_font.h b/shaders/scene_font.h index f0a9829..7eba1b0 100644 --- a/shaders/scene_font.h +++ b/shaders/scene_font.h @@ -131,7 +131,7 @@ static struct vg_shader _shader_scene_font = { "//const vec3 SUN_COLOUR = vec3( 1.10, 0.89, 0.35 );\n" "\n" "const float SUN_ANGLE = 0.0001;\n" -"const float PI = 3.14159265;\n" +"const float PI = 3.14159265358979323846264;\n" "\n" "//struct world_info\n" "//{\n" @@ -143,6 +143,37 @@ static struct vg_shader _shader_scene_font = { "// vec3 sun_dir;\n" "//};\n" "\n" +"vec3 rand33(vec3 p3)\n" +"{\n" +" p3 = fract(p3 * vec3(.1031, .1030, .0973));\n" +" p3 += dot(p3, p3.yxz+33.33);\n" +" return fract((p3.xxy + p3.yxx)*p3.zyx);\n" +"}\n" +"\n" +"float stars( vec3 rd, float rr, float size ){\n" +" vec3 co = rd * rr;\n" +"\n" +" float a = atan(co.y, length(co.xz)) + 4.0 * PI;\n" +"\n" +" float spaces = 1.0 / rr;\n" +" size = (rr * 0.0015) * fwidth(a) * 1000.0 * size;\n" +" a -= mod(a, spaces) - spaces * 0.5;\n" +"\n" +" float count = floor(sqrt(pow(rr, 2.0) * (1.0 - pow(sin(a), 2.0))) * 3.0);\n" +" \n" +" float plane = atan(co.z, co.x) + 4.0 * PI;\n" +" plane = plane - mod(plane, PI / count);\n" +"\n" +" vec2 delta = rand33(vec3(plane, a, 0.0)).xy;\n" +"\n" +" float level = sin(a + spaces * (delta.y - 0.5) * (1.0 - size)) * rr;\n" +" float ydist = sqrt(rr * rr - level * level);\n" +" float angle = plane + (PI * (delta.x * (1.0-size) + size * 0.5) / count);\n" +" vec3 center = vec3(cos(angle) * ydist, level, sin(angle) * ydist);\n" +" float star = smoothstep(size, 0.0, distance(center, co));\n" +" return star;\n" +"}\n" +"\n" "float luminance( vec3 v )\n" "{\n" " return dot( v, vec3(0.2126, 0.7152, 0.0722) );\n" @@ -177,8 +208,15 @@ static struct vg_shader _shader_scene_font = { " \n" " vec3 sun_colour = mix( vec3(1.0), g_sunset_colour.rgb, g_sunset_phase*0.5 );\n" " sun_colour *= sun_shape;\n" +"\n" +"\n" +" float star = 0.0;\n" +" for( float j = 1.0; j <= 4.1; j += 1.0 ){\n" +" float m = mix(0.6, 0.9, smoothstep(1.0, 2.0, j));\n" +" star += stars( ray_dir, 1.94 * pow( 1.64, j ), m ) * (1.0 / pow(4.0, j));\n" +" }\n" " \n" -" vec3 composite = sky_colour + sun_colour;\n" +" vec3 composite = sky_colour + sun_colour + star*10.0*max(0.0,(1.0-g_day_phase*2.0));\n" " return composite;\n" "}\n" "\n" @@ -249,19 +287,11 @@ static struct vg_shader _shader_scene_font = { " return pow(max(dot( halfview, specdir ), 0.0), exponent);\n" "}\n" "\n" -"vec3 scene_apply_fog( vec3 vfrag, vec3 colour, float fdist )\n" -"{\n" +"vec3 scene_apply_fog( vec3 vfrag, vec3 colour, float fdist ){\n" " float dist = pow(fdist*0.0010,0.78);\n" " return mix( vfrag, colour, min( 1.0, dist ) );\n" "}\n" "\n" -"vec3 rand33(vec3 p3)\n" -"{\n" -" p3 = fract(p3 * vec3(.1031, .1030, .0973));\n" -" p3 += dot(p3, p3.yxz+33.33);\n" -" return fract((p3.xxy + p3.yxx)*p3.zyx);\n" -"}\n" -"\n" "vec3 scene_calculate_light( int light_index, \n" " vec3 halfview, vec3 co, vec3 normal )\n" "{\n" diff --git a/shaders/scene_fxglow.h b/shaders/scene_fxglow.h index b54f58f..98bb0e3 100644 --- a/shaders/scene_fxglow.h +++ b/shaders/scene_fxglow.h @@ -126,7 +126,7 @@ static struct vg_shader _shader_scene_fxglow = { "//const vec3 SUN_COLOUR = vec3( 1.10, 0.89, 0.35 );\n" "\n" "const float SUN_ANGLE = 0.0001;\n" -"const float PI = 3.14159265;\n" +"const float PI = 3.14159265358979323846264;\n" "\n" "//struct world_info\n" "//{\n" @@ -138,6 +138,37 @@ static struct vg_shader _shader_scene_fxglow = { "// vec3 sun_dir;\n" "//};\n" "\n" +"vec3 rand33(vec3 p3)\n" +"{\n" +" p3 = fract(p3 * vec3(.1031, .1030, .0973));\n" +" p3 += dot(p3, p3.yxz+33.33);\n" +" return fract((p3.xxy + p3.yxx)*p3.zyx);\n" +"}\n" +"\n" +"float stars( vec3 rd, float rr, float size ){\n" +" vec3 co = rd * rr;\n" +"\n" +" float a = atan(co.y, length(co.xz)) + 4.0 * PI;\n" +"\n" +" float spaces = 1.0 / rr;\n" +" size = (rr * 0.0015) * fwidth(a) * 1000.0 * size;\n" +" a -= mod(a, spaces) - spaces * 0.5;\n" +"\n" +" float count = floor(sqrt(pow(rr, 2.0) * (1.0 - pow(sin(a), 2.0))) * 3.0);\n" +" \n" +" float plane = atan(co.z, co.x) + 4.0 * PI;\n" +" plane = plane - mod(plane, PI / count);\n" +"\n" +" vec2 delta = rand33(vec3(plane, a, 0.0)).xy;\n" +"\n" +" float level = sin(a + spaces * (delta.y - 0.5) * (1.0 - size)) * rr;\n" +" float ydist = sqrt(rr * rr - level * level);\n" +" float angle = plane + (PI * (delta.x * (1.0-size) + size * 0.5) / count);\n" +" vec3 center = vec3(cos(angle) * ydist, level, sin(angle) * ydist);\n" +" float star = smoothstep(size, 0.0, distance(center, co));\n" +" return star;\n" +"}\n" +"\n" "float luminance( vec3 v )\n" "{\n" " return dot( v, vec3(0.2126, 0.7152, 0.0722) );\n" @@ -172,8 +203,15 @@ static struct vg_shader _shader_scene_fxglow = { " \n" " vec3 sun_colour = mix( vec3(1.0), g_sunset_colour.rgb, g_sunset_phase*0.5 );\n" " sun_colour *= sun_shape;\n" +"\n" +"\n" +" float star = 0.0;\n" +" for( float j = 1.0; j <= 4.1; j += 1.0 ){\n" +" float m = mix(0.6, 0.9, smoothstep(1.0, 2.0, j));\n" +" star += stars( ray_dir, 1.94 * pow( 1.64, j ), m ) * (1.0 / pow(4.0, j));\n" +" }\n" " \n" -" vec3 composite = sky_colour + sun_colour;\n" +" vec3 composite = sky_colour + sun_colour + star*10.0*max(0.0,(1.0-g_day_phase*2.0));\n" " return composite;\n" "}\n" "\n" @@ -244,19 +282,11 @@ static struct vg_shader _shader_scene_fxglow = { " return pow(max(dot( halfview, specdir ), 0.0), exponent);\n" "}\n" "\n" -"vec3 scene_apply_fog( vec3 vfrag, vec3 colour, float fdist )\n" -"{\n" +"vec3 scene_apply_fog( vec3 vfrag, vec3 colour, float fdist ){\n" " float dist = pow(fdist*0.0010,0.78);\n" " return mix( vfrag, colour, min( 1.0, dist ) );\n" "}\n" "\n" -"vec3 rand33(vec3 p3)\n" -"{\n" -" p3 = fract(p3 * vec3(.1031, .1030, .0973));\n" -" p3 += dot(p3, p3.yxz+33.33);\n" -" return fract((p3.xxy + p3.yxx)*p3.zyx);\n" -"}\n" -"\n" "vec3 scene_calculate_light( int light_index, \n" " vec3 halfview, vec3 co, vec3 normal )\n" "{\n" diff --git a/shaders/scene_override.fs b/shaders/scene_override.fs index 6d10a40..f7dff2b 100644 --- a/shaders/scene_override.fs +++ b/shaders/scene_override.fs @@ -31,7 +31,7 @@ void main(){ compute_motion_vectors(); - vec3 vfrag = vec3(0.6); + vec3 vfrag = vec3(0.7); vec3 qnorm = aNorm.xyz; qnorm = normalize(floor(aNorm.xyz*4.0)*0.25); @@ -43,16 +43,13 @@ void main(){ discard; } else{ - if( !gl_FrontFacing ){ - qnorm *= -1.0; - } } - vfrag = scene_compute_lighting( vfrag, qnorm, aCo ); + vfrag = scene_compute_lighting( vfrag, qnorm, aWorldCo ); // dots - float d0 = distance( aWorldCo, uPlayerPos.xyz )*2.0; - float d1 = distance( aWorldCo, uSpawnPos.xyz ); + float d0 = distance( aCo, uPlayerPos.xyz )*2.0; + float d1 = distance( aCo, uSpawnPos.xyz ); vec2 dm = smin( d0, d1, 10.0 ); float dd = fract(dm.x*0.2-g_realtime*0.5) * @@ -62,11 +59,11 @@ void main(){ // line vec3 v0 = (uSpawnPos.xyz-uPlayerPos.xyz)*uSpawnPos.w; - float t = clamp( dot(aWorldCo-uPlayerPos.xyz,v0), 0.0, uPlayerPos.w ); + float t = clamp( dot(aCo-uPlayerPos.xyz,v0), 0.0, uPlayerPos.w ); vec3 p0 = uPlayerPos.xyz + v0*t; - float d3 = distance(p0,aWorldCo); + float d3 = distance(p0,aCo); emit += vec3(fract(t*0.2-g_realtime+d3*0.2)*max(0.0,1.0-d3*0.2)); oColour = vec4( vfrag+emit, 1.0 ); - oColour = vec4( vfrag, 1.0 ); + //oColour = vec4( vfrag, 1.0 ); } diff --git a/shaders/scene_override.h b/shaders/scene_override.h index 8bea02e..fb53671 100644 --- a/shaders/scene_override.h +++ b/shaders/scene_override.h @@ -54,7 +54,7 @@ static struct vg_shader _shader_scene_override = { " gl_Position = vproj0;\n" "\n" " aUv = a_uv;\n" -" aNorm = vec4( a_norm.xyz, a_norm.w );\n" +" aNorm = vec4( uNormalMtx * a_norm.xyz, a_norm.w );\n" " aCo = a_co;\n" " aWorldCo = world_pos0;\n" "}\n" @@ -132,7 +132,7 @@ static struct vg_shader _shader_scene_override = { "//const vec3 SUN_COLOUR = vec3( 1.10, 0.89, 0.35 );\n" "\n" "const float SUN_ANGLE = 0.0001;\n" -"const float PI = 3.14159265;\n" +"const float PI = 3.14159265358979323846264;\n" "\n" "//struct world_info\n" "//{\n" @@ -144,6 +144,37 @@ static struct vg_shader _shader_scene_override = { "// vec3 sun_dir;\n" "//};\n" "\n" +"vec3 rand33(vec3 p3)\n" +"{\n" +" p3 = fract(p3 * vec3(.1031, .1030, .0973));\n" +" p3 += dot(p3, p3.yxz+33.33);\n" +" return fract((p3.xxy + p3.yxx)*p3.zyx);\n" +"}\n" +"\n" +"float stars( vec3 rd, float rr, float size ){\n" +" vec3 co = rd * rr;\n" +"\n" +" float a = atan(co.y, length(co.xz)) + 4.0 * PI;\n" +"\n" +" float spaces = 1.0 / rr;\n" +" size = (rr * 0.0015) * fwidth(a) * 1000.0 * size;\n" +" a -= mod(a, spaces) - spaces * 0.5;\n" +"\n" +" float count = floor(sqrt(pow(rr, 2.0) * (1.0 - pow(sin(a), 2.0))) * 3.0);\n" +" \n" +" float plane = atan(co.z, co.x) + 4.0 * PI;\n" +" plane = plane - mod(plane, PI / count);\n" +"\n" +" vec2 delta = rand33(vec3(plane, a, 0.0)).xy;\n" +"\n" +" float level = sin(a + spaces * (delta.y - 0.5) * (1.0 - size)) * rr;\n" +" float ydist = sqrt(rr * rr - level * level);\n" +" float angle = plane + (PI * (delta.x * (1.0-size) + size * 0.5) / count);\n" +" vec3 center = vec3(cos(angle) * ydist, level, sin(angle) * ydist);\n" +" float star = smoothstep(size, 0.0, distance(center, co));\n" +" return star;\n" +"}\n" +"\n" "float luminance( vec3 v )\n" "{\n" " return dot( v, vec3(0.2126, 0.7152, 0.0722) );\n" @@ -178,8 +209,15 @@ static struct vg_shader _shader_scene_override = { " \n" " vec3 sun_colour = mix( vec3(1.0), g_sunset_colour.rgb, g_sunset_phase*0.5 );\n" " sun_colour *= sun_shape;\n" +"\n" +"\n" +" float star = 0.0;\n" +" for( float j = 1.0; j <= 4.1; j += 1.0 ){\n" +" float m = mix(0.6, 0.9, smoothstep(1.0, 2.0, j));\n" +" star += stars( ray_dir, 1.94 * pow( 1.64, j ), m ) * (1.0 / pow(4.0, j));\n" +" }\n" " \n" -" vec3 composite = sky_colour + sun_colour;\n" +" vec3 composite = sky_colour + sun_colour + star*10.0*max(0.0,(1.0-g_day_phase*2.0));\n" " return composite;\n" "}\n" "\n" @@ -250,19 +288,11 @@ static struct vg_shader _shader_scene_override = { " return pow(max(dot( halfview, specdir ), 0.0), exponent);\n" "}\n" "\n" -"vec3 scene_apply_fog( vec3 vfrag, vec3 colour, float fdist )\n" -"{\n" +"vec3 scene_apply_fog( vec3 vfrag, vec3 colour, float fdist ){\n" " float dist = pow(fdist*0.0010,0.78);\n" " return mix( vfrag, colour, min( 1.0, dist ) );\n" "}\n" "\n" -"vec3 rand33(vec3 p3)\n" -"{\n" -" p3 = fract(p3 * vec3(.1031, .1030, .0973));\n" -" p3 += dot(p3, p3.yxz+33.33);\n" -" return fract((p3.xxy + p3.yxx)*p3.zyx);\n" -"}\n" -"\n" "vec3 scene_calculate_light( int light_index, \n" " vec3 halfview, vec3 co, vec3 normal )\n" "{\n" @@ -448,7 +478,7 @@ static struct vg_shader _shader_scene_override = { "\n" " compute_motion_vectors();\n" "\n" -" vec3 vfrag = vec3(0.6);\n" +" vec3 vfrag = vec3(0.5);\n" " vec3 qnorm = aNorm.xyz;\n" "\n" " qnorm = normalize(floor(aNorm.xyz*4.0)*0.25);\n" @@ -460,16 +490,13 @@ static struct vg_shader _shader_scene_override = { " discard;\n" " }\n" " else{\n" -" if( !gl_FrontFacing ){\n" -" qnorm *= -1.0;\n" -" }\n" " }\n" "\n" -" vfrag = scene_compute_lighting( vfrag, qnorm, aCo );\n" +" vfrag = scene_compute_lighting( vfrag, qnorm, aWorldCo );\n" " \n" " // dots\n" -" float d0 = distance( aWorldCo, uPlayerPos.xyz )*2.0;\n" -" float d1 = distance( aWorldCo, uSpawnPos.xyz );\n" +" float d0 = distance( aCo, uPlayerPos.xyz )*2.0;\n" +" float d1 = distance( aCo, uSpawnPos.xyz );\n" "\n" " vec2 dm = smin( d0, d1, 10.0 );\n" " float dd = fract(dm.x*0.2-g_realtime*0.5) * \n" @@ -479,13 +506,13 @@ static struct vg_shader _shader_scene_override = { "\n" " // line\n" " vec3 v0 = (uSpawnPos.xyz-uPlayerPos.xyz)*uSpawnPos.w;\n" -" float t = clamp( dot(aWorldCo-uPlayerPos.xyz,v0), 0.0, uPlayerPos.w );\n" +" float t = clamp( dot(aCo-uPlayerPos.xyz,v0), 0.0, uPlayerPos.w );\n" " vec3 p0 = uPlayerPos.xyz + v0*t;\n" -" float d3 = distance(p0,aWorldCo);\n" +" float d3 = distance(p0,aCo);\n" " emit += vec3(fract(t*0.2-g_realtime+d3*0.2)*max(0.0,1.0-d3*0.2));\n" "\n" " oColour = vec4( vfrag+emit, 1.0 );\n" -" oColour = vec4( vfrag, 1.0 );\n" +" //oColour = vec4( vfrag, 1.0 );\n" "}\n" ""}, }; diff --git a/shaders/scene_override.vs b/shaders/scene_override.vs index 88fa7dd..bb1088e 100644 --- a/shaders/scene_override.vs +++ b/shaders/scene_override.vs @@ -25,7 +25,7 @@ void main() gl_Position = vproj0; aUv = a_uv; - aNorm = vec4( a_norm.xyz, a_norm.w ); + aNorm = vec4( uNormalMtx * a_norm.xyz, a_norm.w ); aCo = a_co; aWorldCo = world_pos0; } diff --git a/shaders/scene_position.h b/shaders/scene_position.h index 985d34c..99fe303 100644 --- a/shaders/scene_position.h +++ b/shaders/scene_position.h @@ -128,7 +128,7 @@ static struct vg_shader _shader_scene_position = { "//const vec3 SUN_COLOUR = vec3( 1.10, 0.89, 0.35 );\n" "\n" "const float SUN_ANGLE = 0.0001;\n" -"const float PI = 3.14159265;\n" +"const float PI = 3.14159265358979323846264;\n" "\n" "//struct world_info\n" "//{\n" @@ -140,6 +140,37 @@ static struct vg_shader _shader_scene_position = { "// vec3 sun_dir;\n" "//};\n" "\n" +"vec3 rand33(vec3 p3)\n" +"{\n" +" p3 = fract(p3 * vec3(.1031, .1030, .0973));\n" +" p3 += dot(p3, p3.yxz+33.33);\n" +" return fract((p3.xxy + p3.yxx)*p3.zyx);\n" +"}\n" +"\n" +"float stars( vec3 rd, float rr, float size ){\n" +" vec3 co = rd * rr;\n" +"\n" +" float a = atan(co.y, length(co.xz)) + 4.0 * PI;\n" +"\n" +" float spaces = 1.0 / rr;\n" +" size = (rr * 0.0015) * fwidth(a) * 1000.0 * size;\n" +" a -= mod(a, spaces) - spaces * 0.5;\n" +"\n" +" float count = floor(sqrt(pow(rr, 2.0) * (1.0 - pow(sin(a), 2.0))) * 3.0);\n" +" \n" +" float plane = atan(co.z, co.x) + 4.0 * PI;\n" +" plane = plane - mod(plane, PI / count);\n" +"\n" +" vec2 delta = rand33(vec3(plane, a, 0.0)).xy;\n" +"\n" +" float level = sin(a + spaces * (delta.y - 0.5) * (1.0 - size)) * rr;\n" +" float ydist = sqrt(rr * rr - level * level);\n" +" float angle = plane + (PI * (delta.x * (1.0-size) + size * 0.5) / count);\n" +" vec3 center = vec3(cos(angle) * ydist, level, sin(angle) * ydist);\n" +" float star = smoothstep(size, 0.0, distance(center, co));\n" +" return star;\n" +"}\n" +"\n" "float luminance( vec3 v )\n" "{\n" " return dot( v, vec3(0.2126, 0.7152, 0.0722) );\n" @@ -174,8 +205,15 @@ static struct vg_shader _shader_scene_position = { " \n" " vec3 sun_colour = mix( vec3(1.0), g_sunset_colour.rgb, g_sunset_phase*0.5 );\n" " sun_colour *= sun_shape;\n" +"\n" +"\n" +" float star = 0.0;\n" +" for( float j = 1.0; j <= 4.1; j += 1.0 ){\n" +" float m = mix(0.6, 0.9, smoothstep(1.0, 2.0, j));\n" +" star += stars( ray_dir, 1.94 * pow( 1.64, j ), m ) * (1.0 / pow(4.0, j));\n" +" }\n" " \n" -" vec3 composite = sky_colour + sun_colour;\n" +" vec3 composite = sky_colour + sun_colour + star*10.0*max(0.0,(1.0-g_day_phase*2.0));\n" " return composite;\n" "}\n" "\n" @@ -246,19 +284,11 @@ static struct vg_shader _shader_scene_position = { " return pow(max(dot( halfview, specdir ), 0.0), exponent);\n" "}\n" "\n" -"vec3 scene_apply_fog( vec3 vfrag, vec3 colour, float fdist )\n" -"{\n" +"vec3 scene_apply_fog( vec3 vfrag, vec3 colour, float fdist ){\n" " float dist = pow(fdist*0.0010,0.78);\n" " return mix( vfrag, colour, min( 1.0, dist ) );\n" "}\n" "\n" -"vec3 rand33(vec3 p3)\n" -"{\n" -" p3 = fract(p3 * vec3(.1031, .1030, .0973));\n" -" p3 += dot(p3, p3.yxz+33.33);\n" -" return fract((p3.xxy + p3.yxx)*p3.zyx);\n" -"}\n" -"\n" "vec3 scene_calculate_light( int light_index, \n" " vec3 halfview, vec3 co, vec3 normal )\n" "{\n" diff --git a/shaders/scene_route.h b/shaders/scene_route.h index bfa31df..ecaf5fe 100644 --- a/shaders/scene_route.h +++ b/shaders/scene_route.h @@ -127,7 +127,7 @@ static struct vg_shader _shader_scene_route = { "//const vec3 SUN_COLOUR = vec3( 1.10, 0.89, 0.35 );\n" "\n" "const float SUN_ANGLE = 0.0001;\n" -"const float PI = 3.14159265;\n" +"const float PI = 3.14159265358979323846264;\n" "\n" "//struct world_info\n" "//{\n" @@ -139,6 +139,37 @@ static struct vg_shader _shader_scene_route = { "// vec3 sun_dir;\n" "//};\n" "\n" +"vec3 rand33(vec3 p3)\n" +"{\n" +" p3 = fract(p3 * vec3(.1031, .1030, .0973));\n" +" p3 += dot(p3, p3.yxz+33.33);\n" +" return fract((p3.xxy + p3.yxx)*p3.zyx);\n" +"}\n" +"\n" +"float stars( vec3 rd, float rr, float size ){\n" +" vec3 co = rd * rr;\n" +"\n" +" float a = atan(co.y, length(co.xz)) + 4.0 * PI;\n" +"\n" +" float spaces = 1.0 / rr;\n" +" size = (rr * 0.0015) * fwidth(a) * 1000.0 * size;\n" +" a -= mod(a, spaces) - spaces * 0.5;\n" +"\n" +" float count = floor(sqrt(pow(rr, 2.0) * (1.0 - pow(sin(a), 2.0))) * 3.0);\n" +" \n" +" float plane = atan(co.z, co.x) + 4.0 * PI;\n" +" plane = plane - mod(plane, PI / count);\n" +"\n" +" vec2 delta = rand33(vec3(plane, a, 0.0)).xy;\n" +"\n" +" float level = sin(a + spaces * (delta.y - 0.5) * (1.0 - size)) * rr;\n" +" float ydist = sqrt(rr * rr - level * level);\n" +" float angle = plane + (PI * (delta.x * (1.0-size) + size * 0.5) / count);\n" +" vec3 center = vec3(cos(angle) * ydist, level, sin(angle) * ydist);\n" +" float star = smoothstep(size, 0.0, distance(center, co));\n" +" return star;\n" +"}\n" +"\n" "float luminance( vec3 v )\n" "{\n" " return dot( v, vec3(0.2126, 0.7152, 0.0722) );\n" @@ -173,8 +204,15 @@ static struct vg_shader _shader_scene_route = { " \n" " vec3 sun_colour = mix( vec3(1.0), g_sunset_colour.rgb, g_sunset_phase*0.5 );\n" " sun_colour *= sun_shape;\n" +"\n" +"\n" +" float star = 0.0;\n" +" for( float j = 1.0; j <= 4.1; j += 1.0 ){\n" +" float m = mix(0.6, 0.9, smoothstep(1.0, 2.0, j));\n" +" star += stars( ray_dir, 1.94 * pow( 1.64, j ), m ) * (1.0 / pow(4.0, j));\n" +" }\n" " \n" -" vec3 composite = sky_colour + sun_colour;\n" +" vec3 composite = sky_colour + sun_colour + star*10.0*max(0.0,(1.0-g_day_phase*2.0));\n" " return composite;\n" "}\n" "\n" @@ -245,19 +283,11 @@ static struct vg_shader _shader_scene_route = { " return pow(max(dot( halfview, specdir ), 0.0), exponent);\n" "}\n" "\n" -"vec3 scene_apply_fog( vec3 vfrag, vec3 colour, float fdist )\n" -"{\n" +"vec3 scene_apply_fog( vec3 vfrag, vec3 colour, float fdist ){\n" " float dist = pow(fdist*0.0010,0.78);\n" " return mix( vfrag, colour, min( 1.0, dist ) );\n" "}\n" "\n" -"vec3 rand33(vec3 p3)\n" -"{\n" -" p3 = fract(p3 * vec3(.1031, .1030, .0973));\n" -" p3 += dot(p3, p3.yxz+33.33);\n" -" return fract((p3.xxy + p3.yxx)*p3.zyx);\n" -"}\n" -"\n" "vec3 scene_calculate_light( int light_index, \n" " vec3 halfview, vec3 co, vec3 normal )\n" "{\n" diff --git a/shaders/scene_scoretext.h b/shaders/scene_scoretext.h index 1d82be3..a2241c8 100644 --- a/shaders/scene_scoretext.h +++ b/shaders/scene_scoretext.h @@ -147,7 +147,7 @@ static struct vg_shader _shader_scene_scoretext = { "//const vec3 SUN_COLOUR = vec3( 1.10, 0.89, 0.35 );\n" "\n" "const float SUN_ANGLE = 0.0001;\n" -"const float PI = 3.14159265;\n" +"const float PI = 3.14159265358979323846264;\n" "\n" "//struct world_info\n" "//{\n" @@ -159,6 +159,37 @@ static struct vg_shader _shader_scene_scoretext = { "// vec3 sun_dir;\n" "//};\n" "\n" +"vec3 rand33(vec3 p3)\n" +"{\n" +" p3 = fract(p3 * vec3(.1031, .1030, .0973));\n" +" p3 += dot(p3, p3.yxz+33.33);\n" +" return fract((p3.xxy + p3.yxx)*p3.zyx);\n" +"}\n" +"\n" +"float stars( vec3 rd, float rr, float size ){\n" +" vec3 co = rd * rr;\n" +"\n" +" float a = atan(co.y, length(co.xz)) + 4.0 * PI;\n" +"\n" +" float spaces = 1.0 / rr;\n" +" size = (rr * 0.0015) * fwidth(a) * 1000.0 * size;\n" +" a -= mod(a, spaces) - spaces * 0.5;\n" +"\n" +" float count = floor(sqrt(pow(rr, 2.0) * (1.0 - pow(sin(a), 2.0))) * 3.0);\n" +" \n" +" float plane = atan(co.z, co.x) + 4.0 * PI;\n" +" plane = plane - mod(plane, PI / count);\n" +"\n" +" vec2 delta = rand33(vec3(plane, a, 0.0)).xy;\n" +"\n" +" float level = sin(a + spaces * (delta.y - 0.5) * (1.0 - size)) * rr;\n" +" float ydist = sqrt(rr * rr - level * level);\n" +" float angle = plane + (PI * (delta.x * (1.0-size) + size * 0.5) / count);\n" +" vec3 center = vec3(cos(angle) * ydist, level, sin(angle) * ydist);\n" +" float star = smoothstep(size, 0.0, distance(center, co));\n" +" return star;\n" +"}\n" +"\n" "float luminance( vec3 v )\n" "{\n" " return dot( v, vec3(0.2126, 0.7152, 0.0722) );\n" @@ -193,8 +224,15 @@ static struct vg_shader _shader_scene_scoretext = { " \n" " vec3 sun_colour = mix( vec3(1.0), g_sunset_colour.rgb, g_sunset_phase*0.5 );\n" " sun_colour *= sun_shape;\n" +"\n" +"\n" +" float star = 0.0;\n" +" for( float j = 1.0; j <= 4.1; j += 1.0 ){\n" +" float m = mix(0.6, 0.9, smoothstep(1.0, 2.0, j));\n" +" star += stars( ray_dir, 1.94 * pow( 1.64, j ), m ) * (1.0 / pow(4.0, j));\n" +" }\n" " \n" -" vec3 composite = sky_colour + sun_colour;\n" +" vec3 composite = sky_colour + sun_colour + star*10.0*max(0.0,(1.0-g_day_phase*2.0));\n" " return composite;\n" "}\n" "\n" @@ -265,19 +303,11 @@ static struct vg_shader _shader_scene_scoretext = { " return pow(max(dot( halfview, specdir ), 0.0), exponent);\n" "}\n" "\n" -"vec3 scene_apply_fog( vec3 vfrag, vec3 colour, float fdist )\n" -"{\n" +"vec3 scene_apply_fog( vec3 vfrag, vec3 colour, float fdist ){\n" " float dist = pow(fdist*0.0010,0.78);\n" " return mix( vfrag, colour, min( 1.0, dist ) );\n" "}\n" "\n" -"vec3 rand33(vec3 p3)\n" -"{\n" -" p3 = fract(p3 * vec3(.1031, .1030, .0973));\n" -" p3 += dot(p3, p3.yxz+33.33);\n" -" return fract((p3.xxy + p3.yxx)*p3.zyx);\n" -"}\n" -"\n" "vec3 scene_calculate_light( int light_index, \n" " vec3 halfview, vec3 co, vec3 normal )\n" "{\n" diff --git a/shaders/scene_standard.h b/shaders/scene_standard.h index ae03331..3904980 100644 --- a/shaders/scene_standard.h +++ b/shaders/scene_standard.h @@ -127,7 +127,7 @@ static struct vg_shader _shader_scene_standard = { "//const vec3 SUN_COLOUR = vec3( 1.10, 0.89, 0.35 );\n" "\n" "const float SUN_ANGLE = 0.0001;\n" -"const float PI = 3.14159265;\n" +"const float PI = 3.14159265358979323846264;\n" "\n" "//struct world_info\n" "//{\n" @@ -139,6 +139,37 @@ static struct vg_shader _shader_scene_standard = { "// vec3 sun_dir;\n" "//};\n" "\n" +"vec3 rand33(vec3 p3)\n" +"{\n" +" p3 = fract(p3 * vec3(.1031, .1030, .0973));\n" +" p3 += dot(p3, p3.yxz+33.33);\n" +" return fract((p3.xxy + p3.yxx)*p3.zyx);\n" +"}\n" +"\n" +"float stars( vec3 rd, float rr, float size ){\n" +" vec3 co = rd * rr;\n" +"\n" +" float a = atan(co.y, length(co.xz)) + 4.0 * PI;\n" +"\n" +" float spaces = 1.0 / rr;\n" +" size = (rr * 0.0015) * fwidth(a) * 1000.0 * size;\n" +" a -= mod(a, spaces) - spaces * 0.5;\n" +"\n" +" float count = floor(sqrt(pow(rr, 2.0) * (1.0 - pow(sin(a), 2.0))) * 3.0);\n" +" \n" +" float plane = atan(co.z, co.x) + 4.0 * PI;\n" +" plane = plane - mod(plane, PI / count);\n" +"\n" +" vec2 delta = rand33(vec3(plane, a, 0.0)).xy;\n" +"\n" +" float level = sin(a + spaces * (delta.y - 0.5) * (1.0 - size)) * rr;\n" +" float ydist = sqrt(rr * rr - level * level);\n" +" float angle = plane + (PI * (delta.x * (1.0-size) + size * 0.5) / count);\n" +" vec3 center = vec3(cos(angle) * ydist, level, sin(angle) * ydist);\n" +" float star = smoothstep(size, 0.0, distance(center, co));\n" +" return star;\n" +"}\n" +"\n" "float luminance( vec3 v )\n" "{\n" " return dot( v, vec3(0.2126, 0.7152, 0.0722) );\n" @@ -173,8 +204,15 @@ static struct vg_shader _shader_scene_standard = { " \n" " vec3 sun_colour = mix( vec3(1.0), g_sunset_colour.rgb, g_sunset_phase*0.5 );\n" " sun_colour *= sun_shape;\n" +"\n" +"\n" +" float star = 0.0;\n" +" for( float j = 1.0; j <= 4.1; j += 1.0 ){\n" +" float m = mix(0.6, 0.9, smoothstep(1.0, 2.0, j));\n" +" star += stars( ray_dir, 1.94 * pow( 1.64, j ), m ) * (1.0 / pow(4.0, j));\n" +" }\n" " \n" -" vec3 composite = sky_colour + sun_colour;\n" +" vec3 composite = sky_colour + sun_colour + star*10.0*max(0.0,(1.0-g_day_phase*2.0));\n" " return composite;\n" "}\n" "\n" @@ -245,19 +283,11 @@ static struct vg_shader _shader_scene_standard = { " return pow(max(dot( halfview, specdir ), 0.0), exponent);\n" "}\n" "\n" -"vec3 scene_apply_fog( vec3 vfrag, vec3 colour, float fdist )\n" -"{\n" +"vec3 scene_apply_fog( vec3 vfrag, vec3 colour, float fdist ){\n" " float dist = pow(fdist*0.0010,0.78);\n" " return mix( vfrag, colour, min( 1.0, dist ) );\n" "}\n" "\n" -"vec3 rand33(vec3 p3)\n" -"{\n" -" p3 = fract(p3 * vec3(.1031, .1030, .0973));\n" -" p3 += dot(p3, p3.yxz+33.33);\n" -" return fract((p3.xxy + p3.yxx)*p3.zyx);\n" -"}\n" -"\n" "vec3 scene_calculate_light( int light_index, \n" " vec3 halfview, vec3 co, vec3 normal )\n" "{\n" diff --git a/shaders/scene_standard_alphatest.h b/shaders/scene_standard_alphatest.h index 594fb86..2240b4b 100644 --- a/shaders/scene_standard_alphatest.h +++ b/shaders/scene_standard_alphatest.h @@ -127,7 +127,7 @@ static struct vg_shader _shader_scene_standard_alphatest = { "//const vec3 SUN_COLOUR = vec3( 1.10, 0.89, 0.35 );\n" "\n" "const float SUN_ANGLE = 0.0001;\n" -"const float PI = 3.14159265;\n" +"const float PI = 3.14159265358979323846264;\n" "\n" "//struct world_info\n" "//{\n" @@ -139,6 +139,37 @@ static struct vg_shader _shader_scene_standard_alphatest = { "// vec3 sun_dir;\n" "//};\n" "\n" +"vec3 rand33(vec3 p3)\n" +"{\n" +" p3 = fract(p3 * vec3(.1031, .1030, .0973));\n" +" p3 += dot(p3, p3.yxz+33.33);\n" +" return fract((p3.xxy + p3.yxx)*p3.zyx);\n" +"}\n" +"\n" +"float stars( vec3 rd, float rr, float size ){\n" +" vec3 co = rd * rr;\n" +"\n" +" float a = atan(co.y, length(co.xz)) + 4.0 * PI;\n" +"\n" +" float spaces = 1.0 / rr;\n" +" size = (rr * 0.0015) * fwidth(a) * 1000.0 * size;\n" +" a -= mod(a, spaces) - spaces * 0.5;\n" +"\n" +" float count = floor(sqrt(pow(rr, 2.0) * (1.0 - pow(sin(a), 2.0))) * 3.0);\n" +" \n" +" float plane = atan(co.z, co.x) + 4.0 * PI;\n" +" plane = plane - mod(plane, PI / count);\n" +"\n" +" vec2 delta = rand33(vec3(plane, a, 0.0)).xy;\n" +"\n" +" float level = sin(a + spaces * (delta.y - 0.5) * (1.0 - size)) * rr;\n" +" float ydist = sqrt(rr * rr - level * level);\n" +" float angle = plane + (PI * (delta.x * (1.0-size) + size * 0.5) / count);\n" +" vec3 center = vec3(cos(angle) * ydist, level, sin(angle) * ydist);\n" +" float star = smoothstep(size, 0.0, distance(center, co));\n" +" return star;\n" +"}\n" +"\n" "float luminance( vec3 v )\n" "{\n" " return dot( v, vec3(0.2126, 0.7152, 0.0722) );\n" @@ -173,8 +204,15 @@ static struct vg_shader _shader_scene_standard_alphatest = { " \n" " vec3 sun_colour = mix( vec3(1.0), g_sunset_colour.rgb, g_sunset_phase*0.5 );\n" " sun_colour *= sun_shape;\n" +"\n" +"\n" +" float star = 0.0;\n" +" for( float j = 1.0; j <= 4.1; j += 1.0 ){\n" +" float m = mix(0.6, 0.9, smoothstep(1.0, 2.0, j));\n" +" star += stars( ray_dir, 1.94 * pow( 1.64, j ), m ) * (1.0 / pow(4.0, j));\n" +" }\n" " \n" -" vec3 composite = sky_colour + sun_colour;\n" +" vec3 composite = sky_colour + sun_colour + star*10.0*max(0.0,(1.0-g_day_phase*2.0));\n" " return composite;\n" "}\n" "\n" @@ -245,19 +283,11 @@ static struct vg_shader _shader_scene_standard_alphatest = { " return pow(max(dot( halfview, specdir ), 0.0), exponent);\n" "}\n" "\n" -"vec3 scene_apply_fog( vec3 vfrag, vec3 colour, float fdist )\n" -"{\n" +"vec3 scene_apply_fog( vec3 vfrag, vec3 colour, float fdist ){\n" " float dist = pow(fdist*0.0010,0.78);\n" " return mix( vfrag, colour, min( 1.0, dist ) );\n" "}\n" "\n" -"vec3 rand33(vec3 p3)\n" -"{\n" -" p3 = fract(p3 * vec3(.1031, .1030, .0973));\n" -" p3 += dot(p3, p3.yxz+33.33);\n" -" return fract((p3.xxy + p3.yxx)*p3.zyx);\n" -"}\n" -"\n" "vec3 scene_calculate_light( int light_index, \n" " vec3 halfview, vec3 co, vec3 normal )\n" "{\n" diff --git a/shaders/scene_terrain.h b/shaders/scene_terrain.h index 6d40ebd..faeb11e 100644 --- a/shaders/scene_terrain.h +++ b/shaders/scene_terrain.h @@ -128,7 +128,7 @@ static struct vg_shader _shader_scene_terrain = { "//const vec3 SUN_COLOUR = vec3( 1.10, 0.89, 0.35 );\n" "\n" "const float SUN_ANGLE = 0.0001;\n" -"const float PI = 3.14159265;\n" +"const float PI = 3.14159265358979323846264;\n" "\n" "//struct world_info\n" "//{\n" @@ -140,6 +140,37 @@ static struct vg_shader _shader_scene_terrain = { "// vec3 sun_dir;\n" "//};\n" "\n" +"vec3 rand33(vec3 p3)\n" +"{\n" +" p3 = fract(p3 * vec3(.1031, .1030, .0973));\n" +" p3 += dot(p3, p3.yxz+33.33);\n" +" return fract((p3.xxy + p3.yxx)*p3.zyx);\n" +"}\n" +"\n" +"float stars( vec3 rd, float rr, float size ){\n" +" vec3 co = rd * rr;\n" +"\n" +" float a = atan(co.y, length(co.xz)) + 4.0 * PI;\n" +"\n" +" float spaces = 1.0 / rr;\n" +" size = (rr * 0.0015) * fwidth(a) * 1000.0 * size;\n" +" a -= mod(a, spaces) - spaces * 0.5;\n" +"\n" +" float count = floor(sqrt(pow(rr, 2.0) * (1.0 - pow(sin(a), 2.0))) * 3.0);\n" +" \n" +" float plane = atan(co.z, co.x) + 4.0 * PI;\n" +" plane = plane - mod(plane, PI / count);\n" +"\n" +" vec2 delta = rand33(vec3(plane, a, 0.0)).xy;\n" +"\n" +" float level = sin(a + spaces * (delta.y - 0.5) * (1.0 - size)) * rr;\n" +" float ydist = sqrt(rr * rr - level * level);\n" +" float angle = plane + (PI * (delta.x * (1.0-size) + size * 0.5) / count);\n" +" vec3 center = vec3(cos(angle) * ydist, level, sin(angle) * ydist);\n" +" float star = smoothstep(size, 0.0, distance(center, co));\n" +" return star;\n" +"}\n" +"\n" "float luminance( vec3 v )\n" "{\n" " return dot( v, vec3(0.2126, 0.7152, 0.0722) );\n" @@ -174,8 +205,15 @@ static struct vg_shader _shader_scene_terrain = { " \n" " vec3 sun_colour = mix( vec3(1.0), g_sunset_colour.rgb, g_sunset_phase*0.5 );\n" " sun_colour *= sun_shape;\n" +"\n" +"\n" +" float star = 0.0;\n" +" for( float j = 1.0; j <= 4.1; j += 1.0 ){\n" +" float m = mix(0.6, 0.9, smoothstep(1.0, 2.0, j));\n" +" star += stars( ray_dir, 1.94 * pow( 1.64, j ), m ) * (1.0 / pow(4.0, j));\n" +" }\n" " \n" -" vec3 composite = sky_colour + sun_colour;\n" +" vec3 composite = sky_colour + sun_colour + star*10.0*max(0.0,(1.0-g_day_phase*2.0));\n" " return composite;\n" "}\n" "\n" @@ -246,19 +284,11 @@ static struct vg_shader _shader_scene_terrain = { " return pow(max(dot( halfview, specdir ), 0.0), exponent);\n" "}\n" "\n" -"vec3 scene_apply_fog( vec3 vfrag, vec3 colour, float fdist )\n" -"{\n" +"vec3 scene_apply_fog( vec3 vfrag, vec3 colour, float fdist ){\n" " float dist = pow(fdist*0.0010,0.78);\n" " return mix( vfrag, colour, min( 1.0, dist ) );\n" "}\n" "\n" -"vec3 rand33(vec3 p3)\n" -"{\n" -" p3 = fract(p3 * vec3(.1031, .1030, .0973));\n" -" p3 += dot(p3, p3.yxz+33.33);\n" -" return fract((p3.xxy + p3.yxx)*p3.zyx);\n" -"}\n" -"\n" "vec3 scene_calculate_light( int light_index, \n" " vec3 halfview, vec3 co, vec3 normal )\n" "{\n" diff --git a/shaders/scene_vertex_blend.h b/shaders/scene_vertex_blend.h index aba9d8b..672d154 100644 --- a/shaders/scene_vertex_blend.h +++ b/shaders/scene_vertex_blend.h @@ -126,7 +126,7 @@ static struct vg_shader _shader_scene_vertex_blend = { "//const vec3 SUN_COLOUR = vec3( 1.10, 0.89, 0.35 );\n" "\n" "const float SUN_ANGLE = 0.0001;\n" -"const float PI = 3.14159265;\n" +"const float PI = 3.14159265358979323846264;\n" "\n" "//struct world_info\n" "//{\n" @@ -138,6 +138,37 @@ static struct vg_shader _shader_scene_vertex_blend = { "// vec3 sun_dir;\n" "//};\n" "\n" +"vec3 rand33(vec3 p3)\n" +"{\n" +" p3 = fract(p3 * vec3(.1031, .1030, .0973));\n" +" p3 += dot(p3, p3.yxz+33.33);\n" +" return fract((p3.xxy + p3.yxx)*p3.zyx);\n" +"}\n" +"\n" +"float stars( vec3 rd, float rr, float size ){\n" +" vec3 co = rd * rr;\n" +"\n" +" float a = atan(co.y, length(co.xz)) + 4.0 * PI;\n" +"\n" +" float spaces = 1.0 / rr;\n" +" size = (rr * 0.0015) * fwidth(a) * 1000.0 * size;\n" +" a -= mod(a, spaces) - spaces * 0.5;\n" +"\n" +" float count = floor(sqrt(pow(rr, 2.0) * (1.0 - pow(sin(a), 2.0))) * 3.0);\n" +" \n" +" float plane = atan(co.z, co.x) + 4.0 * PI;\n" +" plane = plane - mod(plane, PI / count);\n" +"\n" +" vec2 delta = rand33(vec3(plane, a, 0.0)).xy;\n" +"\n" +" float level = sin(a + spaces * (delta.y - 0.5) * (1.0 - size)) * rr;\n" +" float ydist = sqrt(rr * rr - level * level);\n" +" float angle = plane + (PI * (delta.x * (1.0-size) + size * 0.5) / count);\n" +" vec3 center = vec3(cos(angle) * ydist, level, sin(angle) * ydist);\n" +" float star = smoothstep(size, 0.0, distance(center, co));\n" +" return star;\n" +"}\n" +"\n" "float luminance( vec3 v )\n" "{\n" " return dot( v, vec3(0.2126, 0.7152, 0.0722) );\n" @@ -172,8 +203,15 @@ static struct vg_shader _shader_scene_vertex_blend = { " \n" " vec3 sun_colour = mix( vec3(1.0), g_sunset_colour.rgb, g_sunset_phase*0.5 );\n" " sun_colour *= sun_shape;\n" +"\n" +"\n" +" float star = 0.0;\n" +" for( float j = 1.0; j <= 4.1; j += 1.0 ){\n" +" float m = mix(0.6, 0.9, smoothstep(1.0, 2.0, j));\n" +" star += stars( ray_dir, 1.94 * pow( 1.64, j ), m ) * (1.0 / pow(4.0, j));\n" +" }\n" " \n" -" vec3 composite = sky_colour + sun_colour;\n" +" vec3 composite = sky_colour + sun_colour + star*10.0*max(0.0,(1.0-g_day_phase*2.0));\n" " return composite;\n" "}\n" "\n" @@ -244,19 +282,11 @@ static struct vg_shader _shader_scene_vertex_blend = { " return pow(max(dot( halfview, specdir ), 0.0), exponent);\n" "}\n" "\n" -"vec3 scene_apply_fog( vec3 vfrag, vec3 colour, float fdist )\n" -"{\n" +"vec3 scene_apply_fog( vec3 vfrag, vec3 colour, float fdist ){\n" " float dist = pow(fdist*0.0010,0.78);\n" " return mix( vfrag, colour, min( 1.0, dist ) );\n" "}\n" "\n" -"vec3 rand33(vec3 p3)\n" -"{\n" -" p3 = fract(p3 * vec3(.1031, .1030, .0973));\n" -" p3 += dot(p3, p3.yxz+33.33);\n" -" return fract((p3.xxy + p3.yxx)*p3.zyx);\n" -"}\n" -"\n" "vec3 scene_calculate_light( int light_index, \n" " vec3 halfview, vec3 co, vec3 normal )\n" "{\n" diff --git a/shaders/scene_water.h b/shaders/scene_water.h index 669f96d..2ce696c 100644 --- a/shaders/scene_water.h +++ b/shaders/scene_water.h @@ -136,7 +136,7 @@ static struct vg_shader _shader_scene_water = { "//const vec3 SUN_COLOUR = vec3( 1.10, 0.89, 0.35 );\n" "\n" "const float SUN_ANGLE = 0.0001;\n" -"const float PI = 3.14159265;\n" +"const float PI = 3.14159265358979323846264;\n" "\n" "//struct world_info\n" "//{\n" @@ -148,6 +148,37 @@ static struct vg_shader _shader_scene_water = { "// vec3 sun_dir;\n" "//};\n" "\n" +"vec3 rand33(vec3 p3)\n" +"{\n" +" p3 = fract(p3 * vec3(.1031, .1030, .0973));\n" +" p3 += dot(p3, p3.yxz+33.33);\n" +" return fract((p3.xxy + p3.yxx)*p3.zyx);\n" +"}\n" +"\n" +"float stars( vec3 rd, float rr, float size ){\n" +" vec3 co = rd * rr;\n" +"\n" +" float a = atan(co.y, length(co.xz)) + 4.0 * PI;\n" +"\n" +" float spaces = 1.0 / rr;\n" +" size = (rr * 0.0015) * fwidth(a) * 1000.0 * size;\n" +" a -= mod(a, spaces) - spaces * 0.5;\n" +"\n" +" float count = floor(sqrt(pow(rr, 2.0) * (1.0 - pow(sin(a), 2.0))) * 3.0);\n" +" \n" +" float plane = atan(co.z, co.x) + 4.0 * PI;\n" +" plane = plane - mod(plane, PI / count);\n" +"\n" +" vec2 delta = rand33(vec3(plane, a, 0.0)).xy;\n" +"\n" +" float level = sin(a + spaces * (delta.y - 0.5) * (1.0 - size)) * rr;\n" +" float ydist = sqrt(rr * rr - level * level);\n" +" float angle = plane + (PI * (delta.x * (1.0-size) + size * 0.5) / count);\n" +" vec3 center = vec3(cos(angle) * ydist, level, sin(angle) * ydist);\n" +" float star = smoothstep(size, 0.0, distance(center, co));\n" +" return star;\n" +"}\n" +"\n" "float luminance( vec3 v )\n" "{\n" " return dot( v, vec3(0.2126, 0.7152, 0.0722) );\n" @@ -182,8 +213,15 @@ static struct vg_shader _shader_scene_water = { " \n" " vec3 sun_colour = mix( vec3(1.0), g_sunset_colour.rgb, g_sunset_phase*0.5 );\n" " sun_colour *= sun_shape;\n" +"\n" +"\n" +" float star = 0.0;\n" +" for( float j = 1.0; j <= 4.1; j += 1.0 ){\n" +" float m = mix(0.6, 0.9, smoothstep(1.0, 2.0, j));\n" +" star += stars( ray_dir, 1.94 * pow( 1.64, j ), m ) * (1.0 / pow(4.0, j));\n" +" }\n" " \n" -" vec3 composite = sky_colour + sun_colour;\n" +" vec3 composite = sky_colour + sun_colour + star*10.0*max(0.0,(1.0-g_day_phase*2.0));\n" " return composite;\n" "}\n" "\n" @@ -254,19 +292,11 @@ static struct vg_shader _shader_scene_water = { " return pow(max(dot( halfview, specdir ), 0.0), exponent);\n" "}\n" "\n" -"vec3 scene_apply_fog( vec3 vfrag, vec3 colour, float fdist )\n" -"{\n" +"vec3 scene_apply_fog( vec3 vfrag, vec3 colour, float fdist ){\n" " float dist = pow(fdist*0.0010,0.78);\n" " return mix( vfrag, colour, min( 1.0, dist ) );\n" "}\n" "\n" -"vec3 rand33(vec3 p3)\n" -"{\n" -" p3 = fract(p3 * vec3(.1031, .1030, .0973));\n" -" p3 += dot(p3, p3.yxz+33.33);\n" -" return fract((p3.xxy + p3.yxx)*p3.zyx);\n" -"}\n" -"\n" "vec3 scene_calculate_light( int light_index, \n" " vec3 halfview, vec3 co, vec3 normal )\n" "{\n" diff --git a/shaders/scene_water_fast.h b/shaders/scene_water_fast.h index 1be0926..3e88f1d 100644 --- a/shaders/scene_water_fast.h +++ b/shaders/scene_water_fast.h @@ -133,7 +133,7 @@ static struct vg_shader _shader_scene_water_fast = { "//const vec3 SUN_COLOUR = vec3( 1.10, 0.89, 0.35 );\n" "\n" "const float SUN_ANGLE = 0.0001;\n" -"const float PI = 3.14159265;\n" +"const float PI = 3.14159265358979323846264;\n" "\n" "//struct world_info\n" "//{\n" @@ -145,6 +145,37 @@ static struct vg_shader _shader_scene_water_fast = { "// vec3 sun_dir;\n" "//};\n" "\n" +"vec3 rand33(vec3 p3)\n" +"{\n" +" p3 = fract(p3 * vec3(.1031, .1030, .0973));\n" +" p3 += dot(p3, p3.yxz+33.33);\n" +" return fract((p3.xxy + p3.yxx)*p3.zyx);\n" +"}\n" +"\n" +"float stars( vec3 rd, float rr, float size ){\n" +" vec3 co = rd * rr;\n" +"\n" +" float a = atan(co.y, length(co.xz)) + 4.0 * PI;\n" +"\n" +" float spaces = 1.0 / rr;\n" +" size = (rr * 0.0015) * fwidth(a) * 1000.0 * size;\n" +" a -= mod(a, spaces) - spaces * 0.5;\n" +"\n" +" float count = floor(sqrt(pow(rr, 2.0) * (1.0 - pow(sin(a), 2.0))) * 3.0);\n" +" \n" +" float plane = atan(co.z, co.x) + 4.0 * PI;\n" +" plane = plane - mod(plane, PI / count);\n" +"\n" +" vec2 delta = rand33(vec3(plane, a, 0.0)).xy;\n" +"\n" +" float level = sin(a + spaces * (delta.y - 0.5) * (1.0 - size)) * rr;\n" +" float ydist = sqrt(rr * rr - level * level);\n" +" float angle = plane + (PI * (delta.x * (1.0-size) + size * 0.5) / count);\n" +" vec3 center = vec3(cos(angle) * ydist, level, sin(angle) * ydist);\n" +" float star = smoothstep(size, 0.0, distance(center, co));\n" +" return star;\n" +"}\n" +"\n" "float luminance( vec3 v )\n" "{\n" " return dot( v, vec3(0.2126, 0.7152, 0.0722) );\n" @@ -179,8 +210,15 @@ static struct vg_shader _shader_scene_water_fast = { " \n" " vec3 sun_colour = mix( vec3(1.0), g_sunset_colour.rgb, g_sunset_phase*0.5 );\n" " sun_colour *= sun_shape;\n" +"\n" +"\n" +" float star = 0.0;\n" +" for( float j = 1.0; j <= 4.1; j += 1.0 ){\n" +" float m = mix(0.6, 0.9, smoothstep(1.0, 2.0, j));\n" +" star += stars( ray_dir, 1.94 * pow( 1.64, j ), m ) * (1.0 / pow(4.0, j));\n" +" }\n" " \n" -" vec3 composite = sky_colour + sun_colour;\n" +" vec3 composite = sky_colour + sun_colour + star*10.0*max(0.0,(1.0-g_day_phase*2.0));\n" " return composite;\n" "}\n" "\n" @@ -251,19 +289,11 @@ static struct vg_shader _shader_scene_water_fast = { " return pow(max(dot( halfview, specdir ), 0.0), exponent);\n" "}\n" "\n" -"vec3 scene_apply_fog( vec3 vfrag, vec3 colour, float fdist )\n" -"{\n" +"vec3 scene_apply_fog( vec3 vfrag, vec3 colour, float fdist ){\n" " float dist = pow(fdist*0.0010,0.78);\n" " return mix( vfrag, colour, min( 1.0, dist ) );\n" "}\n" "\n" -"vec3 rand33(vec3 p3)\n" -"{\n" -" p3 = fract(p3 * vec3(.1031, .1030, .0973));\n" -" p3 += dot(p3, p3.yxz+33.33);\n" -" return fract((p3.xxy + p3.yxx)*p3.zyx);\n" -"}\n" -"\n" "vec3 scene_calculate_light( int light_index, \n" " vec3 halfview, vec3 co, vec3 normal )\n" "{\n" diff --git a/world.h b/world.h index c81d9ed..02bb02e 100644 --- a/world.h +++ b/world.h @@ -182,6 +182,11 @@ struct world_instance { ent_cubemap, ent_miniworld; + enum skybox { + k_skybox_default, + k_skybox_space + } skybox; + ent_gate *rendering_gate; /* logic diff --git a/world_load.c b/world_load.c index e8f545c..1605325 100644 --- a/world_load.c +++ b/world_load.c @@ -72,8 +72,15 @@ static void world_instance_load_mdl( u32 instance_id, const char *path ){ mdl_array_ptr infos; mdl_load_array( meta, &infos, "ent_worldinfo", vg_mem.scratch ); + world->skybox = k_skybox_default; if( mdl_arrcount(&infos) ){ world->info = *((ent_worldinfo *)mdl_arritm(&infos,0)); + + if( world->meta.info.version >= 104 ){ + if( MDL_CONST_PSTREQ( &world->meta, world->info.pstr_skybox,"space")){ + world->skybox = k_skybox_space; + } + } } else{ world->info.pstr_author = 0; @@ -82,7 +89,7 @@ static void world_instance_load_mdl( u32 instance_id, const char *path ){ world->info.timezone = 0.0f; } - time_t seconds = time(NULL) % ((u32)k_day_length*60); + time_t seconds = time(NULL) % ((u32)vg_maxf(1.0f,k_day_length)*60); world->time = ((f64)(seconds)/(k_day_length*60.0)); world->time += (world->info.timezone/24.0); diff --git a/world_render.c b/world_render.c index 1e99566..1463142 100644 --- a/world_render.c +++ b/world_render.c @@ -84,6 +84,7 @@ static void world_render_init(void) shader_scene_depth_register(); shader_scene_position_register(); shader_model_sky_register(); + shader_model_sky_space_register(); vg_info( "Loading world resources\n" ); vg_linear_clear( vg_mem.scratch ); @@ -644,8 +645,7 @@ static void render_terrain( world_instance *world, camera *cam ){ world_render_both_stages( world, &pass ); } -static void render_sky( world_instance *world, camera *cam ) -{ +static void render_sky( world_instance *world, camera *cam ){ /* * Modify matrix to remove clipping and view translation */ @@ -673,15 +673,32 @@ static void render_sky( world_instance *world, camera *cam ) /* * Draw */ - shader_model_sky_use(); - shader_model_sky_uMdl( identity_matrix ); - shader_model_sky_uPv( pv ); - shader_model_sky_uPvmPrev( pv_prev ); - shader_model_sky_uTexGarbage(0); - world_link_lighting_ub( world, _shader_model_sky.id ); + if( world->skybox == k_skybox_default ){ + shader_model_sky_use(); + shader_model_sky_uMdl( identity_matrix ); + shader_model_sky_uPv( pv ); + shader_model_sky_uPvmPrev( pv_prev ); + shader_model_sky_uTexGarbage(0); + world_link_lighting_ub( world, _shader_model_sky.id ); + + glActiveTexture( GL_TEXTURE0 ); + glBindTexture( GL_TEXTURE_2D, world_render.tex_terrain_noise ); + } + else if( world->skybox == k_skybox_space ){ + shader_model_sky_space_use(); - glActiveTexture( GL_TEXTURE0 ); - glBindTexture( GL_TEXTURE_2D, world_render.tex_terrain_noise ); + shader_model_sky_space_uMdl( identity_matrix ); + shader_model_sky_space_uPv( pv ); + shader_model_sky_space_uPvmPrev( pv_prev ); + shader_model_sky_space_uTexGarbage(0); + world_link_lighting_ub( world, _shader_model_sky_space.id ); + + glActiveTexture( GL_TEXTURE0 ); + glBindTexture( GL_TEXTURE_2D, world_render.tex_terrain_noise ); + } + else { + assert(0); + } glDepthMask( GL_FALSE ); glDisable( GL_DEPTH_TEST ); @@ -858,7 +875,9 @@ static void render_world_override_pass( world_instance *world, } } -static void render_world_override( world_instance *world, m4x3f mmdl ){ +static void render_world_override( world_instance *world, + world_instance *lighting_source, + m4x3f mmdl ){ struct world_pass pass = { .cam = &skaterift.cam, .fn_bind_textures = bindpoint_override, @@ -869,32 +888,51 @@ static void render_world_override( world_instance *world, m4x3f mmdl ){ }; shader_scene_override_use(); +#if 0 respawn_chooser_shader_uniforms(); +#endif shader_scene_override_uTexGarbage(0); shader_scene_override_uTexMain(1); shader_scene_override_uPv( pass.cam->mtx.pv ); - WORLD_BIND_LIGHT_BUFFERS_UB0_TEX234( world, scene_override ); + WORLD_BIND_LIGHT_BUFFERS_UB0_TEX234( lighting_source, scene_override ); bind_terrain_noise(); - m4x3f mmdl_inv; - m4x3_invert_full( mmdl, mmdl_inv ); - - v3f cam_pos; - m4x3_mulv( mmdl_inv, pass.cam->transform[3], cam_pos ); - shader_scene_override_uCamera( cam_pos ); + shader_scene_override_uCamera( pass.cam->transform[3] ); m4x4f mpvm_prev; m4x3_expand( mmdl, mpvm_prev ); m4x4_mul( skaterift.cam.mtx_prev.pv, mpvm_prev, mpvm_prev ); m3x3f mnormal; - m3x3_inv( mmdl_inv, mnormal ); + m3x3_inv( mmdl, mnormal ); m3x3_transpose( mnormal, mnormal ); v3_normalize( mnormal[0] ); v3_normalize( mnormal[1] ); v3_normalize( mnormal[2] ); + v4f uPlayerPos, uSpawnPos; + v4_zero( uPlayerPos ); + v4_zero( uSpawnPos ); + + v3_copy( world->player_co, uPlayerPos ); + + m4x3f mmdl_inv; + m4x3_invert_full( mmdl, mmdl_inv ); + v3f localized; + m4x3_mulv( mmdl_inv, localplayer.rb.co, localized ); + ent_spawn *spawn = world_find_closest_spawn( world, localized ); + if( spawn ) + v3_copy( spawn->transform.co, uSpawnPos ); + + uPlayerPos[3] = v3_dist(uPlayerPos,uSpawnPos); + uSpawnPos[3] = 1.0f/uPlayerPos[3]; + + shader_scene_override_uPlayerPos( uPlayerPos ); + shader_scene_override_uSpawnPos( uSpawnPos ); + + + glDisable( GL_CULL_FACE ); mesh_bind( &world->mesh_geo ); pass.geo_type = k_world_geo_type_solid; diff --git a/world_render.h b/world_render.h index 1810400..d7ea519 100644 --- a/world_render.h +++ b/world_render.h @@ -21,6 +21,7 @@ #include "shaders/scene_position.h" #include "shaders/scene_font.h" #include "shaders/model_sky.h" +#include "shaders/model_sky_space.h" static const float k_world_light_cube_size = 8.0f; @@ -78,7 +79,9 @@ static void render_world( world_instance *world, camera *cam, int layer_depth ); static void render_world_cubemaps( world_instance *world ); static void bind_terrain_noise(void); -static void render_world_override( world_instance *world, m4x3f mmdl ); +static void render_world_override( world_instance *world, + world_instance *lighting_source, + m4x3f mmdl ); #define WORLD_BIND_LIGHT_BUFFERS_UB0_TEX234( WORLD, SHADER ) \ world_link_lighting_ub( WORLD, _shader_##SHADER.id ); \ -- 2.25.1