From 460a87b00709ec806aa23c4f472aba461a3ea29c Mon Sep 17 00:00:00 2001 From: apistol78 Date: Fri, 7 Jun 2024 14:55:54 +0200 Subject: [PATCH] Traktor: Ocean mesh now tiled instead of in view space, less moving artifacts. Need lods to be implemented. --- code/Terrain/OceanComponent.cpp | 115 +-- .../System/Terrain/Ocean/Shaders/Ocean.xdi | 969 +++++++++--------- 2 files changed, 519 insertions(+), 565 deletions(-) diff --git a/code/Terrain/OceanComponent.cpp b/code/Terrain/OceanComponent.cpp index e07d50ea3..02d1ce296 100644 --- a/code/Terrain/OceanComponent.cpp +++ b/code/Terrain/OceanComponent.cpp @@ -61,17 +61,17 @@ const render::Handle s_handleOcean_WaveTexture1(L"Ocean_WaveTexture1"); const render::Handle s_handleOcean_WaveTexture2(L"Ocean_WaveTexture2"); const render::Handle s_handleOcean_WaveTexture3(L"Ocean_WaveTexture3"); const render::Handle s_handleOcean_TileIndex(L"Ocean_TileIndex"); +const render::Handle s_handleOcean_Tile(L"Ocean_Tile"); const render::Handle s_handleWorld_Time(L"World_Time"); #pragma pack(1) struct OceanVertex { float pos[2]; - float edge; }; #pragma pack() -const uint32_t c_gridSize = 1024; +const uint32_t c_gridSize = 512; const uint32_t c_gridInfSize = c_gridSize / 8; const uint32_t c_gridCells = (c_gridSize - 1) * (c_gridSize - 1); @@ -115,7 +115,6 @@ bool OceanComponent::create(resource::IResourceManager* resourceManager, render: AlignedVector< render::VertexElement > vertexElements; vertexElements.push_back(render::VertexElement(render::DataUsage::Position, render::DtFloat2, offsetof(OceanVertex, pos))); - vertexElements.push_back(render::VertexElement(render::DataUsage::Custom, render::DtFloat1, offsetof(OceanVertex, edge))); m_vertexLayout = renderSystem->createVertexLayout(vertexElements); m_vertexBuffer = renderSystem->createBuffer(render::BuVertex, c_gridSize * c_gridSize * sizeof(OceanVertex), false); @@ -128,20 +127,11 @@ bool OceanComponent::create(resource::IResourceManager* resourceManager, render: for (int32_t iz = 0; iz < c_gridSize; ++iz) { const float fz = float(iz) * 2.0f / c_gridSize - 1.0f; - const float ez0 = clamp(1.0f - float(iz) / c_gridInfSize, 0.0f, 1.0f); - const float ez1 = clamp(1.0f - float(c_gridSize - 1 - iz) / c_gridInfSize, 0.0f, 1.0f); - for (int32_t ix = 0; ix < c_gridSize; ++ix) { const float fx = float(ix) * 2.0f / c_gridSize - 1.0f; - const float ex0 = clamp(1.0f - float(ix) / c_gridInfSize, 0.0f, 1.0f); - const float ex1 = clamp(1.0f - float(c_gridSize - 1 - ix) / c_gridInfSize, 0.0f, 1.0f); - const float f = std::pow(max(max(ex0, ex1), max(ez0, ez1)), 8); - vertex->pos[0] = fx; vertex->pos[1] = fz; - vertex->edge = lerp(100.0f, 10000.0f, f); - vertex++; } } @@ -456,8 +446,8 @@ void OceanComponent::build( } const Transform transform = m_owner->getTransform() * Transform(Vector4(0.0f, m_elevation, 0.0f, 0.0f)); - const Vector4 lastEye = worldRenderView.getLastView().inverse().translation().xyz1(); - const Vector4 eye = worldRenderView.getView().inverse().translation().xyz1(); + //const Vector4 lastEye = worldRenderView.getLastView().inverse().translation().xyz1(); + //const Vector4 eye = worldRenderView.getView().inverse().translation().xyz1(); // Render ocean geometry. auto perm = worldRenderPass.getPermutation(m_shader); @@ -466,58 +456,65 @@ void OceanComponent::build( if (!sp) return; - auto renderBlock = renderContext->allocNamed< render::SimpleRenderBlock >(L"Ocean"); - renderBlock->distance = std::numeric_limits< float >::max(); - renderBlock->program = sp.program; - renderBlock->indexBuffer = m_indexBuffer->getBufferView(); - renderBlock->indexType = render::IndexType::UInt32; - renderBlock->vertexBuffer = m_vertexBuffer->getBufferView(); - renderBlock->vertexLayout = m_vertexLayout; - renderBlock->primitives = m_primitives; - - renderBlock->programParams = renderContext->alloc< render::ProgramParameters >(); - renderBlock->programParams->beginParameters(renderContext); - renderBlock->programParams->setFloatParameter(s_handleOcean_Opacity, m_opacity); - renderBlock->programParams->setVectorParameter(s_handleOcean_Eye, eye); - renderBlock->programParams->setVectorParameter(s_handleOcean_LastEye, lastEye); - renderBlock->programParams->setVectorParameter(s_handleOcean_ShallowTint, m_shallowTint); - renderBlock->programParams->setVectorParameter(s_handleOcean_DeepColor, m_deepColor); - - if (!writeVelocity) - { - renderBlock->programParams->setTextureParameter(s_handleOcean_WaveTexture0, m_evolvedSpectrumTextures[0]); - renderBlock->programParams->setTextureParameter(s_handleOcean_WaveTexture1, m_evolvedSpectrumTextures[1]); - renderBlock->programParams->setTextureParameter(s_handleOcean_WaveTexture2, m_foamTexture); - } - else + for (int32_t iz = -2; iz <= 2; ++iz) { - renderBlock->programParams->setTextureParameter(s_handleOcean_WaveTexture0, m_evolvedSpectrumTextures[0]); - renderBlock->programParams->setTextureParameter(s_handleOcean_WaveTexture1, m_evolvedSpectrumTextures[1]); - renderBlock->programParams->setTextureParameter(s_handleOcean_WaveTexture2, m_evolvedSpectrumTextures[2]); - renderBlock->programParams->setTextureParameter(s_handleOcean_WaveTexture3, m_evolvedSpectrumTextures[3]); - } + for (int32_t ix = -2; ix <= 2; ++ix) + { + auto renderBlock = renderContext->allocNamed< render::SimpleRenderBlock >(L"Ocean"); + renderBlock->distance = std::numeric_limits< float >::max(); + renderBlock->program = sp.program; + renderBlock->indexBuffer = m_indexBuffer->getBufferView(); + renderBlock->indexType = render::IndexType::UInt32; + renderBlock->vertexBuffer = m_vertexBuffer->getBufferView(); + renderBlock->vertexLayout = m_vertexLayout; + renderBlock->primitives = m_primitives; - if (haveTerrain) - { - const auto& terrain = terrainComponent->getTerrain(); + renderBlock->programParams = renderContext->alloc< render::ProgramParameters >(); + renderBlock->programParams->beginParameters(renderContext); + renderBlock->programParams->setFloatParameter(s_handleOcean_Opacity, m_opacity); + //renderBlock->programParams->setVectorParameter(s_handleOcean_Eye, eye); + //renderBlock->programParams->setVectorParameter(s_handleOcean_LastEye, lastEye); + renderBlock->programParams->setVectorParameter(s_handleOcean_ShallowTint, m_shallowTint); + renderBlock->programParams->setVectorParameter(s_handleOcean_DeepColor, m_deepColor); + renderBlock->programParams->setVectorParameter(s_handleOcean_Tile, Vector4(ix, 0.0f, iz, 0.0f)); + + if (!writeVelocity) + { + renderBlock->programParams->setTextureParameter(s_handleOcean_WaveTexture0, m_evolvedSpectrumTextures[0]); + renderBlock->programParams->setTextureParameter(s_handleOcean_WaveTexture1, m_evolvedSpectrumTextures[1]); + renderBlock->programParams->setTextureParameter(s_handleOcean_WaveTexture2, m_foamTexture); + } + else + { + renderBlock->programParams->setTextureParameter(s_handleOcean_WaveTexture0, m_evolvedSpectrumTextures[0]); + renderBlock->programParams->setTextureParameter(s_handleOcean_WaveTexture1, m_evolvedSpectrumTextures[1]); + renderBlock->programParams->setTextureParameter(s_handleOcean_WaveTexture2, m_evolvedSpectrumTextures[2]); + renderBlock->programParams->setTextureParameter(s_handleOcean_WaveTexture3, m_evolvedSpectrumTextures[3]); + } - const Vector4& worldExtent = terrain->getHeightfield()->getWorldExtent(); - const Vector4 worldOrigin = -worldExtent * 0.5_simd; + if (haveTerrain) + { + const auto& terrain = terrainComponent->getTerrain(); - renderBlock->programParams->setVectorParameter(s_handleTerrain_WorldOrigin, worldOrigin); - renderBlock->programParams->setVectorParameter(s_handleTerrain_WorldExtent, worldExtent); - renderBlock->programParams->setTextureParameter(s_handleTerrain_Heightfield, terrain->getHeightMap()); - } + const Vector4& worldExtent = terrain->getHeightfield()->getWorldExtent(); + const Vector4 worldOrigin = -worldExtent * 0.5_simd; - worldRenderPass.setProgramParameters( - renderBlock->programParams, - transform, - transform - ); + renderBlock->programParams->setVectorParameter(s_handleTerrain_WorldOrigin, worldOrigin); + renderBlock->programParams->setVectorParameter(s_handleTerrain_WorldExtent, worldExtent); + renderBlock->programParams->setTextureParameter(s_handleTerrain_Heightfield, terrain->getHeightMap()); + } - renderBlock->programParams->endParameters(renderContext); + worldRenderPass.setProgramParameters( + renderBlock->programParams, + transform, + transform + ); - renderContext->draw(sp.priority, renderBlock); + renderBlock->programParams->endParameters(renderContext); + + renderContext->draw(sp.priority, renderBlock); + } + } } } diff --git a/data/Source/System/Terrain/Ocean/Shaders/Ocean.xdi b/data/Source/System/Terrain/Ocean/Shaders/Ocean.xdi index 2f3e314e7..8f51a740f 100644 --- a/data/Source/System/Terrain/Ocean/Shaders/Ocean.xdi +++ b/data/Source/System/Terrain/Ocean/Shaders/Ocean.xdi @@ -12,32 +12,12 @@ Matrix Frame - - {28DF02C7-A4C6-FE49-A2AF-1C3067BDCC63} - - - 844 - -475 - - Ocean_Eye - Vector - Draw - - - {5EB1A808-AB18-EE45-9E22-B94DF9FE5976} - - - 1075 - -489 - - x0z - {8AA18707-44AC-2644-8B41-ED4A2140AB74} - 308 - -460 + 190 + -358 World_World Matrix @@ -47,37 +27,25 @@ {C8A35F03-174D-CD40-B5D7-753769D81BF5} - 532 - -453 + 446 + -347 {25735986-B103-0646-BF3A-0BF787649D9B} - 762 - -410 + 739 + -321 0y0 - - {6A94DF8D-E1C7-2844-A9D1-46F399E6258E} - - - 299 - -570 - - Edge - Custom - DtFloat1 - 0 - {9172DF46-5E10-BA42-8DA5-7576BFD7DE9A} - 280 - -616 + 207 + -615 Position Position @@ -88,16 +56,16 @@ {45C8764D-14B1-B54D-AFB0-5D6C4764C06C} - 534 - -619 + 461 + -618 {D42BBBE2-6C3C-1B48-97A2-78711C016116} - 773 - -563 + 671 + -586 x0y @@ -109,14 +77,6 @@ -612 - - {CBA14370-2168-DB40-811A-AA0B8407882E} - - - 1286 - -574 - - {8DD3F147-650E-D340-BFCE-06BBB28FC70F} @@ -312,8 +272,8 @@ {11033B75-D663-EF4C-931D-3E9930075BEC} - 5922 - 806 + 5349 + 662 Ocean_Opacity Scalar @@ -741,8 +701,8 @@ {8057415D-3D90-5B4A-9616-AE44A69E5C93} - 1571 - -582 + 1315 + -576 L_BaseWorldPosition @@ -1085,8 +1045,8 @@ {2392BDB6-7FA5-5F42-9FB8-2DDDEE167E06} - 5906 - 844 + 5333 + 700 Ocean_DeepColor Vector @@ -1516,8 +1476,8 @@ $Output = vec4(scatter, 0.0f); {80FCC1B8-DB38-8246-B0C5-E0195C55CFDB} - 6175 - 939 + 6143 + 956 0.5 @@ -1644,40 +1604,12 @@ Dummy -410 - - {FC94FE7F-8F95-8440-9DAC-B31CA16779A8} - - - 1276 - -368 - - - - {BFFB4AC0-17F6-5B46-BBB5-B6F91A33847B} - - - 834 - -269 - - Ocean_LastEye - Vector - Draw - - - {A85B5061-7E12-374A-8356-D6C1B7ABB3C2} - - - 1065 - -283 - - x0z - {181A5D81-B3E3-1D46-81F6-D5D3F2FB9946} - 1549 - -388 + 1325 + -379 L_LastBaseWorldPosition @@ -2005,86 +1937,81 @@ $Output = vec4(r * -0.05f, 0.0f); 673 + + {B8655422-628E-394A-B33D-970F754CED96} + + + 259 + -558 + + 500 + + + {EEFF6D5B-70D2-AB46-B4E9-B42CD4385764} + + + 285 + -517 + + Ocean_Tile + Vector + Draw + + + {9B89538B-61FE-F345-AF0F-4D1023C50C76} + + + 482 + -503 + + + + {72AC5B51-CB6A-A54B-80CD-4F68424A146A} + + + 265 + -453 + + 500 + + + {3275587E-4619-E64E-8011-0536026EAD2D} + + + 679 + -514 + + - - - - {70C35B91-1C36-454C-98EC-7514AACF73C8} - - - - {BFBE8191-F6E6-4A4F-A2CC-6CBC1D19BF70} - - - {32FD3DAA-16C1-44C8-8A1E-E9ECF97F31D2} + {70C35B91-1C36-454C-98EC-7514AACF73C8} - {3DE04294-4DEA-4A13-A460-2274647357EA} - - - - - - {ADB4FC1D-3726-4CC5-B4D5-1E2468274325} - - - - {3DE04294-4DEA-4A13-A460-2274647357EA} - - - - - - {BD91C9E9-9950-4EC8-BAD2-60D2E8699107} - - - - {D2D716D6-C4A1-471F-894A-D718515F6281} + {BFBE8191-F6E6-4A4F-A2CC-6CBC1D19BF70} - + {ADB4FC1D-3726-4CC5-B4D5-1E2468274325} - + {9F45B2C3-B513-4646-B0C1-663748FD169C} - + {516A331D-8EF6-4354-A29B-214078F183FC} - - {F2E22CA6-DFF3-4B20-A70A-0D7A44EACD8C} - - - - - {1E6639B6-8B58-4694-99E7-C058E3583522} - - - - {69B552F1-EBCF-4393-8967-DD2A7D9A9C3A} - - - - - - {ADB4FC1D-3726-4CC5-B4D5-1E2468274325} - - - - {9F45B2C3-B513-4646-B0C1-663748FD169C} + {F2E22CA6-DFF3-4B20-A70A-0D7A44EACD8C} @@ -2094,7 +2021,7 @@ $Output = vec4(r * -0.05f, 0.0f); - {F2E22CA6-DFF3-4B20-A70A-0D7A44EACD8C} + {69B552F1-EBCF-4393-8967-DD2A7D9A9C3A} @@ -2103,1470 +2030,1500 @@ $Output = vec4(r * -0.05f, 0.0f); {1E6639B6-8B58-4694-99E7-C058E3583522} - + {71A0310C-3928-44C3-8D4F-7D9AFF9EAE70} - + {1E6639B6-8B58-4694-99E7-C058E3583522} - + {71A0310C-3928-44C3-8D4F-7D9AFF9EAE70} - + {ADB4FC1D-3726-4CC5-B4D5-1E2468274325} - + {11585EBC-914D-4E6D-A10D-D01694FF9840} - + {1E6639B6-8B58-4694-99E7-C058E3583522} - + {71A0310C-3928-44C3-8D4F-7D9AFF9EAE70} - + {70C35B91-1C36-454C-98EC-7514AACF73C8} - + {11585EBC-914D-4E6D-A10D-D01694FF9840} - + {84BF3C26-64A7-4032-B775-1D369052B243} - + {F2E22CA6-DFF3-4B20-A70A-0D7A44EACD8C} - + {A8A5B244-60B8-694D-B957-7F4E53EA9C65} - + {AA571ACC-7699-4D10-BCD7-4E857EFB35EA} - + {ADB4FC1D-3726-4CC5-B4D5-1E2468274325} - + {8C41D88A-1D17-4237-B720-CCC0B7FF71B9} - + {ADB4FC1D-3726-4CC5-B4D5-1E2468274325} - + {11585EBC-914D-4E6D-A10D-D01694FF9840} - + {32FD3DAA-16C1-44C8-8A1E-E9ECF97F31D2} - + {F2E22CA6-DFF3-4B20-A70A-0D7A44EACD8C} - + {FFE19E4E-24A8-47A4-AE80-307495E31066} - + {32EB5230-1F0D-40B8-93F6-9C8E5469454E} - + {84BF3C26-64A7-4032-B775-1D369052B243} - + {93DEEDC9-D4C7-47F8-8D6A-A79DABD6BA6A} - + {ADB4FC1D-3726-4CC5-B4D5-1E2468274325} - + {6D5C5EFE-A35C-4748-B81E-B8EBACE433BC} - + {8FFB3BDB-A00E-4406-994C-0D52FAF04871} - + {69997292-C813-490C-910C-620B9AD3A2BB} - + {9E839249-E9B9-4736-8BDD-A95A1C892B42} - + {F2E22CA6-DFF3-4B20-A70A-0D7A44EACD8C} - + {D33F8931-C90C-4EBA-8A04-A31D3E08FAB7} - + {D2D716D6-C4A1-471F-894A-D718515F6281} - + {C9223159-9DF2-46A9-B0F2-D0D7D5BEE6F7} - + {3E538F69-C85C-44E2-9320-73F876288BAE} - + {853B6F75-1464-40E7-BEDC-2716C763046E} - + {C9CC095B-00C6-4A84-88B5-2455115CAF9C} - + {1E6639B6-8B58-4694-99E7-C058E3583522} - + {32EB5230-1F0D-40B8-93F6-9C8E5469454E} - + {AF6C971B-D67A-42EE-A12B-97D36927C89F} - + {8760B263-C70C-46BA-9E97-A3D6B08941E9} - + {D33F8931-C90C-4EBA-8A04-A31D3E08FAB7} - + {82B29CCB-606C-2D40-BFB1-61A801861DF0} - + {84BF3C26-64A7-4032-B775-1D369052B243} - + {99E003AF-999D-4AC3-AF6E-397B5B356E97} - + {84BF3C26-64A7-4032-B775-1D369052B243} - + {B9FF4045-892D-49D6-814B-0587812583B5} - + {1E6639B6-8B58-4694-99E7-C058E3583522} - + {71A0310C-3928-44C3-8D4F-7D9AFF9EAE70} - + {84BF3C26-64A7-4032-B775-1D369052B243} - + {24E97134-2FDB-4E95-B7D6-EF81F3E17837} - + {70C35B91-1C36-454C-98EC-7514AACF73C8} - + {7331EB56-B549-F54D-8AB5-4634E4C1EFAD} - + {15053FB1-8C13-4C18-8958-193FEDDCFB11} - + {F2E22CA6-DFF3-4B20-A70A-0D7A44EACD8C} - + {ADB4FC1D-3726-4CC5-B4D5-1E2468274325} - + {98BF7CC4-A80C-43DA-B7FD-21BA4C039E28} - + {D74E3627-9E70-4BAD-A6CE-2087D41D6ED7} - + {345BDBFA-3326-40BF-B9DE-8ECA78A3EEF4} - + {84BF3C26-64A7-4032-B775-1D369052B243} - + {0AAE2EAE-B01B-425A-A8C3-539576B45ECC} - + {8591EE56-8A3E-41CF-8E98-8F8DB26AABDC} - + {11585EBC-914D-4E6D-A10D-D01694FF9840} - - {32FD3DAA-16C1-44C8-8A1E-E9ECF97F31D2} - - - - {11585EBC-914D-4E6D-A10D-D01694FF9840} - - - - - + {84BF3C26-64A7-4032-B775-1D369052B243} - + {3DE04294-4DEA-4A13-A460-2274647357EA} - + {84BF3C26-64A7-4032-B775-1D369052B243} - + {17CACE84-6798-2B44-A575-4A44864947B5} - + {1E6639B6-8B58-4694-99E7-C058E3583522} - + {F0CBF543-3ABA-D346-B737-070FE06DBEC9} - + {BD91C9E9-9950-4EC8-BAD2-60D2E8699107} - + {69997292-C813-490C-910C-620B9AD3A2BB} - + {9E839249-E9B9-4736-8BDD-A95A1C892B42} - + {F2E22CA6-DFF3-4B20-A70A-0D7A44EACD8C} - + {335AF6FD-1E3E-A545-B933-1479607B86CF} - + {9F45B2C3-B513-4646-B0C1-663748FD169C} - + {1E6639B6-8B58-4694-99E7-C058E3583522} - + {A62A00A9-83D9-5546-9E26-6D5A40821D7E} - + {507BE00F-8299-7B42-AB67-10C2D5B5AC67} - + {345BDBFA-3326-40BF-B9DE-8ECA78A3EEF4} - + {1E6639B6-8B58-4694-99E7-C058E3583522} - + {37007839-EF02-2147-9676-C1C38A214D0F} - + {5B7C7641-8FAF-364C-8CB3-A875601E73EE} - + {11585EBC-914D-4E6D-A10D-D01694FF9840} - + {3ABDCC1D-F1BC-134E-A3EE-5E8786652058} - + {11585EBC-914D-4E6D-A10D-D01694FF9840} - + {84BF3C26-64A7-4032-B775-1D369052B243} - + {6D9C5BED-2B3B-3546-B807-CD618017F552} - + {1E6639B6-8B58-4694-99E7-C058E3583522} - + {71A0310C-3928-44C3-8D4F-7D9AFF9EAE70} - + {1E6639B6-8B58-4694-99E7-C058E3583522} - + {71A0310C-3928-44C3-8D4F-7D9AFF9EAE70} - + {ADB4FC1D-3726-4CC5-B4D5-1E2468274325} - + {345BDBFA-3326-40BF-B9DE-8ECA78A3EEF4} - + {ADB4FC1D-3726-4CC5-B4D5-1E2468274325} - + {345BDBFA-3326-40BF-B9DE-8ECA78A3EEF4} - + {70C35B91-1C36-454C-98EC-7514AACF73C8} - + {DE98332B-0513-442C-B08C-234969B7C79F} - + {70C35B91-1C36-454C-98EC-7514AACF73C8} - + {A30C6A23-2170-447A-A127-17A60A09574F} - + {84BF3C26-64A7-4032-B775-1D369052B243} - + {F2E22CA6-DFF3-4B20-A70A-0D7A44EACD8C} - + {84BF3C26-64A7-4032-B775-1D369052B243} - + {F2E22CA6-DFF3-4B20-A70A-0D7A44EACD8C} - + {4B2822D0-4D9A-4BBB-9956-A996493EE672} - + {92AA3735-BB4C-4541-81DA-AC500930B2E6} - + {8FFB3BDB-A00E-4406-994C-0D52FAF04871} - + {A1DDB166-9422-45A3-AE93-6702275DAD1C} - + {08532144-809B-4726-A819-F8E3F9CF7515} - + {A1DDB166-9422-45A3-AE93-6702275DAD1C} - + {08532144-809B-4726-A819-F8E3F9CF7515} - + {92AA3735-BB4C-4541-81DA-AC500930B2E6} - + {9D9FA2FC-9298-4A6F-88A9-A055F8A91F52} - + {93DEEDC9-D4C7-47F8-8D6A-A79DABD6BA6A} - + {70C35B91-1C36-454C-98EC-7514AACF73C8} - + {DE98332B-0513-442C-B08C-234969B7C79F} - + {9D9FA2FC-9298-4A6F-88A9-A055F8A91F52} - + {11585EBC-914D-4E6D-A10D-D01694FF9840} - + {0D78442F-AA88-4B95-A497-E86A86E07FB8} - + {EC9AE568-7089-4B8D-9874-73DE5599266E} - + {84BF3C26-64A7-4032-B775-1D369052B243} - + {D2D716D6-C4A1-471F-894A-D718515F6281} - + {9E839249-E9B9-4736-8BDD-A95A1C892B42} - + {9F45B2C3-B513-4646-B0C1-663748FD169C} - + {84BF3C26-64A7-4032-B775-1D369052B243} - + {FE413452-19EB-4DC9-B724-2984FA17CC20} - + {AF6C971B-D67A-42EE-A12B-97D36927C89F} - + {7ACEE4C2-A92D-4E50-BFAE-C1D744BEE5E0} - + {84BF3C26-64A7-4032-B775-1D369052B243} - + {23884C5F-C5F7-D740-8B40-5341707D99BC} - + {ADB4FC1D-3726-4CC5-B4D5-1E2468274325} - + {11585EBC-914D-4E6D-A10D-D01694FF9840} - + {ADB4FC1D-3726-4CC5-B4D5-1E2468274325} - + {11585EBC-914D-4E6D-A10D-D01694FF9840} - + {ADB4FC1D-3726-4CC5-B4D5-1E2468274325} - + {11585EBC-914D-4E6D-A10D-D01694FF9840} - + {ADB4FC1D-3726-4CC5-B4D5-1E2468274325} - + {11585EBC-914D-4E6D-A10D-D01694FF9840} - + {0FF6511C-0293-41A8-860E-81978BD01F7F} - + {F2E22CA6-DFF3-4B20-A70A-0D7A44EACD8C} - + {0FF6511C-0293-41A8-850E-81978BD01F7F} - + {F2E22CA6-DFF3-4B20-A70A-0D7A44EACD8C} - + {0FF6511C-0293-41A8-860E-81978BD01F7F} - + {F2E22CA6-DFF3-4B20-A70A-0D7A44EACD8C} - + {0FF6511C-0293-41A8-860E-81978BD01F7F} - + {F2E22CA6-DFF3-4B20-A70A-0D7A44EACD8C} - + {0FF6511C-0293-41A8-870E-81978BD01F7F} - + {11585EBC-914D-4E6D-A10D-D01694FF9840} - + {0FF6511C-0293-41A8-880E-81978BD01F7F} - + {11585EBC-914D-4E6D-A10D-D01694FF9840} - + {0FF6511C-0293-41A8-890E-81978BD01F7F} - + {11585EBC-914D-4E6D-A10D-D01694FF9840} - + {ACC77B35-91B5-4405-ABC8-D0DA24D68178} - + {0FF6511C-0293-41A8-830E-81978BD01F7F} - + {D33F8931-C90C-4EBA-8A04-A31D3E08FAB7} - + {0FF6511C-0293-41A8-840E-81978BD01F7F} - + {84BF3C26-64A7-4032-B775-1D369052B243} - + {CBDE6E1E-A483-4046-B62E-5346B9FF6660} - + {84BF3C26-64A7-4032-B775-1D369052B243} - + {632BD6A0-E960-DC48-9A1F-AE642F41F9EB} - + {84BF3C26-64A7-4032-B775-1D369052B243} - + {CA8375B2-168C-0045-ABCF-DA4550D675E7} - + {84BF3C26-64A7-4032-B775-1D369052B243} - + {930C2917-F7C9-8C44-B249-27A70B16C9F6} - + {D7D2B884-8C20-B341-A7B6-C827641FAABF} - + {3DE04294-4DEA-4A13-A460-2274647357EA} - + {32FD3DAA-16C1-44C8-8A1E-E9ECF97F31D2} - + {8760B263-C70C-46BA-9E97-A3D6B08941E9} - + {0D78442F-AA88-4B95-A497-E86A86E07FB8} - + {7ACEE4C2-A92D-4E50-BFAE-C1D744BEE5E0} - + {1E6639B6-8B58-4694-99E7-C058E3583522} - + {116EE63B-0949-0347-B9C5-D9834FC44784} - + {1E6639B6-8B58-4694-99E7-C058E3583522} - + {FF2E57B8-213A-EC4E-B121-DB4F3B40DE20} - - {4F10C0E3-F820-457F-AB7D-CFDF2AA3C69A} - - - - {90C5E751-255B-124C-8D6E-CD25D2B57F04} - - - - - + {AF6C971B-D67A-42EE-A12B-97D36927C89F} - + {F2E22CA6-DFF3-4B20-A70A-0D7A44EACD8C} - + {84BF3C26-64A7-4032-B775-1D369052B243} - + {D2D716D6-C4A1-471F-894A-D718515F6281} - + {ADB4FC1D-3726-4CC5-B4D5-1E2468274325} - + {69997292-C813-490C-910C-620B9AD3A2BB} - + {9E839249-E9B9-4736-8BDD-A95A1C892B42} - + {5A25771B-894F-4D92-8D1E-FBF8449850E8} - + {84BF3C26-64A7-4032-B775-1D369052B243} - + {E20F65BD-1750-4B62-A70F-5D1A0C22A2D8} - + {84BF3C26-64A7-4032-B775-1D369052B243} - + {989F14A3-559A-6547-86AC-547520992458} - + {9E839249-E9B9-4736-8BDD-A95A1C892B42} - + {5A25771B-894F-4D92-8D1E-FBF8449850E8} - + {D33F8931-C90C-4EBA-8A04-A31D3E08FAB7} - + {8760B263-C70C-46BA-9E97-A3D6B08941E9} - + {D33F8931-C90C-4EBA-8A04-A31D3E08FAB7} - + {7ACEE4C2-A92D-4E50-BFAE-C1D744BEE5E0} - + {0D78442F-AA88-4B95-A497-E86A86E07FB8} - + {11585EBC-914D-4E6D-A10D-D01694FF9840} - - {4F10C0E3-F820-457F-AB7D-CFDF2AA3C69A} - - - - {D2D716D6-C4A1-471F-894A-D718515F6281} - - - - - + {9E839249-E9B9-4736-8BDD-A95A1C892B42} - + {69997292-C813-490C-910C-620B9AD3A2BB} - + {D33F8931-C90C-4EBA-8A04-A31D3E08FAB7} - + {69997292-C813-490C-910C-620B9AD3A2BB} - + {8F2140B5-F4E2-4E8F-8121-13C980250D3C} - + {11585EBC-914D-4E6D-A10D-D01694FF9840} - + {1E6639B6-8B58-4694-99E7-C058E3583522} - + {F0CBF543-3ABA-D346-B737-070FE06DBEC9} - + {1E6639B6-8B58-4694-99E7-C058E3583522} - + {A62A00A9-83D9-5546-9E26-6D5A40821D7E} - + {1E6639B6-8B58-4694-99E7-C058E3583522} - + {37007839-EF02-2147-9676-C1C38A214D0F} - + {84BF3C26-64A7-4032-B775-1D369052B243} - + {17CACE84-6798-2B44-A575-4A44864947B5} - - {ADB4FC1D-3726-4CC5-B4D5-1E2468274325} - - - - {3DE04294-4DEA-4A13-A460-2274647357EA} - - - - - - {ADB4FC1D-3726-4CC5-B4D5-1E2468274325} - - - - {9F45B2C3-B513-4646-B0C1-663748FD169C} - - - - - - {1E6639B6-8B58-4694-99E7-C058E3583522} - - - - {F2E22CA6-DFF3-4B20-A70A-0D7A44EACD8C} - - - - - - {32FD3DAA-16C1-44C8-8A1E-E9ECF97F31D2} - - - - {3DE04294-4DEA-4A13-A460-2274647357EA} - - - - - - {32FD3DAA-16C1-44C8-8A1E-E9ECF97F31D2} - - - - {11585EBC-914D-4E6D-A10D-D01694FF9840} - - - - - + {84BF3C26-64A7-4032-B775-1D369052B243} - + {3DE04294-4DEA-4A13-A460-2274647357EA} - + {335AF6FD-1E3E-A545-B933-1479607B86CF} - + {9F45B2C3-B513-4646-B0C1-663748FD169C} - + {1E6639B6-8B58-4694-99E7-C058E3583522} - + {71A0310C-3928-44C3-8D4F-7D9AFF9EAE70} - + {D33F8931-C90C-4EBA-8A04-A31D3E08FAB7} - + {05706B00-0F9C-4DBA-B455-9D4E0D96ACD2} - + {1E6639B6-8B58-4694-99E7-C058E3583522} - + {0664FBEF-CF9D-724A-90D1-BEAB3A517019} - + {1E6639B6-8B58-4694-99E7-C058E3583522} - + {0664FBEF-CF9D-724A-90D1-BEAB3A517019} - + {ADB4FC1D-3726-4CC5-B4D5-1E2468274325} - + {9F45B2C3-B513-4646-B0C1-663748FD169C} - + {32FD3DAA-16C1-44C8-8A1E-E9ECF97F31D2} - + {F2E22CA6-DFF3-4B20-A70A-0D7A44EACD8C} - + {70C35B91-1C36-454C-98EC-7514AACF73C8} - + {F2E22CA6-DFF3-4B20-A70A-0D7A44EACD8C} - + {ADB4FC1D-3726-4CC5-B4D5-1E2468274325} - + {345BDBFA-3326-40BF-B9DE-8ECA78A3EEF4} - + {70C35B91-1C36-454C-98EC-7514AACF73C8} - + {F2E22CA6-DFF3-4B20-A70A-0D7A44EACD8C} - + {ADB4FC1D-3726-4CC5-B4D5-1E2468274325} - + {11585EBC-914D-4E6D-A10D-D01694FF9840} - + {ADB4FC1D-3726-4CC5-B4D5-1E2468274325} - + {345BDBFA-3326-40BF-B9DE-8ECA78A3EEF4} - + {32FD3DAA-16C1-44C8-8A1E-E9ECF97F31D2} - + {F2E22CA6-DFF3-4B20-A70A-0D7A44EACD8C} - + {ADB4FC1D-3726-4CC5-B4D5-1E2468274325} - + {345BDBFA-3326-40BF-B9DE-8ECA78A3EEF4} - + {6B0EBF94-A421-EB45-AE66-6C2ACECEF50D} - + {AA571ACC-7699-4D10-BCD7-4E857EFB35EA} - + {6B0EBF94-A421-EB45-AE66-6C2ACECEF50D} - + {8C41D88A-1D17-4237-B720-CCC0B7FF71B9} - + {FFE19E4E-24A8-47A4-AE80-307495E31066} - + {BDB32F7B-599C-42C8-A2CE-2B1BD0738E8B} - + {D33F8931-C90C-4EBA-8A04-A31D3E08FAB7} - + {D2D716D6-C4A1-471F-894A-D718515F6281} - + {2D90AB77-694C-4586-AA05-5CF062EFFFAB} - + {69997292-C813-490C-910C-620B9AD3A2BB} - + {9E839249-E9B9-4736-8BDD-A95A1C892B42} - + {9BA81525-6E53-498C-AA97-B31FB48F3A50} - + {2D90AB77-694C-4586-AA05-5CF062EFFFAB} - + {55606599-DA57-584A-9A22-85DB6F4829EF} - + {84BF3C26-64A7-4032-B775-1D369052B243} - + {93DEEDC9-D4C7-47F8-8D6A-A79DABD6BA6A} - + {8FFB3BDB-A00E-4406-994C-0D52FAF04871} - + {E23CF1C9-F916-D24B-815A-CC7E01284D75} - + {84BF3C26-64A7-4032-B775-1D369052B243} - + {93DEEDC9-D4C7-47F8-8D6A-A79DABD6BA6A} - + {8FFB3BDB-A00E-4406-994C-0D52FAF04871} - + {E23CF1C9-F916-D24B-815A-CC7E01284D75} - + {84BF3C26-64A7-4032-B775-1D369052B243} - + {D3B5F4D8-D054-F740-BB89-11CC0AB7F510} - + {84BF3C26-64A7-4032-B775-1D369052B243} - + {22B8EE58-2845-314E-BFDA-E792A95C09DA} - + {BC06BB80-ECA8-C241-86CF-1EB033FE5141} - + {F2E22CA6-DFF3-4B20-A70A-0D7A44EACD8C} - + {ADB4FC1D-3726-4CC5-B4D5-1E2468274325} - + {9F45B2C3-B513-4646-B0C1-663748FD169C} - + {3B01355D-9153-4864-9B56-7D55F801BFF3} - + {3DE04294-4DEA-4A13-A460-2274647357EA} - + {32FD3DAA-16C1-44C8-8A1E-E9ECF97F31D2} - + {6D5C5EFE-A35C-4748-B81E-B8EBACE433BC} - + {ADB4FC1D-3726-4CC5-B4D5-1E2468274325} - + {93DEEDC9-D4C7-47F8-8D6A-A79DABD6BA6A} - + {8FFB3BDB-A00E-4406-994C-0D52FAF04871} - + {11585EBC-914D-4E6D-A10D-D01694FF9840} - + {84BF3C26-64A7-4032-B775-1D369052B243} - + {5A25771B-894F-4D92-8D1E-FBF8449850E8} - + {25E94043-C1B8-794D-8327-6864707AAFAB} - + {7174FE5A-D079-4452-AFEF-9FC2BCC2900F} + + + + {4F10C0E3-F820-457F-AB7D-CFDF2AA3C69A} + + + + {D2D716D6-C4A1-471F-894A-D718515F6281} + + + + + + {4F10C0E3-F820-457F-AB7D-CFDF2AA3C69A} + + + + {90C5E751-255B-124C-8D6E-CD25D2B57F04} + + + + + + {D33F8931-C90C-4EBA-8A04-A31D3E08FAB7} + + + + {D2D716D6-C4A1-471F-894A-D718515F6281} + + + + + + {32FD3DAA-16C1-44C8-8A1E-E9ECF97F31D2} + + + + {11585EBC-914D-4E6D-A10D-D01694FF9840} + + + + + + {32FD3DAA-16C1-44C8-8A1E-E9ECF97F31D2} + + + + {11585EBC-914D-4E6D-A10D-D01694FF9840} + + + + + + {1E6639B6-8B58-4694-99E7-C058E3583522} + + + + {69997292-C813-490C-910C-620B9AD3A2BB} + + + + + + {D33F8931-C90C-4EBA-8A04-A31D3E08FAB7} + + + + {D2D716D6-C4A1-471F-894A-D718515F6281} + + + + + + {ADB4FC1D-3726-4CC5-B4D5-1E2468274325} + + + + {3DE04294-4DEA-4A13-A460-2274647357EA} + + + + + + {9E839249-E9B9-4736-8BDD-A95A1C892B42} + + + + {9F45B2C3-B513-4646-B0C1-663748FD169C} + + + + + + {32FD3DAA-16C1-44C8-8A1E-E9ECF97F31D2} + + + + {3DE04294-4DEA-4A13-A460-2274647357EA} + + + + + + {32FD3DAA-16C1-44C8-8A1E-E9ECF97F31D2} + + + + {3DE04294-4DEA-4A13-A460-2274647357EA} + + @@ -3589,8 +3546,8 @@ $Output = vec4(r * -0.05f, 0.0f); -696 - 1746 - 522 + 1466 + 496