diff --git a/packages/three-vrm-materials-mtoon/src/nodes/MToonLightingModel.ts b/packages/three-vrm-materials-mtoon/src/nodes/MToonLightingModel.ts index 9c7b35ef..26a3aa27 100644 --- a/packages/three-vrm-materials-mtoon/src/nodes/MToonLightingModel.ts +++ b/packages/three-vrm-materials-mtoon/src/nodes/MToonLightingModel.ts @@ -8,10 +8,11 @@ import { shadingShift, shadingToony, } from './immutableNodes'; +import { FnCompat } from './utils/FnCompat'; // TODO: 0% confidence about function types. -const linearstep = THREE.tslFn( +const linearstep = FnCompat( ({ a, b, @@ -30,7 +31,7 @@ const linearstep = THREE.tslFn( /** * Convert NdotL into toon shading factor using shadingShift and shadingToony */ -const getShading = THREE.tslFn(({ dotNL }: { dotNL: THREE.ShaderNodeObject }) => { +const getShading = FnCompat(({ dotNL }: { dotNL: THREE.ShaderNodeObject }) => { const shadow = 1.0; // TODO const feather = THREE.float(1.0).sub(shadingToony); @@ -48,7 +49,7 @@ const getShading = THREE.tslFn(({ dotNL }: { dotNL: THREE.ShaderNodeObject { + // COMPAT r168: `tslFn()` has been renamed to `Fn()` + // See: https://github.com/mrdoob/three.js/pull/29064 + const threeRevision = parseInt(THREE.REVISION, 10); + if (threeRevision >= 168) { + return (THREE as any).Fn(jsFunc); + } else { + return (THREE as any).tslFn(jsFunc); + } +};