@polygonjs/polygonjs
Version:
node-based WebGL 3D engine https://polygonjs.com
59 lines (54 loc) • 2.21 kB
text/typescript
/**
* SSS Model
*
*
*
*/
import {TypedGlNode} from './_Base';
import {NodeParamsConfig, ParamConfig} from '../../nodes/utils/params/ParamsConfig';
import {GlConnectionPoint, GlConnectionPointType} from '../../nodes/utils/io/connections/Gl';
import {ShadersCollectionController} from './code/utils/ShadersCollectionController';
import {ThreeToGl} from '../../../core/ThreeToGl';
import {FloatParam} from '../../params/Float';
import {ColorParam} from '../../params/Color';
const OUTPUT = {
SSS_MODEL: 'SSSModel',
};
class VATDataGlParamsConfig extends NodeParamsConfig {
color = ParamConfig.COLOR([1, 1, 1]);
thickness = ParamConfig.FLOAT(0.1);
power = ParamConfig.FLOAT(2.0);
scale = ParamConfig.FLOAT(16.0);
distortion = ParamConfig.FLOAT(0.1);
ambient = ParamConfig.FLOAT(0.4);
attenuation = ParamConfig.FLOAT(0.8);
}
const ParamsConfig = new VATDataGlParamsConfig();
export class SSSModelGlNode extends TypedGlNode<VATDataGlParamsConfig> {
override paramsConfig = ParamsConfig;
static override type() {
return 'SSSModel';
}
override initializeNode() {
this.io.outputs.setNamedOutputConnectionPoints([
new GlConnectionPoint(OUTPUT.SSS_MODEL, GlConnectionPointType.SSS_MODEL),
]);
}
override setLines(shaders_collection_controller: ShadersCollectionController) {
const body_lines = [];
const outSSModel = this.glVarName(OUTPUT.SSS_MODEL);
body_lines.push(`SSSModel ${outSSModel}`);
body_lines.push(`${outSSModel}.isActive = true;`);
body_lines.push(this._paramLineFloat(outSSModel, this.p.color));
body_lines.push(this._paramLineFloat(outSSModel, this.p.thickness));
body_lines.push(this._paramLineFloat(outSSModel, this.p.power));
body_lines.push(this._paramLineFloat(outSSModel, this.p.scale));
body_lines.push(this._paramLineFloat(outSSModel, this.p.distortion));
body_lines.push(this._paramLineFloat(outSSModel, this.p.ambient));
body_lines.push(this._paramLineFloat(outSSModel, this.p.attenuation));
shaders_collection_controller.addBodyLines(this, body_lines);
}
private _paramLineFloat(varName: string, param: FloatParam | ColorParam) {
return `${varName}.${param.name()} = ${ThreeToGl.vector3(this.variableForInputParam(param))};`;
}
}