217 lines
4.2 KiB
Markdown
217 lines
4.2 KiB
Markdown
## Shader Node
|
|
|
|
Used for creating and parsing shader nodes.
|
|
|
|
---
|
|
|
|
### Automatic Node Library Generation
|
|
|
|
The code for the node library is parsed by executing **.scripts/generate.js** on the **chunks and masters** defined within
|
|
shader-templates, dynamically creating code in the **assets/operation** directory.
|
|
|
|
**Template**
|
|
- chunk
|
|
- common
|
|
- input_basic
|
|
- math
|
|
- noise
|
|
- range
|
|
- shape
|
|
- uv
|
|
- master
|
|
- SurfaceMasterNode
|
|
- UnlitMasterNode
|
|
|
|
---
|
|
|
|
**Generated Nodes**
|
|
- Input
|
|
- Basic
|
|
- Float
|
|
- Boolean
|
|
- Slider
|
|
- Vector2
|
|
- Vector3
|
|
- Vector4
|
|
- Color
|
|
- Time
|
|
- Geometry
|
|
- NormalVector
|
|
- Position
|
|
- UV
|
|
- VertexColor
|
|
- ViewDirection
|
|
- Texture
|
|
- SimpleTexture2D
|
|
- Variable
|
|
- GetLocalVar
|
|
- RegisterLocalVar
|
|
- Math
|
|
- Advanced
|
|
- Absolute
|
|
- Exponential
|
|
- Length
|
|
- Log
|
|
- Module
|
|
- Negate
|
|
- Normalize
|
|
- Posterize
|
|
- ReciprocalSquare
|
|
- Reciprocal
|
|
- Basic
|
|
- Add
|
|
- Divide
|
|
- Multiply
|
|
- Power
|
|
- Square
|
|
- Substract
|
|
- Derivative
|
|
- DDX
|
|
- DDXY
|
|
- DDY
|
|
- Interpolation
|
|
- InverseLerp
|
|
- Lerp
|
|
- Smoothstep
|
|
- Range
|
|
- Clamp
|
|
- Fraction
|
|
- Max
|
|
- Min
|
|
- OneMinus
|
|
- RandomRange
|
|
- Remap
|
|
- Saturate
|
|
- Round
|
|
- Ceil
|
|
- Floor
|
|
- Round
|
|
- Sign
|
|
- Step
|
|
- Truncate
|
|
- Trigonometry
|
|
- Arccosine
|
|
- Arcsine
|
|
- Arctangent
|
|
- Arctangent2
|
|
- Cosine
|
|
- DegressToRadians
|
|
- HyperbolicCosine
|
|
- HyperbolicSine
|
|
- Hyperbolic
|
|
- RadiansToDegrees
|
|
- Sine
|
|
- Tangent
|
|
- Vector
|
|
- CrossProduct
|
|
- Distance
|
|
- DotProduct
|
|
- Fresnel
|
|
- Projection
|
|
- Reflection
|
|
- SphereMask
|
|
- Wave
|
|
- NoiseSineWave
|
|
- SawtoothWave
|
|
- SquareWave
|
|
- TriangleWave
|
|
- Procedural
|
|
- Noise
|
|
- GradientNoise
|
|
- SimpleNoise
|
|
- Shape
|
|
- Ellipse
|
|
- Rectangle
|
|
- RoundRectangle
|
|
- Uv
|
|
- PolarCoordinates
|
|
- RotateCoordinates
|
|
- TillingAndOffset
|
|
- Channel
|
|
- Combine
|
|
- Split
|
|
- Logic
|
|
- AI
|
|
- And
|
|
- Any
|
|
- Branch
|
|
- Comparison
|
|
- IsNan
|
|
- Not
|
|
- Or
|
|
|
|
---
|
|
|
|
## How to define the node class
|
|
|
|
```typescript
|
|
// This path needs to be modified according to the path where you are storing it
|
|
import { register } from '../../../../graph/register';
|
|
import { ShaderNode } from '../../../base';
|
|
import { slot } from '../../../utils';
|
|
|
|
@register({
|
|
// Menu for creating a node
|
|
menu: 'Custom/Foo',
|
|
// The name of the node
|
|
title: 'Foo',
|
|
// The style of the node
|
|
style: {
|
|
headerColor: '#ff1e00'
|
|
},
|
|
// Whether the node is a master node (master nodes are not deleted, there is only one master node)
|
|
master: false,
|
|
})
|
|
export class Foo extends ShaderNode {
|
|
// Define properties on the node
|
|
// slot is similar to prop in that it defines information about the properties on the node.
|
|
// Parameter one [string]: name
|
|
// parameter two [any]: default value
|
|
// Parameter three [string]: type
|
|
// Parameter four [string]: type of connection
|
|
// Parameter five [Object]: custom object
|
|
data = {
|
|
// Input property list
|
|
inputs: [
|
|
slot('In', 0, 'float', 'vector'),
|
|
],
|
|
// Output property list
|
|
outputs: [
|
|
slot('Out', 0, 'float', 'vector'),
|
|
],
|
|
// List of attributes
|
|
props: [
|
|
prop('Prop', 99, 'float'),
|
|
],
|
|
};
|
|
|
|
/**
|
|
* Generating an effect
|
|
*/
|
|
generateCode() {
|
|
const input0 = this.getInputValue(0);
|
|
const output0 = this.getOutputVarDefine(0);
|
|
|
|
return `
|
|
${output0} = ${input0};
|
|
`;
|
|
}
|
|
}
|
|
```
|
|
|
|
### Preview image
|
|
|
|
Menu:
|
|
|
|
<img src="../readme/自定义节点菜单.png" width="250px">
|
|
|
|
Node:
|
|
|
|
<img src="../readme/自定义节点.png" width="250px">
|
|
|
|
---
|
|
|
|
### Known issues
|
|
|
|
- Boolean variables are not currently supported
|