basilisk-engine 0.1.42__py3-none-any.whl → 0.1.43__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of basilisk-engine might be problematic. Click here for more details.

Files changed (98) hide show
  1. basilisk/__init__.py +26 -26
  2. basilisk/audio/sound.py +27 -27
  3. basilisk/bsk_assets/cube.obj +48 -48
  4. basilisk/collisions/broad/broad_aabb.py +102 -102
  5. basilisk/collisions/broad/broad_bvh.py +137 -137
  6. basilisk/collisions/collider.py +95 -95
  7. basilisk/collisions/collider_handler.py +225 -225
  8. basilisk/collisions/narrow/contact_manifold.py +95 -95
  9. basilisk/collisions/narrow/dataclasses.py +34 -34
  10. basilisk/collisions/narrow/deprecated.py +46 -46
  11. basilisk/collisions/narrow/epa.py +91 -91
  12. basilisk/collisions/narrow/gjk.py +66 -66
  13. basilisk/collisions/narrow/graham_scan.py +24 -24
  14. basilisk/collisions/narrow/helper.py +29 -29
  15. basilisk/collisions/narrow/line_intersections.py +106 -106
  16. basilisk/collisions/narrow/sutherland_hodgman.py +75 -75
  17. basilisk/config.py +53 -53
  18. basilisk/draw/draw.py +100 -100
  19. basilisk/draw/draw_handler.py +178 -178
  20. basilisk/draw/font_renderer.py +28 -28
  21. basilisk/engine.py +169 -171
  22. basilisk/generic/abstract_bvh.py +15 -15
  23. basilisk/generic/abstract_custom.py +133 -133
  24. basilisk/generic/collisions.py +70 -70
  25. basilisk/generic/input_validation.py +82 -82
  26. basilisk/generic/math.py +17 -17
  27. basilisk/generic/matrices.py +35 -35
  28. basilisk/generic/meshes.py +72 -72
  29. basilisk/generic/quat.py +142 -142
  30. basilisk/generic/quat_methods.py +7 -7
  31. basilisk/generic/raycast_result.py +26 -26
  32. basilisk/generic/vec3.py +143 -143
  33. basilisk/input_output/IO_handler.py +91 -91
  34. basilisk/input_output/clock.py +49 -49
  35. basilisk/input_output/keys.py +43 -43
  36. basilisk/input_output/mouse.py +90 -90
  37. basilisk/input_output/path.py +14 -14
  38. basilisk/mesh/cube.py +33 -33
  39. basilisk/mesh/mesh.py +233 -233
  40. basilisk/mesh/mesh_from_data.py +150 -150
  41. basilisk/mesh/model.py +271 -271
  42. basilisk/mesh/narrow_aabb.py +89 -89
  43. basilisk/mesh/narrow_bvh.py +91 -91
  44. basilisk/mesh/narrow_primative.py +23 -23
  45. basilisk/nodes/helper.py +28 -28
  46. basilisk/nodes/node.py +709 -709
  47. basilisk/nodes/node_handler.py +97 -97
  48. basilisk/particles/particle_handler.py +64 -64
  49. basilisk/particles/particle_renderer.py +93 -93
  50. basilisk/physics/impulse.py +112 -112
  51. basilisk/physics/physics_body.py +43 -43
  52. basilisk/physics/physics_engine.py +35 -35
  53. basilisk/render/batch.py +103 -103
  54. basilisk/render/bloom.py +118 -124
  55. basilisk/render/camera.py +260 -260
  56. basilisk/render/chunk.py +113 -108
  57. basilisk/render/chunk_handler.py +167 -167
  58. basilisk/render/frame.py +130 -128
  59. basilisk/render/framebuffer.py +192 -212
  60. basilisk/render/image.py +120 -120
  61. basilisk/render/image_handler.py +120 -120
  62. basilisk/render/light.py +96 -96
  63. basilisk/render/light_handler.py +58 -58
  64. basilisk/render/material.py +232 -232
  65. basilisk/render/material_handler.py +133 -133
  66. basilisk/render/post_process.py +180 -180
  67. basilisk/render/shader.py +135 -134
  68. basilisk/render/shader_handler.py +109 -94
  69. basilisk/render/sky.py +119 -121
  70. basilisk/scene.py +287 -288
  71. basilisk/shaders/batch.frag +293 -293
  72. basilisk/shaders/batch.vert +117 -117
  73. basilisk/shaders/bloom_downsample.frag +23 -42
  74. basilisk/shaders/bloom_upsample.frag +33 -33
  75. basilisk/shaders/crt.frag +34 -34
  76. basilisk/shaders/draw.frag +27 -27
  77. basilisk/shaders/draw.vert +25 -25
  78. basilisk/shaders/filter.frag +22 -22
  79. basilisk/shaders/frame.frag +13 -13
  80. basilisk/shaders/frame.vert +13 -13
  81. basilisk/shaders/frame_hdr.frag +27 -27
  82. basilisk/shaders/geometry.frag +10 -10
  83. basilisk/shaders/geometry.vert +41 -41
  84. basilisk/shaders/normal.frag +62 -62
  85. basilisk/shaders/normal.vert +96 -96
  86. basilisk/shaders/particle.frag +81 -81
  87. basilisk/shaders/particle.vert +86 -86
  88. basilisk/shaders/sky.frag +23 -23
  89. basilisk/shaders/sky.vert +13 -13
  90. {basilisk_engine-0.1.42.dist-info → basilisk_engine-0.1.43.dist-info}/METADATA +89 -89
  91. basilisk_engine-0.1.43.dist-info/RECORD +111 -0
  92. {basilisk_engine-0.1.42.dist-info → basilisk_engine-0.1.43.dist-info}/WHEEL +1 -1
  93. basilisk/input/__init__.py +0 -0
  94. basilisk/input/mouse.py +0 -62
  95. basilisk/input/path.py +0 -14
  96. basilisk/shaders/bloom_frame.frag +0 -25
  97. basilisk_engine-0.1.42.dist-info/RECORD +0 -115
  98. {basilisk_engine-0.1.42.dist-info → basilisk_engine-0.1.43.dist-info}/top_level.txt +0 -0
@@ -1,28 +1,28 @@
1
- #version 330 core
2
-
3
- layout (location = 0) out vec4 fragColor;
4
-
5
- in vec2 uv;
6
-
7
- uniform sampler2D screenTexture;
8
- uniform sampler2D bloomTexture;
9
-
10
-
11
-
12
- void main()
13
- {
14
- const float gamma = 2.2;
15
- const float exposure = 1.2;
16
-
17
- // Sammple from textures
18
- vec4 color = texture(screenTexture, uv);
19
- vec4 bloom = texture(bloomTexture, uv);
20
-
21
- vec3 hdrColor = color.rgb + bloom.rgb / 2;
22
- // exposure tone mapping
23
- vec3 mapped = vec3(1.0) - exp(-hdrColor * exposure);
24
- // gamma correction
25
- mapped = pow(mapped, vec3(1.0 / gamma));
26
-
27
- fragColor = vec4(mapped, color.a);
1
+ #version 330 core
2
+
3
+ layout (location = 0) out vec4 fragColor;
4
+
5
+ in vec2 uv;
6
+
7
+ uniform sampler2D screenTexture;
8
+ uniform sampler2D bloomTexture;
9
+
10
+
11
+
12
+ void main()
13
+ {
14
+ const float gamma = 2.2;
15
+ const float exposure = 1.2;
16
+
17
+ // Sammple from textures
18
+ vec4 color = texture(screenTexture, uv);
19
+ vec4 bloom = texture(bloomTexture, uv);
20
+
21
+ vec3 hdrColor = color.rgb + bloom.rgb / 2;
22
+ // exposure tone mapping
23
+ vec3 mapped = vec3(1.0) - exp(-hdrColor * exposure);
24
+ // gamma correction
25
+ mapped = pow(mapped, vec3(1.0 / gamma));
26
+
27
+ fragColor = vec4(mapped, color.a);
28
28
  }
@@ -1,11 +1,11 @@
1
- #version 330 core
2
-
3
- layout (location = 0) out vec4 fragColor;
4
- layout (location = 1) out vec4 bloomColor;
5
-
6
-
7
- void main() {
8
- // Output fragment color
9
- fragColor = vec4(1.0, 1.0, 1.0, 1.0);
10
- bloomColor = vec4(0.0);
1
+ #version 330 core
2
+
3
+ layout (location = 0) out vec4 fragColor;
4
+ layout (location = 1) out vec4 bloomColor;
5
+
6
+
7
+ void main() {
8
+ // Output fragment color
9
+ fragColor = vec4(1.0, 1.0, 1.0, 1.0);
10
+ bloomColor = vec4(0.0);
11
11
  }
@@ -1,42 +1,42 @@
1
- #version 330 core
2
-
3
- layout (location = 0) in vec3 in_position;
4
-
5
- layout (location = 5) in vec3 obj_position;
6
- layout (location = 6) in vec4 obj_rotation;
7
- layout (location = 7) in vec3 obj_scale;
8
-
9
- // Uniforms
10
- uniform mat4 projectionMatrix;
11
- uniform mat4 viewMatrix;
12
-
13
- // Function to get the model matrix from node position, rotation, and scale
14
- mat4 getModelMatrix(vec3 pos, vec4 rot, vec3 scl) {
15
- mat4 translation = mat4(
16
- 1 , 0 , 0 , 0,
17
- 0 , 1 , 0 , 0,
18
- 0 , 0 , 1 , 0,
19
- pos.x, pos.y, pos.z, 1
20
- );
21
- mat4 rotation = mat4(
22
- 1 - 2 * (rot.z * rot.z + rot.w * rot.w), 2 * (rot.y * rot.z - rot.w * rot.x), 2 * (rot.y * rot.w + rot.z * rot.x), 0,
23
- 2 * (rot.y * rot.z + rot.w * rot.x), 1 - 2 * (rot.y * rot.y + rot.w * rot.w), 2 * (rot.z * rot.w - rot.y * rot.x), 0,
24
- 2 * (rot.y * rot.w - rot.z * rot.x), 2 * (rot.z * rot.w + rot.y * rot.x), 1 - 2 * (rot.y * rot.y + rot.z * rot.z), 0,
25
- 0, 0, 0, 1
26
- );
27
- mat4 scale = mat4(
28
- scl.x, 0 , 0 , 0,
29
- 0 , scl.y, 0 , 0,
30
- 0 , 0 , scl.z, 0,
31
- 0 , 0 , 0 , 1
32
- );
33
- return translation * rotation * scale;
34
- }
35
-
36
-
37
- void main() {
38
- // Set the model matrix
39
- mat4 modelMatrix = getModelMatrix(obj_position, obj_rotation, obj_scale);
40
- // Set the fragment position
41
- gl_Position = projectionMatrix * viewMatrix * modelMatrix * vec4(in_position, 1.0);
1
+ #version 330 core
2
+
3
+ layout (location = 0) in vec3 in_position;
4
+
5
+ layout (location = 5) in vec3 obj_position;
6
+ layout (location = 6) in vec4 obj_rotation;
7
+ layout (location = 7) in vec3 obj_scale;
8
+
9
+ // Uniforms
10
+ uniform mat4 projectionMatrix;
11
+ uniform mat4 viewMatrix;
12
+
13
+ // Function to get the model matrix from node position, rotation, and scale
14
+ mat4 getModelMatrix(vec3 pos, vec4 rot, vec3 scl) {
15
+ mat4 translation = mat4(
16
+ 1 , 0 , 0 , 0,
17
+ 0 , 1 , 0 , 0,
18
+ 0 , 0 , 1 , 0,
19
+ pos.x, pos.y, pos.z, 1
20
+ );
21
+ mat4 rotation = mat4(
22
+ 1 - 2 * (rot.z * rot.z + rot.w * rot.w), 2 * (rot.y * rot.z - rot.w * rot.x), 2 * (rot.y * rot.w + rot.z * rot.x), 0,
23
+ 2 * (rot.y * rot.z + rot.w * rot.x), 1 - 2 * (rot.y * rot.y + rot.w * rot.w), 2 * (rot.z * rot.w - rot.y * rot.x), 0,
24
+ 2 * (rot.y * rot.w - rot.z * rot.x), 2 * (rot.z * rot.w + rot.y * rot.x), 1 - 2 * (rot.y * rot.y + rot.z * rot.z), 0,
25
+ 0, 0, 0, 1
26
+ );
27
+ mat4 scale = mat4(
28
+ scl.x, 0 , 0 , 0,
29
+ 0 , scl.y, 0 , 0,
30
+ 0 , 0 , scl.z, 0,
31
+ 0 , 0 , 0 , 1
32
+ );
33
+ return translation * rotation * scale;
34
+ }
35
+
36
+
37
+ void main() {
38
+ // Set the model matrix
39
+ mat4 modelMatrix = getModelMatrix(obj_position, obj_rotation, obj_scale);
40
+ // Set the fragment position
41
+ gl_Position = projectionMatrix * viewMatrix * modelMatrix * vec4(in_position, 1.0);
42
42
  }
@@ -1,63 +1,63 @@
1
- #version 330 core
2
-
3
- layout (location = 0) out vec4 fragColor;
4
- layout (location = 1) out vec4 bloomColor;
5
-
6
- // Structs needed for the shader
7
- struct textArray {
8
- sampler2DArray array;
9
- };
10
-
11
- struct Material {
12
- vec3 color;
13
- float roughness;
14
- float subsurface;
15
- float sheen;
16
- float sheenTint;
17
- float anisotropic;
18
- float specular;
19
- float metallicness;
20
- float specularTint;
21
- float clearcoat;
22
- float clearcoatGloss;
23
-
24
- int hasAlbedoMap;
25
- vec2 albedoMap;
26
- int hasNormalMap;
27
- vec2 normalMap;
28
- int hasRoughnessMap;
29
- vec2 roughnessMap;
30
- int hasAoMap;
31
- vec2 aoMap;
32
- };
33
- in vec2 uv;
34
- in mat3 TBN;
35
-
36
- // Material attributes
37
- flat in Material mtl;
38
-
39
- // Uniforms
40
- uniform textArray textureArrays[5];
41
-
42
-
43
- vec3 getNormal(Material mtl, mat3 TBN){
44
- // Isolate the normal vector from the TBN basis
45
- vec3 normal = TBN[2];
46
- // Apply normal map if the material has one
47
- if (bool(mtl.hasNormalMap)) {
48
- normal = texture(textureArrays[int(round(mtl.normalMap.x))].array, vec3(uv, round(mtl.normalMap.y))).rgb * 2.0 - 1.0;
49
- normal = normalize(TBN * normal);
50
- }
51
- // Return vector
52
- return normal;
53
- }
54
-
55
- void main() {
56
- // Get lighting vectors
57
- vec3 normal = getNormal(mtl, TBN);
58
-
59
- // Output fragment color
60
- fragColor = vec4(normal, 1.0);
61
-
62
- bloomColor = vec4(0.0);
1
+ #version 330 core
2
+
3
+ layout (location = 0) out vec4 fragColor;
4
+ layout (location = 1) out vec4 bloomColor;
5
+
6
+ // Structs needed for the shader
7
+ struct textArray {
8
+ sampler2DArray array;
9
+ };
10
+
11
+ struct Material {
12
+ vec3 color;
13
+ float roughness;
14
+ float subsurface;
15
+ float sheen;
16
+ float sheenTint;
17
+ float anisotropic;
18
+ float specular;
19
+ float metallicness;
20
+ float specularTint;
21
+ float clearcoat;
22
+ float clearcoatGloss;
23
+
24
+ int hasAlbedoMap;
25
+ vec2 albedoMap;
26
+ int hasNormalMap;
27
+ vec2 normalMap;
28
+ int hasRoughnessMap;
29
+ vec2 roughnessMap;
30
+ int hasAoMap;
31
+ vec2 aoMap;
32
+ };
33
+ in vec2 uv;
34
+ in mat3 TBN;
35
+
36
+ // Material attributes
37
+ flat in Material mtl;
38
+
39
+ // Uniforms
40
+ uniform textArray textureArrays[5];
41
+
42
+
43
+ vec3 getNormal(Material mtl, mat3 TBN){
44
+ // Isolate the normal vector from the TBN basis
45
+ vec3 normal = TBN[2];
46
+ // Apply normal map if the material has one
47
+ if (bool(mtl.hasNormalMap)) {
48
+ normal = texture(textureArrays[int(round(mtl.normalMap.x))].array, vec3(uv, round(mtl.normalMap.y))).rgb * 2.0 - 1.0;
49
+ normal = normalize(TBN * normal);
50
+ }
51
+ // Return vector
52
+ return normal;
53
+ }
54
+
55
+ void main() {
56
+ // Get lighting vectors
57
+ vec3 normal = getNormal(mtl, TBN);
58
+
59
+ // Output fragment color
60
+ fragColor = vec4(normal, 1.0);
61
+
62
+ bloomColor = vec4(0.0);
63
63
  }
@@ -1,97 +1,97 @@
1
- #version 330 core
2
-
3
- layout (location = 0) in vec3 in_position;
4
- layout (location = 1) in vec2 in_uv;
5
- layout (location = 2) in vec3 in_normal;
6
- layout (location = 3) in vec3 in_tangent;
7
- layout (location = 4) in vec3 in_bitangent;
8
-
9
- layout (location = 5) in vec3 obj_position;
10
- layout (location = 6) in vec4 obj_rotation;
11
- layout (location = 7) in vec3 obj_scale;
12
- layout (location = 8) in float obj_material;
13
-
14
- // Variables passed on to the fragment shader
15
- out vec2 uv;
16
- out mat3 TBN;
17
-
18
- // Material struct sent to fragment shader
19
- struct Material {
20
- vec3 color;
21
- float roughness;
22
- float subsurface;
23
- float sheen;
24
- float sheenTint;
25
- float anisotropic;
26
- float specular;
27
- float metallicness;
28
- float specularTint;
29
- float clearcoat;
30
- float clearcoatGloss;
31
-
32
- int hasAlbedoMap;
33
- vec2 albedoMap;
34
- int hasNormalMap;
35
- vec2 normalMap;
36
- int hasRoughnessMap;
37
- vec2 roughnessMap;
38
- int hasAoMap;
39
- vec2 aoMap;
40
- };
41
- flat out Material mtl;
42
-
43
- // Uniforms
44
- uniform mat4 projectionMatrix;
45
- uniform mat4 viewMatrix;
46
- uniform sampler2D materialsTexture;
47
-
48
- // Function to get the model matrix from node position, rotation, and scale
49
- mat4 getModelMatrix(vec3 pos, vec4 rot, vec3 scl) {
50
- mat4 translation = mat4(
51
- 1 , 0 , 0 , 0,
52
- 0 , 1 , 0 , 0,
53
- 0 , 0 , 1 , 0,
54
- pos.x, pos.y, pos.z, 1
55
- );
56
- mat4 rotation = mat4(
57
- 1 - 2 * (rot.z * rot.z + rot.w * rot.w), 2 * (rot.y * rot.z - rot.w * rot.x), 2 * (rot.y * rot.w + rot.z * rot.x), 0,
58
- 2 * (rot.y * rot.z + rot.w * rot.x), 1 - 2 * (rot.y * rot.y + rot.w * rot.w), 2 * (rot.z * rot.w - rot.y * rot.x), 0,
59
- 2 * (rot.y * rot.w - rot.z * rot.x), 2 * (rot.z * rot.w + rot.y * rot.x), 1 - 2 * (rot.y * rot.y + rot.z * rot.z), 0,
60
- 0, 0, 0, 1
61
- );
62
- mat4 scale = mat4(
63
- scl.x, 0 , 0 , 0,
64
- 0 , scl.y, 0 , 0,
65
- 0 , 0 , scl.z, 0,
66
- 0 , 0 , 0 , 1
67
- );
68
- return translation * rotation * scale;
69
- }
70
-
71
- // Function to get the TBN matrix for normal mapping
72
- mat3 getTBN(mat4 modelMatrix, vec3 normal, vec3 tangent, vec3 bitangent){
73
- vec3 T = normalize(vec3(modelMatrix * vec4(tangent, 0.0)));
74
- vec3 B = normalize(vec3(modelMatrix * vec4(bitangent, 0.0)));
75
- vec3 N = normalize(vec3(modelMatrix * vec4(normal, 0.0)));
76
- return mat3(T, B, N);
77
- }
78
-
79
- void main() {
80
- // Set the model matrix
81
- mat4 modelMatrix = getModelMatrix(obj_position, obj_rotation, obj_scale);
82
-
83
- // Set out variables
84
- TBN = getTBN(modelMatrix, in_normal, in_tangent, in_bitangent);
85
- uv = in_uv;
86
-
87
- // Get the material
88
- int mtl_size = 25;
89
- mtl = Material(vec3(0), 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, vec2(0), 0, vec2(0), 0, vec2(0), 0, vec2(0));
90
- int materialID = int(obj_material);
91
-
92
- mtl.hasNormalMap = int(texelFetch(materialsTexture, ivec2(0, 16 + materialID * mtl_size), 0).r);
93
- mtl.normalMap = vec2(texelFetch(materialsTexture, ivec2(0, 17 + materialID * mtl_size), 0).r, texelFetch(materialsTexture, ivec2(0, 18 + materialID * mtl_size), 0).r);
94
-
95
- // Set the fragment position
96
- gl_Position = projectionMatrix * viewMatrix * modelMatrix * vec4(in_position, 1.0);
1
+ #version 330 core
2
+
3
+ layout (location = 0) in vec3 in_position;
4
+ layout (location = 1) in vec2 in_uv;
5
+ layout (location = 2) in vec3 in_normal;
6
+ layout (location = 3) in vec3 in_tangent;
7
+ layout (location = 4) in vec3 in_bitangent;
8
+
9
+ layout (location = 5) in vec3 obj_position;
10
+ layout (location = 6) in vec4 obj_rotation;
11
+ layout (location = 7) in vec3 obj_scale;
12
+ layout (location = 8) in float obj_material;
13
+
14
+ // Variables passed on to the fragment shader
15
+ out vec2 uv;
16
+ out mat3 TBN;
17
+
18
+ // Material struct sent to fragment shader
19
+ struct Material {
20
+ vec3 color;
21
+ float roughness;
22
+ float subsurface;
23
+ float sheen;
24
+ float sheenTint;
25
+ float anisotropic;
26
+ float specular;
27
+ float metallicness;
28
+ float specularTint;
29
+ float clearcoat;
30
+ float clearcoatGloss;
31
+
32
+ int hasAlbedoMap;
33
+ vec2 albedoMap;
34
+ int hasNormalMap;
35
+ vec2 normalMap;
36
+ int hasRoughnessMap;
37
+ vec2 roughnessMap;
38
+ int hasAoMap;
39
+ vec2 aoMap;
40
+ };
41
+ flat out Material mtl;
42
+
43
+ // Uniforms
44
+ uniform mat4 projectionMatrix;
45
+ uniform mat4 viewMatrix;
46
+ uniform sampler2D materialsTexture;
47
+
48
+ // Function to get the model matrix from node position, rotation, and scale
49
+ mat4 getModelMatrix(vec3 pos, vec4 rot, vec3 scl) {
50
+ mat4 translation = mat4(
51
+ 1 , 0 , 0 , 0,
52
+ 0 , 1 , 0 , 0,
53
+ 0 , 0 , 1 , 0,
54
+ pos.x, pos.y, pos.z, 1
55
+ );
56
+ mat4 rotation = mat4(
57
+ 1 - 2 * (rot.z * rot.z + rot.w * rot.w), 2 * (rot.y * rot.z - rot.w * rot.x), 2 * (rot.y * rot.w + rot.z * rot.x), 0,
58
+ 2 * (rot.y * rot.z + rot.w * rot.x), 1 - 2 * (rot.y * rot.y + rot.w * rot.w), 2 * (rot.z * rot.w - rot.y * rot.x), 0,
59
+ 2 * (rot.y * rot.w - rot.z * rot.x), 2 * (rot.z * rot.w + rot.y * rot.x), 1 - 2 * (rot.y * rot.y + rot.z * rot.z), 0,
60
+ 0, 0, 0, 1
61
+ );
62
+ mat4 scale = mat4(
63
+ scl.x, 0 , 0 , 0,
64
+ 0 , scl.y, 0 , 0,
65
+ 0 , 0 , scl.z, 0,
66
+ 0 , 0 , 0 , 1
67
+ );
68
+ return translation * rotation * scale;
69
+ }
70
+
71
+ // Function to get the TBN matrix for normal mapping
72
+ mat3 getTBN(mat4 modelMatrix, vec3 normal, vec3 tangent, vec3 bitangent){
73
+ vec3 T = normalize(vec3(modelMatrix * vec4(tangent, 0.0)));
74
+ vec3 B = normalize(vec3(modelMatrix * vec4(bitangent, 0.0)));
75
+ vec3 N = normalize(vec3(modelMatrix * vec4(normal, 0.0)));
76
+ return mat3(T, B, N);
77
+ }
78
+
79
+ void main() {
80
+ // Set the model matrix
81
+ mat4 modelMatrix = getModelMatrix(obj_position, obj_rotation, obj_scale);
82
+
83
+ // Set out variables
84
+ TBN = getTBN(modelMatrix, in_normal, in_tangent, in_bitangent);
85
+ uv = in_uv;
86
+
87
+ // Get the material
88
+ int mtl_size = 25;
89
+ mtl = Material(vec3(0), 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, vec2(0), 0, vec2(0), 0, vec2(0), 0, vec2(0));
90
+ int materialID = int(obj_material);
91
+
92
+ mtl.hasNormalMap = int(texelFetch(materialsTexture, ivec2(0, 16 + materialID * mtl_size), 0).r);
93
+ mtl.normalMap = vec2(texelFetch(materialsTexture, ivec2(0, 17 + materialID * mtl_size), 0).r, texelFetch(materialsTexture, ivec2(0, 18 + materialID * mtl_size), 0).r);
94
+
95
+ // Set the fragment position
96
+ gl_Position = projectionMatrix * viewMatrix * modelMatrix * vec4(in_position, 1.0);
97
97
  }
@@ -1,82 +1,82 @@
1
- #version 330 core
2
-
3
- layout (location = 0) out vec4 fragColor;
4
- layout (location = 1) out vec4 bloomColor;
5
- layout (location = 2) out vec4 normalTexture;
6
-
7
-
8
- in vec2 uv;
9
- in vec3 position;
10
- in mat3 TBN;
11
-
12
- struct textArray {
13
- sampler2DArray array;
14
- };
15
- uniform textArray textureArrays[5];
16
-
17
- struct Material {
18
- vec3 color;
19
- vec3 emissiveColor;
20
- float roughness;
21
- float subsurface;
22
- float sheen;
23
- float sheenTint;
24
- float anisotropic;
25
- float specular;
26
- float metallicness;
27
- float specularTint;
28
- float clearcoat;
29
- float clearcoatGloss;
30
-
31
- int hasAlbedoMap;
32
- vec2 albedoMap;
33
- int hasNormalMap;
34
- vec2 normalMap;
35
- int hasRoughnessMap;
36
- vec2 roughnessMap;
37
- int hasAoMap;
38
- vec2 aoMap;
39
- };
40
- flat in Material mtl;
41
-
42
-
43
- vec3 getColor(Material mtl, vec2 uv, float gamma) {
44
- vec3 albedo = mtl.color;
45
- if (bool(mtl.hasAlbedoMap)){
46
- albedo *= pow(texture(textureArrays[int(round(mtl.albedoMap.x))].array, vec3(uv, round(mtl.albedoMap.y))).rgb, vec3(gamma));
47
- }
48
- return albedo;
49
- }
50
-
51
- vec3 getNormal(Material mtl, mat3 TBN){
52
- // Isolate the normal vector from the TBN basis
53
- vec3 normal = TBN[2];
54
- // Apply normal map if the material has one
55
- if (bool(mtl.hasNormalMap)) {
56
- normal = texture(textureArrays[int(round(mtl.normalMap.x))].array, vec3(uv, round(mtl.normalMap.y))).rgb * 2.0 - 1.0;
57
- normal = normalize(TBN * normal);
58
- }
59
- // Return vector
60
- return normal;
61
- }
62
-
63
- void main()
64
- {
65
- // Texture and normal data
66
- float gamma = 2.2;
67
- vec3 color = getColor(mtl, uv, gamma);
68
- vec3 normal = getNormal(mtl, TBN);
69
-
70
- // Simple light calculations
71
- vec3 light = normalize(vec3(1.5, 2, 1));
72
- float diff = abs(dot(normal, light));
73
-
74
- // Get color and gamma correction
75
- fragColor = vec4(color * (.2 + diff), 1.0);
76
- fragColor.rgb = pow(fragColor.rgb, vec3(1.0/gamma));
77
-
78
- normalTexture = vec4(abs(normal), 1.0);
79
-
80
- bloomColor = vec4(mtl.emissiveColor, 1.0);
81
-
1
+ #version 330 core
2
+
3
+ layout (location = 0) out vec4 fragColor;
4
+ layout (location = 1) out vec4 bloomColor;
5
+ layout (location = 2) out vec4 normalTexture;
6
+
7
+
8
+ in vec2 uv;
9
+ in vec3 position;
10
+ in mat3 TBN;
11
+
12
+ struct textArray {
13
+ sampler2DArray array;
14
+ };
15
+ uniform textArray textureArrays[5];
16
+
17
+ struct Material {
18
+ vec3 color;
19
+ vec3 emissiveColor;
20
+ float roughness;
21
+ float subsurface;
22
+ float sheen;
23
+ float sheenTint;
24
+ float anisotropic;
25
+ float specular;
26
+ float metallicness;
27
+ float specularTint;
28
+ float clearcoat;
29
+ float clearcoatGloss;
30
+
31
+ int hasAlbedoMap;
32
+ vec2 albedoMap;
33
+ int hasNormalMap;
34
+ vec2 normalMap;
35
+ int hasRoughnessMap;
36
+ vec2 roughnessMap;
37
+ int hasAoMap;
38
+ vec2 aoMap;
39
+ };
40
+ flat in Material mtl;
41
+
42
+
43
+ vec3 getColor(Material mtl, vec2 uv, float gamma) {
44
+ vec3 albedo = mtl.color;
45
+ if (bool(mtl.hasAlbedoMap)){
46
+ albedo *= pow(texture(textureArrays[int(round(mtl.albedoMap.x))].array, vec3(uv, round(mtl.albedoMap.y))).rgb, vec3(gamma));
47
+ }
48
+ return albedo;
49
+ }
50
+
51
+ vec3 getNormal(Material mtl, mat3 TBN){
52
+ // Isolate the normal vector from the TBN basis
53
+ vec3 normal = TBN[2];
54
+ // Apply normal map if the material has one
55
+ if (bool(mtl.hasNormalMap)) {
56
+ normal = texture(textureArrays[int(round(mtl.normalMap.x))].array, vec3(uv, round(mtl.normalMap.y))).rgb * 2.0 - 1.0;
57
+ normal = normalize(TBN * normal);
58
+ }
59
+ // Return vector
60
+ return normal;
61
+ }
62
+
63
+ void main()
64
+ {
65
+ // Texture and normal data
66
+ float gamma = 2.2;
67
+ vec3 color = getColor(mtl, uv, gamma);
68
+ vec3 normal = getNormal(mtl, TBN);
69
+
70
+ // Simple light calculations
71
+ vec3 light = normalize(vec3(1.5, 2, 1));
72
+ float diff = abs(dot(normal, light));
73
+
74
+ // Get color and gamma correction
75
+ fragColor = vec4(color * (.2 + diff), 1.0);
76
+ fragColor.rgb = pow(fragColor.rgb, vec3(1.0/gamma));
77
+
78
+ normalTexture = vec4(abs(normal), 1.0);
79
+
80
+ bloomColor = vec4(mtl.emissiveColor, 1.0);
81
+
82
82
  }