diff --git a/base/shaders/line.kong b/base/shaders/line.kong index 0beb64ae..6b5e0b31 100644 --- a/base/shaders/line.kong +++ b/base/shaders/line.kong @@ -11,7 +11,6 @@ struct vert_in { struct vert_out { pos: float4; - dummy: float3; } fun line_vert(input: vert_in): vert_out { diff --git a/base/shaders/line_overlay.kong b/base/shaders/line_overlay.kong index 8c0d1ed3..0137f5b4 100644 --- a/base/shaders/line_overlay.kong +++ b/base/shaders/line_overlay.kong @@ -11,7 +11,6 @@ struct vert_in { struct vert_out { pos: float4; - dummy: float3; } fun line_overlay_vert(input: vert_in): vert_out { diff --git a/base/sources/ts/line_draw.ts b/base/sources/ts/line_draw.ts index daa47e98..74fbc342 100644 --- a/base/sources/ts/line_draw.ts +++ b/base/sources/ts/line_draw.ts @@ -237,8 +237,7 @@ function line_draw_end() { gpu_set_index_buffer(line_draw_index_buffer); gpu_set_pipeline(line_draw_pipeline); let camera: camera_object_t = scene_camera; - line_draw_vp = mat4_clone(camera.v); - line_draw_vp = mat4_mult_mat(line_draw_vp, camera.p); + line_draw_vp = mat4_clone(camera.vp); gpu_set_matrix4(line_draw_vp_loc, line_draw_vp); gpu_set_float3(line_draw_color_loc, color_get_rb(line_draw_color) / 255, diff --git a/paint/shaders/cursor.kong b/paint/shaders/cursor.kong index 9df0bd28..98efc1dd 100644 --- a/paint/shaders/cursor.kong +++ b/paint/shaders/cursor.kong @@ -29,7 +29,7 @@ struct vert_out { fun get_pos(uv: float2): float3 { var depth: float = sample_lod(gbufferD, sampler_linear, float2(uv.x, 1.0 - uv.y), 0.0).r; - var wpos: float4 = float4(uv * 2.0 - 1.0, depth * 2.0 - 1.0, 1.0); + var wpos: float4 = float4(uv * 2.0 - 1.0, depth, 1.0); wpos = constants.invVP * wpos; return wpos.xyz / wpos.w; } diff --git a/paint/shaders/deferred_light.kong b/paint/shaders/deferred_light.kong index 98088fd6..47183bd3 100644 --- a/paint/shaders/deferred_light.kong +++ b/paint/shaders/deferred_light.kong @@ -134,7 +134,7 @@ fun surface_f0(base_color: float3, metalness: float): float3 { fun get_pos(eye: float3, eye_look: float3, view_ray: float3, depth: float, camera_proj: float2): float3 { // eye_look, view_ray should be normalized - var linear_depth: float = camera_proj.y / ((depth * 0.5 + 0.5) - camera_proj.x); + var linear_depth: float = camera_proj.y / (depth - camera_proj.x); var view_z_dist: float = dot(eye_look, view_ray); var wposition: float3 = eye + view_ray * (linear_depth / view_z_dist); return wposition; @@ -232,7 +232,7 @@ fun deferred_light_frag(input: vert_out): float4 { var albedo: float3 = surface_albedo(g1.rgb, metallic); var f0: float3 = surface_f0(g1.rgb, metallic); - var depth: float = sample_lod(gbufferD, sampler_linear, input.tex, 0.0).r * 2.0 - 1.0; + var depth: float = sample_lod(gbufferD, sampler_linear, input.tex, 0.0).r; var p: float3 = get_pos(constants.eye, constants.eye_look, normalize(input.view_ray), depth, constants.camera_proj); var v: float3 = normalize(constants.eye - p); var dotnv: float = max(0.0, dot(n, v)); diff --git a/paint/shaders/ssao_pass.kong b/paint/shaders/ssao_pass.kong index 9f16a7e6..615e3e00 100644 --- a/paint/shaders/ssao_pass.kong +++ b/paint/shaders/ssao_pass.kong @@ -17,7 +17,7 @@ const gbufferD: tex2d; const gbuffer0: tex2d; const max_steps: float = 24; -const ray_step: float = 0.0015; +const ray_step: float = 0.0005; struct vert_in { pos: float2; @@ -62,7 +62,7 @@ fun get_delta_depth(view_ray: float3, hit_coord: float3): float { if (coord.x < 0.0 || coord.x > 1.0 || coord.y < 0.0 || coord.y > 1.0) { return 1000.0; } - var depth: float = sample_lod(gbufferD, sampler_linear, coord, 0.0).r * 2.0 - 1.0; + var depth: float = sample_lod(gbufferD, sampler_linear, coord, 0.0).r; var p: float3 = get_pos_view(view_ray, depth); return p.z - hit_coord.z; } @@ -129,7 +129,7 @@ fun octahedron_wrap(v: float2): float2 { fun ssao_pass_frag(input: vert_out): float { var g0: float4 = sample_lod(gbuffer0, sampler_linear, input.tex, 0.0); - var d: float = sample_lod(gbufferD, sampler_linear, input.tex, 0.0).r * 2.0 - 1.0; + var d: float = sample_lod(gbufferD, sampler_linear, input.tex, 0.0).r; var enc: float2 = g0.rg; var n: float3; diff --git a/paint/sources/make_brush.ts b/paint/sources/make_brush.ts index 43137fd5..0266fcc5 100644 --- a/paint/sources/make_brush.ts +++ b/paint/sources/make_brush.ts @@ -16,7 +16,7 @@ function make_brush_run(kong: node_shader_t) { node_shader_write_frag(kong, "var depth: float = sample_lod(gbufferD, sampler_linear, constants.inp.xy, 0.0).r;"); node_shader_add_constant(kong, "invVP: float4x4", "_inv_view_proj_matrix"); - node_shader_write_frag(kong, "var winp: float4 = float4(float2(constants.inp.x, 1.0 - constants.inp.y) * 2.0 - 1.0, depth * 2.0 - 1.0, 1.0);"); + node_shader_write_frag(kong, "var winp: float4 = float4(float2(constants.inp.x, 1.0 - constants.inp.y) * 2.0 - 1.0, depth, 1.0);"); node_shader_write_frag(kong, "winp = constants.invVP * winp;"); node_shader_write_frag(kong, "winp.xyz = winp.xyz / winp.w;"); kong.frag_wposition = true; @@ -43,7 +43,7 @@ function make_brush_run(kong: node_shader_t) { node_shader_write_frag(kong, "var depthlast: float = sample_lod(gbufferD, sampler_linear, constants.inplast.xy, 0.0).r;"); - node_shader_write_frag(kong, "var winplast: float4 = float4(float2(constants.inplast.x, 1.0 - constants.inplast.y) * 2.0 - 1.0, depthlast * 2.0 - 1.0, 1.0);"); + node_shader_write_frag(kong, "var winplast: float4 = float4(float2(constants.inplast.x, 1.0 - constants.inplast.y) * 2.0 - 1.0, depthlast, 1.0);"); node_shader_write_frag(kong, "winplast = constants.invVP * winplast;"); node_shader_write_frag(kong, "winplast.xyz = winplast.xyz / winplast.w;"); diff --git a/paint/sources/make_paint.ts b/paint/sources/make_paint.ts index b4920a9d..0b435bd6 100644 --- a/paint/sources/make_paint.ts +++ b/paint/sources/make_paint.ts @@ -110,7 +110,9 @@ function make_paint_run(data: material_t, matcon: material_context_t): node_shad node_shader_add_out(kong, "ndc: float4"); node_shader_write_attrib_vert(kong, "output.ndc = constants.WVP * float4(input.pos.xyz, 1.0);"); - node_shader_write_attrib_frag(kong, "var sp: float3 = (input.ndc.xyz / input.ndc.w) * 0.5 + 0.5;"); + node_shader_write_attrib_frag(kong, "var sp: float3 = (input.ndc.xyz / input.ndc.w);"); + node_shader_write_attrib_frag(kong, "sp.x = sp.x * 0.5 + 0.5;"); + node_shader_write_attrib_frag(kong, "sp.y = sp.y * 0.5 + 0.5;"); node_shader_write_attrib_frag(kong, "sp.y = 1.0 - sp.y;"); node_shader_write_attrib_frag(kong, "sp.z -= 0.0001;"); // small bias diff --git a/paint/sources/node_shader.ts b/paint/sources/node_shader.ts index 828c449b..ec49eda9 100644 --- a/paint/sources/node_shader.ts +++ b/paint/sources/node_shader.ts @@ -216,7 +216,6 @@ function node_shader_get(raw: node_shader_t): string { s += raw.vert_normal; s += raw.vert; s += raw.vert_end; - s += "\toutput.pos.z = (output.pos.z + output.pos.w) * 0.5;\n"; //// if (raw.consts.length == 0) { s += "\toutput.empty = constants.empty;\n"; } diff --git a/paint/sources/strings.ts b/paint/sources/strings.ts index 7b08d783..0825986a 100644 --- a/paint/sources/strings.ts +++ b/paint/sources/strings.ts @@ -371,7 +371,7 @@ fun envmap_sample(lod: float, coord: float2): float3 { \ let str_get_pos_nor_from_depth: string = "\ fun get_pos_from_depth(uv: float2, invVP: float4x4): float3 { \ var depth: float = sample_lod(gbufferD, sampler_linear, float2(uv.x, 1.0 - uv.y), 0.0).r; \ - var wpos: float4 = float4(uv * 2.0 - 1.0, depth * 2.0 - 1.0, 1.0); \ + var wpos: float4 = float4(uv * 2.0 - 1.0, depth, 1.0); \ wpos = invVP * wpos; \ return wpos.xyz / wpos.w; \ } \