UNPKG

@three.ez/instanced-mesh

Version:

Enhanced InstancedMesh with frustum culling, fast raycasting (using BVH), sorting, visibility management and more.

33 lines 2.15 kB
import { ShaderChunk } from 'three'; import instanced_pars_vertex from './chunks/instanced_pars_vertex.glsl'; import instanced_color_pars_vertex from './chunks/instanced_color_pars_vertex.glsl'; import instanced_vertex from './chunks/instanced_vertex.glsl'; import instanced_color_vertex from './chunks/instanced_color_vertex.glsl'; import instanced_skinning_pars_vertex from './chunks/instanced_skinning_pars_vertex.glsl'; ShaderChunk['instanced_pars_vertex'] = instanced_pars_vertex; ShaderChunk['instanced_color_pars_vertex'] = instanced_color_pars_vertex; ShaderChunk['instanced_vertex'] = instanced_vertex; ShaderChunk['instanced_color_vertex'] = instanced_color_vertex; /** * Patches the given shader string by adding a condition for indirect instancing support. * @param shader The shader code to modify. * @returns The modified shader code with the additional instancing condition. */ export function patchShader(shader) { return shader.replace('#ifdef USE_INSTANCING', '#if defined USE_INSTANCING || defined USE_INSTANCING_INDIRECT'); } ShaderChunk.project_vertex = patchShader(ShaderChunk.project_vertex); ShaderChunk.worldpos_vertex = patchShader(ShaderChunk.worldpos_vertex); ShaderChunk.defaultnormal_vertex = patchShader(ShaderChunk.defaultnormal_vertex); ShaderChunk.batching_pars_vertex = ShaderChunk.batching_pars_vertex.concat('\n#include <instanced_pars_vertex>'); ShaderChunk.color_pars_vertex = ShaderChunk.color_pars_vertex.concat('\n#include <instanced_color_pars_vertex>'); ShaderChunk['batching_vertex'] = ShaderChunk['batching_vertex'].concat('\n#include <instanced_vertex>'); ShaderChunk.skinning_pars_vertex = instanced_skinning_pars_vertex; // TODO FIX don't override like this, create a new shaderChunk to make it works also with older three.js version if (ShaderChunk['morphinstance_vertex']) { ShaderChunk['morphinstance_vertex'] = ShaderChunk['morphinstance_vertex'].replaceAll('gl_InstanceID', 'instanceIndex'); } // use 'getPatchedShader' function to make these example works // examples/jsm/modifiers/CurveModifier.js // examples/jsm/postprocessing/OutlinePass.js //# sourceMappingURL=ShaderChunk.js.map