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.
- checksums.yaml +7 -0
- data/.gitignore +10 -0
- data/.travis.yml +3 -0
- data/CODE_OF_CONDUCT.md +13 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +21 -0
- data/README.md +39 -0
- data/Rakefile +7 -0
- data/bin/console +14 -0
- data/bin/setup +7 -0
- data/examples/01_-_Default1noCulling.png +0 -0
- data/examples/01_scene_example.rb +14 -0
- data/examples/02_box_mesh_example.rb +30 -0
- data/examples/02_sphere_mesh_example.rb +30 -0
- data/examples/03_complex_object_example.rb +52 -0
- data/examples/04_ambient_light_example.rb +33 -0
- data/examples/04_dir_light_example.rb +36 -0
- data/examples/04_hemi_light_example.rb +30 -0
- data/examples/04_point_light_example.rb +50 -0
- data/examples/04_spot_light_example.rb +44 -0
- data/examples/05_earth_example.rb +42 -0
- data/examples/05_earth_moon_example.rb +46 -0
- data/examples/05_texture_example.rb +32 -0
- data/examples/06_cube_texture_example.rb +36 -0
- data/examples/06_skybox_example.rb +60 -0
- data/examples/07_earth_normal_example.rb +36 -0
- data/examples/08_shadow_example.rb +87 -0
- data/examples/09_line_example.rb +52 -0
- data/examples/10_obj_loader_example.rb +68 -0
- data/examples/11_character_input_example.rb +18 -0
- data/examples/11_continuous_keyboard_input_example.rb +35 -0
- data/examples/11_keyboard_input_example.rb +43 -0
- data/examples/12_mouse_click_example.rb +38 -0
- data/examples/12_mouse_motion_example.rb +35 -0
- data/examples/12_mouse_scroll_example.rb +36 -0
- data/examples/12_orbit_zoom_example.rb +68 -0
- data/examples/13_joystick_example.rb +80 -0
- data/examples/cubemap/tron_bk.png +0 -0
- data/examples/cubemap/tron_dn.png +0 -0
- data/examples/cubemap/tron_ft.png +0 -0
- data/examples/cubemap/tron_lf.png +0 -0
- data/examples/cubemap/tron_rt.png +0 -0
- data/examples/cubemap/tron_up.png +0 -0
- data/examples/earth.png +0 -0
- data/examples/earth_normal.png +0 -0
- data/examples/example_helper.rb +2 -0
- data/examples/male-02-1noCulling.png +0 -0
- data/examples/male02.mtl +54 -0
- data/examples/male02.obj +13888 -0
- data/examples/moon.png +0 -0
- data/examples/orig_02_-_Defaul1noCulling.png +0 -0
- data/examples/texture.png +0 -0
- data/lib/mittsu.rb +15 -0
- data/lib/mittsu/cameras.rb +4 -0
- data/lib/mittsu/cameras/camera.rb +34 -0
- data/lib/mittsu/cameras/cube_camera.rb +74 -0
- data/lib/mittsu/cameras/orthographic_camera.rb +53 -0
- data/lib/mittsu/cameras/perspective_camera.rb +115 -0
- data/lib/mittsu/constants.rb +160 -0
- data/lib/mittsu/core.rb +10 -0
- data/lib/mittsu/core/buffer_attribute.rb +87 -0
- data/lib/mittsu/core/buffer_geometry.rb +694 -0
- data/lib/mittsu/core/clock.rb +44 -0
- data/lib/mittsu/core/dynamic_buffer_attribute.rb +16 -0
- data/lib/mittsu/core/event_dispatcher.rb +39 -0
- data/lib/mittsu/core/face3.rb +30 -0
- data/lib/mittsu/core/geometry.rb +596 -0
- data/lib/mittsu/core/hash_array.rb +36 -0
- data/lib/mittsu/core/hash_object.rb +19 -0
- data/lib/mittsu/core/object_3d.rb +421 -0
- data/lib/mittsu/core/raycaster.rb +78 -0
- data/lib/mittsu/extras.rb +3 -0
- data/lib/mittsu/extras/geometries.rb +2 -0
- data/lib/mittsu/extras/geometries/box_geometry.rb +108 -0
- data/lib/mittsu/extras/geometries/sphere_geometry.rb +88 -0
- data/lib/mittsu/extras/helpers.rb +1 -0
- data/lib/mittsu/extras/helpers/camera_helper.rb +155 -0
- data/lib/mittsu/extras/image.rb +3 -0
- data/lib/mittsu/extras/image_utils.rb +80 -0
- data/lib/mittsu/lights.rb +7 -0
- data/lib/mittsu/lights/ambient_light.rb +16 -0
- data/lib/mittsu/lights/area_light.rb +24 -0
- data/lib/mittsu/lights/directional_light.rb +131 -0
- data/lib/mittsu/lights/hemisphere_light.rb +29 -0
- data/lib/mittsu/lights/light.rb +21 -0
- data/lib/mittsu/lights/point_light.rb +27 -0
- data/lib/mittsu/lights/spot_light.rb +104 -0
- data/lib/mittsu/loaders.rb +7 -0
- data/lib/mittsu/loaders/cache.rb +53 -0
- data/lib/mittsu/loaders/file_loader.rb +22 -0
- data/lib/mittsu/loaders/image_loader.rb +32 -0
- data/lib/mittsu/loaders/loader.rb +212 -0
- data/lib/mittsu/loaders/loading_manager.rb +17 -0
- data/lib/mittsu/loaders/mtl_loader.rb +242 -0
- data/lib/mittsu/loaders/obj_mtl_loader.rb +225 -0
- data/lib/mittsu/materials.rb +7 -0
- data/lib/mittsu/materials/line_basic_material.rb +39 -0
- data/lib/mittsu/materials/material.rb +156 -0
- data/lib/mittsu/materials/mesh_basic_material.rb +122 -0
- data/lib/mittsu/materials/mesh_face_material.rb +30 -0
- data/lib/mittsu/materials/mesh_lambert_material.rb +126 -0
- data/lib/mittsu/materials/mesh_phong_material.rb +152 -0
- data/lib/mittsu/materials/shader_material.rb +108 -0
- data/lib/mittsu/math.rb +105 -0
- data/lib/mittsu/math/box2.rb +135 -0
- data/lib/mittsu/math/box3.rb +194 -0
- data/lib/mittsu/math/color.rb +252 -0
- data/lib/mittsu/math/color_keywords.rb +151 -0
- data/lib/mittsu/math/euler.rb +182 -0
- data/lib/mittsu/math/frustum.rb +106 -0
- data/lib/mittsu/math/line3.rb +76 -0
- data/lib/mittsu/math/matrix3.rb +163 -0
- data/lib/mittsu/math/matrix4.rb +581 -0
- data/lib/mittsu/math/plane.rb +128 -0
- data/lib/mittsu/math/quaternion.rb +309 -0
- data/lib/mittsu/math/ray.rb +292 -0
- data/lib/mittsu/math/sphere.rb +91 -0
- data/lib/mittsu/math/spline.rb +128 -0
- data/lib/mittsu/math/triangle.rb +121 -0
- data/lib/mittsu/math/vector2.rb +238 -0
- data/lib/mittsu/math/vector3.rb +491 -0
- data/lib/mittsu/math/vector4.rb +414 -0
- data/lib/mittsu/objects.rb +3 -0
- data/lib/mittsu/objects/group.rb +8 -0
- data/lib/mittsu/objects/line.rb +143 -0
- data/lib/mittsu/objects/mesh.rb +243 -0
- data/lib/mittsu/renderers.rb +1 -0
- data/lib/mittsu/renderers/glfw_window.rb +216 -0
- data/lib/mittsu/renderers/opengl/opengl_debug.rb +38 -0
- data/lib/mittsu/renderers/opengl/opengl_program.rb +402 -0
- data/lib/mittsu/renderers/opengl/opengl_shader.rb +58 -0
- data/lib/mittsu/renderers/opengl/opengl_state.rb +207 -0
- data/lib/mittsu/renderers/opengl/plugins/shadow_map_plugin.rb +416 -0
- data/lib/mittsu/renderers/opengl_render_target.rb +87 -0
- data/lib/mittsu/renderers/opengl_renderer.rb +3376 -0
- data/lib/mittsu/renderers/shaders/shader_chunk.rb +12 -0
- data/lib/mittsu/renderers/shaders/shader_chunk/alphamap_fragment.glsl +5 -0
- data/lib/mittsu/renderers/shaders/shader_chunk/alphamap_pars_fragment.glsl +5 -0
- data/lib/mittsu/renderers/shaders/shader_chunk/alphatest_fragment.glsl +5 -0
- data/lib/mittsu/renderers/shaders/shader_chunk/bumpmap_pars_fragment.glsl +40 -0
- data/lib/mittsu/renderers/shaders/shader_chunk/color_fragment.glsl +5 -0
- data/lib/mittsu/renderers/shaders/shader_chunk/color_pars_fragment.glsl +5 -0
- data/lib/mittsu/renderers/shaders/shader_chunk/color_pars_vertex.glsl +5 -0
- data/lib/mittsu/renderers/shaders/shader_chunk/color_vertex.glsl +5 -0
- data/lib/mittsu/renderers/shaders/shader_chunk/common.glsl +60 -0
- data/lib/mittsu/renderers/shaders/shader_chunk/default_vertex.glsl +15 -0
- data/lib/mittsu/renderers/shaders/shader_chunk/defaultnormal_vertex.glsl +21 -0
- data/lib/mittsu/renderers/shaders/shader_chunk/envmap_fragment.glsl +62 -0
- data/lib/mittsu/renderers/shaders/shader_chunk/envmap_pars_fragment.glsl +21 -0
- data/lib/mittsu/renderers/shaders/shader_chunk/envmap_pars_vertex.glsl +7 -0
- data/lib/mittsu/renderers/shaders/shader_chunk/envmap_vertex.glsl +17 -0
- data/lib/mittsu/renderers/shaders/shader_chunk/fog_fragment.glsl +26 -0
- data/lib/mittsu/renderers/shaders/shader_chunk/fog_pars_fragment.glsl +15 -0
- data/lib/mittsu/renderers/shaders/shader_chunk/lightmap_fragment.glsl +5 -0
- data/lib/mittsu/renderers/shaders/shader_chunk/lightmap_pars_fragment.glsl +6 -0
- data/lib/mittsu/renderers/shaders/shader_chunk/lightmap_pars_vertex.glsl +5 -0
- data/lib/mittsu/renderers/shaders/shader_chunk/lightmap_vertex.glsl +5 -0
- data/lib/mittsu/renderers/shaders/shader_chunk/lights_lambert_pars_vertex.glsl +43 -0
- data/lib/mittsu/renderers/shaders/shader_chunk/lights_lambert_vertex.glsl +196 -0
- data/lib/mittsu/renderers/shaders/shader_chunk/lights_phong_fragment.glsl +243 -0
- data/lib/mittsu/renderers/shaders/shader_chunk/lights_phong_pars_fragment.glsl +58 -0
- data/lib/mittsu/renderers/shaders/shader_chunk/lights_phong_pars_vertex.glsl +5 -0
- data/lib/mittsu/renderers/shaders/shader_chunk/lights_phong_vertex.glsl +5 -0
- data/lib/mittsu/renderers/shaders/shader_chunk/linear_to_gamma_fragment.glsl +2 -0
- data/lib/mittsu/renderers/shaders/shader_chunk/logdepthbuf_fragment.glsl +5 -0
- data/lib/mittsu/renderers/shaders/shader_chunk/logdepthbuf_pars_fragment.glsl +12 -0
- data/lib/mittsu/renderers/shaders/shader_chunk/logdepthbuf_pars_vertex.glsl +11 -0
- data/lib/mittsu/renderers/shaders/shader_chunk/logdepthbuf_vertex.glsl +15 -0
- data/lib/mittsu/renderers/shaders/shader_chunk/map_fragment.glsl +9 -0
- data/lib/mittsu/renderers/shaders/shader_chunk/map_pars_fragment.glsl +11 -0
- data/lib/mittsu/renderers/shaders/shader_chunk/map_pars_vertex.glsl +6 -0
- data/lib/mittsu/renderers/shaders/shader_chunk/map_particle_fragment.glsl +5 -0
- data/lib/mittsu/renderers/shaders/shader_chunk/map_particle_pars_fragment.glsl +6 -0
- data/lib/mittsu/renderers/shaders/shader_chunk/map_vertex.glsl +5 -0
- data/lib/mittsu/renderers/shaders/shader_chunk/morphnormal_vertex.glsl +12 -0
- data/lib/mittsu/renderers/shaders/shader_chunk/morphtarget_pars_vertex.glsl +13 -0
- data/lib/mittsu/renderers/shaders/shader_chunk/morphtarget_vertex.glsl +20 -0
- data/lib/mittsu/renderers/shaders/shader_chunk/normalmap_pars_fragment.glsl +27 -0
- data/lib/mittsu/renderers/shaders/shader_chunk/shadowmap_fragment.glsl +217 -0
- data/lib/mittsu/renderers/shaders/shader_chunk/shadowmap_pars_fragment.glsl +19 -0
- data/lib/mittsu/renderers/shaders/shader_chunk/shadowmap_pars_vertex.glsl +6 -0
- data/lib/mittsu/renderers/shaders/shader_chunk/shadowmap_vertex.glsl +9 -0
- data/lib/mittsu/renderers/shaders/shader_chunk/skinbase_vertex.glsl +8 -0
- data/lib/mittsu/renderers/shaders/shader_chunk/skinning_pars_vertex.glsl +47 -0
- data/lib/mittsu/renderers/shaders/shader_chunk/skinning_vertex.glsl +20 -0
- data/lib/mittsu/renderers/shaders/shader_chunk/skinnormal_vertex.glsl +20 -0
- data/lib/mittsu/renderers/shaders/shader_chunk/specularmap_fragment.glsl +12 -0
- data/lib/mittsu/renderers/shaders/shader_chunk/specularmap_pars_fragment.glsl +5 -0
- data/lib/mittsu/renderers/shaders/shader_chunk/worldpos_vertex.glsl +17 -0
- data/lib/mittsu/renderers/shaders/shader_lib.rb +420 -0
- data/lib/mittsu/renderers/shaders/uniforms_lib.rb +107 -0
- data/lib/mittsu/renderers/shaders/uniforms_utils.rb +31 -0
- data/lib/mittsu/scenes.rb +1 -0
- data/lib/mittsu/scenes/scene.rb +27 -0
- data/lib/mittsu/textures.rb +5 -0
- data/lib/mittsu/textures/compressed_texture.rb +30 -0
- data/lib/mittsu/textures/cube_texture.rb +19 -0
- data/lib/mittsu/textures/data_texture.rb +17 -0
- data/lib/mittsu/textures/texture.rb +92 -0
- data/lib/mittsu/textures/video_texture.rb +17 -0
- data/lib/mittsu/version.rb +4 -0
- data/mittsu.gemspec +31 -0
- 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,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,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
         |