@hology/core 0.0.122 → 0.0.123

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.
Files changed (34) hide show
  1. package/dist/gameplay/initiate.d.ts +3 -0
  2. package/dist/gameplay/initiate.d.ts.map +1 -1
  3. package/dist/gameplay/initiate.js +1 -1
  4. package/dist/gameplay/services/physics/physics-system.d.ts.map +1 -1
  5. package/dist/gameplay/services/physics/physics-system.js +1 -1
  6. package/dist/rendering/ssr/SSRPass.d.ts +199 -0
  7. package/dist/rendering/ssr/SSRPass.d.ts.map +1 -0
  8. package/dist/rendering/ssr/SSRPass.js +4 -0
  9. package/dist/rendering/ssr/SSRShader.d.ts +30 -0
  10. package/dist/rendering/ssr/SSRShader.d.ts.map +1 -0
  11. package/dist/rendering/ssr/SSRShader.js +4 -0
  12. package/dist/rendering.d.ts +4 -0
  13. package/dist/rendering.d.ts.map +1 -1
  14. package/dist/rendering.js +1 -1
  15. package/dist/scene/materializer.d.ts.map +1 -1
  16. package/dist/scene/materializer.js +1 -1
  17. package/dist/scene/model.d.ts +5 -2
  18. package/dist/scene/model.d.ts.map +1 -1
  19. package/dist/scene/model.js +1 -1
  20. package/dist/shader/builtin/layered-shader.d.ts +9 -0
  21. package/dist/shader/builtin/layered-shader.d.ts.map +1 -0
  22. package/dist/shader/builtin/layered-shader.js +4 -0
  23. package/dist/shader/color-layer.d.ts +177 -0
  24. package/dist/shader/color-layer.d.ts.map +1 -0
  25. package/dist/shader/color-layer.js +4 -0
  26. package/dist/shader/parameter.d.ts +2 -2
  27. package/dist/shader/parameter.d.ts.map +1 -1
  28. package/dist/shader-nodes/effects.d.ts.map +1 -1
  29. package/dist/shader-nodes/effects.js +1 -1
  30. package/dist/utils/three/traverse.d.ts +6 -0
  31. package/dist/utils/three/traverse.d.ts.map +1 -1
  32. package/dist/utils/three/traverse.js +1 -1
  33. package/package.json +2 -2
  34. package/tsconfig.tsbuildinfo +1 -1
@@ -0,0 +1,177 @@
1
+ import { Color, Texture, Vector2 } from "three";
2
+ import { FloatNode, RgbaNode } from 'three-shader-graph';
3
+ import { CustomParamValue, SerializedParamType } from "../scene/model";
4
+ export declare enum ColorLayerType {
5
+ solid = "solid",
6
+ refraction = "refraction",
7
+ lighting = "lighting",
8
+ texture = "texture",
9
+ textureMask = "textureMask",
10
+ vertexMask = "vertexMask",
11
+ fresnelMask = "fresnelMask",
12
+ depthMask = "depthMask",
13
+ gradientMask = "gradientMask"
14
+ }
15
+ export type ColorLayerSerialized = {
16
+ enabled: boolean;
17
+ type: ColorLayerType;
18
+ outputType: 'rgba' | 'alpha';
19
+ opacity: number;
20
+ blendMode: BlendMode;
21
+ params: Record<string, CustomParamValue>;
22
+ };
23
+ export declare const defaultValueColorLayer: {
24
+ enabled: true;
25
+ type: ColorLayerType.solid;
26
+ outputType: "rgba";
27
+ opacity: number;
28
+ blendMode: "normal";
29
+ params: {
30
+ color: {
31
+ type: SerializedParamType.Color;
32
+ value: string;
33
+ };
34
+ };
35
+ };
36
+ export declare const defaultValueMaskLayer: {
37
+ enabled: true;
38
+ type: ColorLayerType.textureMask;
39
+ outputType: "alpha";
40
+ opacity: number;
41
+ blendMode: "normal";
42
+ params: {
43
+ texture: {
44
+ type: SerializedParamType.Texture;
45
+ value: any;
46
+ };
47
+ channel: {
48
+ type: SerializedParamType.String;
49
+ value: string;
50
+ };
51
+ };
52
+ };
53
+ type LoadTextureFn = (assetId: string) => Promise<Texture>;
54
+ export declare const blendModes: BlendMode[];
55
+ export declare const maskBlendModes: MaskBlendMode[];
56
+ /**
57
+ * Maybe if each color layer subclass had Parameter support,
58
+ * this could be much easier.
59
+ */
60
+ export type ColorLayerOutputType = 'rgba' | 'float';
61
+ /**
62
+ * The ColorLayer is used to generate more complex shaders by using layers.
63
+ * Each layer may itself be composed of other layers like masks.
64
+ */
65
+ export declare class ColorLayer {
66
+ enabled: boolean;
67
+ opacity: number;
68
+ blendMode: BlendMode;
69
+ static get outputType(): ColorLayerOutputType;
70
+ layers: ColorLayer[];
71
+ apply(previous: RgbaNode): RgbaNode;
72
+ applyMask(previous: FloatNode): FloatNode;
73
+ init(params: ColorLayerSerialized['params'], loadTexture: LoadTextureFn): Promise<void>;
74
+ static decode(value: unknown, loadTextureFn: LoadTextureFn): Promise<ColorLayer>;
75
+ output(): RgbaNode | FloatNode;
76
+ }
77
+ export declare class SolidColorLayer extends ColorLayer {
78
+ color: Color;
79
+ layers: ColorLayer[];
80
+ output(): RgbaNode;
81
+ }
82
+ declare const spaceOptions: readonly ["uv", "world xz"];
83
+ export type SpaceOption = typeof spaceOptions[number];
84
+ export declare class TextureColorLayer extends ColorLayer {
85
+ texture: Texture;
86
+ scale: Vector2;
87
+ scroll: Vector2;
88
+ layers: ColorLayer[];
89
+ output(): RgbaNode;
90
+ }
91
+ export declare class RefractionColorLayer extends ColorLayer {
92
+ texture: Texture;
93
+ layers: ColorLayer[];
94
+ output(): RgbaNode;
95
+ }
96
+ export declare class LightingColorLayer extends ColorLayer {
97
+ roughness?: number;
98
+ roughnessMap?: Texture;
99
+ metalness?: number;
100
+ metalnessMap?: Texture;
101
+ aoMap?: Texture;
102
+ aoMapIntensity?: number;
103
+ normalMap?: Texture;
104
+ normalScale?: FloatNode;
105
+ /**
106
+ * Using layers can be more useful for normals so that
107
+ * you can layer different normal maps on top of each other.
108
+ * This is useful for something like water.
109
+ *
110
+ * Ideally, by using a texturecolorlayer parameter,
111
+ * you will only be able to select a texture. Using something like a
112
+ * solid color or something else would be confusing.
113
+ */
114
+ apply(previous: RgbaNode): RgbaNode;
115
+ }
116
+ export declare class MaskLayer extends ColorLayer {
117
+ static get outputType(): ColorLayerOutputType;
118
+ power: number;
119
+ invert: boolean;
120
+ output(): FloatNode;
121
+ protected outputAlpha(): FloatNode;
122
+ }
123
+ declare const channelOptions: readonly ["red", "green", "blue", "alpha"];
124
+ export type ChannelOption = typeof channelOptions[number];
125
+ export declare class TextureMaskLayer extends MaskLayer {
126
+ texture: Texture;
127
+ channel: ChannelOption;
128
+ space: SpaceOption;
129
+ flipU: boolean;
130
+ flipV: boolean;
131
+ scale: Vector2;
132
+ scroll: Vector2;
133
+ /**
134
+ * Offset layers can be used to create even more interesting sampling.
135
+ * The offset layers can be used in addition to scrolling.
136
+ */
137
+ offsetLayers: MaskLayer[];
138
+ /**
139
+ * Offset is used together with layers to offset in a specific direction.
140
+ */
141
+ offset: Vector2;
142
+ power: number;
143
+ invert: boolean;
144
+ layers: MaskLayer[];
145
+ outputAlpha(): FloatNode;
146
+ }
147
+ export declare class VertexMaskLayer extends MaskLayer {
148
+ channel: ChannelOption;
149
+ power: number;
150
+ invert: boolean;
151
+ layers: MaskLayer[];
152
+ outputAlpha(): FloatNode;
153
+ }
154
+ declare const gradientDirections: readonly ["u", "v", "x", "y", "z"];
155
+ export type GradientDirection = typeof gradientDirections[number];
156
+ export declare class GradientMaskLayer extends MaskLayer {
157
+ direction: GradientDirection;
158
+ start: number;
159
+ end: number;
160
+ invert: boolean;
161
+ layers: MaskLayer[];
162
+ outputAlpha(): FloatNode;
163
+ }
164
+ export declare class FresnelMaskLayer extends MaskLayer {
165
+ power: number;
166
+ invert: boolean;
167
+ layers: MaskLayer[];
168
+ outputAlpha(): FloatNode;
169
+ }
170
+ export declare class DepthMaskLayer extends MaskLayer {
171
+ power: number;
172
+ invert: boolean;
173
+ layers: MaskLayer[];
174
+ outputAlpha(): FloatNode;
175
+ }
176
+ export {};
177
+ //# sourceMappingURL=color-layer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"color-layer.d.ts","sourceRoot":"","sources":["../../src/shader/color-layer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import{__decorate as e,__metadata as t}from"tslib";import{Color as r,Texture as o,Vector2 as a}from"three";import{abs as s,attributes as l,float as p,FloatNode as i,max as y,min as n,mix as u,pow as d,rgba as c,SimplexNoiseNode as h,standardMaterial as L,step as g,textureSampler2d as M,varying as m,varyingAttributes as v,vec2 as x,colorToNormal as k,varyingTransformed as f}from"three-shader-graph";import{edgeDepthEffect as C,fresnelEffect as b,oneMinus as T,sceneColorSampler as w,screenUV as S,timeUniforms as A}from"../shader-nodes";import{SerializedParamType as V}from"../scene/model";import{Parameter as F}from"../gameplay";export var ColorLayerType;!function(e){e.solid="solid",e.refraction="refraction",e.lighting="lighting",e.texture="texture",e.textureMask="textureMask",e.vertexMask="vertexMask",e.fresnelMask="fresnelMask",e.depthMask="depthMask",e.gradientMask="gradientMask"}(ColorLayerType||(ColorLayerType={}));export const defaultValueColorLayer={enabled:!0,type:ColorLayerType.solid,outputType:"rgba",opacity:1,blendMode:"normal",params:{color:{type:V.Color,value:"#FFFFFF"}}};export const defaultValueMaskLayer={enabled:!0,type:ColorLayerType.textureMask,outputType:"alpha",opacity:1,blendMode:"normal",params:{texture:{type:V.Texture,value:null},channel:{type:V.String,value:"red"}}};const N={normal:(e,t,r)=>u(e,t,r),add:(e,t,r)=>e.add(t.multiplyScalar(r)),multiply:(e,t,r)=>u(e,e.multiply(t),r),screen:(e,t,r)=>u(e,T(T(e).multiply(T(t))),r),overlay:(e,t,r)=>{const o=u(e.multiply(t).multiplyScalar(2),T(p(2).multiplyVec3(T(e)).multiply(T(t))),g(.5,e));return u(e,o.rgb,r)},difference:(e,t,r)=>u(e,s(e.subtract(t)),r),subtract:(e,t,r)=>u(e,e.subtract(t),r)};export const blendModes=Object.keys(N);const z={normal:(e,t,r)=>u(e,t,r),add:(e,t,r)=>e.add(t.multiply(r)),multiply:(e,t,r)=>u(e,e.multiply(t),r),max:(e,t,r)=>u(e,y(e,t),r),min:(e,t,r)=>u(e,n(e,t),r),difference:(e,t,r)=>u(e,s(e.subtract(t)),r),subtract:(e,t,r)=>u(e,e.subtract(t),r)};export const maskBlendModes=Object.keys(z);export class ColorLayer{constructor(){this.layers=[]}static get outputType(){return"rgba"}apply(e){const t=this.output();if(t instanceof i)return c(e.rgb,this.applyMask(e.a));{let a=t;if(null!=this.layers&&(a=this.layers.filter((e=>!1!==e.enabled)).reduce(((e,t)=>t.apply(e)),t)),null==e)return a;const s=N[this.blendMode]??N.normal,l=a.a.multiply(this.opacity),p=s(e.rgb,a.rgb,l);let i=(r=e.a,(o=l).add(r.multiply(T(o))));return c(p,i)}var r,o}applyMask(e){const t=this.output();if(t instanceof i){let r=t;null!=this.layers&&(r=this.layers.filter((e=>!1!==e.enabled)).reduce(((e,t)=>t.applyMask(e)),t));return(z[this.blendMode]??N.normal)(e,r,this.opacity)}return console.error("Can not use non-float layer for mask"),e}init(e,t){}static async decode(e,t){if(console.log("Decode value",e),!isColorLayerSerialized(e))return;const r=new layerTypes[e.type];return r.enabled=e.enabled,r.opacity=e.opacity??1,r.blendMode=e.blendMode,r}output(){return c("white")}}e([F({type:ColorLayer,array:!0}),t("design:type",Array)],ColorLayer.prototype,"layers",void 0);export class SolidColorLayer extends ColorLayer{constructor(){super(...arguments),this.color=new r("white"),this.layers=[]}output(){return c(this.color).multiplyScalar(1.3)}}e([F(),t("design:type",r)],SolidColorLayer.prototype,"color",void 0),e([F({type:ColorLayer,array:!0}),t("design:type",Array)],SolidColorLayer.prototype,"layers",void 0);export class TextureColorLayer extends ColorLayer{constructor(){super(...arguments),this.texture=new o,this.scale=new a(1,1),this.scroll=new a(0,0),this.layers=[]}output(){let e=v.uv;return null!=this.scroll&&this.scroll.lengthSq()>0&&(e=e.add(x(this.scroll).multiplyScalar(A.elapsed))),e=e.multiply(x(this.scale??1)),M(this.texture).sample(e)}}e([F(),t("design:type",o)],TextureColorLayer.prototype,"texture",void 0),e([F(),t("design:type",a)],TextureColorLayer.prototype,"scale",void 0),e([F(),t("design:type",a)],TextureColorLayer.prototype,"scroll",void 0),e([F({type:ColorLayer,array:!0}),t("design:type",Array)],TextureColorLayer.prototype,"layers",void 0);export class RefractionColorLayer extends ColorLayer{constructor(){super(...arguments),this.texture=new o,this.layers=[]}output(){return w.sample(S.addScalar(new h(v.uv).multiply(.2)))}}e([F(),t("design:type",o)],RefractionColorLayer.prototype,"texture",void 0),e([F({type:ColorLayer,array:!0}),t("design:type",Array)],RefractionColorLayer.prototype,"layers",void 0);export class LightingColorLayer extends ColorLayer{constructor(){super(...arguments),this.roughness=1,this.metalness=0}apply(e){const t=v.uv;let r=p(this.roughness);null!=this.roughnessMap&&(r=r.multiply(M(this.roughnessMap).sample(t).g));let o=p(this.metalness);null!=this.metalnessMap&&(o=o.multiply(M(this.metalnessMap).sample(t).b));let a=f.normal;null!=this.normalMap&&(a=k(M(this.normalMap).sample(t),this.normalScale));let s=null;return null!=this.aoMap&&(s=M(this.aoMap).sample(t).r),L({color:e,metalness:o,roughness:r,normal:a})}}e([F({range:[0,1]}),t("design:type",Number)],LightingColorLayer.prototype,"roughness",void 0),e([F(),t("design:type",o)],LightingColorLayer.prototype,"roughnessMap",void 0),e([F({range:[0,1]}),t("design:type",Number)],LightingColorLayer.prototype,"metalness",void 0),e([F(),t("design:type",o)],LightingColorLayer.prototype,"metalnessMap",void 0),e([F(),t("design:type",o)],LightingColorLayer.prototype,"aoMap",void 0),e([F(),t("design:type",Number)],LightingColorLayer.prototype,"aoMapIntensity",void 0),e([F(),t("design:type",o)],LightingColorLayer.prototype,"normalMap",void 0),e([F(),t("design:type",i)],LightingColorLayer.prototype,"normalScale",void 0);export class MaskLayer extends ColorLayer{constructor(){super(...arguments),this.power=1,this.invert=!1}static get outputType(){return"float"}output(){let e=this.outputAlpha();return this.invert&&(e=T(e)),null!=this.power&&1!==this.power&&(e=d(e,this.power)),e}outputAlpha(){throw"not implemented"}}const B=["red","green","blue","alpha"];export class TextureMaskLayer extends MaskLayer{constructor(){super(...arguments),this.texture=new o,this.channel="red",this.space="uv",this.flipU=!1,this.flipV=!1,this.scale=new a(1,1),this.scroll=new a(0,0),this.offsetLayers=[],this.offset=new a(1,0),this.power=1,this.invert=!1,this.layers=[]}outputAlpha(){let e=v.uv;switch(this.space??"uv"){case"uv":e=v.uv;break;case"world xz":e=f.worldPosition.xz}if(this.flipU&&(e=x(T(e.x),e.y)),this.flipV&&(e=x(e.x,T(e.y))),null!=this.scroll&&this.scroll.lengthSq()>0&&(e=e.add(x(this.scroll).multiplyScalar(A.elapsed))),null!=this.offsetLayers&&this.offsetLayers.length>0&&null!=this.offset&&this.offset.lengthSq()>0){const t=this.offsetLayers.reduce(((e,t)=>t.applyMask(e)),p(0));e=e.add(x(this.offset).multiplyScalar(t))}e=e.multiply(x(this.scale??1));return G(M(this.texture).sample(e),this.channel)}}e([F(),t("design:type",o)],TextureMaskLayer.prototype,"texture",void 0),e([F({options:B.map((e=>({name:e,value:e})))}),t("design:type",String)],TextureMaskLayer.prototype,"channel",void 0),e([F({options:["uv","world xz"].map((e=>({name:e,value:e})))}),t("design:type",String)],TextureMaskLayer.prototype,"space",void 0),e([F(),t("design:type",Boolean)],TextureMaskLayer.prototype,"flipU",void 0),e([F(),t("design:type",Boolean)],TextureMaskLayer.prototype,"flipV",void 0),e([F(),t("design:type",a)],TextureMaskLayer.prototype,"scale",void 0),e([F(),t("design:type",a)],TextureMaskLayer.prototype,"scroll",void 0),e([F({type:MaskLayer,array:!0}),t("design:type",Array)],TextureMaskLayer.prototype,"offsetLayers",void 0),e([F(),t("design:type",a)],TextureMaskLayer.prototype,"offset",void 0),e([F(),t("design:type",Number)],TextureMaskLayer.prototype,"power",void 0),e([F(),t("design:type",Boolean)],TextureMaskLayer.prototype,"invert",void 0),e([F({type:MaskLayer,array:!0}),t("design:type",Array)],TextureMaskLayer.prototype,"layers",void 0);export class VertexMaskLayer extends MaskLayer{constructor(){super(...arguments),this.channel="red",this.power=1,this.invert=!1,this.layers=[]}outputAlpha(){const e=l.color;return m(G(e,this.channel))}}function G(e,t){switch(t??"red"){case"red":return e.r;case"green":return e.g;case"blue":return e.b;case"alpha":return e.a}}e([F({options:B.map((e=>({name:e,value:e})))}),t("design:type",String)],VertexMaskLayer.prototype,"channel",void 0),e([F(),t("design:type",Number)],VertexMaskLayer.prototype,"power",void 0),e([F(),t("design:type",Boolean)],VertexMaskLayer.prototype,"invert",void 0),e([F({type:MaskLayer,array:!0}),t("design:type",Array)],VertexMaskLayer.prototype,"layers",void 0);export class GradientMaskLayer extends MaskLayer{constructor(){super(...arguments),this.direction="u",this.start=0,this.end=1,this.invert=!1,this.layers=[]}outputAlpha(){return u(p(this.start),p(this.end),function(e){switch(e??"u"){case"u":return v.uv.x;case"v":return v.uv.y;case"x":return v.position.x;case"y":return v.position.y;case"z":return v.position.z}}(this.direction))}}e([F({options:["u","v","x","y","z"].map((e=>({name:e,value:e})))}),t("design:type",String)],GradientMaskLayer.prototype,"direction",void 0),e([F(),t("design:type",Number)],GradientMaskLayer.prototype,"start",void 0),e([F(),t("design:type",Number)],GradientMaskLayer.prototype,"end",void 0),e([F(),t("design:type",Boolean)],GradientMaskLayer.prototype,"invert",void 0),e([F({type:MaskLayer,array:!0}),t("design:type",Array)],GradientMaskLayer.prototype,"layers",void 0);export class FresnelMaskLayer extends MaskLayer{constructor(){super(...arguments),this.power=1,this.invert=!1,this.layers=[]}outputAlpha(){return m(b(1))}}e([F(),t("design:type",Number)],FresnelMaskLayer.prototype,"power",void 0),e([F(),t("design:type",Boolean)],FresnelMaskLayer.prototype,"invert",void 0),e([F({type:MaskLayer,array:!0}),t("design:type",Array)],FresnelMaskLayer.prototype,"layers",void 0);export class DepthMaskLayer extends MaskLayer{constructor(){super(...arguments),this.power=1,this.invert=!1,this.layers=[]}outputAlpha(){return C(1)}}e([F(),t("design:type",Number)],DepthMaskLayer.prototype,"power",void 0),e([F(),t("design:type",Boolean)],DepthMaskLayer.prototype,"invert",void 0),e([F({type:MaskLayer,array:!0}),t("design:type",Array)],DepthMaskLayer.prototype,"layers",void 0);export function isColorLayerSerialized(e){return"object"==typeof e&&null!==e&&"boolean"==typeof e.enabled&&"string"==typeof e.type&&e.outputType&&("object"==typeof e.params||void 0===e.params)}export const layerTypes={[ColorLayerType.solid]:SolidColorLayer,[ColorLayerType.texture]:TextureColorLayer,[ColorLayerType.refraction]:RefractionColorLayer,[ColorLayerType.lighting]:LightingColorLayer,[ColorLayerType.textureMask]:TextureMaskLayer,[ColorLayerType.vertexMask]:VertexMaskLayer,[ColorLayerType.fresnelMask]:FresnelMaskLayer,[ColorLayerType.depthMask]:DepthMaskLayer,[ColorLayerType.gradientMask]:GradientMaskLayer};/*
2
+ * Copyright (©) 2025 Hology Interactive AB. All rights reserved.
3
+ * See the LICENSE.md file for details.
4
+ */
@@ -5,7 +5,8 @@ import { Color, Euler, Material, Object3D, Texture, Vector2, Vector3, Vector4 }
5
5
  import { BooleanNode, FloatNode, RgbNode, Sampler2DNode, Vec2Node, Vec3Node, Vec4Node } from '../shader-nodes/index.js';
6
6
  import { VisualEffect } from '../effects/vfx/vfx-param.js';
7
7
  import { Curve2 } from '../utils/curve.js';
8
- export type ParameterType = Type<FloatNode | Number | Texture | Sampler2DNode | Boolean | BooleanNode | Vector2 | Vec2Node | Vector3 | Vec3Node | Vector4 | Vec4Node | Color | RgbNode | String | BaseActor | Euler | Object3D | Material | VisualEffect | Curve2>;
8
+ import { ColorLayer, MaskLayer } from './color-layer.js';
9
+ export type ParameterType = Type<FloatNode | Number | Texture | Sampler2DNode | Boolean | BooleanNode | Vector2 | Vec2Node | Vector3 | Vec3Node | Vector4 | Vec4Node | Color | RgbNode | String | BaseActor | Euler | Object3D | Material | VisualEffect | Curve2 | ColorLayer | MaskLayer>;
9
10
  export type ParameterOption<T> = {
10
11
  name: string;
11
12
  value: T;
@@ -24,6 +25,5 @@ export interface PropertyParameter {
24
25
  options: ParameterOptions;
25
26
  }
26
27
  export declare function Parameter(options?: ParameterOptions): (target: Object, propertyName: string | symbol, index?: unknown) => void;
27
- export declare function extractShaderParameters(shaderType: Type<any>): PropertyParameter[];
28
28
  export declare function ParameterCategory(name: string): void;
29
29
  //# sourceMappingURL=parameter.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"parameter.d.ts","sourceRoot":"","sources":["../../src/shader/parameter.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAA;AAEzB,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAA;AACvC,OAAO,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AACxD,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAC7F,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAExH,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAE3C,MAAM,MAAM,aAAa,GAAG,IAAI,CAC9B,SAAS,GACT,MAAM,GACN,OAAO,GACP,aAAa,GACb,OAAO,GACP,WAAW,GACX,OAAO,GACP,QAAQ,GACR,OAAO,GACP,QAAQ,GACR,OAAO,GACP,QAAQ,GACR,KAAK,GACL,OAAO,GACP,MAAM,GACN,SAAS,GACT,KAAK,GACL,QAAQ,GACR,QAAQ,GACR,YAAY,GACZ,MAAM,CAAC,CAAA;AAOT,MAAM,MAAM,eAAe,CAAC,CAAC,IAAI;IAC/B,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,CAAC,CAAA;CACT,CAAA;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACxB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,IAAI,CAAC,EAAE,aAAa,CAAA;IACpB,OAAO,CAAC,EAAE,eAAe,CAAC,OAAO,CAAC,EAAE,CAAA;IACpC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAKD,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,aAAa,CAAA;IACnB,OAAO,EAAE,gBAAgB,CAAA;CAC1B;AAsBD,wBAAgB,SAAS,CAAC,OAAO,CAAC,EAAE,gBAAgB,IACjC,QAAQ,MAAM,EAAE,cAAc,MAAM,GAAG,MAAM,EAAE,QAAQ,OAAO,KAAG,IAAI,CAevF;AAYD,wBAAgB,uBAAuB,CAAC,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,iBAAiB,EAAE,CAyBlF;AAID,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,QAK7C"}
1
+ {"version":3,"file":"parameter.d.ts","sourceRoot":"","sources":["../../src/shader/parameter.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAA;AAEzB,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAA;AACvC,OAAO,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AACxD,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAC7F,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAExH,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAEzD,MAAM,MAAM,aAAa,GAAG,IAAI,CAC9B,SAAS,GACT,MAAM,GACN,OAAO,GACP,aAAa,GACb,OAAO,GACP,WAAW,GACX,OAAO,GACP,QAAQ,GACR,OAAO,GACP,QAAQ,GACR,OAAO,GACP,QAAQ,GACR,KAAK,GACL,OAAO,GACP,MAAM,GACN,SAAS,GACT,KAAK,GACL,QAAQ,GACR,QAAQ,GACR,YAAY,GACZ,MAAM,GACN,UAAU,GACV,SAAS,CAAC,CAAA;AAOZ,MAAM,MAAM,eAAe,CAAC,CAAC,IAAI;IAC/B,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,CAAC,CAAA;CACT,CAAA;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACxB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,IAAI,CAAC,EAAE,aAAa,CAAA;IACpB,OAAO,CAAC,EAAE,eAAe,CAAC,OAAO,CAAC,EAAE,CAAA;IACpC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAKD,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,aAAa,CAAA;IACnB,OAAO,EAAE,gBAAgB,CAAA;CAC1B;AAsBD,wBAAgB,SAAS,CAAC,OAAO,CAAC,EAAE,gBAAgB,IACjC,QAAQ,MAAM,EAAE,cAAc,MAAM,GAAG,MAAM,EAAE,QAAQ,OAAO,KAAG,IAAI,CAevF;AA0CD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,QAK7C"}
@@ -1 +1 @@
1
- {"version":3,"file":"effects.d.ts","sourceRoot":"","sources":["../../src/shader-nodes/effects.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAsK,MAAM,oBAAoB,CAAC;AAQnN,wBAAgB,aAAa,CAAC,KAAK,GAAE,MAAM,GAAC,SAAa,aAIxD;AAeD;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,KAAK,GAAE,MAAM,GAAC,SAAa,aAE1D"}
1
+ {"version":3,"file":"effects.d.ts","sourceRoot":"","sources":["../../src/shader-nodes/effects.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAkL,MAAM,oBAAoB,CAAC;AAQ/N,wBAAgB,aAAa,CAAC,KAAK,GAAE,MAAM,GAAC,SAAa,aASxD;AAeD;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,KAAK,GAAE,MAAM,GAAC,SAAa,aAE1D"}
@@ -1,4 +1,4 @@
1
- import{Vec3ExpressionNode as t,attributes as r,dot as e,float as o,normalize as i,pow as f,saturate as m,transformed as n,uniforms as p,varyingAttributes as c,varyingVec3 as s,vec4 as a}from"three-shader-graph";import{fragmentLinearEyeDepth as u,linearEyeDepth as d}from"./depth.js";import{oneMinus as h}from"./math.js";p.modelMatrix.multiplyVec(a(r.position,1));export function fresnelEffect(t=1){return f(h(m(e(n.viewDir,n.normal))),o(t))}const l=o(1).subtract(d.subtract(u).divide(d));export function edgeDepthEffect(t=1){return f(l,o(t))}/*
1
+ import{Vec3ExpressionNode as t,attributes as r,dot as e,float as o,ifDefApply as i,normalize as m,pow as n,saturate as p,transformed as a,uniforms as c,varyingAttributes as f,varyingVec3 as l,vec4 as s}from"three-shader-graph";import{fragmentLinearEyeDepth as u,linearEyeDepth as d}from"./depth.js";import{oneMinus as h}from"./math.js";c.modelMatrix.multiplyVec(s(r.position,1));export function fresnelEffect(t=1){const r=i("FLIP_SIDED",a.normal,(()=>a.normal.multiplyScalar(-1)));return n(h(p(e(a.viewDir,r))),o(t))}const D=o(1).subtract(d.subtract(u).divide(d));export function edgeDepthEffect(t=1){return n(D,o(t))}/*
2
2
  * Copyright (©) 2025 Hology Interactive AB. All rights reserved.
3
3
  * See the LICENSE.md file for details.
4
4
  */
@@ -11,5 +11,11 @@ export declare function filterChildrenShallow<C extends {
11
11
  children?: C[];
12
12
  }, T extends C = C>(scene: T, predicate: ObjectPredicate<C>, traversePredicate?: ObjectPredicate<C>): C[];
13
13
  export declare function calculateEffectiveScale(obj: Object3D): Vector3;
14
+ /**
15
+ * Traverse an objects children but stop traversal
16
+ * by returning false. This is useful to avoid processing
17
+ * objects that you know are not relevant.
18
+ */
19
+ export declare function traverseVisibleStop(object: Object3D, fn: (o: Object3D) => false | void | undefined): any;
14
20
  export {};
15
21
  //# sourceMappingURL=traverse.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"traverse.d.ts","sourceRoot":"","sources":["../../../src/utils/three/traverse.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAS,OAAO,EAAE,MAAM,OAAO,CAAC;AAGjD,KAAK,eAAe,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,KAAK,OAAO,CAAA;AAE7C,wBAAgB,WAAW,CAAC,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,eAAe,CAAC,QAAQ,CAAC,gDAShF;AAGD,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,eAAe,CAAC,QAAQ,CAAC,GAAG,QAAQ,CAatG;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,eAAe,CAAC,QAAQ,CAAC,EAAE,iBAAiB,CAAC,EAAE,eAAe,CAAC,QAAQ,CAAC,GAAG,QAAQ,EAAE,CAEnJ;AAGD,wBAAgB,qBAAqB,CAAC,CAAC,SAAS;IAAE,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAA;CAAE,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,SAAS,EAAE,eAAe,CAAC,CAAC,CAAC,EAAE,iBAAiB,CAAC,EAAE,eAAe,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAczK;AAID,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,QAAQ,WAMpD"}
1
+ {"version":3,"file":"traverse.d.ts","sourceRoot":"","sources":["../../../src/utils/three/traverse.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAS,OAAO,EAAE,MAAM,OAAO,CAAC;AAGjD,KAAK,eAAe,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,KAAK,OAAO,CAAA;AAE7C,wBAAgB,WAAW,CAAC,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,eAAe,CAAC,QAAQ,CAAC,gDAShF;AAGD,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,eAAe,CAAC,QAAQ,CAAC,GAAG,QAAQ,CAatG;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,eAAe,CAAC,QAAQ,CAAC,EAAE,iBAAiB,CAAC,EAAE,eAAe,CAAC,QAAQ,CAAC,GAAG,QAAQ,EAAE,CAEnJ;AAGD,wBAAgB,qBAAqB,CAAC,CAAC,SAAS;IAAE,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAA;CAAE,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,SAAS,EAAE,eAAe,CAAC,CAAC,CAAC,EAAE,iBAAiB,CAAC,EAAE,eAAe,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAczK;AAID,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,QAAQ,WAMpD;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,QAAQ,KAAK,KAAK,GAAC,IAAI,GAAC,SAAS,OAW9F"}
@@ -1,4 +1,4 @@
1
- import{Scene as e,Vector3 as n}from"three";export function filterScene(e,n){const t=[];return e.traverse((e=>{n(e)&&t.push(e)})),t}export function findFirstVisibleObject(e,n){const t=[e];for(;t.length>0;){const e=t.pop();if(n(e))return e;e.visible&&null!=e.children&&t.push(...e.children)}return null}export function filterSceneShallow(e,n,t){return filterChildrenShallow(e,n,t)}export function filterChildrenShallow(n,t,r){const l=[],o=[n];for(;o.length>0;){const n=o.pop();t(n)?l.push(n):(null==r||r(n)||n instanceof e)&&null!=n.children&&o.push(...n.children)}return l}const t=new n;export function calculateEffectiveScale(e){return t.copy(e.scale),e.traverseAncestors((e=>{t.multiply(e.scale)})),t}/*
1
+ import{Scene as e,Vector3 as n}from"three";export function filterScene(e,n){const t=[];return e.traverse((e=>{n(e)&&t.push(e)})),t}export function findFirstVisibleObject(e,n){const t=[e];for(;t.length>0;){const e=t.pop();if(n(e))return e;e.visible&&null!=e.children&&t.push(...e.children)}return null}export function filterSceneShallow(e,n,t){return filterChildrenShallow(e,n,t)}export function filterChildrenShallow(n,t,r){const l=[],o=[n];for(;o.length>0;){const n=o.pop();t(n)?l.push(n):(null==r||r(n)||n instanceof e)&&null!=n.children&&o.push(...n.children)}return l}const t=new n;export function calculateEffectiveScale(e){return t.copy(e.scale),e.traverseAncestors((e=>{t.multiply(e.scale)})),t}export function traverseVisibleStop(e,n){const t=[e];for(;t.length>0;){const e=t.pop();e.visible&&!1!==n(e)&&null!=e.children&&t.push(...e.children)}return null}/*
2
2
  * Copyright (©) 2025 Hology Interactive AB. All rights reserved.
3
3
  * See the LICENSE.md file for details.
4
4
  */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hology/core",
3
- "version": "0.0.122",
3
+ "version": "0.0.123",
4
4
  "description": "",
5
5
  "main": "dist/index.js",
6
6
  "type": "module",
@@ -168,7 +168,7 @@
168
168
  "dependencies": {
169
169
  "@babel/runtime": "^7.24.8",
170
170
  "@dimforge/rapier3d-compat": "^0.14.0",
171
- "@hology/nebula": "^0.0.122",
171
+ "@hology/nebula": "^0.0.123",
172
172
  "@plumier/reflect": "^1.1.0",
173
173
  "@recast-navigation/three": "^0.35.2",
174
174
  "recast-navigation": "^0.35.2",