@pixiv/three-vrm 3.0.0 → 3.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -1
- package/lib/nodes/index.cjs +2 -2
- package/lib/nodes/index.min.cjs +1 -1
- package/lib/nodes/index.module.js +2 -2
- package/lib/nodes/index.module.min.js +1 -1
- package/lib/three-vrm.cjs +217 -90
- package/lib/three-vrm.min.cjs +10 -10
- package/lib/three-vrm.module.js +221 -94
- package/lib/three-vrm.module.min.js +10 -10
- package/package.json +8 -8
package/README.md
CHANGED
|
@@ -102,7 +102,8 @@ To use three-vrm with WebGPURenderer, specify the WebGPU-compatible `MToonNodeMa
|
|
|
102
102
|
The NodeMaterial system of Three.js is still under development, so we may break compatibility with older versions of Three.js more frequently than other parts of three-vrm.
|
|
103
103
|
|
|
104
104
|
```js
|
|
105
|
-
import {
|
|
105
|
+
import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js';
|
|
106
|
+
import { MToonMaterialLoaderPlugin, VRMLoaderPlugin } from '@pixiv/three-vrm';
|
|
106
107
|
import { MToonNodeMaterial } from '@pixiv/three-vrm/nodes';
|
|
107
108
|
|
|
108
109
|
// ... Setup renderer, camera, scene ...
|
package/lib/nodes/index.cjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* @pixiv/three-vrm v3.
|
|
2
|
+
* @pixiv/three-vrm v3.1.0
|
|
3
3
|
* VRM file loader for three.js.
|
|
4
4
|
*
|
|
5
5
|
* Copyright (c) 2019-2024 pixiv Inc.
|
|
@@ -505,7 +505,7 @@ var MToonNodeMaterial = class extends THREE7.NodeMaterial {
|
|
|
505
505
|
}
|
|
506
506
|
};
|
|
507
507
|
/*!
|
|
508
|
-
* @pixiv/three-vrm-materials-mtoon v3.
|
|
508
|
+
* @pixiv/three-vrm-materials-mtoon v3.1.0
|
|
509
509
|
* MToon (toon material) module for @pixiv/three-vrm
|
|
510
510
|
*
|
|
511
511
|
* Copyright (c) 2019-2024 pixiv Inc.
|
package/lib/nodes/index.min.cjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/*! (c) 2019-2024 pixiv Inc. - https://github.com/pixiv/three-vrm/blob/release/LICENSE */
|
|
2
2
|
"use strict";var X=Object.create;var T=Object.defineProperty;var z=Object.getOwnPropertyDescriptor;var B=Object.getOwnPropertyNames;var j=Object.getPrototypeOf,q=Object.prototype.hasOwnProperty;var K=(t,e)=>{for(var o in e)T(t,o,{get:e[o],enumerable:!0})},A=(t,e,o,a)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of B(e))!q.call(t,n)&&n!==o&&T(t,n,{get:()=>e[n],enumerable:!(a=z(e,n))||a.enumerable});return t};var d=(t,e,o)=>(o=t!=null?X(j(t)):{},A(e||!t||!t.__esModule?T(o,"default",{value:t,enumerable:!0}):o,t)),Z=t=>A(T({},"__esModule",{value:!0}),t);var Ft={};K(Ft,{MToonAnimatedUVNode:()=>b,MToonLightingModel:()=>Y,MToonNodeMaterial:()=>St});module.exports=Z(Ft);var U=d(require("three"),1),s=d(require("three/webgpu"),1),r=d(require("three/webgpu"),1),l=d(require("three/webgpu"),1),m=d(require("three/webgpu"),1),i=d(require("three/webgpu"),1),h=d(require("three/webgpu"),1);var V=parseInt(U.REVISION,10);V<167&&console.warn(`MToonNodeMaterial requires Three.js r167 or higher (You are using r${V}). This would not work correctly.`);var $=r.materialReference("color","color"),G=r.materialReference("map","texture"),J=r.materialReference("normalMap","texture"),Q=r.materialReference("normalScale","vec2"),tt=r.materialReference("emissive","color"),et=r.materialReference("emissiveIntensity","float"),it=r.materialReference("emissiveMap","texture"),ot=r.materialReference("shadeColorFactor","color"),rt=r.materialReference("shadingShiftFactor","float"),W=r.materialReference("shadeMultiplyTexture","texture"),at=r.materialReference("shadeMultiplyTextureScale","float"),lt=r.materialReference("shadingToonyFactor","float"),nt=r.materialReference("rimLightingMixFactor","float"),st=r.materialReference("rimMultiplyTexture","texture"),mt=r.materialReference("matcapFactor","color"),ut=r.materialReference("matcapTexture","texture"),ht=r.materialReference("parametricRimColorFactor","color"),dt=r.materialReference("parametricRimLiftFactor","float"),ct=r.materialReference("parametricRimFresnelPowerFactor","float"),pt=r.materialReference("outlineWidthMultiplyTexture","texture"),Et=r.materialReference("outlineWidthFactor","float"),O=r.materialReference("outlineColorFactor","color"),ft=r.materialReference("outlineLightingMixFactor","float"),Rt=r.materialReference("uvAnimationMaskTexture","texture"),Tt=r.materialReference("uvAnimationScrollXOffset","float"),vt=r.materialReference("uvAnimationScrollYOffset","float"),Nt=r.materialReference("uvAnimationRotationPhase","float"),b=class extends s.TempNode{constructor(t){super("vec2"),this.hasMaskTexture=t}setup(){let t=1;this.hasMaskTexture&&(t=s.vec4(Rt).context({getUV:()=>s.uv()}).r);let e=s.uv(),o=Nt.mul(t),a=s.cos(o),n=s.sin(o);e=e.sub(s.vec2(.5,.5)),e=e.mul(s.mat2(a,n,n.negate(),a)),e=e.add(s.vec2(.5,.5));let u=s.vec2(Tt,vt).mul(t);return e=e.add(u),e.temp("AnimatedUV")}},I=m.nodeImmutable(m.PropertyNode,"vec3").temp("ShadeColor"),D=m.nodeImmutable(m.PropertyNode,"float").temp("ShadingShift"),k=m.nodeImmutable(m.PropertyNode,"float").temp("ShadingToony"),v=m.nodeImmutable(m.PropertyNode,"float").temp("RimLightingMix"),N=m.nodeImmutable(m.PropertyNode,"vec3").temp("RimMultiply"),g=m.nodeImmutable(m.PropertyNode,"vec3").temp("matcap"),H=m.nodeImmutable(m.PropertyNode,"vec3").temp("ParametricRim"),gt=l.tslFn(({a:t,b:e,t:o})=>{let a=o.sub(t),n=e.sub(t);return a.div(n).clamp()}),Ht=l.tslFn(({dotNL:t})=>{let o=l.float(1).sub(k),a=t.add(D);return a=gt({a:o.negate(),b:o,t:a}),a=a.mul(1),a}),Mt=l.tslFn(({shading:t,lightColor:e})=>{let o=l.mix(I,l.diffuseColor,t);return e.mul(l.BRDF_Lambert({diffuseColor:o}))}),Y=class extends l.LightingModel{constructor(){super()}direct({lightDirection:t,lightColor:e,reflectedLight:o}){let a=l.transformedNormalView.dot(t).clamp(-1,1),n=Ht({dotNL:a});o.directDiffuse.assign(o.directDiffuse.add(Mt({shading:n,lightColor:e}))),o.directSpecular.assign(o.directSpecular.add(H.add(g).mul(N).mul(l.mix(l.vec3(0),l.BRDF_Lambert({diffuseColor:e}),v))))}indirect(t){this.indirectDiffuse(t),this.indirectSpecular(t)}indirectDiffuse({irradiance:t,reflectedLight:e}){e.indirectDiffuse.assign(e.indirectDiffuse.add(t.mul(l.BRDF_Lambert({diffuseColor:l.diffuseColor}))))}indirectSpecular({reflectedLight:t}){t.indirectSpecular.assign(t.indirectSpecular.add(H.add(g).mul(N).mul(l.mix(l.vec3(1),l.vec3(0),v))))}},f={None:"none",WorldCoordinates:"worldCoordinates",ScreenCoordinates:"screenCoordinates"},xt=h.tslFn(({parametricRimLift:t,parametricRimFresnelPower:e,parametricRimColor:o})=>{let a=h.modelViewPosition.normalize(),n=h.transformedNormalView.dot(a.negate());return h.float(1).sub(n).add(t).clamp().pow(e).mul(o)}),St=class extends i.NodeMaterial{customProgramCacheKey(){let t=super.customProgramCacheKey();return t+=`isOutline:${this.isOutline},`,t}get isMToonNodeMaterial(){return!0}constructor(t={}){super(),t.transparentWithZWrite&&(t.depthWrite=!0),delete t.transparentWithZWrite,delete t.giEqualizationFactor,delete t.v0CompatShade,delete t.debugMode,this.emissiveNode=null,this.lights=!0,this.color=new i.Color(1,1,1),this.map=null,this.emissive=new i.Color(0,0,0),this.emissiveIntensity=1,this.emissiveMap=null,this.normalMap=null,this.normalScale=new i.Vector2(1,1),this.shadeColorFactor=new i.Color(0,0,0),this.shadeMultiplyTexture=null,this.shadingShiftFactor=0,this.shadingShiftTexture=null,this.shadingShiftTextureScale=1,this.shadingToonyFactor=.9,this.rimLightingMixFactor=1,this.rimMultiplyTexture=null,this.matcapFactor=new i.Color(1,1,1),this.matcapTexture=null,this.parametricRimColorFactor=new i.Color(0,0,0),this.parametricRimLiftFactor=0,this.parametricRimFresnelPowerFactor=5,this.outlineWidthMode=f.None,this.outlineWidthMultiplyTexture=null,this.outlineWidthFactor=0,this.outlineColorFactor=new i.Color(0,0,0),this.outlineLightingMixFactor=1,this.uvAnimationScrollXSpeedFactor=0,this.uvAnimationScrollYSpeedFactor=0,this.uvAnimationRotationSpeedFactor=0,this.uvAnimationMaskTexture=null,this.shadeColorNode=null,this.shadingShiftNode=null,this.shadingToonyNode=null,this.rimLightingMixNode=null,this.rimMultiplyNode=null,this.matcapNode=null,this.parametricRimColorNode=null,this.parametricRimLiftNode=null,this.parametricRimFresnelPowerNode=null,this.uvAnimationScrollXOffset=0,this.uvAnimationScrollYOffset=0,this.uvAnimationRotationPhase=0,this.isOutline=!1,this._animatedUVNode=null,this.setValues(t)}setupLightingModel(){return new Y}setup(t){var e;this._animatedUVNode=new b((e=this.uvAnimationMaskTexture&&this.uvAnimationMaskTexture.isTexture===!0)!=null?e:!1),super.setup(t)}setupDiffuseColor(t){let e=null;if(this.colorNode==null){if(e=$,this.map&&this.map.isTexture===!0){let o=G.context({getUV:()=>this._animatedUVNode});e=e.mul(o)}this.colorNode=e}this.vertexColors===!0&&t.geometry.hasAttribute("color")&&(console.warn("MToonNodeMaterial: MToon ignores vertex colors. Consider using a model without vertex colors instead."),this.vertexColors=!1),super.setupDiffuseColor(t),parseInt(i.REVISION,10)<166&&this.transparent===!1&&this.blending===i.NormalBlending&&this.alphaToCoverage===!1&&i.diffuseColor.a.assign(1),this.colorNode===e&&(this.colorNode=null)}setupVariants(){I.assign(this._setupShadeColorNode()),D.assign(this._setupShadingShiftNode()),k.assign(this._setupShadingToonyNode()),v.assign(this._setupRimLightingMixNode()),N.assign(this._setupRimMultiplyNode()),g.assign(this._setupMatcapNode()),H.assign(this._setupParametricRimNode())}setupNormal(t){let e=this.normalNode;if(this.normalNode==null){if(this.normalNode=i.materialNormal,this.normalMap&&this.normalMap.isTexture===!0){let o=J.context({getUV:()=>this._animatedUVNode});this.normalNode=o.normalMap(Q)}this.isOutline&&(this.normalNode=this.normalNode.negate())}super.setupNormal(t),this.normalNode=e}setupLighting(t){let e=null;if(this.emissiveNode==null){if(e=tt.mul(et),this.emissiveMap&&this.emissiveMap.isTexture===!0){let a=it.context({getUV:()=>this._animatedUVNode});e=e.mul(a)}this.emissiveNode=e}let o=super.setupLighting(t);return this.emissiveNode===e&&(this.emissiveNode=null),o}setupOutput(t,e){return this.isOutline&&this.outlineWidthMode!==f.None&&(e=i.vec4(i.mix(O,e.xyz.mul(O),ft),e.w)),super.setupOutput(t,e)}setupPosition(t){var e,o;let a=this.positionNode;if(this.isOutline&&this.outlineWidthMode!==f.None){(e=this.positionNode)!=null||(this.positionNode=i.positionLocal);let u=i.normalLocal.normalize(),c=Et;if(this.outlineWidthMultiplyTexture&&this.outlineWidthMultiplyTexture.isTexture===!0){let p=pt.context({getUV:()=>this._animatedUVNode});c=c.mul(p)}let R=i.length(i.modelNormalMatrix.mul(u)),E=c.mul(R).mul(u);if(this.outlineWidthMode===f.WorldCoordinates)this.positionNode=this.positionNode.add(E);else if(this.outlineWidthMode===f.ScreenCoordinates){let p=i.cameraProjectionMatrix.element(1).element(1);this.positionNode=this.positionNode.add(E.div(p).mul(i.positionView.z.negate()))}(o=this.positionNode)!=null||(this.positionNode=i.positionLocal)}let n=super.setupPosition(t);return n.z.add(n.w.mul(1e-6)),this.positionNode=a,n}copy(t){var e,o,a,n,u,c,R,E,p,M,x,S,F,y,C,_,L,w,P;return this.color.copy(t.color),this.map=(e=t.map)!=null?e:null,this.emissive.copy(t.emissive),this.emissiveIntensity=t.emissiveIntensity,this.emissiveMap=(o=t.emissiveMap)!=null?o:null,this.normalMap=(a=t.normalMap)!=null?a:null,this.normalScale.copy(t.normalScale),this.shadeColorFactor.copy(t.shadeColorFactor),this.shadeMultiplyTexture=(n=t.shadeMultiplyTexture)!=null?n:null,this.shadingShiftFactor=t.shadingShiftFactor,this.shadingShiftTexture=(u=t.shadingShiftTexture)!=null?u:null,this.shadingShiftTextureScale=t.shadingShiftTextureScale,this.shadingToonyFactor=t.shadingToonyFactor,this.rimLightingMixFactor=t.rimLightingMixFactor,this.rimMultiplyTexture=(c=t.rimMultiplyTexture)!=null?c:null,this.matcapFactor.copy(t.matcapFactor),this.matcapTexture=(R=t.matcapTexture)!=null?R:null,this.parametricRimColorFactor.copy(t.parametricRimColorFactor),this.parametricRimLiftFactor=t.parametricRimLiftFactor,this.parametricRimFresnelPowerFactor=t.parametricRimFresnelPowerFactor,this.outlineWidthMode=t.outlineWidthMode,this.outlineWidthMultiplyTexture=(E=t.outlineWidthMultiplyTexture)!=null?E:null,this.outlineWidthFactor=t.outlineWidthFactor,this.outlineColorFactor.copy(t.outlineColorFactor),this.outlineLightingMixFactor=t.outlineLightingMixFactor,this.uvAnimationScrollXSpeedFactor=t.uvAnimationScrollXSpeedFactor,this.uvAnimationScrollYSpeedFactor=t.uvAnimationScrollYSpeedFactor,this.uvAnimationRotationSpeedFactor=t.uvAnimationRotationSpeedFactor,this.uvAnimationMaskTexture=(p=t.uvAnimationMaskTexture)!=null?p:null,this.shadeColorNode=(M=t.shadeColorNode)!=null?M:null,this.shadingShiftNode=(x=t.shadingShiftNode)!=null?x:null,this.shadingToonyNode=(S=t.shadingToonyNode)!=null?S:null,this.rimLightingMixNode=(F=t.rimLightingMixNode)!=null?F:null,this.rimMultiplyNode=(y=t.rimMultiplyNode)!=null?y:null,this.matcapNode=(C=t.matcapNode)!=null?C:null,this.parametricRimColorNode=(_=t.parametricRimColorNode)!=null?_:null,this.parametricRimLiftNode=(L=t.parametricRimLiftNode)!=null?L:null,this.parametricRimFresnelPowerNode=(w=t.parametricRimFresnelPowerNode)!=null?w:null,this.isOutline=(P=t.isOutline)!=null?P:null,super.copy(t)}update(t){this.uvAnimationScrollXOffset+=t*this.uvAnimationScrollXSpeedFactor,this.uvAnimationScrollYOffset+=t*this.uvAnimationScrollYSpeedFactor,this.uvAnimationRotationPhase+=t*this.uvAnimationRotationSpeedFactor}_setupShadeColorNode(){if(this.shadeColorNode!=null)return i.vec3(this.shadeColorNode);let t=ot;if(this.shadeMultiplyTexture&&this.shadeMultiplyTexture.isTexture===!0){let e=W.context({getUV:()=>this._animatedUVNode});t=t.mul(e)}return t}_setupShadingShiftNode(){if(this.shadingShiftNode!=null)return i.float(this.shadingShiftNode);let t=rt;if(this.shadingShiftTexture&&this.shadingShiftTexture.isTexture===!0){let e=W.context({getUV:()=>this._animatedUVNode});t=t.add(e.mul(at))}return t}_setupShadingToonyNode(){return this.shadingToonyNode!=null?i.float(this.shadingToonyNode):lt}_setupRimLightingMixNode(){return this.rimLightingMixNode!=null?i.float(this.rimLightingMixNode):nt}_setupRimMultiplyNode(){return this.rimMultiplyNode!=null?i.vec3(this.rimMultiplyNode):this.rimMultiplyTexture&&this.rimMultiplyTexture.isTexture===!0?st.context({getUV:()=>this._animatedUVNode}):i.vec3(1)}_setupMatcapNode(){return this.matcapNode!=null?i.vec3(this.matcapNode):this.matcapTexture&&this.matcapTexture.isTexture===!0?ut.context({getUV:()=>i.matcapUV.mul(1,-1).add(0,1)}).mul(mt):i.vec3(0)}_setupParametricRimNode(){let t=this.parametricRimColorNode!=null?i.vec3(this.parametricRimColorNode):ht,e=this.parametricRimLiftNode!=null?i.float(this.parametricRimLiftNode):dt,o=this.parametricRimFresnelPowerNode!=null?i.float(this.parametricRimFresnelPowerNode):ct;return xt({parametricRimLift:e,parametricRimFresnelPower:o,parametricRimColor:t})}};
|
|
3
3
|
/*!
|
|
4
|
-
* @pixiv/three-vrm-materials-mtoon v3.
|
|
4
|
+
* @pixiv/three-vrm-materials-mtoon v3.1.0
|
|
5
5
|
* MToon (toon material) module for @pixiv/three-vrm
|
|
6
6
|
*
|
|
7
7
|
* Copyright (c) 2019-2024 pixiv Inc.
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* @pixiv/three-vrm v3.
|
|
2
|
+
* @pixiv/three-vrm v3.1.0
|
|
3
3
|
* VRM file loader for three.js.
|
|
4
4
|
*
|
|
5
5
|
* Copyright (c) 2019-2024 pixiv Inc.
|
|
@@ -473,7 +473,7 @@ export {
|
|
|
473
473
|
MToonNodeMaterial
|
|
474
474
|
};
|
|
475
475
|
/*!
|
|
476
|
-
* @pixiv/three-vrm-materials-mtoon v3.
|
|
476
|
+
* @pixiv/three-vrm-materials-mtoon v3.1.0
|
|
477
477
|
* MToon (toon material) module for @pixiv/three-vrm
|
|
478
478
|
*
|
|
479
479
|
* Copyright (c) 2019-2024 pixiv Inc.
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/*! (c) 2019-2024 pixiv Inc. - https://github.com/pixiv/three-vrm/blob/release/LICENSE */
|
|
2
2
|
import*as V from"three";import*as n from"three/webgpu";import*as r from"three/webgpu";import*as a from"three/webgpu";import*as s from"three/webgpu";import*as i from"three/webgpu";import*as h from"three/webgpu";var w=parseInt(V.REVISION,10);w<167&&console.warn(`MToonNodeMaterial requires Three.js r167 or higher (You are using r${w}). This would not work correctly.`);var b=r.materialReference("color","color"),I=r.materialReference("map","texture"),D=r.materialReference("normalMap","texture"),k=r.materialReference("normalScale","vec2"),Y=r.materialReference("emissive","color"),X=r.materialReference("emissiveIntensity","float"),z=r.materialReference("emissiveMap","texture"),B=r.materialReference("shadeColorFactor","color"),j=r.materialReference("shadingShiftFactor","float"),P=r.materialReference("shadeMultiplyTexture","texture"),q=r.materialReference("shadeMultiplyTextureScale","float"),K=r.materialReference("shadingToonyFactor","float"),Z=r.materialReference("rimLightingMixFactor","float"),$=r.materialReference("rimMultiplyTexture","texture"),G=r.materialReference("matcapFactor","color"),J=r.materialReference("matcapTexture","texture"),Q=r.materialReference("parametricRimColorFactor","color"),tt=r.materialReference("parametricRimLiftFactor","float"),et=r.materialReference("parametricRimFresnelPowerFactor","float"),it=r.materialReference("outlineWidthMultiplyTexture","texture"),ot=r.materialReference("outlineWidthFactor","float"),A=r.materialReference("outlineColorFactor","color"),rt=r.materialReference("outlineLightingMixFactor","float"),at=r.materialReference("uvAnimationMaskTexture","texture"),lt=r.materialReference("uvAnimationScrollXOffset","float"),nt=r.materialReference("uvAnimationScrollYOffset","float"),st=r.materialReference("uvAnimationRotationPhase","float"),mt=class extends n.TempNode{constructor(t){super("vec2"),this.hasMaskTexture=t}setup(){let t=1;this.hasMaskTexture&&(t=n.vec4(at).context({getUV:()=>n.uv()}).r);let e=n.uv(),o=st.mul(t),l=n.cos(o),m=n.sin(o);e=e.sub(n.vec2(.5,.5)),e=e.mul(n.mat2(l,m,m.negate(),l)),e=e.add(n.vec2(.5,.5));let u=n.vec2(lt,nt).mul(t);return e=e.add(u),e.temp("AnimatedUV")}},W=s.nodeImmutable(s.PropertyNode,"vec3").temp("ShadeColor"),O=s.nodeImmutable(s.PropertyNode,"float").temp("ShadingShift"),U=s.nodeImmutable(s.PropertyNode,"float").temp("ShadingToony"),R=s.nodeImmutable(s.PropertyNode,"float").temp("RimLightingMix"),T=s.nodeImmutable(s.PropertyNode,"vec3").temp("RimMultiply"),v=s.nodeImmutable(s.PropertyNode,"vec3").temp("matcap"),N=s.nodeImmutable(s.PropertyNode,"vec3").temp("ParametricRim"),ut=a.tslFn(({a:t,b:e,t:o})=>{let l=o.sub(t),m=e.sub(t);return l.div(m).clamp()}),ht=a.tslFn(({dotNL:t})=>{let o=a.float(1).sub(U),l=t.add(O);return l=ut({a:o.negate(),b:o,t:l}),l=l.mul(1),l}),dt=a.tslFn(({shading:t,lightColor:e})=>{let o=a.mix(W,a.diffuseColor,t);return e.mul(a.BRDF_Lambert({diffuseColor:o}))}),ct=class extends a.LightingModel{constructor(){super()}direct({lightDirection:t,lightColor:e,reflectedLight:o}){let l=a.transformedNormalView.dot(t).clamp(-1,1),m=ht({dotNL:l});o.directDiffuse.assign(o.directDiffuse.add(dt({shading:m,lightColor:e}))),o.directSpecular.assign(o.directSpecular.add(N.add(v).mul(T).mul(a.mix(a.vec3(0),a.BRDF_Lambert({diffuseColor:e}),R))))}indirect(t){this.indirectDiffuse(t),this.indirectSpecular(t)}indirectDiffuse({irradiance:t,reflectedLight:e}){e.indirectDiffuse.assign(e.indirectDiffuse.add(t.mul(a.BRDF_Lambert({diffuseColor:a.diffuseColor}))))}indirectSpecular({reflectedLight:t}){t.indirectSpecular.assign(t.indirectSpecular.add(N.add(v).mul(T).mul(a.mix(a.vec3(1),a.vec3(0),R))))}},E={None:"none",WorldCoordinates:"worldCoordinates",ScreenCoordinates:"screenCoordinates"},pt=h.tslFn(({parametricRimLift:t,parametricRimFresnelPower:e,parametricRimColor:o})=>{let l=h.modelViewPosition.normalize(),m=h.transformedNormalView.dot(l.negate());return h.float(1).sub(m).add(t).clamp().pow(e).mul(o)}),Et=class extends i.NodeMaterial{customProgramCacheKey(){let t=super.customProgramCacheKey();return t+=`isOutline:${this.isOutline},`,t}get isMToonNodeMaterial(){return!0}constructor(t={}){super(),t.transparentWithZWrite&&(t.depthWrite=!0),delete t.transparentWithZWrite,delete t.giEqualizationFactor,delete t.v0CompatShade,delete t.debugMode,this.emissiveNode=null,this.lights=!0,this.color=new i.Color(1,1,1),this.map=null,this.emissive=new i.Color(0,0,0),this.emissiveIntensity=1,this.emissiveMap=null,this.normalMap=null,this.normalScale=new i.Vector2(1,1),this.shadeColorFactor=new i.Color(0,0,0),this.shadeMultiplyTexture=null,this.shadingShiftFactor=0,this.shadingShiftTexture=null,this.shadingShiftTextureScale=1,this.shadingToonyFactor=.9,this.rimLightingMixFactor=1,this.rimMultiplyTexture=null,this.matcapFactor=new i.Color(1,1,1),this.matcapTexture=null,this.parametricRimColorFactor=new i.Color(0,0,0),this.parametricRimLiftFactor=0,this.parametricRimFresnelPowerFactor=5,this.outlineWidthMode=E.None,this.outlineWidthMultiplyTexture=null,this.outlineWidthFactor=0,this.outlineColorFactor=new i.Color(0,0,0),this.outlineLightingMixFactor=1,this.uvAnimationScrollXSpeedFactor=0,this.uvAnimationScrollYSpeedFactor=0,this.uvAnimationRotationSpeedFactor=0,this.uvAnimationMaskTexture=null,this.shadeColorNode=null,this.shadingShiftNode=null,this.shadingToonyNode=null,this.rimLightingMixNode=null,this.rimMultiplyNode=null,this.matcapNode=null,this.parametricRimColorNode=null,this.parametricRimLiftNode=null,this.parametricRimFresnelPowerNode=null,this.uvAnimationScrollXOffset=0,this.uvAnimationScrollYOffset=0,this.uvAnimationRotationPhase=0,this.isOutline=!1,this._animatedUVNode=null,this.setValues(t)}setupLightingModel(){return new ct}setup(t){var e;this._animatedUVNode=new mt((e=this.uvAnimationMaskTexture&&this.uvAnimationMaskTexture.isTexture===!0)!=null?e:!1),super.setup(t)}setupDiffuseColor(t){let e=null;if(this.colorNode==null){if(e=b,this.map&&this.map.isTexture===!0){let o=I.context({getUV:()=>this._animatedUVNode});e=e.mul(o)}this.colorNode=e}this.vertexColors===!0&&t.geometry.hasAttribute("color")&&(console.warn("MToonNodeMaterial: MToon ignores vertex colors. Consider using a model without vertex colors instead."),this.vertexColors=!1),super.setupDiffuseColor(t),parseInt(i.REVISION,10)<166&&this.transparent===!1&&this.blending===i.NormalBlending&&this.alphaToCoverage===!1&&i.diffuseColor.a.assign(1),this.colorNode===e&&(this.colorNode=null)}setupVariants(){W.assign(this._setupShadeColorNode()),O.assign(this._setupShadingShiftNode()),U.assign(this._setupShadingToonyNode()),R.assign(this._setupRimLightingMixNode()),T.assign(this._setupRimMultiplyNode()),v.assign(this._setupMatcapNode()),N.assign(this._setupParametricRimNode())}setupNormal(t){let e=this.normalNode;if(this.normalNode==null){if(this.normalNode=i.materialNormal,this.normalMap&&this.normalMap.isTexture===!0){let o=D.context({getUV:()=>this._animatedUVNode});this.normalNode=o.normalMap(k)}this.isOutline&&(this.normalNode=this.normalNode.negate())}super.setupNormal(t),this.normalNode=e}setupLighting(t){let e=null;if(this.emissiveNode==null){if(e=Y.mul(X),this.emissiveMap&&this.emissiveMap.isTexture===!0){let l=z.context({getUV:()=>this._animatedUVNode});e=e.mul(l)}this.emissiveNode=e}let o=super.setupLighting(t);return this.emissiveNode===e&&(this.emissiveNode=null),o}setupOutput(t,e){return this.isOutline&&this.outlineWidthMode!==E.None&&(e=i.vec4(i.mix(A,e.xyz.mul(A),rt),e.w)),super.setupOutput(t,e)}setupPosition(t){var e,o;let l=this.positionNode;if(this.isOutline&&this.outlineWidthMode!==E.None){(e=this.positionNode)!=null||(this.positionNode=i.positionLocal);let u=i.normalLocal.normalize(),d=ot;if(this.outlineWidthMultiplyTexture&&this.outlineWidthMultiplyTexture.isTexture===!0){let c=it.context({getUV:()=>this._animatedUVNode});d=d.mul(c)}let f=i.length(i.modelNormalMatrix.mul(u)),p=d.mul(f).mul(u);if(this.outlineWidthMode===E.WorldCoordinates)this.positionNode=this.positionNode.add(p);else if(this.outlineWidthMode===E.ScreenCoordinates){let c=i.cameraProjectionMatrix.element(1).element(1);this.positionNode=this.positionNode.add(p.div(c).mul(i.positionView.z.negate()))}(o=this.positionNode)!=null||(this.positionNode=i.positionLocal)}let m=super.setupPosition(t);return m.z.add(m.w.mul(1e-6)),this.positionNode=l,m}copy(t){var e,o,l,m,u,d,f,p,c,g,H,M,x,S,F,y,C,_,L;return this.color.copy(t.color),this.map=(e=t.map)!=null?e:null,this.emissive.copy(t.emissive),this.emissiveIntensity=t.emissiveIntensity,this.emissiveMap=(o=t.emissiveMap)!=null?o:null,this.normalMap=(l=t.normalMap)!=null?l:null,this.normalScale.copy(t.normalScale),this.shadeColorFactor.copy(t.shadeColorFactor),this.shadeMultiplyTexture=(m=t.shadeMultiplyTexture)!=null?m:null,this.shadingShiftFactor=t.shadingShiftFactor,this.shadingShiftTexture=(u=t.shadingShiftTexture)!=null?u:null,this.shadingShiftTextureScale=t.shadingShiftTextureScale,this.shadingToonyFactor=t.shadingToonyFactor,this.rimLightingMixFactor=t.rimLightingMixFactor,this.rimMultiplyTexture=(d=t.rimMultiplyTexture)!=null?d:null,this.matcapFactor.copy(t.matcapFactor),this.matcapTexture=(f=t.matcapTexture)!=null?f:null,this.parametricRimColorFactor.copy(t.parametricRimColorFactor),this.parametricRimLiftFactor=t.parametricRimLiftFactor,this.parametricRimFresnelPowerFactor=t.parametricRimFresnelPowerFactor,this.outlineWidthMode=t.outlineWidthMode,this.outlineWidthMultiplyTexture=(p=t.outlineWidthMultiplyTexture)!=null?p:null,this.outlineWidthFactor=t.outlineWidthFactor,this.outlineColorFactor.copy(t.outlineColorFactor),this.outlineLightingMixFactor=t.outlineLightingMixFactor,this.uvAnimationScrollXSpeedFactor=t.uvAnimationScrollXSpeedFactor,this.uvAnimationScrollYSpeedFactor=t.uvAnimationScrollYSpeedFactor,this.uvAnimationRotationSpeedFactor=t.uvAnimationRotationSpeedFactor,this.uvAnimationMaskTexture=(c=t.uvAnimationMaskTexture)!=null?c:null,this.shadeColorNode=(g=t.shadeColorNode)!=null?g:null,this.shadingShiftNode=(H=t.shadingShiftNode)!=null?H:null,this.shadingToonyNode=(M=t.shadingToonyNode)!=null?M:null,this.rimLightingMixNode=(x=t.rimLightingMixNode)!=null?x:null,this.rimMultiplyNode=(S=t.rimMultiplyNode)!=null?S:null,this.matcapNode=(F=t.matcapNode)!=null?F:null,this.parametricRimColorNode=(y=t.parametricRimColorNode)!=null?y:null,this.parametricRimLiftNode=(C=t.parametricRimLiftNode)!=null?C:null,this.parametricRimFresnelPowerNode=(_=t.parametricRimFresnelPowerNode)!=null?_:null,this.isOutline=(L=t.isOutline)!=null?L:null,super.copy(t)}update(t){this.uvAnimationScrollXOffset+=t*this.uvAnimationScrollXSpeedFactor,this.uvAnimationScrollYOffset+=t*this.uvAnimationScrollYSpeedFactor,this.uvAnimationRotationPhase+=t*this.uvAnimationRotationSpeedFactor}_setupShadeColorNode(){if(this.shadeColorNode!=null)return i.vec3(this.shadeColorNode);let t=B;if(this.shadeMultiplyTexture&&this.shadeMultiplyTexture.isTexture===!0){let e=P.context({getUV:()=>this._animatedUVNode});t=t.mul(e)}return t}_setupShadingShiftNode(){if(this.shadingShiftNode!=null)return i.float(this.shadingShiftNode);let t=j;if(this.shadingShiftTexture&&this.shadingShiftTexture.isTexture===!0){let e=P.context({getUV:()=>this._animatedUVNode});t=t.add(e.mul(q))}return t}_setupShadingToonyNode(){return this.shadingToonyNode!=null?i.float(this.shadingToonyNode):K}_setupRimLightingMixNode(){return this.rimLightingMixNode!=null?i.float(this.rimLightingMixNode):Z}_setupRimMultiplyNode(){return this.rimMultiplyNode!=null?i.vec3(this.rimMultiplyNode):this.rimMultiplyTexture&&this.rimMultiplyTexture.isTexture===!0?$.context({getUV:()=>this._animatedUVNode}):i.vec3(1)}_setupMatcapNode(){return this.matcapNode!=null?i.vec3(this.matcapNode):this.matcapTexture&&this.matcapTexture.isTexture===!0?J.context({getUV:()=>i.matcapUV.mul(1,-1).add(0,1)}).mul(G):i.vec3(0)}_setupParametricRimNode(){let t=this.parametricRimColorNode!=null?i.vec3(this.parametricRimColorNode):Q,e=this.parametricRimLiftNode!=null?i.float(this.parametricRimLiftNode):tt,o=this.parametricRimFresnelPowerNode!=null?i.float(this.parametricRimFresnelPowerNode):et;return pt({parametricRimLift:e,parametricRimFresnelPower:o,parametricRimColor:t})}};export{mt as MToonAnimatedUVNode,ct as MToonLightingModel,Et as MToonNodeMaterial};
|
|
3
3
|
/*!
|
|
4
|
-
* @pixiv/three-vrm-materials-mtoon v3.
|
|
4
|
+
* @pixiv/three-vrm-materials-mtoon v3.1.0
|
|
5
5
|
* MToon (toon material) module for @pixiv/three-vrm
|
|
6
6
|
*
|
|
7
7
|
* Copyright (c) 2019-2024 pixiv Inc.
|