mittsu 0.1.0

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.
Files changed (203) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +10 -0
  3. data/.travis.yml +3 -0
  4. data/CODE_OF_CONDUCT.md +13 -0
  5. data/Gemfile +4 -0
  6. data/LICENSE.txt +21 -0
  7. data/README.md +39 -0
  8. data/Rakefile +7 -0
  9. data/bin/console +14 -0
  10. data/bin/setup +7 -0
  11. data/examples/01_-_Default1noCulling.png +0 -0
  12. data/examples/01_scene_example.rb +14 -0
  13. data/examples/02_box_mesh_example.rb +30 -0
  14. data/examples/02_sphere_mesh_example.rb +30 -0
  15. data/examples/03_complex_object_example.rb +52 -0
  16. data/examples/04_ambient_light_example.rb +33 -0
  17. data/examples/04_dir_light_example.rb +36 -0
  18. data/examples/04_hemi_light_example.rb +30 -0
  19. data/examples/04_point_light_example.rb +50 -0
  20. data/examples/04_spot_light_example.rb +44 -0
  21. data/examples/05_earth_example.rb +42 -0
  22. data/examples/05_earth_moon_example.rb +46 -0
  23. data/examples/05_texture_example.rb +32 -0
  24. data/examples/06_cube_texture_example.rb +36 -0
  25. data/examples/06_skybox_example.rb +60 -0
  26. data/examples/07_earth_normal_example.rb +36 -0
  27. data/examples/08_shadow_example.rb +87 -0
  28. data/examples/09_line_example.rb +52 -0
  29. data/examples/10_obj_loader_example.rb +68 -0
  30. data/examples/11_character_input_example.rb +18 -0
  31. data/examples/11_continuous_keyboard_input_example.rb +35 -0
  32. data/examples/11_keyboard_input_example.rb +43 -0
  33. data/examples/12_mouse_click_example.rb +38 -0
  34. data/examples/12_mouse_motion_example.rb +35 -0
  35. data/examples/12_mouse_scroll_example.rb +36 -0
  36. data/examples/12_orbit_zoom_example.rb +68 -0
  37. data/examples/13_joystick_example.rb +80 -0
  38. data/examples/cubemap/tron_bk.png +0 -0
  39. data/examples/cubemap/tron_dn.png +0 -0
  40. data/examples/cubemap/tron_ft.png +0 -0
  41. data/examples/cubemap/tron_lf.png +0 -0
  42. data/examples/cubemap/tron_rt.png +0 -0
  43. data/examples/cubemap/tron_up.png +0 -0
  44. data/examples/earth.png +0 -0
  45. data/examples/earth_normal.png +0 -0
  46. data/examples/example_helper.rb +2 -0
  47. data/examples/male-02-1noCulling.png +0 -0
  48. data/examples/male02.mtl +54 -0
  49. data/examples/male02.obj +13888 -0
  50. data/examples/moon.png +0 -0
  51. data/examples/orig_02_-_Defaul1noCulling.png +0 -0
  52. data/examples/texture.png +0 -0
  53. data/lib/mittsu.rb +15 -0
  54. data/lib/mittsu/cameras.rb +4 -0
  55. data/lib/mittsu/cameras/camera.rb +34 -0
  56. data/lib/mittsu/cameras/cube_camera.rb +74 -0
  57. data/lib/mittsu/cameras/orthographic_camera.rb +53 -0
  58. data/lib/mittsu/cameras/perspective_camera.rb +115 -0
  59. data/lib/mittsu/constants.rb +160 -0
  60. data/lib/mittsu/core.rb +10 -0
  61. data/lib/mittsu/core/buffer_attribute.rb +87 -0
  62. data/lib/mittsu/core/buffer_geometry.rb +694 -0
  63. data/lib/mittsu/core/clock.rb +44 -0
  64. data/lib/mittsu/core/dynamic_buffer_attribute.rb +16 -0
  65. data/lib/mittsu/core/event_dispatcher.rb +39 -0
  66. data/lib/mittsu/core/face3.rb +30 -0
  67. data/lib/mittsu/core/geometry.rb +596 -0
  68. data/lib/mittsu/core/hash_array.rb +36 -0
  69. data/lib/mittsu/core/hash_object.rb +19 -0
  70. data/lib/mittsu/core/object_3d.rb +421 -0
  71. data/lib/mittsu/core/raycaster.rb +78 -0
  72. data/lib/mittsu/extras.rb +3 -0
  73. data/lib/mittsu/extras/geometries.rb +2 -0
  74. data/lib/mittsu/extras/geometries/box_geometry.rb +108 -0
  75. data/lib/mittsu/extras/geometries/sphere_geometry.rb +88 -0
  76. data/lib/mittsu/extras/helpers.rb +1 -0
  77. data/lib/mittsu/extras/helpers/camera_helper.rb +155 -0
  78. data/lib/mittsu/extras/image.rb +3 -0
  79. data/lib/mittsu/extras/image_utils.rb +80 -0
  80. data/lib/mittsu/lights.rb +7 -0
  81. data/lib/mittsu/lights/ambient_light.rb +16 -0
  82. data/lib/mittsu/lights/area_light.rb +24 -0
  83. data/lib/mittsu/lights/directional_light.rb +131 -0
  84. data/lib/mittsu/lights/hemisphere_light.rb +29 -0
  85. data/lib/mittsu/lights/light.rb +21 -0
  86. data/lib/mittsu/lights/point_light.rb +27 -0
  87. data/lib/mittsu/lights/spot_light.rb +104 -0
  88. data/lib/mittsu/loaders.rb +7 -0
  89. data/lib/mittsu/loaders/cache.rb +53 -0
  90. data/lib/mittsu/loaders/file_loader.rb +22 -0
  91. data/lib/mittsu/loaders/image_loader.rb +32 -0
  92. data/lib/mittsu/loaders/loader.rb +212 -0
  93. data/lib/mittsu/loaders/loading_manager.rb +17 -0
  94. data/lib/mittsu/loaders/mtl_loader.rb +242 -0
  95. data/lib/mittsu/loaders/obj_mtl_loader.rb +225 -0
  96. data/lib/mittsu/materials.rb +7 -0
  97. data/lib/mittsu/materials/line_basic_material.rb +39 -0
  98. data/lib/mittsu/materials/material.rb +156 -0
  99. data/lib/mittsu/materials/mesh_basic_material.rb +122 -0
  100. data/lib/mittsu/materials/mesh_face_material.rb +30 -0
  101. data/lib/mittsu/materials/mesh_lambert_material.rb +126 -0
  102. data/lib/mittsu/materials/mesh_phong_material.rb +152 -0
  103. data/lib/mittsu/materials/shader_material.rb +108 -0
  104. data/lib/mittsu/math.rb +105 -0
  105. data/lib/mittsu/math/box2.rb +135 -0
  106. data/lib/mittsu/math/box3.rb +194 -0
  107. data/lib/mittsu/math/color.rb +252 -0
  108. data/lib/mittsu/math/color_keywords.rb +151 -0
  109. data/lib/mittsu/math/euler.rb +182 -0
  110. data/lib/mittsu/math/frustum.rb +106 -0
  111. data/lib/mittsu/math/line3.rb +76 -0
  112. data/lib/mittsu/math/matrix3.rb +163 -0
  113. data/lib/mittsu/math/matrix4.rb +581 -0
  114. data/lib/mittsu/math/plane.rb +128 -0
  115. data/lib/mittsu/math/quaternion.rb +309 -0
  116. data/lib/mittsu/math/ray.rb +292 -0
  117. data/lib/mittsu/math/sphere.rb +91 -0
  118. data/lib/mittsu/math/spline.rb +128 -0
  119. data/lib/mittsu/math/triangle.rb +121 -0
  120. data/lib/mittsu/math/vector2.rb +238 -0
  121. data/lib/mittsu/math/vector3.rb +491 -0
  122. data/lib/mittsu/math/vector4.rb +414 -0
  123. data/lib/mittsu/objects.rb +3 -0
  124. data/lib/mittsu/objects/group.rb +8 -0
  125. data/lib/mittsu/objects/line.rb +143 -0
  126. data/lib/mittsu/objects/mesh.rb +243 -0
  127. data/lib/mittsu/renderers.rb +1 -0
  128. data/lib/mittsu/renderers/glfw_window.rb +216 -0
  129. data/lib/mittsu/renderers/opengl/opengl_debug.rb +38 -0
  130. data/lib/mittsu/renderers/opengl/opengl_program.rb +402 -0
  131. data/lib/mittsu/renderers/opengl/opengl_shader.rb +58 -0
  132. data/lib/mittsu/renderers/opengl/opengl_state.rb +207 -0
  133. data/lib/mittsu/renderers/opengl/plugins/shadow_map_plugin.rb +416 -0
  134. data/lib/mittsu/renderers/opengl_render_target.rb +87 -0
  135. data/lib/mittsu/renderers/opengl_renderer.rb +3376 -0
  136. data/lib/mittsu/renderers/shaders/shader_chunk.rb +12 -0
  137. data/lib/mittsu/renderers/shaders/shader_chunk/alphamap_fragment.glsl +5 -0
  138. data/lib/mittsu/renderers/shaders/shader_chunk/alphamap_pars_fragment.glsl +5 -0
  139. data/lib/mittsu/renderers/shaders/shader_chunk/alphatest_fragment.glsl +5 -0
  140. data/lib/mittsu/renderers/shaders/shader_chunk/bumpmap_pars_fragment.glsl +40 -0
  141. data/lib/mittsu/renderers/shaders/shader_chunk/color_fragment.glsl +5 -0
  142. data/lib/mittsu/renderers/shaders/shader_chunk/color_pars_fragment.glsl +5 -0
  143. data/lib/mittsu/renderers/shaders/shader_chunk/color_pars_vertex.glsl +5 -0
  144. data/lib/mittsu/renderers/shaders/shader_chunk/color_vertex.glsl +5 -0
  145. data/lib/mittsu/renderers/shaders/shader_chunk/common.glsl +60 -0
  146. data/lib/mittsu/renderers/shaders/shader_chunk/default_vertex.glsl +15 -0
  147. data/lib/mittsu/renderers/shaders/shader_chunk/defaultnormal_vertex.glsl +21 -0
  148. data/lib/mittsu/renderers/shaders/shader_chunk/envmap_fragment.glsl +62 -0
  149. data/lib/mittsu/renderers/shaders/shader_chunk/envmap_pars_fragment.glsl +21 -0
  150. data/lib/mittsu/renderers/shaders/shader_chunk/envmap_pars_vertex.glsl +7 -0
  151. data/lib/mittsu/renderers/shaders/shader_chunk/envmap_vertex.glsl +17 -0
  152. data/lib/mittsu/renderers/shaders/shader_chunk/fog_fragment.glsl +26 -0
  153. data/lib/mittsu/renderers/shaders/shader_chunk/fog_pars_fragment.glsl +15 -0
  154. data/lib/mittsu/renderers/shaders/shader_chunk/lightmap_fragment.glsl +5 -0
  155. data/lib/mittsu/renderers/shaders/shader_chunk/lightmap_pars_fragment.glsl +6 -0
  156. data/lib/mittsu/renderers/shaders/shader_chunk/lightmap_pars_vertex.glsl +5 -0
  157. data/lib/mittsu/renderers/shaders/shader_chunk/lightmap_vertex.glsl +5 -0
  158. data/lib/mittsu/renderers/shaders/shader_chunk/lights_lambert_pars_vertex.glsl +43 -0
  159. data/lib/mittsu/renderers/shaders/shader_chunk/lights_lambert_vertex.glsl +196 -0
  160. data/lib/mittsu/renderers/shaders/shader_chunk/lights_phong_fragment.glsl +243 -0
  161. data/lib/mittsu/renderers/shaders/shader_chunk/lights_phong_pars_fragment.glsl +58 -0
  162. data/lib/mittsu/renderers/shaders/shader_chunk/lights_phong_pars_vertex.glsl +5 -0
  163. data/lib/mittsu/renderers/shaders/shader_chunk/lights_phong_vertex.glsl +5 -0
  164. data/lib/mittsu/renderers/shaders/shader_chunk/linear_to_gamma_fragment.glsl +2 -0
  165. data/lib/mittsu/renderers/shaders/shader_chunk/logdepthbuf_fragment.glsl +5 -0
  166. data/lib/mittsu/renderers/shaders/shader_chunk/logdepthbuf_pars_fragment.glsl +12 -0
  167. data/lib/mittsu/renderers/shaders/shader_chunk/logdepthbuf_pars_vertex.glsl +11 -0
  168. data/lib/mittsu/renderers/shaders/shader_chunk/logdepthbuf_vertex.glsl +15 -0
  169. data/lib/mittsu/renderers/shaders/shader_chunk/map_fragment.glsl +9 -0
  170. data/lib/mittsu/renderers/shaders/shader_chunk/map_pars_fragment.glsl +11 -0
  171. data/lib/mittsu/renderers/shaders/shader_chunk/map_pars_vertex.glsl +6 -0
  172. data/lib/mittsu/renderers/shaders/shader_chunk/map_particle_fragment.glsl +5 -0
  173. data/lib/mittsu/renderers/shaders/shader_chunk/map_particle_pars_fragment.glsl +6 -0
  174. data/lib/mittsu/renderers/shaders/shader_chunk/map_vertex.glsl +5 -0
  175. data/lib/mittsu/renderers/shaders/shader_chunk/morphnormal_vertex.glsl +12 -0
  176. data/lib/mittsu/renderers/shaders/shader_chunk/morphtarget_pars_vertex.glsl +13 -0
  177. data/lib/mittsu/renderers/shaders/shader_chunk/morphtarget_vertex.glsl +20 -0
  178. data/lib/mittsu/renderers/shaders/shader_chunk/normalmap_pars_fragment.glsl +27 -0
  179. data/lib/mittsu/renderers/shaders/shader_chunk/shadowmap_fragment.glsl +217 -0
  180. data/lib/mittsu/renderers/shaders/shader_chunk/shadowmap_pars_fragment.glsl +19 -0
  181. data/lib/mittsu/renderers/shaders/shader_chunk/shadowmap_pars_vertex.glsl +6 -0
  182. data/lib/mittsu/renderers/shaders/shader_chunk/shadowmap_vertex.glsl +9 -0
  183. data/lib/mittsu/renderers/shaders/shader_chunk/skinbase_vertex.glsl +8 -0
  184. data/lib/mittsu/renderers/shaders/shader_chunk/skinning_pars_vertex.glsl +47 -0
  185. data/lib/mittsu/renderers/shaders/shader_chunk/skinning_vertex.glsl +20 -0
  186. data/lib/mittsu/renderers/shaders/shader_chunk/skinnormal_vertex.glsl +20 -0
  187. data/lib/mittsu/renderers/shaders/shader_chunk/specularmap_fragment.glsl +12 -0
  188. data/lib/mittsu/renderers/shaders/shader_chunk/specularmap_pars_fragment.glsl +5 -0
  189. data/lib/mittsu/renderers/shaders/shader_chunk/worldpos_vertex.glsl +17 -0
  190. data/lib/mittsu/renderers/shaders/shader_lib.rb +420 -0
  191. data/lib/mittsu/renderers/shaders/uniforms_lib.rb +107 -0
  192. data/lib/mittsu/renderers/shaders/uniforms_utils.rb +31 -0
  193. data/lib/mittsu/scenes.rb +1 -0
  194. data/lib/mittsu/scenes/scene.rb +27 -0
  195. data/lib/mittsu/textures.rb +5 -0
  196. data/lib/mittsu/textures/compressed_texture.rb +30 -0
  197. data/lib/mittsu/textures/cube_texture.rb +19 -0
  198. data/lib/mittsu/textures/data_texture.rb +17 -0
  199. data/lib/mittsu/textures/texture.rb +92 -0
  200. data/lib/mittsu/textures/video_texture.rb +17 -0
  201. data/lib/mittsu/version.rb +4 -0
  202. data/mittsu.gemspec +31 -0
  203. metadata +357 -0
@@ -0,0 +1,243 @@
1
+ #ifndef FLAT_SHADED
2
+
3
+ vec3 normal = normalize( vNormal );
4
+
5
+ #ifdef DOUBLE_SIDED
6
+
7
+ normal = normal * ( -1.0 + 2.0 * float( gl_FrontFacing ) );
8
+
9
+ #endif
10
+
11
+ #else
12
+
13
+ vec3 fdx = dFdx( vViewPosition );
14
+ vec3 fdy = dFdy( vViewPosition );
15
+ vec3 normal = normalize( cross( fdx, fdy ) );
16
+
17
+ #endif
18
+
19
+ vec3 viewPosition = normalize( vViewPosition );
20
+
21
+ #ifdef USE_NORMALMAP
22
+
23
+ normal = perturbNormal2Arb( -vViewPosition, normal );
24
+
25
+ #elif defined( USE_BUMPMAP )
26
+
27
+ normal = perturbNormalArb( -vViewPosition, normal, dHdxy_fwd() );
28
+
29
+ #endif
30
+
31
+ vec3 totalDiffuseLight = vec3( 0.0 );
32
+ vec3 totalSpecularLight = vec3( 0.0 );
33
+
34
+ #if MAX_POINT_LIGHTS > 0
35
+
36
+ for ( int i = 0; i < MAX_POINT_LIGHTS; i ++ ) {
37
+
38
+ vec4 lPosition = viewMatrix * vec4( pointLightPosition[ i ], 1.0 );
39
+ vec3 lVector = lPosition.xyz + vViewPosition.xyz;
40
+
41
+ float attenuation = calcLightAttenuation( length( lVector ), pointLightDistance[ i ], pointLightDecay[ i ] );
42
+
43
+ lVector = normalize( lVector );
44
+
45
+ // diffuse
46
+
47
+ float dotProduct = dot( normal, lVector );
48
+
49
+ #ifdef WRAP_AROUND
50
+
51
+ float pointDiffuseWeightFull = max( dotProduct, 0.0 );
52
+ float pointDiffuseWeightHalf = max( 0.5 * dotProduct + 0.5, 0.0 );
53
+
54
+ vec3 pointDiffuseWeight = mix( vec3( pointDiffuseWeightFull ), vec3( pointDiffuseWeightHalf ), wrapRGB );
55
+
56
+ #else
57
+
58
+ float pointDiffuseWeight = max( dotProduct, 0.0 );
59
+
60
+ #endif
61
+
62
+ totalDiffuseLight += pointLightColor[ i ] * pointDiffuseWeight * attenuation;
63
+
64
+ // specular
65
+
66
+ vec3 pointHalfVector = normalize( lVector + viewPosition );
67
+ float pointDotNormalHalf = max( dot( normal, pointHalfVector ), 0.0 );
68
+ float pointSpecularWeight = specularStrength * max( pow( pointDotNormalHalf, shininess ), 0.0 );
69
+
70
+ float specularNormalization = ( shininess + 2.0 ) / 8.0;
71
+
72
+ vec3 schlick = specular + vec3( 1.0 - specular ) * pow( max( 1.0 - dot( lVector, pointHalfVector ), 0.0 ), 5.0 );
73
+ totalSpecularLight += schlick * pointLightColor[ i ] * pointSpecularWeight * pointDiffuseWeight * attenuation * specularNormalization;
74
+
75
+ }
76
+
77
+ #endif
78
+
79
+ #if MAX_SPOT_LIGHTS > 0
80
+
81
+ for ( int i = 0; i < MAX_SPOT_LIGHTS; i ++ ) {
82
+
83
+ vec4 lPosition = viewMatrix * vec4( spotLightPosition[ i ], 1.0 );
84
+ vec3 lVector = lPosition.xyz + vViewPosition.xyz;
85
+
86
+ float attenuation = calcLightAttenuation( length( lVector ), spotLightDistance[ i ], spotLightDecay[ i ] );
87
+
88
+ lVector = normalize( lVector );
89
+
90
+ float spotEffect = dot( spotLightDirection[ i ], normalize( spotLightPosition[ i ] - vWorldPosition ) );
91
+
92
+ if ( spotEffect > spotLightAngleCos[ i ] ) {
93
+
94
+ spotEffect = max( pow( max( spotEffect, 0.0 ), spotLightExponent[ i ] ), 0.0 );
95
+
96
+ // diffuse
97
+
98
+ float dotProduct = dot( normal, lVector );
99
+
100
+ #ifdef WRAP_AROUND
101
+
102
+ float spotDiffuseWeightFull = max( dotProduct, 0.0 );
103
+ float spotDiffuseWeightHalf = max( 0.5 * dotProduct + 0.5, 0.0 );
104
+
105
+ vec3 spotDiffuseWeight = mix( vec3( spotDiffuseWeightFull ), vec3( spotDiffuseWeightHalf ), wrapRGB );
106
+
107
+ #else
108
+
109
+ float spotDiffuseWeight = max( dotProduct, 0.0 );
110
+
111
+ #endif
112
+
113
+ totalDiffuseLight += spotLightColor[ i ] * spotDiffuseWeight * attenuation * spotEffect;
114
+
115
+ // specular
116
+
117
+ vec3 spotHalfVector = normalize( lVector + viewPosition );
118
+ float spotDotNormalHalf = max( dot( normal, spotHalfVector ), 0.0 );
119
+ float spotSpecularWeight = specularStrength * max( pow( spotDotNormalHalf, shininess ), 0.0 );
120
+
121
+ float specularNormalization = ( shininess + 2.0 ) / 8.0;
122
+
123
+ vec3 schlick = specular + vec3( 1.0 - specular ) * pow( max( 1.0 - dot( lVector, spotHalfVector ), 0.0 ), 5.0 );
124
+ totalSpecularLight += schlick * spotLightColor[ i ] * spotSpecularWeight * spotDiffuseWeight * attenuation * specularNormalization * spotEffect;
125
+
126
+ }
127
+
128
+ }
129
+
130
+ #endif
131
+
132
+ #if MAX_DIR_LIGHTS > 0
133
+
134
+ for( int i = 0; i < MAX_DIR_LIGHTS; i ++ ) {
135
+
136
+ vec3 dirVector = transformDirection( directionalLightDirection[ i ], viewMatrix );
137
+
138
+ // diffuse
139
+
140
+ float dotProduct = dot( normal, dirVector );
141
+
142
+ #ifdef WRAP_AROUND
143
+
144
+ float dirDiffuseWeightFull = max( dotProduct, 0.0 );
145
+ float dirDiffuseWeightHalf = max( 0.5 * dotProduct + 0.5, 0.0 );
146
+
147
+ vec3 dirDiffuseWeight = mix( vec3( dirDiffuseWeightFull ), vec3( dirDiffuseWeightHalf ), wrapRGB );
148
+
149
+ #else
150
+
151
+ float dirDiffuseWeight = max( dotProduct, 0.0 );
152
+
153
+ #endif
154
+
155
+ totalDiffuseLight += directionalLightColor[ i ] * dirDiffuseWeight;
156
+
157
+ // specular
158
+
159
+ vec3 dirHalfVector = normalize( dirVector + viewPosition );
160
+ float dirDotNormalHalf = max( dot( normal, dirHalfVector ), 0.0 );
161
+ float dirSpecularWeight = specularStrength * max( pow( dirDotNormalHalf, shininess ), 0.0 );
162
+
163
+ /*
164
+ // fresnel term from skin shader
165
+ const float F0 = 0.128;
166
+
167
+ float base = 1.0 - dot( viewPosition, dirHalfVector );
168
+ float exponential = pow( base, 5.0 );
169
+
170
+ float fresnel = exponential + F0 * ( 1.0 - exponential );
171
+ */
172
+
173
+ /*
174
+ // fresnel term from fresnel shader
175
+ const float mFresnelBias = 0.08;
176
+ const float mFresnelScale = 0.3;
177
+ const float mFresnelPower = 5.0;
178
+
179
+ float fresnel = mFresnelBias + mFresnelScale * pow( 1.0 + dot( normalize( -viewPosition ), normal ), mFresnelPower );
180
+ */
181
+
182
+ float specularNormalization = ( shininess + 2.0 ) / 8.0;
183
+
184
+ // dirSpecular += specular * directionalLightColor[ i ] * dirSpecularWeight * dirDiffuseWeight * specularNormalization * fresnel;
185
+
186
+ vec3 schlick = specular + vec3( 1.0 - specular ) * pow( max( 1.0 - dot( dirVector, dirHalfVector ), 0.0 ), 5.0 );
187
+ totalSpecularLight += schlick * directionalLightColor[ i ] * dirSpecularWeight * dirDiffuseWeight * specularNormalization;
188
+
189
+
190
+ }
191
+
192
+ #endif
193
+
194
+ #if MAX_HEMI_LIGHTS > 0
195
+
196
+ for( int i = 0; i < MAX_HEMI_LIGHTS; i ++ ) {
197
+
198
+ vec3 lVector = transformDirection( hemisphereLightDirection[ i ], viewMatrix );
199
+
200
+ // diffuse
201
+
202
+ float dotProduct = dot( normal, lVector );
203
+ float hemiDiffuseWeight = 0.5 * dotProduct + 0.5;
204
+
205
+ vec3 hemiColor = mix( hemisphereLightGroundColor[ i ], hemisphereLightSkyColor[ i ], hemiDiffuseWeight );
206
+
207
+ totalDiffuseLight += hemiColor;
208
+
209
+ // specular (sky light)
210
+
211
+ vec3 hemiHalfVectorSky = normalize( lVector + viewPosition );
212
+ float hemiDotNormalHalfSky = 0.5 * dot( normal, hemiHalfVectorSky ) + 0.5;
213
+ float hemiSpecularWeightSky = specularStrength * max( pow( max( hemiDotNormalHalfSky, 0.0 ), shininess ), 0.0 );
214
+
215
+ // specular (ground light)
216
+
217
+ vec3 lVectorGround = -lVector;
218
+
219
+ vec3 hemiHalfVectorGround = normalize( lVectorGround + viewPosition );
220
+ float hemiDotNormalHalfGround = 0.5 * dot( normal, hemiHalfVectorGround ) + 0.5;
221
+ float hemiSpecularWeightGround = specularStrength * max( pow( max( hemiDotNormalHalfGround, 0.0 ), shininess ), 0.0 );
222
+
223
+ float dotProductGround = dot( normal, lVectorGround );
224
+
225
+ float specularNormalization = ( shininess + 2.0 ) / 8.0;
226
+
227
+ vec3 schlickSky = specular + vec3( 1.0 - specular ) * pow( max( 1.0 - dot( lVector, hemiHalfVectorSky ), 0.0 ), 5.0 );
228
+ vec3 schlickGround = specular + vec3( 1.0 - specular ) * pow( max( 1.0 - dot( lVectorGround, hemiHalfVectorGround ), 0.0 ), 5.0 );
229
+ totalSpecularLight += hemiColor * specularNormalization * ( schlickSky * hemiSpecularWeightSky * max( dotProduct, 0.0 ) + schlickGround * hemiSpecularWeightGround * max( dotProductGround, 0.0 ) );
230
+
231
+ }
232
+
233
+ #endif
234
+
235
+ #ifdef METAL
236
+
237
+ outgoingLight += diffuseColor.rgb * ( totalDiffuseLight + ambientLightColor ) * specular + totalSpecularLight + emissive;
238
+
239
+ #else
240
+
241
+ outgoingLight += diffuseColor.rgb * ( totalDiffuseLight + ambientLightColor ) + totalSpecularLight + emissive;
242
+
243
+ #endif
@@ -0,0 +1,58 @@
1
+ uniform vec3 ambientLightColor;
2
+
3
+ #if MAX_DIR_LIGHTS > 0
4
+
5
+ uniform vec3 directionalLightColor[ MAX_DIR_LIGHTS ];
6
+ uniform vec3 directionalLightDirection[ MAX_DIR_LIGHTS ];
7
+
8
+ #endif
9
+
10
+ #if MAX_HEMI_LIGHTS > 0
11
+
12
+ uniform vec3 hemisphereLightSkyColor[ MAX_HEMI_LIGHTS ];
13
+ uniform vec3 hemisphereLightGroundColor[ MAX_HEMI_LIGHTS ];
14
+ uniform vec3 hemisphereLightDirection[ MAX_HEMI_LIGHTS ];
15
+
16
+ #endif
17
+
18
+ #if MAX_POINT_LIGHTS > 0
19
+
20
+ uniform vec3 pointLightColor[ MAX_POINT_LIGHTS ];
21
+
22
+ uniform vec3 pointLightPosition[ MAX_POINT_LIGHTS ];
23
+ uniform float pointLightDistance[ MAX_POINT_LIGHTS ];
24
+ uniform float pointLightDecay[ MAX_POINT_LIGHTS ];
25
+
26
+ #endif
27
+
28
+ #if MAX_SPOT_LIGHTS > 0
29
+
30
+ uniform vec3 spotLightColor[ MAX_SPOT_LIGHTS ];
31
+ uniform vec3 spotLightPosition[ MAX_SPOT_LIGHTS ];
32
+ uniform vec3 spotLightDirection[ MAX_SPOT_LIGHTS ];
33
+ uniform float spotLightAngleCos[ MAX_SPOT_LIGHTS ];
34
+ uniform float spotLightExponent[ MAX_SPOT_LIGHTS ];
35
+ uniform float spotLightDistance[ MAX_SPOT_LIGHTS ];
36
+ uniform float spotLightDecay[ MAX_SPOT_LIGHTS ];
37
+
38
+ #endif
39
+
40
+ #if MAX_SPOT_LIGHTS > 0 || defined( USE_BUMPMAP ) || defined( USE_ENVMAP )
41
+
42
+ in vec3 vWorldPosition;
43
+
44
+ #endif
45
+
46
+ #ifdef WRAP_AROUND
47
+
48
+ uniform vec3 wrapRGB;
49
+
50
+ #endif
51
+
52
+ in vec3 vViewPosition;
53
+
54
+ #ifndef FLAT_SHADED
55
+
56
+ in vec3 vNormal;
57
+
58
+ #endif
@@ -0,0 +1,5 @@
1
+ #if MAX_SPOT_LIGHTS > 0 || defined( USE_BUMPMAP ) || defined( USE_ENVMAP )
2
+
3
+ out vec3 vWorldPosition;
4
+
5
+ #endif
@@ -0,0 +1,5 @@
1
+ #if MAX_SPOT_LIGHTS > 0 || defined( USE_BUMPMAP ) || defined( USE_ENVMAP )
2
+
3
+ vWorldPosition = worldPosition.xyz;
4
+
5
+ #endif
@@ -0,0 +1,2 @@
1
+
2
+ outgoingLight = linearToOutput( outgoingLight );
@@ -0,0 +1,5 @@
1
+ #if defined(USE_LOGDEPTHBUF) && defined(USE_LOGDEPTHBUF_EXT)
2
+
3
+ gl_FragDepthEXT = log2(vFragDepth) * logDepthBufFC * 0.5;
4
+
5
+ #endif
@@ -0,0 +1,12 @@
1
+ #ifdef USE_LOGDEPTHBUF
2
+
3
+ uniform float logDepthBufFC;
4
+
5
+ #ifdef USE_LOGDEPTHBUF_EXT
6
+
7
+ #extension GL_EXT_frag_depth : enable
8
+ in float vFragDepth;
9
+
10
+ #endif
11
+
12
+ #endif
@@ -0,0 +1,11 @@
1
+ #ifdef USE_LOGDEPTHBUF
2
+
3
+ #ifdef USE_LOGDEPTHBUF_EXT
4
+
5
+ out float vFragDepth;
6
+
7
+ #endif
8
+
9
+ uniform float logDepthBufFC;
10
+
11
+ #endif
@@ -0,0 +1,15 @@
1
+ #ifdef USE_LOGDEPTHBUF
2
+
3
+ gl_Position.z = log2(max( EPSILON, gl_Position.w + 1.0 )) * logDepthBufFC;
4
+
5
+ #ifdef USE_LOGDEPTHBUF_EXT
6
+
7
+ vFragDepth = 1.0 + gl_Position.w;
8
+
9
+ #else
10
+
11
+ gl_Position.z = (gl_Position.z - 1.0) * gl_Position.w;
12
+
13
+ #endif
14
+
15
+ #endif
@@ -0,0 +1,9 @@
1
+ #ifdef USE_MAP
2
+
3
+ vec4 texelColor = texture( map, vUv );
4
+
5
+ texelColor.xyz = inputToLinear( texelColor.xyz );
6
+
7
+ diffuseColor *= texelColor;
8
+
9
+ #endif
@@ -0,0 +1,11 @@
1
+ #if defined( USE_MAP ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( USE_SPECULARMAP ) || defined( USE_ALPHAMAP )
2
+
3
+ in vec2 vUv;
4
+
5
+ #endif
6
+
7
+ #ifdef USE_MAP
8
+
9
+ uniform sampler2D map;
10
+
11
+ #endif
@@ -0,0 +1,6 @@
1
+ #if defined( USE_MAP ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( USE_SPECULARMAP ) || defined( USE_ALPHAMAP )
2
+
3
+ out vec2 vUv;
4
+ uniform vec4 offsetRepeat;
5
+
6
+ #endif
@@ -0,0 +1,5 @@
1
+ #ifdef USE_MAP
2
+
3
+ diffuseColor *= texture( map, vec2( gl_PointCoord.x, 1.0 - gl_PointCoord.y ) * offsetRepeat.zw + offsetRepeat.xy );
4
+
5
+ #endif
@@ -0,0 +1,6 @@
1
+ #ifdef USE_MAP
2
+
3
+ uniform vec4 offsetRepeat;
4
+ uniform sampler2D map;
5
+
6
+ #endif
@@ -0,0 +1,5 @@
1
+ #if defined( USE_MAP ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( USE_SPECULARMAP ) || defined( USE_ALPHAMAP )
2
+
3
+ vUv = uv * offsetRepeat.zw + offsetRepeat.xy;
4
+
5
+ #endif
@@ -0,0 +1,12 @@
1
+ #ifdef USE_MORPHNORMALS
2
+
3
+ vec3 morphedNormal = vec3( 0.0 );
4
+
5
+ morphedNormal += ( morphNormal0 - normal ) * morphTargetInfluences[ 0 ];
6
+ morphedNormal += ( morphNormal1 - normal ) * morphTargetInfluences[ 1 ];
7
+ morphedNormal += ( morphNormal2 - normal ) * morphTargetInfluences[ 2 ];
8
+ morphedNormal += ( morphNormal3 - normal ) * morphTargetInfluences[ 3 ];
9
+
10
+ morphedNormal += normal;
11
+
12
+ #endif
@@ -0,0 +1,13 @@
1
+ #ifdef USE_MORPHTARGETS
2
+
3
+ #ifndef USE_MORPHNORMALS
4
+
5
+ uniform float morphTargetInfluences[ 8 ];
6
+
7
+ #else
8
+
9
+ uniform float morphTargetInfluences[ 4 ];
10
+
11
+ #endif
12
+
13
+ #endif