Bläddra i källkod

Support functions in extraUniforms and extraDefines in MaterialExtension, package update.

master
Palash Bansal 2 år sedan
förälder
incheckning
3ae23c1d98
Inget konto är kopplat till bidragsgivarens mejladress

+ 9
- 9
package-lock.json Visa fil

{ {
"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"
} }

+ 2
- 2
package.json Visa fil

"@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",

+ 2
- 2
plugins/tweakpane-editor/package-lock.json Visa fil

{ {
"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/",

+ 2
- 2
plugins/tweakpane/package-lock.json Visa fil

{ {
"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/"

+ 7
- 5
src/materials/MaterialExtender.ts Visa fil

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]

+ 3
- 2
src/materials/MaterialExtension.ts Visa fil

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

+ 4
- 0
src/viewer/ThreeViewer.ts Visa fil

}) })
} }


/**
* 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)
} }

Laddar…
Avbryt
Spara