Buckets:
ktongue/docker_container / simsite /frontend /node_modules /three /examples /jsm /utils /PackedPhongMaterial.js
| /** | |
| * `PackedPhongMaterial` inherited from THREE.MeshPhongMaterial | |
| * | |
| * @param {Object} parameters | |
| */ | |
| import { | |
| MeshPhongMaterial, | |
| ShaderChunk, | |
| ShaderLib, | |
| UniformsUtils, | |
| } from 'three'; | |
| class PackedPhongMaterial extends MeshPhongMaterial { | |
| constructor( parameters ) { | |
| super(); | |
| this.defines = {}; | |
| this.type = 'PackedPhongMaterial'; | |
| this.uniforms = UniformsUtils.merge( [ | |
| ShaderLib.phong.uniforms, | |
| { | |
| quantizeMatPos: { value: null }, | |
| quantizeMatUV: { value: null } | |
| } | |
| ] ); | |
| this.vertexShader = [ | |
| '#define PHONG', | |
| 'varying vec3 vViewPosition;', | |
| ShaderChunk.common, | |
| ShaderChunk.uv_pars_vertex, | |
| ShaderChunk.displacementmap_pars_vertex, | |
| ShaderChunk.envmap_pars_vertex, | |
| ShaderChunk.color_pars_vertex, | |
| ShaderChunk.fog_pars_vertex, | |
| ShaderChunk.normal_pars_vertex, | |
| ShaderChunk.morphtarget_pars_vertex, | |
| ShaderChunk.skinning_pars_vertex, | |
| ShaderChunk.shadowmap_pars_vertex, | |
| ShaderChunk.logdepthbuf_pars_vertex, | |
| ShaderChunk.clipping_planes_pars_vertex, | |
| `#ifdef USE_PACKED_NORMAL | |
| #if USE_PACKED_NORMAL == 0 | |
| vec3 decodeNormal(vec3 packedNormal) | |
| { | |
| float x = packedNormal.x * 2.0 - 1.0; | |
| float y = packedNormal.y * 2.0 - 1.0; | |
| vec2 scth = vec2(sin(x * PI), cos(x * PI)); | |
| vec2 scphi = vec2(sqrt(1.0 - y * y), y); | |
| return normalize( vec3(scth.y * scphi.x, scth.x * scphi.x, scphi.y) ); | |
| } | |
| #endif | |
| #if USE_PACKED_NORMAL == 1 | |
| vec3 decodeNormal(vec3 packedNormal) | |
| { | |
| vec3 v = vec3(packedNormal.xy, 1.0 - abs(packedNormal.x) - abs(packedNormal.y)); | |
| if (v.z < 0.0) | |
| { | |
| v.xy = (1.0 - abs(v.yx)) * vec2((v.x >= 0.0) ? +1.0 : -1.0, (v.y >= 0.0) ? +1.0 : -1.0); | |
| } | |
| return normalize(v); | |
| } | |
| #endif | |
| #if USE_PACKED_NORMAL == 2 | |
| vec3 decodeNormal(vec3 packedNormal) | |
| { | |
| vec3 v = (packedNormal * 2.0) - 1.0; | |
| return normalize(v); | |
| } | |
| #endif | |
| #endif`, | |
| `#ifdef USE_PACKED_POSITION | |
| #if USE_PACKED_POSITION == 0 | |
| uniform mat4 quantizeMatPos; | |
| #endif | |
| #endif`, | |
| `#ifdef USE_PACKED_UV | |
| #if USE_PACKED_UV == 1 | |
| uniform mat3 quantizeMatUV; | |
| #endif | |
| #endif`, | |
| `#ifdef USE_PACKED_UV | |
| #if USE_PACKED_UV == 0 | |
| vec2 decodeUV(vec2 packedUV) | |
| { | |
| vec2 uv = (packedUV * 2.0) - 1.0; | |
| return uv; | |
| } | |
| #endif | |
| #if USE_PACKED_UV == 1 | |
| vec2 decodeUV(vec2 packedUV) | |
| { | |
| vec2 uv = ( vec3(packedUV, 1.0) * quantizeMatUV ).xy; | |
| return uv; | |
| } | |
| #endif | |
| #endif`, | |
| 'void main() {', | |
| ShaderChunk.uv_vertex, | |
| `#ifdef USE_MAP | |
| #ifdef USE_PACKED_UV | |
| vMapUv = decodeUV(vMapUv); | |
| #endif | |
| #endif`, | |
| ShaderChunk.color_vertex, | |
| ShaderChunk.morphcolor_vertex, | |
| ShaderChunk.beginnormal_vertex, | |
| `#ifdef USE_PACKED_NORMAL | |
| objectNormal = decodeNormal(objectNormal); | |
| #endif | |
| #ifdef USE_TANGENT | |
| vec3 objectTangent = vec3( tangent.xyz ); | |
| #endif | |
| `, | |
| ShaderChunk.morphnormal_vertex, | |
| ShaderChunk.skinbase_vertex, | |
| ShaderChunk.skinnormal_vertex, | |
| ShaderChunk.defaultnormal_vertex, | |
| ShaderChunk.normal_vertex, | |
| ShaderChunk.begin_vertex, | |
| `#ifdef USE_PACKED_POSITION | |
| #if USE_PACKED_POSITION == 0 | |
| transformed = ( vec4(transformed, 1.0) * quantizeMatPos ).xyz; | |
| #endif | |
| #endif`, | |
| ShaderChunk.morphtarget_vertex, | |
| ShaderChunk.skinning_vertex, | |
| ShaderChunk.displacementmap_vertex, | |
| ShaderChunk.project_vertex, | |
| ShaderChunk.logdepthbuf_vertex, | |
| ShaderChunk.clipping_planes_vertex, | |
| 'vViewPosition = - mvPosition.xyz;', | |
| ShaderChunk.worldpos_vertex, | |
| ShaderChunk.envmap_vertex, | |
| ShaderChunk.shadowmap_vertex, | |
| ShaderChunk.fog_vertex, | |
| '}', | |
| ].join( '\n' ); | |
| // Use the original MeshPhongMaterial's fragmentShader. | |
| this.fragmentShader = ShaderLib.phong.fragmentShader; | |
| this.setValues( parameters ); | |
| } | |
| } | |
| export { PackedPhongMaterial }; | |
Xet Storage Details
- Size:
- 3.95 kB
- Xet hash:
- 2b9e1afebc88402b4a48b1902f782c8940c7489e2e4f5c20a19695262057b809
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.