From 5a6aaf633ce217f828d981cd8c55951ada67e2df Mon Sep 17 00:00:00 2001 From: LaG1924 Date: Sun, 27 Jun 2021 21:31:00 +0500 Subject: Moved block face model matrix transformation to CPU --- cwd/assets/altcraft/shaders/vert/face.vs | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) (limited to 'cwd') diff --git a/cwd/assets/altcraft/shaders/vert/face.vs b/cwd/assets/altcraft/shaders/vert/face.vs index 30ae0d7..424e215 100644 --- a/cwd/assets/altcraft/shaders/vert/face.vs +++ b/cwd/assets/altcraft/shaders/vert/face.vs @@ -1,9 +1,8 @@ #version 330 core -layout (location = 0) in vec3 position; +layout (location = 3) in vec4 position[6]; layout (location = 2) in vec2 UvCoordinates; -layout (location = 7) in vec4 Texture; -layout (location = 8) in mat4 model; +layout (location = 11) in vec4 Texture; layout (location = 12) in vec3 color; layout (location = 13) in vec2 light; layout (location = 14) in float TextureLayer; @@ -22,7 +21,6 @@ uniform mat4 projView; vec3 TransformTextureCoord(vec4 TextureAtlasCoords, vec2 UvCoords, float Layer) { float x = TextureAtlasCoords.x; float y = TextureAtlasCoords.y; -// float w = TextureAtlasCoords.z; float h = TextureAtlasCoords.w; vec2 transformed = vec2(x, 1 - y - h) + UvCoords * TextureAtlasCoords.zw; return vec3(transformed.x, transformed.y, Layer); @@ -30,8 +28,7 @@ vec3 TransformTextureCoord(vec4 TextureAtlasCoords, vec2 UvCoords, float Layer) void main() { - vec4 sourcePosition = vec4(position,1.0f); - gl_Position = projView * model * sourcePosition; + gl_Position = projView * position[gl_VertexID]; vec4 texturePos = Texture; float frameHeight = texturePos.w / TextureFrames; -- cgit v1.2.3 From f324c49d896eae159b7499ad6467f03dbcc900ca Mon Sep 17 00:00:00 2001 From: LaG1924 Date: Mon, 28 Jun 2021 16:25:32 +0500 Subject: More compact faces vertecies format --- cwd/assets/altcraft/shaders/vert/face.vs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'cwd') diff --git a/cwd/assets/altcraft/shaders/vert/face.vs b/cwd/assets/altcraft/shaders/vert/face.vs index 424e215..e054dd8 100644 --- a/cwd/assets/altcraft/shaders/vert/face.vs +++ b/cwd/assets/altcraft/shaders/vert/face.vs @@ -1,6 +1,6 @@ #version 330 core -layout (location = 3) in vec4 position[6]; +layout (location = 3) in vec4 position[4]; layout (location = 2) in vec2 UvCoordinates; layout (location = 11) in vec4 Texture; layout (location = 12) in vec3 color; -- cgit v1.2.3 From 04ad0ef50d7eb362fd13272fd1d610740b3ede5e Mon Sep 17 00:00:00 2001 From: LaG1924 Date: Mon, 28 Jun 2021 20:20:49 +0500 Subject: Embed UV to vertex data --- cwd/assets/altcraft/shaders/frag/face.fs | 3 +-- cwd/assets/altcraft/shaders/vert/face.vs | 37 ++++++++------------------------ 2 files changed, 10 insertions(+), 30 deletions(-) (limited to 'cwd') diff --git a/cwd/assets/altcraft/shaders/frag/face.fs b/cwd/assets/altcraft/shaders/frag/face.fs index bd2a2d7..314e47b 100644 --- a/cwd/assets/altcraft/shaders/frag/face.fs +++ b/cwd/assets/altcraft/shaders/frag/face.fs @@ -1,7 +1,6 @@ #version 330 core in VS_OUT { - vec2 UvPosition; vec3 Texture; vec3 Color; vec2 Light; @@ -47,4 +46,4 @@ void main() { color = vec4(color.rgb * faceLight, color.a); fragColor = color; -} \ No newline at end of file +} diff --git a/cwd/assets/altcraft/shaders/vert/face.vs b/cwd/assets/altcraft/shaders/vert/face.vs index e054dd8..e1f01fc 100644 --- a/cwd/assets/altcraft/shaders/vert/face.vs +++ b/cwd/assets/altcraft/shaders/vert/face.vs @@ -1,15 +1,13 @@ #version 330 core -layout (location = 3) in vec4 position[4]; -layout (location = 2) in vec2 UvCoordinates; -layout (location = 11) in vec4 Texture; -layout (location = 12) in vec3 color; -layout (location = 13) in vec2 light; -layout (location = 14) in float TextureLayer; -layout (location = 15) in float TextureFrames; +layout (location = 0) in vec4 position[4]; +layout (location = 4) in vec2 uv[4]; +layout (location = 8) in float uvLayer; +layout (location = 9) in vec2 animation; +layout (location = 10) in vec3 color; +layout (location = 11) in vec2 light; out VS_OUT { - vec2 UvPosition; vec3 Texture; vec3 Color; vec2 Light; @@ -18,27 +16,10 @@ out VS_OUT { uniform float GlobalTime; uniform mat4 projView; -vec3 TransformTextureCoord(vec4 TextureAtlasCoords, vec2 UvCoords, float Layer) { - float x = TextureAtlasCoords.x; - float y = TextureAtlasCoords.y; - float h = TextureAtlasCoords.w; - vec2 transformed = vec2(x, 1 - y - h) + UvCoords * TextureAtlasCoords.zw; - return vec3(transformed.x, transformed.y, Layer); -} - -void main() -{ +void main() { gl_Position = projView * position[gl_VertexID]; - - vec4 texturePos = Texture; - float frameHeight = texturePos.w / TextureFrames; - float currentFrame = mod(GlobalTime * 4.0f, TextureFrames); - currentFrame = trunc(currentFrame); - texturePos.w = frameHeight; - texturePos.y = texturePos.y + currentFrame * frameHeight; - - vs_out.UvPosition = UvCoordinates; - vs_out.Texture = TransformTextureCoord(texturePos,UvCoordinates,TextureLayer); vs_out.Color = color; vs_out.Light = light; + vs_out.Texture = vec3(uv[gl_VertexID], uvLayer); + vs_out.Texture.y -= animation.x * trunc(mod(GlobalTime * 4.0f, animation.y)); } -- cgit v1.2.3 From 08337925fe048d2e8b746bbc82493f4c2b8603d6 Mon Sep 17 00:00:00 2001 From: LaG1924 Date: Mon, 28 Jun 2021 21:31:26 +0500 Subject: Compacted vertices format --- cwd/assets/altcraft/shaders/vert/face.vs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'cwd') diff --git a/cwd/assets/altcraft/shaders/vert/face.vs b/cwd/assets/altcraft/shaders/vert/face.vs index e1f01fc..bea9228 100644 --- a/cwd/assets/altcraft/shaders/vert/face.vs +++ b/cwd/assets/altcraft/shaders/vert/face.vs @@ -1,9 +1,9 @@ #version 330 core -layout (location = 0) in vec4 position[4]; +layout (location = 0) in vec3 position[4]; layout (location = 4) in vec2 uv[4]; layout (location = 8) in float uvLayer; -layout (location = 9) in vec2 animation; +layout (location = 9) in float animation; layout (location = 10) in vec3 color; layout (location = 11) in vec2 light; @@ -17,9 +17,9 @@ uniform float GlobalTime; uniform mat4 projView; void main() { - gl_Position = projView * position[gl_VertexID]; + gl_Position = projView * vec4(position[gl_VertexID], 1.0f); vs_out.Color = color; vs_out.Light = light; vs_out.Texture = vec3(uv[gl_VertexID], uvLayer); - vs_out.Texture.y -= animation.x * trunc(mod(GlobalTime * 4.0f, animation.y)); + vs_out.Texture.y -= (uv[2].y - uv[0].y) * trunc(mod(GlobalTime * 4.0f, animation)); } -- cgit v1.2.3 From 2db3f2a415f20f1224e277cef93e6d9bb2a1244b Mon Sep 17 00:00:00 2001 From: LaG1924 Date: Tue, 29 Jun 2021 07:53:04 +0500 Subject: Tint calculation moved to vertex shader --- cwd/assets/altcraft/shaders/frag/face.fs | 35 ++------------------------------ cwd/assets/altcraft/shaders/vert/face.vs | 8 +++++--- 2 files changed, 7 insertions(+), 36 deletions(-) (limited to 'cwd') diff --git a/cwd/assets/altcraft/shaders/frag/face.fs b/cwd/assets/altcraft/shaders/frag/face.fs index 314e47b..30d44d2 100644 --- a/cwd/assets/altcraft/shaders/frag/face.fs +++ b/cwd/assets/altcraft/shaders/frag/face.fs @@ -3,47 +3,16 @@ in VS_OUT { vec3 Texture; vec3 Color; - vec2 Light; } fs_in; out vec4 fragColor; uniform sampler2DArray textureAtlas; -uniform float DayTime; -uniform float MinLightLevel; - -vec3 rgb2hsv(vec3 c) -{ - vec4 K = vec4(0.0, -1.0 / 3.0, 2.0 / 3.0, -1.0); - vec4 p = mix(vec4(c.bg, K.wz), vec4(c.gb, K.xy), step(c.b, c.g)); - vec4 q = mix(vec4(p.xyw, c.r), vec4(c.r, p.yzx), step(p.x, c.r)); - - float d = q.x - min(q.w, q.y); - float e = 1.0e-10; - return vec3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x); -} - -vec3 hsv2rgb(vec3 c) -{ - vec4 K = vec4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0); - vec3 p = abs(fract(c.xxx + K.xyz) * 6.0 - K.www); - return c.z * mix(K.xxx, clamp(p - K.xxx, 0.0, 1.0), c.y); -} void main() { - vec4 color = texture(textureAtlas,fs_in.Texture); + vec4 color = texture(textureAtlas,fs_in.Texture); if (color.a < 0.3) discard; - vec3 hsvColor = rgb2hsv(color.xyz); - hsvColor+=fs_in.Color; - color = vec4(hsv2rgb(hsvColor),1); - - float light = fs_in.Light.x / 15.0; - float skyLight = (fs_in.Light.y / 15.0) * DayTime; - - float faceLight = clamp(light + skyLight,MinLightLevel,1.0); - - color = vec4(color.rgb * faceLight, color.a); - fragColor = color; + fragColor = vec4(color.rgb * fs_in.Color, 1.0); } diff --git a/cwd/assets/altcraft/shaders/vert/face.vs b/cwd/assets/altcraft/shaders/vert/face.vs index bea9228..469ea94 100644 --- a/cwd/assets/altcraft/shaders/vert/face.vs +++ b/cwd/assets/altcraft/shaders/vert/face.vs @@ -10,16 +10,18 @@ layout (location = 11) in vec2 light; out VS_OUT { vec3 Texture; vec3 Color; - vec2 Light; } vs_out; uniform float GlobalTime; uniform mat4 projView; +uniform float DayTime; +uniform float MinLightLevel; void main() { gl_Position = projView * vec4(position[gl_VertexID], 1.0f); - vs_out.Color = color; - vs_out.Light = light; vs_out.Texture = vec3(uv[gl_VertexID], uvLayer); vs_out.Texture.y -= (uv[2].y - uv[0].y) * trunc(mod(GlobalTime * 4.0f, animation)); + + float faceLight = clamp(light.x / 15.0 + (light.y / 15.0) * DayTime, MinLightLevel, 1.0); + vs_out.Color = mix(color.rgb * faceLight, vec3(1,1,1) * faceLight, (color == vec3(0,0,0))); } -- cgit v1.2.3