From 9582baf2d2a639298205ebf1640c645cd3255cf4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Con=C3=A1l?= Date: Mon, 5 Feb 2024 12:26:00 -0500 Subject: [PATCH] Fixed index generation issue, debugging tessellation issue --- Renderer/Renderer.cpp | 3 ++- Renderer/Renderer.hpp | 2 +- Renderer/UniformBuffer.hpp | 3 ++- Resources/Texture.hpp | 2 +- Scene/Terrain.cpp | 4 ++-- UI/UI.cpp | 4 ++-- assets/shaders/terrain.frag | 6 +++++- assets/shaders/terrain.frag.spv | Bin 1048 -> 1280 bytes assets/shaders/terrain.tesc | 11 ++++++----- assets/shaders/terrain.tesc.spv | Bin 5932 -> 6032 bytes assets/shaders/terrain.tese | 10 +++++++--- assets/shaders/terrain.tese.spv | Bin 4212 -> 4500 bytes assets/shaders/terrain.vert | 7 ++++++- assets/shaders/terrain.vert.spv | Bin 1560 -> 1836 bytes 14 files changed, 34 insertions(+), 18 deletions(-) diff --git a/Renderer/Renderer.cpp b/Renderer/Renderer.cpp index ea89672..0729e0f 100644 --- a/Renderer/Renderer.cpp +++ b/Renderer/Renderer.cpp @@ -339,7 +339,8 @@ void Renderer::draw() { uniform_buffer->upload(UniformData { - .mvp = p * cam.view(), + .view = cam.view(), + .proj = p, .time = time, .cam_pos = cam.pos, .viewport = glm::vec2(viewport.width, viewport.y), diff --git a/Renderer/Renderer.hpp b/Renderer/Renderer.hpp index f43dd23..b884cc1 100644 --- a/Renderer/Renderer.hpp +++ b/Renderer/Renderer.hpp @@ -73,6 +73,6 @@ struct Renderer { float speed = 1.0; bool running = true; - float tess_factor; + float tess_factor = 5.0f; float tess_edge_size = 20.0f; }; diff --git a/Renderer/UniformBuffer.hpp b/Renderer/UniformBuffer.hpp index b1b3c61..1b5f69b 100644 --- a/Renderer/UniformBuffer.hpp +++ b/Renderer/UniformBuffer.hpp @@ -10,7 +10,8 @@ #include struct UniformData { - glm::mat4 mvp; + glm::mat4 view; + glm::mat4 proj; float time; glm::vec3 cam_pos; glm::vec2 viewport; diff --git a/Resources/Texture.hpp b/Resources/Texture.hpp index 60b230e..8215f92 100644 --- a/Resources/Texture.hpp +++ b/Resources/Texture.hpp @@ -27,7 +27,7 @@ struct Texture { .binding = binding, .descriptorType = vk::DescriptorType::eCombinedImageSampler, .descriptorCount = 1, - .stageFlags = vk::ShaderStageFlagBits::eFragment, + .stageFlags = vk::ShaderStageFlagBits::eFragment | vk::ShaderStageFlagBits::eTessellationEvaluation, .pImmutableSamplers = nullptr, }; } diff --git a/Scene/Terrain.cpp b/Scene/Terrain.cpp index 9e96954..655f05b 100644 --- a/Scene/Terrain.cpp +++ b/Scene/Terrain.cpp @@ -33,7 +33,7 @@ Terrain::Terrain(vk::PhysicalDevice phys_dev, vk::Device dev, Texture& tex) : ph .pos = glm::vec3( 2.0f * x + 1.0f - patch_size, 0.0f, - 2.0f * y * 1.0f - patch_size), + 2.0f * y + 1.0f - patch_size), .uv = glm::vec2(static_cast(x)/patch_size, static_cast(y) / patch_size) * uv_scale, }); @@ -88,7 +88,7 @@ Terrain::Terrain(vk::PhysicalDevice phys_dev, vk::Device dev, Texture& tex) : ph for (auto x = 0_u32; x < w; x++) for (auto y = 0_u32; y < w; y++) { - auto idx = x + y * w * 4; + auto idx = (x + y * w) * 4; indices[idx] = x+y*patch_size; indices[idx+1] = indices[idx] + patch_size; indices[idx+2] = indices[idx+1] + 1; diff --git a/UI/UI.cpp b/UI/UI.cpp index be28d5b..dc3accc 100644 --- a/UI/UI.cpp +++ b/UI/UI.cpp @@ -92,8 +92,8 @@ void UI::newFrame() { ImGui::Text("FPS: %f", info.fps); ImGui::Text("Time: %f", info.time); ImGui::Checkbox("Fly Camera", &info.flycam); - ImGui::SliderFloat("Tessellation Factor: %f", &info.tess_factor, 0.0, 20.0); - ImGui::SliderFloat("Edge Size: %f", &info.tess_edge_size, 0.0, 40.0); + ImGui::SliderFloat("Tessellation Factor", &info.tess_factor, 0.0, 20.0); + ImGui::SliderFloat("Edge Size", &info.tess_edge_size, 0.0, 40.0); ImGui::End(); } diff --git a/assets/shaders/terrain.frag b/assets/shaders/terrain.frag index bebcef2..a0c74d2 100644 --- a/assets/shaders/terrain.frag +++ b/assets/shaders/terrain.frag @@ -6,9 +6,13 @@ layout (location = 2) in vec3 pos; layout (location = 0) out vec4 FragColor; layout (set = 0, binding = 0) uniform Matrices { - mat4 mvp; + mat4 view; + mat4 proj; float time; vec3 cam_pos; + vec2 viewport; + float tess_factor; + float tess_edge_size; }; layout (set = 0, binding = 1) uniform sampler2D tex; diff --git a/assets/shaders/terrain.frag.spv b/assets/shaders/terrain.frag.spv index dfca96302adeb73133d52186a0734f380ef9f995..13e9814c08e00cbd9ce79328f39e5f84be96a84f 100644 GIT binary patch delta 351 zcmbQi(ZIDqkFlPWL4*MU$}&^SK`b@~h!`US14BVkeipJA69WT7NoH;;vKTW114D9R zZhS$0F#{U|8`wM+1_lO@c?J1JB@nd`aaNH2)Z*g!w8Z3+{2~T6DF$}11~!;PYD#)) zd~s$~D#PSt#>w0)U|En;SSNpEl&=S|*cliY1Q-|?JfIE*IZBy4g!g-KoSGF1thkHfq}uDff?)qkR9#}ESt5NtQqAw!9v0e3=AL)QqIG` Rz`)PIzyM;iO)h0#3;-&3CmsL* delta 104 zcmZqRn!&L_kI|HcL4*MUa?1)B*ce#Bd`1QahLX(ORFDizjERAPAvrNOz97GN@^Qw= mle3tlI6-2{3=9kbn?Ex7GV((-3o|eAu diff --git a/assets/shaders/terrain.tesc b/assets/shaders/terrain.tesc index 61de8fe..cf806ab 100644 --- a/assets/shaders/terrain.tesc +++ b/assets/shaders/terrain.tesc @@ -1,7 +1,8 @@ #version 450 core layout (set = 0, binding = 0) uniform Matrices { - mat4 mvp; + mat4 view; + mat4 proj; float time; vec3 cam_pos; vec2 viewport; @@ -24,14 +25,14 @@ layout (location = 2) out vec3 _pos[4]; float screen_space_tess(vec4 p0, vec4 p1) { /* calc midpoint + distance btw the two points */ - vec4 mid = (p0+p1) / 2.0; + vec4 mid = (p0+p1) * 0.5; float r = distance(p0, p1) / 2.0; - vec4 v0 = mvp * mid; + vec4 v0 = view * mid; /* projevt into clip spaace */ - vec4 clip0 = mvp * (v0 - vec4(r, 0.0, 0.0, 0.0)); - vec4 clip1 = mvp * (v0 + vec4(r, 0.0, 0.0, 0.0)); + vec4 clip0 = proj * (v0 - vec4(r, 0.0, 0.0, 0.0)); + vec4 clip1 = proj * (v0 + vec4(r, 0.0, 0.0, 0.0)); clip0 /= clip0.w; clip1 /= clip1.w; diff --git a/assets/shaders/terrain.tesc.spv b/assets/shaders/terrain.tesc.spv index 07524420fec9cd53153418e6e13eb514175c81ac..541f227a55417bf84eda1def3ee791ef0ea8b3e0 100644 GIT binary patch literal 6032 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 literal 5932 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 diff --git a/assets/shaders/terrain.tese b/assets/shaders/terrain.tese index ab83884..c6ce865 100644 --- a/assets/shaders/terrain.tese +++ b/assets/shaders/terrain.tese @@ -1,7 +1,8 @@ #version 450 core layout (set = 0, binding = 0) uniform Matrices { - mat4 mvp; + mat4 view; + mat4 proj; float time; vec3 cam_pos; vec2 viewport; @@ -36,7 +37,10 @@ void main() { /* not displacing yet */ vec4 pos1 = mix(gl_in[0].gl_Position, gl_in[1].gl_Position, gl_TessCoord.x); vec4 pos2 = mix(gl_in[3].gl_Position, gl_in[2].gl_Position, gl_TessCoord.x); - _pos = mix(pos1, pos2, gl_TessCoord.y).xyz; - gl_Position = mvp * mix(pos1, pos2, gl_TessCoord.y); + vec4 fpos = mix(pos1, pos2, gl_TessCoord.y); + fpos.y += textureLod(heightmap, _texCoord, 0.0).r; + + _pos = fpos.xyz; + gl_Position = proj * view * fpos; } \ No newline at end of file diff --git a/assets/shaders/terrain.tese.spv b/assets/shaders/terrain.tese.spv index 52533292f0056d36cb1635914f4c627ece1e5288..ab18d3a167c311a97e95bb01e2ad23c47fe44617 100644 GIT binary patch delta 1336 zcmeyOFh!Y{nMs+Qfq{{Mn}L^M+C<)X&PE0XhBgKUhN&A%?=u>v733E)FfcH%GO#j~ zF)%P>q-LgPl;kEBfW=rCK&s>6YSG* z;^O$U#N?9vBCu;g;%t)(nZLP*or?kZZwWlO0)v>p`j^`dPs423ZGk zCrAazZ6Llfh+tq~Ko(1&J*{5(8NX5?g^J#>T+F01{in016~#u&0d&p&VPnz`y`X30VDznZICJuACxLVViF824DAdI3_%PG z3?NU+F>rz%4H9dgT*)Er+6j$4P<()NgZQA-0*W_~8@i$LARQq7WTu?fDd%Cz`P85kHq@}Tf>WME|g1x_utO;tcKLZDYI0FMiGXnzy zNDPEQ4gjS#kOM(_K{*8^4>B7RT0IO53|$QM3=ASrSAl}Amw|x+Bmq;@2UY}0<{(Q! zYWf)%7(n8a7+ArP21=nIeIRj=8j!;#LLD}dffXELlNcBnK7ZK4y@cGE>V7@{39!Y9Zn*ApNPu z#qnv0e90yGMGR~V>|hP7lh-nfD^`Kjf*sGw(8a*Okdd01o>7vUSO6AdX6T-Lk$Jl+ z$is3B3=ANPJs4OSz&0>2FmOY4gT*F0vIsMlOn%5BTn~~5IS3>Va)3JnGguEqKfe`6g)~$N5S}tApYdHtn!>7r+`GeH;b|*Gl^O=urPQr zFff1&0$DBxP7r@N#92!j7#Nr*Z{!e`1&K>AurQP}Ffar$Fff1|B*(x3c3k;nUruSq zN@zHPoB=Ws#0NP8vX23D{WY8V*6p#zE85kHq;vhcAb9D?13?U2*3^0B@DBUtJFo4XEW?*1w zn0%01xV{m@VqjnhU|o$Y8<1$jATyES!2B diff --git a/assets/shaders/terrain.vert b/assets/shaders/terrain.vert index 55b4d11..eaf4d57 100644 --- a/assets/shaders/terrain.vert +++ b/assets/shaders/terrain.vert @@ -8,8 +8,13 @@ layout (location = 1) out vec2 texCoord; layout (location = 2) out vec3 pos; layout (set = 0, binding = 0) uniform Matrices { - mat4 mvp; + mat4 view; + mat4 proj; float time; + vec3 cam_pos; + vec2 viewport; + float tess_factor; + float tess_edge_size; }; void main() { diff --git a/assets/shaders/terrain.vert.spv b/assets/shaders/terrain.vert.spv index f6a38da62f34d7492079e1635adba554a5029c1c..e2323788b6b01c8956c6b9e745d55993cb5b036b 100644 GIT binary patch delta 348 zcmbQivxaZOJ;r)g1`P%XD9cPO2eH@~AYzOR3=9QD`B}(fObiSRC7HRY$YRV43=GMM zx$y=0#SCl=Y+&Cxf3M4U*n?Pb~7#JAb8JIyX*(}X`o>7_;#AHxsU;tx~GLTc`7#JAX KHh*MMX9NHWk1AFG delta 79 zcmZ3(H-l%xJw^o<1`P%X$So^iU}Inf^BEZ!7)mm8QyCaGmoc$0@*_l*85kHGHVd-c PWMqeERo~3Yrp^ce_JIo`