@zephyr3d/editor 0.3.0 → 0.3.1
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 +143 -0
- package/dist/assets/{index-BaUzUcND.js → index-IISR7uQv.js} +1 -1
- package/dist/assistant/zephyr-types-index.json +1 -1
- package/dist/index.html +2 -2
- package/dist/modules/zephyr3d_backend-webgpu.js.map +1 -1
- package/dist/modules/zephyr3d_imgui.js +3 -3
- package/dist/modules/zephyr3d_imgui.js.map +1 -1
- package/dist/modules/zephyr3d_scene.js +1439 -1439
- package/dist/modules/zephyr3d_scene.js.map +1 -1
- package/dist/vendor/zephyr3d/backend-webgpu/dist/bindgroup_webgpu.js.map +1 -1
- package/dist/vendor/zephyr3d/backend-webgpu/dist/buffer_webgpu.js.map +1 -1
- package/dist/vendor/zephyr3d/backend-webgpu/dist/commandqueue.js.map +1 -1
- package/dist/vendor/zephyr3d/backend-webgpu/dist/uploadringbuffer.js.map +1 -1
- package/dist/vendor/zephyr3d/imgui/dist/imgui_impl.js.map +1 -1
- package/dist/vendor/zephyr3d/imgui/dist/renderer.js +3 -3
- package/dist/vendor/zephyr3d/imgui/dist/renderer.js.map +1 -1
- package/dist/vendor/zephyr3d/scene/dist/animation/animationset.js +135 -135
- package/dist/vendor/zephyr3d/scene/dist/animation/animationset.js.map +1 -1
- package/dist/vendor/zephyr3d/scene/dist/animation/joint_dynamics/controller.js +146 -146
- package/dist/vendor/zephyr3d/scene/dist/animation/joint_dynamics/controller.js.map +1 -1
- package/dist/vendor/zephyr3d/scene/dist/animation/spring/spring_system.js +75 -75
- package/dist/vendor/zephyr3d/scene/dist/animation/spring/spring_system.js.map +1 -1
- package/dist/vendor/zephyr3d/scene/dist/camera/camera.js +184 -184
- package/dist/vendor/zephyr3d/scene/dist/camera/camera.js.map +1 -1
- package/dist/vendor/zephyr3d/scene/dist/material/material.js +288 -288
- package/dist/vendor/zephyr3d/scene/dist/material/material.js.map +1 -1
- package/dist/vendor/zephyr3d/scene/dist/render/rendergraph/history_resource_manager.js +93 -93
- package/dist/vendor/zephyr3d/scene/dist/render/rendergraph/history_resource_manager.js.map +1 -1
- package/dist/vendor/zephyr3d/scene/dist/render/rendergraph/history_resources.js +3 -3
- package/dist/vendor/zephyr3d/scene/dist/render/rendergraph/history_resources.js.map +1 -1
- package/dist/vendor/zephyr3d/scene/dist/render/rendergraph/types.js +22 -22
- package/dist/vendor/zephyr3d/scene/dist/render/rendergraph/types.js.map +1 -1
- package/dist/vendor/zephyr3d/scene/dist/utility/blueprint/material/ir.js +489 -489
- package/dist/vendor/zephyr3d/scene/dist/utility/blueprint/material/ir.js.map +1 -1
- package/dist/vendor/zephyr3d/scene/dist/utility/serialization/scene/animation.js.map +1 -1
- package/dist/vendor/zephyr3d/scene/dist/utility/serialization/scene/camera.js.map +1 -1
- package/dist/vendor/zephyr3d/scene/dist/utility/serialization/scene/common.js.map +1 -1
- package/dist/vendor/zephyr3d/scene/dist/utility/serialization/scene/light.js.map +1 -1
- package/dist/vendor/zephyr3d/scene/dist/utility/serialization/scene/material.js.map +1 -1
- package/dist/vendor/zephyr3d/scene/dist/utility/serialization/scene/mesh.js.map +1 -1
- package/dist/vendor/zephyr3d/scene/dist/utility/serialization/scene/node.js.map +1 -1
- package/dist/vendor/zephyr3d/scene/dist/utility/serialization/scene/particle.js.map +1 -1
- package/dist/vendor/zephyr3d/scene/dist/utility/serialization/scene/primitive.js.map +1 -1
- package/dist/vendor/zephyr3d/scene/dist/utility/serialization/scene/scene.js.map +1 -1
- package/dist/vendor/zephyr3d/scene/dist/utility/serialization/scene/terrain.js.map +1 -1
- package/dist/vendor/zephyr3d/scene/dist/utility/serialization/types.js +4 -4
- package/dist/vendor/zephyr3d/scene/dist/utility/serialization/types.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ir.js","sources":["../../../../src/utility/blueprint/material/ir.ts"],"sourcesContent":["import type {\n BaseTexture,\n PBInsideFunctionScope,\n PBScope,\n ProgramBuilder,\n TextureAddressMode,\n TextureFilterMode,\n TextureSampler\n} from '@zephyr3d/device';\nimport { PBShaderExp } from '@zephyr3d/device';\nimport type { BaseGraphNode, BlueprintDAG, GraphNodeInput, IGraphNode } from '../node';\nimport {\n ConstantBooleanNode,\n ConstantBVec2Node,\n ConstantBVec3Node,\n ConstantBVec4Node,\n ConstantScalarNode,\n ConstantVec2Node,\n ConstantVec3Node,\n ConstantVec4Node\n} from '../common/constants';\nimport type { GenericConstructor, DRef, Nullable } from '@zephyr3d/base';\nimport type { Vector4 } from '@zephyr3d/base';\nimport { ASSERT } from '@zephyr3d/base';\nimport { BaseTextureNode, PannerNode, TextureSampleNode } from './texture';\nimport type { ComparisonMode } from '../common/math';\nimport {\n GenericMathNode,\n PerlinNoise2DNode,\n MakeVectorNode,\n SimplexNoise2DNode,\n TransformNode,\n Hash1Node,\n Hash2Node,\n Hash3Node,\n RotateAboutAxisNode,\n SwizzleNode,\n CompComparisonNode,\n AnyConditionNode,\n AllConditionNode,\n SelectionNode\n} from '../common/math';\nimport {\n BillboardMatrixNode,\n InvProjMatrixNode,\n InvViewProjMatrixNode,\n ProjectionMatrixNode,\n ResolveVertexNormalNode,\n ResolveVertexPositionNode,\n ResolveVertexTangentNode,\n ViewMatrixNode,\n ViewProjMatrixNode\n} from './inputs';\nimport {\n CameraNearFarNode,\n CameraPositionNode,\n CameraVectorNode,\n ElapsedTimeNode,\n PixelNormalNode,\n PixelWorldPositionNode,\n SkyEnvTextureNode,\n VertexBinormalNode,\n VertexColorNode,\n VertexNormalNode,\n VertexPositionNode,\n VertexTangentNode,\n VertexUVNode\n} from './inputs';\nimport { ShaderHelper } from '../../../material/shader/helper';\nimport { FunctionCallNode, FunctionInputNode, FunctionOutputNode } from './func';\nimport {\n hash11,\n hash12,\n hash13,\n hash21,\n hash22,\n hash23,\n hash31,\n hash32,\n hash33,\n valueNoise\n} from '../../../shaders/noise';\nimport { VertexBlockNode } from './pbr';\n\n/**\n * Represents a uniform scalar or vector value in the intermediate representation\n *\n * @remarks\n * Used to track uniform values that need to be passed to the shader at runtime.\n * The value can be either a single number or a Float32Array for vector types.\n *\n * @public\n */\nexport interface IRUniformValue {\n name: string;\n type: string;\n value: number[];\n}\n\n/**\n * Represents a uniform scalar or vector value in the blueprint intermediate representation\n *\n * @public\n */\nexport interface BluePrintUniformValue extends IRUniformValue {\n inVertexShader: boolean;\n inFragmentShader: boolean;\n finalValue?: Nullable<number | Float32Array<ArrayBuffer>>;\n}\n\n/**\n * Represents a uniform texture and its sampler in the intermediate representation\n *\n * @remarks\n * Used to track texture uniforms that need to be bound to the shader at runtime.\n * Includes both the texture reference and sampler configuration.\n *\n * @public\n */\nexport interface IRUniformTexture {\n name: string;\n type: string;\n texture: string;\n sRGB: boolean;\n wrapS: string;\n wrapT: string;\n minFilter: string;\n magFilter: string;\n mipFilter: string;\n}\n\n/**\n * Represents a uniform texture and its sampler in the blueprint intermediate representation\n *\n * @public\n */\nexport interface BluePrintUniformTexture extends IRUniformTexture {\n inVertexShader: boolean;\n inFragmentShader: boolean;\n finalTexture?: Nullable<DRef<BaseTexture>>;\n finalSampler?: TextureSampler;\n params?: Nullable<Vector4>;\n}\n\n/**\n * Editor state of a blueprint\n *\n * @public\n */\nexport interface BluePrintEditorState {\n nodes: {\n id: number;\n locked: boolean;\n node: Record<string, unknown>;\n title: string;\n }[];\n links: { startNodeId: number; startSlotId: number; endNodeId: number; endSlotId: number }[];\n}\n\n/**\n * Abstract base class for intermediate representation expressions\n *\n * @remarks\n * Represents a node in the IR tree that can be compiled to shader code.\n * Uses reference counting to determine if intermediate variables are needed.\n * Each expression can be referenced multiple times in the final shader code.\n *\n * The IR expression tree is built during compilation and then translated\n * to actual shader code via the `create()` method.\n *\n * @public\n */\nabstract class IRExpression {\n /** Reference count for this expression (number of times it's used) */\n protected _ref: number;\n /** Cached output expressions for each output slot */\n protected _outputs: IRExpression[];\n /**\n * Creates a new IR expression\n *\n * @remarks\n * Initializes reference count to 0 and empty outputs array.\n */\n constructor() {\n this._ref = 0;\n this._outputs = [];\n }\n /**\n * Generates shader code for this expression\n *\n * @param pb - The program builder used to generate shader code\n * @returns The generated shader expression or numeric value\n *\n * @remarks\n * This is the core method that translates the IR to actual shader code.\n * Must be implemented by all concrete expression types.\n */\n abstract create(pb: ProgramBuilder): number | boolean | PBShaderExp;\n /** Gets the array of output expressions */\n get outputs() {\n return this._outputs;\n }\n /**\n * Increments the reference count\n *\n * @returns This expression for method chaining\n *\n * @remarks\n * Called when this expression is referenced by another expression.\n * Reference count is used to determine if a temporary variable is needed.\n */\n addRef() {\n this._ref++;\n return this;\n }\n /**\n * Generates a unique temporary variable name\n *\n * @param scope - The shader scope to check for name conflicts\n * @returns A unique temporary variable name (e.g., 'tmp0', 'tmp1')\n *\n * @remarks\n * Ensures the generated name doesn't conflict with existing variables in the scope.\n */\n getTmpName(scope: PBScope) {\n let tmp = 0;\n for (;;) {\n const name = `tmp${tmp++}`;\n if (!scope[name]) {\n return name;\n }\n }\n }\n /**\n * Converts this expression to a uniform value if applicable\n *\n * @param _node - The graph node associated with this expression\n * @returns The uniform value descriptor, or null if not a uniform\n *\n * @remarks\n * Only constant expressions can be converted to uniforms.\n * Returns null by default; overridden by constant expression types.\n */\n asUniformValue(_node: IGraphNode): Nullable<IRUniformValue> {\n return null;\n }\n /**\n * Converts this expression to a uniform texture if applicable\n *\n * @param _node - The graph node associated with this expression\n * @returns The uniform texture descriptor, or null if not a texture uniform\n *\n * @remarks\n * Only texture constant expressions can be converted to texture uniforms.\n * Returns null by default; overridden by texture constant expression types.\n */\n asUniformTexture(_node: IGraphNode): Nullable<IRUniformTexture> {\n return null;\n }\n /**\n * Reset state for creation\n */\n reset() {}\n}\n\n/**\n * IR expression for a constant scalar (float) value\n *\n * @public\n */\nclass IRConstantf extends IRExpression {\n /** The constant float value */\n readonly value: number;\n /** The uniform parameter name, or empty string for literals */\n readonly name: string;\n /**\n * Creates a constant float expression\n *\n * @param value - The float value\n * @param paramName - The uniform parameter name, or empty string for literals\n */\n constructor(value: number, paramName: string) {\n super();\n this.value = value;\n this.name = paramName;\n }\n /**\n * Generates shader code for this constant\n *\n * @param pb - The program builder\n * @returns A uniform reference or literal number\n *\n * @remarks\n * If a parameter name exists, creates a uniform in the global scope.\n * Otherwise, returns the literal value.\n */\n create(pb: ProgramBuilder) {\n if (this.name) {\n if (!pb.getGlobalScope()[this.name]) {\n pb.getGlobalScope()[this.name] = pb.float().uniform(2);\n }\n return pb.getGlobalScope()[this.name];\n }\n return this.value;\n }\n /**\n * Converts to a uniform value descriptor\n *\n * @param node - The graph node\n * @returns Uniform value descriptor if this is a uniform parameter, null otherwise\n */\n asUniformValue() {\n return this.name\n ? {\n name: this.name,\n value: [this.value],\n type: 'float'\n }\n : null;\n }\n}\n\n/**\n * IR expression for a constant scalar (boolean) value\n *\n * @public\n */\nclass IRConstantb extends IRExpression {\n /** The constant boolean value */\n readonly value: boolean;\n /**\n * Creates a constant boolean expression\n *\n * @param value - The boolean value\n */\n constructor(value: boolean) {\n super();\n this.value = value;\n }\n /**\n * Generates shader code for this constant\n *\n * @returns The literal boolean value\n *\n */\n create() {\n return this.value;\n }\n}\n\n/**\n * IR expression for a constant vector value\n *\n * @public\n */\nclass IRConstantfv extends IRExpression {\n /** The constant vector value as an array of floats */\n readonly value: number[];\n /** The uniform parameter name, or empty string for literals */\n readonly name: string;\n /** vector type */\n readonly type: string;\n\n /**\n * Creates a constant vector expression\n *\n * @param value - The vector value as an array (length 2-4)\n * @param paramName - The uniform parameter name, or empty string for literals\n */\n constructor(value: number[], paramName: string, type: string) {\n super();\n this.value = value;\n this.name = paramName;\n this.type = type;\n }\n /**\n * Generates shader code for this constant vector\n *\n * @param pb - The program builder\n * @returns A uniform reference or vector constructor expression\n *\n * @remarks\n * If a parameter name exists, creates a uniform in the global scope.\n * The vector size is determined by the array length (vec2/vec3/vec4).\n */\n create(pb: ProgramBuilder) {\n if (this.name) {\n if (!pb.getGlobalScope()[this.name]) {\n // @ts-ignore\n pb.getGlobalScope()[this.name] = pb[`vec${this.value.length}`]().uniform(2);\n }\n return pb.getGlobalScope()[this.name] as PBShaderExp;\n }\n return (\n // @ts-ignore\n (Array.isArray(this.value) ? pb[`vec${this.value.length}`](...this.value) : this.value) as PBShaderExp\n );\n }\n /**\n * Converts to a uniform value descriptor\n *\n * @param node - The graph node\n * @returns Uniform value descriptor if this is a uniform parameter, null otherwise\n */\n asUniformValue() {\n return this.name\n ? {\n name: this.name,\n type: this.type,\n value: this.value\n }\n : null;\n }\n}\n\n/**\n * IR expression for a constant boolean vector value\n *\n * @public\n */\nclass IRConstantbv extends IRExpression {\n /** The constant vector value as an array of booleans */\n readonly value: boolean[];\n\n /**\n * Creates a constant boolean vector expression\n *\n * @param value - The vector value as an array (length 2-4)\n */\n constructor(value: boolean[]) {\n super();\n this.value = value;\n }\n /**\n * Generates shader code for this constant vector\n *\n * @param pb - The program builder\n *\n * @returns A boolean vector constructor expression\n */\n create(pb: ProgramBuilder) {\n // @ts-ignore\n return pb[`bvec${this.value.length}`](...this.value) as PBShaderExp;\n }\n}\n\n/**\n * IR expression for shader input variables\n *\n * @remarks\n * Represents variables that are passed into the shader from the vertex stage\n * or defined in the current scope. Examples include vertex attributes,\n * varyings, and built-in variables.\n *\n * @example\n * ```typescript\n * // Reference to vertex color\n * const vertexColor = new IRInput('zVertexColor');\n *\n * // Reference via function\n * const worldPos = new IRInput((scope) => scope.zWorldPos);\n * ```\n *\n * @public\n */\nclass IRInput extends IRExpression {\n /** The variable name or a function that retrieves the variable from scope */\n readonly func: string | ((scope: PBInsideFunctionScope) => PBShaderExp);\n /**\n * Creates an input variable expression\n *\n * @param func - Variable name string or function to retrieve the variable\n */\n constructor(func: string | ((scope: PBInsideFunctionScope) => PBShaderExp)) {\n super();\n this.func = func;\n }\n /**\n * Generates shader code for this input variable\n *\n * @param pb - The program builder\n * @returns The shader expression referencing the input variable\n */\n create(pb: ProgramBuilder) {\n return (\n typeof this.func === 'string' ? pb.getCurrentScope()[this.func] : this.func(pb.getCurrentScope())\n ) as PBShaderExp;\n }\n}\n\n/**\n * IR expression for function calls and operations\n *\n * @remarks\n * Represents built-in shader functions (add, mul, sin, etc.) or vector constructors.\n * Uses reference counting to determine if result should be stored in a temporary variable.\n *\n * @example\n * ```typescript\n * // Addition: a + b\n * const add = new IRFunc([exprA, exprB], 'add');\n *\n * // Vector constructor: vec3(x, y, z)\n * const vec = new IRFunc([x, y, z], 'vec3');\n * ```\n *\n * @public\n */\nclass IRFunc extends IRExpression {\n /** Array of parameters (can be expressions or literal numbers) */\n readonly params: (number | IRExpression)[];\n /** The function name (e.g., 'add', 'mul', 'sin', 'vec3') */\n readonly func:\n | string\n | ((pb: ProgramBuilder, ...params: (number | boolean | PBShaderExp)[]) => PBShaderExp);\n /** Cached temporary variable name if expression is referenced multiple times */\n private tmpName: string;\n /**\n * Creates a function call expression\n *\n * @param params - Array of parameters for the function\n * @param func - The function name or function implementation\n *\n * @remarks\n * Increments reference count for all expression parameters.\n */\n constructor(\n params: (number | IRExpression)[],\n func: string | ((pb: ProgramBuilder, ...params: (number | boolean | PBShaderExp)[]) => PBShaderExp)\n ) {\n super();\n this.params = params.map((param) => (param instanceof IRExpression ? param.addRef() : param));\n this.func = func;\n this.tmpName = '';\n }\n /** Reset for next creation */\n reset() {\n this.tmpName = '';\n }\n /**\n * Generates shader code for this function call\n *\n * @param pb - The program builder\n * @returns The shader expression for the function result\n *\n * @remarks\n * If referenced multiple times (_ref > 1), stores result in a temporary variable.\n * Otherwise, generates the function call inline.\n */\n create(pb: ProgramBuilder) {\n if (this.tmpName) {\n const exp = pb.getCurrentScope()[this.tmpName] as PBShaderExp;\n if (exp) {\n return exp;\n }\n // Scope changed, recompute in current scope\n this.tmpName = '';\n }\n const params = this.params.map((param) => (param instanceof IRExpression ? param.create(pb) : param));\n // @ts-ignore\n const exp = typeof this.func === 'string' ? pb[this.func](...params) : this.func(pb, ...params);\n if (this._ref === 1) {\n return exp as PBShaderExp;\n } else {\n this.tmpName = this.getTmpName(pb.getCurrentScope());\n pb.getCurrentScope()[this.tmpName] = exp;\n return pb.getCurrentScope()[this.tmpName] as PBShaderExp;\n }\n }\n}\n\n/**\n * IR expression for function output values\n *\n * @remarks\n * Represents the output of a material function (subgraph).\n * Handles caching of output values when referenced multiple times.\n *\n * @example\n * ```typescript\n * // Function returns a processed color value\n * const output = new IRFunctionOutput(colorExpression);\n * ```\n *\n * @public\n */\nclass IRFunctionOutput extends IRExpression {\n /** Cached temporary variable name for the output */\n private tmpName: string;\n /** The input expression to output */\n private readonly input: IRExpression | number;\n /**\n * Creates a function output expression\n *\n * @param input - The expression or value to output\n */\n constructor(input: IRExpression | number) {\n super();\n this.input = input;\n this.tmpName = '';\n }\n /** Reset for next creation */\n reset() {\n this.tmpName = '';\n }\n /**\n * Generates shader code for this function output\n *\n * @param pb - The program builder\n * @returns The shader expression or value\n *\n * @remarks\n * If referenced multiple times, stores result in a temporary variable.\n */\n create(pb: ProgramBuilder): PBShaderExp | number | boolean {\n if (this.tmpName) {\n return pb.getCurrentScope()[this.tmpName];\n }\n const exp = this.input instanceof IRExpression ? this.input.create(pb) : this.input;\n if (this._ref === 1) {\n return exp;\n } else {\n this.tmpName = this.getTmpName(pb.getCurrentScope());\n pb.getCurrentScope()[this.tmpName] = exp;\n return pb.getCurrentScope()[this.tmpName];\n }\n }\n}\n\n/**\n * IR expression for calling user-defined material functions\n *\n * @remarks\n * Represents a call to a material function (subgraph) with parameters.\n * Generates both the function definition and the call site.\n * Uses a struct return type to return multiple outputs from the function.\n *\n * @example\n * ```typescript\n * // Call to a custom \"calculateLighting\" function\n * const call = new IRCallFunc(functionNode, [normalExpr, lightDirExpr]);\n * ```\n *\n * @public\n */\nclass IRCallFunc extends IRExpression {\n /** The function call node from the graph */\n readonly node: FunctionCallNode;\n /** Array of argument expressions */\n readonly args: IRExpression[];\n /** Cached temporary variable name if result is referenced multiple times */\n tmpName: string;\n /**\n * Creates a function call expression\n *\n * @param node - The function call node\n * @param args - Array of argument expressions\n */\n constructor(node: FunctionCallNode, args: IRExpression[]) {\n super();\n this.node = node;\n this.args = args;\n this.tmpName = '';\n }\n /** Reset for next creation */\n reset() {\n this.tmpName = '';\n }\n /**\n * Generates shader code for the function definition and call\n *\n * @param pb - The program builder\n * @returns The shader expression for the function result\n *\n * @remarks\n * First generates the function definition (if not already defined),\n * then generates the function call with the provided arguments.\n * The function returns a struct containing all output values.\n */\n create(pb: ProgramBuilder): PBShaderExp {\n if (this.tmpName) {\n return pb.getCurrentScope()[this.tmpName];\n }\n const that = this;\n const ir = this.node.IR;\n // @ts-ignore\n const params = this.node.args.map((v) => pb[v.type](v.name));\n pb.func(this.node.name, params, function () {\n const outputs = ir.create(pb)!;\n const rettype = pb.defineStruct(\n that.node.outputs.map((output, index) => {\n // @ts-ignore\n return pb[that.node.outs[index].type](output.swizzle);\n })\n );\n this.$return(\n rettype(\n ...outputs.map((output) => {\n return output.exp;\n })\n )\n );\n });\n const args = this.args.map((arg) => arg.create(pb));\n const exp = pb.getGlobalScope()[this.node.name](...args);\n if (this._ref === 1) {\n return exp;\n } else {\n this.tmpName = this.getTmpName(pb.getCurrentScope());\n pb.getCurrentScope()[this.tmpName] = exp;\n return pb.getCurrentScope()[this.tmpName];\n }\n }\n}\n\nclass IRSelection extends IRExpression {\n readonly a: IRExpression;\n readonly b: IRExpression;\n readonly cond: IRExpression;\n tmpName: string;\n constructor(a: IRExpression, b: IRExpression, cond: IRExpression) {\n super();\n this.a = a.addRef();\n this.b = b.addRef();\n this.cond = cond.addRef();\n this.tmpName = '';\n }\n reset() {\n this.tmpName = '';\n }\n create(pb: ProgramBuilder): PBShaderExp {\n if (this.tmpName) {\n return pb.getCurrentScope()[this.tmpName];\n }\n const a = this.a.create(pb) as number | PBShaderExp;\n const b = this.b.create(pb) as number | PBShaderExp;\n const c = this.cond.create(pb);\n const exp = pb.select(a, b, typeof c === 'number' ? c !== 0 : c);\n if (this._ref === 1) {\n return exp;\n } else {\n this.tmpName = this.getTmpName(pb.getCurrentScope());\n pb.getCurrentScope()[this.tmpName] = exp;\n return pb.getCurrentScope()[this.tmpName];\n }\n }\n}\n\nclass IRAny extends IRExpression {\n readonly src: IRExpression;\n tmpName: string;\n constructor(src: IRExpression) {\n super();\n this.src = src.addRef();\n this.tmpName = '';\n }\n reset() {\n this.tmpName = '';\n }\n create(pb: ProgramBuilder): PBShaderExp {\n if (this.tmpName) {\n return pb.getCurrentScope()[this.tmpName];\n }\n const src = this.src.create(pb) as PBShaderExp;\n const exp = pb.any(src);\n if (this._ref === 1) {\n return exp;\n } else {\n this.tmpName = this.getTmpName(pb.getCurrentScope());\n pb.getCurrentScope()[this.tmpName] = exp;\n return pb.getCurrentScope()[this.tmpName];\n }\n }\n}\n\nclass IRAll extends IRExpression {\n readonly src: IRExpression;\n tmpName: string;\n constructor(src: IRExpression) {\n super();\n this.src = src.addRef();\n this.tmpName = '';\n }\n reset() {\n this.tmpName = '';\n }\n create(pb: ProgramBuilder): PBShaderExp {\n if (this.tmpName) {\n return pb.getCurrentScope()[this.tmpName];\n }\n const src = this.src.create(pb) as PBShaderExp;\n const exp = pb.all(src);\n if (this._ref === 1) {\n return exp;\n } else {\n this.tmpName = this.getTmpName(pb.getCurrentScope());\n pb.getCurrentScope()[this.tmpName] = exp;\n return pb.getCurrentScope()[this.tmpName];\n }\n }\n}\n\nclass IRComparison extends IRExpression {\n readonly a: IRExpression;\n readonly b: IRExpression;\n readonly mode: ComparisonMode;\n tmpName: string;\n constructor(a: IRExpression, b: IRExpression, mode: ComparisonMode) {\n super();\n this.a = a.addRef();\n this.b = b.addRef();\n this.mode = mode;\n this.tmpName = '';\n }\n /** Reset for next creation */\n reset() {\n this.tmpName = '';\n }\n create(pb: ProgramBuilder): PBShaderExp {\n if (this.tmpName) {\n return pb.getCurrentScope()[this.tmpName];\n }\n const a = this.a.create(pb) as PBShaderExp;\n const b = this.b.create(pb) as PBShaderExp;\n let exp: PBShaderExp;\n switch (this.mode) {\n case 'eq':\n exp = pb.compEqual(a, b);\n break;\n case 'ne':\n exp = pb.compNotEqual(a, b);\n break;\n case 'lt':\n exp = pb.lessThan(a, b);\n break;\n case 'le':\n exp = pb.lessThanEqual(a, b);\n break;\n case 'gt':\n exp = pb.greaterThan(a, b);\n break;\n case 'ge':\n exp = pb.greaterThanEqual(a, b);\n break;\n default:\n throw new Error(`Invalid comparison mode: ${this.mode}`);\n }\n if (this._ref === 1) {\n return exp;\n } else {\n this.tmpName = this.getTmpName(pb.getCurrentScope());\n pb.getCurrentScope()[this.tmpName] = exp;\n return pb.getCurrentScope()[this.tmpName];\n }\n }\n}\n\n/**\n * IR expression for vector component swizzling\n *\n * @remarks\n * Extracts specific components from a vector using swizzle notation.\n * For scalar sources, constructs a vector with replicated values.\n *\n * @example\n * ```typescript\n * // Extract xyz from vec4\n * const xyz = new IRSwizzle(vec4Expr, 'xyz');\n *\n * // Extract single component\n * const x = new IRSwizzle(vec3Expr, 'x');\n *\n * // Swizzle and reorder\n * const bgr = new IRSwizzle(rgbExpr, 'bgr');\n * ```\n *\n * @public\n */\nclass IRSwizzle extends IRExpression {\n /** The source expression to swizzle */\n readonly src: IRExpression;\n /** The swizzle pattern (e.g., 'xyz', 'rgb', 'x', 'yzw') */\n readonly hash: string;\n /**\n * Creates a swizzle expression\n *\n * @param src - The source vector expression\n * @param hash - The swizzle pattern using xyzw or rgba notation\n */\n constructor(src: IRExpression, hash: string) {\n super();\n this.src = src.addRef();\n this.hash = hash;\n }\n /**\n * Generates shader code for the swizzle operation\n *\n * @param pb - The program builder\n * @returns The swizzled shader expression\n *\n * @remarks\n * If source is a scalar number, creates a vector with that value repeated.\n * Otherwise, applies the swizzle notation to the source expression.\n */\n create(pb: ProgramBuilder): number | PBShaderExp {\n const src = this.src.create(pb);\n // @ts-ignore\n return typeof src === 'number' ? pb[`vec${this.hash.length}`](src) : src[this.hash];\n }\n}\n\n/**\n * IR expression for type casting with padding\n *\n * @remarks\n * Converts a value to a different vector type by padding with zeros.\n * Used when a smaller vector needs to be converted to a larger one.\n *\n * @example\n * ```typescript\n * // Cast float to vec3: vec3(value, 0, 0)\n * const vec3 = new IRCast(floatExpr, 'vec3', 2);\n *\n * // Cast vec2 to vec4: vec4(value.xy, 0, 0)\n * const vec4 = new IRCast(vec2Expr, 'vec4', 2);\n * ```\n *\n * @public\n */\nclass IRCast extends IRExpression {\n /** The source expression to cast */\n readonly src: IRExpression;\n /** The values to be filled */\n readonly fill: Nullable<number[]>;\n /** The target type name (e.g., 'vec2', 'vec3', 'vec4') */\n readonly type: string;\n /** Number of zero components to append */\n readonly cast: number;\n /**\n * Creates a type cast expression\n *\n * @param src - The source expression\n * @param type - The target type name\n * @param cast - Number of zero components to append\n */\n constructor(src: IRExpression, type: string, cast: number, fill?: number[]) {\n super();\n this.src = src.addRef();\n this.cast = cast;\n this.fill = fill?.slice() ?? null;\n this.type = type;\n }\n /**\n * Generates shader code for the type cast\n *\n * @param pb - The program builder\n * @returns The casted shader expression\n *\n * @remarks\n * Creates a vector constructor with the source value followed by zeros.\n * Example: vec4(src, 0, 0) for casting vec2 to vec4.\n */\n create(pb: ProgramBuilder): PBShaderExp {\n // @ts-ignore\n return pb[this.type](this.src.create(pb), ...(this.fill ?? Array.from({ length: this.cast }).fill(0)));\n }\n}\n\n/**\n * IR expression for texture sampling\n *\n * @remarks\n * Represents a texture lookup operation with optional normal map decoding.\n * Handles both color and normal map sampling with appropriate transformations.\n * Uses reference counting to cache the sampled result if used multiple times.\n *\n * @example\n * ```typescript\n * // Sample color texture\n * const color = new IRSampleTexture(texExpr, uvExpr, 'Color');\n *\n * // Sample normal map (automatically decodes from [0,1] to [-1,1])\n * const normal = new IRSampleTexture(texExpr, uvExpr, 'Normal');\n * ```\n *\n * @public\n */\nclass IRSampleTexture extends IRExpression {\n /** The texture expression */\n readonly tex: IRExpression;\n /** The texture coordinate expression */\n readonly coord: IRExpression;\n /** The sampler type determining how to interpret the sampled value */\n readonly samplerType: 'Color' | 'Normal';\n /** Cached temporary variable name if result is referenced multiple times */\n tmpName: string;\n /**\n * Creates a texture sample expression\n *\n * @param tex - The texture to sample from\n * @param coord - The texture coordinates\n * @param samplerType - How to interpret the sampled value ('Color' or 'Normal')\n */\n constructor(tex: IRExpression, coord: IRExpression, samplerType: 'Color' | 'Normal') {\n super();\n this.tex = tex.addRef();\n this.coord = coord.addRef();\n this.samplerType = samplerType;\n this.tmpName = '';\n }\n /** Reset for next creation */\n reset() {\n this.tmpName = '';\n }\n /**\n * Generates shader code for the texture sample operation\n *\n * @param pb - The program builder\n * @returns The sampled color value\n *\n * @remarks\n * For normal maps, applies the transformation: normal * 2 - 1 to convert\n * from [0,1] texture space to [-1,1] tangent space.\n * Caches result in a temporary variable if referenced multiple times.\n *\n * @throws Error if texture coordinate is not a valid expression or array\n */\n create(pb: ProgramBuilder): PBShaderExp {\n if (this.tmpName) {\n return pb.getCurrentScope()[this.tmpName];\n }\n const tex = this.tex.create(pb);\n const coord = this.coord.create(pb);\n let coordExp: PBShaderExp;\n let texExp: PBShaderExp;\n if (tex instanceof PBShaderExp) {\n texExp = tex;\n } else {\n throw new Error('Invalid texture expression');\n }\n if (coord instanceof PBShaderExp) {\n coordExp = coord;\n } else if (Array.isArray(coord)) {\n // @ts-ignore\n coordExp = pb[`vec${coord.length}`](...coord);\n } else {\n throw new Error('Invalid texture coordinate');\n }\n let exp = pb.textureSample(texExp, coordExp);\n if (this.samplerType === 'Normal') {\n exp = pb.sub(pb.mul(exp, pb.vec4(2, 2, 2, 1)), pb.vec4(1, 1, 1, 0));\n }\n if (this._ref === 1) {\n return exp;\n } else {\n this.tmpName = this.getTmpName(pb.getCurrentScope());\n pb.getCurrentScope()[this.tmpName] = exp;\n return pb.getCurrentScope()[this.tmpName];\n }\n }\n}\n\n/**\n * IR expression for texture uniform constants\n *\n * @remarks\n * Represents a texture parameter that will be bound as a uniform.\n * Includes sampler configuration for texture filtering and addressing modes.\n *\n * @example\n * ```typescript\n * const tex = new IRConstantTexture(\n * 'u_baseColorMap',\n * 'tex2d',\n * 'repeat',\n * 'repeat',\n * 'linear',\n * 'linear',\n * 'linear'\n * );\n * ```\n *\n * @public\n */\nclass IRConstantTexture extends IRExpression {\n /** The uniform texture variable name */\n readonly name: string;\n /** The texture id */\n readonly id: string;\n /** The texture type (e.g., 'tex2d', 'texCube') */\n readonly type: string;\n /** Whether this texture should loaded in sRGB color space */\n readonly sRGB: boolean;\n /** Horizontal texture addressing mode */\n readonly addressU: TextureAddressMode;\n /** Vertical texture addressing mode */\n readonly addressV: TextureAddressMode;\n /** Minification filter mode */\n readonly filterMin: TextureFilterMode;\n /** Magnification filter mode */\n readonly filterMag: TextureFilterMode;\n /** Mipmap filter mode */\n readonly filterMip: TextureFilterMode;\n /** Whether texture params is used */\n useParams: boolean;\n /**\n * Creates a texture constant expression\n *\n * @param name - The uniform variable name\n * @param id - The texture id\n * @param type - The texture type\n * @param sRGB - Whether this texture should be loaded in sRGB color space\n * @param addressU - Horizontal addressing mode\n * @param addressV - Vertical addressing mode\n * @param minFilter - Minification filter\n * @param magFilter - Magnification filter\n * @param mipFilter - Mipmap filter\n */\n constructor(\n name: string,\n id: string,\n type: string,\n sRGB: boolean,\n addressU: TextureAddressMode,\n addressV: TextureAddressMode,\n minFilter: TextureFilterMode,\n magFilter: TextureFilterMode,\n mipFilter: TextureFilterMode\n ) {\n super();\n this.name = name;\n this.id = id;\n this.type = type;\n this.sRGB = sRGB;\n this.addressU = addressU;\n this.addressV = addressV;\n this.filterMin = minFilter;\n this.filterMag = magFilter;\n this.filterMip = mipFilter;\n this.useParams = false;\n }\n /**\n * Generates shader code for the texture uniform\n *\n * @param pb - The program builder\n * @returns The texture uniform reference\n *\n * @remarks\n * Creates the uniform declaration in the global scope if not already present.\n */\n create(pb: ProgramBuilder): PBShaderExp {\n if (!pb.getGlobalScope()[this.name]) {\n // @ts-ignore\n pb.getGlobalScope()[this.name] = pb[this.type]().uniform(2);\n }\n return pb.getGlobalScope()[this.name];\n }\n /**\n * Converts to a uniform texture descriptor\n *\n * @param node - The texture node\n * @returns Uniform texture descriptor with texture and sampler references\n */\n asUniformTexture(): IRUniformTexture {\n return {\n name: this.name,\n texture: this.id,\n wrapS: this.addressU,\n wrapT: this.addressV,\n minFilter: this.filterMin,\n magFilter: this.filterMag,\n mipFilter: this.filterMip,\n type: this.type,\n sRGB: this.sRGB\n };\n }\n}\n\n/**\n * Material blueprint behavior flags\n *\n * @remarks\n * Tracks which vertex attributes and shader features are used by the material.\n * Used to determine which vertex data needs to be provided and which\n * shader permutations need to be compiled.\n *\n * @public\n */\nexport interface MaterialBlueprintIRBehaviors {\n /** Whether the material uses vertex colors */\n useVertexColor: boolean;\n /** Whether the material uses texture coordinates */\n useVertexUV: boolean;\n}\n\n/**\n * Material Blueprint Intermediate Representation\n *\n * @remarks\n * The IR is a compiled representation of the material node graph that can be\n * efficiently translated to shader code. It performs:\n * - Type checking and validation\n * - Expression optimization (common subexpression elimination via reference counting)\n * - Uniform extraction (constants become shader uniforms)\n * - Dependency analysis (determines required vertex attributes)\n *\n * The compilation process:\n * 1. Traverse the DAG in topological order\n * 2. Build an IR expression tree\n * 3. Track uniforms and behaviors\n * 4. Generate optimized shader code from the IR\n *\n * @public\n */\nexport class MaterialBlueprintIR {\n /** The directed acyclic graph of material nodes */\n private _dag: BlueprintDAG;\n /** Unique hash identifying this material configuration */\n private _hash: string;\n /** Editor state snapshot at time of compilation */\n private _editorState: BluePrintEditorState;\n /** Array of all IR expressions in the graph */\n private _expressions!: IRExpression[];\n /** Map from graph node to IR expression index */\n private _expressionMap!: Map<BaseGraphNode, number>;\n /** Array of uniform scalar/vector values to be set at runtime */\n private _uniformValues!: IRUniformValue[];\n /** Array of uniform textures to be bound at runtime */\n private _uniformTextures!: IRUniformTexture[];\n /** Fallback texture uniforms generated for TextureSample nodes without texture input */\n private _textureSampleFallbackMap!: Map<TextureSampleNode, IRConstantTexture>;\n /** Flags indicating which shader features are used */\n private _behaviors!: MaterialBlueprintIRBehaviors;\n /** Array of named output expressions (e.g., baseColor, normal, metallic) */\n private _outputs!: Nullable<{ name: string; expr: IRExpression }[]>;\n /**\n * Creates and compiles a material blueprint IR\n *\n * @param dag - The material node graph DAG\n * @param hash - Unique identifier for this material\n * @param editorState - Editor state snapshot\n *\n * @remarks\n * Automatically compiles the DAG during construction.\n * Check the `ok` property to verify successful compilation.\n */\n constructor(dag: BlueprintDAG, hash: string, editorState: BluePrintEditorState) {\n this._dag = dag ?? {\n nodeMap: {},\n roots: [],\n graph: {\n outgoing: {},\n incoming: {}\n },\n order: []\n };\n this._hash = hash;\n this._editorState = editorState;\n this.compile();\n }\n /**\n * Whether the IR compiled successfully\n *\n * @returns True if compilation produced valid outputs\n */\n get ok() {\n return this._outputs ? this._outputs.length > 0 : false;\n }\n /** Gets the unique hash for this material */\n get hash() {\n return this._hash;\n }\n /** Gets the editor state snapshot */\n get editorState() {\n return this._editorState;\n }\n /** Gets the behavior flags indicating shader requirements */\n get behaviors() {\n return this._behaviors;\n }\n /** Gets the material node DAG */\n get DAG() {\n return this._dag;\n }\n set DAG(dag: BlueprintDAG) {\n this._dag = dag;\n }\n /** Gets the array of uniform values to set at runtime */\n get uniformValues() {\n return this._uniformValues;\n }\n /** Gets the array of uniform textures to bind at runtime */\n get uniformTextures() {\n return this._uniformTextures;\n }\n /**\n * Compiles the material node graph to IR\n *\n * @returns True if compilation succeeded, false otherwise\n *\n * @remarks\n * Processes all root nodes (typically a single material output node)\n * and builds IR expressions for all connected inputs.\n * Collects all required uniforms and sets behavior flags.\n *\n * Compilation fails if any required input is missing.\n */\n compile(): boolean {\n this.reset();\n this._outputs = [];\n for (const root of this._dag.roots) {\n const rootNode = this._dag.nodeMap[root];\n for (const input of rootNode.inputs) {\n const name = input.name;\n if (input.inputNode) {\n this._outputs.push({\n name,\n expr: this.ir(input)!.addRef()\n });\n } else if (Array.isArray(input.defaultValue)) {\n if (input.defaultValue.length === 1) {\n this._outputs.push({\n name,\n expr: new IRConstantf(input.defaultValue[0], '').addRef()\n });\n } else {\n this._outputs.push({\n name,\n expr: new IRConstantfv(input.defaultValue, '', `vec${input.defaultValue.length}`).addRef()\n });\n }\n } else if (input.required) {\n this._outputs = null;\n return false;\n }\n if (!input.inputNode && rootNode instanceof VertexBlockNode) {\n if (input.name === 'Color') {\n this._behaviors.useVertexColor = true;\n } else if (input.name === 'UV') {\n this._behaviors.useVertexUV = true;\n }\n }\n }\n }\n return true;\n }\n /**\n * Generates shader code from the IR\n *\n * @param pb - The program builder to generate code with\n * @returns Array of named shader expressions, or null if IR is invalid\n *\n * @remarks\n * Translates all IR expressions to actual shader code.\n * Should be called within a shader function scope.\n *\n * @example\n * ```typescript\n * pb.fragmentShader(function() {\n * const outputs = ir.create(this);\n * this.baseColor = outputs.find(o => o.name === 'baseColor').exp;\n * this.normal = outputs.find(o => o.name === 'normal').exp;\n * });\n * ```\n */\n create(pb: ProgramBuilder): Nullable<{ name: string; exp: PBShaderExp | number | boolean }[]> {\n if (!this._outputs) {\n return null;\n }\n for (const expr of this._expressions) {\n expr.reset();\n }\n const outputs: { name: string; exp: PBShaderExp | number | boolean }[] = [];\n for (const output of this._outputs) {\n outputs.push({ name: output.name, exp: output.expr.create(pb) });\n }\n return outputs;\n }\n /**\n * Resets the IR state for recompilation\n *\n * @remarks\n * Clears all compiled data including expressions, uniforms, and behaviors.\n * Called at the start of compilation.\n */\n private reset() {\n this._expressions = [];\n this._expressionMap = new Map();\n this._uniformTextures = [];\n this._uniformValues = [];\n this._textureSampleFallbackMap = new Map();\n this._outputs = null;\n this._behaviors = {\n useVertexColor: false,\n useVertexUV: false\n };\n }\n /**\n * Converts a graph node to an IR expression\n *\n * @param node - The graph node to convert\n * @param output - The output slot ID\n * @param originType - Optional type override for type casting\n * @returns The corresponding IR expression\n *\n * @remarks\n * Main dispatch method that routes to specific converters based on node type.\n * Handles automatic type casting when originType differs from node output type.\n *\n * @throws Error if type casting is invalid\n */\n private ir(inputNode: GraphNodeInput): Nullable<IRExpression> {\n const node = inputNode.inputNode!;\n const output = inputNode.inputId!;\n const originType = inputNode.originType;\n const defaultValue = inputNode.defaultValue;\n let expr: Nullable<IRExpression> = null;\n if (node instanceof ConstantScalarNode) {\n expr = this.constantf(node, output);\n } else if (\n node instanceof ConstantVec2Node ||\n node instanceof ConstantVec3Node ||\n node instanceof ConstantVec4Node\n ) {\n expr = this.constantfv(node, output);\n } else if (node instanceof ConstantBooleanNode) {\n expr = this.constantb(node, output);\n } else if (\n node instanceof ConstantBVec2Node ||\n node instanceof ConstantBVec3Node ||\n node instanceof ConstantBVec4Node\n ) {\n expr = this.constantbv(node, output);\n } else if (node instanceof BaseTextureNode) {\n expr = this.constantTexture(node, output);\n } else if (node instanceof TextureSampleNode) {\n expr = this.textureSample(node, output);\n } else if (node instanceof PannerNode) {\n expr = this.panner(node, output);\n } else if (node instanceof MakeVectorNode) {\n expr = this.makeVector(node, output);\n } else if (node instanceof SwizzleNode) {\n expr = this.swizzle(node, output);\n } else if (node instanceof CompComparisonNode) {\n expr = this.comparison(node, output);\n } else if (node instanceof AnyConditionNode) {\n expr = this.any(node, output);\n } else if (node instanceof AllConditionNode) {\n expr = this.all(node, output);\n } else if (node instanceof SelectionNode) {\n expr = this.selection(node, output);\n } else if (node instanceof ResolveVertexPositionNode) {\n expr = this.resolveVertexPosition(node, output);\n } else if (node instanceof ResolveVertexNormalNode) {\n expr = this.resolveVertexNormal(node, output);\n } else if (node instanceof ResolveVertexTangentNode) {\n expr = this.resolveVertexTangent(node, output);\n } else if (node instanceof Hash1Node) {\n expr = this.hash1(node, output);\n } else if (node instanceof Hash2Node) {\n expr = this.hash2(node, output);\n } else if (node instanceof Hash3Node) {\n expr = this.hash3(node, output);\n } else if (node instanceof SimplexNoise2DNode) {\n expr = this.simplexNoise2d(node, output);\n } else if (node instanceof PerlinNoise2DNode) {\n expr = this.perlinNoise2d(node, output);\n } else if (node instanceof GenericMathNode) {\n expr = this.func(node, output);\n } else if (node instanceof TransformNode) {\n expr = this.transform(node, output);\n } else if (node instanceof RotateAboutAxisNode) {\n expr = this.rotateAboutAxis(node, output);\n } else if (node instanceof VertexColorNode) {\n expr = this.vertexColor(node, output);\n } else if (node instanceof VertexUVNode) {\n expr = this.vertexUV(node, output);\n } else if (node instanceof VertexPositionNode) {\n expr = this.vertexPosition(node, output);\n } else if (node instanceof PixelWorldPositionNode) {\n expr = this.pixelWorldPosition(node, output);\n } else if (node instanceof VertexNormalNode) {\n expr = this.vertexNormal(node, output);\n } else if (node instanceof PixelNormalNode) {\n expr = this.pixelNormal(node, output);\n } else if (node instanceof VertexTangentNode) {\n expr = this.vertexTangent(node, output);\n } else if (node instanceof VertexBinormalNode) {\n expr = this.vertexBinormal(node, output);\n } else if (node instanceof ViewMatrixNode) {\n expr = this.viewMatrix(node, output);\n } else if (node instanceof ProjectionMatrixNode) {\n expr = this.projectionMatrix(node, output);\n } else if (node instanceof ViewProjMatrixNode) {\n expr = this.viewProjectionMatrix(node, output);\n } else if (node instanceof InvProjMatrixNode) {\n expr = this.invProjectionMatrix(node, output);\n } else if (node instanceof InvViewProjMatrixNode) {\n expr = this.invViewProjectionMatrix(node, output);\n } else if (node instanceof BillboardMatrixNode) {\n expr = this.billboardMatrix(node, output);\n } else if (node instanceof CameraPositionNode) {\n expr = this.cameraPosition(node, output);\n } else if (node instanceof CameraVectorNode) {\n expr = this.cameraVector(node, output);\n } else if (node instanceof CameraNearFarNode) {\n expr = this.cameraNearFar(node, output);\n } else if (node instanceof SkyEnvTextureNode) {\n expr = this.skyEnvTexture(node, output);\n } else if (node instanceof ElapsedTimeNode) {\n expr = this.elapsedTime(node, output);\n } else if (node instanceof FunctionCallNode) {\n expr = this.functionCall(node, output);\n } else if (node instanceof FunctionInputNode) {\n expr = this.functionInput(node, output);\n } else if (node instanceof FunctionOutputNode) {\n expr = this.functionOutput(node, output);\n }\n if (expr && originType) {\n const outputType = node.getOutputType(output);\n if (originType !== outputType) {\n if (originType === 'float') {\n if (outputType !== 'vec2' && outputType !== 'vec3' && outputType !== 'vec4') {\n throw new Error(`Cannot cast type \\`${outputType}\\` to \\`${originType}`);\n }\n return new IRSwizzle(expr, 'x');\n } else if (outputType === 'float') {\n if (originType !== 'vec2' && originType !== 'vec3' && originType !== 'vec4') {\n throw new Error(`Cannot cast type \\`${outputType}\\` to \\`${originType}`);\n }\n return new IRCast(expr, originType, 0);\n } else if (outputType === 'vec2' || outputType === 'vec3' || outputType === 'vec4') {\n const nOut = Number(outputType[outputType.length - 1]);\n const nOrg = Number(originType[originType.length - 1]);\n if (nOut > nOrg) {\n return new IRSwizzle(expr, 'xyzw'.slice(0, nOrg));\n } else {\n return new IRCast(expr, originType, nOrg - nOut, defaultValue?.slice(nOut - nOrg));\n }\n } else {\n throw new Error(`Cannot cast type \\`${outputType}\\` to \\`${originType}`);\n }\n }\n }\n\n return expr;\n }\n /**\n * Gets or creates an IR expression for a graph node\n *\n * @param node - The graph node\n * @param outputId - The output slot ID\n * @param ctor - The IR expression constructor\n * @param args - Constructor arguments\n * @returns The cached or newly created IR expression\n *\n * @remarks\n * Implements common subexpression elimination by caching expressions per node.\n * Handles output slot swizzling and type casting.\n * Collects uniform values and textures.\n */\n private getOrCreateIRExpression<\n T extends GenericConstructor<IRExpression>,\n F extends ConstructorParameters<T>\n >(node: BaseGraphNode, outputId: number, ctor: T, ...args: F): IRExpression {\n let ir: IRExpression;\n if (!this._expressionMap.has(node)) {\n ir = new ctor(...args);\n this._expressions.push(ir);\n this._expressionMap.set(node, this._expressions.length - 1);\n const uniformValue = ir.asUniformValue(node);\n if (uniformValue) {\n this._uniformValues.push(uniformValue);\n }\n const uniformTexture = ir.asUniformTexture(node);\n if (uniformTexture) {\n this._uniformTextures.push(uniformTexture);\n }\n } else {\n ir = this._expressions[this._expressionMap.get(node)!] as InstanceType<T>;\n }\n if (!ir.outputs[outputId]) {\n const output = node.outputs.find((v) => v.id === outputId)!;\n ir.outputs[outputId] = ir;\n if (output.swizzle) {\n ir.outputs[outputId] = new IRSwizzle(ir.outputs[outputId], output.swizzle);\n }\n }\n return ir.outputs[outputId];\n }\n /** Converts a MakeVector node to IR */\n private makeVector(node: MakeVectorNode, output: number): IRExpression {\n const params: IRExpression[] = [];\n for (const input of node.inputs) {\n if (input.inputNode) {\n params.push(this.ir(input)!);\n }\n }\n const funcName = node.getOutputType(output);\n return this.getOrCreateIRExpression(node, output, IRFunc, params, funcName);\n }\n /** Converts a swizzle node to IR */\n private swizzle(node: SwizzleNode, output: number): IRExpression {\n return this.getOrCreateIRExpression(node, output, IRSwizzle, this.ir(node.inputs[0])!, node.swizzle);\n }\n /** Converts a comparison node to IR */\n private comparison(node: CompComparisonNode, output: number): IRExpression {\n return this.getOrCreateIRExpression(\n node,\n output,\n IRComparison,\n this.ir(node.inputs[0])!,\n this.ir(node.inputs[1])!,\n node.mode\n );\n }\n /** Converts an any-condition node to IR */\n private any(node: AnyConditionNode, output: number): IRExpression {\n return this.getOrCreateIRExpression(node, output, IRAny, this.ir(node.inputs[0])!);\n }\n /** Converts an all-condition node to IR */\n private all(node: AllConditionNode, output: number): IRExpression {\n return this.getOrCreateIRExpression(node, output, IRAll, this.ir(node.inputs[0])!);\n }\n /** Converts a selection node to IR */\n private selection(node: SelectionNode, output: number): IRExpression {\n return this.getOrCreateIRExpression(\n node,\n output,\n IRSelection,\n this.ir(node.inputs[0])!,\n this.ir(node.inputs[1])!,\n this.ir(node.inputs[2])!\n );\n }\n /** Converts a Transform node to IR */\n private transform(node: TransformNode, output: number): IRExpression {\n const params: IRExpression[] = [];\n for (const input of node.inputs) {\n if (input.inputNode) {\n params.push(this.ir(input)!);\n }\n }\n return this.getOrCreateIRExpression(node, output, IRFunc, params, 'mul');\n }\n /** Converts a generic math function node to IR */\n private func(node: GenericMathNode, output: number): IRExpression {\n const params: IRExpression[] = [];\n for (const input of node.inputs) {\n if (input.inputNode) {\n params.push(this.ir(input)!);\n }\n }\n const funcName = node.func;\n return this.getOrCreateIRExpression(node, output, IRFunc, params, funcName);\n }\n /** Converts a function output node to IR */\n private functionOutput(node: FunctionOutputNode, output: number): IRExpression {\n const input = this.ir(node.inputs[0])!;\n return this.getOrCreateIRExpression(node, output, IRFunctionOutput, input);\n }\n /** Converts a rotate-about-axis node to IR */\n private rotateAboutAxis(node: RotateAboutAxisNode, output: number): IRExpression {\n const axis = this.ir(node.inputs[0])!;\n const angleTurns = node.inputs[1].inputNode\n ? this.ir(node.inputs[1])!\n : new IRConstantf(node.inputs[1].defaultValue?.[0] ?? 0, '');\n const pivot = node.inputs[2].inputNode\n ? this.ir(node.inputs[2])!\n : new IRConstantfv(node.inputs[2].defaultValue ?? [0, 0, 0], '', 'vec3');\n const position = this.ir(node.inputs[3])!;\n\n const angleRad = new IRFunc([angleTurns, 6.283185307179586], 'mul'); // turns -> radians\n const cosA = new IRFunc([angleRad], 'cos');\n const sinA = new IRFunc([angleRad], 'sin');\n\n const p = new IRFunc([position, pivot], 'sub');\n const term1 = new IRFunc([p, cosA], 'mul');\n const term2 = new IRFunc([new IRFunc([axis, p], 'cross'), sinA], 'mul');\n const term3 = new IRFunc(\n [axis, new IRFunc([new IRFunc([axis, p], 'dot'), new IRFunc([1, cosA], 'sub')], 'mul')],\n 'mul'\n );\n const rotated = new IRFunc([new IRFunc([term1, term2], 'add'), term3], 'add');\n return this.getOrCreateIRExpression(node, output, IRFunc, [rotated, pivot], 'add');\n }\n /** Converts a panner node to IR */\n private panner(node: PannerNode, output: number): IRExpression {\n const coordInput = node.inputs[0];\n const timeInput = node.inputs[1];\n const speedInput = node.inputs[2];\n\n const coord = coordInput.inputNode\n ? this.ir(coordInput)!\n : (() => {\n this._behaviors.useVertexUV = true;\n return new IRInput((scope) => scope.zVertexUV);\n })();\n\n const time = timeInput.inputNode\n ? this.ir(timeInput)!\n : new IRInput((scope: PBInsideFunctionScope) => ShaderHelper.getElapsedTime(scope));\n\n const speed = speedInput.inputNode\n ? this.ir(speedInput)!\n : new IRConstantfv(speedInput.defaultValue ?? [0, 0], '', 'vec2');\n\n return this.getOrCreateIRExpression(\n node,\n output,\n IRFunc,\n [coord, new IRFunc([time, speed], 'mul')],\n 'add'\n );\n }\n /** Converts a vertex color input node to IR */\n private vertexColor(node: VertexColorNode, output: number): IRExpression {\n this._behaviors.useVertexColor = true;\n return this.getOrCreateIRExpression(node, output, IRInput, (scope) => scope.zVertexColor);\n }\n /** Converts a vertex UV input node to IR */\n private vertexUV(node: VertexUVNode, output: number): IRExpression {\n this._behaviors.useVertexUV = true;\n return this.getOrCreateIRExpression(node, output, IRInput, (scope) => {\n return scope.zVertexUV;\n });\n }\n /** Converts a vertex normal input node to IR */\n private vertexNormal(node: VertexNormalNode, output: number): IRExpression {\n return this.getOrCreateIRExpression(node, output, IRInput, (scope) =>\n scope.$builder.getDevice().type === 'vertex'\n ? (scope.$getVertexAttrib('normal') ?? ShaderHelper.resolveVertexNormal(scope))\n : scope.$builder.normalize(scope.zVertexNormal)\n );\n }\n /** Converts a pixel normal input node to IR */\n private pixelNormal(node: PixelNormalNode, output: number): IRExpression {\n return this.getOrCreateIRExpression(node, output, IRInput, (scope) =>\n scope.$builder.getDevice().type === 'vertex'\n ? (scope.$getVertexAttrib('normal') ?? ShaderHelper.resolveVertexNormal(scope))\n : scope.$builder.normalize(scope.zVertexNormal)\n );\n }\n /** Converts a vertex tangent input node to IR */\n private vertexTangent(node: VertexTangentNode, output: number): IRExpression {\n return this.getOrCreateIRExpression(node, output, IRInput, (scope) =>\n scope.$builder.getDevice().type === 'vertex'\n ? (scope.$getVertexAttrib('tangent') ?? ShaderHelper.resolveVertexTangent(scope))\n : scope.$builder.normalize(scope.zVertexTangent)\n );\n }\n /** Converts a vertex binormal input node to IR */\n private vertexBinormal(node: VertexBinormalNode, output: number): IRExpression {\n return this.getOrCreateIRExpression(node, output, IRInput, (scope) =>\n scope.$builder.normalize(scope.zVertexBinormal)\n );\n }\n /** Converts a vertex position input node to IR */\n private vertexPosition(node: VertexPositionNode, output: number): IRExpression {\n return this.getOrCreateIRExpression(node, output, IRInput, (scope: PBInsideFunctionScope) => {\n if (scope.$builder.getDevice().type === 'vertex') {\n const worldMatrix = ShaderHelper.getWorldMatrix(scope);\n const basePos = ShaderHelper.resolveVertexPosition(scope);\n return scope.$builder.mul(worldMatrix, scope.$builder.vec4(basePos, 1)).xyz;\n }\n return scope.zWorldPos;\n });\n }\n /** Converts a pixel world position input node to IR */\n private pixelWorldPosition(node: PixelWorldPositionNode, output: number): IRExpression {\n return this.getOrCreateIRExpression(node, output, IRInput, (scope: PBInsideFunctionScope) => {\n if (scope.$builder.getDevice().type === 'vertex') {\n const worldMatrix = ShaderHelper.getWorldMatrix(scope);\n const basePos = ShaderHelper.resolveVertexPosition(scope);\n return scope.$builder.mul(worldMatrix, scope.$builder.vec4(basePos, 1)).xyz;\n }\n return scope.zWorldPos;\n });\n }\n /** Converts a view matrix input node to IR */\n private viewMatrix(node: ViewMatrixNode, output: number): IRExpression {\n return this.getOrCreateIRExpression(node, output, IRInput, (scope: PBInsideFunctionScope) =>\n ShaderHelper.getViewMatrix(scope)\n );\n }\n /** Converts a projection matrix input node to IR */\n private projectionMatrix(node: ProjectionMatrixNode, output: number): IRExpression {\n return this.getOrCreateIRExpression(node, output, IRInput, (scope: PBInsideFunctionScope) =>\n ShaderHelper.getProjectionMatrix(scope)\n );\n }\n /** Converts a view-projection matrix input node to IR */\n private viewProjectionMatrix(node: ViewProjMatrixNode, output: number): IRExpression {\n return this.getOrCreateIRExpression(node, output, IRInput, (scope: PBInsideFunctionScope) =>\n ShaderHelper.getViewProjectionMatrix(scope)\n );\n }\n /** Converts an inverse projection matrix input node to IR */\n private invProjectionMatrix(node: InvProjMatrixNode, output: number): IRExpression {\n return this.getOrCreateIRExpression(node, output, IRInput, (scope: PBInsideFunctionScope) =>\n ShaderHelper.getInvProjectionMatrix(scope)\n );\n }\n /** Converts an inverse view-projection matrix input node to IR */\n private invViewProjectionMatrix(node: InvViewProjMatrixNode, output: number): IRExpression {\n return this.getOrCreateIRExpression(node, output, IRInput, (scope: PBInsideFunctionScope) =>\n ShaderHelper.getInvViewProjectionMatrix(scope)\n );\n }\n /** Converts a camera position input node to IR */\n private cameraPosition(node: CameraPositionNode, output: number): IRExpression {\n return this.getOrCreateIRExpression(node, output, IRInput, (scope: PBInsideFunctionScope) =>\n ShaderHelper.getCameraPosition(scope)\n );\n }\n /** Converts a camera vector input node to IR */\n private cameraVector(node: CameraVectorNode, output: number): IRExpression {\n return this.getOrCreateIRExpression(node, output, IRInput, (scope: PBInsideFunctionScope) => {\n const pb = scope.$builder;\n const worldPos =\n pb.getDevice().type === 'vertex'\n ? pb.mul(ShaderHelper.getWorldMatrix(scope), pb.vec4(ShaderHelper.resolveVertexPosition(scope), 1))\n .xyz\n : scope.zWorldPos;\n return pb.normalize(pb.sub(ShaderHelper.getCameraPosition(scope), worldPos));\n });\n }\n /** Converts a camera near/far input node to IR */\n private cameraNearFar(node: CameraNearFarNode, output: number): IRExpression {\n return this.getOrCreateIRExpression(\n node,\n output,\n IRInput,\n (scope: PBInsideFunctionScope) => ShaderHelper.getCameraParams(scope).xy\n );\n }\n /** Converts a sky environment texture input node to IR */\n private skyEnvTexture(node: SkyEnvTextureNode, output: number): IRExpression {\n return this.getOrCreateIRExpression(node, output, IRInput, (scope: PBInsideFunctionScope) =>\n ShaderHelper.getBakedSkyTexture(scope)\n );\n }\n /** Converts an elapsed time input node to IR */\n private elapsedTime(node: ElapsedTimeNode, output: number): IRExpression {\n return this.getOrCreateIRExpression(node, output, IRInput, (scope: PBInsideFunctionScope) =>\n ShaderHelper.getElapsedTime(scope)\n );\n }\n /** Converts a function input node to IR */\n private functionInput(node: FunctionInputNode, output: number): IRExpression {\n return this.getOrCreateIRExpression(\n node,\n output,\n IRInput,\n (scope: PBInsideFunctionScope) => scope[node.name]\n );\n }\n /** Converts an vertex position resolver node to IR */\n private resolveVertexPosition(node: ResolveVertexPositionNode, output: number): IRExpression {\n return this.getOrCreateIRExpression(node, output, IRFunc, [], (pb: ProgramBuilder) =>\n ShaderHelper.resolveVertexPosition(pb.getCurrentScope() as PBInsideFunctionScope)\n );\n }\n /** Converts an vertex normal resolver node to IR */\n private resolveVertexNormal(node: ResolveVertexNormalNode, output: number): IRExpression {\n return this.getOrCreateIRExpression(node, output, IRFunc, [], (pb: ProgramBuilder) =>\n ShaderHelper.resolveVertexNormal(pb.getCurrentScope() as PBInsideFunctionScope)\n );\n }\n /** Converts an vertex tangent resolver node to IR */\n private resolveVertexTangent(node: ResolveVertexTangentNode, output: number): IRExpression {\n return this.getOrCreateIRExpression(node, output, IRFunc, [], (pb: ProgramBuilder) =>\n ShaderHelper.resolveVertexTangent(pb.getCurrentScope() as PBInsideFunctionScope)\n );\n }\n /** Converts an billboard matrix input node to IR */\n private billboardMatrix(node: BillboardMatrixNode, output: number): IRExpression {\n return this.getOrCreateIRExpression(node, output, IRFunc, [], (pb: ProgramBuilder) => {\n pb.func('Z_calcBillboardMatrix', [], function () {\n this.$l.objScale = pb.vec3(\n pb.length(ShaderHelper.getWorldMatrix(this)[0].xyz),\n pb.length(ShaderHelper.getWorldMatrix(this)[1].xyz),\n pb.length(ShaderHelper.getWorldMatrix(this)[2].xyz)\n );\n this.$l.rotation = pb.mat3(\n pb.div(ShaderHelper.getWorldMatrix(this)[0].xyz, this.objScale.x),\n pb.div(ShaderHelper.getWorldMatrix(this)[1].xyz, this.objScale.y),\n pb.div(ShaderHelper.getWorldMatrix(this)[2].xyz, this.objScale.z)\n );\n this.$l.cameraForward = pb.normalize(ShaderHelper.getInvViewMatrix(this)[2].xyz);\n this.$l.cameraUp = pb.normalize(ShaderHelper.getInvViewMatrix(this)[1].xyz);\n this.$l.cameraRight = pb.normalize(ShaderHelper.getInvViewMatrix(this)[0].xyz);\n this.$l.objForward = pb.normalize(pb.div(pb.mul(this.cameraForward, this.rotation), this.objScale));\n this.$l.objUp = pb.normalize(pb.div(pb.mul(this.cameraUp, this.rotation), this.objScale));\n this.$l.objRight = pb.normalize(pb.div(pb.mul(this.cameraRight, this.rotation), this.objScale));\n // make ortho\n /*\n this.objRight = pb.normalize(\n pb.sub(this.objRight, pb.mul(this.objUp, pb.dot(this.objRight, this.objUp)))\n );\n this.objForward = pb.cross(this.objUp, this.objRight);\n */\n // make rotation matrix\n this.$l.billboardMatrix = pb.mat3(\n this.objRight.x,\n this.objUp.x,\n this.objForward.x,\n this.objRight.y,\n this.objUp.y,\n this.objForward.y,\n this.objRight.z,\n this.objUp.z,\n this.objForward.z\n );\n this.$return(pb.transpose(this.billboardMatrix));\n });\n return pb.getGlobalScope().Z_calcBillboardMatrix();\n });\n }\n /** Converts a hash1 node to IR */\n private hash1(node: Hash1Node, output: number): IRExpression {\n const params: IRExpression[] = [];\n const input = node.inputs[0];\n ASSERT(!!input.inputNode);\n const type = input.inputNode.getOutputType(input.inputId!);\n ASSERT(type === 'float' || type === 'vec2' || type === 'vec3');\n params.push(this.ir(input)!);\n return this.getOrCreateIRExpression(\n node,\n output,\n IRFunc,\n params,\n (pb: ProgramBuilder, ...params: (number | boolean | PBShaderExp)[]) => {\n const scope = pb.getCurrentScope() as PBInsideFunctionScope;\n const seed = params[0] as number | PBShaderExp;\n return type === 'float'\n ? hash11(scope, seed)\n : type === 'vec2'\n ? hash21(scope, seed as PBShaderExp)\n : hash31(scope, seed as PBShaderExp);\n }\n );\n }\n /** Converts a hash2 node to IR */\n private hash2(node: Hash1Node, output: number): IRExpression {\n const params: IRExpression[] = [];\n const input = node.inputs[0];\n ASSERT(!!input.inputNode);\n const type = input.inputNode.getOutputType(input.inputId!);\n ASSERT(type === 'float' || type === 'vec2' || type === 'vec3');\n params.push(this.ir(input)!);\n return this.getOrCreateIRExpression(\n node,\n output,\n IRFunc,\n params,\n (pb: ProgramBuilder, ...params: (number | boolean | PBShaderExp)[]) => {\n const scope = pb.getCurrentScope() as PBInsideFunctionScope;\n const seed = params[0] as number | PBShaderExp;\n return type === 'float'\n ? hash12(scope, seed)\n : type === 'vec2'\n ? hash22(scope, seed as PBShaderExp)\n : hash32(scope, seed as PBShaderExp);\n }\n );\n }\n /** Converts a hash3 node to IR */\n private hash3(node: Hash1Node, output: number): IRExpression {\n const params: IRExpression[] = [];\n const input = node.inputs[0];\n ASSERT(!!input.inputNode);\n const type = input.inputNode.getOutputType(input.inputId!);\n ASSERT(type === 'float' || type === 'vec2' || type === 'vec3');\n params.push(this.ir(input)!);\n return this.getOrCreateIRExpression(\n node,\n output,\n IRFunc,\n params,\n (pb: ProgramBuilder, ...params: (number | boolean | PBShaderExp)[]) => {\n const scope = pb.getCurrentScope() as PBInsideFunctionScope;\n const seed = params[0] as number | PBShaderExp;\n return type === 'float'\n ? hash13(scope, seed)\n : type === 'vec2'\n ? hash23(scope, seed as PBShaderExp)\n : hash33(scope, seed as PBShaderExp);\n }\n );\n }\n /** Converts a simple noise node to IR */\n private simplexNoise2d(node: SimplexNoise2DNode, output: number): IRExpression {\n const params: IRExpression[] = [];\n for (const input of node.inputs) {\n if (input.inputNode) {\n params.push(this.ir(input)!);\n }\n }\n return this.getOrCreateIRExpression(\n node,\n output,\n IRFunc,\n params,\n (pb: ProgramBuilder, ...params: (number | boolean | PBShaderExp)[]) => {\n pb.func(node.toString(), [pb.vec2('uv'), pb.float('scale')], function () {\n this.$l.t = pb.float(0);\n let freq = 1;\n let amp = 0.5 * 0.5 * 0.5;\n this.t = pb.add(this.t, pb.mul(valueNoise(this, pb.mul(this.uv, this.scale, 1 / freq)), amp));\n freq *= 2;\n amp *= 2;\n this.t = pb.add(this.t, pb.mul(valueNoise(this, pb.mul(this.uv, this.scale, 1 / freq)), amp));\n freq *= 2;\n amp *= 2;\n this.t = pb.add(this.t, pb.mul(valueNoise(this, pb.mul(this.uv, this.scale, 1 / freq)), amp));\n this.$return(this.t);\n });\n return pb.getGlobalScope()[node.toString()](params[0], params[1]);\n }\n );\n }\n /** Converts a perlin noise node to IR */\n private perlinNoise2d(node: SimplexNoise2DNode, output: number): IRExpression {\n const params: IRExpression[] = [];\n for (const input of node.inputs) {\n if (input.inputNode) {\n params.push(this.ir(input)!);\n }\n }\n return this.getOrCreateIRExpression(\n node,\n output,\n IRFunc,\n params,\n (pb: ProgramBuilder, ...params: (number | boolean | PBShaderExp)[]) => {\n pb.func('Z_perlinNoise2dDir', [pb.vec2('uv')], function () {\n this.$l.p = pb.mod(this.uv, pb.vec2(289));\n this.$l.x = pb.add(pb.mod(pb.mul(pb.add(pb.mul(this.p.x, 34), 1), this.p.x), 289), this.p.y);\n this.x = pb.mod(pb.mul(pb.add(pb.mul(this.x, 34), 1), this.x), 289);\n this.x = pb.sub(pb.mul(pb.fract(pb.div(this.x, 41)), 2), 1);\n this.$return(\n pb.normalize(pb.vec2(pb.sub(this.x, pb.floor(pb.add(this.x, 0.5))), pb.sub(pb.abs(this.x), 0.5)))\n );\n });\n pb.func('Z_perlinNoise2dImpl', [pb.vec2('uv')], function () {\n this.$l.i = pb.floor(this.uv);\n this.$l.f = pb.fract(this.uv);\n this.$l.r00 = pb.dot(this.Z_perlinNoise2dDir(this.i), this.f);\n this.$l.r01 = pb.dot(\n this.Z_perlinNoise2dDir(pb.add(this.i, pb.vec2(0, 1))),\n pb.sub(this.f, pb.vec2(0, 1))\n );\n this.$l.r10 = pb.dot(\n this.Z_perlinNoise2dDir(pb.add(this.i, pb.vec2(1, 0))),\n pb.sub(this.f, pb.vec2(1, 0))\n );\n this.$l.r11 = pb.dot(\n this.Z_perlinNoise2dDir(pb.add(this.i, pb.vec2(1, 1))),\n pb.sub(this.f, pb.vec2(1, 1))\n );\n this.f = pb.mul(\n this.f,\n this.f,\n this.f,\n pb.add(pb.mul(this.f, pb.sub(pb.mul(this.f, 6), pb.vec2(15))), 10)\n );\n this.$return(\n pb.mix(pb.mix(this.r00, this.r01, this.f.y), pb.mix(this.r10, this.r11, this.f.y), this.f.x)\n );\n });\n pb.func(node.toString(), [pb.vec2('uv'), pb.float('scale')], function () {\n this.$return(pb.add(this.Z_perlinNoise2dImpl(pb.mul(this.uv, this.scale)), 0.5));\n });\n return pb.getGlobalScope()[node.toString()](params[0], params[1]);\n }\n );\n }\n /** Converts a function call node to IR */\n private functionCall(node: FunctionCallNode, output: number): IRExpression {\n const args = node.inputs.map((input) => {\n return this.ir(input)!;\n });\n return this.getOrCreateIRExpression(node, output, IRCallFunc, node, args);\n }\n /** Converts a scalar constant node to IR */\n private constantf(node: ConstantScalarNode, output: number): IRExpression {\n return this.getOrCreateIRExpression(node, output, IRConstantf, node.x, node.paramName);\n }\n /** Converts a vector constant node to IR */\n private constantfv(\n node: ConstantVec2Node | ConstantVec3Node | ConstantVec4Node,\n output: number\n ): IRExpression {\n const value =\n node instanceof ConstantVec2Node\n ? [node.x, node.y]\n : node instanceof ConstantVec3Node\n ? [node.x, node.y, node.z]\n : [node.x, node.y, node.z, node.w];\n return this.getOrCreateIRExpression(\n node,\n output,\n IRConstantfv,\n value,\n node.paramName,\n `vec${value.length}`\n );\n }\n /** Converts a scalar boolean constant node to IR */\n private constantb(node: ConstantBooleanNode, output: number): IRExpression {\n return this.getOrCreateIRExpression(node, output, IRConstantb, node.x);\n }\n /** Converts a boolean vector constant node to IR */\n private constantbv(\n node: ConstantBVec2Node | ConstantBVec3Node | ConstantBVec4Node,\n output: number\n ): IRExpression {\n const value =\n node instanceof ConstantBVec2Node\n ? [node.x, node.y]\n : node instanceof ConstantBVec3Node\n ? [node.x, node.y, node.z]\n : [node.x, node.y, node.z, node.w];\n return this.getOrCreateIRExpression(node, output, IRConstantbv, value);\n }\n /** Converts a texture constant node to IR */\n private constantTexture(node: BaseTextureNode, output: number): IRConstantTexture {\n return this.getOrCreateIRExpression(\n node,\n output,\n IRConstantTexture,\n node.paramName,\n node.textureId,\n node.getOutputType(1),\n node.sRGB,\n node.addressU,\n node.addressV,\n node.filterMin,\n node.filterMag,\n node.filterMip\n ) as IRConstantTexture;\n }\n /** Converts a texture sample node to IR */\n private textureSample(node: TextureSampleNode, output: number): IRExpression {\n const tex = node.inputs[0].inputNode ? this.ir(node.inputs[0])! : this.textureSampleFallbackTexture(node);\n const coord = node.inputs[1].inputNode\n ? this.ir(node.inputs[1])!\n : (() => {\n this._behaviors.useVertexUV = true;\n return new IRInput((scope) => scope.zVertexUV);\n })();\n return this.getOrCreateIRExpression(node, output, IRSampleTexture, tex, coord, node.samplerType);\n }\n /** Gets or creates fallback texture uniform expression for texture sample nodes */\n private textureSampleFallbackTexture(node: TextureSampleNode): IRConstantTexture {\n let ir = this._textureSampleFallbackMap.get(node);\n if (!ir) {\n ir = new IRConstantTexture(\n node.paramName,\n node.textureId,\n 'tex2D',\n node.sRGB,\n node.addressU,\n node.addressV,\n node.filterMin,\n node.filterMag,\n node.filterMip\n );\n this._expressions.push(ir);\n this._textureSampleFallbackMap.set(node, ir);\n const uniformTexture = ir.asUniformTexture();\n if (uniformTexture) {\n this._uniformTextures.push(uniformTexture);\n }\n }\n return ir;\n }\n}\n"],"names":["IRExpression","_ref","_outputs","outputs","addRef","getTmpName","scope","tmp","name","asUniformValue","_node","asUniformTexture","reset","IRConstantf","value","paramName","create","pb","getGlobalScope","float","uniform","type","IRConstantb","IRConstantfv","length","Array","isArray","IRConstantbv","IRInput","func","getCurrentScope","IRFunc","params","map","param","tmpName","exp","IRFunctionOutput","input","IRCallFunc","node","args","that","ir","IR","v","rettype","defineStruct","output","index","outs","swizzle","$return","arg","IRSelection","a","b","cond","c","select","IRAny","src","any","IRAll","all","IRComparison","mode","compEqual","compNotEqual","lessThan","lessThanEqual","greaterThan","greaterThanEqual","Error","IRSwizzle","hash","IRCast","cast","fill","slice","from","IRSampleTexture","tex","coord","samplerType","coordExp","texExp","PBShaderExp","textureSample","sub","mul","vec4","IRConstantTexture","useParams","id","sRGB","addressU","addressV","minFilter","magFilter","mipFilter","filterMin","filterMag","filterMip","texture","wrapS","wrapT","MaterialBlueprintIR","dag","editorState","_dag","nodeMap","roots","graph","outgoing","incoming","order","_hash","_editorState","compile","ok","behaviors","_behaviors","DAG","uniformValues","_uniformValues","uniformTextures","_uniformTextures","root","rootNode","inputs","inputNode","push","expr","defaultValue","required","VertexBlockNode","useVertexColor","useVertexUV","_expressions","_expressionMap","Map","_textureSampleFallbackMap","inputId","originType","ConstantScalarNode","constantf","ConstantVec2Node","ConstantVec3Node","ConstantVec4Node","constantfv","ConstantBooleanNode","constantb","ConstantBVec2Node","ConstantBVec3Node","ConstantBVec4Node","constantbv","BaseTextureNode","constantTexture","TextureSampleNode","PannerNode","panner","MakeVectorNode","makeVector","SwizzleNode","CompComparisonNode","comparison","AnyConditionNode","AllConditionNode","SelectionNode","selection","ResolveVertexPositionNode","resolveVertexPosition","ResolveVertexNormalNode","resolveVertexNormal","ResolveVertexTangentNode","resolveVertexTangent","Hash1Node","hash1","Hash2Node","hash2","Hash3Node","hash3","SimplexNoise2DNode","simplexNoise2d","PerlinNoise2DNode","perlinNoise2d","GenericMathNode","TransformNode","transform","RotateAboutAxisNode","rotateAboutAxis","VertexColorNode","vertexColor","VertexUVNode","vertexUV","VertexPositionNode","vertexPosition","PixelWorldPositionNode","pixelWorldPosition","VertexNormalNode","vertexNormal","PixelNormalNode","pixelNormal","VertexTangentNode","vertexTangent","VertexBinormalNode","vertexBinormal","ViewMatrixNode","viewMatrix","ProjectionMatrixNode","projectionMatrix","ViewProjMatrixNode","viewProjectionMatrix","InvProjMatrixNode","invProjectionMatrix","InvViewProjMatrixNode","invViewProjectionMatrix","BillboardMatrixNode","billboardMatrix","CameraPositionNode","cameraPosition","CameraVectorNode","cameraVector","CameraNearFarNode","cameraNearFar","SkyEnvTextureNode","skyEnvTexture","ElapsedTimeNode","elapsedTime","FunctionCallNode","functionCall","FunctionInputNode","functionInput","FunctionOutputNode","functionOutput","outputType","getOutputType","nOut","Number","nOrg","getOrCreateIRExpression","outputId","ctor","has","set","uniformValue","uniformTexture","get","find","funcName","axis","angleTurns","pivot","position","angleRad","cosA","sinA","p","term1","term2","term3","rotated","coordInput","timeInput","speedInput","zVertexUV","time","ShaderHelper","getElapsedTime","speed","zVertexColor","$builder","getDevice","$getVertexAttrib","normalize","zVertexNormal","zVertexTangent","zVertexBinormal","worldMatrix","getWorldMatrix","basePos","xyz","zWorldPos","getViewMatrix","getProjectionMatrix","getViewProjectionMatrix","getInvProjectionMatrix","getInvViewProjectionMatrix","getCameraPosition","worldPos","getCameraParams","xy","getBakedSkyTexture","$l","objScale","vec3","rotation","mat3","div","x","y","z","cameraForward","getInvViewMatrix","cameraUp","cameraRight","objForward","objUp","objRight","transpose","Z_calcBillboardMatrix","ASSERT","seed","hash11","hash21","hash31","hash12","hash22","hash32","hash13","hash23","hash33","toString","vec2","t","freq","amp","add","valueNoise","uv","scale","mod","fract","floor","abs","i","f","r00","dot","Z_perlinNoise2dDir","r01","r10","r11","mix","Z_perlinNoise2dImpl","w","textureId","textureSampleFallbackTexture"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ir.js","sources":["../../../../src/utility/blueprint/material/ir.ts"],"sourcesContent":["import type {\r\n BaseTexture,\r\n PBInsideFunctionScope,\r\n PBScope,\r\n ProgramBuilder,\r\n TextureAddressMode,\r\n TextureFilterMode,\r\n TextureSampler\r\n} from '@zephyr3d/device';\r\nimport { PBShaderExp } from '@zephyr3d/device';\r\nimport type { BaseGraphNode, BlueprintDAG, GraphNodeInput, IGraphNode } from '../node';\r\nimport {\r\n ConstantBooleanNode,\r\n ConstantBVec2Node,\r\n ConstantBVec3Node,\r\n ConstantBVec4Node,\r\n ConstantScalarNode,\r\n ConstantVec2Node,\r\n ConstantVec3Node,\r\n ConstantVec4Node\r\n} from '../common/constants';\r\nimport type { GenericConstructor, DRef, Nullable } from '@zephyr3d/base';\r\nimport type { Vector4 } from '@zephyr3d/base';\r\nimport { ASSERT } from '@zephyr3d/base';\r\nimport { BaseTextureNode, PannerNode, TextureSampleNode } from './texture';\r\nimport type { ComparisonMode } from '../common/math';\r\nimport {\r\n GenericMathNode,\r\n PerlinNoise2DNode,\r\n MakeVectorNode,\r\n SimplexNoise2DNode,\r\n TransformNode,\r\n Hash1Node,\r\n Hash2Node,\r\n Hash3Node,\r\n RotateAboutAxisNode,\r\n SwizzleNode,\r\n CompComparisonNode,\r\n AnyConditionNode,\r\n AllConditionNode,\r\n SelectionNode\r\n} from '../common/math';\r\nimport {\r\n BillboardMatrixNode,\r\n InvProjMatrixNode,\r\n InvViewProjMatrixNode,\r\n ProjectionMatrixNode,\r\n ResolveVertexNormalNode,\r\n ResolveVertexPositionNode,\r\n ResolveVertexTangentNode,\r\n ViewMatrixNode,\r\n ViewProjMatrixNode\r\n} from './inputs';\r\nimport {\r\n CameraNearFarNode,\r\n CameraPositionNode,\r\n CameraVectorNode,\r\n ElapsedTimeNode,\r\n PixelNormalNode,\r\n PixelWorldPositionNode,\r\n SkyEnvTextureNode,\r\n VertexBinormalNode,\r\n VertexColorNode,\r\n VertexNormalNode,\r\n VertexPositionNode,\r\n VertexTangentNode,\r\n VertexUVNode\r\n} from './inputs';\r\nimport { ShaderHelper } from '../../../material/shader/helper';\r\nimport { FunctionCallNode, FunctionInputNode, FunctionOutputNode } from './func';\r\nimport {\r\n hash11,\r\n hash12,\r\n hash13,\r\n hash21,\r\n hash22,\r\n hash23,\r\n hash31,\r\n hash32,\r\n hash33,\r\n valueNoise\r\n} from '../../../shaders/noise';\r\nimport { VertexBlockNode } from './pbr';\r\n\r\n/**\r\n * Represents a uniform scalar or vector value in the intermediate representation\r\n *\r\n * @remarks\r\n * Used to track uniform values that need to be passed to the shader at runtime.\r\n * The value can be either a single number or a Float32Array for vector types.\r\n *\r\n * @public\r\n */\r\nexport interface IRUniformValue {\r\n name: string;\r\n type: string;\r\n value: number[];\r\n}\r\n\r\n/**\r\n * Represents a uniform scalar or vector value in the blueprint intermediate representation\r\n *\r\n * @public\r\n */\r\nexport interface BluePrintUniformValue extends IRUniformValue {\r\n inVertexShader: boolean;\r\n inFragmentShader: boolean;\r\n finalValue?: Nullable<number | Float32Array<ArrayBuffer>>;\r\n}\r\n\r\n/**\r\n * Represents a uniform texture and its sampler in the intermediate representation\r\n *\r\n * @remarks\r\n * Used to track texture uniforms that need to be bound to the shader at runtime.\r\n * Includes both the texture reference and sampler configuration.\r\n *\r\n * @public\r\n */\r\nexport interface IRUniformTexture {\r\n name: string;\r\n type: string;\r\n texture: string;\r\n sRGB: boolean;\r\n wrapS: string;\r\n wrapT: string;\r\n minFilter: string;\r\n magFilter: string;\r\n mipFilter: string;\r\n}\r\n\r\n/**\r\n * Represents a uniform texture and its sampler in the blueprint intermediate representation\r\n *\r\n * @public\r\n */\r\nexport interface BluePrintUniformTexture extends IRUniformTexture {\r\n inVertexShader: boolean;\r\n inFragmentShader: boolean;\r\n finalTexture?: Nullable<DRef<BaseTexture>>;\r\n finalSampler?: TextureSampler;\r\n params?: Nullable<Vector4>;\r\n}\r\n\r\n/**\r\n * Editor state of a blueprint\r\n *\r\n * @public\r\n */\r\nexport interface BluePrintEditorState {\r\n nodes: {\r\n id: number;\r\n locked: boolean;\r\n node: Record<string, unknown>;\r\n title: string;\r\n }[];\r\n links: { startNodeId: number; startSlotId: number; endNodeId: number; endSlotId: number }[];\r\n}\r\n\r\n/**\r\n * Abstract base class for intermediate representation expressions\r\n *\r\n * @remarks\r\n * Represents a node in the IR tree that can be compiled to shader code.\r\n * Uses reference counting to determine if intermediate variables are needed.\r\n * Each expression can be referenced multiple times in the final shader code.\r\n *\r\n * The IR expression tree is built during compilation and then translated\r\n * to actual shader code via the `create()` method.\r\n *\r\n * @public\r\n */\r\nabstract class IRExpression {\r\n /** Reference count for this expression (number of times it's used) */\r\n protected _ref: number;\r\n /** Cached output expressions for each output slot */\r\n protected _outputs: IRExpression[];\r\n /**\r\n * Creates a new IR expression\r\n *\r\n * @remarks\r\n * Initializes reference count to 0 and empty outputs array.\r\n */\r\n constructor() {\r\n this._ref = 0;\r\n this._outputs = [];\r\n }\r\n /**\r\n * Generates shader code for this expression\r\n *\r\n * @param pb - The program builder used to generate shader code\r\n * @returns The generated shader expression or numeric value\r\n *\r\n * @remarks\r\n * This is the core method that translates the IR to actual shader code.\r\n * Must be implemented by all concrete expression types.\r\n */\r\n abstract create(pb: ProgramBuilder): number | boolean | PBShaderExp;\r\n /** Gets the array of output expressions */\r\n get outputs() {\r\n return this._outputs;\r\n }\r\n /**\r\n * Increments the reference count\r\n *\r\n * @returns This expression for method chaining\r\n *\r\n * @remarks\r\n * Called when this expression is referenced by another expression.\r\n * Reference count is used to determine if a temporary variable is needed.\r\n */\r\n addRef() {\r\n this._ref++;\r\n return this;\r\n }\r\n /**\r\n * Generates a unique temporary variable name\r\n *\r\n * @param scope - The shader scope to check for name conflicts\r\n * @returns A unique temporary variable name (e.g., 'tmp0', 'tmp1')\r\n *\r\n * @remarks\r\n * Ensures the generated name doesn't conflict with existing variables in the scope.\r\n */\r\n getTmpName(scope: PBScope) {\r\n let tmp = 0;\r\n for (;;) {\r\n const name = `tmp${tmp++}`;\r\n if (!scope[name]) {\r\n return name;\r\n }\r\n }\r\n }\r\n /**\r\n * Converts this expression to a uniform value if applicable\r\n *\r\n * @param _node - The graph node associated with this expression\r\n * @returns The uniform value descriptor, or null if not a uniform\r\n *\r\n * @remarks\r\n * Only constant expressions can be converted to uniforms.\r\n * Returns null by default; overridden by constant expression types.\r\n */\r\n asUniformValue(_node: IGraphNode): Nullable<IRUniformValue> {\r\n return null;\r\n }\r\n /**\r\n * Converts this expression to a uniform texture if applicable\r\n *\r\n * @param _node - The graph node associated with this expression\r\n * @returns The uniform texture descriptor, or null if not a texture uniform\r\n *\r\n * @remarks\r\n * Only texture constant expressions can be converted to texture uniforms.\r\n * Returns null by default; overridden by texture constant expression types.\r\n */\r\n asUniformTexture(_node: IGraphNode): Nullable<IRUniformTexture> {\r\n return null;\r\n }\r\n /**\r\n * Reset state for creation\r\n */\r\n reset() {}\r\n}\r\n\r\n/**\r\n * IR expression for a constant scalar (float) value\r\n *\r\n * @public\r\n */\r\nclass IRConstantf extends IRExpression {\r\n /** The constant float value */\r\n readonly value: number;\r\n /** The uniform parameter name, or empty string for literals */\r\n readonly name: string;\r\n /**\r\n * Creates a constant float expression\r\n *\r\n * @param value - The float value\r\n * @param paramName - The uniform parameter name, or empty string for literals\r\n */\r\n constructor(value: number, paramName: string) {\r\n super();\r\n this.value = value;\r\n this.name = paramName;\r\n }\r\n /**\r\n * Generates shader code for this constant\r\n *\r\n * @param pb - The program builder\r\n * @returns A uniform reference or literal number\r\n *\r\n * @remarks\r\n * If a parameter name exists, creates a uniform in the global scope.\r\n * Otherwise, returns the literal value.\r\n */\r\n create(pb: ProgramBuilder) {\r\n if (this.name) {\r\n if (!pb.getGlobalScope()[this.name]) {\r\n pb.getGlobalScope()[this.name] = pb.float().uniform(2);\r\n }\r\n return pb.getGlobalScope()[this.name];\r\n }\r\n return this.value;\r\n }\r\n /**\r\n * Converts to a uniform value descriptor\r\n *\r\n * @param node - The graph node\r\n * @returns Uniform value descriptor if this is a uniform parameter, null otherwise\r\n */\r\n asUniformValue() {\r\n return this.name\r\n ? {\r\n name: this.name,\r\n value: [this.value],\r\n type: 'float'\r\n }\r\n : null;\r\n }\r\n}\r\n\r\n/**\r\n * IR expression for a constant scalar (boolean) value\r\n *\r\n * @public\r\n */\r\nclass IRConstantb extends IRExpression {\r\n /** The constant boolean value */\r\n readonly value: boolean;\r\n /**\r\n * Creates a constant boolean expression\r\n *\r\n * @param value - The boolean value\r\n */\r\n constructor(value: boolean) {\r\n super();\r\n this.value = value;\r\n }\r\n /**\r\n * Generates shader code for this constant\r\n *\r\n * @returns The literal boolean value\r\n *\r\n */\r\n create() {\r\n return this.value;\r\n }\r\n}\r\n\r\n/**\r\n * IR expression for a constant vector value\r\n *\r\n * @public\r\n */\r\nclass IRConstantfv extends IRExpression {\r\n /** The constant vector value as an array of floats */\r\n readonly value: number[];\r\n /** The uniform parameter name, or empty string for literals */\r\n readonly name: string;\r\n /** vector type */\r\n readonly type: string;\r\n\r\n /**\r\n * Creates a constant vector expression\r\n *\r\n * @param value - The vector value as an array (length 2-4)\r\n * @param paramName - The uniform parameter name, or empty string for literals\r\n */\r\n constructor(value: number[], paramName: string, type: string) {\r\n super();\r\n this.value = value;\r\n this.name = paramName;\r\n this.type = type;\r\n }\r\n /**\r\n * Generates shader code for this constant vector\r\n *\r\n * @param pb - The program builder\r\n * @returns A uniform reference or vector constructor expression\r\n *\r\n * @remarks\r\n * If a parameter name exists, creates a uniform in the global scope.\r\n * The vector size is determined by the array length (vec2/vec3/vec4).\r\n */\r\n create(pb: ProgramBuilder) {\r\n if (this.name) {\r\n if (!pb.getGlobalScope()[this.name]) {\r\n // @ts-ignore\r\n pb.getGlobalScope()[this.name] = pb[`vec${this.value.length}`]().uniform(2);\r\n }\r\n return pb.getGlobalScope()[this.name] as PBShaderExp;\r\n }\r\n return (\r\n // @ts-ignore\r\n (Array.isArray(this.value) ? pb[`vec${this.value.length}`](...this.value) : this.value) as PBShaderExp\r\n );\r\n }\r\n /**\r\n * Converts to a uniform value descriptor\r\n *\r\n * @param node - The graph node\r\n * @returns Uniform value descriptor if this is a uniform parameter, null otherwise\r\n */\r\n asUniformValue() {\r\n return this.name\r\n ? {\r\n name: this.name,\r\n type: this.type,\r\n value: this.value\r\n }\r\n : null;\r\n }\r\n}\r\n\r\n/**\r\n * IR expression for a constant boolean vector value\r\n *\r\n * @public\r\n */\r\nclass IRConstantbv extends IRExpression {\r\n /** The constant vector value as an array of booleans */\r\n readonly value: boolean[];\r\n\r\n /**\r\n * Creates a constant boolean vector expression\r\n *\r\n * @param value - The vector value as an array (length 2-4)\r\n */\r\n constructor(value: boolean[]) {\r\n super();\r\n this.value = value;\r\n }\r\n /**\r\n * Generates shader code for this constant vector\r\n *\r\n * @param pb - The program builder\r\n *\r\n * @returns A boolean vector constructor expression\r\n */\r\n create(pb: ProgramBuilder) {\r\n // @ts-ignore\r\n return pb[`bvec${this.value.length}`](...this.value) as PBShaderExp;\r\n }\r\n}\r\n\r\n/**\r\n * IR expression for shader input variables\r\n *\r\n * @remarks\r\n * Represents variables that are passed into the shader from the vertex stage\r\n * or defined in the current scope. Examples include vertex attributes,\r\n * varyings, and built-in variables.\r\n *\r\n * @example\r\n * ```typescript\r\n * // Reference to vertex color\r\n * const vertexColor = new IRInput('zVertexColor');\r\n *\r\n * // Reference via function\r\n * const worldPos = new IRInput((scope) => scope.zWorldPos);\r\n * ```\r\n *\r\n * @public\r\n */\r\nclass IRInput extends IRExpression {\r\n /** The variable name or a function that retrieves the variable from scope */\r\n readonly func: string | ((scope: PBInsideFunctionScope) => PBShaderExp);\r\n /**\r\n * Creates an input variable expression\r\n *\r\n * @param func - Variable name string or function to retrieve the variable\r\n */\r\n constructor(func: string | ((scope: PBInsideFunctionScope) => PBShaderExp)) {\r\n super();\r\n this.func = func;\r\n }\r\n /**\r\n * Generates shader code for this input variable\r\n *\r\n * @param pb - The program builder\r\n * @returns The shader expression referencing the input variable\r\n */\r\n create(pb: ProgramBuilder) {\r\n return (\r\n typeof this.func === 'string' ? pb.getCurrentScope()[this.func] : this.func(pb.getCurrentScope())\r\n ) as PBShaderExp;\r\n }\r\n}\r\n\r\n/**\r\n * IR expression for function calls and operations\r\n *\r\n * @remarks\r\n * Represents built-in shader functions (add, mul, sin, etc.) or vector constructors.\r\n * Uses reference counting to determine if result should be stored in a temporary variable.\r\n *\r\n * @example\r\n * ```typescript\r\n * // Addition: a + b\r\n * const add = new IRFunc([exprA, exprB], 'add');\r\n *\r\n * // Vector constructor: vec3(x, y, z)\r\n * const vec = new IRFunc([x, y, z], 'vec3');\r\n * ```\r\n *\r\n * @public\r\n */\r\nclass IRFunc extends IRExpression {\r\n /** Array of parameters (can be expressions or literal numbers) */\r\n readonly params: (number | IRExpression)[];\r\n /** The function name (e.g., 'add', 'mul', 'sin', 'vec3') */\r\n readonly func:\r\n | string\r\n | ((pb: ProgramBuilder, ...params: (number | boolean | PBShaderExp)[]) => PBShaderExp);\r\n /** Cached temporary variable name if expression is referenced multiple times */\r\n private tmpName: string;\r\n /**\r\n * Creates a function call expression\r\n *\r\n * @param params - Array of parameters for the function\r\n * @param func - The function name or function implementation\r\n *\r\n * @remarks\r\n * Increments reference count for all expression parameters.\r\n */\r\n constructor(\r\n params: (number | IRExpression)[],\r\n func: string | ((pb: ProgramBuilder, ...params: (number | boolean | PBShaderExp)[]) => PBShaderExp)\r\n ) {\r\n super();\r\n this.params = params.map((param) => (param instanceof IRExpression ? param.addRef() : param));\r\n this.func = func;\r\n this.tmpName = '';\r\n }\r\n /** Reset for next creation */\r\n reset() {\r\n this.tmpName = '';\r\n }\r\n /**\r\n * Generates shader code for this function call\r\n *\r\n * @param pb - The program builder\r\n * @returns The shader expression for the function result\r\n *\r\n * @remarks\r\n * If referenced multiple times (_ref > 1), stores result in a temporary variable.\r\n * Otherwise, generates the function call inline.\r\n */\r\n create(pb: ProgramBuilder) {\r\n if (this.tmpName) {\r\n const exp = pb.getCurrentScope()[this.tmpName] as PBShaderExp;\r\n if (exp) {\r\n return exp;\r\n }\r\n // Scope changed, recompute in current scope\r\n this.tmpName = '';\r\n }\r\n const params = this.params.map((param) => (param instanceof IRExpression ? param.create(pb) : param));\r\n // @ts-ignore\r\n const exp = typeof this.func === 'string' ? pb[this.func](...params) : this.func(pb, ...params);\r\n if (this._ref === 1) {\r\n return exp as PBShaderExp;\r\n } else {\r\n this.tmpName = this.getTmpName(pb.getCurrentScope());\r\n pb.getCurrentScope()[this.tmpName] = exp;\r\n return pb.getCurrentScope()[this.tmpName] as PBShaderExp;\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * IR expression for function output values\r\n *\r\n * @remarks\r\n * Represents the output of a material function (subgraph).\r\n * Handles caching of output values when referenced multiple times.\r\n *\r\n * @example\r\n * ```typescript\r\n * // Function returns a processed color value\r\n * const output = new IRFunctionOutput(colorExpression);\r\n * ```\r\n *\r\n * @public\r\n */\r\nclass IRFunctionOutput extends IRExpression {\r\n /** Cached temporary variable name for the output */\r\n private tmpName: string;\r\n /** The input expression to output */\r\n private readonly input: IRExpression | number;\r\n /**\r\n * Creates a function output expression\r\n *\r\n * @param input - The expression or value to output\r\n */\r\n constructor(input: IRExpression | number) {\r\n super();\r\n this.input = input;\r\n this.tmpName = '';\r\n }\r\n /** Reset for next creation */\r\n reset() {\r\n this.tmpName = '';\r\n }\r\n /**\r\n * Generates shader code for this function output\r\n *\r\n * @param pb - The program builder\r\n * @returns The shader expression or value\r\n *\r\n * @remarks\r\n * If referenced multiple times, stores result in a temporary variable.\r\n */\r\n create(pb: ProgramBuilder): PBShaderExp | number | boolean {\r\n if (this.tmpName) {\r\n return pb.getCurrentScope()[this.tmpName];\r\n }\r\n const exp = this.input instanceof IRExpression ? this.input.create(pb) : this.input;\r\n if (this._ref === 1) {\r\n return exp;\r\n } else {\r\n this.tmpName = this.getTmpName(pb.getCurrentScope());\r\n pb.getCurrentScope()[this.tmpName] = exp;\r\n return pb.getCurrentScope()[this.tmpName];\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * IR expression for calling user-defined material functions\r\n *\r\n * @remarks\r\n * Represents a call to a material function (subgraph) with parameters.\r\n * Generates both the function definition and the call site.\r\n * Uses a struct return type to return multiple outputs from the function.\r\n *\r\n * @example\r\n * ```typescript\r\n * // Call to a custom \"calculateLighting\" function\r\n * const call = new IRCallFunc(functionNode, [normalExpr, lightDirExpr]);\r\n * ```\r\n *\r\n * @public\r\n */\r\nclass IRCallFunc extends IRExpression {\r\n /** The function call node from the graph */\r\n readonly node: FunctionCallNode;\r\n /** Array of argument expressions */\r\n readonly args: IRExpression[];\r\n /** Cached temporary variable name if result is referenced multiple times */\r\n tmpName: string;\r\n /**\r\n * Creates a function call expression\r\n *\r\n * @param node - The function call node\r\n * @param args - Array of argument expressions\r\n */\r\n constructor(node: FunctionCallNode, args: IRExpression[]) {\r\n super();\r\n this.node = node;\r\n this.args = args;\r\n this.tmpName = '';\r\n }\r\n /** Reset for next creation */\r\n reset() {\r\n this.tmpName = '';\r\n }\r\n /**\r\n * Generates shader code for the function definition and call\r\n *\r\n * @param pb - The program builder\r\n * @returns The shader expression for the function result\r\n *\r\n * @remarks\r\n * First generates the function definition (if not already defined),\r\n * then generates the function call with the provided arguments.\r\n * The function returns a struct containing all output values.\r\n */\r\n create(pb: ProgramBuilder): PBShaderExp {\r\n if (this.tmpName) {\r\n return pb.getCurrentScope()[this.tmpName];\r\n }\r\n const that = this;\r\n const ir = this.node.IR;\r\n // @ts-ignore\r\n const params = this.node.args.map((v) => pb[v.type](v.name));\r\n pb.func(this.node.name, params, function () {\r\n const outputs = ir.create(pb)!;\r\n const rettype = pb.defineStruct(\r\n that.node.outputs.map((output, index) => {\r\n // @ts-ignore\r\n return pb[that.node.outs[index].type](output.swizzle);\r\n })\r\n );\r\n this.$return(\r\n rettype(\r\n ...outputs.map((output) => {\r\n return output.exp;\r\n })\r\n )\r\n );\r\n });\r\n const args = this.args.map((arg) => arg.create(pb));\r\n const exp = pb.getGlobalScope()[this.node.name](...args);\r\n if (this._ref === 1) {\r\n return exp;\r\n } else {\r\n this.tmpName = this.getTmpName(pb.getCurrentScope());\r\n pb.getCurrentScope()[this.tmpName] = exp;\r\n return pb.getCurrentScope()[this.tmpName];\r\n }\r\n }\r\n}\r\n\r\nclass IRSelection extends IRExpression {\r\n readonly a: IRExpression;\r\n readonly b: IRExpression;\r\n readonly cond: IRExpression;\r\n tmpName: string;\r\n constructor(a: IRExpression, b: IRExpression, cond: IRExpression) {\r\n super();\r\n this.a = a.addRef();\r\n this.b = b.addRef();\r\n this.cond = cond.addRef();\r\n this.tmpName = '';\r\n }\r\n reset() {\r\n this.tmpName = '';\r\n }\r\n create(pb: ProgramBuilder): PBShaderExp {\r\n if (this.tmpName) {\r\n return pb.getCurrentScope()[this.tmpName];\r\n }\r\n const a = this.a.create(pb) as number | PBShaderExp;\r\n const b = this.b.create(pb) as number | PBShaderExp;\r\n const c = this.cond.create(pb);\r\n const exp = pb.select(a, b, typeof c === 'number' ? c !== 0 : c);\r\n if (this._ref === 1) {\r\n return exp;\r\n } else {\r\n this.tmpName = this.getTmpName(pb.getCurrentScope());\r\n pb.getCurrentScope()[this.tmpName] = exp;\r\n return pb.getCurrentScope()[this.tmpName];\r\n }\r\n }\r\n}\r\n\r\nclass IRAny extends IRExpression {\r\n readonly src: IRExpression;\r\n tmpName: string;\r\n constructor(src: IRExpression) {\r\n super();\r\n this.src = src.addRef();\r\n this.tmpName = '';\r\n }\r\n reset() {\r\n this.tmpName = '';\r\n }\r\n create(pb: ProgramBuilder): PBShaderExp {\r\n if (this.tmpName) {\r\n return pb.getCurrentScope()[this.tmpName];\r\n }\r\n const src = this.src.create(pb) as PBShaderExp;\r\n const exp = pb.any(src);\r\n if (this._ref === 1) {\r\n return exp;\r\n } else {\r\n this.tmpName = this.getTmpName(pb.getCurrentScope());\r\n pb.getCurrentScope()[this.tmpName] = exp;\r\n return pb.getCurrentScope()[this.tmpName];\r\n }\r\n }\r\n}\r\n\r\nclass IRAll extends IRExpression {\r\n readonly src: IRExpression;\r\n tmpName: string;\r\n constructor(src: IRExpression) {\r\n super();\r\n this.src = src.addRef();\r\n this.tmpName = '';\r\n }\r\n reset() {\r\n this.tmpName = '';\r\n }\r\n create(pb: ProgramBuilder): PBShaderExp {\r\n if (this.tmpName) {\r\n return pb.getCurrentScope()[this.tmpName];\r\n }\r\n const src = this.src.create(pb) as PBShaderExp;\r\n const exp = pb.all(src);\r\n if (this._ref === 1) {\r\n return exp;\r\n } else {\r\n this.tmpName = this.getTmpName(pb.getCurrentScope());\r\n pb.getCurrentScope()[this.tmpName] = exp;\r\n return pb.getCurrentScope()[this.tmpName];\r\n }\r\n }\r\n}\r\n\r\nclass IRComparison extends IRExpression {\r\n readonly a: IRExpression;\r\n readonly b: IRExpression;\r\n readonly mode: ComparisonMode;\r\n tmpName: string;\r\n constructor(a: IRExpression, b: IRExpression, mode: ComparisonMode) {\r\n super();\r\n this.a = a.addRef();\r\n this.b = b.addRef();\r\n this.mode = mode;\r\n this.tmpName = '';\r\n }\r\n /** Reset for next creation */\r\n reset() {\r\n this.tmpName = '';\r\n }\r\n create(pb: ProgramBuilder): PBShaderExp {\r\n if (this.tmpName) {\r\n return pb.getCurrentScope()[this.tmpName];\r\n }\r\n const a = this.a.create(pb) as PBShaderExp;\r\n const b = this.b.create(pb) as PBShaderExp;\r\n let exp: PBShaderExp;\r\n switch (this.mode) {\r\n case 'eq':\r\n exp = pb.compEqual(a, b);\r\n break;\r\n case 'ne':\r\n exp = pb.compNotEqual(a, b);\r\n break;\r\n case 'lt':\r\n exp = pb.lessThan(a, b);\r\n break;\r\n case 'le':\r\n exp = pb.lessThanEqual(a, b);\r\n break;\r\n case 'gt':\r\n exp = pb.greaterThan(a, b);\r\n break;\r\n case 'ge':\r\n exp = pb.greaterThanEqual(a, b);\r\n break;\r\n default:\r\n throw new Error(`Invalid comparison mode: ${this.mode}`);\r\n }\r\n if (this._ref === 1) {\r\n return exp;\r\n } else {\r\n this.tmpName = this.getTmpName(pb.getCurrentScope());\r\n pb.getCurrentScope()[this.tmpName] = exp;\r\n return pb.getCurrentScope()[this.tmpName];\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * IR expression for vector component swizzling\r\n *\r\n * @remarks\r\n * Extracts specific components from a vector using swizzle notation.\r\n * For scalar sources, constructs a vector with replicated values.\r\n *\r\n * @example\r\n * ```typescript\r\n * // Extract xyz from vec4\r\n * const xyz = new IRSwizzle(vec4Expr, 'xyz');\r\n *\r\n * // Extract single component\r\n * const x = new IRSwizzle(vec3Expr, 'x');\r\n *\r\n * // Swizzle and reorder\r\n * const bgr = new IRSwizzle(rgbExpr, 'bgr');\r\n * ```\r\n *\r\n * @public\r\n */\r\nclass IRSwizzle extends IRExpression {\r\n /** The source expression to swizzle */\r\n readonly src: IRExpression;\r\n /** The swizzle pattern (e.g., 'xyz', 'rgb', 'x', 'yzw') */\r\n readonly hash: string;\r\n /**\r\n * Creates a swizzle expression\r\n *\r\n * @param src - The source vector expression\r\n * @param hash - The swizzle pattern using xyzw or rgba notation\r\n */\r\n constructor(src: IRExpression, hash: string) {\r\n super();\r\n this.src = src.addRef();\r\n this.hash = hash;\r\n }\r\n /**\r\n * Generates shader code for the swizzle operation\r\n *\r\n * @param pb - The program builder\r\n * @returns The swizzled shader expression\r\n *\r\n * @remarks\r\n * If source is a scalar number, creates a vector with that value repeated.\r\n * Otherwise, applies the swizzle notation to the source expression.\r\n */\r\n create(pb: ProgramBuilder): number | PBShaderExp {\r\n const src = this.src.create(pb);\r\n // @ts-ignore\r\n return typeof src === 'number' ? pb[`vec${this.hash.length}`](src) : src[this.hash];\r\n }\r\n}\r\n\r\n/**\r\n * IR expression for type casting with padding\r\n *\r\n * @remarks\r\n * Converts a value to a different vector type by padding with zeros.\r\n * Used when a smaller vector needs to be converted to a larger one.\r\n *\r\n * @example\r\n * ```typescript\r\n * // Cast float to vec3: vec3(value, 0, 0)\r\n * const vec3 = new IRCast(floatExpr, 'vec3', 2);\r\n *\r\n * // Cast vec2 to vec4: vec4(value.xy, 0, 0)\r\n * const vec4 = new IRCast(vec2Expr, 'vec4', 2);\r\n * ```\r\n *\r\n * @public\r\n */\r\nclass IRCast extends IRExpression {\r\n /** The source expression to cast */\r\n readonly src: IRExpression;\r\n /** The values to be filled */\r\n readonly fill: Nullable<number[]>;\r\n /** The target type name (e.g., 'vec2', 'vec3', 'vec4') */\r\n readonly type: string;\r\n /** Number of zero components to append */\r\n readonly cast: number;\r\n /**\r\n * Creates a type cast expression\r\n *\r\n * @param src - The source expression\r\n * @param type - The target type name\r\n * @param cast - Number of zero components to append\r\n */\r\n constructor(src: IRExpression, type: string, cast: number, fill?: number[]) {\r\n super();\r\n this.src = src.addRef();\r\n this.cast = cast;\r\n this.fill = fill?.slice() ?? null;\r\n this.type = type;\r\n }\r\n /**\r\n * Generates shader code for the type cast\r\n *\r\n * @param pb - The program builder\r\n * @returns The casted shader expression\r\n *\r\n * @remarks\r\n * Creates a vector constructor with the source value followed by zeros.\r\n * Example: vec4(src, 0, 0) for casting vec2 to vec4.\r\n */\r\n create(pb: ProgramBuilder): PBShaderExp {\r\n // @ts-ignore\r\n return pb[this.type](this.src.create(pb), ...(this.fill ?? Array.from({ length: this.cast }).fill(0)));\r\n }\r\n}\r\n\r\n/**\r\n * IR expression for texture sampling\r\n *\r\n * @remarks\r\n * Represents a texture lookup operation with optional normal map decoding.\r\n * Handles both color and normal map sampling with appropriate transformations.\r\n * Uses reference counting to cache the sampled result if used multiple times.\r\n *\r\n * @example\r\n * ```typescript\r\n * // Sample color texture\r\n * const color = new IRSampleTexture(texExpr, uvExpr, 'Color');\r\n *\r\n * // Sample normal map (automatically decodes from [0,1] to [-1,1])\r\n * const normal = new IRSampleTexture(texExpr, uvExpr, 'Normal');\r\n * ```\r\n *\r\n * @public\r\n */\r\nclass IRSampleTexture extends IRExpression {\r\n /** The texture expression */\r\n readonly tex: IRExpression;\r\n /** The texture coordinate expression */\r\n readonly coord: IRExpression;\r\n /** The sampler type determining how to interpret the sampled value */\r\n readonly samplerType: 'Color' | 'Normal';\r\n /** Cached temporary variable name if result is referenced multiple times */\r\n tmpName: string;\r\n /**\r\n * Creates a texture sample expression\r\n *\r\n * @param tex - The texture to sample from\r\n * @param coord - The texture coordinates\r\n * @param samplerType - How to interpret the sampled value ('Color' or 'Normal')\r\n */\r\n constructor(tex: IRExpression, coord: IRExpression, samplerType: 'Color' | 'Normal') {\r\n super();\r\n this.tex = tex.addRef();\r\n this.coord = coord.addRef();\r\n this.samplerType = samplerType;\r\n this.tmpName = '';\r\n }\r\n /** Reset for next creation */\r\n reset() {\r\n this.tmpName = '';\r\n }\r\n /**\r\n * Generates shader code for the texture sample operation\r\n *\r\n * @param pb - The program builder\r\n * @returns The sampled color value\r\n *\r\n * @remarks\r\n * For normal maps, applies the transformation: normal * 2 - 1 to convert\r\n * from [0,1] texture space to [-1,1] tangent space.\r\n * Caches result in a temporary variable if referenced multiple times.\r\n *\r\n * @throws Error if texture coordinate is not a valid expression or array\r\n */\r\n create(pb: ProgramBuilder): PBShaderExp {\r\n if (this.tmpName) {\r\n return pb.getCurrentScope()[this.tmpName];\r\n }\r\n const tex = this.tex.create(pb);\r\n const coord = this.coord.create(pb);\r\n let coordExp: PBShaderExp;\r\n let texExp: PBShaderExp;\r\n if (tex instanceof PBShaderExp) {\r\n texExp = tex;\r\n } else {\r\n throw new Error('Invalid texture expression');\r\n }\r\n if (coord instanceof PBShaderExp) {\r\n coordExp = coord;\r\n } else if (Array.isArray(coord)) {\r\n // @ts-ignore\r\n coordExp = pb[`vec${coord.length}`](...coord);\r\n } else {\r\n throw new Error('Invalid texture coordinate');\r\n }\r\n let exp = pb.textureSample(texExp, coordExp);\r\n if (this.samplerType === 'Normal') {\r\n exp = pb.sub(pb.mul(exp, pb.vec4(2, 2, 2, 1)), pb.vec4(1, 1, 1, 0));\r\n }\r\n if (this._ref === 1) {\r\n return exp;\r\n } else {\r\n this.tmpName = this.getTmpName(pb.getCurrentScope());\r\n pb.getCurrentScope()[this.tmpName] = exp;\r\n return pb.getCurrentScope()[this.tmpName];\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * IR expression for texture uniform constants\r\n *\r\n * @remarks\r\n * Represents a texture parameter that will be bound as a uniform.\r\n * Includes sampler configuration for texture filtering and addressing modes.\r\n *\r\n * @example\r\n * ```typescript\r\n * const tex = new IRConstantTexture(\r\n * 'u_baseColorMap',\r\n * 'tex2d',\r\n * 'repeat',\r\n * 'repeat',\r\n * 'linear',\r\n * 'linear',\r\n * 'linear'\r\n * );\r\n * ```\r\n *\r\n * @public\r\n */\r\nclass IRConstantTexture extends IRExpression {\r\n /** The uniform texture variable name */\r\n readonly name: string;\r\n /** The texture id */\r\n readonly id: string;\r\n /** The texture type (e.g., 'tex2d', 'texCube') */\r\n readonly type: string;\r\n /** Whether this texture should loaded in sRGB color space */\r\n readonly sRGB: boolean;\r\n /** Horizontal texture addressing mode */\r\n readonly addressU: TextureAddressMode;\r\n /** Vertical texture addressing mode */\r\n readonly addressV: TextureAddressMode;\r\n /** Minification filter mode */\r\n readonly filterMin: TextureFilterMode;\r\n /** Magnification filter mode */\r\n readonly filterMag: TextureFilterMode;\r\n /** Mipmap filter mode */\r\n readonly filterMip: TextureFilterMode;\r\n /** Whether texture params is used */\r\n useParams: boolean;\r\n /**\r\n * Creates a texture constant expression\r\n *\r\n * @param name - The uniform variable name\r\n * @param id - The texture id\r\n * @param type - The texture type\r\n * @param sRGB - Whether this texture should be loaded in sRGB color space\r\n * @param addressU - Horizontal addressing mode\r\n * @param addressV - Vertical addressing mode\r\n * @param minFilter - Minification filter\r\n * @param magFilter - Magnification filter\r\n * @param mipFilter - Mipmap filter\r\n */\r\n constructor(\r\n name: string,\r\n id: string,\r\n type: string,\r\n sRGB: boolean,\r\n addressU: TextureAddressMode,\r\n addressV: TextureAddressMode,\r\n minFilter: TextureFilterMode,\r\n magFilter: TextureFilterMode,\r\n mipFilter: TextureFilterMode\r\n ) {\r\n super();\r\n this.name = name;\r\n this.id = id;\r\n this.type = type;\r\n this.sRGB = sRGB;\r\n this.addressU = addressU;\r\n this.addressV = addressV;\r\n this.filterMin = minFilter;\r\n this.filterMag = magFilter;\r\n this.filterMip = mipFilter;\r\n this.useParams = false;\r\n }\r\n /**\r\n * Generates shader code for the texture uniform\r\n *\r\n * @param pb - The program builder\r\n * @returns The texture uniform reference\r\n *\r\n * @remarks\r\n * Creates the uniform declaration in the global scope if not already present.\r\n */\r\n create(pb: ProgramBuilder): PBShaderExp {\r\n if (!pb.getGlobalScope()[this.name]) {\r\n // @ts-ignore\r\n pb.getGlobalScope()[this.name] = pb[this.type]().uniform(2);\r\n }\r\n return pb.getGlobalScope()[this.name];\r\n }\r\n /**\r\n * Converts to a uniform texture descriptor\r\n *\r\n * @param node - The texture node\r\n * @returns Uniform texture descriptor with texture and sampler references\r\n */\r\n asUniformTexture(): IRUniformTexture {\r\n return {\r\n name: this.name,\r\n texture: this.id,\r\n wrapS: this.addressU,\r\n wrapT: this.addressV,\r\n minFilter: this.filterMin,\r\n magFilter: this.filterMag,\r\n mipFilter: this.filterMip,\r\n type: this.type,\r\n sRGB: this.sRGB\r\n };\r\n }\r\n}\r\n\r\n/**\r\n * Material blueprint behavior flags\r\n *\r\n * @remarks\r\n * Tracks which vertex attributes and shader features are used by the material.\r\n * Used to determine which vertex data needs to be provided and which\r\n * shader permutations need to be compiled.\r\n *\r\n * @public\r\n */\r\nexport interface MaterialBlueprintIRBehaviors {\r\n /** Whether the material uses vertex colors */\r\n useVertexColor: boolean;\r\n /** Whether the material uses texture coordinates */\r\n useVertexUV: boolean;\r\n}\r\n\r\n/**\r\n * Material Blueprint Intermediate Representation\r\n *\r\n * @remarks\r\n * The IR is a compiled representation of the material node graph that can be\r\n * efficiently translated to shader code. It performs:\r\n * - Type checking and validation\r\n * - Expression optimization (common subexpression elimination via reference counting)\r\n * - Uniform extraction (constants become shader uniforms)\r\n * - Dependency analysis (determines required vertex attributes)\r\n *\r\n * The compilation process:\r\n * 1. Traverse the DAG in topological order\r\n * 2. Build an IR expression tree\r\n * 3. Track uniforms and behaviors\r\n * 4. Generate optimized shader code from the IR\r\n *\r\n * @public\r\n */\r\nexport class MaterialBlueprintIR {\r\n /** The directed acyclic graph of material nodes */\r\n private _dag: BlueprintDAG;\r\n /** Unique hash identifying this material configuration */\r\n private _hash: string;\r\n /** Editor state snapshot at time of compilation */\r\n private _editorState: BluePrintEditorState;\r\n /** Array of all IR expressions in the graph */\r\n private _expressions!: IRExpression[];\r\n /** Map from graph node to IR expression index */\r\n private _expressionMap!: Map<BaseGraphNode, number>;\r\n /** Array of uniform scalar/vector values to be set at runtime */\r\n private _uniformValues!: IRUniformValue[];\r\n /** Array of uniform textures to be bound at runtime */\r\n private _uniformTextures!: IRUniformTexture[];\r\n /** Fallback texture uniforms generated for TextureSample nodes without texture input */\r\n private _textureSampleFallbackMap!: Map<TextureSampleNode, IRConstantTexture>;\r\n /** Flags indicating which shader features are used */\r\n private _behaviors!: MaterialBlueprintIRBehaviors;\r\n /** Array of named output expressions (e.g., baseColor, normal, metallic) */\r\n private _outputs!: Nullable<{ name: string; expr: IRExpression }[]>;\r\n /**\r\n * Creates and compiles a material blueprint IR\r\n *\r\n * @param dag - The material node graph DAG\r\n * @param hash - Unique identifier for this material\r\n * @param editorState - Editor state snapshot\r\n *\r\n * @remarks\r\n * Automatically compiles the DAG during construction.\r\n * Check the `ok` property to verify successful compilation.\r\n */\r\n constructor(dag: BlueprintDAG, hash: string, editorState: BluePrintEditorState) {\r\n this._dag = dag ?? {\r\n nodeMap: {},\r\n roots: [],\r\n graph: {\r\n outgoing: {},\r\n incoming: {}\r\n },\r\n order: []\r\n };\r\n this._hash = hash;\r\n this._editorState = editorState;\r\n this.compile();\r\n }\r\n /**\r\n * Whether the IR compiled successfully\r\n *\r\n * @returns True if compilation produced valid outputs\r\n */\r\n get ok() {\r\n return this._outputs ? this._outputs.length > 0 : false;\r\n }\r\n /** Gets the unique hash for this material */\r\n get hash() {\r\n return this._hash;\r\n }\r\n /** Gets the editor state snapshot */\r\n get editorState() {\r\n return this._editorState;\r\n }\r\n /** Gets the behavior flags indicating shader requirements */\r\n get behaviors() {\r\n return this._behaviors;\r\n }\r\n /** Gets the material node DAG */\r\n get DAG() {\r\n return this._dag;\r\n }\r\n set DAG(dag: BlueprintDAG) {\r\n this._dag = dag;\r\n }\r\n /** Gets the array of uniform values to set at runtime */\r\n get uniformValues() {\r\n return this._uniformValues;\r\n }\r\n /** Gets the array of uniform textures to bind at runtime */\r\n get uniformTextures() {\r\n return this._uniformTextures;\r\n }\r\n /**\r\n * Compiles the material node graph to IR\r\n *\r\n * @returns True if compilation succeeded, false otherwise\r\n *\r\n * @remarks\r\n * Processes all root nodes (typically a single material output node)\r\n * and builds IR expressions for all connected inputs.\r\n * Collects all required uniforms and sets behavior flags.\r\n *\r\n * Compilation fails if any required input is missing.\r\n */\r\n compile(): boolean {\r\n this.reset();\r\n this._outputs = [];\r\n for (const root of this._dag.roots) {\r\n const rootNode = this._dag.nodeMap[root];\r\n for (const input of rootNode.inputs) {\r\n const name = input.name;\r\n if (input.inputNode) {\r\n this._outputs.push({\r\n name,\r\n expr: this.ir(input)!.addRef()\r\n });\r\n } else if (Array.isArray(input.defaultValue)) {\r\n if (input.defaultValue.length === 1) {\r\n this._outputs.push({\r\n name,\r\n expr: new IRConstantf(input.defaultValue[0], '').addRef()\r\n });\r\n } else {\r\n this._outputs.push({\r\n name,\r\n expr: new IRConstantfv(input.defaultValue, '', `vec${input.defaultValue.length}`).addRef()\r\n });\r\n }\r\n } else if (input.required) {\r\n this._outputs = null;\r\n return false;\r\n }\r\n if (!input.inputNode && rootNode instanceof VertexBlockNode) {\r\n if (input.name === 'Color') {\r\n this._behaviors.useVertexColor = true;\r\n } else if (input.name === 'UV') {\r\n this._behaviors.useVertexUV = true;\r\n }\r\n }\r\n }\r\n }\r\n return true;\r\n }\r\n /**\r\n * Generates shader code from the IR\r\n *\r\n * @param pb - The program builder to generate code with\r\n * @returns Array of named shader expressions, or null if IR is invalid\r\n *\r\n * @remarks\r\n * Translates all IR expressions to actual shader code.\r\n * Should be called within a shader function scope.\r\n *\r\n * @example\r\n * ```typescript\r\n * pb.fragmentShader(function() {\r\n * const outputs = ir.create(this);\r\n * this.baseColor = outputs.find(o => o.name === 'baseColor').exp;\r\n * this.normal = outputs.find(o => o.name === 'normal').exp;\r\n * });\r\n * ```\r\n */\r\n create(pb: ProgramBuilder): Nullable<{ name: string; exp: PBShaderExp | number | boolean }[]> {\r\n if (!this._outputs) {\r\n return null;\r\n }\r\n for (const expr of this._expressions) {\r\n expr.reset();\r\n }\r\n const outputs: { name: string; exp: PBShaderExp | number | boolean }[] = [];\r\n for (const output of this._outputs) {\r\n outputs.push({ name: output.name, exp: output.expr.create(pb) });\r\n }\r\n return outputs;\r\n }\r\n /**\r\n * Resets the IR state for recompilation\r\n *\r\n * @remarks\r\n * Clears all compiled data including expressions, uniforms, and behaviors.\r\n * Called at the start of compilation.\r\n */\r\n private reset() {\r\n this._expressions = [];\r\n this._expressionMap = new Map();\r\n this._uniformTextures = [];\r\n this._uniformValues = [];\r\n this._textureSampleFallbackMap = new Map();\r\n this._outputs = null;\r\n this._behaviors = {\r\n useVertexColor: false,\r\n useVertexUV: false\r\n };\r\n }\r\n /**\r\n * Converts a graph node to an IR expression\r\n *\r\n * @param node - The graph node to convert\r\n * @param output - The output slot ID\r\n * @param originType - Optional type override for type casting\r\n * @returns The corresponding IR expression\r\n *\r\n * @remarks\r\n * Main dispatch method that routes to specific converters based on node type.\r\n * Handles automatic type casting when originType differs from node output type.\r\n *\r\n * @throws Error if type casting is invalid\r\n */\r\n private ir(inputNode: GraphNodeInput): Nullable<IRExpression> {\r\n const node = inputNode.inputNode!;\r\n const output = inputNode.inputId!;\r\n const originType = inputNode.originType;\r\n const defaultValue = inputNode.defaultValue;\r\n let expr: Nullable<IRExpression> = null;\r\n if (node instanceof ConstantScalarNode) {\r\n expr = this.constantf(node, output);\r\n } else if (\r\n node instanceof ConstantVec2Node ||\r\n node instanceof ConstantVec3Node ||\r\n node instanceof ConstantVec4Node\r\n ) {\r\n expr = this.constantfv(node, output);\r\n } else if (node instanceof ConstantBooleanNode) {\r\n expr = this.constantb(node, output);\r\n } else if (\r\n node instanceof ConstantBVec2Node ||\r\n node instanceof ConstantBVec3Node ||\r\n node instanceof ConstantBVec4Node\r\n ) {\r\n expr = this.constantbv(node, output);\r\n } else if (node instanceof BaseTextureNode) {\r\n expr = this.constantTexture(node, output);\r\n } else if (node instanceof TextureSampleNode) {\r\n expr = this.textureSample(node, output);\r\n } else if (node instanceof PannerNode) {\r\n expr = this.panner(node, output);\r\n } else if (node instanceof MakeVectorNode) {\r\n expr = this.makeVector(node, output);\r\n } else if (node instanceof SwizzleNode) {\r\n expr = this.swizzle(node, output);\r\n } else if (node instanceof CompComparisonNode) {\r\n expr = this.comparison(node, output);\r\n } else if (node instanceof AnyConditionNode) {\r\n expr = this.any(node, output);\r\n } else if (node instanceof AllConditionNode) {\r\n expr = this.all(node, output);\r\n } else if (node instanceof SelectionNode) {\r\n expr = this.selection(node, output);\r\n } else if (node instanceof ResolveVertexPositionNode) {\r\n expr = this.resolveVertexPosition(node, output);\r\n } else if (node instanceof ResolveVertexNormalNode) {\r\n expr = this.resolveVertexNormal(node, output);\r\n } else if (node instanceof ResolveVertexTangentNode) {\r\n expr = this.resolveVertexTangent(node, output);\r\n } else if (node instanceof Hash1Node) {\r\n expr = this.hash1(node, output);\r\n } else if (node instanceof Hash2Node) {\r\n expr = this.hash2(node, output);\r\n } else if (node instanceof Hash3Node) {\r\n expr = this.hash3(node, output);\r\n } else if (node instanceof SimplexNoise2DNode) {\r\n expr = this.simplexNoise2d(node, output);\r\n } else if (node instanceof PerlinNoise2DNode) {\r\n expr = this.perlinNoise2d(node, output);\r\n } else if (node instanceof GenericMathNode) {\r\n expr = this.func(node, output);\r\n } else if (node instanceof TransformNode) {\r\n expr = this.transform(node, output);\r\n } else if (node instanceof RotateAboutAxisNode) {\r\n expr = this.rotateAboutAxis(node, output);\r\n } else if (node instanceof VertexColorNode) {\r\n expr = this.vertexColor(node, output);\r\n } else if (node instanceof VertexUVNode) {\r\n expr = this.vertexUV(node, output);\r\n } else if (node instanceof VertexPositionNode) {\r\n expr = this.vertexPosition(node, output);\r\n } else if (node instanceof PixelWorldPositionNode) {\r\n expr = this.pixelWorldPosition(node, output);\r\n } else if (node instanceof VertexNormalNode) {\r\n expr = this.vertexNormal(node, output);\r\n } else if (node instanceof PixelNormalNode) {\r\n expr = this.pixelNormal(node, output);\r\n } else if (node instanceof VertexTangentNode) {\r\n expr = this.vertexTangent(node, output);\r\n } else if (node instanceof VertexBinormalNode) {\r\n expr = this.vertexBinormal(node, output);\r\n } else if (node instanceof ViewMatrixNode) {\r\n expr = this.viewMatrix(node, output);\r\n } else if (node instanceof ProjectionMatrixNode) {\r\n expr = this.projectionMatrix(node, output);\r\n } else if (node instanceof ViewProjMatrixNode) {\r\n expr = this.viewProjectionMatrix(node, output);\r\n } else if (node instanceof InvProjMatrixNode) {\r\n expr = this.invProjectionMatrix(node, output);\r\n } else if (node instanceof InvViewProjMatrixNode) {\r\n expr = this.invViewProjectionMatrix(node, output);\r\n } else if (node instanceof BillboardMatrixNode) {\r\n expr = this.billboardMatrix(node, output);\r\n } else if (node instanceof CameraPositionNode) {\r\n expr = this.cameraPosition(node, output);\r\n } else if (node instanceof CameraVectorNode) {\r\n expr = this.cameraVector(node, output);\r\n } else if (node instanceof CameraNearFarNode) {\r\n expr = this.cameraNearFar(node, output);\r\n } else if (node instanceof SkyEnvTextureNode) {\r\n expr = this.skyEnvTexture(node, output);\r\n } else if (node instanceof ElapsedTimeNode) {\r\n expr = this.elapsedTime(node, output);\r\n } else if (node instanceof FunctionCallNode) {\r\n expr = this.functionCall(node, output);\r\n } else if (node instanceof FunctionInputNode) {\r\n expr = this.functionInput(node, output);\r\n } else if (node instanceof FunctionOutputNode) {\r\n expr = this.functionOutput(node, output);\r\n }\r\n if (expr && originType) {\r\n const outputType = node.getOutputType(output);\r\n if (originType !== outputType) {\r\n if (originType === 'float') {\r\n if (outputType !== 'vec2' && outputType !== 'vec3' && outputType !== 'vec4') {\r\n throw new Error(`Cannot cast type \\`${outputType}\\` to \\`${originType}`);\r\n }\r\n return new IRSwizzle(expr, 'x');\r\n } else if (outputType === 'float') {\r\n if (originType !== 'vec2' && originType !== 'vec3' && originType !== 'vec4') {\r\n throw new Error(`Cannot cast type \\`${outputType}\\` to \\`${originType}`);\r\n }\r\n return new IRCast(expr, originType, 0);\r\n } else if (outputType === 'vec2' || outputType === 'vec3' || outputType === 'vec4') {\r\n const nOut = Number(outputType[outputType.length - 1]);\r\n const nOrg = Number(originType[originType.length - 1]);\r\n if (nOut > nOrg) {\r\n return new IRSwizzle(expr, 'xyzw'.slice(0, nOrg));\r\n } else {\r\n return new IRCast(expr, originType, nOrg - nOut, defaultValue?.slice(nOut - nOrg));\r\n }\r\n } else {\r\n throw new Error(`Cannot cast type \\`${outputType}\\` to \\`${originType}`);\r\n }\r\n }\r\n }\r\n\r\n return expr;\r\n }\r\n /**\r\n * Gets or creates an IR expression for a graph node\r\n *\r\n * @param node - The graph node\r\n * @param outputId - The output slot ID\r\n * @param ctor - The IR expression constructor\r\n * @param args - Constructor arguments\r\n * @returns The cached or newly created IR expression\r\n *\r\n * @remarks\r\n * Implements common subexpression elimination by caching expressions per node.\r\n * Handles output slot swizzling and type casting.\r\n * Collects uniform values and textures.\r\n */\r\n private getOrCreateIRExpression<\r\n T extends GenericConstructor<IRExpression>,\r\n F extends ConstructorParameters<T>\r\n >(node: BaseGraphNode, outputId: number, ctor: T, ...args: F): IRExpression {\r\n let ir: IRExpression;\r\n if (!this._expressionMap.has(node)) {\r\n ir = new ctor(...args);\r\n this._expressions.push(ir);\r\n this._expressionMap.set(node, this._expressions.length - 1);\r\n const uniformValue = ir.asUniformValue(node);\r\n if (uniformValue) {\r\n this._uniformValues.push(uniformValue);\r\n }\r\n const uniformTexture = ir.asUniformTexture(node);\r\n if (uniformTexture) {\r\n this._uniformTextures.push(uniformTexture);\r\n }\r\n } else {\r\n ir = this._expressions[this._expressionMap.get(node)!] as InstanceType<T>;\r\n }\r\n if (!ir.outputs[outputId]) {\r\n const output = node.outputs.find((v) => v.id === outputId)!;\r\n ir.outputs[outputId] = ir;\r\n if (output.swizzle) {\r\n ir.outputs[outputId] = new IRSwizzle(ir.outputs[outputId], output.swizzle);\r\n }\r\n }\r\n return ir.outputs[outputId];\r\n }\r\n /** Converts a MakeVector node to IR */\r\n private makeVector(node: MakeVectorNode, output: number): IRExpression {\r\n const params: IRExpression[] = [];\r\n for (const input of node.inputs) {\r\n if (input.inputNode) {\r\n params.push(this.ir(input)!);\r\n }\r\n }\r\n const funcName = node.getOutputType(output);\r\n return this.getOrCreateIRExpression(node, output, IRFunc, params, funcName);\r\n }\r\n /** Converts a swizzle node to IR */\r\n private swizzle(node: SwizzleNode, output: number): IRExpression {\r\n return this.getOrCreateIRExpression(node, output, IRSwizzle, this.ir(node.inputs[0])!, node.swizzle);\r\n }\r\n /** Converts a comparison node to IR */\r\n private comparison(node: CompComparisonNode, output: number): IRExpression {\r\n return this.getOrCreateIRExpression(\r\n node,\r\n output,\r\n IRComparison,\r\n this.ir(node.inputs[0])!,\r\n this.ir(node.inputs[1])!,\r\n node.mode\r\n );\r\n }\r\n /** Converts an any-condition node to IR */\r\n private any(node: AnyConditionNode, output: number): IRExpression {\r\n return this.getOrCreateIRExpression(node, output, IRAny, this.ir(node.inputs[0])!);\r\n }\r\n /** Converts an all-condition node to IR */\r\n private all(node: AllConditionNode, output: number): IRExpression {\r\n return this.getOrCreateIRExpression(node, output, IRAll, this.ir(node.inputs[0])!);\r\n }\r\n /** Converts a selection node to IR */\r\n private selection(node: SelectionNode, output: number): IRExpression {\r\n return this.getOrCreateIRExpression(\r\n node,\r\n output,\r\n IRSelection,\r\n this.ir(node.inputs[0])!,\r\n this.ir(node.inputs[1])!,\r\n this.ir(node.inputs[2])!\r\n );\r\n }\r\n /** Converts a Transform node to IR */\r\n private transform(node: TransformNode, output: number): IRExpression {\r\n const params: IRExpression[] = [];\r\n for (const input of node.inputs) {\r\n if (input.inputNode) {\r\n params.push(this.ir(input)!);\r\n }\r\n }\r\n return this.getOrCreateIRExpression(node, output, IRFunc, params, 'mul');\r\n }\r\n /** Converts a generic math function node to IR */\r\n private func(node: GenericMathNode, output: number): IRExpression {\r\n const params: IRExpression[] = [];\r\n for (const input of node.inputs) {\r\n if (input.inputNode) {\r\n params.push(this.ir(input)!);\r\n }\r\n }\r\n const funcName = node.func;\r\n return this.getOrCreateIRExpression(node, output, IRFunc, params, funcName);\r\n }\r\n /** Converts a function output node to IR */\r\n private functionOutput(node: FunctionOutputNode, output: number): IRExpression {\r\n const input = this.ir(node.inputs[0])!;\r\n return this.getOrCreateIRExpression(node, output, IRFunctionOutput, input);\r\n }\r\n /** Converts a rotate-about-axis node to IR */\r\n private rotateAboutAxis(node: RotateAboutAxisNode, output: number): IRExpression {\r\n const axis = this.ir(node.inputs[0])!;\r\n const angleTurns = node.inputs[1].inputNode\r\n ? this.ir(node.inputs[1])!\r\n : new IRConstantf(node.inputs[1].defaultValue?.[0] ?? 0, '');\r\n const pivot = node.inputs[2].inputNode\r\n ? this.ir(node.inputs[2])!\r\n : new IRConstantfv(node.inputs[2].defaultValue ?? [0, 0, 0], '', 'vec3');\r\n const position = this.ir(node.inputs[3])!;\r\n\r\n const angleRad = new IRFunc([angleTurns, 6.283185307179586], 'mul'); // turns -> radians\r\n const cosA = new IRFunc([angleRad], 'cos');\r\n const sinA = new IRFunc([angleRad], 'sin');\r\n\r\n const p = new IRFunc([position, pivot], 'sub');\r\n const term1 = new IRFunc([p, cosA], 'mul');\r\n const term2 = new IRFunc([new IRFunc([axis, p], 'cross'), sinA], 'mul');\r\n const term3 = new IRFunc(\r\n [axis, new IRFunc([new IRFunc([axis, p], 'dot'), new IRFunc([1, cosA], 'sub')], 'mul')],\r\n 'mul'\r\n );\r\n const rotated = new IRFunc([new IRFunc([term1, term2], 'add'), term3], 'add');\r\n return this.getOrCreateIRExpression(node, output, IRFunc, [rotated, pivot], 'add');\r\n }\r\n /** Converts a panner node to IR */\r\n private panner(node: PannerNode, output: number): IRExpression {\r\n const coordInput = node.inputs[0];\r\n const timeInput = node.inputs[1];\r\n const speedInput = node.inputs[2];\r\n\r\n const coord = coordInput.inputNode\r\n ? this.ir(coordInput)!\r\n : (() => {\r\n this._behaviors.useVertexUV = true;\r\n return new IRInput((scope) => scope.zVertexUV);\r\n })();\r\n\r\n const time = timeInput.inputNode\r\n ? this.ir(timeInput)!\r\n : new IRInput((scope: PBInsideFunctionScope) => ShaderHelper.getElapsedTime(scope));\r\n\r\n const speed = speedInput.inputNode\r\n ? this.ir(speedInput)!\r\n : new IRConstantfv(speedInput.defaultValue ?? [0, 0], '', 'vec2');\r\n\r\n return this.getOrCreateIRExpression(\r\n node,\r\n output,\r\n IRFunc,\r\n [coord, new IRFunc([time, speed], 'mul')],\r\n 'add'\r\n );\r\n }\r\n /** Converts a vertex color input node to IR */\r\n private vertexColor(node: VertexColorNode, output: number): IRExpression {\r\n this._behaviors.useVertexColor = true;\r\n return this.getOrCreateIRExpression(node, output, IRInput, (scope) => scope.zVertexColor);\r\n }\r\n /** Converts a vertex UV input node to IR */\r\n private vertexUV(node: VertexUVNode, output: number): IRExpression {\r\n this._behaviors.useVertexUV = true;\r\n return this.getOrCreateIRExpression(node, output, IRInput, (scope) => {\r\n return scope.zVertexUV;\r\n });\r\n }\r\n /** Converts a vertex normal input node to IR */\r\n private vertexNormal(node: VertexNormalNode, output: number): IRExpression {\r\n return this.getOrCreateIRExpression(node, output, IRInput, (scope) =>\r\n scope.$builder.getDevice().type === 'vertex'\r\n ? (scope.$getVertexAttrib('normal') ?? ShaderHelper.resolveVertexNormal(scope))\r\n : scope.$builder.normalize(scope.zVertexNormal)\r\n );\r\n }\r\n /** Converts a pixel normal input node to IR */\r\n private pixelNormal(node: PixelNormalNode, output: number): IRExpression {\r\n return this.getOrCreateIRExpression(node, output, IRInput, (scope) =>\r\n scope.$builder.getDevice().type === 'vertex'\r\n ? (scope.$getVertexAttrib('normal') ?? ShaderHelper.resolveVertexNormal(scope))\r\n : scope.$builder.normalize(scope.zVertexNormal)\r\n );\r\n }\r\n /** Converts a vertex tangent input node to IR */\r\n private vertexTangent(node: VertexTangentNode, output: number): IRExpression {\r\n return this.getOrCreateIRExpression(node, output, IRInput, (scope) =>\r\n scope.$builder.getDevice().type === 'vertex'\r\n ? (scope.$getVertexAttrib('tangent') ?? ShaderHelper.resolveVertexTangent(scope))\r\n : scope.$builder.normalize(scope.zVertexTangent)\r\n );\r\n }\r\n /** Converts a vertex binormal input node to IR */\r\n private vertexBinormal(node: VertexBinormalNode, output: number): IRExpression {\r\n return this.getOrCreateIRExpression(node, output, IRInput, (scope) =>\r\n scope.$builder.normalize(scope.zVertexBinormal)\r\n );\r\n }\r\n /** Converts a vertex position input node to IR */\r\n private vertexPosition(node: VertexPositionNode, output: number): IRExpression {\r\n return this.getOrCreateIRExpression(node, output, IRInput, (scope: PBInsideFunctionScope) => {\r\n if (scope.$builder.getDevice().type === 'vertex') {\r\n const worldMatrix = ShaderHelper.getWorldMatrix(scope);\r\n const basePos = ShaderHelper.resolveVertexPosition(scope);\r\n return scope.$builder.mul(worldMatrix, scope.$builder.vec4(basePos, 1)).xyz;\r\n }\r\n return scope.zWorldPos;\r\n });\r\n }\r\n /** Converts a pixel world position input node to IR */\r\n private pixelWorldPosition(node: PixelWorldPositionNode, output: number): IRExpression {\r\n return this.getOrCreateIRExpression(node, output, IRInput, (scope: PBInsideFunctionScope) => {\r\n if (scope.$builder.getDevice().type === 'vertex') {\r\n const worldMatrix = ShaderHelper.getWorldMatrix(scope);\r\n const basePos = ShaderHelper.resolveVertexPosition(scope);\r\n return scope.$builder.mul(worldMatrix, scope.$builder.vec4(basePos, 1)).xyz;\r\n }\r\n return scope.zWorldPos;\r\n });\r\n }\r\n /** Converts a view matrix input node to IR */\r\n private viewMatrix(node: ViewMatrixNode, output: number): IRExpression {\r\n return this.getOrCreateIRExpression(node, output, IRInput, (scope: PBInsideFunctionScope) =>\r\n ShaderHelper.getViewMatrix(scope)\r\n );\r\n }\r\n /** Converts a projection matrix input node to IR */\r\n private projectionMatrix(node: ProjectionMatrixNode, output: number): IRExpression {\r\n return this.getOrCreateIRExpression(node, output, IRInput, (scope: PBInsideFunctionScope) =>\r\n ShaderHelper.getProjectionMatrix(scope)\r\n );\r\n }\r\n /** Converts a view-projection matrix input node to IR */\r\n private viewProjectionMatrix(node: ViewProjMatrixNode, output: number): IRExpression {\r\n return this.getOrCreateIRExpression(node, output, IRInput, (scope: PBInsideFunctionScope) =>\r\n ShaderHelper.getViewProjectionMatrix(scope)\r\n );\r\n }\r\n /** Converts an inverse projection matrix input node to IR */\r\n private invProjectionMatrix(node: InvProjMatrixNode, output: number): IRExpression {\r\n return this.getOrCreateIRExpression(node, output, IRInput, (scope: PBInsideFunctionScope) =>\r\n ShaderHelper.getInvProjectionMatrix(scope)\r\n );\r\n }\r\n /** Converts an inverse view-projection matrix input node to IR */\r\n private invViewProjectionMatrix(node: InvViewProjMatrixNode, output: number): IRExpression {\r\n return this.getOrCreateIRExpression(node, output, IRInput, (scope: PBInsideFunctionScope) =>\r\n ShaderHelper.getInvViewProjectionMatrix(scope)\r\n );\r\n }\r\n /** Converts a camera position input node to IR */\r\n private cameraPosition(node: CameraPositionNode, output: number): IRExpression {\r\n return this.getOrCreateIRExpression(node, output, IRInput, (scope: PBInsideFunctionScope) =>\r\n ShaderHelper.getCameraPosition(scope)\r\n );\r\n }\r\n /** Converts a camera vector input node to IR */\r\n private cameraVector(node: CameraVectorNode, output: number): IRExpression {\r\n return this.getOrCreateIRExpression(node, output, IRInput, (scope: PBInsideFunctionScope) => {\r\n const pb = scope.$builder;\r\n const worldPos =\r\n pb.getDevice().type === 'vertex'\r\n ? pb.mul(ShaderHelper.getWorldMatrix(scope), pb.vec4(ShaderHelper.resolveVertexPosition(scope), 1))\r\n .xyz\r\n : scope.zWorldPos;\r\n return pb.normalize(pb.sub(ShaderHelper.getCameraPosition(scope), worldPos));\r\n });\r\n }\r\n /** Converts a camera near/far input node to IR */\r\n private cameraNearFar(node: CameraNearFarNode, output: number): IRExpression {\r\n return this.getOrCreateIRExpression(\r\n node,\r\n output,\r\n IRInput,\r\n (scope: PBInsideFunctionScope) => ShaderHelper.getCameraParams(scope).xy\r\n );\r\n }\r\n /** Converts a sky environment texture input node to IR */\r\n private skyEnvTexture(node: SkyEnvTextureNode, output: number): IRExpression {\r\n return this.getOrCreateIRExpression(node, output, IRInput, (scope: PBInsideFunctionScope) =>\r\n ShaderHelper.getBakedSkyTexture(scope)\r\n );\r\n }\r\n /** Converts an elapsed time input node to IR */\r\n private elapsedTime(node: ElapsedTimeNode, output: number): IRExpression {\r\n return this.getOrCreateIRExpression(node, output, IRInput, (scope: PBInsideFunctionScope) =>\r\n ShaderHelper.getElapsedTime(scope)\r\n );\r\n }\r\n /** Converts a function input node to IR */\r\n private functionInput(node: FunctionInputNode, output: number): IRExpression {\r\n return this.getOrCreateIRExpression(\r\n node,\r\n output,\r\n IRInput,\r\n (scope: PBInsideFunctionScope) => scope[node.name]\r\n );\r\n }\r\n /** Converts an vertex position resolver node to IR */\r\n private resolveVertexPosition(node: ResolveVertexPositionNode, output: number): IRExpression {\r\n return this.getOrCreateIRExpression(node, output, IRFunc, [], (pb: ProgramBuilder) =>\r\n ShaderHelper.resolveVertexPosition(pb.getCurrentScope() as PBInsideFunctionScope)\r\n );\r\n }\r\n /** Converts an vertex normal resolver node to IR */\r\n private resolveVertexNormal(node: ResolveVertexNormalNode, output: number): IRExpression {\r\n return this.getOrCreateIRExpression(node, output, IRFunc, [], (pb: ProgramBuilder) =>\r\n ShaderHelper.resolveVertexNormal(pb.getCurrentScope() as PBInsideFunctionScope)\r\n );\r\n }\r\n /** Converts an vertex tangent resolver node to IR */\r\n private resolveVertexTangent(node: ResolveVertexTangentNode, output: number): IRExpression {\r\n return this.getOrCreateIRExpression(node, output, IRFunc, [], (pb: ProgramBuilder) =>\r\n ShaderHelper.resolveVertexTangent(pb.getCurrentScope() as PBInsideFunctionScope)\r\n );\r\n }\r\n /** Converts an billboard matrix input node to IR */\r\n private billboardMatrix(node: BillboardMatrixNode, output: number): IRExpression {\r\n return this.getOrCreateIRExpression(node, output, IRFunc, [], (pb: ProgramBuilder) => {\r\n pb.func('Z_calcBillboardMatrix', [], function () {\r\n this.$l.objScale = pb.vec3(\r\n pb.length(ShaderHelper.getWorldMatrix(this)[0].xyz),\r\n pb.length(ShaderHelper.getWorldMatrix(this)[1].xyz),\r\n pb.length(ShaderHelper.getWorldMatrix(this)[2].xyz)\r\n );\r\n this.$l.rotation = pb.mat3(\r\n pb.div(ShaderHelper.getWorldMatrix(this)[0].xyz, this.objScale.x),\r\n pb.div(ShaderHelper.getWorldMatrix(this)[1].xyz, this.objScale.y),\r\n pb.div(ShaderHelper.getWorldMatrix(this)[2].xyz, this.objScale.z)\r\n );\r\n this.$l.cameraForward = pb.normalize(ShaderHelper.getInvViewMatrix(this)[2].xyz);\r\n this.$l.cameraUp = pb.normalize(ShaderHelper.getInvViewMatrix(this)[1].xyz);\r\n this.$l.cameraRight = pb.normalize(ShaderHelper.getInvViewMatrix(this)[0].xyz);\r\n this.$l.objForward = pb.normalize(pb.div(pb.mul(this.cameraForward, this.rotation), this.objScale));\r\n this.$l.objUp = pb.normalize(pb.div(pb.mul(this.cameraUp, this.rotation), this.objScale));\r\n this.$l.objRight = pb.normalize(pb.div(pb.mul(this.cameraRight, this.rotation), this.objScale));\r\n // make ortho\r\n /*\r\n this.objRight = pb.normalize(\r\n pb.sub(this.objRight, pb.mul(this.objUp, pb.dot(this.objRight, this.objUp)))\r\n );\r\n this.objForward = pb.cross(this.objUp, this.objRight);\r\n */\r\n // make rotation matrix\r\n this.$l.billboardMatrix = pb.mat3(\r\n this.objRight.x,\r\n this.objUp.x,\r\n this.objForward.x,\r\n this.objRight.y,\r\n this.objUp.y,\r\n this.objForward.y,\r\n this.objRight.z,\r\n this.objUp.z,\r\n this.objForward.z\r\n );\r\n this.$return(pb.transpose(this.billboardMatrix));\r\n });\r\n return pb.getGlobalScope().Z_calcBillboardMatrix();\r\n });\r\n }\r\n /** Converts a hash1 node to IR */\r\n private hash1(node: Hash1Node, output: number): IRExpression {\r\n const params: IRExpression[] = [];\r\n const input = node.inputs[0];\r\n ASSERT(!!input.inputNode);\r\n const type = input.inputNode.getOutputType(input.inputId!);\r\n ASSERT(type === 'float' || type === 'vec2' || type === 'vec3');\r\n params.push(this.ir(input)!);\r\n return this.getOrCreateIRExpression(\r\n node,\r\n output,\r\n IRFunc,\r\n params,\r\n (pb: ProgramBuilder, ...params: (number | boolean | PBShaderExp)[]) => {\r\n const scope = pb.getCurrentScope() as PBInsideFunctionScope;\r\n const seed = params[0] as number | PBShaderExp;\r\n return type === 'float'\r\n ? hash11(scope, seed)\r\n : type === 'vec2'\r\n ? hash21(scope, seed as PBShaderExp)\r\n : hash31(scope, seed as PBShaderExp);\r\n }\r\n );\r\n }\r\n /** Converts a hash2 node to IR */\r\n private hash2(node: Hash1Node, output: number): IRExpression {\r\n const params: IRExpression[] = [];\r\n const input = node.inputs[0];\r\n ASSERT(!!input.inputNode);\r\n const type = input.inputNode.getOutputType(input.inputId!);\r\n ASSERT(type === 'float' || type === 'vec2' || type === 'vec3');\r\n params.push(this.ir(input)!);\r\n return this.getOrCreateIRExpression(\r\n node,\r\n output,\r\n IRFunc,\r\n params,\r\n (pb: ProgramBuilder, ...params: (number | boolean | PBShaderExp)[]) => {\r\n const scope = pb.getCurrentScope() as PBInsideFunctionScope;\r\n const seed = params[0] as number | PBShaderExp;\r\n return type === 'float'\r\n ? hash12(scope, seed)\r\n : type === 'vec2'\r\n ? hash22(scope, seed as PBShaderExp)\r\n : hash32(scope, seed as PBShaderExp);\r\n }\r\n );\r\n }\r\n /** Converts a hash3 node to IR */\r\n private hash3(node: Hash1Node, output: number): IRExpression {\r\n const params: IRExpression[] = [];\r\n const input = node.inputs[0];\r\n ASSERT(!!input.inputNode);\r\n const type = input.inputNode.getOutputType(input.inputId!);\r\n ASSERT(type === 'float' || type === 'vec2' || type === 'vec3');\r\n params.push(this.ir(input)!);\r\n return this.getOrCreateIRExpression(\r\n node,\r\n output,\r\n IRFunc,\r\n params,\r\n (pb: ProgramBuilder, ...params: (number | boolean | PBShaderExp)[]) => {\r\n const scope = pb.getCurrentScope() as PBInsideFunctionScope;\r\n const seed = params[0] as number | PBShaderExp;\r\n return type === 'float'\r\n ? hash13(scope, seed)\r\n : type === 'vec2'\r\n ? hash23(scope, seed as PBShaderExp)\r\n : hash33(scope, seed as PBShaderExp);\r\n }\r\n );\r\n }\r\n /** Converts a simple noise node to IR */\r\n private simplexNoise2d(node: SimplexNoise2DNode, output: number): IRExpression {\r\n const params: IRExpression[] = [];\r\n for (const input of node.inputs) {\r\n if (input.inputNode) {\r\n params.push(this.ir(input)!);\r\n }\r\n }\r\n return this.getOrCreateIRExpression(\r\n node,\r\n output,\r\n IRFunc,\r\n params,\r\n (pb: ProgramBuilder, ...params: (number | boolean | PBShaderExp)[]) => {\r\n pb.func(node.toString(), [pb.vec2('uv'), pb.float('scale')], function () {\r\n this.$l.t = pb.float(0);\r\n let freq = 1;\r\n let amp = 0.5 * 0.5 * 0.5;\r\n this.t = pb.add(this.t, pb.mul(valueNoise(this, pb.mul(this.uv, this.scale, 1 / freq)), amp));\r\n freq *= 2;\r\n amp *= 2;\r\n this.t = pb.add(this.t, pb.mul(valueNoise(this, pb.mul(this.uv, this.scale, 1 / freq)), amp));\r\n freq *= 2;\r\n amp *= 2;\r\n this.t = pb.add(this.t, pb.mul(valueNoise(this, pb.mul(this.uv, this.scale, 1 / freq)), amp));\r\n this.$return(this.t);\r\n });\r\n return pb.getGlobalScope()[node.toString()](params[0], params[1]);\r\n }\r\n );\r\n }\r\n /** Converts a perlin noise node to IR */\r\n private perlinNoise2d(node: SimplexNoise2DNode, output: number): IRExpression {\r\n const params: IRExpression[] = [];\r\n for (const input of node.inputs) {\r\n if (input.inputNode) {\r\n params.push(this.ir(input)!);\r\n }\r\n }\r\n return this.getOrCreateIRExpression(\r\n node,\r\n output,\r\n IRFunc,\r\n params,\r\n (pb: ProgramBuilder, ...params: (number | boolean | PBShaderExp)[]) => {\r\n pb.func('Z_perlinNoise2dDir', [pb.vec2('uv')], function () {\r\n this.$l.p = pb.mod(this.uv, pb.vec2(289));\r\n this.$l.x = pb.add(pb.mod(pb.mul(pb.add(pb.mul(this.p.x, 34), 1), this.p.x), 289), this.p.y);\r\n this.x = pb.mod(pb.mul(pb.add(pb.mul(this.x, 34), 1), this.x), 289);\r\n this.x = pb.sub(pb.mul(pb.fract(pb.div(this.x, 41)), 2), 1);\r\n this.$return(\r\n pb.normalize(pb.vec2(pb.sub(this.x, pb.floor(pb.add(this.x, 0.5))), pb.sub(pb.abs(this.x), 0.5)))\r\n );\r\n });\r\n pb.func('Z_perlinNoise2dImpl', [pb.vec2('uv')], function () {\r\n this.$l.i = pb.floor(this.uv);\r\n this.$l.f = pb.fract(this.uv);\r\n this.$l.r00 = pb.dot(this.Z_perlinNoise2dDir(this.i), this.f);\r\n this.$l.r01 = pb.dot(\r\n this.Z_perlinNoise2dDir(pb.add(this.i, pb.vec2(0, 1))),\r\n pb.sub(this.f, pb.vec2(0, 1))\r\n );\r\n this.$l.r10 = pb.dot(\r\n this.Z_perlinNoise2dDir(pb.add(this.i, pb.vec2(1, 0))),\r\n pb.sub(this.f, pb.vec2(1, 0))\r\n );\r\n this.$l.r11 = pb.dot(\r\n this.Z_perlinNoise2dDir(pb.add(this.i, pb.vec2(1, 1))),\r\n pb.sub(this.f, pb.vec2(1, 1))\r\n );\r\n this.f = pb.mul(\r\n this.f,\r\n this.f,\r\n this.f,\r\n pb.add(pb.mul(this.f, pb.sub(pb.mul(this.f, 6), pb.vec2(15))), 10)\r\n );\r\n this.$return(\r\n pb.mix(pb.mix(this.r00, this.r01, this.f.y), pb.mix(this.r10, this.r11, this.f.y), this.f.x)\r\n );\r\n });\r\n pb.func(node.toString(), [pb.vec2('uv'), pb.float('scale')], function () {\r\n this.$return(pb.add(this.Z_perlinNoise2dImpl(pb.mul(this.uv, this.scale)), 0.5));\r\n });\r\n return pb.getGlobalScope()[node.toString()](params[0], params[1]);\r\n }\r\n );\r\n }\r\n /** Converts a function call node to IR */\r\n private functionCall(node: FunctionCallNode, output: number): IRExpression {\r\n const args = node.inputs.map((input) => {\r\n return this.ir(input)!;\r\n });\r\n return this.getOrCreateIRExpression(node, output, IRCallFunc, node, args);\r\n }\r\n /** Converts a scalar constant node to IR */\r\n private constantf(node: ConstantScalarNode, output: number): IRExpression {\r\n return this.getOrCreateIRExpression(node, output, IRConstantf, node.x, node.paramName);\r\n }\r\n /** Converts a vector constant node to IR */\r\n private constantfv(\r\n node: ConstantVec2Node | ConstantVec3Node | ConstantVec4Node,\r\n output: number\r\n ): IRExpression {\r\n const value =\r\n node instanceof ConstantVec2Node\r\n ? [node.x, node.y]\r\n : node instanceof ConstantVec3Node\r\n ? [node.x, node.y, node.z]\r\n : [node.x, node.y, node.z, node.w];\r\n return this.getOrCreateIRExpression(\r\n node,\r\n output,\r\n IRConstantfv,\r\n value,\r\n node.paramName,\r\n `vec${value.length}`\r\n );\r\n }\r\n /** Converts a scalar boolean constant node to IR */\r\n private constantb(node: ConstantBooleanNode, output: number): IRExpression {\r\n return this.getOrCreateIRExpression(node, output, IRConstantb, node.x);\r\n }\r\n /** Converts a boolean vector constant node to IR */\r\n private constantbv(\r\n node: ConstantBVec2Node | ConstantBVec3Node | ConstantBVec4Node,\r\n output: number\r\n ): IRExpression {\r\n const value =\r\n node instanceof ConstantBVec2Node\r\n ? [node.x, node.y]\r\n : node instanceof ConstantBVec3Node\r\n ? [node.x, node.y, node.z]\r\n : [node.x, node.y, node.z, node.w];\r\n return this.getOrCreateIRExpression(node, output, IRConstantbv, value);\r\n }\r\n /** Converts a texture constant node to IR */\r\n private constantTexture(node: BaseTextureNode, output: number): IRConstantTexture {\r\n return this.getOrCreateIRExpression(\r\n node,\r\n output,\r\n IRConstantTexture,\r\n node.paramName,\r\n node.textureId,\r\n node.getOutputType(1),\r\n node.sRGB,\r\n node.addressU,\r\n node.addressV,\r\n node.filterMin,\r\n node.filterMag,\r\n node.filterMip\r\n ) as IRConstantTexture;\r\n }\r\n /** Converts a texture sample node to IR */\r\n private textureSample(node: TextureSampleNode, output: number): IRExpression {\r\n const tex = node.inputs[0].inputNode ? this.ir(node.inputs[0])! : this.textureSampleFallbackTexture(node);\r\n const coord = node.inputs[1].inputNode\r\n ? this.ir(node.inputs[1])!\r\n : (() => {\r\n this._behaviors.useVertexUV = true;\r\n return new IRInput((scope) => scope.zVertexUV);\r\n })();\r\n return this.getOrCreateIRExpression(node, output, IRSampleTexture, tex, coord, node.samplerType);\r\n }\r\n /** Gets or creates fallback texture uniform expression for texture sample nodes */\r\n private textureSampleFallbackTexture(node: TextureSampleNode): IRConstantTexture {\r\n let ir = this._textureSampleFallbackMap.get(node);\r\n if (!ir) {\r\n ir = new IRConstantTexture(\r\n node.paramName,\r\n node.textureId,\r\n 'tex2D',\r\n node.sRGB,\r\n node.addressU,\r\n node.addressV,\r\n node.filterMin,\r\n node.filterMag,\r\n node.filterMip\r\n );\r\n this._expressions.push(ir);\r\n this._textureSampleFallbackMap.set(node, ir);\r\n const uniformTexture = ir.asUniformTexture();\r\n if (uniformTexture) {\r\n this._uniformTextures.push(uniformTexture);\r\n }\r\n }\r\n return ir;\r\n }\r\n}\r\n"],"names":["IRExpression","_ref","_outputs","outputs","addRef","getTmpName","scope","tmp","name","asUniformValue","_node","asUniformTexture","reset","IRConstantf","value","paramName","create","pb","getGlobalScope","float","uniform","type","IRConstantb","IRConstantfv","length","Array","isArray","IRConstantbv","IRInput","func","getCurrentScope","IRFunc","params","map","param","tmpName","exp","IRFunctionOutput","input","IRCallFunc","node","args","that","ir","IR","v","rettype","defineStruct","output","index","outs","swizzle","$return","arg","IRSelection","a","b","cond","c","select","IRAny","src","any","IRAll","all","IRComparison","mode","compEqual","compNotEqual","lessThan","lessThanEqual","greaterThan","greaterThanEqual","Error","IRSwizzle","hash","IRCast","cast","fill","slice","from","IRSampleTexture","tex","coord","samplerType","coordExp","texExp","PBShaderExp","textureSample","sub","mul","vec4","IRConstantTexture","useParams","id","sRGB","addressU","addressV","minFilter","magFilter","mipFilter","filterMin","filterMag","filterMip","texture","wrapS","wrapT","MaterialBlueprintIR","dag","editorState","_dag","nodeMap","roots","graph","outgoing","incoming","order","_hash","_editorState","compile","ok","behaviors","_behaviors","DAG","uniformValues","_uniformValues","uniformTextures","_uniformTextures","root","rootNode","inputs","inputNode","push","expr","defaultValue","required","VertexBlockNode","useVertexColor","useVertexUV","_expressions","_expressionMap","Map","_textureSampleFallbackMap","inputId","originType","ConstantScalarNode","constantf","ConstantVec2Node","ConstantVec3Node","ConstantVec4Node","constantfv","ConstantBooleanNode","constantb","ConstantBVec2Node","ConstantBVec3Node","ConstantBVec4Node","constantbv","BaseTextureNode","constantTexture","TextureSampleNode","PannerNode","panner","MakeVectorNode","makeVector","SwizzleNode","CompComparisonNode","comparison","AnyConditionNode","AllConditionNode","SelectionNode","selection","ResolveVertexPositionNode","resolveVertexPosition","ResolveVertexNormalNode","resolveVertexNormal","ResolveVertexTangentNode","resolveVertexTangent","Hash1Node","hash1","Hash2Node","hash2","Hash3Node","hash3","SimplexNoise2DNode","simplexNoise2d","PerlinNoise2DNode","perlinNoise2d","GenericMathNode","TransformNode","transform","RotateAboutAxisNode","rotateAboutAxis","VertexColorNode","vertexColor","VertexUVNode","vertexUV","VertexPositionNode","vertexPosition","PixelWorldPositionNode","pixelWorldPosition","VertexNormalNode","vertexNormal","PixelNormalNode","pixelNormal","VertexTangentNode","vertexTangent","VertexBinormalNode","vertexBinormal","ViewMatrixNode","viewMatrix","ProjectionMatrixNode","projectionMatrix","ViewProjMatrixNode","viewProjectionMatrix","InvProjMatrixNode","invProjectionMatrix","InvViewProjMatrixNode","invViewProjectionMatrix","BillboardMatrixNode","billboardMatrix","CameraPositionNode","cameraPosition","CameraVectorNode","cameraVector","CameraNearFarNode","cameraNearFar","SkyEnvTextureNode","skyEnvTexture","ElapsedTimeNode","elapsedTime","FunctionCallNode","functionCall","FunctionInputNode","functionInput","FunctionOutputNode","functionOutput","outputType","getOutputType","nOut","Number","nOrg","getOrCreateIRExpression","outputId","ctor","has","set","uniformValue","uniformTexture","get","find","funcName","axis","angleTurns","pivot","position","angleRad","cosA","sinA","p","term1","term2","term3","rotated","coordInput","timeInput","speedInput","zVertexUV","time","ShaderHelper","getElapsedTime","speed","zVertexColor","$builder","getDevice","$getVertexAttrib","normalize","zVertexNormal","zVertexTangent","zVertexBinormal","worldMatrix","getWorldMatrix","basePos","xyz","zWorldPos","getViewMatrix","getProjectionMatrix","getViewProjectionMatrix","getInvProjectionMatrix","getInvViewProjectionMatrix","getCameraPosition","worldPos","getCameraParams","xy","getBakedSkyTexture","$l","objScale","vec3","rotation","mat3","div","x","y","z","cameraForward","getInvViewMatrix","cameraUp","cameraRight","objForward","objUp","objRight","transpose","Z_calcBillboardMatrix","ASSERT","seed","hash11","hash21","hash31","hash12","hash22","hash32","hash13","hash23","hash33","toString","vec2","t","freq","amp","add","valueNoise","uv","scale","mod","fract","floor","abs","i","f","r00","dot","Z_perlinNoise2dDir","r01","r10","r11","mix","Z_perlinNoise2dImpl","w","textureId","textureSampleFallbackTexture"],"mappings":"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"}
|