From d26de46d925d2ba546e298b3109913c2cd63379a Mon Sep 17 00:00:00 2001 From: teridax Date: Fri, 14 Apr 2023 14:44:28 +0200 Subject: [PATCH] added vertex buffer --- res/cube.mtl | 2 + res/cube.obj | 25 + res/sphere.mtl | 2 + res/sphere.obj | 1447 +++++++++++++++++ src/shader/pathtracing/camera.rs | 16 +- src/shader/pathtracing/mod.rs | 37 +- src/shader/pathtracing/pathtracer.comp | 55 +- .../pathtracing/raytracing/raytracing.glsl | 38 +- src/vulkan/mod.rs | 9 +- 9 files changed, 1588 insertions(+), 43 deletions(-) create mode 100644 res/cube.mtl create mode 100644 res/cube.obj create mode 100644 res/sphere.mtl create mode 100644 res/sphere.obj diff --git a/res/cube.mtl b/res/cube.mtl new file mode 100644 index 0000000..ab438f0 --- /dev/null +++ b/res/cube.mtl @@ -0,0 +1,2 @@ +# Blender 3.5.0 MTL File: 'None' +# www.blender.org diff --git a/res/cube.obj b/res/cube.obj new file mode 100644 index 0000000..c1a0a0a --- /dev/null +++ b/res/cube.obj @@ -0,0 +1,25 @@ +# Blender 3.5.0 +# www.blender.org +mtllib cube.mtl +o Cube +v -1.000000 -1.000000 1.000000 +v -1.000000 1.000000 1.000000 +v -1.000000 -1.000000 -1.000000 +v -1.000000 1.000000 -1.000000 +v 1.000000 -1.000000 1.000000 +v 1.000000 1.000000 1.000000 +v 1.000000 -1.000000 -1.000000 +v 1.000000 1.000000 -1.000000 +s 0 +f 2 3 1 +f 4 7 3 +f 8 5 7 +f 6 1 5 +f 7 1 3 +f 4 6 8 +f 2 4 3 +f 4 8 7 +f 8 6 5 +f 6 2 1 +f 7 5 1 +f 4 2 6 diff --git a/res/sphere.mtl b/res/sphere.mtl new file mode 100644 index 0000000..ab438f0 --- /dev/null +++ b/res/sphere.mtl @@ -0,0 +1,2 @@ +# Blender 3.5.0 MTL File: 'None' +# www.blender.org diff --git a/res/sphere.obj b/res/sphere.obj new file mode 100644 index 0000000..96418b8 --- /dev/null +++ b/res/sphere.obj @@ -0,0 +1,1447 @@ +# Blender 3.5.0 +# www.blender.org +mtllib sphere.mtl +o Sphere +v 0.000000 0.831470 -0.555570 +v 0.000000 0.555570 -0.831470 +v 0.000000 0.195090 -0.980785 +v 0.000000 0.000000 -1.000000 +v 0.000000 -0.195090 -0.980785 +v 0.000000 -0.555570 -0.831470 +v 0.038060 0.980785 -0.191342 +v 0.074658 0.923880 -0.375330 +v 0.108386 0.831470 -0.544895 +v 0.137950 0.707107 -0.693520 +v 0.162212 0.555570 -0.815493 +v 0.180240 0.382683 -0.906127 +v 0.191342 0.195090 -0.961940 +v 0.195090 0.000000 -0.980785 +v 0.191342 -0.195090 -0.961940 +v 0.180240 -0.382683 -0.906127 +v 0.162212 -0.555570 -0.815493 +v 0.137950 -0.707107 -0.693520 +v 0.108386 -0.831470 -0.544895 +v 0.074658 -0.923880 -0.375330 +v 0.038060 -0.980785 -0.191342 +v 0.074658 0.980785 -0.180240 +v 0.146447 0.923880 -0.353553 +v 0.212608 0.831470 -0.513280 +v 0.270598 0.707107 -0.653281 +v 0.318190 0.555570 -0.768178 +v 0.353553 0.382683 -0.853553 +v 0.375330 0.195090 -0.906127 +v 0.382683 0.000000 -0.923879 +v 0.375330 -0.195090 -0.906127 +v 0.353553 -0.382683 -0.853553 +v 0.318190 -0.555570 -0.768178 +v 0.270598 -0.707107 -0.653281 +v 0.212608 -0.831470 -0.513280 +v 0.146447 -0.923880 -0.353553 +v 0.074658 -0.980785 -0.180240 +v 0.108386 0.980785 -0.162212 +v 0.212608 0.923880 -0.318190 +v 0.308658 0.831470 -0.461940 +v 0.392847 0.707107 -0.587938 +v 0.461940 0.555570 -0.691342 +v 0.513280 0.382683 -0.768178 +v 0.544895 0.195090 -0.815493 +v 0.555570 0.000000 -0.831469 +v 0.544895 -0.195090 -0.815493 +v 0.513280 -0.382683 -0.768178 +v 0.461940 -0.555570 -0.691342 +v 0.392847 -0.707107 -0.587938 +v 0.308658 -0.831470 -0.461940 +v 0.212608 -0.923880 -0.318190 +v 0.108386 -0.980785 -0.162212 +v 0.137950 0.980785 -0.137950 +v 0.270598 0.923880 -0.270598 +v 0.392847 0.831470 -0.392847 +v 0.500000 0.707107 -0.500000 +v 0.587938 0.555570 -0.587938 +v 0.653281 0.382683 -0.653281 +v 0.693520 0.195090 -0.693520 +v 0.707107 0.000000 -0.707107 +v 0.693520 -0.195090 -0.693520 +v 0.653281 -0.382683 -0.653281 +v 0.587938 -0.555570 -0.587938 +v 0.500000 -0.707107 -0.500000 +v 0.392847 -0.831470 -0.392847 +v 0.270598 -0.923880 -0.270598 +v 0.137950 -0.980785 -0.137950 +v 0.162212 0.980785 -0.108386 +v 0.318190 0.923880 -0.212608 +v 0.461940 0.831470 -0.308658 +v 0.587938 0.707107 -0.392847 +v 0.691342 0.555570 -0.461940 +v 0.768178 0.382683 -0.513280 +v 0.815493 0.195090 -0.544895 +v 0.831470 0.000000 -0.555570 +v 0.815493 -0.195090 -0.544895 +v 0.768178 -0.382683 -0.513280 +v 0.691342 -0.555570 -0.461940 +v 0.587938 -0.707107 -0.392847 +v 0.461940 -0.831470 -0.308658 +v 0.318190 -0.923880 -0.212608 +v 0.162212 -0.980785 -0.108386 +v 0.000000 1.000000 0.000000 +v 0.180240 0.980785 -0.074658 +v 0.353553 0.923880 -0.146447 +v 0.513280 0.831470 -0.212607 +v 0.653281 0.707107 -0.270598 +v 0.768178 0.555570 -0.318190 +v 0.853553 0.382683 -0.353553 +v 0.906127 0.195090 -0.375330 +v 0.923879 0.000000 -0.382683 +v 0.906127 -0.195090 -0.375330 +v 0.853553 -0.382683 -0.353553 +v 0.768178 -0.555570 -0.318190 +v 0.653281 -0.707107 -0.270598 +v 0.513280 -0.831470 -0.212607 +v 0.353553 -0.923880 -0.146447 +v 0.180240 -0.980785 -0.074658 +v 0.191342 0.980785 -0.038060 +v 0.375330 0.923880 -0.074658 +v 0.544895 0.831470 -0.108386 +v 0.693520 0.707107 -0.137950 +v 0.815493 0.555570 -0.162212 +v 0.906127 0.382683 -0.180240 +v 0.961940 0.195090 -0.191342 +v 0.980785 0.000000 -0.195090 +v 0.961940 -0.195090 -0.191342 +v 0.906127 -0.382683 -0.180240 +v 0.815493 -0.555570 -0.162212 +v 0.693520 -0.707107 -0.137950 +v 0.544895 -0.831470 -0.108386 +v 0.375330 -0.923880 -0.074658 +v 0.191342 -0.980785 -0.038060 +v 0.195090 0.980785 0.000000 +v 0.382683 0.923880 0.000000 +v 0.555570 0.831470 0.000000 +v 0.707107 0.707107 -0.000000 +v 0.831469 0.555570 0.000000 +v 0.923879 0.382683 -0.000000 +v 0.980785 0.195090 0.000000 +v 1.000000 0.000000 0.000000 +v 0.980785 -0.195090 0.000000 +v 0.923879 -0.382683 -0.000000 +v 0.831469 -0.555570 0.000000 +v 0.707107 -0.707107 -0.000000 +v 0.555570 -0.831470 0.000000 +v 0.382683 -0.923880 0.000000 +v 0.195090 -0.980785 0.000000 +v 0.191342 0.980785 0.038060 +v 0.375330 0.923880 0.074658 +v 0.544895 0.831470 0.108386 +v 0.693520 0.707107 0.137950 +v 0.815493 0.555570 0.162212 +v 0.906127 0.382683 0.180240 +v 0.961940 0.195090 0.191342 +v 0.980785 0.000000 0.195090 +v 0.961940 -0.195090 0.191342 +v 0.906127 -0.382683 0.180240 +v 0.815493 -0.555570 0.162212 +v 0.693520 -0.707107 0.137950 +v 0.544895 -0.831470 0.108386 +v 0.375330 -0.923880 0.074658 +v 0.191342 -0.980785 0.038060 +v 0.180240 0.980785 0.074658 +v 0.353553 0.923880 0.146447 +v 0.513280 0.831470 0.212608 +v 0.653281 0.707107 0.270598 +v 0.768178 0.555570 0.318190 +v 0.853553 0.382683 0.353553 +v 0.906127 0.195090 0.375330 +v 0.923879 0.000000 0.382683 +v 0.906127 -0.195090 0.375330 +v 0.853553 -0.382683 0.353553 +v 0.768178 -0.555570 0.318190 +v 0.653281 -0.707107 0.270598 +v 0.513280 -0.831470 0.212608 +v 0.353553 -0.923880 0.146447 +v 0.180240 -0.980785 0.074658 +v 0.162212 0.980785 0.108386 +v 0.318190 0.923880 0.212608 +v 0.461940 0.831470 0.308658 +v 0.587938 0.707107 0.392847 +v 0.691341 0.555570 0.461940 +v 0.768178 0.382683 0.513280 +v 0.815493 0.195090 0.544895 +v 0.831469 0.000000 0.555570 +v 0.815493 -0.195090 0.544895 +v 0.768178 -0.382683 0.513280 +v 0.691341 -0.555570 0.461940 +v 0.587938 -0.707107 0.392847 +v 0.461940 -0.831470 0.308658 +v 0.318190 -0.923880 0.212608 +v 0.162212 -0.980785 0.108386 +v 0.137950 0.980785 0.137950 +v 0.270598 0.923880 0.270598 +v 0.392847 0.831470 0.392847 +v 0.500000 0.707107 0.500000 +v 0.587938 0.555570 0.587938 +v 0.653281 0.382683 0.653281 +v 0.693520 0.195090 0.693520 +v 0.707106 0.000000 0.707107 +v 0.693520 -0.195090 0.693520 +v 0.653281 -0.382683 0.653281 +v 0.587938 -0.555570 0.587938 +v 0.500000 -0.707107 0.500000 +v 0.392847 -0.831470 0.392847 +v 0.270598 -0.923880 0.270598 +v 0.137950 -0.980785 0.137950 +v 0.108386 0.980785 0.162212 +v 0.212607 0.923880 0.318190 +v 0.308658 0.831470 0.461940 +v 0.392847 0.707107 0.587938 +v 0.461940 0.555570 0.691342 +v 0.513280 0.382683 0.768178 +v 0.544895 0.195090 0.815493 +v 0.555570 0.000000 0.831469 +v 0.544895 -0.195090 0.815493 +v 0.513280 -0.382683 0.768178 +v 0.461940 -0.555570 0.691342 +v 0.392847 -0.707107 0.587938 +v 0.308658 -0.831470 0.461940 +v 0.212607 -0.923880 0.318190 +v 0.108386 -0.980785 0.162212 +v 0.074658 0.980785 0.180240 +v 0.146447 0.923880 0.353553 +v 0.212607 0.831470 0.513280 +v 0.270598 0.707107 0.653281 +v 0.318189 0.555570 0.768178 +v 0.353553 0.382683 0.853553 +v 0.375330 0.195090 0.906127 +v 0.382683 0.000000 0.923879 +v 0.375330 -0.195090 0.906127 +v 0.353553 -0.382683 0.853553 +v 0.318189 -0.555570 0.768178 +v 0.270598 -0.707107 0.653281 +v 0.212607 -0.831470 0.513280 +v 0.146447 -0.923880 0.353553 +v 0.074658 -0.980785 0.180240 +v 0.038060 0.980785 0.191342 +v 0.074658 0.923880 0.375330 +v 0.108386 0.831470 0.544895 +v 0.137950 0.707107 0.693520 +v 0.162212 0.555570 0.815493 +v 0.180240 0.382683 0.906127 +v 0.191342 0.195090 0.961939 +v 0.195090 0.000000 0.980785 +v 0.191342 -0.195090 0.961939 +v 0.180240 -0.382683 0.906127 +v 0.162212 -0.555570 0.815493 +v 0.137950 -0.707107 0.693520 +v 0.108386 -0.831470 0.544895 +v 0.074658 -0.923880 0.375330 +v 0.038060 -0.980785 0.191342 +v -0.000000 0.980785 0.195090 +v -0.000000 0.923880 0.382683 +v -0.000000 0.831470 0.555570 +v -0.000000 0.707107 0.707107 +v -0.000000 0.555570 0.831469 +v 0.000000 0.382683 0.923879 +v -0.000000 0.195090 0.980785 +v -0.000000 0.000000 0.999999 +v -0.000000 -0.195090 0.980785 +v 0.000000 -0.382683 0.923879 +v -0.000000 -0.555570 0.831469 +v -0.000000 -0.707107 0.707107 +v -0.000000 -0.831470 0.555570 +v -0.000000 -0.923880 0.382683 +v -0.000000 -0.980785 0.195090 +v -0.038060 0.980785 0.191342 +v -0.074658 0.923880 0.375330 +v -0.108386 0.831470 0.544895 +v -0.137950 0.707107 0.693520 +v -0.162212 0.555570 0.815493 +v -0.180240 0.382683 0.906127 +v -0.191342 0.195090 0.961939 +v -0.195091 0.000000 0.980785 +v -0.191342 -0.195090 0.961939 +v -0.180240 -0.382683 0.906127 +v -0.162212 -0.555570 0.815493 +v -0.137950 -0.707107 0.693520 +v -0.108386 -0.831470 0.544895 +v -0.074658 -0.923880 0.375330 +v -0.038060 -0.980785 0.191342 +v -0.074658 0.980785 0.180240 +v -0.146447 0.923880 0.353553 +v -0.212608 0.831470 0.513280 +v -0.270598 0.707107 0.653281 +v -0.318190 0.555570 0.768177 +v -0.353553 0.382683 0.853553 +v -0.375330 0.195090 0.906127 +v -0.382683 0.000000 0.923879 +v -0.375330 -0.195090 0.906127 +v -0.353553 -0.382683 0.853553 +v -0.318190 -0.555570 0.768177 +v -0.270598 -0.707107 0.653281 +v -0.212608 -0.831470 0.513280 +v -0.146447 -0.923880 0.353553 +v -0.074658 -0.980785 0.180240 +v -0.108386 0.980785 0.162212 +v -0.212608 0.923880 0.318190 +v -0.308658 0.831470 0.461939 +v -0.392847 0.707107 0.587938 +v -0.461940 0.555570 0.691341 +v -0.513280 0.382683 0.768178 +v -0.544895 0.195090 0.815493 +v -0.555570 0.000000 0.831469 +v -0.544895 -0.195090 0.815493 +v -0.513280 -0.382683 0.768178 +v -0.461940 -0.555570 0.691341 +v -0.392847 -0.707107 0.587938 +v -0.308658 -0.831470 0.461939 +v -0.212608 -0.923880 0.318190 +v -0.108386 -0.980785 0.162212 +v -0.137950 0.980785 0.137950 +v -0.270598 0.923880 0.270598 +v -0.392847 0.831470 0.392847 +v -0.500000 0.707107 0.500000 +v -0.587938 0.555570 0.587937 +v -0.653281 0.382683 0.653281 +v -0.693520 0.195090 0.693520 +v -0.707106 0.000000 0.707106 +v -0.693520 -0.195090 0.693520 +v -0.653281 -0.382683 0.653281 +v -0.587938 -0.555570 0.587937 +v -0.500000 -0.707107 0.500000 +v -0.392847 -0.831470 0.392847 +v -0.270598 -0.923880 0.270598 +v -0.137950 -0.980785 0.137950 +v 0.000000 -1.000000 0.000000 +v -0.162212 0.980785 0.108386 +v -0.318190 0.923880 0.212607 +v -0.461940 0.831470 0.308658 +v -0.587938 0.707107 0.392847 +v -0.691341 0.555570 0.461939 +v -0.768177 0.382683 0.513280 +v -0.815493 0.195090 0.544895 +v -0.831469 0.000000 0.555569 +v -0.815493 -0.195090 0.544895 +v -0.768177 -0.382683 0.513280 +v -0.691341 -0.555570 0.461939 +v -0.587938 -0.707107 0.392847 +v -0.461940 -0.831470 0.308658 +v -0.318190 -0.923880 0.212607 +v -0.162212 -0.980785 0.108386 +v -0.180240 0.980785 0.074658 +v -0.353553 0.923880 0.146447 +v -0.513280 0.831470 0.212607 +v -0.653281 0.707107 0.270598 +v -0.768177 0.555570 0.318189 +v -0.853553 0.382683 0.353553 +v -0.906127 0.195090 0.375330 +v -0.923879 0.000000 0.382683 +v -0.906127 -0.195090 0.375330 +v -0.853553 -0.382683 0.353553 +v -0.768177 -0.555570 0.318189 +v -0.653281 -0.707107 0.270598 +v -0.513280 -0.831470 0.212607 +v -0.353553 -0.923880 0.146447 +v -0.180240 -0.980785 0.074658 +v -0.191342 0.980785 0.038060 +v -0.375330 0.923880 0.074658 +v -0.544895 0.831470 0.108386 +v -0.693520 0.707107 0.137950 +v -0.815493 0.555570 0.162211 +v -0.906127 0.382683 0.180240 +v -0.961939 0.195090 0.191341 +v -0.980784 0.000000 0.195090 +v -0.961939 -0.195090 0.191341 +v -0.906127 -0.382683 0.180240 +v -0.815493 -0.555570 0.162211 +v -0.693520 -0.707107 0.137950 +v -0.544895 -0.831470 0.108386 +v -0.375330 -0.923880 0.074658 +v -0.191342 -0.980785 0.038060 +v -0.195090 0.980785 -0.000000 +v -0.382683 0.923880 -0.000000 +v -0.555570 0.831470 -0.000000 +v -0.707107 0.707107 -0.000000 +v -0.831469 0.555570 -0.000000 +v -0.923879 0.382683 -0.000000 +v -0.980785 0.195090 -0.000000 +v -0.999999 0.000000 -0.000000 +v -0.980785 -0.195090 -0.000000 +v -0.923879 -0.382683 -0.000000 +v -0.831469 -0.555570 -0.000000 +v -0.707107 -0.707107 -0.000000 +v -0.555570 -0.831470 -0.000000 +v -0.382683 -0.923880 -0.000000 +v -0.195090 -0.980785 -0.000000 +v -0.191342 0.980785 -0.038060 +v -0.375330 0.923880 -0.074658 +v -0.544895 0.831470 -0.108386 +v -0.693520 0.707107 -0.137950 +v -0.815493 0.555570 -0.162212 +v -0.906127 0.382683 -0.180240 +v -0.961939 0.195090 -0.191342 +v -0.980784 0.000000 -0.195091 +v -0.961939 -0.195090 -0.191342 +v -0.906127 -0.382683 -0.180240 +v -0.815493 -0.555570 -0.162212 +v -0.693520 -0.707107 -0.137950 +v -0.544895 -0.831470 -0.108386 +v -0.375330 -0.923880 -0.074658 +v -0.191342 -0.980785 -0.038060 +v -0.180240 0.980785 -0.074658 +v -0.353553 0.923880 -0.146447 +v -0.513279 0.831470 -0.212607 +v -0.653281 0.707107 -0.270598 +v -0.768177 0.555570 -0.318190 +v -0.853553 0.382683 -0.353553 +v -0.906127 0.195090 -0.375330 +v -0.923878 0.000000 -0.382683 +v -0.906127 -0.195090 -0.375330 +v -0.853553 -0.382683 -0.353553 +v -0.768177 -0.555570 -0.318190 +v -0.653281 -0.707107 -0.270598 +v -0.513279 -0.831470 -0.212607 +v -0.353553 -0.923880 -0.146447 +v -0.180240 -0.980785 -0.074658 +v -0.162212 0.980785 -0.108386 +v -0.318189 0.923880 -0.212607 +v -0.461939 0.831470 -0.308658 +v -0.587938 0.707107 -0.392847 +v -0.691341 0.555570 -0.461940 +v -0.768177 0.382683 -0.513280 +v -0.815493 0.195090 -0.544895 +v -0.831468 0.000000 -0.555570 +v -0.815493 -0.195090 -0.544895 +v -0.768177 -0.382683 -0.513280 +v -0.691341 -0.555570 -0.461940 +v -0.587938 -0.707107 -0.392847 +v -0.461939 -0.831470 -0.308658 +v -0.318189 -0.923880 -0.212607 +v -0.162212 -0.980785 -0.108386 +v -0.137950 0.980785 -0.137950 +v -0.270598 0.923880 -0.270598 +v -0.392847 0.831470 -0.392847 +v -0.500000 0.707107 -0.500000 +v -0.587937 0.555570 -0.587938 +v -0.653281 0.382683 -0.653281 +v -0.693519 0.195090 -0.693520 +v -0.707106 0.000000 -0.707106 +v -0.693519 -0.195090 -0.693520 +v -0.653281 -0.382683 -0.653281 +v -0.587937 -0.555570 -0.587938 +v -0.500000 -0.707107 -0.500000 +v -0.392847 -0.831470 -0.392847 +v -0.270598 -0.923880 -0.270598 +v -0.137950 -0.980785 -0.137950 +v -0.108386 0.980785 -0.162212 +v -0.212607 0.923880 -0.318190 +v -0.308658 0.831470 -0.461939 +v -0.392847 0.707107 -0.587938 +v -0.461939 0.555570 -0.691341 +v -0.513280 0.382683 -0.768177 +v -0.544895 0.195090 -0.815493 +v -0.555569 0.000000 -0.831469 +v -0.544895 -0.195090 -0.815493 +v -0.513280 -0.382683 -0.768177 +v -0.461939 -0.555570 -0.691341 +v -0.392847 -0.707107 -0.587938 +v -0.308658 -0.831470 -0.461939 +v -0.212607 -0.923880 -0.318190 +v -0.108386 -0.980785 -0.162212 +v -0.074658 0.980785 -0.180240 +v -0.146446 0.923880 -0.353553 +v -0.212607 0.831470 -0.513279 +v -0.270598 0.707107 -0.653281 +v -0.318189 0.555570 -0.768177 +v -0.353553 0.382683 -0.853553 +v -0.375330 0.195090 -0.906127 +v -0.382683 0.000000 -0.923879 +v -0.375330 -0.195090 -0.906127 +v -0.353553 -0.382683 -0.853553 +v -0.318189 -0.555570 -0.768177 +v -0.270598 -0.707107 -0.653281 +v -0.212607 -0.831470 -0.513279 +v -0.146446 -0.923880 -0.353553 +v -0.074658 -0.980785 -0.180240 +v -0.038060 0.980785 -0.191342 +v -0.074658 0.923880 -0.375330 +v -0.108386 0.831470 -0.544895 +v -0.137950 0.707107 -0.693520 +v -0.162211 0.555570 -0.815493 +v -0.180240 0.382683 -0.906127 +v -0.191341 0.195090 -0.961939 +v -0.195090 0.000000 -0.980784 +v -0.191341 -0.195090 -0.961939 +v -0.180240 -0.382683 -0.906127 +v -0.162211 -0.555570 -0.815493 +v -0.137950 -0.707107 -0.693520 +v -0.108386 -0.831470 -0.544895 +v -0.074658 -0.923880 -0.375330 +v -0.038060 -0.980785 -0.191342 +v 0.000000 0.980785 -0.195090 +v 0.000000 0.923880 -0.382683 +v 0.000000 0.707107 -0.707107 +v 0.000000 0.382683 -0.923879 +v 0.000000 -0.382683 -0.923879 +v 0.000000 -0.707107 -0.707107 +v 0.000000 -0.831470 -0.555570 +v 0.000000 -0.923880 -0.382683 +v 0.000000 -0.980785 -0.195090 +s 0 +f 3 14 4 +f 474 82 7 +f 308 482 21 +f 4 15 5 +f 475 7 8 +f 5 16 478 +f 1 8 9 +f 478 17 6 +f 476 9 10 +f 6 18 479 +f 2 10 11 +f 479 19 480 +f 477 11 12 +f 480 20 481 +f 3 12 13 +f 481 21 482 +f 13 27 28 +f 20 36 21 +f 13 29 14 +f 7 82 22 +f 308 21 36 +f 14 30 15 +f 7 23 8 +f 15 31 16 +f 8 24 9 +f 16 32 17 +f 9 25 10 +f 17 33 18 +f 10 26 11 +f 19 33 34 +f 11 27 12 +f 20 34 35 +f 32 46 47 +f 24 40 25 +f 33 47 48 +f 25 41 26 +f 34 48 49 +f 26 42 27 +f 34 50 35 +f 27 43 28 +f 35 51 36 +f 28 44 29 +f 22 82 37 +f 308 36 51 +f 30 44 45 +f 22 38 23 +f 30 46 31 +f 23 39 24 +f 50 66 51 +f 44 58 59 +f 37 82 52 +f 308 51 66 +f 44 60 45 +f 37 53 38 +f 45 61 46 +f 38 54 39 +f 47 61 62 +f 39 55 40 +f 47 63 48 +f 40 56 41 +f 48 64 49 +f 41 57 42 +f 49 65 50 +f 43 57 58 +f 54 70 55 +f 62 78 63 +f 56 70 71 +f 63 79 64 +f 56 72 57 +f 65 79 80 +f 58 72 73 +f 65 81 66 +f 59 73 74 +f 52 82 67 +f 308 66 81 +f 59 75 60 +f 52 68 53 +f 60 76 61 +f 53 69 54 +f 62 76 77 +f 74 89 90 +f 67 82 83 +f 308 81 97 +f 74 91 75 +f 67 84 68 +f 75 92 76 +f 68 85 69 +f 77 92 93 +f 69 86 70 +f 77 94 78 +f 71 86 87 +f 78 95 79 +f 71 88 72 +f 79 96 80 +f 73 88 89 +f 81 96 97 +f 93 109 94 +f 87 101 102 +f 95 109 110 +f 87 103 88 +f 96 110 111 +f 89 103 104 +f 96 112 97 +f 90 104 105 +f 83 82 98 +f 308 97 112 +f 90 106 91 +f 84 98 99 +f 91 107 92 +f 84 100 85 +f 93 107 108 +f 85 101 86 +f 308 112 127 +f 105 121 106 +f 99 113 114 +f 106 122 107 +f 99 115 100 +f 108 122 123 +f 100 116 101 +f 108 124 109 +f 102 116 117 +f 110 124 125 +f 102 118 103 +f 110 126 111 +f 104 118 119 +f 111 127 112 +f 105 119 120 +f 98 82 113 +f 125 139 140 +f 117 133 118 +f 125 141 126 +f 119 133 134 +f 126 142 127 +f 120 134 135 +f 113 82 128 +f 308 127 142 +f 120 136 121 +f 113 129 114 +f 121 137 122 +f 114 130 115 +f 123 137 138 +f 115 131 116 +f 123 139 124 +f 117 131 132 +f 128 144 129 +f 136 152 137 +f 130 144 145 +f 138 152 153 +f 130 146 131 +f 138 154 139 +f 132 146 147 +f 140 154 155 +f 132 148 133 +f 140 156 141 +f 134 148 149 +f 142 156 157 +f 135 149 150 +f 128 82 143 +f 308 142 157 +f 135 151 136 +f 147 163 148 +f 155 171 156 +f 149 163 164 +f 156 172 157 +f 150 164 165 +f 143 82 158 +f 308 157 172 +f 150 166 151 +f 143 159 144 +f 151 167 152 +f 145 159 160 +f 153 167 168 +f 145 161 146 +f 153 169 154 +f 147 161 162 +f 155 169 170 +f 166 182 167 +f 159 175 160 +f 168 182 183 +f 160 176 161 +f 168 184 169 +f 162 176 177 +f 169 185 170 +f 162 178 163 +f 171 185 186 +f 164 178 179 +f 172 186 187 +f 165 179 180 +f 158 82 173 +f 308 172 187 +f 165 181 166 +f 158 174 159 +f 185 201 186 +f 179 193 194 +f 186 202 187 +f 180 194 195 +f 173 82 188 +f 308 187 202 +f 180 196 181 +f 174 188 189 +f 181 197 182 +f 175 189 190 +f 183 197 198 +f 175 191 176 +f 183 199 184 +f 177 191 192 +f 185 199 200 +f 177 193 178 +f 189 205 190 +f 198 212 213 +f 190 206 191 +f 198 214 199 +f 192 206 207 +f 200 214 215 +f 192 208 193 +f 200 216 201 +f 194 208 209 +f 201 217 202 +f 195 209 210 +f 188 82 203 +f 308 202 217 +f 195 211 196 +f 188 204 189 +f 196 212 197 +f 209 223 224 +f 216 232 217 +f 210 224 225 +f 203 82 218 +f 308 217 232 +f 210 226 211 +f 203 219 204 +f 211 227 212 +f 204 220 205 +f 213 227 228 +f 205 221 206 +f 213 229 214 +f 207 221 222 +f 215 229 230 +f 207 223 208 +f 215 231 216 +f 228 242 243 +f 220 236 221 +f 228 244 229 +f 222 236 237 +f 230 244 245 +f 222 238 223 +f 230 246 231 +f 224 238 239 +f 232 246 247 +f 225 239 240 +f 218 82 233 +f 308 232 247 +f 225 241 226 +f 218 234 219 +f 226 242 227 +f 220 234 235 +f 246 262 247 +f 240 254 255 +f 233 82 248 +f 308 247 262 +f 240 256 241 +f 233 249 234 +f 241 257 242 +f 234 250 235 +f 243 257 258 +f 235 251 236 +f 243 259 244 +f 237 251 252 +f 245 259 260 +f 237 253 238 +f 245 261 246 +f 239 253 254 +f 258 274 259 +f 252 266 267 +f 260 274 275 +f 252 268 253 +f 260 276 261 +f 254 268 269 +f 261 277 262 +f 255 269 270 +f 248 82 263 +f 308 262 277 +f 255 271 256 +f 249 263 264 +f 256 272 257 +f 249 265 250 +f 258 272 273 +f 250 266 251 +f 263 82 278 +f 308 277 292 +f 270 286 271 +f 264 278 279 +f 271 287 272 +f 264 280 265 +f 273 287 288 +f 265 281 266 +f 273 289 274 +f 267 281 282 +f 275 289 290 +f 267 283 268 +f 275 291 276 +f 269 283 284 +f 277 291 292 +f 270 284 285 +f 282 296 297 +f 290 304 305 +f 282 298 283 +f 290 306 291 +f 284 298 299 +f 292 306 307 +f 285 299 300 +f 278 82 293 +f 308 292 307 +f 285 301 286 +f 278 294 279 +f 286 302 287 +f 279 295 280 +f 288 302 303 +f 280 296 281 +f 288 304 289 +f 300 317 301 +f 293 310 294 +f 301 318 302 +f 294 311 295 +f 303 318 319 +f 295 312 296 +f 303 320 304 +f 297 312 313 +f 305 320 321 +f 297 314 298 +f 305 322 306 +f 299 314 315 +f 306 323 307 +f 300 315 316 +f 293 82 309 +f 308 307 323 +f 321 335 336 +f 313 329 314 +f 321 337 322 +f 315 329 330 +f 322 338 323 +f 316 330 331 +f 309 82 324 +f 308 323 338 +f 316 332 317 +f 309 325 310 +f 317 333 318 +f 310 326 311 +f 319 333 334 +f 311 327 312 +f 319 335 320 +f 312 328 313 +f 324 340 325 +f 332 348 333 +f 325 341 326 +f 334 348 349 +f 326 342 327 +f 334 350 335 +f 328 342 343 +f 336 350 351 +f 328 344 329 +f 336 352 337 +f 330 344 345 +f 337 353 338 +f 331 345 346 +f 324 82 339 +f 308 338 353 +f 331 347 332 +f 343 359 344 +f 351 367 352 +f 345 359 360 +f 352 368 353 +f 346 360 361 +f 339 82 354 +f 308 353 368 +f 346 362 347 +f 339 355 340 +f 347 363 348 +f 341 355 356 +f 349 363 364 +f 341 357 342 +f 349 365 350 +f 343 357 358 +f 351 365 366 +f 362 378 363 +f 356 370 371 +f 364 378 379 +f 356 372 357 +f 364 380 365 +f 358 372 373 +f 366 380 381 +f 358 374 359 +f 366 382 367 +f 360 374 375 +f 367 383 368 +f 361 375 376 +f 354 82 369 +f 308 368 383 +f 361 377 362 +f 354 370 355 +f 381 397 382 +f 375 389 390 +f 382 398 383 +f 376 390 391 +f 369 82 384 +f 308 383 398 +f 376 392 377 +f 369 385 370 +f 377 393 378 +f 371 385 386 +f 379 393 394 +f 371 387 372 +f 379 395 380 +f 373 387 388 +f 381 395 396 +f 373 389 374 +f 394 408 409 +f 386 402 387 +f 394 410 395 +f 388 402 403 +f 396 410 411 +f 388 404 389 +f 397 411 412 +f 390 404 405 +f 397 413 398 +f 391 405 406 +f 384 82 399 +f 308 398 413 +f 391 407 392 +f 385 399 400 +f 392 408 393 +f 385 401 386 +f 412 428 413 +f 406 420 421 +f 399 82 414 +f 308 413 428 +f 406 422 407 +f 399 415 400 +f 407 423 408 +f 401 415 416 +f 409 423 424 +f 401 417 402 +f 409 425 410 +f 403 417 418 +f 411 425 426 +f 403 419 404 +f 411 427 412 +f 405 419 420 +f 416 432 417 +f 424 440 425 +f 418 432 433 +f 426 440 441 +f 418 434 419 +f 426 442 427 +f 420 434 435 +f 427 443 428 +f 421 435 436 +f 414 82 429 +f 308 428 443 +f 421 437 422 +f 414 430 415 +f 422 438 423 +f 416 430 431 +f 424 438 439 +f 436 450 451 +f 429 82 444 +f 308 443 458 +f 436 452 437 +f 430 444 445 +f 437 453 438 +f 430 446 431 +f 439 453 454 +f 431 447 432 +f 439 455 440 +f 433 447 448 +f 441 455 456 +f 433 449 434 +f 441 457 442 +f 435 449 450 +f 442 458 443 +f 454 470 455 +f 448 462 463 +f 456 470 471 +f 448 464 449 +f 456 472 457 +f 450 464 465 +f 458 472 473 +f 451 465 466 +f 444 82 459 +f 308 458 473 +f 451 467 452 +f 444 460 445 +f 452 468 453 +f 446 460 461 +f 454 468 469 +f 446 462 447 +f 459 82 474 +f 308 473 482 +f 466 5 467 +f 460 474 475 +f 467 478 468 +f 461 475 1 +f 468 6 469 +f 462 1 476 +f 469 479 470 +f 463 476 2 +f 471 479 480 +f 464 2 477 +f 471 481 472 +f 465 477 3 +f 472 482 473 +f 466 3 4 +f 3 13 14 +f 4 14 15 +f 475 474 7 +f 5 15 16 +f 1 475 8 +f 478 16 17 +f 476 1 9 +f 6 17 18 +f 2 476 10 +f 479 18 19 +f 477 2 11 +f 480 19 20 +f 3 477 12 +f 481 20 21 +f 13 12 27 +f 20 35 36 +f 13 28 29 +f 14 29 30 +f 7 22 23 +f 15 30 31 +f 8 23 24 +f 16 31 32 +f 9 24 25 +f 17 32 33 +f 10 25 26 +f 19 18 33 +f 11 26 27 +f 20 19 34 +f 32 31 46 +f 24 39 40 +f 33 32 47 +f 25 40 41 +f 34 33 48 +f 26 41 42 +f 34 49 50 +f 27 42 43 +f 35 50 51 +f 28 43 44 +f 30 29 44 +f 22 37 38 +f 30 45 46 +f 23 38 39 +f 50 65 66 +f 44 43 58 +f 44 59 60 +f 37 52 53 +f 45 60 61 +f 38 53 54 +f 47 46 61 +f 39 54 55 +f 47 62 63 +f 40 55 56 +f 48 63 64 +f 41 56 57 +f 49 64 65 +f 43 42 57 +f 54 69 70 +f 62 77 78 +f 56 55 70 +f 63 78 79 +f 56 71 72 +f 65 64 79 +f 58 57 72 +f 65 80 81 +f 59 58 73 +f 59 74 75 +f 52 67 68 +f 60 75 76 +f 53 68 69 +f 62 61 76 +f 74 73 89 +f 74 90 91 +f 67 83 84 +f 75 91 92 +f 68 84 85 +f 77 76 92 +f 69 85 86 +f 77 93 94 +f 71 70 86 +f 78 94 95 +f 71 87 88 +f 79 95 96 +f 73 72 88 +f 81 80 96 +f 93 108 109 +f 87 86 101 +f 95 94 109 +f 87 102 103 +f 96 95 110 +f 89 88 103 +f 96 111 112 +f 90 89 104 +f 90 105 106 +f 84 83 98 +f 91 106 107 +f 84 99 100 +f 93 92 107 +f 85 100 101 +f 105 120 121 +f 99 98 113 +f 106 121 122 +f 99 114 115 +f 108 107 122 +f 100 115 116 +f 108 123 124 +f 102 101 116 +f 110 109 124 +f 102 117 118 +f 110 125 126 +f 104 103 118 +f 111 126 127 +f 105 104 119 +f 125 124 139 +f 117 132 133 +f 125 140 141 +f 119 118 133 +f 126 141 142 +f 120 119 134 +f 120 135 136 +f 113 128 129 +f 121 136 137 +f 114 129 130 +f 123 122 137 +f 115 130 131 +f 123 138 139 +f 117 116 131 +f 128 143 144 +f 136 151 152 +f 130 129 144 +f 138 137 152 +f 130 145 146 +f 138 153 154 +f 132 131 146 +f 140 139 154 +f 132 147 148 +f 140 155 156 +f 134 133 148 +f 142 141 156 +f 135 134 149 +f 135 150 151 +f 147 162 163 +f 155 170 171 +f 149 148 163 +f 156 171 172 +f 150 149 164 +f 150 165 166 +f 143 158 159 +f 151 166 167 +f 145 144 159 +f 153 152 167 +f 145 160 161 +f 153 168 169 +f 147 146 161 +f 155 154 169 +f 166 181 182 +f 159 174 175 +f 168 167 182 +f 160 175 176 +f 168 183 184 +f 162 161 176 +f 169 184 185 +f 162 177 178 +f 171 170 185 +f 164 163 178 +f 172 171 186 +f 165 164 179 +f 165 180 181 +f 158 173 174 +f 185 200 201 +f 179 178 193 +f 186 201 202 +f 180 179 194 +f 180 195 196 +f 174 173 188 +f 181 196 197 +f 175 174 189 +f 183 182 197 +f 175 190 191 +f 183 198 199 +f 177 176 191 +f 185 184 199 +f 177 192 193 +f 189 204 205 +f 198 197 212 +f 190 205 206 +f 198 213 214 +f 192 191 206 +f 200 199 214 +f 192 207 208 +f 200 215 216 +f 194 193 208 +f 201 216 217 +f 195 194 209 +f 195 210 211 +f 188 203 204 +f 196 211 212 +f 209 208 223 +f 216 231 232 +f 210 209 224 +f 210 225 226 +f 203 218 219 +f 211 226 227 +f 204 219 220 +f 213 212 227 +f 205 220 221 +f 213 228 229 +f 207 206 221 +f 215 214 229 +f 207 222 223 +f 215 230 231 +f 228 227 242 +f 220 235 236 +f 228 243 244 +f 222 221 236 +f 230 229 244 +f 222 237 238 +f 230 245 246 +f 224 223 238 +f 232 231 246 +f 225 224 239 +f 225 240 241 +f 218 233 234 +f 226 241 242 +f 220 219 234 +f 246 261 262 +f 240 239 254 +f 240 255 256 +f 233 248 249 +f 241 256 257 +f 234 249 250 +f 243 242 257 +f 235 250 251 +f 243 258 259 +f 237 236 251 +f 245 244 259 +f 237 252 253 +f 245 260 261 +f 239 238 253 +f 258 273 274 +f 252 251 266 +f 260 259 274 +f 252 267 268 +f 260 275 276 +f 254 253 268 +f 261 276 277 +f 255 254 269 +f 255 270 271 +f 249 248 263 +f 256 271 272 +f 249 264 265 +f 258 257 272 +f 250 265 266 +f 270 285 286 +f 264 263 278 +f 271 286 287 +f 264 279 280 +f 273 272 287 +f 265 280 281 +f 273 288 289 +f 267 266 281 +f 275 274 289 +f 267 282 283 +f 275 290 291 +f 269 268 283 +f 277 276 291 +f 270 269 284 +f 282 281 296 +f 290 289 304 +f 282 297 298 +f 290 305 306 +f 284 283 298 +f 292 291 306 +f 285 284 299 +f 285 300 301 +f 278 293 294 +f 286 301 302 +f 279 294 295 +f 288 287 302 +f 280 295 296 +f 288 303 304 +f 300 316 317 +f 293 309 310 +f 301 317 318 +f 294 310 311 +f 303 302 318 +f 295 311 312 +f 303 319 320 +f 297 296 312 +f 305 304 320 +f 297 313 314 +f 305 321 322 +f 299 298 314 +f 306 322 323 +f 300 299 315 +f 321 320 335 +f 313 328 329 +f 321 336 337 +f 315 314 329 +f 322 337 338 +f 316 315 330 +f 316 331 332 +f 309 324 325 +f 317 332 333 +f 310 325 326 +f 319 318 333 +f 311 326 327 +f 319 334 335 +f 312 327 328 +f 324 339 340 +f 332 347 348 +f 325 340 341 +f 334 333 348 +f 326 341 342 +f 334 349 350 +f 328 327 342 +f 336 335 350 +f 328 343 344 +f 336 351 352 +f 330 329 344 +f 337 352 353 +f 331 330 345 +f 331 346 347 +f 343 358 359 +f 351 366 367 +f 345 344 359 +f 352 367 368 +f 346 345 360 +f 346 361 362 +f 339 354 355 +f 347 362 363 +f 341 340 355 +f 349 348 363 +f 341 356 357 +f 349 364 365 +f 343 342 357 +f 351 350 365 +f 362 377 378 +f 356 355 370 +f 364 363 378 +f 356 371 372 +f 364 379 380 +f 358 357 372 +f 366 365 380 +f 358 373 374 +f 366 381 382 +f 360 359 374 +f 367 382 383 +f 361 360 375 +f 361 376 377 +f 354 369 370 +f 381 396 397 +f 375 374 389 +f 382 397 398 +f 376 375 390 +f 376 391 392 +f 369 384 385 +f 377 392 393 +f 371 370 385 +f 379 378 393 +f 371 386 387 +f 379 394 395 +f 373 372 387 +f 381 380 395 +f 373 388 389 +f 394 393 408 +f 386 401 402 +f 394 409 410 +f 388 387 402 +f 396 395 410 +f 388 403 404 +f 397 396 411 +f 390 389 404 +f 397 412 413 +f 391 390 405 +f 391 406 407 +f 385 384 399 +f 392 407 408 +f 385 400 401 +f 412 427 428 +f 406 405 420 +f 406 421 422 +f 399 414 415 +f 407 422 423 +f 401 400 415 +f 409 408 423 +f 401 416 417 +f 409 424 425 +f 403 402 417 +f 411 410 425 +f 403 418 419 +f 411 426 427 +f 405 404 419 +f 416 431 432 +f 424 439 440 +f 418 417 432 +f 426 425 440 +f 418 433 434 +f 426 441 442 +f 420 419 434 +f 427 442 443 +f 421 420 435 +f 421 436 437 +f 414 429 430 +f 422 437 438 +f 416 415 430 +f 424 423 438 +f 436 435 450 +f 436 451 452 +f 430 429 444 +f 437 452 453 +f 430 445 446 +f 439 438 453 +f 431 446 447 +f 439 454 455 +f 433 432 447 +f 441 440 455 +f 433 448 449 +f 441 456 457 +f 435 434 449 +f 442 457 458 +f 454 469 470 +f 448 447 462 +f 456 455 470 +f 448 463 464 +f 456 471 472 +f 450 449 464 +f 458 457 472 +f 451 450 465 +f 451 466 467 +f 444 459 460 +f 452 467 468 +f 446 445 460 +f 454 453 468 +f 446 461 462 +f 466 4 5 +f 460 459 474 +f 467 5 478 +f 461 460 475 +f 468 478 6 +f 462 461 1 +f 469 6 479 +f 463 462 476 +f 471 470 479 +f 464 463 2 +f 471 480 481 +f 465 464 477 +f 472 481 482 +f 466 465 3 diff --git a/src/shader/pathtracing/camera.rs b/src/shader/pathtracing/camera.rs index 574eff5..2ecff83 100644 --- a/src/shader/pathtracing/camera.rs +++ b/src/shader/pathtracing/camera.rs @@ -3,21 +3,21 @@ use cgmath::prelude::*; use cgmath::{Rad, Vector2, Vector3}; pub struct Camera { - front: Vector3, - left: Vector3, - up: Vector3, - pos: Vector3, - fov: f32, + pub(crate) front: Vector3, + pub(crate) left: Vector3, + pub(crate) up: Vector3, + pub(crate) pos: Vector3, + pub(crate) fov: f32, } impl Camera { pub fn new() -> Self { Self { - front: Vector3::new(0.0, 0.0, 1.0), + front: Vector3::new(0.0, 0.0, -1.0), left: Vector3::new(1.0, 0.0, 0.0), - up: Vector3::new(0.0, 1.0, 0.0), - pos: Vector3::new(0.0, 0.0, -4.0), + up: Vector3::new(0.0, -1.0, 0.0), + pos: Vector3::new(0.0, 0.0, 9.0), fov: 90.0f32 } } diff --git a/src/shader/pathtracing/mod.rs b/src/shader/pathtracing/mod.rs index 1f15833..9ffea86 100644 --- a/src/shader/pathtracing/mod.rs +++ b/src/shader/pathtracing/mod.rs @@ -16,6 +16,7 @@ use vulkano::memory::allocator::{AllocationCreateInfo, MemoryUsage, StandardMemo use vulkano::padded::Padded; use vulkano::pipeline::{ComputePipeline, Pipeline, PipelineBindPoint}; use vulkano::sync::GpuFuture; +use crate::shader::pathtracing::camera::Camera; use crate::vulkan::Renderer; pub(crate) mod cs { @@ -36,8 +37,9 @@ pub struct PathtracerPipeline { raw_image: Subbuffer<[[f32; 4]]>, seconds: Instant, uniform_buffer: Arc, - vertex_buffer: Subbuffer<[[f32; 3]]>, + vertex_buffer: Subbuffer<[[f32; 4]]>, index_buffer: Subbuffer<[u32]>, + camera: Camera } impl PathtracerPipeline { @@ -79,7 +81,8 @@ impl PathtracerPipeline { uniform_buffer: Arc::new(uniform_buffer), vertex_buffer, index_buffer, - seconds: Instant::now() + seconds: Instant::now(), + camera: Camera::new() }; } @@ -118,13 +121,13 @@ impl PathtracerPipeline { builder: &mut AutoCommandBufferBuilder> ) { let camera = cs::Camera { - front: Padded::from([0f32, 0f32, 1f32]), - left: Padded::from([1f32, 0f32, 0f32]), - up: Padded::from([0f32, 1f32, 0f32]), + front: Padded::from(Into::<[f32; 3]>::into(self.camera.front)), + left: Padded::from(Into::<[f32; 3]>::into(self.camera.left)), + up: Padded::from(Into::<[f32; 3]>::into(self.camera.up)), - position: [0f32, 0f32, -12f32], + position: Into::<[f32; 3]>::into(self.camera.pos), - fov: 90f32 + fov: self.camera.fov, }; let subbuffer = self.uniform_buffer.allocate_sized().unwrap(); @@ -188,35 +191,33 @@ fn create_image(memory_allocator: &StandardMemoryAllocator, queue: &Arc, (raw_image, image) } -fn load_example_scene() -> (Vec<[f32; 3]>, Vec) { +fn load_example_scene() -> (Vec<[f32; 4]>, Vec) { let (mut models, materials) = tobj::load_obj("res/example-scene.obj", &tobj::GPU_LOAD_OPTIONS).expect("unable to load scene from obj"); - let mut vertices:Vec<[f32; 3]> = Vec::new(); - let mut indices:Vec = Vec::new(); + let mut vertices:Vec<[f32; 4]> = vec![]; + let mut indices:Vec = vec![]; for model in models.iter_mut() { - let num_triangles = model.mesh.positions.len() / 3; + let offset = vertices.len() as u32; - for triangle_index in 0..num_triangles { - let vertex_index = triangle_index * 3; + for vertex_index in (0..model.mesh.positions.len()).step_by(3) { vertices.push([ model.mesh.positions[vertex_index], model.mesh.positions[vertex_index + 1], - model.mesh.positions[vertex_index + 2] + model.mesh.positions[vertex_index + 2], + 0.0 ]); } for index in model.mesh.indices.iter() { - indices.push(*index); + indices.push(*index + offset); } - - // model.mesh.indices.iter_mut().for_each(|i| indices.push(*i)); } (vertices, indices) } -fn create_gpu_buffer(vertices: &Vec<[f32; 3]>, indices: &Vec, memory_allocator: &StandardMemoryAllocator) -> (Subbuffer<[[f32; 3]]>, Subbuffer<[u32]>) { +fn create_gpu_buffer(vertices: &Vec<[f32; 4]>, indices: &Vec, memory_allocator: &StandardMemoryAllocator) -> (Subbuffer<[[f32; 4]]>, Subbuffer<[u32]>) { let vertex_buffer = Buffer::from_iter( memory_allocator, BufferCreateInfo { diff --git a/src/shader/pathtracing/pathtracer.comp b/src/shader/pathtracing/pathtracer.comp index 617a4b6..47dafd5 100644 --- a/src/shader/pathtracing/pathtracer.comp +++ b/src/shader/pathtracing/pathtracer.comp @@ -25,6 +25,45 @@ uint get_pixel_index() { return gl_GlobalInvocationID.y * uint(program_metadata.resolution.x) + gl_GlobalInvocationID.x; } +vec3 project(in vec3 a, in vec3 b) { + return a * (dot(a, b) / dot(a, a)); +} + +void construct_orthonormal_basis(in vec3 up, out vec3 u, out vec3 v, out vec3 w) { + u = normalize(up); + + vec3 n2 = vec3(1) - u; + vec3 n3 = vec3(1) - u.zxy; + + vec3 w2 = normalize(n2 - (project(u, n2))); + vec3 w3 = normalize(n3 - project(u, n3) - project(w2, n3)); + + v = w2; + w = w3; +} + +vec3 cosine_weighted_hemisphere() { + float u1 = random(); + float u2 = random(); + + float r = sqrt(u1); + float theta = 2 * 3.1415926535 * u2; + + float x = r * cos(theta); + float y = r * sin(theta); + + return vec3(x, y, sqrt(1.0 - u1)); +} + +vec3 generate_diffuse_ray_direction(in vec3 nor) { + vec3 hemisphere = cosine_weighted_hemisphere(); + + vec3 u, v, w; + construct_orthonormal_basis(nor, u, v, w); + + return normalize(u * hemisphere.x + v * hemisphere.y + w * hemisphere.z); +} + void main() { init_random_state(floatBitsToInt(program_metadata.seconds)); @@ -34,10 +73,20 @@ void main() { vec3 color = vec3(0); - vec4 result = intersect_scene(camera_ray); + Hit result = intersect_scene(camera_ray); - if (result.a == 1.0) { - color = vec3(result.y, result.z, 0); + if (result.depth < camera_ray.far) { + Ray ao; + ao.origin = camera_ray.origin + camera_ray.direction * result.depth; + ao.direction = generate_diffuse_ray_direction(result.nor); + ao.near = 1e-3; + ao.far = 1e3; + + Hit r2 = intersect_scene(ao); + + if (r2.depth > 1.0) { + color = vec3(1); + } } // index of the current pixel as array index diff --git a/src/shader/pathtracing/raytracing/raytracing.glsl b/src/shader/pathtracing/raytracing/raytracing.glsl index 9b6fcb2..ebef48c 100644 --- a/src/shader/pathtracing/raytracing/raytracing.glsl +++ b/src/shader/pathtracing/raytracing/raytracing.glsl @@ -7,42 +7,54 @@ struct Ray { float far; }; +struct Hit { + vec3 nor; + vec2 uv; + float depth; +}; + layout(set = 0, binding = 3) buffer VertexBuffer { - vec3 vertices[]; + vec4 vertices[]; }; layout(set = 0, binding = 4) buffer IndexBuffer { uint indices[]; }; -vec3 intersect_triangle(in Ray ray, in vec3 v0, in vec3 v1, in vec3 v2) { +vec3 intersect_triangle(in Ray ray, in vec3 v0, in vec3 v1, in vec3 v2, out vec3 n) { vec3 v1v0 = v1 - v0; vec3 v2v0 = v2 - v0; vec3 rov0 = ray.origin - v0; - vec3 n = cross(v1v0, v2v0); + n = cross(v1v0, v2v0); + vec3 q = cross(rov0, ray.direction); float d = 1.0 / dot(ray.direction, n); float u = d * dot( -q, v2v0); float v = d * dot( q, v1v0); float t = d * dot( -n, rov0); - t = min(u, min(v, min(1.0 - (u + v), t))); + if(u < 0.0 || v < 0.0 || (u+v) > 1.0 || d > 0.0) + t = -1.0; - return vec3( t, u, v ); + return vec3(t, u, v); } -vec4 intersect_scene(in Ray ray) { - vec4 hit = vec4(ray.far, -1, -1, 0); +Hit intersect_scene(in Ray ray) { + Hit hit; + hit.depth = ray.far; for (int i = 0; i < indices.length(); i += 3) { - vec3 v0 = vertices[indices[i]]; - vec3 v1 = vertices[indices[i + 1]]; - vec3 v2 = vertices[indices[i + 2]]; + vec3 v0 = vertices[indices[i]].xyz; + vec3 v1 = vertices[indices[i + 1]].xyz; + vec3 v2 = vertices[indices[i + 2]].xyz; - vec3 result = intersect_triangle(ray, v0, v1, v2); + vec3 n; + vec3 result = intersect_triangle(ray, v0, v1, v2, n); - if (result.x > ray.near && result.x < hit.x) { - hit = vec4(result, 1); + if (result.x > ray.near && result.x < hit.depth) { + hit.uv = result.yz; + hit.depth = result.x; + hit.nor = n; } } diff --git a/src/vulkan/mod.rs b/src/vulkan/mod.rs index 0058828..d5fce03 100644 --- a/src/vulkan/mod.rs +++ b/src/vulkan/mod.rs @@ -2,6 +2,7 @@ mod device; pub(crate) mod textured_quad; use std::sync::Arc; +use std::time::Instant; use vulkano::device::{Device}; use vulkano::image::{ImageAccess, ImageUsage, SwapchainImage}; use vulkano::instance::{Instance, InstanceCreateInfo}; @@ -17,7 +18,7 @@ use vulkano::image::view::ImageView; use vulkano::pipeline::graphics::viewport::Viewport; use vulkano::render_pass::{Framebuffer, FramebufferCreateInfo, RenderPass}; use vulkano::sync::{FlushError, GpuFuture}; -use winit::event::{Event, WindowEvent}; +use winit::event::{Event, VirtualKeyCode, WindowEvent}; use crate::shader::composite::TextureDrawPipeline; use crate::shader::pathtracing::PathtracerPipeline; @@ -133,6 +134,8 @@ pub fn init() { let mut now_keys = [false; 255]; + let mut start_frame = Instant::now(); + event_loop.run(move |event, _, control_flow| { match event { Event::WindowEvent { @@ -172,6 +175,8 @@ pub fn init() { } }, Event::RedrawEventsCleared => { + let elapsed = (Instant::now() - start_frame).as_secs_f32(); + // Do not draw the frame when the screen dimensions are zero. On Windows, this can // occur when minimizing the application. let window = surface.object().unwrap().downcast_ref::().unwrap(); @@ -280,6 +285,8 @@ pub fn init() { // previous_frame_end = Some(sync::now(device.clone()).boxed()); } } + + start_frame = Instant::now(); } _ => (), }