diff --git a/src/assets/Blender 2.91/Blender 2.bin b/src/assets/Blender 2.91/Blender 2.bin deleted file mode 100644 index 2731d49..0000000 --- a/src/assets/Blender 2.91/Blender 2.bin +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:2e5ffce0c501dad11a71fd85eafadbc5941eaf21ce55a6810dc97374b38eb23a -size 89174512 diff --git a/src/assets/Blender 2.91/Blender 2.gltf b/src/assets/Blender 2.91/Blender 2.gltf deleted file mode 100644 index b6d9c89..0000000 --- a/src/assets/Blender 2.91/Blender 2.gltf +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:2a99af9c3e9b9b11f447cb6e570c3a852bc3fc8c8680db9cb028d821a140ae9d -size 807279 diff --git a/src/assets/Blender 2.91/textures/Flower_Color Image.png b/src/assets/Blender 2.91/textures/Flower_Color Image.png deleted file mode 100644 index 2821623..0000000 --- a/src/assets/Blender 2.91/textures/Flower_Color Image.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:e4d4419e8de605e3bf1141d88ac98ae466b23afef4b2a2794e6d1b0fdb630cb4 -size 249618 diff --git a/src/assets/Blender 3.2 Test/Blender 3.bin b/src/assets/Blender 3.2 Test/Blender 3.bin deleted file mode 100644 index 92d6ff0..0000000 --- a/src/assets/Blender 3.2 Test/Blender 3.bin +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:7f6021b8eea8e27314857cb7ce9eb3739b4b59b5da5ada23e2a03a57de10ddf4 -size 48798424 diff --git a/src/assets/Blender 3.2 Test/Blender 3.gltf b/src/assets/Blender 3.2 Test/Blender 3.gltf deleted file mode 100644 index 4f5e0c2..0000000 --- a/src/assets/Blender 3.2 Test/Blender 3.gltf +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:617da8d87c0d7a62de2487a811ea7379ce30fadfe337a5eecfedb866fd4323de -size 45431 diff --git a/src/assets/Blender 3.2 Test/textures/Birds.png b/src/assets/Blender 3.2 Test/textures/Birds.png deleted file mode 100644 index 60ae62c..0000000 --- a/src/assets/Blender 3.2 Test/textures/Birds.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:c59311a654dddac6f2bb413fba0c3d9b99c70215c01b4102f05458fc7d5daf47 -size 258175 diff --git a/src/assets/Blender 3.2 Test/textures/Birds4.png b/src/assets/Blender 3.2 Test/textures/Birds4.png deleted file mode 100644 index 344a551..0000000 --- a/src/assets/Blender 3.2 Test/textures/Birds4.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:bba4f604c65d56ac03dabf37c1e14f8a5d16fd8c5b2371aa702be84a99172896 -size 179999 diff --git a/src/assets/Blender 3.2 Test/textures/Birds5.png b/src/assets/Blender 3.2 Test/textures/Birds5.png deleted file mode 100644 index 7e7272c..0000000 --- a/src/assets/Blender 3.2 Test/textures/Birds5.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:e7bd7278dc80e9350e07f4a1163220e4a6ab964f02e19e54ecc44f96b16ff492 -size 139125 diff --git a/src/assets/Blender 3.2 Test/textures/Cloud.png b/src/assets/Blender 3.2 Test/textures/Cloud.png deleted file mode 100644 index 62d92f1..0000000 --- a/src/assets/Blender 3.2 Test/textures/Cloud.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:ad77eb5d44fe640c6fc785dd6582e460d9cd205db7cc5ca27fdfb53bdca79216 -size 484349 diff --git a/src/assets/Blender 3.2 Test/textures/Clouds2.png b/src/assets/Blender 3.2 Test/textures/Clouds2.png deleted file mode 100644 index d31d944..0000000 --- a/src/assets/Blender 3.2 Test/textures/Clouds2.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:58f717d1f84ba431c3d331825ae0b981f3599d7e659251a1b00a7db6cff231d9 -size 1918194 diff --git a/src/assets/Blender 3.2 Test/textures/ship-wakes.png b/src/assets/Blender 3.2 Test/textures/ship-wakes.png deleted file mode 100644 index 97fafaa..0000000 --- a/src/assets/Blender 3.2 Test/textures/ship-wakes.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:ff738d4ff79d6ae688a6ae1dd05f24b299643e234da7154fa0c7991c7be65a73 -size 1901452 diff --git a/src/assets/Blender 3.2 Test/textures/ship-wakes2.png b/src/assets/Blender 3.2 Test/textures/ship-wakes2.png deleted file mode 100644 index 7345ab6..0000000 --- a/src/assets/Blender 3.2 Test/textures/ship-wakes2.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:d5f105fb781dd4166f9d1398a725f296e00b24b3874e000821d7a98a5c92319a -size 893680 diff --git a/src/assets/Blender 3.2 Test/textures/snow_01_nor_4k.png b/src/assets/Blender 3.2 Test/textures/snow_01_nor_4k.png deleted file mode 100644 index c4b41d7..0000000 --- a/src/assets/Blender 3.2 Test/textures/snow_01_nor_4k.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:c45fbc492b35c5ef178d34d5e7dfbdabd2a8a276cd716cb6ab6c7e8d8464b14c -size 20505362 diff --git a/src/assets/Blender 3.2 Test/textures/snow_01_rough_2k.png b/src/assets/Blender 3.2 Test/textures/snow_01_rough_2k.png deleted file mode 100644 index fe89292..0000000 --- a/src/assets/Blender 3.2 Test/textures/snow_01_rough_2k.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:0c61e314e5c88fe2d4ce14214b7179f173c25c2af12276d9b9d2fcbfaff19eff -size 2775587 diff --git a/src/assets/Blender 3.2 Test/textures/snow_01_translucent_2k.png b/src/assets/Blender 3.2 Test/textures/snow_01_translucent_2k.png deleted file mode 100644 index 90915d3..0000000 --- a/src/assets/Blender 3.2 Test/textures/snow_01_translucent_2k.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:ed6dd286b46095bb554bfd194fe5938d1a498ea50592af2c56eb90ed6b36420a -size 4522626 diff --git a/src/assets/BoundingBoxTest/bbtest.bin b/src/assets/BoundingBoxTest/bbtest.bin deleted file mode 100644 index 65d9c85..0000000 --- a/src/assets/BoundingBoxTest/bbtest.bin +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:73413f497165161ab761bf2410fd30a1890560fc4cacdb700fb090e925829c6f -size 70356 diff --git a/src/assets/BoundingBoxTest/bbtest.gltf b/src/assets/BoundingBoxTest/bbtest.gltf deleted file mode 100644 index 24e60dd..0000000 --- a/src/assets/BoundingBoxTest/bbtest.gltf +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:a4844b79933f6984aa51546e301734a0e539ab51a35027963e6ed63fe6a6e9ed -size 4447 diff --git a/src/assets/MaterialTest/TestMultiMateria.bin b/src/assets/MaterialTest/TestMultiMateria.bin deleted file mode 100644 index 10dc202..0000000 --- a/src/assets/MaterialTest/TestMultiMateria.bin +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:d6f76224023944eab7e5c1de512a2e9874d6fbfb0e02f1bb546402923dc99160 -size 8164 diff --git a/src/assets/MaterialTest/TestMultiMateria.gltf b/src/assets/MaterialTest/TestMultiMateria.gltf deleted file mode 100644 index aeb9815..0000000 --- a/src/assets/MaterialTest/TestMultiMateria.gltf +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:5b4f279c64f633deb923f8ee412c520d1eaf6f75931c56c01c4622376912f7c7 -size 2858 diff --git a/src/assets/OctTreeTest.bin b/src/assets/OctTreeTest.bin deleted file mode 100644 index dc9b58b..0000000 --- a/src/assets/OctTreeTest.bin +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:028276add696b6219e3ea9fde766bf86e8cc7cc17ab81f6fe4e0ccb58937ac7d -size 25165968 diff --git a/src/assets/OctTreeTest.gltf b/src/assets/OctTreeTest.gltf deleted file mode 100644 index e207e1f..0000000 --- a/src/assets/OctTreeTest.gltf +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:70cbfed89a77dd7eaf54e1e0b5b79f705174c132b4caa90ce7d171349330f290 -size 30215738 diff --git a/src/assets/OctTreeTest/untitled.bin b/src/assets/OctTreeTest/untitled.bin deleted file mode 100644 index 677e828..0000000 --- a/src/assets/OctTreeTest/untitled.bin +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:03c3ea44f176903bfbd440077706f4da2aff721634b86e15f9bfbd9ee1aa594d -size 840 diff --git a/src/assets/OctTreeTest/untitled.gltf b/src/assets/OctTreeTest/untitled.gltf deleted file mode 100644 index 30fe51c..0000000 --- a/src/assets/OctTreeTest/untitled.gltf +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:6ce491b1222522e2fe3dfe4f0aad208e652fa62281c6fdb5c9dcc41d354d0f47 -size 1543 diff --git a/src/assets/OctTreeTestSmall.bin b/src/assets/OctTreeTestSmall.bin deleted file mode 100644 index bbbf212..0000000 --- a/src/assets/OctTreeTestSmall.bin +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:e909f3826bb56732f6518bf07eff88647ae04ada2d852178fc1a0b8543fbbabb -size 393360 diff --git a/src/assets/OctTreeTestSmall.gltf b/src/assets/OctTreeTestSmall.gltf deleted file mode 100644 index 2c8045e..0000000 --- a/src/assets/OctTreeTestSmall.gltf +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:a9241c7a5e5eade7430df08c8b9e8184cfd0012ef3b20b007f13e8db153cad26 -size 449830 diff --git a/src/assets/PhysicsTest.glb b/src/assets/PhysicsTest.glb deleted file mode 100644 index 182d43e..0000000 --- a/src/assets/PhysicsTest.glb +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:d81ca3975d9fb4d56ecd25f36fa3ddccacc6f2a36af49d2d7ae76d1866b3bf38 -size 19956 diff --git a/src/assets/PhysicsTest1.glb b/src/assets/PhysicsTest1.glb deleted file mode 100644 index 8d4b224..0000000 --- a/src/assets/PhysicsTest1.glb +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:21ee2af29f5a6f500dbd08bbc01edcca42f1169255f227e1182796eb02020ff8 -size 50789864 diff --git a/src/assets/RotationTest.bin b/src/assets/RotationTest.bin deleted file mode 100644 index 677e828..0000000 --- a/src/assets/RotationTest.bin +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:03c3ea44f176903bfbd440077706f4da2aff721634b86e15f9bfbd9ee1aa594d -size 840 diff --git a/src/assets/RotationTest.gltf b/src/assets/RotationTest.gltf deleted file mode 100644 index c5e35f2..0000000 --- a/src/assets/RotationTest.gltf +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:fc320c0019afc12ffcb3a1ce8ec7fd609309428d88ad8d42ff82e2f88038cf04 -size 1615 diff --git a/src/assets/colored_cube.obj b/src/assets/colored_cube.obj deleted file mode 100644 index 459d381..0000000 --- a/src/assets/colored_cube.obj +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:77d54a7204c5080d72ae55edf13283ca820eaf12307baf0a2da03cf0ca676091 -size 1127 diff --git a/src/assets/cube.obj b/src/assets/cube.obj deleted file mode 100644 index 5f356f1..0000000 --- a/src/assets/cube.obj +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:508ab50480e0e0714fafeed0df1e228eef750ea22001f1ed15d42475591cc065 -size 1031 diff --git a/src/assets/flat_vase.obj b/src/assets/flat_vase.obj deleted file mode 100644 index 45290fa..0000000 --- a/src/assets/flat_vase.obj +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:9aed669c49b14b8c0885a6ef946a90c0301b23aaf8d73925eb2918bb59c49fa3 -size 915170 diff --git a/src/assets/quad.obj b/src/assets/quad.obj deleted file mode 100644 index c1e71c5..0000000 --- a/src/assets/quad.obj +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:49055779348e2f4f3eee8534981481a556dc0d90af8ca8985816cd0b0424f24b -size 175 diff --git a/src/assets/smooth_vase.obj b/src/assets/smooth_vase.obj deleted file mode 100644 index fd671b6..0000000 --- a/src/assets/smooth_vase.obj +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:45f94c90697241bb027fd8ab3bac119b084b0130200423839f01f79c4d79ee3d -size 871540 diff --git a/src/assets/texturedcube.bin b/src/assets/texturedcube.bin deleted file mode 100644 index 677e828..0000000 --- a/src/assets/texturedcube.bin +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:03c3ea44f176903bfbd440077706f4da2aff721634b86e15f9bfbd9ee1aa594d -size 840 diff --git a/src/assets/texturedcube.gltf b/src/assets/texturedcube.gltf deleted file mode 100644 index fb2226c..0000000 --- a/src/assets/texturedcube.gltf +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:8b278628cdc0209fc54a286764e955decea33fae692d89ec4a6bbbdec3fa56fa -size 1751 diff --git a/src/assets/textures/1571369998_preview_catgrill.png b/src/assets/textures/1571369998_preview_catgrill.png deleted file mode 100644 index 1e49fc0..0000000 --- a/src/assets/textures/1571369998_preview_catgrill.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:c8cdf744a2ac9fc0e7e870bae22e0f1efcb72b41afbb70f1d8dca46a2972a27d -size 61893 diff --git a/src/assets/textures/DebugTexture.png b/src/assets/textures/DebugTexture.png deleted file mode 100644 index 39baf4c..0000000 --- a/src/assets/textures/DebugTexture.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:5ae87d61f827b5444083c94682395dd268ffda444a353254b41d9377f8f47ff6 -size 514 diff --git a/src/assets/textures/TestingHeightmap.png b/src/assets/textures/TestingHeightmap.png deleted file mode 100644 index 6da376f..0000000 --- a/src/assets/textures/TestingHeightmap.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:432307c3dac77763bd3eb5245d89552199248cbcfb852e01ea5f9cf6b46fc213 -size 3813012 diff --git a/src/engine/EngineContext.cpp b/src/engine/EngineContext.cpp index f1b895d..d2fd918 100644 --- a/src/engine/EngineContext.cpp +++ b/src/engine/EngineContext.cpp @@ -57,21 +57,46 @@ namespace fgl::engine initMaterialDataVec( m_material_data_pool ); + constexpr auto offset { 2.0f }; + constexpr std::size_t grid_size { 16 }; + constexpr float factor_offset { 1.0f / static_cast< float >( grid_size ) }; + /* - const std::filesystem::path path { - "/home/kj16609/Desktop/Projects/cxx/Mecha/src/assets/khronos-sponza/Sponza.gltf" - }; + for ( std::size_t x = 0; x < grid_size; ++x ) + for ( std::size_t y = 0; y < grid_size; ++y ) + { + const std::filesystem::path path { + "/home/kj16609/Desktop/Projects/cxx/Mecha/src/assets/PBRSphere.gltf" + }; - SceneBuilder builder { *m_vertex_buffer, *m_index_buffer }; + SceneBuilder builder { *m_vertex_buffer, *m_index_buffer }; - builder.loadScene( path ); + builder.loadScene( path ); - std::vector< GameObject > objs { builder.getGameObjects() }; + std::vector< GameObject > objs { builder.getGameObjects() }; - for ( auto& obj : objs ) - { - m_game_objects_root.addGameObject( std::move( obj ) ); - }*/ + for ( auto& obj : objs ) + { + auto model_components { obj.getComponents< ModelComponent >() }; + + for ( const auto& model_component : model_components ) + { + auto& prims = ( *model_component )->m_primitives; + + for ( auto& prim : prims ) + { + auto& pbr { prim.m_material->properties.pbr }; + pbr.roughness_factor = x * factor_offset; + pbr.metallic_factor = y * factor_offset; + prim.m_material->update(); + } + } + + obj.getTransform().translation = WorldCoordinate( x * offset, y * offset, 0.0f ); + + m_game_objects_root.addGameObject( std::move( obj ) ); + } + }*/ } static Average< float, 60 * 15 > rolling_ms_average; @@ -242,21 +267,6 @@ namespace fgl::engine std::cout << "Loading game objects" << std::endl; auto command_buffer { Device::getInstance().beginSingleTimeCommands() }; - { - ZoneScopedN( "Load phyiscs test" ); - SceneBuilder builder { *m_vertex_buffer, *m_index_buffer }; - builder.loadScene( "assets/PhysicsTest.glb" ); - - auto objects { builder.getGameObjects() }; - - for ( auto& object : objects ) - { - object.addFlag( IS_VISIBLE | IS_ENTITY ); - - m_game_objects_root.addGameObject( std::move( object ) ); - } - } - Device::getInstance().endSingleTimeCommands( command_buffer ); log::info( "Finished loading game object" ); } diff --git a/src/engine/assets/material/Material.cpp b/src/engine/assets/material/Material.cpp index e3fd1fc..cca5e6d 100644 --- a/src/engine/assets/material/Material.cpp +++ b/src/engine/assets/material/Material.cpp @@ -29,7 +29,7 @@ namespace fgl::engine data.metallic_texture_id = getTexID( pbr.metallic_roughness_tex ); data.roughness_factor = pbr.roughness_factor; - data.roughness_factor = pbr.roughness_factor; + data.metallic_factor = pbr.metallic_factor; // Normal data.normal_texture_id = getTexID( normal.texture ); diff --git a/src/engine/gameobjects/GameObject.hpp b/src/engine/gameobjects/GameObject.hpp index 73ba91a..cb1a0e3 100644 --- a/src/engine/gameobjects/GameObject.hpp +++ b/src/engine/gameobjects/GameObject.hpp @@ -108,7 +108,7 @@ namespace fgl::engine for ( ComponentEngineInterface* comp : components ) { - if ( comp->id() == T::ID ) temp.emplace_back( comp ); + if ( comp->id() == T::ID ) temp.emplace_back( dynamic_cast< T* >( comp ) ); } return temp; diff --git a/src/engine/gameobjects/components/ModelComponent.hpp b/src/engine/gameobjects/components/ModelComponent.hpp index 5b62c7e..cc99f4e 100644 --- a/src/engine/gameobjects/components/ModelComponent.hpp +++ b/src/engine/gameobjects/components/ModelComponent.hpp @@ -3,7 +3,6 @@ // #pragma once -#include #include #include "ComponentIDS.hpp" diff --git a/src/engine/rendering/pipelines/shaders/Compiler.cpp b/src/engine/rendering/pipelines/shaders/Compiler.cpp index 242d952..5c64f8c 100644 --- a/src/engine/rendering/pipelines/shaders/Compiler.cpp +++ b/src/engine/rendering/pipelines/shaders/Compiler.cpp @@ -130,6 +130,9 @@ namespace fgl::engine options.AddMacroDefinition( "NEAR_PLANE", std::to_string( constants::NEAR_PLANE ) ); options.AddMacroDefinition( "FAR_PLANE", std::to_string( constants::FAR_PLANE ) ); + // Helpful constants + options.AddMacroDefinition( "PI", std::to_string( std::numbers::pi_v< float > ) ); + const shaderc_shader_kind kind { getShaderKindFromName( input_name ) }; const auto preprocessed_source { getInstance().PreprocessGlsl( diff --git a/src/engine/systems/CompositionSystem.cpp b/src/engine/systems/CompositionSystem.cpp index 761ace2..d11df85 100644 --- a/src/engine/systems/CompositionSystem.cpp +++ b/src/engine/systems/CompositionSystem.cpp @@ -4,6 +4,7 @@ #include "CompositionSystem.hpp" +#include "engine/camera/Camera.hpp" #include "engine/rendering/pipelines/v2/AttachmentBuilder.hpp" #include "engine/rendering/pipelines/v2/Pipeline.hpp" #include "engine/rendering/pipelines/v2/PipelineBuilder.hpp" @@ -18,6 +19,7 @@ namespace fgl::engine PipelineBuilder builder { render_pass, SUBPASS }; builder.addDescriptorSet( gbuffer_set ); + builder.addDescriptorSet( Camera::getDescriptorLayout() ); builder.addColorAttachment().finish(); @@ -44,6 +46,7 @@ namespace fgl::engine m_composite_pipeline->bind( command_buffer ); m_composite_pipeline->bindDescriptor( command_buffer, info.getGBufferDescriptor() ); + m_composite_pipeline->bindDescriptor( command_buffer, info.getCameraDescriptor() ); return info.command_buffer; } diff --git a/src/shaders/composition.frag b/src/shaders/composition.frag index 521f296..3863551 100644 --- a/src/shaders/composition.frag +++ b/src/shaders/composition.frag @@ -4,32 +4,120 @@ layout (input_attachment_index = 0, binding = 0) uniform subpassInput i_color; layout (input_attachment_index = 1, binding = 1) uniform subpassInput i_position; layout (input_attachment_index = 2, binding = 2) uniform subpassInput i_normal; layout (input_attachment_index = 3, binding = 3) uniform subpassInput i_metallic; +//layout (input_attachment_index = 4, binding = 4) uniform subpassInput i_specular; layout (input_attachment_index = 4, binding = 4) uniform subpassInput i_emissive; layout (location = 0) in vec2 in_uv; layout (location = 0) out vec4 out_color; +layout (set = 1, binding = 0) uniform CameraInfo { + mat4 projection; + mat4 view; + mat4 inverse_view; +} camera_info; + +//TODO: uniform binding with sun information + +vec3 getCameraPosition() +{ + return vec3( + camera_info.inverse_view[3][0], + camera_info.inverse_view[3][1], + camera_info.inverse_view[3][2] + ); +} + +vec3 sun_dir = vec3(-1.0, -1.0, -1.0); + +// GGX/Towbridge-Reitz normal distribution function. +// Uses Disney's reparametrization of alpha = roughness^2. +float ndfGGX(float cosLh, float roughness) +{ + float alpha = roughness * roughness; + float alphaSq = alpha * alpha; + + float denom = (cosLh * cosLh) * (alphaSq - 1.0) + 1.0; + return alphaSq / (PI * denom * denom); +} + +// Single term for separable Schlick-GGX below. +float gaSchlickG1(float cosTheta, float k) +{ + return cosTheta / (cosTheta * (1.0 - k) + k); +} + +// Schlick-GGX approximation of geometric attenuation function using Smith's method. +float gaSchlickGGX(float cosLi, float cosLo, float roughness) +{ + float r = roughness + 1.0; + float k = (r * r) / 8.0;// Epic suggests using this roughness remapping for analytic lights. + return gaSchlickG1(cosLi, k) * gaSchlickG1(cosLo, k); +} + +vec3 schlick(vec3 F0, float cosTheta) +{ + return F0 + (vec3(1.0) - F0) * pow(1.0 - cosTheta, 5.0); +} + void main() { - vec3 position = subpassLoad(i_position).xyz; - vec3 normal = subpassLoad(i_normal).xyz; - vec3 color = subpassLoad(i_color).xyz; + const vec3 albedo = subpassLoad(i_color).xyz; - #define ambient 0.5 + const vec3 position = subpassLoad(i_position).xyz; + const vec3 normal = subpassLoad(i_normal).xyz; - const vec3 sun_dir = vec3(0.0, 0.0, -1.0); - const vec3 sun_up = -sun_dir; + // metallic, roughness, occlusion + // r, g, b + const vec3 metallic_comb = subpassLoad(i_metallic).xyz; - const float diff = dot(sun_up, normal); + // split the channels of ease of use + const float metallic_value = metallic_comb.r; + const float roughness_value = metallic_comb.g; + const float occlusion = metallic_comb.b; - // Calculate sun light - vec3 sun_color = vec3(1.0); - //vec3 sun_dir = normalize(vec3(0.0, -0.5, 0.5) - position); - //float diff = max(dot(normalize(normal), sun_dir), 0.0); - vec3 diffuse = diff * sun_color; + const vec3 camera_pos = getCameraPosition(); - vec3 frag_color = (ambient + diffuse) * color; + // Calculate the vector from the world position to the camera + const vec3 Lo = normalize(camera_pos - position); + const vec3 N = normalize(normal); - out_color = vec4(frag_color, 1.0); + float cosLo = max(dot(N, Lo), 0.0); + + // Specular reflection + //vec3 Lr = 2.0 * cosLo * N - Lo; + vec3 Lr = reflect(-Lo, N); + + const vec3 fresnel_factor = vec3(0.04); + + // Fresnel + vec3 F0 = mix(fresnel_factor, albedo, metallic_value); + + vec3 direct_lighting = vec3(0.0); + + // Do this for each light + { + vec3 Li = -sun_dir; + vec3 Lradiance = vec3(1.0);// color? + + // half vector + vec3 Lh = normalize(Li + Lo); + + float cosLi = max(dot(N, Li), 0.0); + float cosLh = max(dot(N, Lh), 0.0); + + vec3 F = schlick(F0, max(dot(Lh, Lo), 0.0)); + float D = ndfGGX(cosLh, roughness_value); + float G = gaSchlickGGX(cosLi, cosLo, roughness_value); + + vec3 kb = mix(vec3(1.0) - F, vec3(0.0), metallic_value); + vec3 diffuse_BRDF = kb * albedo; + vec3 specular_BRDF = (F * D * G) / max(0.04, 4.0 * cosLi * cosLo); + + direct_lighting = (diffuse_BRDF + specular_BRDF) * Lradiance * cosLi; + } + + vec3 ambient_lighting = albedo * 0.1; + + out_color = vec4(direct_lighting + ambient_lighting, 1.0); } diff --git a/src/shaders/include/gbuffer_out.glsl b/src/shaders/include/gbuffer_out.glsl index 06da35a..c14a190 100644 --- a/src/shaders/include/gbuffer_out.glsl +++ b/src/shaders/include/gbuffer_out.glsl @@ -2,4 +2,5 @@ layout (location = 0) out vec4 out_color; layout (location = 1) out vec3 out_position; layout (location = 2) out vec4 out_normal; layout (location = 3) out vec3 out_metallic; +//layout (location = 4) out vec3 out_specular; layout (location = 4) out vec3 out_emissive; diff --git a/src/shaders/textured-gbuffer.frag b/src/shaders/textured-gbuffer.frag index 9ab15ac..165f3f9 100644 --- a/src/shaders/textured-gbuffer.frag +++ b/src/shaders/textured-gbuffer.frag @@ -88,4 +88,17 @@ void main() float occlusion_scalar = 0.0; out_metallic = vec3(metallic_scalar, roughness_scalar, occlusion_scalar); + + + const uint normal_texture_id = materials[mat_id].normal_texture_id; + if (normal_texture_id != INVALID_TEXTURE_ID) + { + vec3 tex_sample = texture(tex[normal_texture_id], in_uv).xyz; + + out_normal = vec4(tex_sample * vec3(materials[mat_id].normal_scale), 1.0); + } + else + { + out_normal = vec4(in_normal, 1.0); + } } \ No newline at end of file diff --git a/src/shaders/textured-gbuffer.vert b/src/shaders/textured-gbuffer.vert index c6a2312..287f0f6 100644 --- a/src/shaders/textured-gbuffer.vert +++ b/src/shaders/textured-gbuffer.vert @@ -15,7 +15,7 @@ void main() { vec4 position_world = instance_model_matrix * vec4(position, 1.0); gl_Position = ubo.projection * ubo.view * position_world; - out_world_pos = vec3(gl_Position); + out_world_pos = vec3(position_world); mat3 normal_matrix = transpose(inverse(mat3(instance_model_matrix)));