1 line
33 KiB
Plaintext
1 line
33 KiB
Plaintext
|
|
{"version":3,"file":"OutlinePass.cjs","sources":["../../src/postprocessing/OutlinePass.ts"],"sourcesContent":["import { Pass, FullScreenQuad } from './Pass'\nimport {\n AdditiveBlending,\n Camera,\n Color,\n DoubleSide,\n Line,\n Matrix4,\n Mesh,\n MeshDepthMaterial,\n NoBlending,\n Object3D,\n PerspectiveCamera,\n Points,\n RGBADepthPacking,\n Scene,\n ShaderMaterial,\n Sprite,\n Texture,\n UniformsUtils,\n Vector2,\n Vector3,\n WebGLRenderer,\n WebGLRenderTarget,\n} from 'three'\nimport { CopyShader } from '../shaders/CopyShader'\n\nclass OutlinePass extends Pass {\n public renderScene: Scene\n public renderCamera: Camera\n public selectedObjects: Object3D[]\n public visibleEdgeColor: Color\n public hiddenEdgeColor: Color\n public edgeGlow: number\n public usePatternTexture: boolean\n public edgeThickness: number\n public edgeStrength: number\n public downSampleRatio: number\n public pulsePeriod: number\n public resolution: Vector2\n public renderTargetMaskBuffer: WebGLRenderTarget\n public depthMaterial: MeshDepthMaterial\n public prepareMaskMaterial: ShaderMaterial\n public renderTargetDepthBuffer: WebGLRenderTarget\n public renderTargetMaskDownSampleBuffer: WebGLRenderTarget\n public renderTargetBlurBuffer1: WebGLRenderTarget\n public renderTargetBlurBuffer2: WebGLRenderTarget\n public edgeDetectionMaterial: ShaderMaterial\n public renderTargetEdgeBuffer1: WebGLRenderTarget\n public renderTargetEdgeBuffer2: WebGLRenderTarget\n public separableBlurMaterial1: ShaderMaterial\n public separableBlurMaterial2: ShaderMaterial\n public overlayMaterial: ShaderMaterial\n public materialCopy: ShaderMaterial\n public oldClearAlpha: number\n public fsQuad: FullScreenQuad\n public tempPulseColor1: Color\n public tempPulseColor2: Color\n public textureMatrix: Matrix4\n public patternTexture?: Texture\n\n private _visibilityCache: Map<Object3D, boolean>\n private _oldClearColor: Color\n\n public copyUniforms\n\n public BlurDirectionX = new Vector2(1.0, 0.0)\n public BlurDirectionY = new Vector2(0.0, 1.0)\n\n constructor(resolution: Vector2, scene: Scene, camera: Camera, selectedObjects?: Object3D[]) {\n super()\n\n this.renderScene = scene\n this.renderCamera = camera\n this.selectedObjects = selectedObjects !== undefined ? selectedObjects : []\n this.visibleEdgeColor = new Color(1, 1, 1)\n this.hiddenEdgeColor = new Color(0.1, 0.04, 0.02)\n this.edgeGlow = 0.0\n this.usePatternTexture = false\n this.edgeThickness = 1.0\n this.edgeStrength = 3.0\n this.downSampleRatio = 2\n this.pulsePeriod = 0\n\n this._visibilityCache = new Map()\n\n this.resolution = resolution !== undefined ? new Vector2(resolution.x, resolution.y) : new Vector2(256, 256)\n\n const resx = Math.round(this.resolution.x / this.downSampleRatio)\n const resy = Math.round(this.resolution.y / this.downSampleRatio)\n\n this.renderTargetMaskBuffer = new WebGLRenderTarget(this.resolution.x, this.resolution.y)\n this.renderTargetMaskBuffer.texture.name = 'OutlinePass.mask'\n this.renderTargetMaskBuffer.texture.generateMipmaps = false\n\n this.depthMaterial = new MeshDepthMaterial()\n this.depthMaterial.side = DoubleSide\n this.depthMaterial.depthPacking = RGBADepthPacking\n this.depthMaterial.blending = NoBlending\n\n this.prepareMaskMaterial = this.getPrepareMaskMaterial()\n this.prepareMaskMaterial.side = DoubleSide\n this.prepareMaskMaterial.fragmentShader = replaceDepthToViewZ(\n this.prepareMaskMaterial.fragmentShader,\n this.renderCamera as PerspectiveCamera,\n )\n\n this.renderTargetDepthBuffer = new WebGLRenderTarget(this.resolution.x, this.resolution.y)\n this.renderTargetDepthBuffer.texture.name = 'OutlinePass.depth'\n this.renderTargetDepthBuffer.texture.generateMipmaps = false\n\n this.renderTargetMaskDownSampleBuffer = new WebGLRenderTarget(resx, resy)\n this.renderTargetMaskDownSampleBuffer.texture.name = 'OutlinePass.depthDownSample'\n this.renderTargetMaskDownSampleBuffer.texture.generateM
|