UNPKG

threepipe

Version:

A 3D viewer framework built on top of three.js in TypeScript with a focus on quality rendering, modularity and extensibility.

79 lines (78 loc) 3.65 kB
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; var __metadata = (this && this.__metadata) || function (k, v) { if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); }; import { _testFinish, LoadingScreenPlugin, onChange, SSAAPlugin, ThreeViewer, uiFolderContainer, uiSlider, Vector2, } from 'threepipe'; import { TweakpaneUiPlugin } from '@threepipe/plugin-tweakpane'; import { UnrealBloomPass } from 'three/examples/jsm/postprocessing/UnrealBloomPass.js'; // @ts-expect-error todo fix ts import import { TemporalAAPlugin } from '@threepipe/webgi-plugins'; async function init() { const viewer = new ThreeViewer({ canvas: document.getElementById('mcanvas'), msaa: true, rgbm: false, // The pass from three.js doesn't support RGBM encoded render targets zPrepass: false, renderScale: 1, maxHDRIntensity: 100, dropzone: { addOptions: { disposeSceneObjects: true, }, }, plugins: [LoadingScreenPlugin, SSAAPlugin, TemporalAAPlugin], }); // Extend the pass to add UI and pipeline pass options let UnrealBloomPass2 = class UnrealBloomPass2 extends UnrealBloomPass { constructor() { super(...arguments); this.passId = 'unrealBloom'; this.after = ['render', 'progressive']; this.before = ['screen']; this.required = ['render']; } setDirty() { viewer.setDirty(); } }; __decorate([ uiSlider('Strength', [0, 5], 0.01), onChange(UnrealBloomPass2.prototype.setDirty), __metadata("design:type", Object) ], UnrealBloomPass2.prototype, "strength", void 0); __decorate([ uiSlider('Radius', [0, 1], 0.01), onChange(UnrealBloomPass2.prototype.setDirty), __metadata("design:type", Object) ], UnrealBloomPass2.prototype, "radius", void 0); __decorate([ uiSlider('Threshold', [0, 8], 0.01), onChange(UnrealBloomPass2.prototype.setDirty), __metadata("design:type", Object) ], UnrealBloomPass2.prototype, "threshold", void 0); UnrealBloomPass2 = __decorate([ uiFolderContainer('Unreal Bloom') ], UnrealBloomPass2); const bloomPass = new UnrealBloomPass2(new Vector2(window.innerWidth, window.innerHeight), 1., 0.5, 1.5); viewer.renderManager.registerPass(bloomPass); const ui = viewer.addPluginSync(new TweakpaneUiPlugin(true)); await viewer.setEnvironmentMap('https://threejs.org/examples/textures/equirectangular/venice_sunset_1k.hdr', { setBackground: true, }); const result = await viewer.load('https://threejs.org/examples/models/gltf/DamagedHelmet/glTF/DamagedHelmet.gltf', { autoCenter: true, autoScale: true, }); const model = result?.getObjectByName('node_damagedHelmet_-6514'); const materials = (model?.materials || []); ui.appendChild(bloomPass.uiConfig); for (const material of materials) { ui.appendChild(material.uiConfig); } } init().then(_testFinish);