UNPKG

@polygonjs/polygonjs

Version:

node-based WebGL 3D engine https://polygonjs.com

125 lines (124 loc) 4.22 kB
"use strict"; import { MeshToonMaterial } from "three"; import { FrontSide } from "three"; import { PrimitiveMatNode } from "./_Base"; import { NodeParamsConfig } from "../utils/params/ParamsConfig"; import { ColorsController, ColorParamConfig } from "./utils/ColorsController"; import { AdvancedCommonController, AdvancedCommonParamConfig } from "./utils/AdvancedCommonController"; import { TextureMapController, MapParamConfig } from "./utils/TextureMapController"; import { TextureAlphaMapController, AlphaMapParamConfig } from "./utils/TextureAlphaMapController"; import { TextureBumpMapController, BumpMapParamConfig } from "./utils/TextureBumpMapController"; import { TextureEmissiveMapController, EmissiveMapParamConfig } from "./utils/TextureEmissiveMapController"; import { TextureGradientMapController, GradientMapParamConfig } from "./utils/TextureGradientMapController"; import { TextureNormalMapController, NormalMapParamConfig } from "./utils/TextureNormalMapController"; import { TextureDisplacementMapController, DisplacementMapParamConfig } from "./utils/TextureDisplacementMapController"; import { TextureLightMapController, LightMapParamConfig } from "./utils/TextureLightMapController"; import { TextureAOMapController, AOMapParamConfig } from "./utils/TextureAOMapController"; import { WireframeController, WireframeParamConfig } from "./utils/WireframeController"; import { FogController, FogParamConfig } from "./utils/FogController"; import { DefaultFolderParamConfig } from "./utils/DefaultFolder"; import { TexturesFolderParamConfig } from "./utils/TexturesFolder"; import { AdvancedFolderParamConfig } from "./utils/AdvancedFolder"; import { MatType } from "../../poly/registers/nodes/types/Mat"; class MeshToonMatParamsConfig extends FogParamConfig( WireframeParamConfig( AdvancedCommonParamConfig( /* advanced */ AdvancedFolderParamConfig( NormalMapParamConfig( LightMapParamConfig( GradientMapParamConfig( EmissiveMapParamConfig( DisplacementMapParamConfig( BumpMapParamConfig( AOMapParamConfig( AlphaMapParamConfig( MapParamConfig( /* textures */ TexturesFolderParamConfig( ColorParamConfig(DefaultFolderParamConfig(NodeParamsConfig)) ) ) ) ) ) ) ) ) ) ) ) ) ) ) { } const ParamsConfig = new MeshToonMatParamsConfig(); export class MeshToonMatNode extends PrimitiveMatNode { constructor() { super(...arguments); this.paramsConfig = ParamsConfig; this.controllers = { colors: new ColorsController(this), advancedCommon: new AdvancedCommonController(this), alphaMap: new TextureAlphaMapController(this), aoMap: new TextureAOMapController(this), bumpMap: new TextureBumpMapController(this), displacementMap: new TextureDisplacementMapController(this), emissiveMap: new TextureEmissiveMapController(this), fog: new FogController(this), gradientMap: new TextureGradientMapController(this), lightMap: new TextureLightMapController(this), map: new TextureMapController(this), normalMap: new TextureNormalMapController(this), wireframe: new WireframeController(this) }; this.controllerNames = Object.keys(this.controllers); } static type() { return MatType.MESH_TOON; } createMaterial() { return new MeshToonMaterial({ vertexColors: false, side: FrontSide, color: 16777215, opacity: 1 }); } initializeNode() { this.params.onParamsCreated("init controllers", () => { for (const controllerName of this.controllerNames) { this.controllers[controllerName].initializeNode(); } }); } async cook() { this._material = this._material || this.createMaterial(); await Promise.all(this.controllersPromises(this._material)); this.setMaterial(this._material); } }