| { | { | ||||
| "name": "threepipe", | "name": "threepipe", | ||||
| "version": "0.0.9", | |||||
| "version": "0.0.9-dev.1", | |||||
| "lockfileVersion": 2, | "lockfileVersion": 2, | ||||
| "requires": true, | "requires": true, | ||||
| "packages": { | "packages": { | ||||
| "": { | "": { | ||||
| "name": "threepipe", | "name": "threepipe", | ||||
| "version": "0.0.9", | |||||
| "version": "0.0.9-dev.1", | |||||
| "license": "Apache-2.0", | "license": "Apache-2.0", | ||||
| "dependencies": { | "dependencies": { | ||||
| "@types/three": "https://github.com/repalash/three-ts-types/releases/download/v0.152.1011/package.tgz", | "@types/three": "https://github.com/repalash/three-ts-types/releases/download/v0.152.1011/package.tgz", | ||||
| "@types/webxr": "^0.5.1", | "@types/webxr": "^0.5.1", | ||||
| "@types/wicg-file-system-access": "^2020.9.5", | "@types/wicg-file-system-access": "^2020.9.5", | ||||
| "ts-browser-helpers": "^0.7.0" | |||||
| "ts-browser-helpers": "^0.8.0" | |||||
| }, | }, | ||||
| "devDependencies": { | "devDependencies": { | ||||
| "@rollup/plugin-commonjs": "^25.0.0", | "@rollup/plugin-commonjs": "^25.0.0", | ||||
| } | } | ||||
| }, | }, | ||||
| "node_modules/ts-browser-helpers": { | "node_modules/ts-browser-helpers": { | ||||
| "version": "0.7.0", | |||||
| "resolved": "https://registry.npmjs.org/ts-browser-helpers/-/ts-browser-helpers-0.7.0.tgz", | |||||
| "integrity": "sha512-QCqBNN4PUfe6OkmdWbpBLg9MFqQds3eMwFnIStHxDPdeqTUiAeuMwCK5UpWXTqdTWY/8OvDBQEAbnzeYRl4kCA==", | |||||
| "version": "0.8.0", | |||||
| "resolved": "https://registry.npmjs.org/ts-browser-helpers/-/ts-browser-helpers-0.8.0.tgz", | |||||
| "integrity": "sha512-r7k6udt+tS/FZLwTUbzSgHdHQ56R/MD1oS2rFcEk8O4jKUTzuDVqlUoLX1EjJQYEBGMBI8TEyySTkuomxewZEw==", | |||||
| "dependencies": { | "dependencies": { | ||||
| "@types/wicg-file-system-access": "^2020.9.5" | "@types/wicg-file-system-access": "^2020.9.5" | ||||
| } | } | ||||
| "dev": true | "dev": true | ||||
| }, | }, | ||||
| "ts-browser-helpers": { | "ts-browser-helpers": { | ||||
| "version": "0.7.0", | |||||
| "resolved": "https://registry.npmjs.org/ts-browser-helpers/-/ts-browser-helpers-0.7.0.tgz", | |||||
| "integrity": "sha512-QCqBNN4PUfe6OkmdWbpBLg9MFqQds3eMwFnIStHxDPdeqTUiAeuMwCK5UpWXTqdTWY/8OvDBQEAbnzeYRl4kCA==", | |||||
| "version": "0.8.0", | |||||
| "resolved": "https://registry.npmjs.org/ts-browser-helpers/-/ts-browser-helpers-0.8.0.tgz", | |||||
| "integrity": "sha512-r7k6udt+tS/FZLwTUbzSgHdHQ56R/MD1oS2rFcEk8O4jKUTzuDVqlUoLX1EjJQYEBGMBI8TEyySTkuomxewZEw==", | |||||
| "requires": { | "requires": { | ||||
| "@types/wicg-file-system-access": "^2020.9.5" | "@types/wicg-file-system-access": "^2020.9.5" | ||||
| } | } |
| "@types/three": "https://github.com/repalash/three-ts-types/releases/download/v0.152.1011/package.tgz", | "@types/three": "https://github.com/repalash/three-ts-types/releases/download/v0.152.1011/package.tgz", | ||||
| "@types/webxr": "^0.5.1", | "@types/webxr": "^0.5.1", | ||||
| "@types/wicg-file-system-access": "^2020.9.5", | "@types/wicg-file-system-access": "^2020.9.5", | ||||
| "ts-browser-helpers": "^0.7.0" | |||||
| "ts-browser-helpers": "^0.8.0" | |||||
| }, | }, | ||||
| "//": { | "//": { | ||||
| "dependencies": { | "dependencies": { | ||||
| "uiconfig.js": "^0.0.6", | "uiconfig.js": "^0.0.6", | ||||
| "ts-browser-helpers": "^0.7.0", | |||||
| "ts-browser-helpers": "^0.8.0", | |||||
| "three": "https://github.com/repalash/three.js-modded/releases/download/v0.152.2012/package.tgz", | "three": "https://github.com/repalash/three.js-modded/releases/download/v0.152.2012/package.tgz", | ||||
| "three-f": "https://github.com/repalash/three.js-modded/archive/refs/tags/v0.152.2012.tar.gz", | "three-f": "https://github.com/repalash/three.js-modded/archive/refs/tags/v0.152.2012.tar.gz", | ||||
| "@types/three": "https://github.com/repalash/three-ts-types/releases/download/v0.152.1011/package.tgz", | "@types/three": "https://github.com/repalash/three-ts-types/releases/download/v0.152.1011/package.tgz", |
| { | { | ||||
| "name": "@threepipe/plugin-tweakpane-editor", | "name": "@threepipe/plugin-tweakpane-editor", | ||||
| "version": "0.1.0", | |||||
| "version": "0.1.1", | |||||
| "lockfileVersion": 2, | "lockfileVersion": 2, | ||||
| "requires": true, | "requires": true, | ||||
| "packages": { | "packages": { | ||||
| "": { | "": { | ||||
| "name": "@threepipe/plugin-tweakpane-editor", | "name": "@threepipe/plugin-tweakpane-editor", | ||||
| "version": "0.1.0", | |||||
| "version": "0.1.1", | |||||
| "license": "Apache-2.0", | "license": "Apache-2.0", | ||||
| "dependencies": { | "dependencies": { | ||||
| "@threepipe/plugin-tweakpane": "file:./../tweakpane/src/", | "@threepipe/plugin-tweakpane": "file:./../tweakpane/src/", |
| { | { | ||||
| "name": "@threepipe/plugin-tweakpane", | "name": "@threepipe/plugin-tweakpane", | ||||
| "version": "0.1.0", | |||||
| "version": "0.1.1", | |||||
| "lockfileVersion": 2, | "lockfileVersion": 2, | ||||
| "requires": true, | "requires": true, | ||||
| "packages": { | "packages": { | ||||
| "": { | "": { | ||||
| "name": "@threepipe/plugin-tweakpane", | "name": "@threepipe/plugin-tweakpane", | ||||
| "version": "0.1.0", | |||||
| "version": "0.1.1", | |||||
| "license": "Apache-2.0", | "license": "Apache-2.0", | ||||
| "dependencies": { | "dependencies": { | ||||
| "threepipe": "file:./../../src/" | "threepipe": "file:./../../src/" |
| import {IMaterial, IMaterialUserData} from '../core' | import {IMaterial, IMaterialUserData} from '../core' | ||||
| import {getOrCall} from 'ts-browser-helpers' | |||||
| import {getOrCall, objectMap} from 'ts-browser-helpers' | |||||
| import {shaderReplaceString} from '../utils/shader-helpers' | import {shaderReplaceString} from '../utils/shader-helpers' | ||||
| import {Object3D, Shader, WebGLRenderer} from 'three' | import {Object3D, Shader, WebGLRenderer} from 'three' | ||||
| import {MaterialExtension} from './MaterialExtension' | import {MaterialExtension} from './MaterialExtension' | ||||
| } | } | ||||
| // Add extra uniforms | // Add extra uniforms | ||||
| if (materialExtension.extraUniforms) { | if (materialExtension.extraUniforms) { | ||||
| shader.uniforms = Object.assign(shader.uniforms, materialExtension.extraUniforms) | |||||
| shader.uniforms = Object.assign(shader.uniforms, objectMap(materialExtension.extraUniforms, (v)=>getOrCall(v, shader) || {value: null})) | |||||
| } | } | ||||
| // Add extra defines and set needsUpdate to true if needed | // Add extra defines and set needsUpdate to true if needed | ||||
| if (materialExtension.extraDefines) | if (materialExtension.extraDefines) | ||||
| static CacheKeyForExtension(material: IMaterial, materialExtension: MaterialExtension): string { | static CacheKeyForExtension(material: IMaterial, materialExtension: MaterialExtension): string { | ||||
| let r = '' | let r = '' | ||||
| if (materialExtension.computeCacheKey) r += getOrCall(materialExtension.computeCacheKey, material) | if (materialExtension.computeCacheKey) r += getOrCall(materialExtension.computeCacheKey, material) | ||||
| if (materialExtension.extraDefines) r += Object.values(materialExtension.extraDefines).join('') | |||||
| if (materialExtension.extraDefines) r += Object.values(materialExtension.extraDefines).map(v=>getOrCall(v) ?? '').join('') | |||||
| return r | return r | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| function updateMaterialDefines(defines: any, material: IMaterial) { | |||||
| function updateMaterialDefines(defines: MaterialExtension['extraDefines'], material: IMaterial) { | |||||
| if (!defines) return | |||||
| if (!material.defines) { | if (!material.defines) { | ||||
| console.warn('Material does not have defines', material) // todo: check when material.defines is undefined | console.warn('Material does not have defines', material) // todo: check when material.defines is undefined | ||||
| material.defines = {} | material.defines = {} | ||||
| } | } | ||||
| let flag = false | let flag = false | ||||
| const entries = Object.entries(defines) | const entries = Object.entries(defines) | ||||
| for (const [key, val] of entries) { | |||||
| for (const [key, valF] of entries) { | |||||
| const val = getOrCall(valF) | |||||
| if (val === undefined) { | if (val === undefined) { | ||||
| if (material.defines[key] !== undefined) { | if (material.defines[key] !== undefined) { | ||||
| delete material.defines[key] | delete material.defines[key] |
| import {IUniform, Object3D, Shader, WebGLRenderer} from 'three' | import {IUniform, Object3D, Shader, WebGLRenderer} from 'three' | ||||
| import {IMaterial} from '../core' | import {IMaterial} from '../core' | ||||
| import {UiObjectConfig} from 'uiconfig.js' | import {UiObjectConfig} from 'uiconfig.js' | ||||
| import {ValOrFunc} from 'ts-browser-helpers' | |||||
| /** | /** | ||||
| * Material extension interface | * Material extension interface | ||||
| /** | /** | ||||
| * Extra uniforms to copy to material | * Extra uniforms to copy to material | ||||
| */ | */ | ||||
| extraUniforms?: {[uniform: string]: IUniform}; | |||||
| extraUniforms?: {[uniform: string]: ValOrFunc<IUniform>}; | |||||
| /** | /** | ||||
| * Extra defines to copy to material | * Extra defines to copy to material | ||||
| */ | */ | ||||
| extraDefines?: Record<string, number|string>; | |||||
| extraDefines?: Record<string, ValOrFunc<number|string|undefined>>; | |||||
| /** | /** | ||||
| * Custom callback to extend/modify/replace shader code and other shader properties | * Custom callback to extend/modify/replace shader code and other shader properties |
| }) | }) | ||||
| } | } | ||||
| /** | |||||
| * Export the scene to a file (default: glb with viewer config) and return a blob | |||||
| * @param options | |||||
| */ | |||||
| async exportScene(options?: ExportFileOptions): Promise<BlobExt | undefined> { | async exportScene(options?: ExportFileOptions): Promise<BlobExt | undefined> { | ||||
| return this.assetManager.exporter.exportObject(this._scene.modelRoot, options) | return this.assetManager.exporter.exportObject(this._scene.modelRoot, options) | ||||
| } | } |