Kaynağa Gözat

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

master
Palash Bansal 2 yıl önce
ebeveyn
işleme
3ae23c1d98
No account linked to committer's email address

+ 9
- 9
package-lock.json Dosyayı Görüntüle

@@ -1,18 +1,18 @@
{
"name": "threepipe",
"version": "0.0.9",
"version": "0.0.9-dev.1",
"lockfileVersion": 2,
"requires": true,
"packages": {
"": {
"name": "threepipe",
"version": "0.0.9",
"version": "0.0.9-dev.1",
"license": "Apache-2.0",
"dependencies": {
"@types/three": "https://github.com/repalash/three-ts-types/releases/download/v0.152.1011/package.tgz",
"@types/webxr": "^0.5.1",
"@types/wicg-file-system-access": "^2020.9.5",
"ts-browser-helpers": "^0.7.0"
"ts-browser-helpers": "^0.8.0"
},
"devDependencies": {
"@rollup/plugin-commonjs": "^25.0.0",
@@ -9542,9 +9542,9 @@
}
},
"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": {
"@types/wicg-file-system-access": "^2020.9.5"
}
@@ -17222,9 +17222,9 @@
"dev": true
},
"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": {
"@types/wicg-file-system-access": "^2020.9.5"
}

+ 2
- 2
package.json Dosyayı Görüntüle

@@ -103,12 +103,12 @@
"@types/three": "https://github.com/repalash/three-ts-types/releases/download/v0.152.1011/package.tgz",
"@types/webxr": "^0.5.1",
"@types/wicg-file-system-access": "^2020.9.5",
"ts-browser-helpers": "^0.7.0"
"ts-browser-helpers": "^0.8.0"
},
"//": {
"dependencies": {
"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-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",

+ 2
- 2
plugins/tweakpane-editor/package-lock.json Dosyayı Görüntüle

@@ -1,12 +1,12 @@
{
"name": "@threepipe/plugin-tweakpane-editor",
"version": "0.1.0",
"version": "0.1.1",
"lockfileVersion": 2,
"requires": true,
"packages": {
"": {
"name": "@threepipe/plugin-tweakpane-editor",
"version": "0.1.0",
"version": "0.1.1",
"license": "Apache-2.0",
"dependencies": {
"@threepipe/plugin-tweakpane": "file:./../tweakpane/src/",

+ 2
- 2
plugins/tweakpane/package-lock.json Dosyayı Görüntüle

@@ -1,12 +1,12 @@
{
"name": "@threepipe/plugin-tweakpane",
"version": "0.1.0",
"version": "0.1.1",
"lockfileVersion": 2,
"requires": true,
"packages": {
"": {
"name": "@threepipe/plugin-tweakpane",
"version": "0.1.0",
"version": "0.1.1",
"license": "Apache-2.0",
"dependencies": {
"threepipe": "file:./../../src/"

+ 7
- 5
src/materials/MaterialExtender.ts Dosyayı Görüntüle

@@ -1,5 +1,5 @@
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 {Object3D, Shader, WebGLRenderer} from 'three'
import {MaterialExtension} from './MaterialExtension'
@@ -27,7 +27,7 @@ export class MaterialExtender {
}
// Add extra uniforms
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
if (materialExtension.extraDefines)
@@ -50,7 +50,7 @@ export class MaterialExtender {
static CacheKeyForExtension(material: IMaterial, materialExtension: MaterialExtension): string {
let r = ''
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
}

@@ -96,14 +96,16 @@ export class MaterialExtender {
}
}

function updateMaterialDefines(defines: any, material: IMaterial) {
function updateMaterialDefines(defines: MaterialExtension['extraDefines'], material: IMaterial) {
if (!defines) return
if (!material.defines) {
console.warn('Material does not have defines', material) // todo: check when material.defines is undefined
material.defines = {}
}
let flag = false
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 (material.defines[key] !== undefined) {
delete material.defines[key]

+ 3
- 2
src/materials/MaterialExtension.ts Dosyayı Görüntüle

@@ -1,6 +1,7 @@
import {IUniform, Object3D, Shader, WebGLRenderer} from 'three'
import {IMaterial} from '../core'
import {UiObjectConfig} from 'uiconfig.js'
import {ValOrFunc} from 'ts-browser-helpers'

/**
* Material extension interface
@@ -10,12 +11,12 @@ export interface MaterialExtension{
/**
* Extra uniforms to copy to material
*/
extraUniforms?: {[uniform: string]: IUniform};
extraUniforms?: {[uniform: string]: ValOrFunc<IUniform>};

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

+ 4
- 0
src/viewer/ThreeViewer.ts Dosyayı Görüntüle

@@ -998,6 +998,10 @@ export class ThreeViewer extends EventDispatcher<IViewerEvent, IViewerEventTypes
})
}

/**
* Export the scene to a file (default: glb with viewer config) and return a blob
* @param options
*/
async exportScene(options?: ExportFileOptions): Promise<BlobExt | undefined> {
return this.assetManager.exporter.exportObject(this._scene.modelRoot, options)
}

Loading…
İptal
Kaydet