@pixerate/editor 0.241.0 → 0.243.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/animation-editor/controller.d.cts +10 -0
- package/dist/animation-editor/controller.d.ts +10 -0
- package/dist/animation-editor/effects.d.cts +1 -1
- package/dist/animation-editor/effects.d.ts +1 -1
- package/dist/animation-editor/index.cjs +195 -146
- package/dist/animation-editor/index.js +63 -14
- package/dist/{brushstrokeRender-MOYGEXOC.js → brushstrokeRender-274HGNZR.js} +3 -3
- package/dist/{brushstrokeRender-UKADOV5D.cjs → brushstrokeRender-C7RJZPMC.cjs} +5 -5
- package/dist/canvas/index.cjs +15 -15
- package/dist/canvas/index.js +2 -2
- package/dist/{chunk-KCMV2534.cjs → chunk-3WOZEBXZ.cjs} +2 -2
- package/dist/{chunk-ZDPLZDTT.js → chunk-4ZHXLFXS.js} +1 -1
- package/dist/{chunk-5BR7LC24.cjs → chunk-5FZS7J7C.cjs} +50 -4
- package/dist/{chunk-ILM6GYAX.js → chunk-6L3WWIDW.js} +1 -1
- package/dist/{chunk-A7PQNIBX.cjs → chunk-7V7QMFTI.cjs} +14 -14
- package/dist/{chunk-JAOSL334.cjs → chunk-GHCSC2WP.cjs} +38 -16
- package/dist/{chunk-UDBDYZET.js → chunk-H4Z72Z4Z.js} +1 -1
- package/dist/{chunk-XBZK47LV.js → chunk-HQZHOPNE.js} +49 -3
- package/dist/{chunk-QP2B3MID.js → chunk-IXI5KATU.js} +1 -1
- package/dist/{chunk-JWCKJNDR.cjs → chunk-K5DS2JTA.cjs} +6 -6
- package/dist/{chunk-HGGJ36HR.cjs → chunk-KK2FWMA2.cjs} +1 -1
- package/dist/{chunk-WDDUPWVG.js → chunk-L3JFOTBQ.js} +1 -1
- package/dist/{chunk-SIK3LT6M.js → chunk-OFH6Q67U.js} +28 -6
- package/dist/{chunk-AFLMXITL.cjs → chunk-OONFIFEU.cjs} +23 -23
- package/dist/{chunk-HW72ABGR.cjs → chunk-R2FVAKFH.cjs} +86 -86
- package/dist/{chunk-G3RUKJ5C.js → chunk-RXZL4NG5.js} +1 -1
- package/dist/{chunk-NE6OOKWJ.js → chunk-SRXWDOUI.js} +1 -1
- package/dist/{chunk-7F4G74UQ.cjs → chunk-UV7OOZJQ.cjs} +35 -35
- package/dist/{chunk-TEFQISBY.js → chunk-X3ZINLIP.js} +1 -1
- package/dist/{chunk-ZQIWBJGH.cjs → chunk-XNZFVYC2.cjs} +7 -7
- package/dist/effects/fake.d.cts +4 -0
- package/dist/effects/fake.d.ts +4 -0
- package/dist/effects/helpers.d.cts +6 -0
- package/dist/effects/helpers.d.ts +6 -0
- package/dist/effects/index.cjs +222 -94
- package/dist/effects/index.js +131 -3
- package/dist/effects/types.d.cts +31 -0
- package/dist/effects/types.d.ts +31 -0
- package/dist/image-editor/index.cjs +788 -788
- package/dist/image-editor/index.js +5 -5
- package/dist/paint-editor/brushes.d.cts +18 -2
- package/dist/paint-editor/brushes.d.ts +18 -2
- package/dist/paint-editor/controller.d.cts +28 -0
- package/dist/paint-editor/controller.d.ts +28 -0
- package/dist/paint-editor/document.d.cts +3 -0
- package/dist/paint-editor/document.d.ts +3 -0
- package/dist/paint-editor/index.cjs +1017 -499
- package/dist/paint-editor/index.js +562 -44
- package/dist/paint-editor/light.d.cts +74 -0
- package/dist/paint-editor/light.d.ts +74 -0
- package/dist/paint-editor/stroke.d.cts +14 -0
- package/dist/paint-editor/stroke.d.ts +14 -0
- package/dist/paint-editor/thick-tools.d.cts +2 -2
- package/dist/paint-editor/thick-tools.d.ts +2 -2
- package/dist/paint-editor/thick.d.cts +5 -1
- package/dist/paint-editor/thick.d.ts +5 -1
- package/dist/paint-editor/ui.d.cts +2 -0
- package/dist/paint-editor/ui.d.ts +2 -0
- package/dist/vector/index.cjs +968 -968
- package/dist/vector/index.js +5 -5
- package/dist/video-editor/controller.d.cts +49 -1
- package/dist/video-editor/controller.d.ts +49 -1
- package/dist/video-editor/effect-path.d.cts +66 -0
- package/dist/video-editor/effect-path.d.ts +66 -0
- package/dist/video-editor/index.cjs +616 -427
- package/dist/video-editor/index.d.cts +1 -0
- package/dist/video-editor/index.d.ts +1 -0
- package/dist/video-editor/index.js +193 -4
- package/package.json +1 -1
- package/skills/pixerate-animation-editor/SKILL.md +1 -1
- package/skills/pixerate-paint-editor/SKILL.md +9 -9
- package/skills/pixerate-paint-editor/references/canvas-hosted.md +8 -0
- package/skills/pixerate-paint-editor/references/light-paint.md +31 -0
- package/skills/pixerate-paint-oil-impasto/SKILL.md +1 -0
- package/skills/pixerate-video-editor/SKILL.md +9 -2
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Light paint: a per-layer light channel (`doc.light`, one channel 0..255 per pixel, in layer
|
|
3
|
+
* space like the thick-paint channels) saying how much light the paint there gives off. The
|
|
4
|
+
* light's colour is the layer's own colour at that pixel, so recolouring the paint recolours its
|
|
5
|
+
* light.
|
|
6
|
+
*
|
|
7
|
+
* Laying and moving light: a stroke on a layer with light (or with a brush that lays it) runs a
|
|
8
|
+
* twin of itself over the light channel drawn as grey paint (`lightToShadow`: white with alpha =
|
|
9
|
+
* light). The twin uses the same engine, seed and points with the brush's light amount as its grey
|
|
10
|
+
* colour, in a normal blend and RGB mixing, so light is laid by exactly the stroke's coverage,
|
|
11
|
+
* plain paint over glowing paint dims it, erasers take it away, and smudges, blenders, the knife,
|
|
12
|
+
* the Mixer Brush and pick-up brushes move and pick up light as they move colour.
|
|
13
|
+
*
|
|
14
|
+
* Rendering: glow adds `light × colour × GLOW` (linear light) to the layer's own pixels; spill
|
|
15
|
+
* blurs `light × colour` outwards (at a reduced resolution) into its own layer drawn directly above
|
|
16
|
+
* with Linear Dodge (Add). Impasto rim (material B) brightens a bead's light where its surface
|
|
17
|
+
* turns away, and clarity (material A) lets the middle of a bead show the layers below.
|
|
18
|
+
*/
|
|
19
|
+
import { TiledSurface, type RasterRect } from '../raster/surface.cjs';
|
|
20
|
+
import { type PaintBrush } from './brushes.cjs';
|
|
21
|
+
import type { ThickChannels } from './thick.cjs';
|
|
22
|
+
/** How much brighter full light makes the paint itself (linear light). */
|
|
23
|
+
export declare const GLOW = 1.5;
|
|
24
|
+
/** A layer's spill: how far its light reaches (px; 0 turns spill off) and how strong it is (0..2). */
|
|
25
|
+
export interface LightSpill {
|
|
26
|
+
radius: number;
|
|
27
|
+
strength: number;
|
|
28
|
+
}
|
|
29
|
+
export declare const DEFAULT_LIGHT_SPILL: Readonly<LightSpill>;
|
|
30
|
+
/** Checks and fills a spill change; throws a sentence naming the bad field. */
|
|
31
|
+
export declare function normalizeLightSpill(raw: Partial<LightSpill>, base?: LightSpill): LightSpill;
|
|
32
|
+
export declare function emptyLight(): TiledSurface;
|
|
33
|
+
/** The light channel as grey paint for a stroke's twin: white, with alpha = light. */
|
|
34
|
+
export declare function lightToShadow(light: TiledSurface): TiledSurface;
|
|
35
|
+
/** A twin's grey paint back as light: grey × alpha. */
|
|
36
|
+
export declare function shadowToLight(shadow: TiledSurface): TiledSurface;
|
|
37
|
+
/** The brush a stroke's light twin paints with: the same marks, grey, normal blend, RGB mixing, no gradient. */
|
|
38
|
+
export declare function lightTwinBrush(brush: PaintBrush): PaintBrush;
|
|
39
|
+
/** Where a layer's light is (layer space) and its brightest value 0..255; `null` bounds when it has none. */
|
|
40
|
+
export declare function lightInfo(light: TiledSurface | undefined): {
|
|
41
|
+
bounds: RasterRect | null;
|
|
42
|
+
peak: number;
|
|
43
|
+
};
|
|
44
|
+
/** Light scaled by `k` (0..1), e.g. under a fill that covers it. */
|
|
45
|
+
export declare function scaleLight(light: TiledSurface, k: number): TiledSurface;
|
|
46
|
+
/**
|
|
47
|
+
* Light of a layer merged down onto the one below (both in the lower layer's space): the upper
|
|
48
|
+
* layer's light over the lower's, which shows through where the upper paint is transparent.
|
|
49
|
+
*/
|
|
50
|
+
export declare function mergeLight(lower: TiledSurface | undefined, upper: TiledSurface | undefined, upperColor: TiledSurface): TiledSurface | undefined;
|
|
51
|
+
/**
|
|
52
|
+
* Glow, rim and clarity over a layer's (lit) colour, tile by tile, cached by the identity of each
|
|
53
|
+
* tile's inputs. Tiles with no light and no clear thick paint are the colour tiles themselves.
|
|
54
|
+
*/
|
|
55
|
+
export declare class LightCache {
|
|
56
|
+
private readonly tiles;
|
|
57
|
+
glow(color: TiledSurface, light: TiledSurface | undefined, thick: ThickChannels | undefined): TiledSurface;
|
|
58
|
+
private spillCache;
|
|
59
|
+
/**
|
|
60
|
+
* The layer's spill (layer space, RGBA for Linear Dodge (Add)): `light × colour` blurred by
|
|
61
|
+
* `radius` px at a reduced resolution, times `strength`; `null` without light or spill.
|
|
62
|
+
*/
|
|
63
|
+
spill(color: TiledSurface, light: TiledSurface | undefined, spill: LightSpill): TiledSurface | null;
|
|
64
|
+
}
|
|
65
|
+
/** See `LightCache.spill`. */
|
|
66
|
+
export declare function computeSpill(color: TiledSurface, light: TiledSurface | undefined, spill: LightSpill): TiledSurface | null;
|
|
67
|
+
/** A layer's light as saved: its rect (layer space) and a grey PNG. */
|
|
68
|
+
export interface SavedLight {
|
|
69
|
+
rect: RasterRect;
|
|
70
|
+
light: string;
|
|
71
|
+
}
|
|
72
|
+
export declare function lightToJSON(light: TiledSurface): SavedLight | null;
|
|
73
|
+
/** Saved form → light channel; throws a sentence when it cannot be read. */
|
|
74
|
+
export declare function lightFromJSON(raw: unknown): TiledSurface;
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Light paint: a per-layer light channel (`doc.light`, one channel 0..255 per pixel, in layer
|
|
3
|
+
* space like the thick-paint channels) saying how much light the paint there gives off. The
|
|
4
|
+
* light's colour is the layer's own colour at that pixel, so recolouring the paint recolours its
|
|
5
|
+
* light.
|
|
6
|
+
*
|
|
7
|
+
* Laying and moving light: a stroke on a layer with light (or with a brush that lays it) runs a
|
|
8
|
+
* twin of itself over the light channel drawn as grey paint (`lightToShadow`: white with alpha =
|
|
9
|
+
* light). The twin uses the same engine, seed and points with the brush's light amount as its grey
|
|
10
|
+
* colour, in a normal blend and RGB mixing, so light is laid by exactly the stroke's coverage,
|
|
11
|
+
* plain paint over glowing paint dims it, erasers take it away, and smudges, blenders, the knife,
|
|
12
|
+
* the Mixer Brush and pick-up brushes move and pick up light as they move colour.
|
|
13
|
+
*
|
|
14
|
+
* Rendering: glow adds `light × colour × GLOW` (linear light) to the layer's own pixels; spill
|
|
15
|
+
* blurs `light × colour` outwards (at a reduced resolution) into its own layer drawn directly above
|
|
16
|
+
* with Linear Dodge (Add). Impasto rim (material B) brightens a bead's light where its surface
|
|
17
|
+
* turns away, and clarity (material A) lets the middle of a bead show the layers below.
|
|
18
|
+
*/
|
|
19
|
+
import { TiledSurface, type RasterRect } from '../raster/surface.js';
|
|
20
|
+
import { type PaintBrush } from './brushes.js';
|
|
21
|
+
import type { ThickChannels } from './thick.js';
|
|
22
|
+
/** How much brighter full light makes the paint itself (linear light). */
|
|
23
|
+
export declare const GLOW = 1.5;
|
|
24
|
+
/** A layer's spill: how far its light reaches (px; 0 turns spill off) and how strong it is (0..2). */
|
|
25
|
+
export interface LightSpill {
|
|
26
|
+
radius: number;
|
|
27
|
+
strength: number;
|
|
28
|
+
}
|
|
29
|
+
export declare const DEFAULT_LIGHT_SPILL: Readonly<LightSpill>;
|
|
30
|
+
/** Checks and fills a spill change; throws a sentence naming the bad field. */
|
|
31
|
+
export declare function normalizeLightSpill(raw: Partial<LightSpill>, base?: LightSpill): LightSpill;
|
|
32
|
+
export declare function emptyLight(): TiledSurface;
|
|
33
|
+
/** The light channel as grey paint for a stroke's twin: white, with alpha = light. */
|
|
34
|
+
export declare function lightToShadow(light: TiledSurface): TiledSurface;
|
|
35
|
+
/** A twin's grey paint back as light: grey × alpha. */
|
|
36
|
+
export declare function shadowToLight(shadow: TiledSurface): TiledSurface;
|
|
37
|
+
/** The brush a stroke's light twin paints with: the same marks, grey, normal blend, RGB mixing, no gradient. */
|
|
38
|
+
export declare function lightTwinBrush(brush: PaintBrush): PaintBrush;
|
|
39
|
+
/** Where a layer's light is (layer space) and its brightest value 0..255; `null` bounds when it has none. */
|
|
40
|
+
export declare function lightInfo(light: TiledSurface | undefined): {
|
|
41
|
+
bounds: RasterRect | null;
|
|
42
|
+
peak: number;
|
|
43
|
+
};
|
|
44
|
+
/** Light scaled by `k` (0..1), e.g. under a fill that covers it. */
|
|
45
|
+
export declare function scaleLight(light: TiledSurface, k: number): TiledSurface;
|
|
46
|
+
/**
|
|
47
|
+
* Light of a layer merged down onto the one below (both in the lower layer's space): the upper
|
|
48
|
+
* layer's light over the lower's, which shows through where the upper paint is transparent.
|
|
49
|
+
*/
|
|
50
|
+
export declare function mergeLight(lower: TiledSurface | undefined, upper: TiledSurface | undefined, upperColor: TiledSurface): TiledSurface | undefined;
|
|
51
|
+
/**
|
|
52
|
+
* Glow, rim and clarity over a layer's (lit) colour, tile by tile, cached by the identity of each
|
|
53
|
+
* tile's inputs. Tiles with no light and no clear thick paint are the colour tiles themselves.
|
|
54
|
+
*/
|
|
55
|
+
export declare class LightCache {
|
|
56
|
+
private readonly tiles;
|
|
57
|
+
glow(color: TiledSurface, light: TiledSurface | undefined, thick: ThickChannels | undefined): TiledSurface;
|
|
58
|
+
private spillCache;
|
|
59
|
+
/**
|
|
60
|
+
* The layer's spill (layer space, RGBA for Linear Dodge (Add)): `light × colour` blurred by
|
|
61
|
+
* `radius` px at a reduced resolution, times `strength`; `null` without light or spill.
|
|
62
|
+
*/
|
|
63
|
+
spill(color: TiledSurface, light: TiledSurface | undefined, spill: LightSpill): TiledSurface | null;
|
|
64
|
+
}
|
|
65
|
+
/** See `LightCache.spill`. */
|
|
66
|
+
export declare function computeSpill(color: TiledSurface, light: TiledSurface | undefined, spill: LightSpill): TiledSurface | null;
|
|
67
|
+
/** A layer's light as saved: its rect (layer space) and a grey PNG. */
|
|
68
|
+
export interface SavedLight {
|
|
69
|
+
rect: RasterRect;
|
|
70
|
+
light: string;
|
|
71
|
+
}
|
|
72
|
+
export declare function lightToJSON(light: TiledSurface): SavedLight | null;
|
|
73
|
+
/** Saved form → light channel; throws a sentence when it cannot be read. */
|
|
74
|
+
export declare function lightFromJSON(raw: unknown): TiledSurface;
|
|
@@ -85,6 +85,13 @@ export interface StrokeSessionInit {
|
|
|
85
85
|
source: PaintEffectPaint;
|
|
86
86
|
pixels: EffectPaintPixels;
|
|
87
87
|
} | null;
|
|
88
|
+
/**
|
|
89
|
+
* Light paint: the layer's light channel before the stroke. With it, a twin of the stroke paints
|
|
90
|
+
* the light channel as grey (see `light.ts`); `lightChannel()` returns the result.
|
|
91
|
+
*/
|
|
92
|
+
light?: {
|
|
93
|
+
surface: TiledSurface;
|
|
94
|
+
} | null;
|
|
88
95
|
}
|
|
89
96
|
export interface PaintStrokeResult {
|
|
90
97
|
layerId: string;
|
|
@@ -113,6 +120,9 @@ export declare class PaintStrokeSession {
|
|
|
113
120
|
private readonly wetDriver;
|
|
114
121
|
private readonly thickDriver;
|
|
115
122
|
private readonly stickerSpray;
|
|
123
|
+
/** Light paint: the stroke's twin over the light channel, and what it left there. */
|
|
124
|
+
private readonly lightTwin;
|
|
125
|
+
private lightResult;
|
|
116
126
|
/** A wet stroke that ended while the simulation was mid-batch: it commits when the driver catches up. */
|
|
117
127
|
private wetEndPending;
|
|
118
128
|
private readonly apply;
|
|
@@ -124,6 +134,10 @@ export declare class PaintStrokeSession {
|
|
|
124
134
|
/** The mask stencils this stroke was painted with when they are not the editor's (replays). */
|
|
125
135
|
maskStencils: readonly import('./stencils.cjs').Stencil[] | null;
|
|
126
136
|
constructor(host: StrokeSessionHost, init: StrokeSessionInit);
|
|
137
|
+
/** The stroke's twin over the light channel: the same marks in grey at the brush's light amount (see `light.ts`). */
|
|
138
|
+
private makeLightTwin;
|
|
139
|
+
/** Light paint: the layer's light channel after the stroke, or `null` when the stroke has no twin or left it unchanged. */
|
|
140
|
+
lightChannel(): TiledSurface | null;
|
|
127
141
|
private tileTarget;
|
|
128
142
|
get open(): boolean;
|
|
129
143
|
/** Adds raw pen samples (document pixels). */
|
|
@@ -85,6 +85,13 @@ export interface StrokeSessionInit {
|
|
|
85
85
|
source: PaintEffectPaint;
|
|
86
86
|
pixels: EffectPaintPixels;
|
|
87
87
|
} | null;
|
|
88
|
+
/**
|
|
89
|
+
* Light paint: the layer's light channel before the stroke. With it, a twin of the stroke paints
|
|
90
|
+
* the light channel as grey (see `light.ts`); `lightChannel()` returns the result.
|
|
91
|
+
*/
|
|
92
|
+
light?: {
|
|
93
|
+
surface: TiledSurface;
|
|
94
|
+
} | null;
|
|
88
95
|
}
|
|
89
96
|
export interface PaintStrokeResult {
|
|
90
97
|
layerId: string;
|
|
@@ -113,6 +120,9 @@ export declare class PaintStrokeSession {
|
|
|
113
120
|
private readonly wetDriver;
|
|
114
121
|
private readonly thickDriver;
|
|
115
122
|
private readonly stickerSpray;
|
|
123
|
+
/** Light paint: the stroke's twin over the light channel, and what it left there. */
|
|
124
|
+
private readonly lightTwin;
|
|
125
|
+
private lightResult;
|
|
116
126
|
/** A wet stroke that ended while the simulation was mid-batch: it commits when the driver catches up. */
|
|
117
127
|
private wetEndPending;
|
|
118
128
|
private readonly apply;
|
|
@@ -124,6 +134,10 @@ export declare class PaintStrokeSession {
|
|
|
124
134
|
/** The mask stencils this stroke was painted with when they are not the editor's (replays). */
|
|
125
135
|
maskStencils: readonly import('./stencils.js').Stencil[] | null;
|
|
126
136
|
constructor(host: StrokeSessionHost, init: StrokeSessionInit);
|
|
137
|
+
/** The stroke's twin over the light channel: the same marks in grey at the brush's light amount (see `light.ts`). */
|
|
138
|
+
private makeLightTwin;
|
|
139
|
+
/** Light paint: the layer's light channel after the stroke, or `null` when the stroke has no twin or left it unchanged. */
|
|
140
|
+
lightChannel(): TiledSurface | null;
|
|
127
141
|
private tileTarget;
|
|
128
142
|
get open(): boolean;
|
|
129
143
|
/** Adds raw pen samples (document pixels). */
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Agent tools for thick paint and light: impasto strokes are painted with `paint_stroke` and an
|
|
3
|
-
* impasto brush; these tools move the light, read and flatten a layer's relief,
|
|
4
|
-
* drying of wet strokes.
|
|
3
|
+
* impasto brush; these tools move the light, read and flatten a layer's relief, read, spill and
|
|
4
|
+
* clear light paint, and switch instant drying of wet strokes.
|
|
5
5
|
*/
|
|
6
6
|
import type { PaintAgentTool } from './hosted.cjs';
|
|
7
7
|
import type { PaintEditorController } from './controller.cjs';
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Agent tools for thick paint and light: impasto strokes are painted with `paint_stroke` and an
|
|
3
|
-
* impasto brush; these tools move the light, read and flatten a layer's relief,
|
|
4
|
-
* drying of wet strokes.
|
|
3
|
+
* impasto brush; these tools move the light, read and flatten a layer's relief, read, spill and
|
|
4
|
+
* clear light paint, and switch instant drying of wet strokes.
|
|
5
5
|
*/
|
|
6
6
|
import type { PaintAgentTool } from './hosted.js';
|
|
7
7
|
import type { PaintEditorController } from './controller.js';
|
|
@@ -34,7 +34,7 @@ export declare function normalizeLighting(raw?: Partial<PaintLighting>, base?: P
|
|
|
34
34
|
export interface ThickChannels {
|
|
35
35
|
/** Height 0..255 per pixel (1 channel). */
|
|
36
36
|
height: TiledSurface;
|
|
37
|
-
/** Material per pixel (4 channels): R gloss, G metallic, B
|
|
37
|
+
/** Material per pixel (4 channels): R gloss, G metallic, B rim (light paint), A opacity for clarity (255 solid; 0 no material, read as solid). */
|
|
38
38
|
material: TiledSurface;
|
|
39
39
|
}
|
|
40
40
|
export declare function emptyThickChannels(): ThickChannels;
|
|
@@ -100,6 +100,10 @@ export declare class ThickStrokeDriver {
|
|
|
100
100
|
private dab;
|
|
101
101
|
/** The knife: flattens the relief under it and carries some of it along (a patch, like a smudge). */
|
|
102
102
|
private knifeHeight;
|
|
103
|
+
/**
|
|
104
|
+
* Material: R gloss, G metallic, B rim (light paint, 0..255), A opacity for light paint's clarity
|
|
105
|
+
* (255 solid .. 1 clearest; 0 is no material, read as solid).
|
|
106
|
+
*/
|
|
103
107
|
private paintMaterial;
|
|
104
108
|
}
|
|
105
109
|
/** Height statistics of a layer's relief (for tools). */
|
|
@@ -34,7 +34,7 @@ export declare function normalizeLighting(raw?: Partial<PaintLighting>, base?: P
|
|
|
34
34
|
export interface ThickChannels {
|
|
35
35
|
/** Height 0..255 per pixel (1 channel). */
|
|
36
36
|
height: TiledSurface;
|
|
37
|
-
/** Material per pixel (4 channels): R gloss, G metallic, B
|
|
37
|
+
/** Material per pixel (4 channels): R gloss, G metallic, B rim (light paint), A opacity for clarity (255 solid; 0 no material, read as solid). */
|
|
38
38
|
material: TiledSurface;
|
|
39
39
|
}
|
|
40
40
|
export declare function emptyThickChannels(): ThickChannels;
|
|
@@ -100,6 +100,10 @@ export declare class ThickStrokeDriver {
|
|
|
100
100
|
private dab;
|
|
101
101
|
/** The knife: flattens the relief under it and carries some of it along (a patch, like a smudge). */
|
|
102
102
|
private knifeHeight;
|
|
103
|
+
/**
|
|
104
|
+
* Material: R gloss, G metallic, B rim (light paint, 0..255), A opacity for light paint's clarity
|
|
105
|
+
* (255 solid .. 1 clearest; 0 is no material, read as solid).
|
|
106
|
+
*/
|
|
103
107
|
private paintMaterial;
|
|
104
108
|
}
|
|
105
109
|
/** Height statistics of a layer's relief (for tools). */
|
|
@@ -193,6 +193,8 @@ export interface BrushEngineControls {
|
|
|
193
193
|
particleMenus?: boolean;
|
|
194
194
|
/** The sticker stamp toggles (`sticker.stamps`, `STAMP_KINDS`). */
|
|
195
195
|
stickerStamps?: boolean;
|
|
196
|
+
/** Light paint: the "light follows pressure" toggle (`light.pressure`); the Light slider is in `sliders`. */
|
|
197
|
+
light?: boolean;
|
|
196
198
|
}
|
|
197
199
|
/**
|
|
198
200
|
* The controls the active brush's engine adds to the brush panel (`null` for the eraser):
|
|
@@ -193,6 +193,8 @@ export interface BrushEngineControls {
|
|
|
193
193
|
particleMenus?: boolean;
|
|
194
194
|
/** The sticker stamp toggles (`sticker.stamps`, `STAMP_KINDS`). */
|
|
195
195
|
stickerStamps?: boolean;
|
|
196
|
+
/** Light paint: the "light follows pressure" toggle (`light.pressure`); the Light slider is in `sliders`. */
|
|
197
|
+
light?: boolean;
|
|
196
198
|
}
|
|
197
199
|
/**
|
|
198
200
|
* The controls the active brush's engine adds to the brush panel (`null` for the eraser):
|