From 1d67704c0b1989ede00932f3da1b3754fc0fe5d5 Mon Sep 17 00:00:00 2001 From: Jonathan Stone Date: Tue, 16 May 2023 13:29:45 -0700 Subject: [PATCH 01/42] Define default color transforms as graphs (#1352) This changelist updates the definitions of the default color transforms from raw shader code to MaterialX graphs, removing the need for explicit code for each transform to be provided in each supported language. Further in the future, this approach could enable direct communication of color transform graphs from OpenColorIO to MaterialX, allowing both standard ACES transforms and custom transforms to be communicated in a unified way. --- libraries/README.md | 17 +- libraries/cmlib/cmlib_defs.mtlx | 90 ++++++ libraries/cmlib/cmlib_ng.mtlx | 297 ++++++++++++++++++ .../genglsl/lib/mx_transform_color.glsl | 17 - .../mx_adobergb_to_lin_rec709_color3.glsl | 7 - .../mx_adobergb_to_lin_rec709_color4.glsl | 7 - .../genglsl/mx_ap1_to_rec709_color3.glsl | 6 - .../genglsl/mx_ap1_to_rec709_color4.glsl | 6 - .../mx_g22_ap1_to_lin_rec709_color3.glsl | 6 - .../mx_g22_ap1_to_lin_rec709_color4.glsl | 6 - .../genglsl/mx_gamma18_to_linear_color3.glsl | 4 - .../genglsl/mx_gamma18_to_linear_color4.glsl | 5 - .../genglsl/mx_gamma22_to_linear_color3.glsl | 4 - .../genglsl/mx_gamma22_to_linear_color4.glsl | 5 - .../genglsl/mx_gamma24_to_linear_color3.glsl | 4 - .../genglsl/mx_gamma24_to_linear_color4.glsl | 5 - .../mx_lin_adobergb_to_lin_rec709_color3.glsl | 6 - .../mx_lin_adobergb_to_lin_rec709_color4.glsl | 6 - .../mx_srgb_texture_to_lin_rec709_color3.glsl | 6 - .../mx_srgb_texture_to_lin_rec709_color4.glsl | 6 - .../genglsl/stdlib_genglsl_cm_impl.mtlx | 29 -- .../stdlib/genmdl/stdlib_genmdl_cm_impl.mtlx | 29 -- .../stdlib/genmsl/stdlib_genmsl_cm_impl.mtlx | 29 -- .../stdlib/genosl/lib/mx_transform_color.osl | 22 -- .../mx_adobergb_to_lin_rec709_color3.osl | 7 - .../mx_adobergb_to_lin_rec709_color4.osl | 7 - .../stdlib/genosl/mx_ap1_to_rec709_color3.osl | 7 - .../stdlib/genosl/mx_ap1_to_rec709_color4.osl | 7 - .../mx_g22_ap1_to_lin_rec709_color3.osl | 8 - .../mx_g22_ap1_to_lin_rec709_color4.osl | 8 - .../genosl/mx_gamma18_to_linear_color3.osl | 5 - .../genosl/mx_gamma18_to_linear_color4.osl | 5 - .../genosl/mx_gamma22_to_linear_color3.osl | 5 - .../genosl/mx_gamma22_to_linear_color4.osl | 5 - .../genosl/mx_gamma24_to_linear_color3.osl | 5 - .../genosl/mx_gamma24_to_linear_color4.osl | 5 - .../mx_lin_adobergb_to_lin_rec709_color3.osl | 6 - .../mx_lin_adobergb_to_lin_rec709_color4.osl | 6 - .../mx_srgb_texture_to_lin_rec709_color3.osl | 6 - .../mx_srgb_texture_to_lin_rec709_color4.osl | 6 - .../stdlib/genosl/stdlib_genosl_cm_impl.mtlx | 28 -- source/MaterialXGenMdl/mdl/materialx/cm.mdl | 244 -------------- .../ColorManagementSystem.cpp | 40 +-- .../ColorManagementSystem.h | 4 +- .../DefaultColorManagementSystem.cpp | 17 +- .../DefaultColorManagementSystem.h | 4 +- .../PyColorManagement.cpp | 6 +- 47 files changed, 417 insertions(+), 643 deletions(-) create mode 100644 libraries/cmlib/cmlib_defs.mtlx create mode 100644 libraries/cmlib/cmlib_ng.mtlx delete mode 100644 libraries/stdlib/genglsl/lib/mx_transform_color.glsl delete mode 100644 libraries/stdlib/genglsl/mx_adobergb_to_lin_rec709_color3.glsl delete mode 100644 libraries/stdlib/genglsl/mx_adobergb_to_lin_rec709_color4.glsl delete mode 100644 libraries/stdlib/genglsl/mx_ap1_to_rec709_color3.glsl delete mode 100644 libraries/stdlib/genglsl/mx_ap1_to_rec709_color4.glsl delete mode 100644 libraries/stdlib/genglsl/mx_g22_ap1_to_lin_rec709_color3.glsl delete mode 100644 libraries/stdlib/genglsl/mx_g22_ap1_to_lin_rec709_color4.glsl delete mode 100644 libraries/stdlib/genglsl/mx_gamma18_to_linear_color3.glsl delete mode 100644 libraries/stdlib/genglsl/mx_gamma18_to_linear_color4.glsl delete mode 100644 libraries/stdlib/genglsl/mx_gamma22_to_linear_color3.glsl delete mode 100644 libraries/stdlib/genglsl/mx_gamma22_to_linear_color4.glsl delete mode 100644 libraries/stdlib/genglsl/mx_gamma24_to_linear_color3.glsl delete mode 100644 libraries/stdlib/genglsl/mx_gamma24_to_linear_color4.glsl delete mode 100644 libraries/stdlib/genglsl/mx_lin_adobergb_to_lin_rec709_color3.glsl delete mode 100644 libraries/stdlib/genglsl/mx_lin_adobergb_to_lin_rec709_color4.glsl delete mode 100644 libraries/stdlib/genglsl/mx_srgb_texture_to_lin_rec709_color3.glsl delete mode 100644 libraries/stdlib/genglsl/mx_srgb_texture_to_lin_rec709_color4.glsl delete mode 100644 libraries/stdlib/genglsl/stdlib_genglsl_cm_impl.mtlx delete mode 100644 libraries/stdlib/genmdl/stdlib_genmdl_cm_impl.mtlx delete mode 100644 libraries/stdlib/genmsl/stdlib_genmsl_cm_impl.mtlx delete mode 100644 libraries/stdlib/genosl/lib/mx_transform_color.osl delete mode 100644 libraries/stdlib/genosl/mx_adobergb_to_lin_rec709_color3.osl delete mode 100644 libraries/stdlib/genosl/mx_adobergb_to_lin_rec709_color4.osl delete mode 100644 libraries/stdlib/genosl/mx_ap1_to_rec709_color3.osl delete mode 100644 libraries/stdlib/genosl/mx_ap1_to_rec709_color4.osl delete mode 100644 libraries/stdlib/genosl/mx_g22_ap1_to_lin_rec709_color3.osl delete mode 100644 libraries/stdlib/genosl/mx_g22_ap1_to_lin_rec709_color4.osl delete mode 100644 libraries/stdlib/genosl/mx_gamma18_to_linear_color3.osl delete mode 100644 libraries/stdlib/genosl/mx_gamma18_to_linear_color4.osl delete mode 100644 libraries/stdlib/genosl/mx_gamma22_to_linear_color3.osl delete mode 100644 libraries/stdlib/genosl/mx_gamma22_to_linear_color4.osl delete mode 100644 libraries/stdlib/genosl/mx_gamma24_to_linear_color3.osl delete mode 100644 libraries/stdlib/genosl/mx_gamma24_to_linear_color4.osl delete mode 100644 libraries/stdlib/genosl/mx_lin_adobergb_to_lin_rec709_color3.osl delete mode 100644 libraries/stdlib/genosl/mx_lin_adobergb_to_lin_rec709_color4.osl delete mode 100644 libraries/stdlib/genosl/mx_srgb_texture_to_lin_rec709_color3.osl delete mode 100644 libraries/stdlib/genosl/mx_srgb_texture_to_lin_rec709_color4.osl delete mode 100644 libraries/stdlib/genosl/stdlib_genosl_cm_impl.mtlx delete mode 100644 source/MaterialXGenMdl/mdl/materialx/cm.mdl diff --git a/libraries/README.md b/libraries/README.md index 5e61f7ceb0..e245953a82 100644 --- a/libraries/README.md +++ b/libraries/README.md @@ -9,22 +9,18 @@ This folder contains the standard data libraries for MaterialX, providing declar - [genglsl](stdlib/genglsl): GLSL language support. - [lib](stdlib/genglsl/lib) : Shader utility files. - [stdlib_genglsl_impl.mtlx](stdlib/genglsl/stdlib_genglsl_impl.mtlx) : Mapping from declarations to implementations. - - [stdlib_genglsl_cm_impl.mtlx](stdlib/genglsl/stdlib_genglsl_cm_impl.mtlx) : Default color management implementations. - [stdlib_genglsl_unit_impl.mtlx](stdlib/genosl/stdlib_genglsl_unit_impl.mtlx) : Real world unit support implementations. - [genosl](stdlib/genosl): OSL language support. - [lib](stdlib/genosl/lib) : Shader utility files. - [stdlib_genosl_impl.mtlx](stdlib/genosl/stdlib_genosl_impl.mtlx) : Mapping from declarations to implementations. - - [stdlib_genosl_cm_impl.mtlx](stdlib/genosl/stdlib_genosl_cm_impl.mtlx) : Default color management implementations. - [stdlib_genosl_unit_impl.mtlx](stdlib/genosl/stdlib_genosl_unit_impl.mtlx) : Real world unit support implementations. - [genmdl](stdlib/genmdl): MDL language support. - [stdlib_genmdl_impl.mtlx](stdlib/genmdl/stdlib_genmdl_impl.mtlx) : Mapping from declarations to implementations. - - [stdlib_genmdl_cm_impl.mtlx](stdlib/genmdl/stdlib_genmdl_cm_impl.mtlx) : Default color management implementations. - [stdlib_genmdl_unit_impl.mtlx](stdlib/genmdl/stdlib_genmdl_unit_impl.mtlx) : Real world unit support implementations. - Additional MaterialX support libraries for MDL are located in the [source/MaterialXGenMdl/mdl/materialx](../source/MaterialXGenMdl/mdl/materialx) package folder - [genmsl](stdlib/genmsl): MSL language support. - [lib](stdlib/genmsl/lib) : Shader utility files. - [stdlib_genmsl_impl.mtlx](stdlib/genmsl/stdlib_genmsl_impl.mtlx) : Mapping from declarations to implementations. - - [stdlib_genmsl_cm_impl.mtlx](stdlib/genmsl/stdlib_genmsl_cm_impl.mtlx) : Minimal set of "default" color management implementations. - [stdlib_genmsl_unit_impl.mtlx](stdlib/genmsl/stdlib_genmsl_unit_impl.mtlx) : Real world unit support implementations. ## Physically Based Shading Library @@ -49,6 +45,13 @@ This folder contains the standard data libraries for MaterialX, providing declar - [usd_preview_surface.mtlx](bxdf/usd_preview_surface.mtlx) : Graph definition of the [UsdPreviewSurface](https://openusd.org/release/spec_usdpreviewsurface.html) shading model. - [lama](bxdf/lama) : Graph definitions of the [MaterialX Lama](https://rmanwiki.pixar.com/display/REN24/MaterialX+Lama) node set. +## Color Management Library +- MaterialX shader generation natively supports a small set of common spaces for input colors, with all color transforms implemented as language-independent MaterialX graphs. The canonical definitions of these color transforms may be found in the OpenColorIO configuration for [ACES 1.2](https://github.com/colour-science/OpenColorIO-Configs/tree/feature/aces-1.2-config/aces_1.2). + - lin_rec709, g18_rec709, g22_rec709, rec709_display, acescg (lin_ap1), g22_ap1, srgb_texture, lin_adobergb, adobergb +- [cmlib](cmlib) + - [cmlib_defs.mtlx](cmlib/cmlib_defs.mtlx) : Nodedef declarations. + - [cmlib_ng.mtlx](cmlib/cmlib_ng.mtlx) : Nodegraph definitions. + ## Target Definitions - Each target implementation requires a target definition for declaration / implementation correspondence to work. - The [targets](targets) folder contains definition files for the following core targets: @@ -62,12 +65,10 @@ This folder contains the standard data libraries for MaterialX, providing declar - GLSL target support is for version 4.0 or higher. - OSL target support is for version 1.9.10 or higher. - MDL target support is for version 1.7. -- "Default" color management support includes OSL, GLSL, and MDL implementations for the following color spaces: - - lin_rec709, g18_rec709, g22_rec709, rec709_display, acescg (lin_ap1), g22_ap1, srgb_texture, lin_adobergb, adobergb - Basic GLSL and MSL `lightshader` node definitions and implementations are provided for the following light types: - point, directional, spot -- Code generation does not currently support: +- Shader generation does not currently support: - `ambientocclusion` node. - `arrayappend` node. - `curveadjust` node. - - `displacementshader` and `volumeshader` nodes and associated operations (`add`, `multiply`, `mix`) for GLSL and MSL targets. + - `displacementshader` and `volumeshader` nodes for hardware shading targets (GLSL, MSL). diff --git a/libraries/cmlib/cmlib_defs.mtlx b/libraries/cmlib/cmlib_defs.mtlx new file mode 100644 index 0000000000..4f413e9baa --- /dev/null +++ b/libraries/cmlib/cmlib_defs.mtlx @@ -0,0 +1,90 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/libraries/cmlib/cmlib_ng.mtlx b/libraries/cmlib/cmlib_ng.mtlx new file mode 100644 index 0000000000..8216504c02 --- /dev/null +++ b/libraries/cmlib/cmlib_ng.mtlx @@ -0,0 +1,297 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/libraries/stdlib/genglsl/lib/mx_transform_color.glsl b/libraries/stdlib/genglsl/lib/mx_transform_color.glsl deleted file mode 100644 index f70275687e..0000000000 --- a/libraries/stdlib/genglsl/lib/mx_transform_color.glsl +++ /dev/null @@ -1,17 +0,0 @@ -const mat3 AP1_TO_REC709 = mat3( 1.705050992658, -0.130256417507, -0.024003356805, - -0.621792120657, 1.140804736575, -0.128968976065, - -0.083258872001, -0.010548319068, 1.15297233287); - -const mat3 ADOBERGB_TO_REC709 = mat3( 1.39835574e+00, -2.50233861e-16, 2.77555756e-17, - -3.98355744e-01, 1.00000000e+00, -4.29289893e-02, - 0.00000000e+00, 0.00000000e+00, 1.04292899e+00); - -const float ADOBERGB_GAMMA = 563.0 / 256.0; - -vec3 mx_srgb_texture_to_lin_rec709(vec3 color) -{ - bvec3 isAbove = greaterThan(color, vec3(0.04045)); - vec3 linSeg = color / 12.92; - vec3 powSeg = pow(max(color + vec3(0.055), vec3(0.0)) / 1.055, vec3(2.4)); - return mix(linSeg, powSeg, vec3(isAbove)); -} diff --git a/libraries/stdlib/genglsl/mx_adobergb_to_lin_rec709_color3.glsl b/libraries/stdlib/genglsl/mx_adobergb_to_lin_rec709_color3.glsl deleted file mode 100644 index be50c548ed..0000000000 --- a/libraries/stdlib/genglsl/mx_adobergb_to_lin_rec709_color3.glsl +++ /dev/null @@ -1,7 +0,0 @@ -#include "lib/mx_transform_color.glsl" - -void mx_adobergb_to_lin_rec709_color3(vec3 _in, out vec3 result) -{ - vec3 linearColor = pow(max(_in, vec3(0.0)), vec3(ADOBERGB_GAMMA)); - result = ADOBERGB_TO_REC709 * linearColor; -} diff --git a/libraries/stdlib/genglsl/mx_adobergb_to_lin_rec709_color4.glsl b/libraries/stdlib/genglsl/mx_adobergb_to_lin_rec709_color4.glsl deleted file mode 100644 index c74bd51d5f..0000000000 --- a/libraries/stdlib/genglsl/mx_adobergb_to_lin_rec709_color4.glsl +++ /dev/null @@ -1,7 +0,0 @@ -#include "lib/mx_transform_color.glsl" - -void mx_adobergb_to_lin_rec709_color4(vec4 _in, out vec4 result) -{ - vec3 linearColor = pow(max(_in.rgb, vec3(0.0)), vec3(ADOBERGB_GAMMA)); - result = vec4(ADOBERGB_TO_REC709 * linearColor, _in.a); -} diff --git a/libraries/stdlib/genglsl/mx_ap1_to_rec709_color3.glsl b/libraries/stdlib/genglsl/mx_ap1_to_rec709_color3.glsl deleted file mode 100644 index 8d1e982383..0000000000 --- a/libraries/stdlib/genglsl/mx_ap1_to_rec709_color3.glsl +++ /dev/null @@ -1,6 +0,0 @@ -#include "lib/mx_transform_color.glsl" - -void mx_ap1_to_rec709_color3(vec3 _in, out vec3 result) -{ - result = AP1_TO_REC709 * _in; -} diff --git a/libraries/stdlib/genglsl/mx_ap1_to_rec709_color4.glsl b/libraries/stdlib/genglsl/mx_ap1_to_rec709_color4.glsl deleted file mode 100644 index 8f33bbce36..0000000000 --- a/libraries/stdlib/genglsl/mx_ap1_to_rec709_color4.glsl +++ /dev/null @@ -1,6 +0,0 @@ -#include "lib/mx_transform_color.glsl" - -void mx_ap1_to_rec709_color4(vec4 _in, out vec4 result) -{ - result = vec4(AP1_TO_REC709 * _in.rgb, _in.a); -} diff --git a/libraries/stdlib/genglsl/mx_g22_ap1_to_lin_rec709_color3.glsl b/libraries/stdlib/genglsl/mx_g22_ap1_to_lin_rec709_color3.glsl deleted file mode 100644 index dd4dde6b7b..0000000000 --- a/libraries/stdlib/genglsl/mx_g22_ap1_to_lin_rec709_color3.glsl +++ /dev/null @@ -1,6 +0,0 @@ -#include "lib/mx_transform_color.glsl" - -void mx_g22_ap1_to_lin_rec709_color3(vec3 _in, out vec3 result) -{ - result = AP1_TO_REC709 * pow(max(vec3(0.0), _in), vec3(2.2)); -} diff --git a/libraries/stdlib/genglsl/mx_g22_ap1_to_lin_rec709_color4.glsl b/libraries/stdlib/genglsl/mx_g22_ap1_to_lin_rec709_color4.glsl deleted file mode 100644 index 005ccba449..0000000000 --- a/libraries/stdlib/genglsl/mx_g22_ap1_to_lin_rec709_color4.glsl +++ /dev/null @@ -1,6 +0,0 @@ -#include "lib/mx_transform_color.glsl" - -void mx_g22_ap1_to_lin_rec709_color4(vec4 _in, out vec4 result) -{ - result = vec4(AP1_TO_REC709 * pow(max(vec3(0.0), _in.rgb), vec3(2.2)), _in.a); -} diff --git a/libraries/stdlib/genglsl/mx_gamma18_to_linear_color3.glsl b/libraries/stdlib/genglsl/mx_gamma18_to_linear_color3.glsl deleted file mode 100644 index ccedd5f5dd..0000000000 --- a/libraries/stdlib/genglsl/mx_gamma18_to_linear_color3.glsl +++ /dev/null @@ -1,4 +0,0 @@ -void mx_gamma18_to_linear_color3(vec3 _in, out vec3 result) -{ - result = pow(max(vec3(0.0), _in), vec3(1.8)); -} diff --git a/libraries/stdlib/genglsl/mx_gamma18_to_linear_color4.glsl b/libraries/stdlib/genglsl/mx_gamma18_to_linear_color4.glsl deleted file mode 100644 index b8858f9a5f..0000000000 --- a/libraries/stdlib/genglsl/mx_gamma18_to_linear_color4.glsl +++ /dev/null @@ -1,5 +0,0 @@ -void mx_gamma18_to_linear_color4(vec4 _in, out vec4 result) -{ - vec4 gamma = vec4(1.8, 1.8, 1.8, 1.0); - result = pow(max(vec4(0.0), _in), gamma); -} diff --git a/libraries/stdlib/genglsl/mx_gamma22_to_linear_color3.glsl b/libraries/stdlib/genglsl/mx_gamma22_to_linear_color3.glsl deleted file mode 100644 index af6734566a..0000000000 --- a/libraries/stdlib/genglsl/mx_gamma22_to_linear_color3.glsl +++ /dev/null @@ -1,4 +0,0 @@ -void mx_gamma22_to_linear_color3(vec3 _in, out vec3 result) -{ - result = pow(max(vec3(0.0), _in), vec3(2.2)); -} diff --git a/libraries/stdlib/genglsl/mx_gamma22_to_linear_color4.glsl b/libraries/stdlib/genglsl/mx_gamma22_to_linear_color4.glsl deleted file mode 100644 index 402b32238b..0000000000 --- a/libraries/stdlib/genglsl/mx_gamma22_to_linear_color4.glsl +++ /dev/null @@ -1,5 +0,0 @@ -void mx_gamma22_to_linear_color4(vec4 _in, out vec4 result) -{ - vec4 gamma = vec4(2.2, 2.2, 2.2, 1.0); - result = pow(max(vec4(0.0), _in), gamma); -} diff --git a/libraries/stdlib/genglsl/mx_gamma24_to_linear_color3.glsl b/libraries/stdlib/genglsl/mx_gamma24_to_linear_color3.glsl deleted file mode 100644 index 8040f7a3f0..0000000000 --- a/libraries/stdlib/genglsl/mx_gamma24_to_linear_color3.glsl +++ /dev/null @@ -1,4 +0,0 @@ -void mx_gamma24_to_linear_color3(vec3 _in, out vec3 result) -{ - result = pow(max(vec3(0.0), _in), vec3(2.4)); -} diff --git a/libraries/stdlib/genglsl/mx_gamma24_to_linear_color4.glsl b/libraries/stdlib/genglsl/mx_gamma24_to_linear_color4.glsl deleted file mode 100644 index 128b2a7ec6..0000000000 --- a/libraries/stdlib/genglsl/mx_gamma24_to_linear_color4.glsl +++ /dev/null @@ -1,5 +0,0 @@ -void mx_gamma24_to_linear_color4(vec4 _in, out vec4 result) -{ - vec4 gamma = vec4(2.4, 2.4, 2.4, 1.0); - result = pow(max(vec4(0.0), _in), gamma); -} diff --git a/libraries/stdlib/genglsl/mx_lin_adobergb_to_lin_rec709_color3.glsl b/libraries/stdlib/genglsl/mx_lin_adobergb_to_lin_rec709_color3.glsl deleted file mode 100644 index 55165f82ac..0000000000 --- a/libraries/stdlib/genglsl/mx_lin_adobergb_to_lin_rec709_color3.glsl +++ /dev/null @@ -1,6 +0,0 @@ -#include "lib/mx_transform_color.glsl" - -void mx_lin_adobergb_to_lin_rec709_color3(vec3 _in, out vec3 result) -{ - result = ADOBERGB_TO_REC709 * _in; -} diff --git a/libraries/stdlib/genglsl/mx_lin_adobergb_to_lin_rec709_color4.glsl b/libraries/stdlib/genglsl/mx_lin_adobergb_to_lin_rec709_color4.glsl deleted file mode 100644 index d35838d851..0000000000 --- a/libraries/stdlib/genglsl/mx_lin_adobergb_to_lin_rec709_color4.glsl +++ /dev/null @@ -1,6 +0,0 @@ -#include "lib/mx_transform_color.glsl" - -void mx_lin_adobergb_to_lin_rec709_color4(vec4 _in, out vec4 result) -{ - result = vec4(ADOBERGB_TO_REC709 * _in.rgb, _in.a); -} diff --git a/libraries/stdlib/genglsl/mx_srgb_texture_to_lin_rec709_color3.glsl b/libraries/stdlib/genglsl/mx_srgb_texture_to_lin_rec709_color3.glsl deleted file mode 100644 index c9db445b10..0000000000 --- a/libraries/stdlib/genglsl/mx_srgb_texture_to_lin_rec709_color3.glsl +++ /dev/null @@ -1,6 +0,0 @@ -#include "lib/mx_transform_color.glsl" - -void mx_srgb_texture_to_lin_rec709_color3(vec3 _in, out vec3 result) -{ - result = mx_srgb_texture_to_lin_rec709(_in); -} diff --git a/libraries/stdlib/genglsl/mx_srgb_texture_to_lin_rec709_color4.glsl b/libraries/stdlib/genglsl/mx_srgb_texture_to_lin_rec709_color4.glsl deleted file mode 100644 index e79887fac6..0000000000 --- a/libraries/stdlib/genglsl/mx_srgb_texture_to_lin_rec709_color4.glsl +++ /dev/null @@ -1,6 +0,0 @@ -#include "lib/mx_transform_color.glsl" - -void mx_srgb_texture_to_lin_rec709_color4(vec4 _in, out vec4 result) -{ - result = vec4(mx_srgb_texture_to_lin_rec709(_in.rgb), _in.a); -} diff --git a/libraries/stdlib/genglsl/stdlib_genglsl_cm_impl.mtlx b/libraries/stdlib/genglsl/stdlib_genglsl_cm_impl.mtlx deleted file mode 100644 index a8fa9a50d9..0000000000 --- a/libraries/stdlib/genglsl/stdlib_genglsl_cm_impl.mtlx +++ /dev/null @@ -1,29 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/libraries/stdlib/genmdl/stdlib_genmdl_cm_impl.mtlx b/libraries/stdlib/genmdl/stdlib_genmdl_cm_impl.mtlx deleted file mode 100644 index 1a2f6c76fc..0000000000 --- a/libraries/stdlib/genmdl/stdlib_genmdl_cm_impl.mtlx +++ /dev/null @@ -1,29 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/libraries/stdlib/genmsl/stdlib_genmsl_cm_impl.mtlx b/libraries/stdlib/genmsl/stdlib_genmsl_cm_impl.mtlx deleted file mode 100644 index 52f8dd5c3d..0000000000 --- a/libraries/stdlib/genmsl/stdlib_genmsl_cm_impl.mtlx +++ /dev/null @@ -1,29 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/libraries/stdlib/genosl/lib/mx_transform_color.osl b/libraries/stdlib/genosl/lib/mx_transform_color.osl deleted file mode 100644 index 1b0e6ad74d..0000000000 --- a/libraries/stdlib/genosl/lib/mx_transform_color.osl +++ /dev/null @@ -1,22 +0,0 @@ -#define AP1_TO_REC709 matrix( 1.705050992658, -0.130256417507, -0.024003356805, 0.0, \ - -0.621792120657, 1.140804736575, -0.128968976065, 0.0, \ - -0.083258872001, -0.010548319068, 1.15297233287, 0.0, \ - 0.0, 0.0, 0.0, 1.0) - -#define ADOBERGB_TO_REC709 matrix( 1.39835574e+00, -2.50233861e-16, 2.77555756e-17, 0.0, \ - -3.98355744e-01, 1.00000000e+00, -4.29289893e-02, 0.0, \ - 0.00000000e+00, 0.00000000e+00, 1.04292899e+00, 0.0, \ - 0.0, 0.0, 0.0, 1.0) - -#define ADOBERGB_GAMMA (563.0 / 256.0) - -color mx_srgb_texture_to_lin_rec709(color inColor) -{ - float breakPnt = 0.04045; - color isAbove = color(inColor[0] > breakPnt ? 1.0 : 0.0, - inColor[1] > breakPnt ? 1.0 : 0.0, - inColor[2] > breakPnt ? 1.0 : 0.0); - color linSeg = inColor / 12.92; - color powSeg = pow(max(inColor + color(0.055), color(0.0)) / 1.055, color(2.4)); - return mix(linSeg, powSeg, isAbove); -} diff --git a/libraries/stdlib/genosl/mx_adobergb_to_lin_rec709_color3.osl b/libraries/stdlib/genosl/mx_adobergb_to_lin_rec709_color3.osl deleted file mode 100644 index efa37c544a..0000000000 --- a/libraries/stdlib/genosl/mx_adobergb_to_lin_rec709_color3.osl +++ /dev/null @@ -1,7 +0,0 @@ -#include "lib/mx_transform_color.osl" - -void mx_adobergb_to_lin_rec709_color3(color _in, output color result) -{ - color linearColor = pow(max(color(0.0), _in), color(ADOBERGB_GAMMA)); - result = color(transform(ADOBERGB_TO_REC709, vector(linearColor))); -} diff --git a/libraries/stdlib/genosl/mx_adobergb_to_lin_rec709_color4.osl b/libraries/stdlib/genosl/mx_adobergb_to_lin_rec709_color4.osl deleted file mode 100644 index c66eb75259..0000000000 --- a/libraries/stdlib/genosl/mx_adobergb_to_lin_rec709_color4.osl +++ /dev/null @@ -1,7 +0,0 @@ -#include "lib/mx_transform_color.osl" - -void mx_adobergb_to_lin_rec709_color4(color4 _in, output color4 result) -{ - color linearColor = pow(max(color(0.0), _in.rgb), color(ADOBERGB_GAMMA)); - result = color4(transform(ADOBERGB_TO_REC709, vector(linearColor)), _in.a); -} diff --git a/libraries/stdlib/genosl/mx_ap1_to_rec709_color3.osl b/libraries/stdlib/genosl/mx_ap1_to_rec709_color3.osl deleted file mode 100644 index c38ef17774..0000000000 --- a/libraries/stdlib/genosl/mx_ap1_to_rec709_color3.osl +++ /dev/null @@ -1,7 +0,0 @@ -#include "lib/mx_transform_color.osl" - -void mx_ap1_to_rec709_color3(color _in, output color result) -{ - vector outRgb = transform(AP1_TO_REC709, vector(_in[0], _in[1], _in[2])); - result = color(outRgb[0], outRgb[1], outRgb[2]); -} diff --git a/libraries/stdlib/genosl/mx_ap1_to_rec709_color4.osl b/libraries/stdlib/genosl/mx_ap1_to_rec709_color4.osl deleted file mode 100644 index e84c659a98..0000000000 --- a/libraries/stdlib/genosl/mx_ap1_to_rec709_color4.osl +++ /dev/null @@ -1,7 +0,0 @@ -#include "lib/mx_transform_color.osl" - -void mx_ap1_to_rec709_color4(color4 _in, output color4 result) -{ - vector outRgb = transform(AP1_TO_REC709, vector(_in.rgb[0], _in.rgb[1], _in.rgb[2])); - result = color4(color(outRgb[0], outRgb[1], outRgb[2]), _in.a); -} diff --git a/libraries/stdlib/genosl/mx_g22_ap1_to_lin_rec709_color3.osl b/libraries/stdlib/genosl/mx_g22_ap1_to_lin_rec709_color3.osl deleted file mode 100644 index 9cc64970df..0000000000 --- a/libraries/stdlib/genosl/mx_g22_ap1_to_lin_rec709_color3.osl +++ /dev/null @@ -1,8 +0,0 @@ -#include "lib/mx_transform_color.osl" - -void mx_g22_ap1_to_lin_rec709_color3(color _in, output color result) -{ - color linearColor = pow(max(color(0.0), _in), color(2.2)); - vector outRgb = transform(AP1_TO_REC709, vector(linearColor[0], linearColor[1], linearColor[2])); - result = color(outRgb[0], outRgb[1], outRgb[2]); -} diff --git a/libraries/stdlib/genosl/mx_g22_ap1_to_lin_rec709_color4.osl b/libraries/stdlib/genosl/mx_g22_ap1_to_lin_rec709_color4.osl deleted file mode 100644 index 86dde0f625..0000000000 --- a/libraries/stdlib/genosl/mx_g22_ap1_to_lin_rec709_color4.osl +++ /dev/null @@ -1,8 +0,0 @@ -#include "lib/mx_transform_color.osl" - -void mx_g22_ap1_to_lin_rec709_color4(color4 _in, output color4 result) -{ - color linearColor = pow(max(color(0.0), _in.rgb), color(2.2)); - vector outRgb = transform(AP1_TO_REC709, vector(linearColor[0], linearColor[1], linearColor[2])); - result = color4(color(outRgb[0], outRgb[1], outRgb[2]), _in.a); -} diff --git a/libraries/stdlib/genosl/mx_gamma18_to_linear_color3.osl b/libraries/stdlib/genosl/mx_gamma18_to_linear_color3.osl deleted file mode 100644 index 94d0a2c3fe..0000000000 --- a/libraries/stdlib/genosl/mx_gamma18_to_linear_color3.osl +++ /dev/null @@ -1,5 +0,0 @@ -void mx_gamma18_to_linear_color3(color _in, output color result) -{ - color gamma = color(1.8, 1.8, 1.8); - result = pow( max( color(0., 0., 0.), _in ), gamma ); -} diff --git a/libraries/stdlib/genosl/mx_gamma18_to_linear_color4.osl b/libraries/stdlib/genosl/mx_gamma18_to_linear_color4.osl deleted file mode 100644 index 9a793e06bf..0000000000 --- a/libraries/stdlib/genosl/mx_gamma18_to_linear_color4.osl +++ /dev/null @@ -1,5 +0,0 @@ -void mx_gamma18_to_linear_color4(color4 _in, output color4 result) -{ - color4 gamma = color4(color(1.8, 1.8, 1.8), 1.); - result = pow( max( color4(color(0., 0., 0.), 0.), _in ), gamma ); -} diff --git a/libraries/stdlib/genosl/mx_gamma22_to_linear_color3.osl b/libraries/stdlib/genosl/mx_gamma22_to_linear_color3.osl deleted file mode 100644 index e36fdfdc9a..0000000000 --- a/libraries/stdlib/genosl/mx_gamma22_to_linear_color3.osl +++ /dev/null @@ -1,5 +0,0 @@ -void mx_gamma22_to_linear_color3(color _in, output color result) -{ - color gamma = color(2.2, 2.2, 2.2); - result = pow( max( color(0., 0., 0.), _in ), gamma ); -} diff --git a/libraries/stdlib/genosl/mx_gamma22_to_linear_color4.osl b/libraries/stdlib/genosl/mx_gamma22_to_linear_color4.osl deleted file mode 100644 index 77959d90b6..0000000000 --- a/libraries/stdlib/genosl/mx_gamma22_to_linear_color4.osl +++ /dev/null @@ -1,5 +0,0 @@ -void mx_gamma22_to_linear_color4(color4 _in, output color4 result) -{ - color4 gamma = color4(color(2.2, 2.2, 2.2), 1.); - result = pow( max( color4(color(0., 0., 0.), 0.), _in ), gamma ); -} diff --git a/libraries/stdlib/genosl/mx_gamma24_to_linear_color3.osl b/libraries/stdlib/genosl/mx_gamma24_to_linear_color3.osl deleted file mode 100644 index a36466c88b..0000000000 --- a/libraries/stdlib/genosl/mx_gamma24_to_linear_color3.osl +++ /dev/null @@ -1,5 +0,0 @@ -void mx_gamma24_to_linear_color3(color _in, output color result) -{ - color gamma = color(2.4, 2.4, 2.4); - result = pow( max( color(0., 0., 0.), _in ), gamma ); -} diff --git a/libraries/stdlib/genosl/mx_gamma24_to_linear_color4.osl b/libraries/stdlib/genosl/mx_gamma24_to_linear_color4.osl deleted file mode 100644 index aab0e8e87e..0000000000 --- a/libraries/stdlib/genosl/mx_gamma24_to_linear_color4.osl +++ /dev/null @@ -1,5 +0,0 @@ -void mx_gamma24_to_linear_color4(color4 _in, output color4 result) -{ - color4 gamma = color4(color(2.4, 2.4, 2.4), 1.); - result = pow( max( color4(color(0., 0., 0.), 0.), _in ), gamma ); -} diff --git a/libraries/stdlib/genosl/mx_lin_adobergb_to_lin_rec709_color3.osl b/libraries/stdlib/genosl/mx_lin_adobergb_to_lin_rec709_color3.osl deleted file mode 100644 index 39705e2522..0000000000 --- a/libraries/stdlib/genosl/mx_lin_adobergb_to_lin_rec709_color3.osl +++ /dev/null @@ -1,6 +0,0 @@ -#include "lib/mx_transform_color.osl" - -void mx_lin_adobergb_to_lin_rec709_color3(color _in, output color result) -{ - result = color(transform(ADOBERGB_TO_REC709, vector(_in))); -} diff --git a/libraries/stdlib/genosl/mx_lin_adobergb_to_lin_rec709_color4.osl b/libraries/stdlib/genosl/mx_lin_adobergb_to_lin_rec709_color4.osl deleted file mode 100644 index 67833bfbd1..0000000000 --- a/libraries/stdlib/genosl/mx_lin_adobergb_to_lin_rec709_color4.osl +++ /dev/null @@ -1,6 +0,0 @@ -#include "lib/mx_transform_color.osl" - -void mx_lin_adobergb_to_lin_rec709_color4(color4 _in, output color4 result) -{ - result = color4(color(transform(ADOBERGB_TO_REC709, vector(_in.rgb))), _in.a); -} diff --git a/libraries/stdlib/genosl/mx_srgb_texture_to_lin_rec709_color3.osl b/libraries/stdlib/genosl/mx_srgb_texture_to_lin_rec709_color3.osl deleted file mode 100644 index b60a0b35ce..0000000000 --- a/libraries/stdlib/genosl/mx_srgb_texture_to_lin_rec709_color3.osl +++ /dev/null @@ -1,6 +0,0 @@ -#include "lib/mx_transform_color.osl" - -void mx_srgb_texture_to_lin_rec709_color3(color _in, output color result) -{ - result = mx_srgb_texture_to_lin_rec709(_in); -} diff --git a/libraries/stdlib/genosl/mx_srgb_texture_to_lin_rec709_color4.osl b/libraries/stdlib/genosl/mx_srgb_texture_to_lin_rec709_color4.osl deleted file mode 100644 index 88777d89dd..0000000000 --- a/libraries/stdlib/genosl/mx_srgb_texture_to_lin_rec709_color4.osl +++ /dev/null @@ -1,6 +0,0 @@ -#include "lib/mx_transform_color.osl" - -void mx_srgb_texture_to_lin_rec709_color4(color4 _in, output color4 result) -{ - result = color4(mx_srgb_texture_to_lin_rec709(_in.rgb), _in.a); -} diff --git a/libraries/stdlib/genosl/stdlib_genosl_cm_impl.mtlx b/libraries/stdlib/genosl/stdlib_genosl_cm_impl.mtlx deleted file mode 100644 index fd42368784..0000000000 --- a/libraries/stdlib/genosl/stdlib_genosl_cm_impl.mtlx +++ /dev/null @@ -1,28 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/source/MaterialXGenMdl/mdl/materialx/cm.mdl b/source/MaterialXGenMdl/mdl/materialx/cm.mdl deleted file mode 100644 index 622a94c644..0000000000 --- a/source/MaterialXGenMdl/mdl/materialx/cm.mdl +++ /dev/null @@ -1,244 +0,0 @@ -// -// Copyright Contributors to the MaterialX Project -// SPDX-License-Identifier: Apache-2.0 -// -// Default color management transforms for MDL -// - -mdl 1.6; - -using core import *; -import::base::*; -import::anno::*; -import::state::*; -import.::swizzle::*; -import::math::*; - -// Threshold utility -float3 aboveThreshold(float3 value, float3 threshold) -{ - return float3(value.x > threshold.x ? 1.0 : 0.0, - value.y > threshold.y ? 1.0 : 0.0, - value.z > threshold.z ? 1.0 : 0.0); -} - -export float3 mx_ap1_to_rec709_color3(float3 mxp_in) -[[ - anno::description("AP1 to Rec709 transform for color3") -]] -{ - float4 outColor = float4(mxp_in.x, mxp_in.y, mxp_in.z, 0.0); - float4x4 xform = float4x4( 1.705050992658, -0.130256417507, -0.024003356805, 0.0, - -0.621792120657, 1.140804736575, -0.128968976065, 0.0, - -0.083258872001, -0.010548319068, 1.15297233287, 0.0, - 0.0, 0.0, 0.0, 1.0); - float3 result = ::swizzle::xyz(xform * outColor); - return result; -} - -export color mx_ap1_to_rec709_color3(color mxp_in) -{ - return color(mx_ap1_to_rec709_color3(float3(mxp_in))); -} - -export float4 mx_ap1_to_rec709_color4(float4 mxp_in) -[[ - anno::description("AP1 to Rec709 transform for color4") -]] -{ - float4 outColor = float4(mxp_in.x, mxp_in.y, mxp_in.z, 0.0); - float4x4 xform = float4x4( 1.705050992658, -0.130256417507, -0.024003356805, 0.0, - -0.621792120657, 1.140804736575, -0.128968976065, 0.0, - -0.083258872001, -0.010548319068, 1.15297233287, 0.0, - 0.0, 0.0, 0.0, 1.0); - float3 result3 = ::swizzle::xyz(xform * outColor); - float4 result = float4(result3.x,result3.y, result3.z, mxp_in.w); - return result; -} - -export color4 mx_ap1_to_rec709_color4(color4 mxp_in) -{ - return mk_color4(mx_ap1_to_rec709_color4(mk_float4(mxp_in))); -} - -export float3 mx_gamma18_to_linear_color3(float3 mxp_in) -[[ - anno::description("Gamma 1.8 to linear transform for color3") -]] -{ - float3 gamma = float3(1.8, 1.8, 1.8); - return ::math::pow( ::math::max( float3(0.0, 0.0, 0.0), mxp_in ), gamma ); -} - -export color mx_gamma18_to_linear_color3(color mxp_in) -{ - return color(mx_gamma18_to_linear_color3(float3(mxp_in))); -} - -export float4 mx_gamma18_to_linear_color4(float4 mxp_in) -[[ - anno::description("Gamma 1.8 to linear transform for color4") -]] -{ - float4 gamma = float4(1.8, 1.8, 1.8, 1.0); - return ::math::pow( ::math::max( float4(0.0, 0.0, 0.0, 0.0), mxp_in ), gamma ); -} - -export color4 mx_gamma18_to_linear_color4(color4 mxp_in) -{ - return mk_color4(mx_gamma18_to_linear_color4(mk_float4(mxp_in))); -} - -export float3 mx_gamma22_to_linear_color3(float3 mxp_in) -[[ - anno::description("Gamma 2.2 to linear transform for color3") -]] -{ - float3 gamma = float3(2.2, 2.2, 2.2); - return ::math::pow( ::math::max( float3(0.0, 0.0, 0.0), mxp_in ), gamma ); -} - -export color mx_gamma22_to_linear_color3(color mxp_in) -{ - return color(mx_gamma22_to_linear_color3(float3(mxp_in))); -} - -export float4 mx_gamma22_to_linear_color4(float4 mxp_in) -[[ - anno::description("Gamma 2.2 to linear transform for color4") -]] -{ - float4 gamma = float4(2.2, 2.2, 2.2, 1.0); - return ::math::pow( ::math::max( float4(0.0, 0.0, 0.0, 0.0), mxp_in ), gamma ); -} - -export color4 mx_gamma22_to_linear_color4(color4 mxp_in) -{ - return mk_color4(mx_gamma22_to_linear_color4(mk_float4(mxp_in))); -} - -export float3 mx_gamma24_to_linear_color3(float3 mxp_in) -[[ - anno::description("Gamma 2.4 to linear transform for color3") -]] -{ - float3 gamma = float3(2.4, 2.4, 2.4); - return ::math::pow( ::math::max( float3(0.0, 0.0, 0.0), mxp_in ), gamma ); -} - -export color mx_gamma24_to_linear_color3(color mxp_in) -{ - return color(mx_gamma24_to_linear_color3(float3(mxp_in))); -} - -export float4 mx_gamma24_to_linear_color4(float4 mxp_in) -[[ - anno::description("Gamma 2.4 to linear transform for color4") -]] -{ - float4 gamma = float4(2.4, 2.4, 2.4, 1.0); - return ::math::pow( ::math::max( float4(0.0, 0.0, 0.0, 0.0), mxp_in ), gamma ); -} - -export color4 mx_gamma24_to_linear_color4(color4 mxp_in) -{ - return mk_color4(mx_gamma24_to_linear_color4(mk_float4(mxp_in))); -} - -export float3 mx_srgb_texture_to_lin_rec709_color3(float3 mxp_in) -[[ - anno::description("SRGB-texture to linear Rec709 transform for color3") -]] -{ - float3 outColor = float3(mxp_in.x, mxp_in.y, mxp_in.z); - float3 breakPnt = float3(0.03928571566939354, 0.03928571566939354, 0.03928571566939354); - float3 slope = float3(0.07738015800714493, 0.07738015800714493, 0.07738015800714493); - float3 scale = float3(0.9478672742843628, 0.9478672742843628, 0.9478672742843628); - float3 offset = float3(0.05213269963860512, 0.05213269963860512, 0.05213269963860512); - float3 gamma = float3(2.4, 2.4, 2.4); - float3 isAboveBreak = aboveThreshold(outColor, breakPnt); - float3 linSeg = outColor * slope; - float3 powSeg = ::math::pow( ::math::max( float3(0.0, 0.0, 0.0), scale * outColor + offset), gamma); - return isAboveBreak * powSeg + float3(float3(1.0, 1.0, 1.0) - isAboveBreak) * linSeg; -} - -export color mx_srgb_texture_to_lin_rec709_color3(color mxp_in) -{ - return color(mx_srgb_texture_to_lin_rec709_color3(float3(mxp_in))); -} - -export float4 mx_srgb_texture_to_lin_rec709_color4(float4 mxp_in) -[[ - anno::description("SRGB-texture to linear Rec709 transform for color4") -]] -{ - float3 outColor = mx_srgb_texture_to_lin_rec709_color3(float3(mxp_in.x, mxp_in.y, mxp_in.z)); - return float4(outColor.x, outColor.y, outColor.z, mxp_in.w); -} - -export color4 mx_srgb_texture_to_lin_rec709_color4(color4 mxp_in) -{ - return mk_color4(mx_srgb_texture_to_lin_rec709_color4(mk_float4(mxp_in))); -} - -export float3 mx_lin_adobergb_to_lin_rec709_color3(float3 mxp_in) -[[ - anno::description("linear AdobeRGB to linear Rec709 transform for float3") -]] -{ - float4 outColor = float4(mxp_in.x, mxp_in.y, mxp_in.z, 0.0); - float4x4 xform = float4x4( 1.39835574e+00, -2.50233861e-16, 2.77555756e-17, 0.0, - -3.98355744e-01, 1.00000000e+00, -4.29289893e-02, 0.0, - 0.00000000e+00, 0.00000000e+00, 1.04292899e+00, 0.0, - 0.0, 0.0, 0.0, 1.0); - float3 result = ::swizzle::xyz(xform * outColor); - return result; -} - -export float3 mx_adobergb_to_lin_rec709_color3(float3 mxp_in) -[[ - anno::description("Gamma 2.2 AdobeRGB to linear Rec709 transform for float3") -]] -{ - float3 gamma = float3(563 / 256); - float3 lin_adobergb_color = ::math::pow( ::math::max( float3(0), mxp_in ), gamma ); - return mx_lin_adobergb_to_lin_rec709_color3(lin_adobergb_color); -} - -export color mx_adobergb_to_lin_rec709_color3(color mxp_in) -{ - return color(mx_adobergb_to_lin_rec709_color3(float3(mxp_in))); -} - -export float4 mx_adobergb_to_lin_rec709_color4(float4 mxp_in) -[[ - anno::description("Gamma 2.2 AdobeRGB to linear Rec709 transform for float4") -]] -{ - float3 outColor = mx_adobergb_to_lin_rec709_color3(float3(mxp_in.x, mxp_in.y, mxp_in.z)); - return float4(outColor.x, outColor.y, outColor.z, mxp_in.w); -} - -export color4 mx_adobergb_to_lin_rec709_color4(color4 mxp_in) -{ - return mk_color4(mx_adobergb_to_lin_rec709_color4(mk_float4(mxp_in))); -} - -export color mx_lin_adobergb_to_lin_rec709_color3(color mxp_in) -{ - return color(mx_lin_adobergb_to_lin_rec709_color3(float3(mxp_in))); -} - -export float4 mx_lin_adobergb_to_lin_rec709_color4(float4 mxp_in) -[[ - anno::description("linear AdobeRGB to linear Rec709 transform for float4") -]] -{ - float3 outColor = mx_lin_adobergb_to_lin_rec709_color3(float3(mxp_in.x, mxp_in.y, mxp_in.z)); - return float4(outColor.x, outColor.y, outColor.z, mxp_in.w); -} - -export color4 mx_lin_adobergb_to_lin_rec709_color4(color4 mxp_in) -{ - return mk_color4(mx_lin_adobergb_to_lin_rec709_color4(mk_float4(mxp_in))); -} diff --git a/source/MaterialXGenShader/ColorManagementSystem.cpp b/source/MaterialXGenShader/ColorManagementSystem.cpp index a9496331c0..1b6e5655a5 100644 --- a/source/MaterialXGenShader/ColorManagementSystem.cpp +++ b/source/MaterialXGenShader/ColorManagementSystem.cpp @@ -41,49 +41,19 @@ bool ColorManagementSystem::supportsTransform(const ColorSpaceTransform& transfo { throw ExceptionShaderGenError("No library loaded for color management system"); } - ImplementationPtr impl = getImplementation(transform); - return impl != nullptr; + return getNodeDef(transform) != nullptr; } ShaderNodePtr ColorManagementSystem::createNode(const ShaderGraph* parent, const ColorSpaceTransform& transform, const string& name, GenContext& context) const { - ImplementationPtr impl = getImplementation(transform); - if (!impl) + NodeDefPtr nodeDef = getNodeDef(transform); + if (!nodeDef) { - throw ExceptionShaderGenError("No implementation found for transform: ('" + transform.sourceSpace + "', '" + transform.targetSpace + "')."); + throw ExceptionShaderGenError("No nodedef found for transform: ('" + transform.sourceSpace + "', '" + transform.targetSpace + "')."); } - // Check if it's created and cached already, - // otherwise create and cache it. - ShaderNodeImplPtr nodeImpl = context.findNodeImplementation(impl->getName()); - if (!nodeImpl) - { - nodeImpl = SourceCodeNode::create(); - nodeImpl->initialize(*impl, context); - context.addNodeImplementation(impl->getName(), nodeImpl); - } - - // Create the node. - ShaderNodePtr shaderNode = ShaderNode::create(parent, name, nodeImpl, ShaderNode::Classification::TEXTURE); - - // Create ports on the node. - ShaderInput* input = shaderNode->addInput("in", transform.type); - if (transform.type == Type::COLOR3) - { - input->setValue(Value::createValue(Color3(0.0f, 0.0f, 0.0f))); - } - else if (transform.type == Type::COLOR4) - { - input->setValue(Value::createValue(Color4(0.0f, 0.0f, 0.0f, 1.0))); - } - else - { - throw ExceptionShaderGenError("Invalid type specified to createColorTransform: '" + transform.type->getName() + "'"); - } - shaderNode->addOutput("out", transform.type); - - return shaderNode; + return ShaderNode::create(parent, name, *nodeDef, context); } MATERIALX_NAMESPACE_END diff --git a/source/MaterialXGenShader/ColorManagementSystem.h b/source/MaterialXGenShader/ColorManagementSystem.h index d03db8bd2c..caf3826f94 100644 --- a/source/MaterialXGenShader/ColorManagementSystem.h +++ b/source/MaterialXGenShader/ColorManagementSystem.h @@ -68,8 +68,8 @@ class MX_GENSHADER_API ColorManagementSystem /// Protected constructor ColorManagementSystem(); - /// Returns an implementation for a given transform - virtual ImplementationPtr getImplementation(const ColorSpaceTransform& transform) const = 0; + /// Returns a nodedef for a given transform + virtual NodeDefPtr getNodeDef(const ColorSpaceTransform& transform) const = 0; protected: DocumentPtr _document; diff --git a/source/MaterialXGenShader/DefaultColorManagementSystem.cpp b/source/MaterialXGenShader/DefaultColorManagementSystem.cpp index 01c5eb5148..61209e153c 100644 --- a/source/MaterialXGenShader/DefaultColorManagementSystem.cpp +++ b/source/MaterialXGenShader/DefaultColorManagementSystem.cpp @@ -44,26 +44,27 @@ const string& DefaultColorManagementSystem::getName() const return CMS_NAME; } -ImplementationPtr DefaultColorManagementSystem::getImplementation(const ColorSpaceTransform& transform) const +NodeDefPtr DefaultColorManagementSystem::getNodeDef(const ColorSpaceTransform& transform) const { if (!_document) { throw ExceptionShaderGenError("No library loaded for color management system"); } - TargetDefPtr targetDef = _document->getTargetDef(_target); string sourceSpace = COLOR_SPACE_REMAP.count(transform.sourceSpace) ? COLOR_SPACE_REMAP.at(transform.sourceSpace) : transform.sourceSpace; string targetSpace = COLOR_SPACE_REMAP.count(transform.targetSpace) ? COLOR_SPACE_REMAP.at(transform.targetSpace) : transform.targetSpace; - for (const string& target : targetDef->getMatchingTargets()) + string nodeName = sourceSpace + "_to_" + targetSpace; + + for (NodeDefPtr nodeDef : _document->getMatchingNodeDefs(nodeName)) { - string implName = "IM_" + sourceSpace + "_to_" + targetSpace + "_" + transform.type->getName() + "_" + target; - ImplementationPtr impl = _document->getImplementation(implName); - if (impl) + for (OutputPtr output : nodeDef->getOutputs()) { - return impl; + if (output->getType() == transform.type->getName()) + { + return nodeDef; + } } } - return nullptr; } diff --git a/source/MaterialXGenShader/DefaultColorManagementSystem.h b/source/MaterialXGenShader/DefaultColorManagementSystem.h index 8cc60fb4ad..803aad9d39 100644 --- a/source/MaterialXGenShader/DefaultColorManagementSystem.h +++ b/source/MaterialXGenShader/DefaultColorManagementSystem.h @@ -30,8 +30,8 @@ class MX_GENSHADER_API DefaultColorManagementSystem : public ColorManagementSyst const string& getName() const override; protected: - /// Returns an implementation for a given transform - ImplementationPtr getImplementation(const ColorSpaceTransform& transform) const override; + /// Returns a nodedef for a given transform + NodeDefPtr getNodeDef(const ColorSpaceTransform& transform) const override; /// Protected constructor DefaultColorManagementSystem(const string& target); diff --git a/source/PyMaterialX/PyMaterialXGenShader/PyColorManagement.cpp b/source/PyMaterialX/PyMaterialXGenShader/PyColorManagement.cpp index d45854941b..f35619e777 100644 --- a/source/PyMaterialX/PyMaterialXGenShader/PyColorManagement.cpp +++ b/source/PyMaterialX/PyMaterialXGenShader/PyColorManagement.cpp @@ -30,12 +30,12 @@ class PyColorManagementSystem : public mx::ColorManagementSystem } protected: - mx::ImplementationPtr getImplementation(const mx::ColorSpaceTransform& transform) const override + mx::NodeDefPtr getNodeDef(const mx::ColorSpaceTransform& transform) const override { PYBIND11_OVERLOAD_PURE( - mx::ImplementationPtr, + mx::NodeDefPtr, mx::ColorManagementSystem, - getImplementation, + getNodeDef, transform ); } From 451f24ac1448c6505b2019965360d45e65d1b2c7 Mon Sep 17 00:00:00 2001 From: Jonathan Stone Date: Tue, 16 May 2023 18:01:26 -0700 Subject: [PATCH 02/42] Remove unneeded clamp in UsdPreviewSurface This changelist removes an unneeded clamp in the graph definition of UsdPreviewSurface, providing a small simplification to its generated shader code in all languages. The formal specification for UsdPreviewSurface may be found at https://openusd.org/release/spec_usdpreviewsurface.html, and this clamp is not required to match its expected behavior for opacity. --- libraries/bxdf/usd_preview_surface.mtlx | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/libraries/bxdf/usd_preview_surface.mtlx b/libraries/bxdf/usd_preview_surface.mtlx index 2fa094673b..b21bc7dd20 100644 --- a/libraries/bxdf/usd_preview_surface.mtlx +++ b/libraries/bxdf/usd_preview_surface.mtlx @@ -267,13 +267,8 @@ - - - - - - + From e4468899f1d7b11c053fef15008cedc74818fdc1 Mon Sep 17 00:00:00 2001 From: Bernard Kwok Date: Wed, 17 May 2023 14:30:41 -0400 Subject: [PATCH 03/42] Improvements to graph editor display (#1351) * Fix so that outputs are right aligned and consistency appear after inputs. * Fix so that unconnected vs connected pins show up properly. * Fix so that connection lines go to pins instead of the middle of pin labels. * Outputs must come after inputs as output connections need to be set up during input traversal. * Changed the pin to be a "flow" icon for easier readability --- source/MaterialXCore/Util.cpp | 9 ++ source/MaterialXCore/Util.h | 3 + source/MaterialXGraphEditor/Graph.cpp | 131 +++++++++++------- source/MaterialXGraphEditor/Graph.h | 4 +- source/PyMaterialX/PyMaterialXCore/PyUtil.cpp | 1 + 5 files changed, 98 insertions(+), 50 deletions(-) diff --git a/source/MaterialXCore/Util.cpp b/source/MaterialXCore/Util.cpp index 5502c5c061..d6001053c5 100644 --- a/source/MaterialXCore/Util.cpp +++ b/source/MaterialXCore/Util.cpp @@ -127,6 +127,15 @@ string stringToLower(string str) return str; } +bool stringStartsWith(const std::string& str, const std::string& prefix) +{ + if (str.length() >= prefix.length()) + { + return !str.compare(0, prefix.length(), prefix); + } + return false; +} + bool stringEndsWith(const string& str, const string& suffix) { if (str.length() >= suffix.length()) diff --git a/source/MaterialXCore/Util.h b/source/MaterialXCore/Util.h index 9369b1904e..d6a834be05 100644 --- a/source/MaterialXCore/Util.h +++ b/source/MaterialXCore/Util.h @@ -45,6 +45,9 @@ MX_CORE_API string replaceSubstrings(string str, const StringMap& stringMap); /// Return a copy of the given string with letters converted to lower case. MX_CORE_API string stringToLower(string str); +/// Return true if the given string starts with the given prefix. +MX_CORE_API bool stringStartsWith(const string& str, const string& prefix); + /// Return true if the given string ends with the given suffix. MX_CORE_API bool stringEndsWith(const string& str, const string& suffix); diff --git a/source/MaterialXGraphEditor/Graph.cpp b/source/MaterialXGraphEditor/Graph.cpp index 1c41dd96d2..9710640130 100644 --- a/source/MaterialXGraphEditor/Graph.cpp +++ b/source/MaterialXGraphEditor/Graph.cpp @@ -34,6 +34,20 @@ ImRect expandImRect(const ImRect& rect, float x, float y) return result; } +// Get more user friendly node definition identifier. +// Will try and remove "ND_" prefix if it exists. Otherwise just returns +// the nodedef identifier. +std::string getNodeDefId(const std::string& val) +{ + const std::string ND_PREFIX = "ND_"; + std::string result = val; + if (mx::stringStartsWith(val, ND_PREFIX)) + { + result = val.substr(3, val.length()); + } + return result; +} + } // anonymous namespace Graph::Graph(const std::string& materialFilename, @@ -1820,7 +1834,7 @@ void Graph::addNode(const std::string& category, const std::string& name, const for (mx::NodeDefPtr nodedef : matchingNodeDefs) { std::string nodedefName = nodedef->getName(); - std::string sub = nodedefName.substr(3, nodedefName.length()); + std::string sub = getNodeDefId(nodedefName); if (sub == name) { node = _currGraphElem->addNodeInstance(nodedef, _currGraphElem->createValidChildName(name)); @@ -1836,7 +1850,7 @@ void Graph::addNode(const std::string& category, const std::string& name, const { // use substring of name in order to remove ND_ std::string nodedefName = matchingNodeDefs[i]->getName(); - std::string sub = nodedefName.substr(3, nodedefName.length()); + std::string sub = getNodeDefId(nodedefName); if (sub == name) { num = countDef; @@ -1902,7 +1916,7 @@ UiPinPtr Graph::getPin(ed::PinId pinId) // This function is based off of the pin icon function in the ImGui Node Editor blueprints-example.cpp void Graph::DrawPinIcon(std::string type, bool connected, int alpha) { - ax::Drawing::IconType iconType = ax::Drawing::IconType::Circle; + ax::Drawing::IconType iconType = ax::Drawing::IconType::Flow; ImColor color = ImColor(0, 0, 0, 255); if (_pinColor.find(type) != _pinColor.end()) { @@ -2033,68 +2047,65 @@ static bool Splitter(bool split_vertically, float thickness, float* size1, float return SplitterBehavior(bb, id, split_vertically ? ImGuiAxis_X : ImGuiAxis_Y, size1, size2, min_size1, min_size2, 0.0f); } -void Graph::outputPin(UiNodePtr node) +void Graph::drawOutputPins(UiNodePtr node, const std::string& longestInputLabel) { - // create output pin - float nodeWidth = 20 + ImGui::CalcTextSize(node->getName().c_str()).x; - if (nodeWidth < 80 * _fontScale) + std::string longestLabel = longestInputLabel; + for (UiPinPtr pin : node->outputPins) { - nodeWidth = 80 * _fontScale; + if (pin->_name.size() > longestLabel.size()) + longestLabel = pin->_name; } - const float labelWidth = ImGui::CalcTextSize("output").x; - // create node editor pin + // Create output pins + float nodeWidth = ImGui::CalcTextSize(longestLabel.c_str()).x; for (UiPinPtr pin : node->outputPins) { - ImGui::Indent(nodeWidth - labelWidth); - ed::BeginPin(pin->_pinId, ed::PinKind::Output); - ImGui::Text("%s", pin->_name.c_str()); + const float indent = nodeWidth - ImGui::CalcTextSize(pin->_name.c_str()).x; + ImGui::Indent(indent); + ImGui::TextUnformatted(pin->_name.c_str()); ImGui::SameLine(); + + ed::BeginPin(pin->_pinId, ed::PinKind::Output); + bool connected = pin->getConnected(); if (!_pinFilterType.empty()) { - if (_pinFilterType == pin->_type) - { - DrawPinIcon(pin->_type, true, DEFAULT_ALPHA); - } - else - { - DrawPinIcon(pin->_type, true, FILTER_ALPHA); - } + DrawPinIcon(pin->_type, connected, _pinFilterType == pin->_type ? DEFAULT_ALPHA : FILTER_ALPHA); } else { - DrawPinIcon(pin->_type, true, DEFAULT_ALPHA); + DrawPinIcon(pin->_type, connected, DEFAULT_ALPHA); } ed::EndPin(); - ImGui::Unindent(nodeWidth - labelWidth); + ImGui::Unindent(indent); } } -void Graph::createInputPin(UiPinPtr pin) +void Graph::drawInputPin(UiPinPtr pin) { ed::BeginPin(pin->_pinId, ed::PinKind::Input); ImGui::PushID(int(pin->_pinId.Get())); + bool connected = pin->getConnected(); if (!_pinFilterType.empty()) { if (_pinFilterType == pin->_type) { - DrawPinIcon(pin->_type, true, DEFAULT_ALPHA); + DrawPinIcon(pin->_type, connected, DEFAULT_ALPHA); } else { - DrawPinIcon(pin->_type, true, FILTER_ALPHA); + DrawPinIcon(pin->_type, connected, FILTER_ALPHA); } } else { - DrawPinIcon(pin->_type, true, DEFAULT_ALPHA); + DrawPinIcon(pin->_type, connected, DEFAULT_ALPHA); } + ImGui::PopID(); + ed::EndPin(); ImGui::SameLine(); ImGui::TextUnformatted(pin->_name.c_str()); - ed::EndPin(); - ImGui::PopID(); } std::vector Graph::createNodes(bool nodegraph) @@ -2127,7 +2138,7 @@ std::vector Graph::createNodes(bool nodegraph) ImGui::Text("%s", node->getName().c_str()); ImGui::SetWindowFontScale(_fontScale); - outputPin(node); + std::string longestInputLabel = node->getName(); for (UiPinPtr pin : node->inputPins) { UiNodePtr upUiNode = node->getConnectedNode(pin->_name); @@ -2156,9 +2167,13 @@ std::vector Graph::createNodes(bool nodegraph) } if (node->_showAllInputs || (pin->getConnected() || node->getNode()->getInput(pin->_name))) { - createInputPin(pin); + drawInputPin(pin); + + if (pin->_name.size() > longestInputLabel.size()) + longestInputLabel = pin->_name; } } + drawOutputPins(node, longestInputLabel); // set color of output pin if (node->getNode()->getType() == mx::SURFACE_SHADER_TYPE_STRING) @@ -2174,6 +2189,8 @@ std::vector Graph::createNodes(bool nodegraph) } else if (node->getInput() != nullptr) { + std::string longestInputLabel = node->getName(); + ed::BeginNode(node->getId()); ImGui::PushID(node->getId()); ImGui::SetWindowFontScale(1.2f * _fontScale); @@ -2189,7 +2206,6 @@ std::vector Graph::createNodes(bool nodegraph) ImGui::SetWindowFontScale(_fontScale); outputType = node->getInput()->getType(); - outputPin(node); for (UiPinPtr pin : node->inputPins) { UiNodePtr upUiNode = node->getConnectedNode(node->getName()); @@ -2234,10 +2250,16 @@ std::vector Graph::createNodes(bool nodegraph) ImGui::SameLine(); ImGui::TextUnformatted("value"); ed::EndPin(); + + if (pin->_name.size() > longestInputLabel.size()) + longestInputLabel = pin->_name; } + drawOutputPins(node, longestInputLabel); } else if (node->getOutput() != nullptr) { + std::string longestInputLabel = node->getName(); + ed::BeginNode(node->getId()); ImGui::PushID(node->getId()); ImGui::SetWindowFontScale(1.2f * _fontScale); @@ -2253,7 +2275,6 @@ std::vector Graph::createNodes(bool nodegraph) ImGui::SetWindowFontScale(_fontScale); outputType = node->getOutput()->getType(); - outputPin(node); for (UiPinPtr pin : node->inputPins) { @@ -2299,7 +2320,11 @@ std::vector Graph::createNodes(bool nodegraph) ImGui::TextUnformatted("input"); ed::EndPin(); + + if (pin->_name.size() > longestInputLabel.size()) + longestInputLabel = pin->_name; } + drawOutputPins(node, longestInputLabel); if (nodegraph) { outputNum.push_back(findNode(node->getId())); @@ -2307,6 +2332,8 @@ std::vector Graph::createNodes(bool nodegraph) } else if (node->getNodeGraph() != nullptr) { + std::string longestInputLabel = node->getName(); + ed::BeginNode(node->getId()); ImGui::PushID(node->getId()); ImGui::SetWindowFontScale(1.2f * _fontScale); @@ -2328,10 +2355,13 @@ std::vector Graph::createNodes(bool nodegraph) } if (node->_showAllInputs || (pin->getConnected() || node->getNodeGraph()->getInput(pin->_name))) { - createInputPin(pin); + drawInputPin(pin); + + if (pin->_name.size() > longestInputLabel.size()) + longestInputLabel = pin->_name; } } - outputPin(node); + drawOutputPins(node, longestInputLabel); } ImGui::PopID(); ed::EndNode(); @@ -3384,7 +3414,7 @@ void Graph::addNodePopup(bool cursor) { ImGui::Text("Add Node"); ImGui::Separator(); - static char input[16]{ "" }; + static char input[32]{ "" }; if (cursor) { ImGui::SetKeyboardFocusHere(); @@ -3398,15 +3428,16 @@ void Graph::addNodePopup(bool cursor) // filter out list of nodes if (subs.size() > 0) { + ImGui::SetNextWindowSizeConstraints(ImVec2(250.0f, 300.0f), ImVec2(-1.0f, 500.0f)); for (size_t i = 0; i < it->second.size(); i++) { std::string str(it->second[i][0]); std::string nodeName = it->second[i][0]; if (str.find(subs) != std::string::npos) { - if (ImGui::MenuItem(nodeName.substr(3, nodeName.length()).c_str()) || (ImGui::IsItemFocused() && ImGui::IsKeyPressedMap(ImGuiKey_Enter))) + if (ImGui::MenuItem(getNodeDefId(nodeName).c_str()) || (ImGui::IsItemFocused() && ImGui::IsKeyPressedMap(ImGuiKey_Enter))) { - addNode(it->second[i][2], nodeName.substr(3, nodeName.length()), it->second[i][1]); + addNode(it->second[i][2], getNodeDefId(nodeName), it->second[i][1]); _addNewNode = true; memset(input, '\0', sizeof(input)); } @@ -3415,15 +3446,16 @@ void Graph::addNodePopup(bool cursor) } else { - ImGui::SetNextWindowSizeConstraints(ImVec2(100, 10), ImVec2(250, 300)); + ImGui::SetNextWindowSizeConstraints(ImVec2(100, 10), ImVec2(-1, 300)); if (ImGui::BeginMenu(it->first.c_str())) { + ImGui::SetWindowFontScale(_fontScale); for (size_t j = 0; j < it->second.size(); j++) { std::string name = it->second[j][0]; - if (ImGui::MenuItem(name.substr(3, name.length()).c_str()) || (ImGui::IsItemFocused() && ImGui::IsKeyPressedMap(ImGuiKey_Enter))) + if (ImGui::MenuItem(getNodeDefId(name).c_str()) || (ImGui::IsItemFocused() && ImGui::IsKeyPressedMap(ImGuiKey_Enter))) { - addNode(it->second[j][2], name.substr(3, name.length()), it->second[j][1]); + addNode(it->second[j][2], getNodeDefId(name), it->second[j][1]); _addNewNode = true; } } @@ -3437,15 +3469,17 @@ void Graph::addNodePopup(bool cursor) // filter out list of nodes if (subs.size() > 0) { + ImGui::SetNextWindowSizeConstraints(ImVec2(250.0f, 300.0f), ImVec2(-1.0f, 500.0f)); for (size_t i = 0; i < it->second.size(); i++) { std::string str(it->second[i]->getName()); std::string nodeName = it->second[i]->getName(); if (str.find(subs) != std::string::npos) { - if (ImGui::MenuItem(it->second[i]->getName().substr(3, nodeName.length()).c_str()) || (ImGui::IsItemFocused() && ImGui::IsKeyPressedMap(ImGuiKey_Enter))) + std::string val = getNodeDefId(nodeName); + if (ImGui::MenuItem(val.c_str()) || (ImGui::IsItemFocused() && ImGui::IsKeyPressedMap(ImGuiKey_Enter))) { - addNode(it->second[i]->getNodeString(), it->second[i]->getName().substr(3, nodeName.length()), it->second[i]->getType()); + addNode(it->second[i]->getNodeString(), val, it->second[i]->getType()); _addNewNode = true; memset(input, '\0', sizeof(input)); } @@ -3454,16 +3488,17 @@ void Graph::addNodePopup(bool cursor) } else { - ImGui::SetNextWindowSizeConstraints(ImVec2(100, 10), ImVec2(250, 300)); + ImGui::SetNextWindowSizeConstraints(ImVec2(100, 10), ImVec2(-1, 300)); if (ImGui::BeginMenu(it->first.c_str())) { + ImGui::SetWindowFontScale(_fontScale); for (size_t i = 0; i < it->second.size(); i++) { - std::string name = it->second[i]->getName(); - if (ImGui::MenuItem(it->second[i]->getName().substr(3, name.length()).c_str()) || (ImGui::IsItemFocused() && ImGui::IsKeyPressedMap(ImGuiKey_Enter))) + std::string val = getNodeDefId(name); + if (ImGui::MenuItem(val.c_str()) || (ImGui::IsItemFocused() && ImGui::IsKeyPressedMap(ImGuiKey_Enter))) { - addNode(it->second[i]->getNodeString(), it->second[i]->getName().substr(3, name.length()), it->second[i]->getType()); + addNode(it->second[i]->getNodeString(), val, it->second[i]->getType()); _addNewNode = true; } } @@ -3630,7 +3665,7 @@ void Graph::drawGraph(ImVec2 mousePos) ed::Suspend(); // set up pop ups for adding a node when tab is pressed ImGui::PushStyleVar(ImGuiStyleVar_WindowPadding, ImVec2(8.f, 8.f)); - ImGui::SetNextWindowSize({ 250.0f, 300.0f }); + ImGui::SetNextWindowSizeConstraints(ImVec2(250.0f, 300.0f), ImVec2(-1.0f, 500.0f)); addNodePopup(TextCursor); searchNodePopup(TextCursor); readOnlyPopup(); diff --git a/source/MaterialXGraphEditor/Graph.h b/source/MaterialXGraphEditor/Graph.h index bb56a06ab0..68140cdaae 100644 --- a/source/MaterialXGraphEditor/Graph.h +++ b/source/MaterialXGraphEditor/Graph.h @@ -87,9 +87,9 @@ class Graph void setPinColor(); void DrawPinIcon(std::string type, bool connected, int alpha); UiPinPtr getPin(ed::PinId id); - void createInputPin(UiPinPtr pin); + void drawInputPin(UiPinPtr pin); ed::PinId getOutputPin(UiNodePtr node, UiNodePtr inputNode, UiPinPtr input); - void outputPin(UiNodePtr node); + void drawOutputPins(UiNodePtr node, const std::string& longestInputLabel); void addNodeGraphPins(); // UiNode functions diff --git a/source/PyMaterialX/PyMaterialXCore/PyUtil.cpp b/source/PyMaterialX/PyMaterialXCore/PyUtil.cpp index 81ba538b1a..826c5adf84 100644 --- a/source/PyMaterialX/PyMaterialXCore/PyUtil.cpp +++ b/source/PyMaterialX/PyMaterialXCore/PyUtil.cpp @@ -23,6 +23,7 @@ void bindPyUtil(py::module& mod) mod.def("splitString", &mx::splitString); mod.def("joinStrings", &mx::joinStrings); mod.def("replaceSubstrings", &mx::replaceSubstrings); + mod.def("stringStartsWith", &mx::stringStartsWith); mod.def("stringEndsWith", &mx::stringEndsWith); mod.def("splitNamePath", &mx::splitNamePath); mod.def("createNamePath", &mx::createNamePath); From 0eb9d5d3c1c5b53a7b0a6d4876c9e47606bac31e Mon Sep 17 00:00:00 2001 From: Bernard Kwok Date: Wed, 17 May 2023 17:52:06 -0400 Subject: [PATCH 04/42] Standardize document formatting (#1353) - Add `mxformat` Python script to format files. This merges in logic from `mxupdate` and replaces that script. - Run on `libraries` and `resources` and `upgrade` folders to update formatting. --- .github/workflows/main.yml | 2 +- libraries/bxdf/disney_brdf_2012.mtlx | 2 +- libraries/bxdf/disney_brdf_2015.mtlx | 2 +- libraries/bxdf/gltf_pbr.mtlx | 18 +- libraries/bxdf/standard_surface.mtlx | 2 +- .../standard_surface_to_gltf_pbr.mtlx | 4 +- libraries/bxdf/usd_preview_surface.mtlx | 4 +- .../lights/genmsl/lights_genmsl_impl.mtlx | 8 +- libraries/stdlib/stdlib_defs.mtlx | 8 +- libraries/stdlib/stdlib_ng.mtlx | 20 +- libraries/targets/essl.mtlx | 8 +- libraries/targets/genglsl.mtlx | 12 +- libraries/targets/genmdl.mtlx | 12 +- libraries/targets/genmsl.mtlx | 12 +- libraries/targets/genosl.mtlx | 12 +- python/Scripts/mxformat.py | 84 +++ python/Scripts/mxupdate.py | 50 -- resources/Lights/envmap_shader.mtlx | 100 ++-- .../standard_surface_marble_solid.mtlx | 2 +- resources/Materials/TestSuite/_options.mtlx | 46 +- .../TestSuite/locale/numericformat.mtlx | 2 +- .../Materials/TestSuite/locale/utf8.mtlx | 4 +- .../TestSuite/pbrlib/bsdf/mix_bsdf.mtlx | 2 +- .../pbrlib/bsdf/vertical_layering.mtlx | 554 +++++++++--------- .../pbrlib/multioutput/multishaderoutput.mtlx | 2 +- .../pbrlib/surfaceshader/lama_tests.mtlx | 2 +- .../pbrlib/surfaceshader/usd_uv_texture.mtlx | 16 +- .../TestSuite/stdlib/convert/convert.mtlx | 2 +- .../definition_reduced_interface.mtlx | 19 +- .../geometric/look_assignment_order.mtlx | 2 +- .../materials/material_node_discovery.mtlx | 22 +- .../nodegraph_multioutput.mtlx | 16 +- .../TestSuite/stdlib/texture/tokenGraph.mtlx | 58 +- .../stdlib/upgrade/1_36_to_1_37.mtlx | 46 +- .../stdlib/upgrade/1_37_to_1_38.mtlx | 72 +-- 35 files changed, 630 insertions(+), 597 deletions(-) create mode 100644 python/Scripts/mxformat.py delete mode 100644 python/Scripts/mxupdate.py diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 4ebf5a0641..8e68529175 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -196,7 +196,7 @@ jobs: run: | python MaterialXTest/main.py python MaterialXTest/genshader.py - python Scripts/mxupdate.py ../resources/Materials/TestSuite/stdlib/upgrade --yes + python Scripts/mxformat.py ../resources/Materials/TestSuite/stdlib/upgrade --yes --upgradeVersion True python Scripts/mxvalidate.py ../resources/Materials/Examples/StandardSurface/standard_surface_marble_solid.mtlx --stdlib --verbose python Scripts/mxdoc.py --docType md ../libraries/pbrlib/pbrlib_defs.mtlx python Scripts/mxdoc.py --docType html ../libraries/bxdf/standard_surface.mtlx diff --git a/libraries/bxdf/disney_brdf_2012.mtlx b/libraries/bxdf/disney_brdf_2012.mtlx index 335ca25d46..1bf785ecd7 100644 --- a/libraries/bxdf/disney_brdf_2012.mtlx +++ b/libraries/bxdf/disney_brdf_2012.mtlx @@ -1,6 +1,6 @@ - + diff --git a/libraries/bxdf/disney_brdf_2015.mtlx b/libraries/bxdf/disney_brdf_2015.mtlx index cf1a16254a..0eb6c90f9e 100644 --- a/libraries/bxdf/disney_brdf_2015.mtlx +++ b/libraries/bxdf/disney_brdf_2015.mtlx @@ -1,6 +1,6 @@ - + diff --git a/libraries/bxdf/gltf_pbr.mtlx b/libraries/bxdf/gltf_pbr.mtlx index b677b0dba8..a134faea16 100644 --- a/libraries/bxdf/gltf_pbr.mtlx +++ b/libraries/bxdf/gltf_pbr.mtlx @@ -356,7 +356,7 @@ - + + --> @@ -596,7 +596,7 @@ + --> @@ -611,7 +611,7 @@ - + @@ -649,7 +649,7 @@ + --> @@ -745,5 +745,5 @@ - + diff --git a/libraries/bxdf/standard_surface.mtlx b/libraries/bxdf/standard_surface.mtlx index 52c4a8b1b9..843885aa50 100644 --- a/libraries/bxdf/standard_surface.mtlx +++ b/libraries/bxdf/standard_surface.mtlx @@ -399,7 +399,7 @@ - + diff --git a/libraries/bxdf/translation/standard_surface_to_gltf_pbr.mtlx b/libraries/bxdf/translation/standard_surface_to_gltf_pbr.mtlx index 8bd14fd24e..6cb6fcb3b5 100644 --- a/libraries/bxdf/translation/standard_surface_to_gltf_pbr.mtlx +++ b/libraries/bxdf/translation/standard_surface_to_gltf_pbr.mtlx @@ -32,7 +32,7 @@ - + @@ -70,7 +70,7 @@ - + diff --git a/libraries/bxdf/usd_preview_surface.mtlx b/libraries/bxdf/usd_preview_surface.mtlx index b21bc7dd20..984bad0326 100644 --- a/libraries/bxdf/usd_preview_surface.mtlx +++ b/libraries/bxdf/usd_preview_surface.mtlx @@ -30,11 +30,11 @@ - + - + diff --git a/libraries/lights/genmsl/lights_genmsl_impl.mtlx b/libraries/lights/genmsl/lights_genmsl_impl.mtlx index df128e5663..1b1782638c 100644 --- a/libraries/lights/genmsl/lights_genmsl_impl.mtlx +++ b/libraries/lights/genmsl/lights_genmsl_impl.mtlx @@ -1,13 +1,13 @@ - + - + - + - + diff --git a/libraries/stdlib/stdlib_defs.mtlx b/libraries/stdlib/stdlib_defs.mtlx index 6922ab3317..fe81d56353 100644 --- a/libraries/stdlib/stdlib_defs.mtlx +++ b/libraries/stdlib/stdlib_defs.mtlx @@ -1004,7 +1004,7 @@ - + - + - + @@ -2156,7 +2156,7 @@ - + diff --git a/libraries/targets/essl.mtlx b/libraries/targets/essl.mtlx index 5e378f7d70..1306d32fe7 100644 --- a/libraries/targets/essl.mtlx +++ b/libraries/targets/essl.mtlx @@ -1,11 +1,11 @@ - - - - diff --git a/libraries/targets/genglsl.mtlx b/libraries/targets/genglsl.mtlx index 9fc36bea1d..9bd382c482 100644 --- a/libraries/targets/genglsl.mtlx +++ b/libraries/targets/genglsl.mtlx @@ -1,11 +1,11 @@ - - - + + + diff --git a/libraries/targets/genmdl.mtlx b/libraries/targets/genmdl.mtlx index b63747cfe9..04c7ec18bb 100644 --- a/libraries/targets/genmdl.mtlx +++ b/libraries/targets/genmdl.mtlx @@ -1,11 +1,11 @@ - - - + + + diff --git a/libraries/targets/genmsl.mtlx b/libraries/targets/genmsl.mtlx index d18c45ca58..4e0a206b00 100644 --- a/libraries/targets/genmsl.mtlx +++ b/libraries/targets/genmsl.mtlx @@ -1,11 +1,11 @@ - - - + + + diff --git a/libraries/targets/genosl.mtlx b/libraries/targets/genosl.mtlx index 3f0438d2bf..314f065aa1 100644 --- a/libraries/targets/genosl.mtlx +++ b/libraries/targets/genosl.mtlx @@ -1,11 +1,11 @@ - - - + + + diff --git a/python/Scripts/mxformat.py b/python/Scripts/mxformat.py new file mode 100644 index 0000000000..81ba3f72ea --- /dev/null +++ b/python/Scripts/mxformat.py @@ -0,0 +1,84 @@ +#!/usr/bin/env python +''' +Format MaterialX document content by reanding and writing files. Optionally +upgrade the document version. +''' + +import sys, os, argparse +import MaterialX as mx + +def getFiles(rootPath): + filelist = [] + for subdir, dirs, files in os.walk(rootPath): + for file in files: + if file.endswith('mtlx'): + filelist.append(os.path.join(subdir, file)) + return filelist + +def main(): + parser = argparse.ArgumentParser(description="Format document by reading the file and writing it back out. Optionally update to the latest version.") + parser.add_argument("--yes", dest="yes", action="store_true", help="Proceed without asking for confirmation from the user.") + parser.add_argument('--checkForChanges', dest='checkForChanges', type=mx.stringToBoolean, default=True, help='Check if a file has changed. Default is True') + parser.add_argument('--upgradeVersion', dest='upgradeVersion', type=mx.stringToBoolean, default=False, help='Upgrade the document version. Default is False') + parser.add_argument(dest="inputFolder", help="An input folder to scan for MaterialX documents.") + opts = parser.parse_args() + + fileList = [] + rootPath = opts.inputFolder + if os.path.isdir(rootPath): + fileList = getFiles(rootPath) + else: + fileList.append(rootPath) + + # Preserve version, comments and newlines + readOptions = mx.XmlReadOptions() + readOptions.readComments = True + readOptions.readNewlines = True + readOptions.upgradeVersion = opts.upgradeVersion + + validDocs = dict() + for filename in fileList: + doc = mx.createDocument() + try: + mx.readFromXmlFile(doc, filename, mx.FileSearchPath(), readOptions) + validDocs[filename] = doc + except mx.Exception: + pass + + if not validDocs: + print('No MaterialX documents were found in "%s"' % (opts.inputFolder)) + return + + print('Found %s MaterialX files in "%s"' % (len(validDocs), opts.inputFolder)) + + mxVersion = mx.getVersionIntegers() + + if not opts.yes: + question = 'Would you like to update all %i documents in place (y/n)?' % len(validDocs) + if opts.upgradeVersion: + question = 'Would you like to update all %i documents to MaterialX v%i.%i in place (y/n)?' % (len(validDocs), mxVersion[0], mxVersion[1]) + answer = input(question) + if answer != 'y' and answer != 'Y': + return + + writeCount = 0 + for (filename, doc) in validDocs.items(): + writeFile = True + if opts.checkForChanges: + origString = mx.readFile(filename) + docString = mx.writeToXmlString(doc) + if origString == docString: + writeFile = False + + if writeFile: + writeCount = writeCount + 1 + print('- Updated file %s.' % filename) + mx.writeToXmlFile(doc, filename) + + if opts.upgradeVersion: + print('Updated %i documents to MaterialX v%i.%i' % (writeCount, mxVersion[0], mxVersion[1])) + else: + print('Updated %i documents ' % writeCount) + +if __name__ == '__main__': + main() diff --git a/python/Scripts/mxupdate.py b/python/Scripts/mxupdate.py deleted file mode 100644 index fdbeda28b7..0000000000 --- a/python/Scripts/mxupdate.py +++ /dev/null @@ -1,50 +0,0 @@ -#!/usr/bin/env python -''' -Update MaterialX files within the given folder to the latest version. -''' - -import sys, os, argparse -import MaterialX as mx - -def main(): - parser = argparse.ArgumentParser(description="Update MaterialX files within the given folder to the latest version.") - parser.add_argument("--yes", dest="yes", action="store_true", help="Proceed without asking for confirmation from the user.") - parser.add_argument(dest="inputFolder", help="An input folder to scan for MaterialX documents.") - opts = parser.parse_args() - - validDocs = dict() - for root, dirs, files in os.walk(opts.inputFolder): - for file in files: - if file.endswith('.mtlx'): - filename = os.path.join(root, file) - doc = mx.createDocument() - try: - readOptions = mx.XmlReadOptions() - readOptions.readComments = True - readOptions.readNewlines = True - mx.readFromXmlFile(doc, filename, mx.FileSearchPath(), readOptions) - validDocs[filename] = doc - except mx.Exception: - pass - - if not validDocs: - print('No MaterialX documents were found in %s' % (opts.inputFolder)) - return - - print('Found %s MaterialX files in %s' % (len(validDocs), opts.inputFolder)) - - mxVersion = mx.getVersionIntegers() - - if not opts.yes: - question = 'Would you like to update all %i documents to MaterialX v%i.%i in place (y/n)?' % (len(validDocs), mxVersion[0], mxVersion[1]) - answer = input(question) - if answer != 'y' and answer != 'Y': - return - - for (filename, doc) in validDocs.items(): - mx.writeToXmlFile(doc, filename) - - print('Updated %i documents to MaterialX v%i.%i' % (len(validDocs), mxVersion[0], mxVersion[1])) - -if __name__ == '__main__': - main() diff --git a/resources/Lights/envmap_shader.mtlx b/resources/Lights/envmap_shader.mtlx index 2f6ff52a23..8c9c6ec0f5 100644 --- a/resources/Lights/envmap_shader.mtlx +++ b/resources/Lights/envmap_shader.mtlx @@ -1,59 +1,59 @@ - - - - - - - - + + + + + + + + - - + + - - - - - - - - - - - - - + + + + + + + + + + + + + - - - - - - - - - - - - + + + + + + + + + + + + - - - - - - - - - - - - + + + + + + + + + + + + - - - + + + diff --git a/resources/Materials/Examples/StandardSurface/standard_surface_marble_solid.mtlx b/resources/Materials/Examples/StandardSurface/standard_surface_marble_solid.mtlx index 8b780bb03c..dd55fd9096 100644 --- a/resources/Materials/Examples/StandardSurface/standard_surface_marble_solid.mtlx +++ b/resources/Materials/Examples/StandardSurface/standard_surface_marble_solid.mtlx @@ -21,7 +21,7 @@ - + diff --git a/resources/Materials/TestSuite/_options.mtlx b/resources/Materials/TestSuite/_options.mtlx index 3f09c9bb3d..8716cba5f0 100644 --- a/resources/Materials/TestSuite/_options.mtlx +++ b/resources/Materials/TestSuite/_options.mtlx @@ -12,17 +12,17 @@ --> - + - - + + - + - + @@ -101,34 +101,34 @@ - - - - + + + + - - - - + + + + - - - - - + + + + + - - - - - + + + + + diff --git a/resources/Materials/TestSuite/locale/numericformat.mtlx b/resources/Materials/TestSuite/locale/numericformat.mtlx index b9400e270c..a0995bff65 100644 --- a/resources/Materials/TestSuite/locale/numericformat.mtlx +++ b/resources/Materials/TestSuite/locale/numericformat.mtlx @@ -1,7 +1,7 @@ - + diff --git a/resources/Materials/TestSuite/locale/utf8.mtlx b/resources/Materials/TestSuite/locale/utf8.mtlx index a6a30f02d2..38393d48de 100644 --- a/resources/Materials/TestSuite/locale/utf8.mtlx +++ b/resources/Materials/TestSuite/locale/utf8.mtlx @@ -3,8 +3,8 @@ - - + + diff --git a/resources/Materials/TestSuite/pbrlib/bsdf/mix_bsdf.mtlx b/resources/Materials/TestSuite/pbrlib/bsdf/mix_bsdf.mtlx index 58107f3353..abf840d3e7 100644 --- a/resources/Materials/TestSuite/pbrlib/bsdf/mix_bsdf.mtlx +++ b/resources/Materials/TestSuite/pbrlib/bsdf/mix_bsdf.mtlx @@ -84,7 +84,7 @@ - + diff --git a/resources/Materials/TestSuite/pbrlib/bsdf/vertical_layering.mtlx b/resources/Materials/TestSuite/pbrlib/bsdf/vertical_layering.mtlx index 8666126196..206f6b1f00 100644 --- a/resources/Materials/TestSuite/pbrlib/bsdf/vertical_layering.mtlx +++ b/resources/Materials/TestSuite/pbrlib/bsdf/vertical_layering.mtlx @@ -1,293 +1,293 @@ - - - - - - - - - - - - - - + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/resources/Materials/TestSuite/pbrlib/multioutput/multishaderoutput.mtlx b/resources/Materials/TestSuite/pbrlib/multioutput/multishaderoutput.mtlx index 2b1f951e84..7456b088d9 100644 --- a/resources/Materials/TestSuite/pbrlib/multioutput/multishaderoutput.mtlx +++ b/resources/Materials/TestSuite/pbrlib/multioutput/multishaderoutput.mtlx @@ -5,7 +5,7 @@ - + diff --git a/resources/Materials/TestSuite/pbrlib/surfaceshader/lama_tests.mtlx b/resources/Materials/TestSuite/pbrlib/surfaceshader/lama_tests.mtlx index 809d93d265..6862892c7e 100644 --- a/resources/Materials/TestSuite/pbrlib/surfaceshader/lama_tests.mtlx +++ b/resources/Materials/TestSuite/pbrlib/surfaceshader/lama_tests.mtlx @@ -197,4 +197,4 @@ --> - + diff --git a/resources/Materials/TestSuite/pbrlib/surfaceshader/usd_uv_texture.mtlx b/resources/Materials/TestSuite/pbrlib/surfaceshader/usd_uv_texture.mtlx index 56aa1ffaf1..5ec661bffa 100644 --- a/resources/Materials/TestSuite/pbrlib/surfaceshader/usd_uv_texture.mtlx +++ b/resources/Materials/TestSuite/pbrlib/surfaceshader/usd_uv_texture.mtlx @@ -1,18 +1,18 @@ - + - + - + - + - + @@ -27,10 +27,10 @@ - + - + @@ -42,5 +42,5 @@ - + diff --git a/resources/Materials/TestSuite/stdlib/convert/convert.mtlx b/resources/Materials/TestSuite/stdlib/convert/convert.mtlx index 0d850fd763..8999ece9e0 100644 --- a/resources/Materials/TestSuite/stdlib/convert/convert.mtlx +++ b/resources/Materials/TestSuite/stdlib/convert/convert.mtlx @@ -20,7 +20,7 @@ - + diff --git a/resources/Materials/TestSuite/stdlib/definition/definition_reduced_interface.mtlx b/resources/Materials/TestSuite/stdlib/definition/definition_reduced_interface.mtlx index f107fd2fd5..7b1c09902d 100644 --- a/resources/Materials/TestSuite/stdlib/definition/definition_reduced_interface.mtlx +++ b/resources/Materials/TestSuite/stdlib/definition/definition_reduced_interface.mtlx @@ -1,6 +1,6 @@ - + - + - + - + - + - + - + - + @@ -43,6 +43,5 @@ - - + diff --git a/resources/Materials/TestSuite/stdlib/geometric/look_assignment_order.mtlx b/resources/Materials/TestSuite/stdlib/geometric/look_assignment_order.mtlx index feaff6f993..ec8537f56f 100644 --- a/resources/Materials/TestSuite/stdlib/geometric/look_assignment_order.mtlx +++ b/resources/Materials/TestSuite/stdlib/geometric/look_assignment_order.mtlx @@ -4,7 +4,7 @@ is assumed to be the default shader ball with the intended result being that the Preview mesh is "blue" and the Calibration mesh is "red. - --> + --> diff --git a/resources/Materials/TestSuite/stdlib/materials/material_node_discovery.mtlx b/resources/Materials/TestSuite/stdlib/materials/material_node_discovery.mtlx index 078db50a14..ad6ef8f1b6 100644 --- a/resources/Materials/TestSuite/stdlib/materials/material_node_discovery.mtlx +++ b/resources/Materials/TestSuite/stdlib/materials/material_node_discovery.mtlx @@ -4,31 +4,31 @@ - + - + - + - + - - + + - + - + @@ -37,13 +37,13 @@ - + - + - + diff --git a/resources/Materials/TestSuite/stdlib/nodegraph_inputs/nodegraph_multioutput.mtlx b/resources/Materials/TestSuite/stdlib/nodegraph_inputs/nodegraph_multioutput.mtlx index baa6e5faec..c5450d368c 100644 --- a/resources/Materials/TestSuite/stdlib/nodegraph_inputs/nodegraph_multioutput.mtlx +++ b/resources/Materials/TestSuite/stdlib/nodegraph_inputs/nodegraph_multioutput.mtlx @@ -1,8 +1,8 @@ - + - + @@ -13,19 +13,19 @@ - + - + - - + + - - + + diff --git a/resources/Materials/TestSuite/stdlib/texture/tokenGraph.mtlx b/resources/Materials/TestSuite/stdlib/texture/tokenGraph.mtlx index a15bcbf8eb..773576466e 100644 --- a/resources/Materials/TestSuite/stdlib/texture/tokenGraph.mtlx +++ b/resources/Materials/TestSuite/stdlib/texture/tokenGraph.mtlx @@ -1,34 +1,34 @@ - - - - - - - - - - + + + + + + + + + + - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + diff --git a/resources/Materials/TestSuite/stdlib/upgrade/1_36_to_1_37.mtlx b/resources/Materials/TestSuite/stdlib/upgrade/1_36_to_1_37.mtlx index b74eba6f5f..0a0b3fd720 100644 --- a/resources/Materials/TestSuite/stdlib/upgrade/1_36_to_1_37.mtlx +++ b/resources/Materials/TestSuite/stdlib/upgrade/1_36_to_1_37.mtlx @@ -8,15 +8,15 @@ Upgrade path test from 1.36 to 1.37 - + - + - + @@ -33,7 +33,7 @@ Upgrade path test from 1.36 to 1.37 - + @@ -92,45 +92,45 @@ Upgrade path test from 1.36 to 1.37 - - + + - - + + - - + + - - + + - - + + - - + + - + - - - + + + - + @@ -173,10 +173,10 @@ Upgrade path test from 1.36 to 1.37 - + - + diff --git a/resources/Materials/TestSuite/stdlib/upgrade/1_37_to_1_38.mtlx b/resources/Materials/TestSuite/stdlib/upgrade/1_37_to_1_38.mtlx index 9ef09bb457..28b9ae8ad2 100644 --- a/resources/Materials/TestSuite/stdlib/upgrade/1_37_to_1_38.mtlx +++ b/resources/Materials/TestSuite/stdlib/upgrade/1_37_to_1_38.mtlx @@ -1,40 +1,40 @@ - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - + + + + + + + + + + + + + From 75fb20a9123fbf1002ebaf121981bd7c1daafe28 Mon Sep 17 00:00:00 2001 From: Chris Rydalch Date: Thu, 18 May 2023 12:10:08 -0500 Subject: [PATCH 05/42] Add a 2d checkerboard pattern node (#1328) --- libraries/stdlib/stdlib_defs.mtlx | 13 +++++++++ libraries/stdlib/stdlib_ng.mtlx | 48 +++++++++++++++++++++++++++++++ 2 files changed, 61 insertions(+) diff --git a/libraries/stdlib/stdlib_defs.mtlx b/libraries/stdlib/stdlib_defs.mtlx index fe81d56353..f8a9efe35d 100644 --- a/libraries/stdlib/stdlib_defs.mtlx +++ b/libraries/stdlib/stdlib_defs.mtlx @@ -1024,6 +1024,19 @@ + + + + + + + + + + diff --git a/libraries/stdlib/stdlib_ng.mtlx b/libraries/stdlib/stdlib_ng.mtlx index d6dad87ebc..b8be561352 100644 --- a/libraries/stdlib/stdlib_ng.mtlx +++ b/libraries/stdlib/stdlib_ng.mtlx @@ -1160,6 +1160,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From 5f4404178469d8800f99f3645e01589bd9e7027e Mon Sep 17 00:00:00 2001 From: Jonathan Stone Date: Thu, 18 May 2023 16:16:19 -0700 Subject: [PATCH 06/42] Use standard nodes in unit conversion This changelist simplifies unit conversion by injecting standard nodes, rather than custom unit conversion nodes, during shader generation. This removes the need for language-specific implementation files for unit conversion, and aligns the approach for unit management with that of color space management. --- libraries/README.md | 4 - .../genglsl/stdlib_genglsl_unit_impl.mtlx | 18 --- .../genmdl/stdlib_genmdl_unit_impl.mtlx | 18 --- .../genmsl/stdlib_genmsl_unit_impl.mtlx | 18 --- .../genosl/stdlib_genosl_unit_impl.mtlx | 18 --- source/MaterialXGenShader/UnitSystem.cpp | 107 +++++------------- source/MaterialXGenShader/UnitSystem.h | 4 +- source/MaterialXRender/ShaderMaterial.h | 4 - source/MaterialXRenderGlsl/GlslMaterial.cpp | 39 ------- source/MaterialXRenderGlsl/GlslMaterial.h | 4 - source/MaterialXRenderMsl/MslMaterial.h | 4 - source/MaterialXRenderMsl/MslMaterial.mm | 39 ------- source/MaterialXView/Viewer.cpp | 5 +- 13 files changed, 31 insertions(+), 251 deletions(-) delete mode 100644 libraries/stdlib/genglsl/stdlib_genglsl_unit_impl.mtlx delete mode 100644 libraries/stdlib/genmdl/stdlib_genmdl_unit_impl.mtlx delete mode 100644 libraries/stdlib/genmsl/stdlib_genmsl_unit_impl.mtlx delete mode 100644 libraries/stdlib/genosl/stdlib_genosl_unit_impl.mtlx diff --git a/libraries/README.md b/libraries/README.md index e245953a82..bf932e9b47 100644 --- a/libraries/README.md +++ b/libraries/README.md @@ -9,19 +9,15 @@ This folder contains the standard data libraries for MaterialX, providing declar - [genglsl](stdlib/genglsl): GLSL language support. - [lib](stdlib/genglsl/lib) : Shader utility files. - [stdlib_genglsl_impl.mtlx](stdlib/genglsl/stdlib_genglsl_impl.mtlx) : Mapping from declarations to implementations. - - [stdlib_genglsl_unit_impl.mtlx](stdlib/genosl/stdlib_genglsl_unit_impl.mtlx) : Real world unit support implementations. - [genosl](stdlib/genosl): OSL language support. - [lib](stdlib/genosl/lib) : Shader utility files. - [stdlib_genosl_impl.mtlx](stdlib/genosl/stdlib_genosl_impl.mtlx) : Mapping from declarations to implementations. - - [stdlib_genosl_unit_impl.mtlx](stdlib/genosl/stdlib_genosl_unit_impl.mtlx) : Real world unit support implementations. - [genmdl](stdlib/genmdl): MDL language support. - [stdlib_genmdl_impl.mtlx](stdlib/genmdl/stdlib_genmdl_impl.mtlx) : Mapping from declarations to implementations. - - [stdlib_genmdl_unit_impl.mtlx](stdlib/genmdl/stdlib_genmdl_unit_impl.mtlx) : Real world unit support implementations. - Additional MaterialX support libraries for MDL are located in the [source/MaterialXGenMdl/mdl/materialx](../source/MaterialXGenMdl/mdl/materialx) package folder - [genmsl](stdlib/genmsl): MSL language support. - [lib](stdlib/genmsl/lib) : Shader utility files. - [stdlib_genmsl_impl.mtlx](stdlib/genmsl/stdlib_genmsl_impl.mtlx) : Mapping from declarations to implementations. - - [stdlib_genmsl_unit_impl.mtlx](stdlib/genmsl/stdlib_genmsl_unit_impl.mtlx) : Real world unit support implementations. ## Physically Based Shading Library - [pbrlib](pbrlib) diff --git a/libraries/stdlib/genglsl/stdlib_genglsl_unit_impl.mtlx b/libraries/stdlib/genglsl/stdlib_genglsl_unit_impl.mtlx deleted file mode 100644 index d9cb96606b..0000000000 --- a/libraries/stdlib/genglsl/stdlib_genglsl_unit_impl.mtlx +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - - - - - - - - - diff --git a/libraries/stdlib/genmdl/stdlib_genmdl_unit_impl.mtlx b/libraries/stdlib/genmdl/stdlib_genmdl_unit_impl.mtlx deleted file mode 100644 index c11760edf8..0000000000 --- a/libraries/stdlib/genmdl/stdlib_genmdl_unit_impl.mtlx +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - - - - - - - - - diff --git a/libraries/stdlib/genmsl/stdlib_genmsl_unit_impl.mtlx b/libraries/stdlib/genmsl/stdlib_genmsl_unit_impl.mtlx deleted file mode 100644 index da1d433bef..0000000000 --- a/libraries/stdlib/genmsl/stdlib_genmsl_unit_impl.mtlx +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - - - - - - - - - diff --git a/libraries/stdlib/genosl/stdlib_genosl_unit_impl.mtlx b/libraries/stdlib/genosl/stdlib_genosl_unit_impl.mtlx deleted file mode 100644 index 23d97d2b25..0000000000 --- a/libraries/stdlib/genosl/stdlib_genosl_unit_impl.mtlx +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - - - - - - - - - diff --git a/source/MaterialXGenShader/UnitSystem.cpp b/source/MaterialXGenShader/UnitSystem.cpp index ce6a38b489..2b73303de7 100644 --- a/source/MaterialXGenShader/UnitSystem.cpp +++ b/source/MaterialXGenShader/UnitSystem.cpp @@ -143,18 +143,25 @@ UnitSystemPtr UnitSystem::create(const string& language) return UnitSystemPtr(new UnitSystem(language)); } -ImplementationPtr UnitSystem::getImplementation(const UnitTransform& transform, const string& unitname) const +NodeDefPtr UnitSystem::getNodeDef(const UnitTransform& transform) const { - // Search up the targetdef derivation hierarchy for a matching implementation. - TargetDefPtr targetDef = _document->getTargetDef(_target); - const StringVec targets = targetDef->getMatchingTargets(); - for (const string& target : targets) + if (!_document) { - const string implName = "IM_" + unitname + "_unit_" + transform.type->getName() + "_" + target; - ImplementationPtr impl = _document->getImplementation(implName); - if (impl) + throw ExceptionShaderGenError("No library loaded for unit system"); + } + + const string MULTIPLY_NODE_NAME = "multiply"; + for (NodeDefPtr nodeDef : _document->getMatchingNodeDefs(MULTIPLY_NODE_NAME)) + { + for (OutputPtr output : nodeDef->getOutputs()) { - return impl; + vector nodeInputs = nodeDef->getInputs(); + if (nodeInputs.size() == 2 && + nodeInputs[0]->getType() == transform.type->getName() && + nodeInputs[1]->getType() == "float") + { + return nodeDef; + } } } return nullptr; @@ -162,17 +169,17 @@ ImplementationPtr UnitSystem::getImplementation(const UnitTransform& transform, bool UnitSystem::supportsTransform(const UnitTransform& transform) const { - ImplementationPtr impl = getImplementation(transform, transform.unitType); - return impl != nullptr; + NodeDefPtr nodeDef = getNodeDef(transform); + return nodeDef != nullptr; } ShaderNodePtr UnitSystem::createNode(ShaderGraph* parent, const UnitTransform& transform, const string& name, GenContext& context) const { - ImplementationPtr impl = getImplementation(transform, transform.unitType); - if (!impl) + NodeDefPtr nodeDef = getNodeDef(transform); + if (!nodeDef) { - throw ExceptionShaderGenError("No implementation found for transform: ('" + transform.sourceUnit + "', '" + transform.targetUnit + "')."); + throw ExceptionShaderGenError("No nodedef found for transform: ('" + transform.sourceUnit + "', '" + transform.targetUnit + "')."); } // Scalar unit conversion @@ -183,75 +190,17 @@ ShaderNodePtr UnitSystem::createNode(ShaderGraph* parent, const UnitTransform& t } LinearUnitConverterPtr scalarConverter = std::dynamic_pointer_cast(_unitRegistry->getUnitConverter(scalarTypeDef)); - // Check if it's created and cached already, - // otherwise create and cache it. - ShaderNodeImplPtr nodeImpl = context.findNodeImplementation(impl->getName()); - if (!nodeImpl) - { - nodeImpl = ScalarUnitNode::create(scalarConverter); - nodeImpl->initialize(*impl, context); - context.addNodeImplementation(impl->getName(), nodeImpl); - } - // Create the node. - ShaderNodePtr shaderNode = ShaderNode::create(parent, name, nodeImpl, ShaderNode::Classification::TEXTURE); - - // Create ports on the node. - ShaderInput* input = shaderNode->addInput("in", transform.type); - if (transform.type == Type::FLOAT) - { - input->setValue(Value::createValue(1.0)); - } - else if (transform.type == Type::VECTOR2) - { - input->setValue(Value::createValue(Vector2(1.0f, 1.0))); - } - else if (transform.type == Type::VECTOR3) - { - input->setValue(Value::createValue(Vector3(1.0f, 1.0, 1.0))); - } - else if (transform.type == Type::VECTOR4) - { - input->setValue(Value::createValue(Vector4(1.0f, 1.0, 1.0, 1.0))); - } - else - { - throw ExceptionShaderGenError("Invalid type specified to unitTransform: '" + transform.type->getName() + "'"); - } + ShaderNodePtr shaderNode = ShaderNode::create(parent, name, *nodeDef, context); - // Add the conversion code + // Set ports on the node. + ShaderInput* in2 = shaderNode->getInput("in2"); + if (!in2) { - int value = scalarConverter->getUnitAsInteger(transform.sourceUnit); - if (value < 0) - { - throw ExceptionTypeError("Unrecognized source unit: " + transform.sourceUnit); - } - - ShaderInput* convertFrom = shaderNode->addInput("unit_from", Type::INTEGER); - convertFrom->setValue(Value::createValue(value)); + throw ExceptionShaderGenError("Invalid node signature for unit transform: ('" + transform.sourceUnit + "', '" + transform.targetUnit + "')."); } - - { - int value = scalarConverter->getUnitAsInteger(transform.targetUnit); - if (value < 0) - { - throw ExceptionTypeError("Unrecognized target unit: " + transform.targetUnit); - } - - ShaderInput* convertTo = shaderNode->addInput("unit_to", Type::INTEGER); - - // Create a graph input to connect to the "unit_to" if it does not already exist. - const string UNIT_TARGET_NAME = "u_" + transform.unitType + "UnitTarget"; - ShaderGraphInputSocket* globalInput = parent->getInputSocket(UNIT_TARGET_NAME); - if (!globalInput) - { - globalInput = parent->addInputSocket(UNIT_TARGET_NAME, Type::INTEGER); - } - globalInput->setValue(Value::createValue(value)); - convertTo->makeConnection(globalInput); - } - - shaderNode->addOutput("out", transform.type); + float conversionRatio = scalarConverter->conversionRatio(transform.sourceUnit, transform.targetUnit); + in2->setValue(Value::createValue(conversionRatio)); return shaderNode; } diff --git a/source/MaterialXGenShader/UnitSystem.h b/source/MaterialXGenShader/UnitSystem.h index 0720643691..d9431c4b98 100644 --- a/source/MaterialXGenShader/UnitSystem.h +++ b/source/MaterialXGenShader/UnitSystem.h @@ -78,8 +78,8 @@ class MX_GENSHADER_API UnitSystem ShaderNodePtr createNode(ShaderGraph* parent, const UnitTransform& transform, const string& name, GenContext& context) const; - /// Returns an implementation for a given transform - virtual ImplementationPtr getImplementation(const UnitTransform& transform, const string& unitname) const; + /// Returns a nodedef for a given transform + virtual NodeDefPtr getNodeDef(const UnitTransform& transform) const; static const string UNITSYTEM_NAME; diff --git a/source/MaterialXRender/ShaderMaterial.h b/source/MaterialXRender/ShaderMaterial.h index 57f50eda75..cf500463e4 100644 --- a/source/MaterialXRender/ShaderMaterial.h +++ b/source/MaterialXRender/ShaderMaterial.h @@ -118,10 +118,6 @@ class MX_RENDER_API ShaderMaterial ImageHandlerPtr imageHandler, const ShadowState& shadowState) = 0; - /// Bind units. - virtual void bindUnits(UnitConverterRegistryPtr& registry, - const GenContext& context) = 0; - /// Bind the given mesh to this ShaderMaterial. virtual void bindMesh(MeshPtr mesh) = 0; diff --git a/source/MaterialXRenderGlsl/GlslMaterial.cpp b/source/MaterialXRenderGlsl/GlslMaterial.cpp index 1332c1dce2..ef7a0ed0c2 100644 --- a/source/MaterialXRenderGlsl/GlslMaterial.cpp +++ b/source/MaterialXRenderGlsl/GlslMaterial.cpp @@ -282,45 +282,6 @@ void GlslMaterial::bindLighting(LightHandlerPtr lightHandler, ImageHandlerPtr im } } -void GlslMaterial::bindUnits(UnitConverterRegistryPtr& registry, const GenContext& context) -{ - if (!bindShader()) - { - return; - } - - ShaderPort* port = nullptr; - VariableBlock* publicUniforms = getPublicUniforms(); - if (publicUniforms) - { - // Scan block based on unit name match predicate - port = publicUniforms->find( - [](ShaderPort* port) - { - return (port && (port->getName() == DISTANCE_UNIT_TARGET_NAME)); - }); - - // Check if the uniform exists in the shader program - if (port && !_glProgram->getUniformsList().count(port->getVariable())) - { - port = nullptr; - } - } - - if (port) - { - int intPortValue = registry->getUnitAsInteger(context.getOptions().targetDistanceUnit); - if (intPortValue >= 0) - { - port->setValue(Value::createValue(intPortValue)); - if (_glProgram->hasUniform(DISTANCE_UNIT_TARGET_NAME)) - { - _glProgram->bindUniform(DISTANCE_UNIT_TARGET_NAME, Value::createValue(intPortValue)); - } - } - } -} - void GlslMaterial::drawPartition(MeshPartitionPtr part) const { if (!part || !bindPartition(part)) diff --git a/source/MaterialXRenderGlsl/GlslMaterial.h b/source/MaterialXRenderGlsl/GlslMaterial.h index 28ed87450b..1e3d0f7f3b 100644 --- a/source/MaterialXRenderGlsl/GlslMaterial.h +++ b/source/MaterialXRenderGlsl/GlslMaterial.h @@ -84,10 +84,6 @@ class MX_RENDERGLSL_API GlslMaterial : public ShaderMaterial ImageHandlerPtr imageHandler, const ShadowState& shadowState) override; - /// Bind units. - void bindUnits(UnitConverterRegistryPtr& registry, - const GenContext& context) override; - /// Bind the given mesh to this material. void bindMesh(MeshPtr mesh) override; diff --git a/source/MaterialXRenderMsl/MslMaterial.h b/source/MaterialXRenderMsl/MslMaterial.h index 45ce1b5e61..cc80af1e18 100644 --- a/source/MaterialXRenderMsl/MslMaterial.h +++ b/source/MaterialXRenderMsl/MslMaterial.h @@ -86,10 +86,6 @@ class MX_RENDERMSL_API MslMaterial : public ShaderMaterial ImageHandlerPtr imageHandler, const ShadowState& shadowState) override; - /// Bind units. - void bindUnits(UnitConverterRegistryPtr& registry, - const GenContext& context) override; - /// Bind the given mesh to this material. void bindMesh(MeshPtr mesh) override; diff --git a/source/MaterialXRenderMsl/MslMaterial.mm b/source/MaterialXRenderMsl/MslMaterial.mm index b9360104fd..7e9cd38adc 100644 --- a/source/MaterialXRenderMsl/MslMaterial.mm +++ b/source/MaterialXRenderMsl/MslMaterial.mm @@ -244,45 +244,6 @@ } } -void MslMaterial::bindUnits(UnitConverterRegistryPtr& registry, const GenContext& context) -{ - if (!bindShader()) - { - return; - } - - ShaderPort* port = nullptr; - VariableBlock* publicUniforms = getPublicUniforms(); - if (publicUniforms) - { - // Scan block based on unit name match predicate - port = publicUniforms->find( - [](ShaderPort* port) - { - return (port && (port->getName() == DISTANCE_UNIT_TARGET_NAME)); - }); - - // Check if the uniform exists in the shader program - if (port && !_glProgram->getUniformsList().count(port->getVariable())) - { - port = nullptr; - } - } - - if (port) - { - int intPortValue = registry->getUnitAsInteger(context.getOptions().targetDistanceUnit); - if (intPortValue >= 0) - { - port->setValue(Value::createValue(intPortValue)); - if (_glProgram->hasUniform(DISTANCE_UNIT_TARGET_NAME)) - { - _glProgram->bindUniform(DISTANCE_UNIT_TARGET_NAME, Value::createValue(intPortValue)); - } - } - } -} - void MslMaterial::drawPartition(MeshPartitionPtr part) const { if (!part || !bindPartition(part)) diff --git a/source/MaterialXView/Viewer.cpp b/source/MaterialXView/Viewer.cpp index d00f4c82d3..ecbb4352fc 100644 --- a/source/MaterialXView/Viewer.cpp +++ b/source/MaterialXView/Viewer.cpp @@ -920,10 +920,7 @@ void Viewer::createAdvancedSettings(Widget* parent) #if MATERIALX_BUILD_GEN_MDL _genContextMdl.getOptions().targetDistanceUnit = _distanceUnitOptions[index]; #endif - for (mx::MaterialPtr material : _materials) - { - material->bindUnits(_unitRegistry, _genContext); - } + reloadShaders(); m_process_events = true; }); From 7f838b5e71aa932f7a092c91cf440e5d449a536b Mon Sep 17 00:00:00 2001 From: Jonathan Stone Date: Sun, 21 May 2023 10:55:20 -0700 Subject: [PATCH 07/42] Validate node output types (#1360) This changelist adds a check for node output types in document validation, providing more useful feedback when evaluating new node proposals. --- source/MaterialXCore/Node.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/source/MaterialXCore/Node.cpp b/source/MaterialXCore/Node.cpp index 607d9dede5..e60076b6e7 100644 --- a/source/MaterialXCore/Node.cpp +++ b/source/MaterialXCore/Node.cpp @@ -224,6 +224,11 @@ bool Node::validate(string* message) const bool exactMatch = hasExactInputMatch(nodeDef, &matchMessage); validateRequire(exactMatch, res, message, "Node interface error: " + matchMessage); } + else + { + bool categoryDeclared = !getDocument()->getMatchingNodeDefs(getCategory()).empty(); + validateRequire(!categoryDeclared, res, message, "Node interface doesn't support this output type"); + } return InterfaceElement::validate(message) && res; } From 6a01a2ee59cd0049996f0570812be35510d13097 Mon Sep 17 00:00:00 2001 From: Jonathan Stone Date: Mon, 22 May 2023 12:57:50 -0700 Subject: [PATCH 08/42] Validate nodegraph output types (#1361) This changelist adds a check for nodegraph output types in document validation, providing more useful feedback when evaluating new node proposals. --- source/MaterialXCore/Node.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/source/MaterialXCore/Node.cpp b/source/MaterialXCore/Node.cpp index e60076b6e7..45524b116d 100644 --- a/source/MaterialXCore/Node.cpp +++ b/source/MaterialXCore/Node.cpp @@ -749,7 +749,13 @@ bool NodeGraph::validate(string* message) const validateRequire(nodeDef != nullptr, res, message, "NodeGraph implementation refers to non-existent NodeDef"); if (nodeDef) { - validateRequire(getOutputCount() == nodeDef->getActiveOutputs().size(), res, message, "NodeGraph implementation has a different number of outputs than its NodeDef"); + vector graphOutputs = getOutputs(); + vector nodeDefOutputs = nodeDef->getActiveOutputs(); + validateRequire(graphOutputs.size() == nodeDefOutputs.size(), res, message, "NodeGraph implementation has a different number of outputs than its NodeDef"); + if (graphOutputs.size() == 1 && nodeDefOutputs.size() == 1) + { + validateRequire(graphOutputs[0]->getType() == nodeDefOutputs[0]->getType(), res, message, "NodeGraph implementation has a different output type than its NodeDef"); + } } } From bd121bdf02b877f04571a66adb1077dd29c70366 Mon Sep 17 00:00:00 2001 From: Jonathan Stone Date: Mon, 22 May 2023 17:25:18 -0700 Subject: [PATCH 09/42] Improve robustness of string array parsing - Add support for parsing arrays of strings with internal spaces (e.g. "Item A, Item B, Item C") - Leverage the new parsing logic in getUIProperties. - Update the interface of LamaSSS to enable enum parsing. - Extend unit tests to validate the new logic. --- libraries/bxdf/lama/lama_sss.mtlx | 4 +- source/MaterialXCore/Value.cpp | 7 +++- source/MaterialXRender/Util.cpp | 40 +++----------------- source/MaterialXTest/MaterialXCore/Value.cpp | 4 +- 4 files changed, 15 insertions(+), 40 deletions(-) diff --git a/libraries/bxdf/lama/lama_sss.mtlx b/libraries/bxdf/lama/lama_sss.mtlx index 7c236f16a0..01db34f64f 100644 --- a/libraries/bxdf/lama/lama_sss.mtlx +++ b/libraries/bxdf/lama/lama_sss.mtlx @@ -9,7 +9,7 @@ doc="Diffuse Mean Free Path, expressed for each color channel in mm. Indicates on average how much the light travels under the surface before being scattered. The higher the value, the softer the result will be. If null, the computation simplifies to a Lambertian lobe." /> - @@ -25,7 +25,7 @@ doc="When enabled, ignores internal geometry and jumps to the last surface." /> - diff --git a/source/MaterialXCore/Value.cpp b/source/MaterialXCore/Value.cpp index 76306fbfb1..238473d5ad 100644 --- a/source/MaterialXCore/Value.cpp +++ b/source/MaterialXCore/Value.cpp @@ -84,10 +84,13 @@ template void stringToData(const string& str, enable_if_mx_matrix_t template void stringToData(const string& str, enable_if_std_vector_t& data) { - for (const string& token : splitString(str, ARRAY_VALID_SEPARATORS)) + // This code path parses an array of arbitrary substrings, so we split the string + // in a fashion that preserves substrings with internal spaces. + const string COMMA_SEPARATOR = ","; + for (const string& token : splitString(str, COMMA_SEPARATOR)) { typename T::value_type val; - stringToData(token, val); + stringToData(trimSpaces(token), val); data.push_back(val); } } diff --git a/source/MaterialXRender/Util.cpp b/source/MaterialXRender/Util.cpp index 646dc78566..169a0584a2 100644 --- a/source/MaterialXRender/Util.cpp +++ b/source/MaterialXRender/Util.cpp @@ -127,46 +127,18 @@ unsigned int getUIProperties(InputPtr input, const string& target, UIProperties& if (input->getIsUniform()) { - string enumString = input->getAttribute(ValueElement::ENUM_ATTRIBUTE); - if (!enumString.empty()) + uiProperties.enumeration = input->getTypedAttribute(ValueElement::ENUM_ATTRIBUTE); + if (!uiProperties.enumeration.empty()) { - uiProperties.enumeration = splitString(enumString, ","); - if (!uiProperties.enumeration.empty()) - propertyCount++; + propertyCount++; } - const string& enumerationValues = input->getAttribute(ValueElement::ENUM_VALUES_ATTRIBUTE); + StringVec enumerationValues = input->getTypedAttribute(ValueElement::ENUM_VALUES_ATTRIBUTE); if (!enumerationValues.empty()) { - const string& elemType = input->getType(); - const TypeDesc* typeDesc = TypeDesc::get(elemType); - if (typeDesc->isScalar() || typeDesc->isFloat2() || typeDesc->isFloat3() || - typeDesc->isFloat4()) - { - StringVec stringValues = splitString(enumerationValues, ","); - string valueString; - size_t elementCount = typeDesc->getSize(); - elementCount--; - size_t count = 0; - for (const string& val : stringValues) - { - if (count == elementCount) - { - valueString += val; - uiProperties.enumerationValues.push_back(Value::createValueFromStrings(valueString, elemType)); - valueString.clear(); - count = 0; - } - else - { - valueString += val + ","; - count++; - } - } - } - else + for (const string& val : enumerationValues) { - uiProperties.enumerationValues.push_back(Value::createValue(enumerationValues)); + uiProperties.enumerationValues.push_back(Value::createValueFromStrings(val, input->getType())); } if (uiProperties.enumeration.size() != uiProperties.enumerationValues.size()) { diff --git a/source/MaterialXTest/MaterialXCore/Value.cpp b/source/MaterialXTest/MaterialXCore/Value.cpp index 8d9f96c0e3..40d6b120e7 100644 --- a/source/MaterialXTest/MaterialXCore/Value.cpp +++ b/source/MaterialXTest/MaterialXCore/Value.cpp @@ -110,8 +110,8 @@ TEST_CASE("Typed values", "[value]") mx::BoolVec{true, true, true}); testTypedValue(mx::FloatVec{1.0f, 2.0f, 3.0f}, mx::FloatVec{4.0f, 5.0f, 6.0f}); - testTypedValue(mx::StringVec{"one", "two", "three"}, - mx::StringVec{"four", "five", "six"}); + testTypedValue(mx::StringVec{"Item A", "Item B", "Item C"}, + mx::StringVec{"Item D", "Item E", "Item F"}); // Alias types testTypedValue(1l, 2l); From a52caed7904041206c601b7348186fff96194ed0 Mon Sep 17 00:00:00 2001 From: Mostafa Azab <31315913+Cinifreak@users.noreply.github.com> Date: Wed, 24 May 2023 02:54:25 +0300 Subject: [PATCH 10/42] Add distance math node (#1333) Adding distance math node to measure the distance between two points. --- libraries/stdlib/stdlib_defs.mtlx | 20 ++++++++++++++++++ libraries/stdlib/stdlib_ng.mtlx | 35 +++++++++++++++++++++++++++++++ 2 files changed, 55 insertions(+) diff --git a/libraries/stdlib/stdlib_defs.mtlx b/libraries/stdlib/stdlib_defs.mtlx index f8a9efe35d..b6f9da35b1 100644 --- a/libraries/stdlib/stdlib_defs.mtlx +++ b/libraries/stdlib/stdlib_defs.mtlx @@ -2201,6 +2201,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From d11219cf9e358fcf3e4cd7775a26c0b51e92c671 Mon Sep 17 00:00:00 2001 From: Jonathan Stone Date: Wed, 24 May 2023 08:43:40 -0700 Subject: [PATCH 11/42] Refinements to getUIProperties - Restore support for enumerated lists of colors and vectors. - Clarify implementation logic. --- source/MaterialXRender/Util.cpp | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/source/MaterialXRender/Util.cpp b/source/MaterialXRender/Util.cpp index 169a0584a2..e8ec0f7c48 100644 --- a/source/MaterialXRender/Util.cpp +++ b/source/MaterialXRender/Util.cpp @@ -133,12 +133,27 @@ unsigned int getUIProperties(InputPtr input, const string& target, UIProperties& propertyCount++; } - StringVec enumerationValues = input->getTypedAttribute(ValueElement::ENUM_VALUES_ATTRIBUTE); - if (!enumerationValues.empty()) + const string& enumValuesAttr = input->getAttribute(ValueElement::ENUM_VALUES_ATTRIBUTE); + if (!enumValuesAttr.empty()) { - for (const string& val : enumerationValues) + const string COMMA_SEPARATOR = ","; + const TypeDesc* typeDesc = TypeDesc::get(input->getType()); + string valueString; + size_t index = 0; + for (const string& val : splitString(enumValuesAttr, COMMA_SEPARATOR)) { - uiProperties.enumerationValues.push_back(Value::createValueFromStrings(val, input->getType())); + if (index < typeDesc->getSize() - 1) + { + valueString += val + COMMA_SEPARATOR; + index++; + } + else + { + valueString += val; + uiProperties.enumerationValues.push_back(Value::createValueFromStrings(valueString, input->getType())); + valueString.clear(); + index = 0; + } } if (uiProperties.enumeration.size() != uiProperties.enumerationValues.size()) { From 99ebdf51a42104e032dda16a1bcbf1e582dcea45 Mon Sep 17 00:00:00 2001 From: Chris Rydalch Date: Fri, 26 May 2023 10:24:28 -0500 Subject: [PATCH 12/42] Add integer signature to floor and ceil (#1362) Adds support to ceil and floor to output integers. There will be other tickets/discussions around improving integer support across MaterialX, but adding integer output to these nodes first would be a big help to some nodegraph contributions we'd like to contribute soon. --- .../stdlib/genglsl/stdlib_genglsl_impl.mtlx | 2 + .../stdlib/genmdl/stdlib_genmdl_impl.mtlx | 2 + .../stdlib/genmsl/stdlib_genmsl_impl.mtlx | 2 + .../stdlib/genosl/stdlib_genosl_impl.mtlx | 2 + libraries/stdlib/stdlib_defs.mtlx | 8 ++ .../Materials/TestSuite/stdlib/math/math.mtlx | 118 ++++++++++-------- 6 files changed, 84 insertions(+), 50 deletions(-) diff --git a/libraries/stdlib/genglsl/stdlib_genglsl_impl.mtlx b/libraries/stdlib/genglsl/stdlib_genglsl_impl.mtlx index be9ef3d364..90d3120bd7 100644 --- a/libraries/stdlib/genglsl/stdlib_genglsl_impl.mtlx +++ b/libraries/stdlib/genglsl/stdlib_genglsl_impl.mtlx @@ -310,6 +310,7 @@ + @@ -318,6 +319,7 @@ + diff --git a/libraries/stdlib/genmdl/stdlib_genmdl_impl.mtlx b/libraries/stdlib/genmdl/stdlib_genmdl_impl.mtlx index f860ae7226..eb1e60167f 100644 --- a/libraries/stdlib/genmdl/stdlib_genmdl_impl.mtlx +++ b/libraries/stdlib/genmdl/stdlib_genmdl_impl.mtlx @@ -313,6 +313,7 @@ + @@ -321,6 +322,7 @@ + diff --git a/libraries/stdlib/genmsl/stdlib_genmsl_impl.mtlx b/libraries/stdlib/genmsl/stdlib_genmsl_impl.mtlx index 9687e6c6f9..fcab8fd69d 100644 --- a/libraries/stdlib/genmsl/stdlib_genmsl_impl.mtlx +++ b/libraries/stdlib/genmsl/stdlib_genmsl_impl.mtlx @@ -311,6 +311,7 @@ + @@ -319,6 +320,7 @@ + diff --git a/libraries/stdlib/genosl/stdlib_genosl_impl.mtlx b/libraries/stdlib/genosl/stdlib_genosl_impl.mtlx index 25bd6cc0b3..1ba22ef6a3 100644 --- a/libraries/stdlib/genosl/stdlib_genosl_impl.mtlx +++ b/libraries/stdlib/genosl/stdlib_genosl_impl.mtlx @@ -313,6 +313,7 @@ + @@ -321,6 +322,7 @@ + diff --git a/libraries/stdlib/stdlib_defs.mtlx b/libraries/stdlib/stdlib_defs.mtlx index b6f9da35b1..00cce2d02b 100644 --- a/libraries/stdlib/stdlib_defs.mtlx +++ b/libraries/stdlib/stdlib_defs.mtlx @@ -1699,6 +1699,10 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/resources/Materials/TestSuite/stdlib/color_management/color_management.mtlx b/resources/Materials/TestSuite/stdlib/color_management/color_management.mtlx index 1e77bc129a..ea2a9455ce 100644 --- a/resources/Materials/TestSuite/stdlib/color_management/color_management.mtlx +++ b/resources/Materials/TestSuite/stdlib/color_management/color_management.mtlx @@ -64,6 +64,20 @@ + + + + + + + + + + + + + + @@ -127,5 +141,19 @@ + + + + + + + + + + + + + + From 07311f53d07548fdea91f2c55cef85be65b475d4 Mon Sep 17 00:00:00 2001 From: Doug Smythe Date: Thu, 8 Jun 2023 15:44:23 -0700 Subject: [PATCH 15/42] Specification Updates (#1371) Updates to the v1.39 markdown spec docs. Main Specification: - Removed the earlier "Shader Nodes" section and moved its important contents to a later existing also-named "Shader Nodes" section, cleaned up the text and node descriptions. - Added clarification paragraph to "Output Nodes" section to say that "colorspace", "width", "height" and "bitdepth" are only applicable in applications that save output images, and do not affect values output to other nodes connected to this output (Slack discussion) - Added descriptions of the new <checkerboard>, <round> and <distance> nodes. Also added note about integer-output variants of <floor> and <ceil>. - Added note that geomcolor, geompropvalue and geompropvalueuniform can take a "colorspace" attribute for color3/4 values (Slack discussion) - Removed notes on "add" and "multiply" about shader-semantic variants, because you can't actually add or multiply *shaders*, only BSDF's/EDF's/VDF's, and those are covered in the PBRSpec doc. PBRSpec: - Renamed "Shader Nodes" section to "PBR Shader Nodes" to avoid conflict with main specification heading - Added links to the "displacement" and "surface_unlit" nodes in the main Spec doc Supplement: - Added "blend" input to the triplanar nodes, as this is a "no brainer" to be added officially. - Some minor formatting fixes. README: - Updated to include new/updated nodes and a few other updates. --- .../inprog_v1.39/MaterialX.PBRSpec.md | 7 +- .../inprog_v1.39/MaterialX.Specification.md | 86 +++++++++++-------- .../inprog_v1.39/MaterialX.Supplement.md | 14 +-- .../inprog_v1.39/README_v1.39.md | 17 ++-- 4 files changed, 71 insertions(+), 53 deletions(-) diff --git a/documents/Specification/inprog_v1.39/MaterialX.PBRSpec.md b/documents/Specification/inprog_v1.39/MaterialX.PBRSpec.md index 58138c8308..9a9fc7527a 100644 --- a/documents/Specification/inprog_v1.39/MaterialX.PBRSpec.md +++ b/documents/Specification/inprog_v1.39/MaterialX.PBRSpec.md @@ -37,7 +37,7 @@ This document describes a number of shader-semantic nodes implementing widely-us  [BSDF Nodes](#bsdf-nodes)  [EDF Nodes](#edf-nodes)  [VDF Nodes](#vdf-nodes) - [Shader Nodes](#shader-nodes) + [PBR Shader Nodes](#pbr-shader-nodes)  [Utility Nodes](#utility-nodes) **[Shading Model Examples](#shading-model-examples)** @@ -303,7 +303,7 @@ The PBS nodes also make use of the following standard MaterialX types: * `anisotropy` (float): Anisotropy factor, controlling the scattering direction, range [-1.0, 1.0]. Negative values give backwards scattering, positive values give forward scattering, and a value of 0.0 (the default) gives uniform scattering. -## Shader Nodes +## PBR Shader Nodes @@ -334,6 +334,9 @@ The PBS nodes also make use of the following standard MaterialX types: * `intensity` (color3): Intensity multiplier for the light's emittance. Defaults to (1.0, 1.0, 1.0). * `exposure` (float): Exposure control for the light's emittance. Defaults to 0.0. +Note that the standard library includes definitions for [**`displacement`**](./MaterialX.Specification.md#node-displacement) and [**`surface_unlit`**](./MaterialX.Specification.md#node-surfaceunlit) shader nodes. + + ## Utility Nodes diff --git a/documents/Specification/inprog_v1.39/MaterialX.Specification.md b/documents/Specification/inprog_v1.39/MaterialX.Specification.md index 6230618a5e..cad8990256 100644 --- a/documents/Specification/inprog_v1.39/MaterialX.Specification.md +++ b/documents/Specification/inprog_v1.39/MaterialX.Specification.md @@ -64,7 +64,6 @@ This document describes the core MaterialX specification. Companion documents [   [Conditional Nodes](#conditional-nodes)   [Channel Nodes](#channel-nodes)   [Convolution Nodes](#convolution-nodes) -  [Shader Nodes](#shader-nodes)  [Standard Node Inputs](#standard-node-inputs)  [Standard UI Attributes](#standard-ui-attributes) @@ -90,7 +89,7 @@ This document describes the core MaterialX specification. Companion documents [    [Example Custom Node Defined by a Nodegraph](#example-custom-node-defined-by-a-nodegraph)   [Custom Node Use](#custom-node-use)  [Shader Nodes](#shader-nodes) -  [Standard Shader-Semantic Operator Nodes](#standard-shader-semantic-operator-nodes) +  [Standard Library Shader Nodes](#standard-library-shader-nodes)   [AOV Output Elements](#aov-output-elements)    [AOVOutput Example](#aovoutput-example)  [Material Nodes](#material-nodes) @@ -620,13 +619,14 @@ Attributes for Output elements: * `nodename` (string, optional): the name of a node at the same scope within the document, whose result value will be output. This attribute is required for <output> elements within a node graph, but is not allowed in <output> elements within a <nodedef>. * `output` (string, optional): if the node specified by `nodename` has multiple outputs, the name of the specific output to connect this <output> to. * `uniform` (boolean, optional): If set to "true", then the output of this node is treated as a uniform value, and this output may be connected to a uniform input of the same (or compatible) type. It is up to the application creating the nodegraph to ensure that the value actually is uniform. Default is "false". + +MaterialX also supports the following additional attributes for Output elements in applications which process node graphs in 2D space and save or cache outputs as images for efficiency, such as texture baking or image caching. These attributes do **not** affect values from this <output> connected to other nodes, e.g. they would remain in the working colorspace and retain full resolution and bitdepth precision. + * `colorspace` (string, optional): the name of the color space for the output image. Applications that support color space management are expected to perform the required transformations of output colors into this space. * `width` (integer, optional): the expected width in pixels of the output image. * `height` (integer, optional): the expected height in pixels of the output image. * `bitdepth` (integer, optional): the expected per-channel bit depth of the output image, which may be used to capture expected color quantization effects. Common values for `bitdepth` are 8, 16, 32, and 64. It is up to the application to determine what the internal representation of any declared bit depth is (e.g. scaling factor, signed or unsigned, etc.). -The `colorspace`, `width`, `height` and `bitdepth` attributes are intended to be used in applications which process node graphs in 2D space and save or cache outputs as images for efficiency. - ## Standard Source Nodes @@ -747,6 +747,15 @@ Standard Procedural nodes: * `center` (float): a value representing the V-coordinate of the split; all pixels above "center" will be `valuet`, all pixels below "center" will be `valueb`. Default is 0.5. * `texcoord` (vector2): the name of a vector2-type node specifying the 2D texture coordinate at which the split position is evaluated. Default is to use the first set of texture coordinates. + + +* **`checkerboard`**: a 2D checkerboard pattern. + * `color1` (color3): The first color used in the checkerboard pattern. + * `color2` (color3): The second color used in the checkerboard pattern. + * `freq` (vector2): The frequency of checkers, with higher values producing smaller squares. Default is (8, 8). + * `offset` (vector2): Shift the pattern in 2d space. Default is (0, 0). + * `texcoord` (vector2): The input 2d space. Default is the first texture coordinates. + * **`noise2d`**: 2D Perlin noise in 1, 2, 3 or 4 channels. @@ -889,6 +898,8 @@ Standard Geometric nodes: * `geomprop` (uniform string): the geometric property to be referenced. * `default` (same type as the geomprop's value): a value to return if the specified `geomprop` is not defined on the current geometry. +Additionally, the `geomcolor`, `geompropvalue` and `geompropvalueuniform` nodes for color3/color4-type properties can take a `colorspace` attribute to declare what colorspace the color property value is in; the default is "none" for no colorspace declaration (and hence no colorspace conversion). + @@ -971,7 +982,7 @@ Operator nodes process one or more required input streams to form an output. Li The inputs of compositing operators are called "fg" and "bg" (plus "alpha" for float and color3 variants, and "mix" for all variants of the `mix` operator), while the inputs of other operators are called "in" if there is exactly one input, or "in1", "in2" etc. if there are more than one input. If an implementation does not support a particular operator, it should pass through the "bg", "in" or "in1" input unchanged. -This section defines the Operator Nodes that all MaterialX implementations are expected to support. Standard Operator Nodes are grouped into the following classifications: [Math Nodes](#math-nodes), [Adjustment Nodes](#adjustment-nodes), [Compositing Nodes](#compositing-nodes), [Conditional Nodes](#conditional-nodes), [Channel Nodes](#channel-nodes), [Convolution Nodes](#convolution-nodes) and [Shader Nodes](#shader-nodes). +This section defines the Operator Nodes that all MaterialX implementations are expected to support. Standard Operator Nodes are grouped into the following classifications: [Math Nodes](#math-nodes), [Adjustment Nodes](#adjustment-nodes), [Compositing Nodes](#compositing-nodes), [Conditional Nodes](#conditional-nodes), [Channel Nodes](#channel-nodes) and [Convolution Nodes](#convolution-nodes). @@ -982,7 +993,7 @@ Math nodes have one or two spatially-varying inputs, and are used to perform a m -* **`add`**: add a value to the incoming float/color/vector/matrix. See also the [Shader Nodes](#shader-nodes) section below for additional `add` variants supporting shader-semantic types. +* **`add`**: add a value to the incoming float/color/vector/matrix. * `in1` (float or colorN or vectorN or matrixNN): the value or nodename for the primary input * `in2` (same type as `in1` or float): the value or nodename to add; for matrix types, the default is the zero matrix. @@ -994,7 +1005,7 @@ Math nodes have one or two spatially-varying inputs, and are used to perform a m -* **`multiply`**: multiply an incoming float/color/vector/matrix by a value. Multiplication of two vectors is interpreted as a component-wise vector multiplication, while multiplication of two matrices is interpreted as a standard matrix product. To multiply a vector and a matrix, use one of the `transform*` nodes. See also the [Shader Nodes](#shader-nodes) section below for additional `multiply` variants supporting shader-semantic types. +* **`multiply`**: multiply an incoming float/color/vector/matrix by a value. Multiplication of two vectors is interpreted as a component-wise vector multiplication, while multiplication of two matrices is interpreted as a standard matrix product. To multiply a vector and a matrix, use one of the `transform*` nodes. * `in1` (float or colorN or vectorN or matrixNN): the value or nodename for the primary input * `in2` (same type as `in1` or float): the value or nodename to multiply by; default is 1.0 in all channels for float/color/vector types, or the identity matrix for matrix types. @@ -1022,17 +1033,17 @@ Math nodes have one or two spatially-varying inputs, and are used to perform a m -* **`floor`**: the per-channel nearest integer value less than or equal to the incoming float/color/vector; the output remains in floating point per-channel, i.e. the same type as the input. +* **`floor`**: the per-channel nearest integer value less than or equal to the incoming float/color/vector. The output remains in floating point per-channel, i.e. the same type as the input, except that the floor(float) also has a variant outputting an integer type. * `in` (float or colorN or vectorN): the input value or nodename -* **`ceil`**: the per-channel nearest integer value greater than or equal to the incoming float/color/vector; the output remains in floating point per-channel, i.e. the same type as the input. +* **`ceil`**: the per-channel nearest integer value greater than or equal to the incoming float/color/vector. The output remains in floating point per-channel, i.e. the same type as the input, except that the ceil(float) also has a variant outputting an integer type. * `in` (float or colorN or vectorN): the input value or nodename -* **`round`**: round each channel of the incoming float/color/vector values to the nearest integer value, e.g "floor(in+0.5)". +* **`round`**: round each channel of the incoming float/color/vector values to the nearest integer value, e.g "floor(in+0.5)"; the round(float) also has a variant outputting an integer type. * `in` (float or colorN or vectorN): the input value or nodename @@ -1133,6 +1144,13 @@ Math nodes have one or two spatially-varying inputs, and are used to perform a m * **`magnitude`**: output the float magnitude (vector length) of the incoming vectorN stream; cannot be used on float or colorN streams. Note: the fourth channel in vector4 streams is not treated any differently, e.g. not as a homogeneous "w" value. * `in` (vectorN): the input value or nodename + + + +* **`distance`**: Measures the distance between two points in 2D, 3D, or 4D. + * `in1` (vectorN): the first input value or nodename + * `in2` (same type as `in1`): the second input value or nodename + * **`dotproduct`**: output the (float) dot product of two incoming vectorN streams; cannot be used on float or colorN streams. @@ -1366,7 +1384,7 @@ The Mix node takes two 1-4 channel inputs `fg` and `bg` plus a separate 1-channe | **`mix`** | Fm+B(1-m) | -See also the [Shader Nodes](#shader-nodes) section below for additional `mix` operator variants supporting shader-semantic types. +See also the [Standard Library Shader Nodes](#standard-library-shader-nodes) section below for additional `mix` operator variants supporting shader-semantic types. @@ -1402,7 +1420,7 @@ Conditional nodes are used to compare values of two streams, or to select a valu * **`switch`**: output the value of one of up to ten input streams, according to the value of a selector input `which`. Switch nodes can be of output type float, colorN or vectorN, and have five inputs, in1 through in10 (not all of which must be connected), which must match the output type. - * `in1`, `in2`, `in3`, `in4`, `in5`, `in6`, `in7`, `in8`, `in9`, `in10` (float or colorN or vectorN): the values or nodenames to select from based on the value of the `which` input. The types of the various `inN` inputs must match the type of the `switch` node itself. The default value of all `inN` inputs is 0.0 in all channels. + * `in1`, `in2`, `in3`, `in4`, `in5`, `in6`, `in7`, `in8`, `in9`, `in10` (float or colorN or vectorN): the values or nodenames to select from based on the value of the `which` input. The types of the various `in`N inputs must match the type of the `switch` node itself. The default value of all `in`N inputs is 0.0 in all channels. * `which` (integer or float): a selector to choose which input to take values from; the output comes from input "floor(`which`)+1", clamped to the 1-10 range. So `which`<1 will pass on the value from in1, 1<=`which`<2 will pass the value from in2, 2<=`which`<3 will pass the value from in3, and so on up to 9<=`which` will pass the value from in10. The default value of `which` is 0. @@ -1439,7 +1457,7 @@ Channel nodes are used to perform channel manipulations and data type conversion -* **`combine2`**, **`combine3`**, **`combine4`**: combine the channels from two, three or four streams into the same total number of channels of a single output stream of a specified compatible type; please see the table below for a list of all supported combinations of input and output types. For color output types, no colorspace conversion will take place; the channels are simply copied as-is. +* **`combine2`**, **`combine3`**, **`combine4`**: combine the channels from two, three or four streams into the same total number of channels of a single output stream of a specified compatible type; please see the table below for a list of all supported combinations of input and output types. For colorN output types, no colorspace conversion will take place; the channels are simply copied as-is. * `in1` (float/color3/vector2/vector3): the input value or nodename which will be sent to the N channels of the output; default is 0.0 in all channels * `in2` (float/vector2): the input value or nodename which will be sent to the next N channels of the output; default is 0.0 in all channels * `in3` (float): for **`combine3`** or **`combine4`**, the input value or nodename which will be sent to the next channel of the output after `in2`; default is 0.0 @@ -1497,25 +1515,6 @@ Convolution nodes have one input named "in", and apply a defined convolution fun -### Shader Nodes - -Shader nodes construct a shader (a node with a shader semantic output type) from the specified inputs, which may then be connected to a material. Standard library shaders do not respond to external illumination; please refer to the [**MaterialX Physically Based Shading Nodes**](./MaterialX.PBRSpec.md#materialx-pbs-library) document for definitions of additional nodes and shader constructors which do respond to illumination. - - - - -* **`surface`**: Constructs a surface shader for an unlit surface with a plain unshaded color value. Useful for visualizing texture data or rendering non-PBR materials. Output type "surfaceshader". - * `color` (color3): Color value to display. Default is (0, 0, 0). - * `opacity` (float or color3): Cutout (float) or transmission (color3) opacity for the surface. Default is 1.0, representing a fully-opaque surface. - - - -* **`displacement`**: Constructs a displacement shader describing geometric modification to surfaces. Output type "displacementshader". - * `displacement` (float or vector3): Scalar (along the surface normal direction) or vector displacement (in (dPdu, dPdv, N) tangent/normal space) for each position. Default is 0. - * `scale` (float): Scale factor for the displacement vector. Default is 1.0. - - - ## Standard Node Inputs All standard nodes which define a `defaultinput` or `default` value support the following input: @@ -2172,14 +2171,11 @@ An input with a shader-semantic type may be given a value of "" to indicate no s -### Standard Shader-Semantic Operator Nodes +### Standard Library Shader Nodes -The Standard MaterialX Library defines the following nodes and node variants operating on "shader"-semantic types. +The Standard MaterialX Library defines the following nodes and node variants operating on "shader"-semantic types. Standard library shaders do not respond to external illumination; please refer to the [**MaterialX Physically Based Shading Nodes**](./MaterialX.PBRSpec.md#materialx-pbs-library) document for definitions of additional nodes and shader constructors which do respond to illumination. -* **`mix`**: linear blend between two surface/displacement/volumeshader closures. - * `bg` (surface/displacement/volumeshader): the name of the background shader-semantic node - * `fg` (surface/displacement/volumeshader): the name of the foreground shader-semantic node - * `mix` (float): the blending factor used to mix the two input closures + * **`surface_unlit`**: an unlit surface shader node, representing a surface that can emit and transmit light, but does not receive illumination from light sources or other surfaces. Output type surfaceshader. * `emission` (float): the surface emission amount; default is 1.0 @@ -2188,6 +2184,20 @@ The Standard MaterialX Library defines the following nodes and node variants ope * `transmission_color` (color3): surface transmission color; default is (1, 1, 1) * `opacity` (float): surface cutout opacity; default is 1.0 + + +* **`displacement`**: Constructs a displacement shader describing geometric modification to surfaces. Output type "displacementshader". + * `displacement` (float or vector3): Scalar (along the surface normal direction) or vector displacement (in (dPdu, dPdv, N) tangent/normal space) for each position. Default is 0. + * `scale` (float): Scale factor for the displacement vector. Default is 1.0. + + + +* **`mix`**: linear blend between two surface/displacement/volumeshader closures. + * `bg` (surface/displacement/volumeshader): the name of the background shader-semantic node + * `fg` (surface/displacement/volumeshader): the name of the foreground shader-semantic node + * `mix` (float): the blending factor used to mix the two input closures + + ### AOV Output Elements diff --git a/documents/Specification/inprog_v1.39/MaterialX.Supplement.md b/documents/Specification/inprog_v1.39/MaterialX.Supplement.md index 703fa1275c..5a1a8e7a55 100644 --- a/documents/Specification/inprog_v1.39/MaterialX.Supplement.md +++ b/documents/Specification/inprog_v1.39/MaterialX.Supplement.md @@ -84,6 +84,7 @@ This section describes a number of supplemental nodes for MaterialX. These node * `default` (float or colorN or vectorN): a default value to use if any `fileX` reference can not be resolved (e.g. if a <geomtoken>, [interfacetoken] or {hostattr} is included in the filename but no substitution value or default is defined, or if the resolved file URI cannot be read) The `default` value must be the same type as the `` element itself. If `default` is not defined, the default color value will be 0.0 in all channels. * `position` (vector3): a spatially-varying input specifying the 3D position at which the projection is evaluated. Default is to use the current 3D object-space coordinate. * `normal` (vector3): a spatially-varying input specifying the 3D normal vector used for blending. Default is to use the current object-space surface normal. + * `blend` (float): a 0-1 weighting factor for blending the three axis samples using the geometric normal, with higher values giving softer blending. Default is 1.0. * `filtertype` (uniform string): the type of texture filtering to use; standard values include "closest" (nearest-neighbor single-sample), "linear", and "cubic". If not specified, an application may use its own default texture filtering method. ``` @@ -160,12 +161,13 @@ This section describes a number of supplemental nodes for MaterialX. These node * **`triplanarblend`**: samples data from three inputs, and projects a tiled representation of the images along each of the three respective coordinate axes, computing a weighted blend of the three samples using the geometric normal. - * inx (float or colorN): the image to be projected in the direction from the +X axis back toward the origin. Default is 0 in all channels. - * iny (float or colorN): the image to be projected in the direction from the +Y axis back toward the origin with the +X axis to the right. Default is 0 in all channels. - * inz (float or colorN): the image to be projected in the direction from the +Z axis back toward the origin. Default is 0 in all channels. - * position (vector3): a spatially-varying input specifying the 3D position at which the projection is evaluated. Default is to use the current 3D object-space coordinate. - * normal (vector3): a spatially-varying input specifying the 3D normal vector used for blending. Default is to use the current object-space surface normal. - * filtertype (uniform string): the type of texture filtering to use; standard values include "closest" (nearest-neighbor single-sample), "linear", and "cubic". If not specified, an application may use its own default texture filtering method. + * `inx` (float or colorN): the image to be projected in the direction from the +X axis back toward the origin. Default is 0 in all channels. + * `iny` (float or colorN): the image to be projected in the direction from the +Y axis back toward the origin with the +X axis to the right. Default is 0 in all channels. + * `inz` (float or colorN): the image to be projected in the direction from the +Z axis back toward the origin. Default is 0 in all channels. + * `position` (vector3): a spatially-varying input specifying the 3D position at which the projection is evaluated. Default is to use the current 3D object-space coordinate. + * `normal` (vector3): a spatially-varying input specifying the 3D normal vector used for blending. Default is to use the current object-space surface normal. + * `blend` (float): a 0-1 weighting factor for blending the three axis samples using the geometric normal, with higher values giving softer blending. Default is 1.0. + * `filtertype` (uniform string): the type of texture filtering to use; standard values include "closest" (nearest-neighbor single-sample), "linear", and "cubic". If not specified, an application may use its own default texture filtering method. diff --git a/documents/Specification/inprog_v1.39/README_v1.39.md b/documents/Specification/inprog_v1.39/README_v1.39.md index f63017ba9d..28e74e195b 100644 --- a/documents/Specification/inprog_v1.39/README_v1.39.md +++ b/documents/Specification/inprog_v1.39/README_v1.39.md @@ -33,7 +33,7 @@ Previously, MaterialX used custom types with a structure of output variables to **Array Types Now Uniform and Static Length** -Many shading languages do not support dynamic array types with a variable length, so MaterialX now only supports arrays with a fixed maximum length, and all array-type node inputs must be uniform; nodes are no longer permitted to output an array type. Array-type inputs may be accompanied by a uniform integer input declaring the number of array elements actually used in the array. Because of this change, the unimplemented <arrayappend> node has been removed. +Many shading languages do not support dynamic array types with a variable length, so MaterialX now only supports arrays with a fixed maximum length, and all array-type node inputs must be uniform; nodes are no longer permitted to output an array type. Array-type inputs may be accompanied by a uniform integer input declaring the number of array elements actually used in the array (the <curveadjust> node has been updated in this way). Because of this change, the unimplemented <arrayappend> node has been removed. **Connectable Uniform Inputs and New Tokenvalue Node** @@ -62,7 +62,7 @@ The standard <swizzle> node using a string of channel names and allowing arbi **New Unlit Surface Shader and Standard Materials** -A new standard <surface> constructor node for unlit surfaces has been added to the standard library. +A new <surface_unlit> node for unlit surfaces has been added to the standard library. Additionally, the standard <surfacematerial> material now supports both single- or double-sided surfaces with the addition of a separate `backsurface` input. @@ -72,13 +72,13 @@ Additionally, the standard <surfacematerial> material now supports both singl Typedefs may now inherit from other types, including built-in types, and may provide hints about their values such as floating-point precision. These new "inherit" and "hint" attributes are themselves merely metadata hints about the types; applications and code generators are still expected to provide their own precise definitions for all custom types. -**New Nodes** +**New and Updated Standard Library Nodes** -The following new standard operator nodes have been added: +The following new operator nodes have been added to the standard library: -* [Procedural nodes](./MaterialX.Specification.md#procedural-nodes): **tokenvalue**, **fractal2d**, **cellnoise1d** +* [Procedural nodes](./MaterialX.Specification.md#procedural-nodes): **tokenvalue**, **checkerboard**, **fractal2d**, **cellnoise1d** * [Geometric nodes](./MaterialX.Specification.md#geometric-nodes): **bump**, **geompropvalueuniform** -* [Math nodes](./MaterialX.Specification.md#math-nodes): boolean **and**, **or**, **not**; **transformcolor**, **creatematrix** +* [Math nodes](./MaterialX.Specification.md#math-nodes): boolean **and**, **or**, **not**; **distance**, **transformcolor** and **creatematrix**, as well as integer-output variants of **floor** and **ceil** * [Adjustment nodes](./MaterialX.Specification.md#adjustment-nodes): **curveinversecubic**, **curveuniformlinear** and **curveuniformcubic** * [Conditional nodes](./MaterialX.Specification.md#conditional-nodes): boolean-output variants of **ifgreater**, **ifgreatereq** and **ifequal**; new **ifelse** node * [Channel nodes](./MaterialX.Specification.md#channel-nodes): **extractrowvector** @@ -103,10 +103,13 @@ The following new standard physically based shading nodes have been added: * The <member> element for <typedef>s and the "member" attribute for inputs have been removed from the Specification, as they had never been implemented and it was not clear how they could be implemented generally. * The "valuerange" and "valuecurve" attributes describing expressions and function curves have been removed, in favor of using the new <curveinversecubic> / <curveuniformcubic> / etc. nodes. +* The <geomcolor>, <geompropvalue> and <geompropvalueuniform> nodes for color3/4-type values can now take a "colorspace" attribute to declare the colorspace of the property value. * The <cellnoise2d> and <cellnoise3d> nodes now support vectorN output types in addition to float output. +* The <noise2d/3d>, <fractal2d/3d>, <cellnoise2d/3d> and <worleynoise2d/3d> nodes now support a "period" input. * The <worleynoise2d> and <worleynoise3d> nodes now support a number of different distance metrics. -* The <time> node no longer has a "frames per second" input: the application is now always expected to generate the "current time in seconds" using an appropriate method. "Fps" was removed because varible-rate real-time applications have no static "fps", and it's generally not good to bake a situation-dependent value like fps into a shading network. +* The <time> node no longer has a "frames per second" input: the application is now always expected to generate the "current time in seconds" using an appropriate method. The "fps" input was removed because variable-rate real-time applications have no static "fps", and it's generally not good to bake a situation-dependent value like fps into a shading network. * A standard "tangent" space is now defined in addition to "model", "object" and "world" spaces, and the <heighttonormal> node now accepts a uniform "space" input to define the space of the output normal vector. +* The <switch> node now supports 10 inputs instead of just 5. * The <surface> and <displacement> nodes are now part of the main Specification rather than being Physically Based Shading nodes. * <Token> elements are now explicitly allowed to be children of compound nodegraphs, and token values may now have defined enum/enumvalues. * Inputs in <nodedef>s may now supply "hints" to code generators as to their intended interpretation, e.g. "transparency" or "opacity". From 5a2a8216a3089d80ba94f52375cabb624eec47b6 Mon Sep 17 00:00:00 2001 From: Jonathan Stone Date: Thu, 8 Jun 2023 15:47:02 -0700 Subject: [PATCH 16/42] Build matrix improvements - Add an initial MacOS 13 build to GitHub Actions. - Generalize existing support for analysis builds without Python integration. --- .github/workflows/main.yml | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 8e68529175..5b2354da24 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -59,8 +59,14 @@ jobs: compiler: clang compiler_version: "14" python: 3.11 - cmake_config: -DMATERIALX_DYNAMIC_ANALYSIS=ON clang_format: ON + + - name: Linux_Clang_14_DynamicAnalysis + os: ubuntu-22.04 + compiler: clang + compiler_version: "14" + python: None + cmake_config: -DMATERIALX_DYNAMIC_ANALYSIS=ON dynamic_analysis: ON - name: MacOS_Xcode_11_Python37 @@ -77,9 +83,9 @@ jobs: python: 3.9 - name: MacOS_Xcode_14_Python311 - os: macos-12 + os: macos-13 compiler: xcode - compiler_version: "14.2" + compiler_version: "14.3" python: 3.11 test_shaders: ON @@ -147,6 +153,7 @@ jobs: Add-Content $env:GITHUB_PATH "$PWD/vcpkg/installed/x64-windows/tools" - name: Install Python ${{ matrix.python }} + if: matrix.python != 'None' uses: actions/setup-python@v4 with: python-version: ${{ matrix.python }} @@ -192,7 +199,7 @@ jobs: working-directory: build - name: Python Tests - if: matrix.dynamic_analysis != 'ON' + if: matrix.python != 'None' run: | python MaterialXTest/main.py python MaterialXTest/genshader.py @@ -249,7 +256,7 @@ jobs: working-directory: build/render - name: Upload Installed Package - if: matrix.dynamic_analysis != 'ON' + if: matrix.python != 'None' uses: actions/upload-artifact@v3 with: name: MaterialX_${{ matrix.name }} From e4d04a3be2e3b128ea430baab47718482f0d5a77 Mon Sep 17 00:00:00 2001 From: Doug Smythe Date: Tue, 13 Jun 2023 08:37:46 -0700 Subject: [PATCH 17/42] Merge supplemental nodes into main specification (#1377) Descriptions of all of the "Supplemental Nodes" are moved from the Supplemental Notes doc to the main Specification doc, as discussed in various forums. The previously-supplemental nodes now have a subtle "(NG)" identifier in the description, and the text has been updated to explain this difference (There are likely several original standard nodes that should get this "(NG)" identifier). The README file was updated to reflect the above change, as well as a few previous Spec updates that weren't yet reflected in the README. I also added link target elements for each individual Merge node so they can be linked to from the outside. --- .../inprog_v1.39/MaterialX.Specification.md | 218 +++++++++++++++- .../inprog_v1.39/MaterialX.Supplement.md | 238 +----------------- .../inprog_v1.39/README_v1.39.md | 23 +- 3 files changed, 217 insertions(+), 262 deletions(-) diff --git a/documents/Specification/inprog_v1.39/MaterialX.Specification.md b/documents/Specification/inprog_v1.39/MaterialX.Specification.md index cad8990256..3a90a269fb 100644 --- a/documents/Specification/inprog_v1.39/MaterialX.Specification.md +++ b/documents/Specification/inprog_v1.39/MaterialX.Specification.md @@ -550,7 +550,7 @@ where _nodecategory_ is the general "category" of the node (e.g. "image", "add" Node elements may optionally specify a `version` string attribute in "_major_[._minor_]" format, requesting that a specific version of that node's definition be used instead of the default version. Normally, the types of a node's inputs and outputs are sufficient to disambiguate which signature of the applicable version of a node is intended, but if necessary, a node instantiation may also declare a specific nodedef name to precisely define exactly which node signature is desired. Please refer to the [Custom Node Declaration NodeDef Elements](#custom-node-declaration-nodedef-elements) section below for further details. -MaterialX defines a number of Standard Nodes which all implementations should support as described to the degree their architecture and capabilities allow. One can define new nodes by declaring their parameter interfaces and providing portable or target-specific implementations. Please see the [Custom Nodes](#custom-nodes) section for notes and implementation details. +MaterialX defines a number of Standard Nodes which all implementations should support as described to the degree their architecture and capabilities allow. These standard nodes are grouped into [Standard Source Nodes](#standard-source-nodes) and [Standard Operator Nodes](#standard-operator-nodes); these groups are further divided into additional subcategories of nodes. In the descriptions below, a node with an "(NG)" annotation indicates a node that is implemented using a nodegraph in the MaterialX distribution, while unannotated nodes are implemented natively in the various renderer shading languages. One can define new nodes by declaring their parameter interfaces and providing portable nodegraph or target-specific shading language implementations. Please see the [Custom Nodes](#custom-nodes) section for notes and implementation details. @@ -664,10 +664,37 @@ Standard Texture nodes: * `vaddressmode` (uniform string): determines how V coordinates outside the 0-1 range are processed before sampling the image; see below. Default is "periodic". * `filtertype` (uniform string): the type of texture filtering to use; standard values include "closest" (nearest-neighbor single-sample), "linear", and "cubic". If not specified, an application may use its own default texture filtering method. + + +* **`tiledimage`** (NG): samples data from a single image, with provisions for tiling and offsetting the image across uv space. + * `file` (uniform filename): the URI of an image file. The filename can include one or more substitutions to change the file name (including frame number) that is accessed, as described in the [Filename Substitutions](#filename-substitutions) section. + * `default` (float or colorN or vectorN): a default value to use if the `file` reference can not be resolved (e.g. if a <geomtoken>, [interfacetoken] or {hostattr} is included in the filename but no substitution value or default is defined, or if the resolved file URI cannot be read), or if the specified `layer` does not exist in the file. The `default` value must be the same type as the `` element itself. If `default` is not defined, the default color value will be 0.0 in all channels. + * `texcoord` (vector2): the name of a vector2-type node specifying the 2D texture coordinate at which the image data is read. Default is to use the current u,v coordinate. + * `uvtiling` (vector2): the tiling rate for the given image along the U and V axes. Mathematically equivalent to multiplying the incoming texture coordinates by the given vector value. Default value is (1.0, 1.0). + * `uvoffset` (vector2): the offset for the given image along the U and V axes. Mathematically equivalent to subtracting the given vector value from the incoming texture coordinates. Default value is (0.0, 0.0). + * `realworldimagesize` (vector2): the real-world size represented by the `file` image, with unittype "distance". A `unit` attribute may be provided to indicate the units that `realworldimagesize` is expressed in. + * `realworldtilesize` (vector2): the real-world size of a single square 0-1 UV tile, with unittype "distance". A `unit` attribute may be provided to indicate the units that `realworldtilesize` is expressed in. + * `filtertype` (uniform string): the type of texture filtering to use; standard values include "closest" (nearest-neighbor single-sample), "linear", and "cubic". If not specified, an application may use its own default texture filtering method. + + + +* **`triplanarprojection`** (NG): samples data from three images (or layers within multi-layer images), and projects a tiled representation of the images along each of the three respective coordinate axes, computing a weighted blend of the three samples using the geometric normal. + * `filex` (uniform filename): the URI of an image file to be projected in the direction from the +X axis back toward the origin. + * `filey` (uniform filename): the URI of an image file to be projected in the direction from the +Y axis back toward the origin with the +X axis to the right. + * `filez` (uniform filename): the URI of an image file to be projected in the direction from the +Z axis back toward the origin. + * `layerx` (uniform string): the name of the layer to extract from a multi-layer input file for the x-axis projection. If no value for `layerx` is provided and the input file has multiple layers, then the "default" layer will be used, or "rgba" if there is no "default" layer. Note: the number of channels defined by the `type` of the `` must match the number of channels in the named layer. + * `layery` (uniform string): the name of the layer to extract from a multi-layer input file for the y-axis projection. + * `layerz` (uniform string): the name of the layer to extract from a multi-layer input file for the z-axis projection. + * `default` (float or colorN or vectorN): a default value to use if any `fileX` reference can not be resolved (e.g. if a <geomtoken>, [interfacetoken] or {hostattr} is included in the filename but no substitution value or default is defined, or if the resolved file URI cannot be read) The `default` value must be the same type as the `` element itself. If `default` is not defined, the default color value will be 0.0 in all channels. + * `position` (vector3): a spatially-varying input specifying the 3D position at which the projection is evaluated. Default is to use the current 3D object-space coordinate. + * `normal` (vector3): a spatially-varying input specifying the 3D normal vector used for blending. Default is to use the current object-space surface normal. + * `blend` (float): a 0-1 weighting factor for blending the three axis samples using the geometric normal, with higher values giving softer blending. Default is 1.0. + * `filtertype` (uniform string): the type of texture filtering to use; standard values include "closest" (nearest-neighbor single-sample), "linear", and "cubic". If not specified, an application may use its own default texture filtering method. + -The following values are supported by `uaddressmode` and `vaddressmode` inputs: +The following values are supported by `uaddressmode` and `vaddressmode` inputs of [image](#node-image) nodes: * “constant”: Texture coordinates outside the 0-1 range return the value of the node's `default` input. * “clamp”: Texture coordinates are clamped to the 0-1 range before sampling the image. @@ -687,8 +714,6 @@ Texture nodes using `file*` inputs also support the following inputs to handle b Arbitrary frame number expressions and speed changes are not supported. -Additional texture nodes, including **``** and **``**, may be found in the [**MaterialX Supplemental Notes**](./MaterialX.Supplement.md#supplemental-texture-nodes) document. - ### Procedural Nodes @@ -731,6 +756,15 @@ Standard Procedural nodes: * `valueb` (float or colorN or vectorN): the value at the bottom (V=0) edge * `texcoord` (vector2): the name of a vector2-type node specifying the 2D texture coordinate at which the ramp interpolation is evaluated. Default is to use the first set of texture coordinates. + + +* **`ramp4`** (NG): a 4-corner bilinear value ramp. + * `valuetl` (float or colorN or vectorN): the value at the top-left (U0V1) corner + * `valuetr` (float or colorN or vectorN): the value at the top-right (U1V1) corner + * `valuebl` (float or colorN or vectorN): the value at the bottom-left (U0V0) corner + * `valuebr` (float or colorN or vectorN): the value at the bottom-right (U1V0) corner + * `texcoord` (vector2, optional): the name of a vector2-type node specifying the 2D texture coordinate at which the ramp interpolation is evaluated. Default is to use the first set of texture coordinates. + * **`splitlr`**: a left-right split matte, split at a specified U value. @@ -826,10 +860,38 @@ Standard Procedural nodes: * `jitter` (float): amount to jitter the cell center position, with smaller values creating a more regular pattern. Default is 1.0. * `position` (vector3): the 3D position at which the noise is evaluated. Default is to use the current 3D object-space coordinate. + + +* **`unifiednoise2d`** (NG): a single node supporting 2D Perlin, Cell, Worley or Fractal noise in a unified interface. + * `type` (integer): The type of noise function to use. One of 0 (Perlin), 1 (Cell), 2 (Worley), or 3 (Fractal); default is Perlin. + * `texcoord` (vector2): the input 2d space. Default is the first texture coordinates. + * `freq` (vector2): Adjusts the noise frequency, with higher values producing smaller noise shapes. Default is (1,1). + * `offset` (vector2): Shift the noise in 2d space. Default is (0,0). + * `jitter` (float): Adjust uniformity of Worley noise; for other noise types jitters the results. + * `outmin` (float): The lowest values fit to the noise. Default is 0.0. + * `outmax` (float): The highest values fit to the noise. Default is 1.0. + * `clampoutput` (boolean): Clamp the output to the min and max output values. + * `octaves` (integer): The number of octaves of Fractal noise to be generated. Default is 3. + * `lacunarity` (float): The exponential scale between successive octaves of Fractal noise. Default is 2.0. + * `diminish` (float): The rate at which noise amplitude is diminished for each octave of Fractal noise. Default is 0.5. + + + +* **`unifiednoise3d`** (NG): a single node supporting 3D Perlin, Cell, Worley or Fractal noise in a unified interface. + * `type` (integer): The type of noise function to use. One of 0 (Perlin), 1 (Cell), 2 (Worley), or 3 (Fractal); default is Perlin. + * `position` (vector3): the input 3d space. Default is position in object-space. + * `freq` (vector3): Adjusts the noise frequency, with higher values producing smaller noise shapes. Default is (1,1,1). + * `offset` (vector3): Shift the noise in 3d space. Default is (0,0,0). + * `jitter` (float): Adjust uniformity of Worley noise; for other noise types jitters the results. + * `outmin` (float): The lowest values fit to the noise. Default is 0.0. + * `outmax` (float): The highest values fit to the noise. Default is 1.0. + * `clampoutput` (boolean): Clamp the output to the min and max output values. + * `octaves` (integer): The number of octaves of Fractal noise to be generated. Default is 3. + * `lacunarity` (float): The exponential scale between successive octaves of Fractal noise. Default is 2.0. + * `diminish` (float): The rate at which noise amplitude is diminished for each octave of Fractal noise. Default is 0.5. -To scale or offset the noise pattern generated by `noise3d`, `fractal3d` or `cellnoise3d`, use a <position> or other [Geometric Node](#geometric-nodes) (see below) connected to vector3 <multiply> and/or <add> nodes, in turn connected to the noise node's `position` input. To scale or offset `rampX`, `splitX`, `noise2d` or `cellnoise2d` input coordinates, use a <texcoord> or similar Geometric node processed by vector2 <multiply>, <rotate> and/or <add> nodes, and connect to the node's `texcoord` input. -Additional procedural nodes, including **``**, may be found in the [**MaterialX Supplemental Notes**](./MaterialX.Supplement.md#supplemental-procedural-nodes) document. +To scale or offset the noise pattern generated by `noise3d`, `fractal3d` or `cellnoise3d`, use a <position> or other [Geometric Node](#geometric-nodes) (see below) connected to vector3 <multiply> and/or <add> nodes, in turn connected to the noise node's `position` input. To scale or offset `rampX`, `splitX`, `noise2d` or `cellnoise2d` input coordinates, use a <texcoord> or similar Geometric node processed by vector2 <multiply>, <rotate> and/or <add> nodes, and connect to the node's `texcoord` input. @@ -1050,7 +1112,13 @@ Math nodes have one or two spatially-varying inputs, and are used to perform a m * **`power`**: raise incoming float/color values to the specified exponent, commonly used for "gamma" adjustment. * `in1` (float or colorN or vectorN): the value or nodename for the primary input - * `in2` (same type as `in` or float): exponent value or nodename; output = pow(in1, in2); default is 1.0 in all channels + * `in2` (same type as `in1` or float): exponent value or nodename; output = pow(in1, in2); default is 1.0 in all channels + + + +* **`safepower`** (NG): raise incoming float/color values to the specified exponent. Unlike the standard [<power>](#node-power) node, negative `in1` values for <safepower> will result in negative output values, e.g. `out = sign(in1)*pow(abs(in1),in2)`. + * `in1` (float or colorN or vectorN): the value or nodename for the primary input + * `in2` (same type as `in1` or float): exponent value or nodename; default is 1.0 in all channels @@ -1242,19 +1310,45 @@ Math nodes have one or two spatially-varying inputs, and are used to perform a m * `amount` (float): the amount to rotate, specified in degrees; default is 0. * `axis` (vector3): For vector3 inputs only, the unit axis vector about which to rotate; default is (0,1,0). + + +* **`place2d`** (NG): transform incoming UV texture coordinates for 2D texture placement. + * `texcoord` (vector2): the input UV coordinate to transform; defaults to the current surface index=0 uv coordinate. + * `pivot` (vector2): the pivot coordinate for scale and rotate: this is subtracted from u,v before applying scale/rotate, then added back after. Default is (0,0). + * `scale` (vector2): divide the u,v coord (after subtracting `pivot`) by this, so a scale (2,2) makes the texture image appear twice as big. Negative values can be used to flip or flop the texture space. Default is (1,1). + * `rotate` (float): rotate u,v coord (after subtracting pivot) by this amount in degrees, so a positive value rotates UV coords counter-clockwise, and the image clockwise. Default is 0. + * `offset` (vector2): subtract this amount from the scaled/rotated/“pivot added back” UV coordinate; since U0,V0 is typically the lower left corner, a positive offset moves the texture image up and right. Default is (0,0). + * `operationorder` (integer enum): the order in which to perform the transform operations. "0" or "SRT" performs -pivot scale rotate translate +pivot as per the original implementation matching the behavior of certain DCC packages, and "1" or "TRS" performs -pivot translate rotate scale +pivot which does not introduce texture shear. Default is 0 "SRT" for backward compatibility. + + + +* **`triplanarblend`** (NG): samples data from three inputs, and projects a tiled representation of the images along each of the three respective coordinate axes, computing a weighted blend of the three samples using the geometric normal. + * `inx` (float or colorN): the image to be projected in the direction from the +X axis back toward the origin. Default is 0 in all channels. + * `iny` (float or colorN): the image to be projected in the direction from the +Y axis back toward the origin with the +X axis to the right. Default is 0 in all channels. + * `inz` (float or colorN): the image to be projected in the direction from the +Z axis back toward the origin. Default is 0 in all channels. + * `position` (vector3): a spatially-varying input specifying the 3D position at which the projection is evaluated. Default is to use the current 3D object-space coordinate. + * `normal` (vector3): a spatially-varying input specifying the 3D normal vector used for blending. Default is to use the current object-space surface normal. + * `blend` (float): a 0-1 weighting factor for blending the three axis samples using the geometric normal, with higher values giving softer blending. Default is 1.0. + * `filtertype` (uniform string): the type of texture filtering to use; standard values include "closest" (nearest-neighbor single-sample), "linear", and "cubic". If not specified, an application may use its own default texture filtering method. + * **`dot`**: a no-op, passes its input through to its output unchanged. Users can use dot nodes to shape edge connection paths or provide documentation checkpoints in node graph layout UI's. Dot nodes may also pass uniform values from <constant>, <tokenvalue> or other nodes with uniform="true" outputs to uniform <input>s and <token>s. * `in` (any type): the nodename to be connected to the Dot node's "in" input. Unlike inputs on other node types, the <dot> node's input is specifically disallowed to provide a `channels` attribute: input data can only be passed through unmodified. -Additional math nodes, including **``**, **``** and **``** may be found in the [**MaterialX Supplemental Notes**](./MaterialX.Supplement.md#supplemental-math-nodes) document. - ### Adjustment Nodes Adjustment nodes have one input named "in", and apply a specified function to values in the incoming stream. + + +* **`contrast`** (NG): increase or decrease contrast of incoming float/color values using a linear slope multiplier. + * `in` (float or colorN or vectorN): the input value or nodename + * `amount` (same type as `in` or float): slope multiplier for contrast adjustment, 0.0 to infinity range. Values greater than 1.0 increase contrast, values between 0.0 and 1.0 reduce contrast. Default is 1.0 in all channels. + * `pivot` (same type as `in` or float): center pivot value of contrast adjustment; this is the value that will not change as contrast is adjusted. Default is 0.5 in all channels. + * **`remap`**: linearly remap incoming values from one range of float/color/vector values to another. @@ -1264,6 +1358,17 @@ Adjustment nodes have one input named "in", and apply a specified function to va * `outlow` (same type as `in` or float): low value for output range; default is 0.0 in all channels * `outhigh` (same type as `in` or float): high value for output range; default is 1.0 in all channels + + +* **`range`** (NG): remap incoming values from one range of float/color/vector values to another, optionally applying a gamma correction "in the middle". Input values below `inlow` or above `inhigh` are extrapolated unless `doclamp` is true, in which case the output values will be clamped to the `outlow`..`outhigh` range. + * `in` (float or colorN or vectorN): the input value or nodename + * `inlow` (same type as `in` or float): low value for input range. Default is 0.0 in all channels. + * `inhigh` (same type as `in` or float): high value for input range. Default is 1.0 in all channels. + * `gamma` (same type as `in` or float): inverse exponent applied to input value after first transforming from `inlow`..`inhigh` to 0..1; `gamma` values greater than 1.0 make midtones brighter. Default is 1.0 in all channels. + * `outlow` (same type as `in` or float): low value for output range. Default is 0.0 in all channels. + * `outhigh` (same type as `in` or float): high value for output range. Default is 1.0 in all channels. + * `doclamp` (boolean): If true, the output is clamped to the range `outlow`..`outhigh`. Default is false. + * **`smoothstep`**: output a smooth (hermite-interpolated) remapping of input values from low-high to output 0-1. @@ -1289,6 +1394,22 @@ Adjustment nodes have one input named "in", and apply a specified function to va * `in` (float): the input interpolant value or nodename * `knotvalues` (uniform floatarray or colorNarray or vectorNarray): the array of at least 2 values to interpolate between. + + +* **`curveadjust`** (NG): output a smooth remapping of input values using the centripetal Catmull-Rom cubic spline curve defined by specified knot values, using an inverse spline lookup on input knot values and a forward spline through output knot values. All channels of the input will be remapped using the same curve. + * `in` (float or colorN or vectorN): the input value or nodename + * `numknots` (uniform integer): the number of values in the knots and knotvalues arrays + * `knots` (uniform floatarray): the list of input values defining the curve for the remapping. At least 2 and at most 16 values must be provided. + * `knotvalues` (uniform floatarray): the list of output values defining the curve for the remapping. Must be the same length as knots. + + + +* **`curvelookup`** (NG): output a float, colorN or vectorN value smoothly interpolated between a number of knotvalue values, using the position of in within knots as the knotvalues interpolant. + * `in` (float): the input interpolant value or nodename + * `numknots` (uniform integer): the number of values in the knots and knotvalues arrays + * `knots` (uniform floatarray): the list of knot values to interpolate in within. At least 2 and at most 16 values must be provided. + * `knotvalues` (uniform floatarray or colorNarray or vectorNarray): the values at each knot position to interpolate between. Must be the same length as knots. + * **`luminance`**: (color3 or color4 only) output a grayscale value containing the luminance of the incoming RGB color in all color channels, computed using the dot product of the incoming color with the luma coefficients of the working colorspace; the alpha channel is left unchanged if present. @@ -1305,7 +1426,31 @@ Adjustment nodes have one input named "in", and apply a specified function to va * **`hsvtorgb`**: (color3 or color4 only) convert an incoming color from HSV to RGB space; the alpha channel is left unchanged if present. This conversion is not affected by the current color space. * `in` (color3/color4): the input value or nodename -Additional adjustment nodes, including **``**, **``**, **``**, **``**, **``**, **``** and **``** may be found in the [**MaterialX Supplemental Notes**](./MaterialX.Supplement.md#supplemental-adjustment-nodes) document. + + +* **`hsvadjust`** (NG): adjust the hue, saturation and value of an RGB color by converting the input color to HSV, adding amount.x to the hue, multiplying the saturation by amount.y, multiplying the value by amount.z, then converting back to RGB. A positive "amount.x" rotates hue in the "red to green to blue" direction, with amount of 1.0 being the equivalent to a 360 degree (e.g. no-op) rotation. Negative or greater-than-1.0 hue adjustment values are allowed, wrapping at the 0-1 boundaries. For color4 inputs, the alpha value is unchanged. + * `in` (color3 or color4): the input value or nodename + * `amount` (vector3): the HSV adjustment; a value of (0, 1, 1) is "no change" and is the default. + + + +* **`saturate`** (NG): (color3 or color4 only) adjust the saturation of a color; the alpha channel will be unchanged if present. Note that this operation is **not** equivalent to the "amount.y" saturation adjustment of `hsvadjust`, as that operator does not take the working or any other colorspace into account. + * `in` (float or colorN or vectorN): the input value or nodename + * `amount` (float): a multiplier for saturation; the saturate operator performs a linear interpolation between the luminance of the incoming color value (copied to all three color channels) and the incoming color value itself. Note that setting amount to 0 will result in an R=G=B gray value equal to the value that the `luminance` node (below) returns. Default is 1.0. + * `lumacoeffs` (uniform color3): the luma coefficients of the current working color space; if no specific color space can be determined, the ACEScg (ap1) luma coefficients [0.272287, 0.6740818, 0.0536895] will be used. Applications which support color management systems may choose to retrieve this value from the CMS to pass to the <saturate> node's implementation directly, rather than exposing it to the user. + + + +* **`colorcorrect`** (NG): Combines various adjustment nodes into one artist-friendly color correction node. For color4 inputs, the alpha value is unchanged. + * `in` (color3 or color4): the input color to be adjusted. + * `hue` (float): Rotates the color hue, with values wrapping at 0-1 boundaries; default is 0. + * `saturation` (float): Multiplies the input color saturation level; default is 1. + * `gamma` (float): Applies a gamma correction to the color; default is 1. + * `lift` (float): Raise the dark color values, leaving the white values unchanged; default is 0. + * `gain` (float): Multiplier increases lighter color values, leaving black values unchanged; default is 1. + * `contrast` (float): Linearly increase or decrease the color contrast; default is 1. + * `contrastpivot` (float): Pivot value around which contrast applies. This value will not change as contrast is adjusted; default is 0.5. + * `exposure` (float): Multplier which increases or decreases color brightness by 2^value; default is 0. @@ -1333,6 +1478,14 @@ Premult nodes operate on 4-channel (color4) inputs/outputs, have one input named Blend nodes take two 1-4 channel inputs and apply the same operator to all channels (the math for alpha is the same as for R or RGB). In the Blend Operator table, "F" and "B" refer to any individual channel of the `fg` and `bg` inputs respectively. Blend nodes support an optional float input `mix`, which can be used to mix the original `bg` value (`mix`=0) with the result of the blend operation (`mix`=1, the default). + + + + + + + + | Blend Operator | Each Channel Output | Supported Types | | --- | --- | --- | @@ -1349,6 +1502,13 @@ Blend nodes take two 1-4 channel inputs and apply the same operator to all chann Merge nodes take two 4-channel (color4) inputs and use the built-in alpha channel(s) to control the compositing of the `fg` and `bg` inputs. In the Merge Operator table, "F" and "B" refer to the non-alpha channels of the `fg` and `bg` inputs respectively, and "f" and "b" refer to the alpha channels of the `fg` and `bg` inputs. Merge nodes are not defined for 1-channel or 3-channel inputs, and cannot be used on vectorN streams. Merge nodes support an optional float input `mix`, which can be used to mix the original `bg` value (`mix`=0) with the result of the blend operation (`mix`=1, the default). + + + + + + + | Merge Operator | RGB output | Alpha Output | | --- | --- | --- | @@ -1364,6 +1524,9 @@ Merge nodes take two 4-channel (color4) inputs and use the built-in alpha channe Masking nodes take one 1-4 channel input `in` plus a separate float `mask` input and apply the same operator to all channels (if present, the math for alpha is the same as for R or RGB). The default value for the `mask` input is 1.0 for the `inside` operator, and 0.0 for the `outside` operator In the Masking Operator table, "F" refers to any individual channel of the `in` input. + + + | Masking Operator | Each Channel Output | | --- | --- | @@ -1378,6 +1541,8 @@ Note: for all types, `inside` is equivalent to the `multiply` node: both operato The Mix node takes two 1-4 channel inputs `fg` and `bg` plus a separate 1-channel (float) or N-channel (same type and number of channels as `fg` and `bg`) `mix` input and mixes the `fg` and `bg` according to the mix value, either uniformly for a "float" `mix` type, or per-channel for non-float `mix` types. The equation for "mix" is as follows, with "F" and "B" referring to any channel of the `fg` and `bg` inputs respectively (which can be float, colorN or vectorN but must match), and "m" referring to the float `mix` input value (which has a default value of 0): + + | Mix Operator | Each Channel Output | | --- | --- | @@ -1463,6 +1628,37 @@ Channel nodes are used to perform channel manipulations and data type conversion * `in3` (float): for **`combine3`** or **`combine4`**, the input value or nodename which will be sent to the next channel of the output after `in2`; default is 0.0 * `in4` (float): for **`combine4`**, the input value or nodename which will be sent to the last channel of the output; default is 0.0 + + +* **`separate2`** (NG): output each of the channels of a vector2 as a separate float output. + * `in` (vector2): the input value or nodename + * `outx` (**output**, float): the value of x channel. + * `outy` (**output**, float): the value of y channel. + + + +* **`separate3`** (NG): output each of the channels of a color3 or vector3 as a separate float output. + * `in` (color3 or vector3): the input value or nodename + * `outr`/`outx` (**output**, float): the value of the red (for color3 streams) or x (for vector3 streams) channel. + * `outg`/`outy` (**output**, float): the value of the green (for color3 streams) or y (for vector3 streams) channel. + * `outb`/`outz` (**output**, float): the value of the blue (for color3 streams) or z (for vector3 streams) channel. + + + +* **`separate4`** (NG): output each of the channels of a color4 or vector4 as a separate float output. + * `in` (color4 or vector4): the input value or nodename + * `outr`/`outx` (**output**, float): the value of the red (for color4 streams) or x (for vector4 streams) channel. + * `outg`/`outy` (**output**, float): the value of the green (for color4 streams) or y (for vector4 streams) channel. + * `outb`/`outz` (**output**, float): the value of the blue (for color4 streams) or z (for vector4 streams) channel. + * `outa`/`outw` (**output**, float): the value of the alpha (for color4 streams) or w (for vector4 streams) channel. + + + +* **`separatecolor4`** (NG): output the RGB and alpha channels of a color4 as separate outputs. + * `in` (color4): the input value or nodename + * `outcolor` (output, color3): the RGB channel values. + * `outa` (output, float): the value of the alpha channel. + The following input/output data type conversions are supported by **`convert`**: @@ -1490,8 +1686,6 @@ Table of allowable input/output types for **`combine2`**, **`combine3`**, **`com | `combine2` | `vector4` | `vector2` "xy" | `vector2` "zw" | n/a | n/a | "xyzw" | -Additional channel nodes, including **``** and **``**, may be found in the [**MaterialX Supplemental Notes**](./MaterialX.Supplement.md#supplemental-channel-nodes) document. - ### Convolution Nodes diff --git a/documents/Specification/inprog_v1.39/MaterialX.Supplement.md b/documents/Specification/inprog_v1.39/MaterialX.Supplement.md index 5a1a8e7a55..1a3d322dcc 100644 --- a/documents/Specification/inprog_v1.39/MaterialX.Supplement.md +++ b/documents/Specification/inprog_v1.39/MaterialX.Supplement.md @@ -14,21 +14,15 @@ March 25, 2023 # Introduction -This document details additional information about MaterialX and how it may be incorporated into studio pipelines. The document describes a number of additional Supplemental Nodes providing enhanced functionality over the basic Standard Nodes, as well as a recommended naming convention for node definition elements and a directory structure to define packages of node definitions and implementations from various sources. +This document details additional information about MaterialX and how it may be incorporated into studio pipelines. The document describes recommended naming convention for node definition elements and a directory structure to define packages of node definitions and implementations from various sources. +Previous versions of the MaterialX Supplemental Notes document included descriptions of additional node types: these node descriptions have now been folded back into the [Main Specification Document](./MaterialX.Specification.md#nodes) alongside all the other standard node descriptions. ## Table of Contents **[Introduction](#introduction)** -**[Supplemental Nodes](#supplemental-nodes)** - [Supplemental Texture Nodes](#supplemental-texture-nodes) - [Supplemental Procedural Nodes](#supplemental-procedural-nodes) - [Supplemental Math Nodes](#supplemental-math-nodes) - [Supplemental Adjustment Nodes](#supplemental-adjustment-nodes) - [Supplemental Channel Nodes](#supplemental-channel-nodes) - **[Recommended Element Naming Conventions](#recommended-element-naming-conventions)** **[Material and Node Library File Structure](#material-and-node-library-file-structure)** @@ -42,234 +36,6 @@ This document details additional information about MaterialX and how it may be i -# Supplemental Nodes - -The MaterialX Specification defines a number of Standard Nodes, which all implementations of MaterialX are expected to support, to the degree their host applications allow. These nodes are the basic "building blocks" upon which more complex node functionality can be built. - -This section describes a number of supplemental nodes for MaterialX. These nodes are considered part of MaterialX, but are typically implemented using graphs of standard MaterialX nodes rather than being implemented for specific targets. Certain applications may choose to implement these supplemental nodes using native coding languages for efficiency. It is also expected that various applications will choose to extend these supplemental nodes with additional parameters and additional functionality. - - -### Supplemental Texture Nodes - - - -* **`tiledimage`**: samples data from a single image, with provisions for tiling and offsetting the image across uv space. - * `file` (uniform filename): the URI of an image file. The filename can include one or more substitutions to change the file name (including frame number) that is accessed, as described in [Filename Substitutions in the main Specification document](./MaterialX.Specification.md#filename-substitutions). - * `default` (float or colorN or vectorN): a default value to use if the `file` reference can not be resolved (e.g. if a <geomtoken>, [interfacetoken] or {hostattr} is included in the filename but no substitution value or default is defined, or if the resolved file URI cannot be read), or if the specified `layer` does not exist in the file. The `default` value must be the same type as the `` element itself. If `default` is not defined, the default color value will be 0.0 in all channels. - * `texcoord` (vector2): the name of a vector2-type node specifying the 2D texture coordinate at which the image data is read. Default is to use the current u,v coordinate. - * `uvtiling` (vector2): the tiling rate for the given image along the U and V axes. Mathematically equivalent to multiplying the incoming texture coordinates by the given vector value. Default value is (1.0, 1.0). - * `uvoffset` (vector2): the offset for the given image along the U and V axes. Mathematically equivalent to subtracting the given vector value from the incoming texture coordinates. Default value is (0.0, 0.0). - * `realworldimagesize` (vector2): the real-world size represented by the `file` image, with unittype "distance". A `unit` attribute may be provided to indicate the units that `realworldimagesize` is expressed in. - * `realworldtilesize` (vector2): the real-world size of a single square 0-1 UV tile, with unittype "distance". A `unit` attribute may be provided to indicate the units that `realworldtilesize` is expressed in. - * `filtertype` (uniform string): the type of texture filtering to use; standard values include "closest" (nearest-neighbor single-sample), "linear", and "cubic". If not specified, an application may use its own default texture filtering method. - - ``` - - - - - - - ``` - - - -* **`triplanarprojection`**: samples data from three images (or layers within multi-layer images), and projects a tiled representation of the images along each of the three respective coordinate axes, computing a weighted blend of the three samples using the geometric normal. - * `filex` (uniform filename): the URI of an image file to be projected in the direction from the +X axis back toward the origin. - * `filey` (uniform filename): the URI of an image file to be projected in the direction from the +Y axis back toward the origin with the +X axis to the right. - * `filez` (uniform filename): the URI of an image file to be projected in the direction from the +Z axis back toward the origin. - * `layerx` (uniform string): the name of the layer to extract from a multi-layer input file for the x-axis projection. If no value for `layerx` is provided and the input file has multiple layers, then the "default" layer will be used, or "rgba" if there is no "default" layer. Note: the number of channels defined by the `type` of the `` must match the number of channels in the named layer. - * `layery` (uniform string): the name of the layer to extract from a multi-layer input file for the y-axis projection. - * `layerz` (uniform string): the name of the layer to extract from a multi-layer input file for the z-axis projection. - * `default` (float or colorN or vectorN): a default value to use if any `fileX` reference can not be resolved (e.g. if a <geomtoken>, [interfacetoken] or {hostattr} is included in the filename but no substitution value or default is defined, or if the resolved file URI cannot be read) The `default` value must be the same type as the `` element itself. If `default` is not defined, the default color value will be 0.0 in all channels. - * `position` (vector3): a spatially-varying input specifying the 3D position at which the projection is evaluated. Default is to use the current 3D object-space coordinate. - * `normal` (vector3): a spatially-varying input specifying the 3D normal vector used for blending. Default is to use the current object-space surface normal. - * `blend` (float): a 0-1 weighting factor for blending the three axis samples using the geometric normal, with higher values giving softer blending. Default is 1.0. - * `filtertype` (uniform string): the type of texture filtering to use; standard values include "closest" (nearest-neighbor single-sample), "linear", and "cubic". If not specified, an application may use its own default texture filtering method. - - ``` - - - - - - - ``` - - -### Supplemental Procedural Nodes - - - -* **`ramp4`**: a 4-corner bilinear value ramp. - * `valuetl` (float or colorN or vectorN): the value at the top-left (U0V1) corner - * `valuetr` (float or colorN or vectorN): the value at the top-right (U1V1) corner - * `valuebl` (float or colorN or vectorN): the value at the bottom-left (U0V0) corner - * `valuebr` (float or colorN or vectorN): the value at the bottom-right (U1V0) corner - * `texcoord` (vector2, optional): the name of a vector2-type node specifying the 2D texture coordinate at which the ramp interpolation is evaluated. Default is to use the first set of texture coordinates. - - - -* **`unifiednoise2d`**: a single node supporting 2D Perlin, Cell, Worley or Fractal noise in a unified interface. - * `type` (integer): The type of noise function to use. One of 0 (Perlin), 1 (Cell), 2 (Worley), or 3 (Fractal); default is Perlin. - * `texcoord` (vector2): the input 2d space. Default is the first texture coordinates. - * `freq` (vector2): Adjusts the noise frequency, with higher values producing smaller noise shapes. Default is (1,1). - * `offset` (vector2): Shift the noise in 2d space. Default is (0,0). - * `jitter` (float): Adjust uniformity of Worley noise; for other noise types jitters the results. - * `outmin` (float): The lowest values fit to the noise. Default is 0.0. - * `outmax` (float): The highest values fit to the noise. Default is 1.0. - * `clampoutput` (boolean): Clamp the output to the min and max output values. - * `octaves` (integer): The number of octaves of Fractal noise to be generated. Default is 3. - * `lacunarity` (float): The exponential scale between successive octaves of Fractal noise. Default is 2.0. - * `diminish` (float): The rate at which noise amplitude is diminished for each octave of Fractal noise. Default is 0.5. - - - -* **`unifiednoise3d`**: a single node supporting 3D Perlin, Cell, Worley or Fractal noise in a unified interface. - * `type` (integer): The type of noise function to use. One of 0 (Perlin), 1 (Cell), 2 (Worley), or 3 (Fractal); default is Perlin. - * `position` (vector3): the input 3d space. Default is position in object-space. - * `freq` (vector3): Adjusts the noise frequency, with higher values producing smaller noise shapes. Default is (1,1,1). - * `offset` (vector3): Shift the noise in 3d space. Default is (0,0,0). - * `jitter` (float): Adjust uniformity of Worley noise; for other noise types jitters the results. - * `outmin` (float): The lowest values fit to the noise. Default is 0.0. - * `outmax` (float): The highest values fit to the noise. Default is 1.0. - * `clampoutput` (boolean): Clamp the output to the min and max output values. - * `octaves` (integer): The number of octaves of Fractal noise to be generated. Default is 3. - * `lacunarity` (float): The exponential scale between successive octaves of Fractal noise. Default is 2.0. - * `diminish` (float): The rate at which noise amplitude is diminished for each octave of Fractal noise. Default is 0.5. - - - -### Supplemental Math Nodes - - - -* **`place2d`**: transform incoming UV texture coordinates for 2D texture placement. - * `texcoord` (vector2): the input UV coordinate to transform; defaults to the current surface index=0 uv coordinate. - * `pivot` (vector2): the pivot coordinate for scale and rotate: this is subtracted from u,v before applying scale/rotate, then added back after. Default is (0,0). - * `scale` (vector2): divide the u,v coord (after subtracting `pivot`) by this, so a scale (2,2) makes the texture image appear twice as big. Negative values can be used to flip or flop the texture space. Default is (1,1). - * `rotate` (float): rotate u,v coord (after subtracting pivot) by this amount in degrees, so a positive value rotates UV coords counter-clockwise, and the image clockwise. Default is 0. - * `offset` (vector2): subtract this amount from the scaled/rotated/“pivot added back” UV coordinate; since U0,V0 is typically the lower left corner, a positive offset moves the texture image up and right. Default is (0,0). - * `operationorder` (integer enum): the order in which to perform the transform operations. "0" or "SRT" performs -pivot scale rotate translate +pivot as per the original implementation matching the behavior of certain DCC packages, and "1" or "TRS" performs -pivot translate rotate scale +pivot which does not introduce texture shear. Default is 0 "SRT" for backward compatibility. - - - -* **`safepower`**: raise incoming float/color values to the specified exponent. Unlike the standard <power> node, negative `in1` values for <safepower> will result in negative output values, e.g. `out = sign(in1)*pow(abs(in1),in2)`. - * `in1` (float or colorN or vectorN): the value or nodename for the primary input - * `in2` (same type as `in` or float): exponent value or nodename; default is 1.0 in all channels - - - -* **`triplanarblend`**: samples data from three inputs, and projects a tiled representation of the images along each of the three respective coordinate axes, computing a weighted blend of the three samples using the geometric normal. - * `inx` (float or colorN): the image to be projected in the direction from the +X axis back toward the origin. Default is 0 in all channels. - * `iny` (float or colorN): the image to be projected in the direction from the +Y axis back toward the origin with the +X axis to the right. Default is 0 in all channels. - * `inz` (float or colorN): the image to be projected in the direction from the +Z axis back toward the origin. Default is 0 in all channels. - * `position` (vector3): a spatially-varying input specifying the 3D position at which the projection is evaluated. Default is to use the current 3D object-space coordinate. - * `normal` (vector3): a spatially-varying input specifying the 3D normal vector used for blending. Default is to use the current object-space surface normal. - * `blend` (float): a 0-1 weighting factor for blending the three axis samples using the geometric normal, with higher values giving softer blending. Default is 1.0. - * `filtertype` (uniform string): the type of texture filtering to use; standard values include "closest" (nearest-neighbor single-sample), "linear", and "cubic". If not specified, an application may use its own default texture filtering method. - - - -### Supplemental Adjustment Nodes - - - -* **`contrast`**: increase or decrease contrast of incoming float/color values using a linear slope multiplier. - * `in` (float or colorN or vectorN): the input value or nodename - * `amount` (same type as `in` or float): slope multiplier for contrast adjustment, 0.0 to infinity range. Values greater than 1.0 increase contrast, values between 0.0 and 1.0 reduce contrast. Default is 1.0 in all channels. - * `pivot` (same type as `in` or float): center pivot value of contrast adjustment; this is the value that will not change as contrast is adjusted. Default is 0.5 in all channels. - - - -* **`range`**: remap incoming values from one range of float/color/vector values to another, optionally applying a gamma correction "in the middle". Input values below `inlow` or above `inhigh` are extrapolated unless `doclamp` is true, in which case the output values will be clamped to the `outlow`..`outhigh` range. - * `in` (float or colorN or vectorN): the input value or nodename - * `inlow` (same type as `in` or float): low value for input range. Default is 0.0 in all channels. - * `inhigh` (same type as `in` or float): high value for input range. Default is 1.0 in all channels. - * `gamma` (same type as `in` or float): inverse exponent applied to input value after first transforming from `inlow`..`inhigh` to 0..1; `gamma` values greater than 1.0 make midtones brighter. Default is 1.0 in all channels. - * `outlow` (same type as `in` or float): low value for output range. Default is 0.0 in all channels. - * `outhigh` (same type as `in` or float): high value for output range. Default is 1.0 in all channels. - * `doclamp` (boolean): If true, the output is clamped to the range `outlow`..`outhigh`. Default is false. - - - -* **`hsvadjust`**: adjust the hue, saturation and value of an RGB color by converting the input color to HSV, adding amount.x to the hue, multiplying the saturation by amount.y, multiplying the value by amount.z, then converting back to RGB. A positive "amount.x" rotates hue in the "red to green to blue" direction, with amount of 1.0 being the equivalent to a 360 degree (e.g. no-op) rotation. Negative or greater-than-1.0 hue adjustment values are allowed, wrapping at the 0-1 boundaries. For color4 inputs, the alpha value is unchanged. - * `in` (color3 or color4): the input value or nodename - * `amount` (vector3): the HSV adjustment; a value of (0, 1, 1) is "no change" and is the default. - - - -* **`saturate`**: (color3 or color4 only) adjust the saturation of a color; the alpha channel will be unchanged if present. Note that this operation is **not** equivalent to the "amount.y" saturation adjustment of `hsvadjust`, as that operator does not take the working or any other colorspace into account. - * `in` (float or colorN or vectorN): the input value or nodename - * `amount` (float): a multiplier for saturation; the saturate operator performs a linear interpolation between the luminance of the incoming color value (copied to all three color channels) and the incoming color value itself. Note that setting amount to 0 will result in an R=G=B gray value equal to the value that the `luminance` node (below) returns. Default is 1.0. - * `lumacoeffs` (uniform color3): the luma coefficients of the current working color space; if no specific color space can be determined, the ACEScg (ap1) luma coefficients [0.272287, 0.6740818, 0.0536895] will be used. Applications which support color management systems may choose to retrieve this value from the CMS to pass to the <saturate> node's implementation directly, rather than exposing it to the user. - - - -* **`colorcorrect`**: Combines various adjustment nodes into one artist-friendly color correction node. For color4 inputs, the alpha value is unchanged. - * `in` (color3 or color4): the input color to be adjusted. - * `hue` (float): Rotates the color hue, with values wrapping at 0-1 boundaries; default is 0. - * `saturation` (float): Multiplies the input color saturation level; default is 1. - * `gamma` (float): Applies a gamma correction to the color; default is 1. - * `lift` (float): Raise the dark color values, leaving the white values unchanged; default is 0. - * `gain` (float): Multiplier increases lighter color values, leaving black values unchanged; default is 1. - * `contrast` (float): Linearly increase or decrease the color contrast; default is 1. - * `contrastpivot` (float): Pivot value around which contrast applies. This value will not change as contrast is adjusted; default is 0.5. - * `exposure` (float): Multplier which increases or decreases color brightness by 2^value; default is 0. - - - -* **`curveadjust`**: output a smooth remapping of input values using the centripetal Catmull-Rom cubic spline curve defined by specified knot values, using an inverse spline lookup on input knot values and a forward spline through output knot values. All channels of the input will be remapped using the same curve. - * `in` (float or colorN or vectorN): the input value or nodename - * `numknots` (uniform integer): the number of values in the knots and knotvalues arrays - * `knots` (uniform floatarray): the list of input values defining the curve for the remapping. At least 2 and at most 16 values must be provided. - * `knotvalues` (uniform floatarray): the list of output values defining the curve for the remapping. Must be the same length as knots. - - - -* **`curvelookup`**: output a float, colorN or vectorN value smoothly interpolated between a number of knotvalue values, using the position of in within knots as the knotvalues interpolant. - * `in` (float): the input interpolant value or nodename - * `numknots` (uniform integer): the number of values in the knots and knotvalues arrays - * `knots` (uniform floatarray): the list of knot values to interpolate in within. At least 2 and at most 16 values must be provided. - * `knotvalues` (uniform floatarray or colorNarray or vectorNarray): the values at each knot position to interpolate between. Must be the same length as knots. - - - -### Supplemental Channel Nodes - - - -* **`separate2`**: output each of the channels of a vector2 as a separate float output. - * `in` (vector2): the input value or nodename - * `outx` (**output**, float): the value of x channel. - * `outy` (**output**, float): the value of y channel. - - - -* **`separate3`**: output each of the channels of a color3 or vector3 as a separate float output. - * `in` (color3 or vector3): the input value or nodename - * `outr`/`outx` (**output**, float): the value of the red (for color3 streams) or x (for vector3 streams) channel. - * `outg`/`outy` (**output**, float): the value of the green (for color3 streams) or y (for vector3 streams) channel. - * `outb`/`outz` (**output**, float): the value of the blue (for color3 streams) or z (for vector3 streams) channel. - - - -* **`separate4`**: output each of the channels of a color4 or vector4 as a separate float output. - * `in` (color4 or vector4): the input value or nodename - * `outr`/`outx` (**output**, float): the value of the red (for color4 streams) or x (for vector4 streams) channel. - * `outg`/`outy` (**output**, float): the value of the green (for color4 streams) or y (for vector4 streams) channel. - * `outb`/`outz` (**output**, float): the value of the blue (for color4 streams) or z (for vector4 streams) channel. - * `outa`/`outw` (**output**, float): the value of the alpha (for color4 streams) or w (for vector4 streams) channel. - - - -* **`separatecolor4`**: output the RGB and alpha channels of a color4 as separate outputs. - * `in` (color4): the input value or nodename - * `outcolor` (output, color3): the RGB channel values. - * `outa` (output, float): the value of the alpha channel. - - - # Recommended Element Naming Conventions While MaterialX elements can be given any valid name as described in the MaterialX Names section of the main specification, adhering to the following recommended naming conventions will make it easier to predict the name of a nodedef for use in implementation and nodegraph elements as well as help reduce the possibility of elements from different sources having the same name. diff --git a/documents/Specification/inprog_v1.39/README_v1.39.md b/documents/Specification/inprog_v1.39/README_v1.39.md index 28e74e195b..a04dfb5caa 100644 --- a/documents/Specification/inprog_v1.39/README_v1.39.md +++ b/documents/Specification/inprog_v1.39/README_v1.39.md @@ -9,7 +9,7 @@ The documents in this folder comprise the complete MaterialX Specification, vers * [**MaterialX Specification**](./MaterialX.Specification.md) - the main Specification, describing definitions, core functionality and the standard node library * [**MaterialX Physically Based Shading Nodes**](./MaterialX.PBRSpec.md) - describes BSDF and other shading function nodes useful in constructing complex layered rendering shaders using node graphs * [**MaterialX Geometry Extensions**](./MaterialX.GeomExts.md) - additional MaterialX elements to define geometry-related information such as collections, properties and material assignments -* [**MaterialX Supplemental Notes**](./MaterialX.Supplement.md) - describes a number of additional node types built from the standard nodes as well as recommended naming and structuring conventions for libraries of custom node definitions +* [**MaterialX Supplemental Notes**](./MaterialX.Supplement.md) - describes recommended naming and structuring conventions for libraries of custom node definitions

@@ -45,7 +45,7 @@ Similarly, <token>s in materials and other node instances may now be connecte **Standardized Color Space Names** -The [standard colorspace names](./MaterialX.Specification.md#color-spaces-and-color-management-systems) in MaterialX have now been defined explicitly in the Specification, and are aligned to their definitions in the ACES 1.2 OCIO config file. With this change, there is no need for a definition of "cms" or "cmsconfig" in MaterialX documents, so those two attributes have been deprecated. +The [standard colorspace names](./MaterialX.Specification.md#color-spaces-and-color-management-systems) in MaterialX have now been defined explicitly in the Specification, and are aligned to their definitions in the ACES 1.2 OCIO config file. With this change, there is no need for a definition of "cms" or "cmsconfig" in MaterialX documents, so those two attributes have been deprecated. Additionally, two new colorspaces, "srgb_displayp3" and "lin_displayp3" have been added as standard colorspaces. **Disambiguated Nodedef and Nodegraph References** @@ -74,21 +74,16 @@ Typedefs may now inherit from other types, including built-in types, and may pro **New and Updated Standard Library Nodes** -The following new operator nodes have been added to the standard library: +In 1.39, we are removing the distinction between "standard nodes" and "supplemental nodes", and descriptions of both can now be found in the main Specification document. Nodes that are implemented in the standard distribution using nodegraphs are annotated with "(NG)" in the Spec to differentiate them from nodes implemented in each rendering target's native shading language. -* [Procedural nodes](./MaterialX.Specification.md#procedural-nodes): **tokenvalue**, **checkerboard**, **fractal2d**, **cellnoise1d** +Additionally, the following new operator nodes have been added to the standard library: + +* [Procedural nodes](./MaterialX.Specification.md#procedural-nodes): **tokenvalue**, **checkerboard**, **fractal2d**, **cellnoise1d**, **unifiednoise2d**, **unifiednoise3d** * [Geometric nodes](./MaterialX.Specification.md#geometric-nodes): **bump**, **geompropvalueuniform** -* [Math nodes](./MaterialX.Specification.md#math-nodes): boolean **and**, **or**, **not**; **distance**, **transformcolor** and **creatematrix**, as well as integer-output variants of **floor** and **ceil** -* [Adjustment nodes](./MaterialX.Specification.md#adjustment-nodes): **curveinversecubic**, **curveuniformlinear** and **curveuniformcubic** +* [Math nodes](./MaterialX.Specification.md#math-nodes): boolean **and**, **or**, **not**; **distance**, **transformcolor**, **creatematrix** and **triplanarblend**, as well as integer-output variants of **floor** and **ceil** +* [Adjustment nodes](./MaterialX.Specification.md#adjustment-nodes): **curveinversecubic**, **curveuniformlinear**, **curveuniformcubic** and **colorcorrect** * [Conditional nodes](./MaterialX.Specification.md#conditional-nodes): boolean-output variants of **ifgreater**, **ifgreatereq** and **ifequal**; new **ifelse** node -* [Channel nodes](./MaterialX.Specification.md#channel-nodes): **extractrowvector** - -Additionally, the following new supplemental nodes have been added: - -* [Procedural nodes](./MaterialX.Supplement.md#supplemental-procedural-nodes): **unifiednoise2d**, **unifiednoise3d** -* [Math nodes](./MaterialX.Supplement.md#supplemental-math-nodes): **triplanarblend** -* [Adjustment nodes](./MaterialX.Supplement.md#supplemental-adjustment-nodes): **colorcorrect** -* [Channel nodes](./MaterialX.Supplement.md#supplemental-channel-nodes): **separatecolor4** +* [Channel nodes](./MaterialX.Specification.md#channel-nodes): **extractrowvector** and **separatecolor4** **New Physically Based Shading Nodes** From d7b6129ad67c4ae6f611be3569bb1a3b9c27c750 Mon Sep 17 00:00:00 2001 From: Doug Smythe Date: Wed, 14 Jun 2023 09:09:20 -0700 Subject: [PATCH 18/42] Move 1.39 Specification Docs (#1378) Move the v1.39 md spec docs up to the main Specifications folder, and the older v1.38 pdf files into a new v1.38 subfolder. No change to document contents. --- .../{inprog_v1.39 => }/MaterialX.GeomExts.md | 0 .../{inprog_v1.39 => }/MaterialX.PBRSpec.md | 0 .../{inprog_v1.39 => }/MaterialX.Specification.md | 0 .../{inprog_v1.39 => }/MaterialX.Supplement.md | 0 .../{inprog_v1.39/README_v1.39.md => README.md} | 0 .../media/MaterialX_1.39_Overview_v5.png | Bin .../{inprog_v1.39 => }/media/PBSdiagram.png | Bin .../{inprog_v1.39 => }/media/nodegraph1.png | Bin .../{inprog_v1.39 => }/media/nodegraph2.png | Bin .../{ => v1.38}/MaterialX.v1.38.PBRSpec.pdf | Bin .../{ => v1.38}/MaterialX.v1.38.Spec.pdf | Bin .../{ => v1.38}/MaterialX.v1.38.Supplement.pdf | Bin 12 files changed, 0 insertions(+), 0 deletions(-) rename documents/Specification/{inprog_v1.39 => }/MaterialX.GeomExts.md (100%) rename documents/Specification/{inprog_v1.39 => }/MaterialX.PBRSpec.md (100%) rename documents/Specification/{inprog_v1.39 => }/MaterialX.Specification.md (100%) rename documents/Specification/{inprog_v1.39 => }/MaterialX.Supplement.md (100%) rename documents/Specification/{inprog_v1.39/README_v1.39.md => README.md} (100%) rename documents/Specification/{inprog_v1.39 => }/media/MaterialX_1.39_Overview_v5.png (100%) rename documents/Specification/{inprog_v1.39 => }/media/PBSdiagram.png (100%) rename documents/Specification/{inprog_v1.39 => }/media/nodegraph1.png (100%) rename documents/Specification/{inprog_v1.39 => }/media/nodegraph2.png (100%) rename documents/Specification/{ => v1.38}/MaterialX.v1.38.PBRSpec.pdf (100%) rename documents/Specification/{ => v1.38}/MaterialX.v1.38.Spec.pdf (100%) rename documents/Specification/{ => v1.38}/MaterialX.v1.38.Supplement.pdf (100%) diff --git a/documents/Specification/inprog_v1.39/MaterialX.GeomExts.md b/documents/Specification/MaterialX.GeomExts.md similarity index 100% rename from documents/Specification/inprog_v1.39/MaterialX.GeomExts.md rename to documents/Specification/MaterialX.GeomExts.md diff --git a/documents/Specification/inprog_v1.39/MaterialX.PBRSpec.md b/documents/Specification/MaterialX.PBRSpec.md similarity index 100% rename from documents/Specification/inprog_v1.39/MaterialX.PBRSpec.md rename to documents/Specification/MaterialX.PBRSpec.md diff --git a/documents/Specification/inprog_v1.39/MaterialX.Specification.md b/documents/Specification/MaterialX.Specification.md similarity index 100% rename from documents/Specification/inprog_v1.39/MaterialX.Specification.md rename to documents/Specification/MaterialX.Specification.md diff --git a/documents/Specification/inprog_v1.39/MaterialX.Supplement.md b/documents/Specification/MaterialX.Supplement.md similarity index 100% rename from documents/Specification/inprog_v1.39/MaterialX.Supplement.md rename to documents/Specification/MaterialX.Supplement.md diff --git a/documents/Specification/inprog_v1.39/README_v1.39.md b/documents/Specification/README.md similarity index 100% rename from documents/Specification/inprog_v1.39/README_v1.39.md rename to documents/Specification/README.md diff --git a/documents/Specification/inprog_v1.39/media/MaterialX_1.39_Overview_v5.png b/documents/Specification/media/MaterialX_1.39_Overview_v5.png similarity index 100% rename from documents/Specification/inprog_v1.39/media/MaterialX_1.39_Overview_v5.png rename to documents/Specification/media/MaterialX_1.39_Overview_v5.png diff --git a/documents/Specification/inprog_v1.39/media/PBSdiagram.png b/documents/Specification/media/PBSdiagram.png similarity index 100% rename from documents/Specification/inprog_v1.39/media/PBSdiagram.png rename to documents/Specification/media/PBSdiagram.png diff --git a/documents/Specification/inprog_v1.39/media/nodegraph1.png b/documents/Specification/media/nodegraph1.png similarity index 100% rename from documents/Specification/inprog_v1.39/media/nodegraph1.png rename to documents/Specification/media/nodegraph1.png diff --git a/documents/Specification/inprog_v1.39/media/nodegraph2.png b/documents/Specification/media/nodegraph2.png similarity index 100% rename from documents/Specification/inprog_v1.39/media/nodegraph2.png rename to documents/Specification/media/nodegraph2.png diff --git a/documents/Specification/MaterialX.v1.38.PBRSpec.pdf b/documents/Specification/v1.38/MaterialX.v1.38.PBRSpec.pdf similarity index 100% rename from documents/Specification/MaterialX.v1.38.PBRSpec.pdf rename to documents/Specification/v1.38/MaterialX.v1.38.PBRSpec.pdf diff --git a/documents/Specification/MaterialX.v1.38.Spec.pdf b/documents/Specification/v1.38/MaterialX.v1.38.Spec.pdf similarity index 100% rename from documents/Specification/MaterialX.v1.38.Spec.pdf rename to documents/Specification/v1.38/MaterialX.v1.38.Spec.pdf diff --git a/documents/Specification/MaterialX.v1.38.Supplement.pdf b/documents/Specification/v1.38/MaterialX.v1.38.Supplement.pdf similarity index 100% rename from documents/Specification/MaterialX.v1.38.Supplement.pdf rename to documents/Specification/v1.38/MaterialX.v1.38.Supplement.pdf From 7c9a7090e68ef8f055b49735be4e7e6188984300 Mon Sep 17 00:00:00 2001 From: SShikhali <99796443+SShikhali@users.noreply.github.com> Date: Wed, 14 Jun 2023 21:06:38 +0200 Subject: [PATCH 19/42] Deterministic code generation (#1376) These changes make code generation deterministic by changing std::set to std::vector when removing unused nodes --- source/MaterialXGenShader/ShaderGraph.cpp | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/source/MaterialXGenShader/ShaderGraph.cpp b/source/MaterialXGenShader/ShaderGraph.cpp index 4fd92c11aa..e6ad6eca29 100644 --- a/source/MaterialXGenShader/ShaderGraph.cpp +++ b/source/MaterialXGenShader/ShaderGraph.cpp @@ -1073,7 +1073,8 @@ void ShaderGraph::optimize(GenContext& context) if (numEdits > 0) { - std::set usedNodes; + std::set usedNodesSet; + std::vector usedNodesVec; // Traverse the graph to find nodes still in use for (ShaderGraphOutputSocket* outputSocket : getOutputSockets()) @@ -1084,7 +1085,12 @@ void ShaderGraph::optimize(GenContext& context) { for (ShaderGraphEdge edge : ShaderGraph::traverseUpstream(upstreamPort)) { - usedNodes.insert(edge.upstream->getNode()); + ShaderNode* node = edge.upstream->getNode(); + if (usedNodesSet.count(node) == 0) + { + usedNodesSet.insert(node); + usedNodesVec.push_back(node); + } } } } @@ -1092,7 +1098,7 @@ void ShaderGraph::optimize(GenContext& context) // Remove any unused nodes for (ShaderNode* node : _nodeOrder) { - if (usedNodes.count(node) == 0) + if (usedNodesSet.count(node) == 0) { // Break all connections disconnect(node); @@ -1102,8 +1108,7 @@ void ShaderGraph::optimize(GenContext& context) } } - _nodeOrder.resize(usedNodes.size()); - _nodeOrder.assign(usedNodes.begin(), usedNodes.end()); + _nodeOrder = usedNodesVec; } } From 1c9d7ce0ddcfe8c19b3f096ec18e3d2b119c6d88 Mon Sep 17 00:00:00 2001 From: Bernard Kwok Date: Wed, 14 Jun 2023 18:32:06 -0400 Subject: [PATCH 20/42] Fix input default values on cmlib definitions (#1369) Fix so that cmlib inputs have default values, otherwise validate() will fail. --- libraries/cmlib/cmlib_defs.mtlx | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/libraries/cmlib/cmlib_defs.mtlx b/libraries/cmlib/cmlib_defs.mtlx index dc912581d2..bee30267ef 100644 --- a/libraries/cmlib/cmlib_defs.mtlx +++ b/libraries/cmlib/cmlib_defs.mtlx @@ -8,82 +8,82 @@ --> - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + From 14e766dc5800f7704081d49eaf3b6711328498d0 Mon Sep 17 00:00:00 2001 From: Niklas Harrysson Date: Fri, 16 Jun 2023 02:46:33 +0200 Subject: [PATCH 21/42] Assign unique names to MDL implementations (#1380) This change list addresses issue #1354, renaming the implementation elements to unique names. --- libraries/stdlib/genmdl/stdlib_genmdl_impl.mtlx | 4 ++-- source/MaterialXTest/MaterialXRenderOsl/GenReference.cpp | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/libraries/stdlib/genmdl/stdlib_genmdl_impl.mtlx b/libraries/stdlib/genmdl/stdlib_genmdl_impl.mtlx index eb1e60167f..ab0d776936 100644 --- a/libraries/stdlib/genmdl/stdlib_genmdl_impl.mtlx +++ b/libraries/stdlib/genmdl/stdlib_genmdl_impl.mtlx @@ -614,8 +614,8 @@ - - + + diff --git a/source/MaterialXTest/MaterialXRenderOsl/GenReference.cpp b/source/MaterialXTest/MaterialXRenderOsl/GenReference.cpp index 722bf4b9b3..a7f7293755 100644 --- a/source/MaterialXTest/MaterialXRenderOsl/GenReference.cpp +++ b/source/MaterialXTest/MaterialXRenderOsl/GenReference.cpp @@ -81,7 +81,7 @@ TEST_CASE("GenReference: OSL Reference", "[genreference]") continue; } - mx::InterfaceElementPtr interface = nodedef->getImplementation(); + mx::InterfaceElementPtr interface = nodedef->getImplementation(generator->getTarget()); if (!interface) { logFile << "Skip generating reference for unimplemented node '" << nodeName << "'" << std::endl; From 9aa9b3aa7eb2ca3bc717894a0863c0d0ee8c1976 Mon Sep 17 00:00:00 2001 From: Chris Rydalch Date: Sat, 17 Jun 2023 13:07:39 -0500 Subject: [PATCH 22/42] Add Random Float and Random Color nodes (#1330) Add Random Float and Random Color nodes, to simplify generating randomized signals in a material. --- libraries/stdlib/stdlib_defs.mtlx | 46 ++++++++++ libraries/stdlib/stdlib_ng.mtlx | 137 ++++++++++++++++++++++++++++++ 2 files changed, 183 insertions(+) diff --git a/libraries/stdlib/stdlib_defs.mtlx b/libraries/stdlib/stdlib_defs.mtlx index 00cce2d02b..4aa82582be 100644 --- a/libraries/stdlib/stdlib_defs.mtlx +++ b/libraries/stdlib/stdlib_defs.mtlx @@ -1024,6 +1024,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -307,6 +307,7 @@ + @@ -323,6 +324,7 @@ + @@ -339,6 +341,7 @@ + @@ -355,6 +358,7 @@ + @@ -371,6 +375,7 @@ + @@ -387,6 +392,7 @@ + diff --git a/libraries/stdlib/stdlib_ng.mtlx b/libraries/stdlib/stdlib_ng.mtlx index 394f953e11..1d09f160af 100644 --- a/libraries/stdlib/stdlib_ng.mtlx +++ b/libraries/stdlib/stdlib_ng.mtlx @@ -262,41 +262,54 @@ - + - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - + @@ -369,41 +382,54 @@ - + - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - + @@ -476,41 +502,54 @@ - + - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - + @@ -583,41 +622,54 @@ - + - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - + @@ -693,38 +745,51 @@ - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - + @@ -797,41 +862,54 @@ - + - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - + From 35df9b1bdd2fc0834e867c86f2a7278280486f63 Mon Sep 17 00:00:00 2001 From: Bernard Kwok Date: Thu, 29 Jun 2023 12:28:51 -0400 Subject: [PATCH 27/42] Add Python binding for glTF loader (#1391) --- source/PyMaterialX/PyMaterialXRender/PyModule.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/source/PyMaterialX/PyMaterialXRender/PyModule.cpp b/source/PyMaterialX/PyMaterialXRender/PyModule.cpp index 9c6a191108..1c60142346 100644 --- a/source/PyMaterialX/PyMaterialXRender/PyModule.cpp +++ b/source/PyMaterialX/PyMaterialXRender/PyModule.cpp @@ -19,6 +19,7 @@ void bindPyOiioImageLoader(py::module& mod); void bindPyTinyObjLoader(py::module& mod); void bindPyCamera(py::module& mod); void bindPyShaderRenderer(py::module& mod); +void bindPyCgltfLoader(py::module& mod); PYBIND11_MODULE(PyMaterialXRender, mod) { @@ -36,4 +37,5 @@ PYBIND11_MODULE(PyMaterialXRender, mod) bindPyTinyObjLoader(mod); bindPyCamera(mod); bindPyShaderRenderer(mod); + bindPyCgltfLoader(mod); } From 275677638684e7fe00eeb06145934cc59718fb77 Mon Sep 17 00:00:00 2001 From: Niklas Harrysson Date: Thu, 29 Jun 2023 19:49:36 +0200 Subject: [PATCH 28/42] Align default values for conductor_bsdf with specification (#1379) The default values on the nodedef for conductor_bsdf was by mistake setup for Copper while the specification has values set for Gold. This change list fixes this by changing the nodedef values to align with the specification. --- libraries/pbrlib/pbrlib_defs.mtlx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libraries/pbrlib/pbrlib_defs.mtlx b/libraries/pbrlib/pbrlib_defs.mtlx index 0a931cdc7d..e63625a45d 100644 --- a/libraries/pbrlib/pbrlib_defs.mtlx +++ b/libraries/pbrlib/pbrlib_defs.mtlx @@ -76,8 +76,8 @@ --> - - + + From f409d4143b8c1ca874fb16684f7a1a7863fe1b87 Mon Sep 17 00:00:00 2001 From: Jonathan Stone Date: Fri, 30 Jun 2023 15:45:01 -0700 Subject: [PATCH 29/42] Improvements to GGX importance sampling (#1390) - Implement the paper "Sampling Visible GGX Normals with Spherical Caps" by Jonathan Dupuy and Anis Benyoub, which improves the performance and spatial continuity of VNDF sampling. - Switch to VNDF sampling for FIS environment lights, improving the convergence of this lighting path for lower sample counts. - Additional optimizations for FIS environment lights, leveraging the improved term cancellation in VNDF sampling. Test results: - GLSL render performance is improved for all tested materials, e.g. an increase from 205 fps to 214 fps for standard_surface_default.mtlx with 16 environment samples on an NVIDIA RTX A6000. - Convergence of FIS environment lights is improved for all tested materials, with the maximum visual error between 16 and 16384 environment samples reduced from 0.1098 to 0.0745 for a rough gold material. --- .../genglsl/lib/mx_environment_fis.glsl | 17 +++---- .../genglsl/lib/mx_microfacet_specular.glsl | 46 ++++--------------- 2 files changed, 19 insertions(+), 44 deletions(-) diff --git a/libraries/pbrlib/genglsl/lib/mx_environment_fis.glsl b/libraries/pbrlib/genglsl/lib/mx_environment_fis.glsl index d66f3a8cfb..575991e28d 100644 --- a/libraries/pbrlib/genglsl/lib/mx_environment_fis.glsl +++ b/libraries/pbrlib/genglsl/lib/mx_environment_fis.glsl @@ -23,6 +23,7 @@ vec3 mx_environment_radiance(vec3 N, vec3 V, vec3 X, vec2 alpha, int distributio // Compute derived properties. float NdotV = clamp(V.z, M_FLOAT_EPS, 1.0); float avgAlpha = mx_average_alpha(alpha); + float G1V = mx_ggx_smith_G1(NdotV, avgAlpha); // Integrate outgoing radiance using filtered importance sampling. // http://cgg.mff.cuni.cz/~jaroslav/papers/2008-egsr-fis/2008-egsr-fis-final-embedded.pdf @@ -33,18 +34,16 @@ vec3 mx_environment_radiance(vec3 N, vec3 V, vec3 X, vec2 alpha, int distributio vec2 Xi = mx_spherical_fibonacci(i, envRadianceSamples); // Compute the half vector and incoming light direction. - vec3 H = mx_ggx_importance_sample_NDF(Xi, alpha); + vec3 H = mx_ggx_importance_sample_VNDF(Xi, V, alpha); vec3 L = fd.refraction ? mx_refraction_solid_sphere(-V, H, fd.ior.x) : -reflect(V, H); // Compute dot products for this sample. - float NdotH = clamp(H.z, M_FLOAT_EPS, 1.0); float NdotL = clamp(L.z, M_FLOAT_EPS, 1.0); float VdotH = clamp(dot(V, H), M_FLOAT_EPS, 1.0); - float LdotH = VdotH; // Sample the environment light from the given direction. vec3 Lw = tangentToWorld * L; - float pdf = mx_ggx_PDF(H, LdotH, alpha); + float pdf = mx_ggx_NDF(H, alpha) * G1V / (4.0 * NdotV); float lod = mx_latlong_compute_lod(Lw, pdf, float($envRadianceMips - 1), envRadianceSamples); vec3 sampleColor = mx_latlong_map_lookup(Lw, $envMatrix, lod, $envRadiance); @@ -61,13 +60,15 @@ vec3 mx_environment_radiance(vec3 N, vec3 V, vec3 X, vec2 alpha, int distributio // From https://cdn2.unrealengine.com/Resources/files/2013SiggraphPresentationsNotes-26915738.pdf // incidentLight = sampleColor * NdotL // microfacetSpecular = D * F * G / (4 * NdotL * NdotV) - // pdf = D * NdotH / (4 * VdotH) + // pdf = D * G1V / (4 * NdotV); // radiance = incidentLight * microfacetSpecular / pdf - radiance += sampleColor * FG * VdotH / (NdotV * NdotH); + radiance += sampleColor * FG; } - // Normalize and return the final radiance. - radiance /= float(envRadianceSamples); + // Apply the global component of the geometric term and normalize. + radiance /= G1V * float(envRadianceSamples); + + // Return the final radiance. return radiance; } diff --git a/libraries/pbrlib/genglsl/lib/mx_microfacet_specular.glsl b/libraries/pbrlib/genglsl/lib/mx_microfacet_specular.glsl index cd165c0615..63aba17869 100644 --- a/libraries/pbrlib/genglsl/lib/mx_microfacet_specular.glsl +++ b/libraries/pbrlib/genglsl/lib/mx_microfacet_specular.glsl @@ -61,48 +61,22 @@ float mx_ggx_NDF(vec3 H, vec2 alpha) return 1.0 / (M_PI * alpha.x * alpha.y * mx_square(denom)); } -// https://media.disneyanimation.com/uploads/production/publication_asset/48/asset/s2012_pbs_disney_brdf_notes_v3.pdf -// Appendix B.1 Equation 3 -float mx_ggx_PDF(vec3 H, float LdotH, vec2 alpha) -{ - float NdotH = H.z; - return mx_ggx_NDF(H, alpha) * NdotH / (4.0 * LdotH); -} - -// https://media.disneyanimation.com/uploads/production/publication_asset/48/asset/s2012_pbs_disney_brdf_notes_v3.pdf -// Appendix B.2 Equation 15 -vec3 mx_ggx_importance_sample_NDF(vec2 Xi, vec2 alpha) -{ - float phi = 2.0 * M_PI * Xi.x; - float tanTheta = sqrt(Xi.y / (1.0 - Xi.y)); - vec3 H = vec3(tanTheta * alpha.x * cos(phi), - tanTheta * alpha.y * sin(phi), - 1.0); - return normalize(H); -} - -// http://jcgt.org/published/0007/04/01/paper.pdf -// Appendix A Listing 1 +// https://ggx-research.github.io/publication/2023/06/09/publication-ggx.html vec3 mx_ggx_importance_sample_VNDF(vec2 Xi, vec3 V, vec2 alpha) { // Transform the view direction to the hemisphere configuration. V = normalize(vec3(V.xy * alpha, V.z)); - // Construct an orthonormal basis from the view direction. - float len = length(V.xy); - vec3 T1 = (len > 0.0) ? vec3(-V.y, V.x, 0.0) / len : vec3(1.0, 0.0, 0.0); - vec3 T2 = cross(V, T1); - - // Parameterization of the projected area. - float r = sqrt(Xi.y); + // Sample a spherical cap in (-V.z, 1]. float phi = 2.0 * M_PI * Xi.x; - float t1 = r * cos(phi); - float t2 = r * sin(phi); - float s = 0.5 * (1.0 + V.z); - t2 = (1.0 - s) * sqrt(1.0 - mx_square(t1)) + s * t2; - - // Reprojection onto hemisphere. - vec3 H = t1 * T1 + t2 * T2 + sqrt(max(0.0, 1.0 - mx_square(t1) - mx_square(t2))) * V; + float z = (1.0 - Xi.y) * (1.0 + V.z) - V.z; + float sinTheta = sqrt(clamp(1.0 - z * z, 0.0, 1.0)); + float x = sinTheta * cos(phi); + float y = sinTheta * sin(phi); + vec3 c = vec3(x, y, z); + + // Compute the microfacet normal. + vec3 H = c + V; // Transform the microfacet normal back to the ellipsoid configuration. H = normalize(vec3(H.xy * alpha, max(H.z, 0.0))); From cdd53d2c2bb369c89aa7b3344243d9687a04491b Mon Sep 17 00:00:00 2001 From: Jonathan Stone Date: Fri, 30 Jun 2023 16:05:41 -0700 Subject: [PATCH 30/42] Improvements to mxformat.py example - Simplify the functionality of mxformat.py, making it a more straightforward example of MaterialX Python usage. - Add exception handling to mxformat.py, allowing it to skip documents that cannot be parsed. - Reformat and upgrade a handful of additional documents in the repository. --- .github/workflows/main.yml | 2 +- .../lights/genmsl/lights_genmsl_impl.mtlx | 2 +- libraries/stdlib/stdlib_defs.mtlx | 2 +- libraries/stdlib/stdlib_ng.mtlx | 14 ++-- python/Scripts/mxformat.py | 81 +++++++------------ resources/Lights/goegap_split.mtlx | 2 +- .../Lights/san_giuseppe_bridge_split.mtlx | 2 +- resources/Lights/table_mountain_split.mtlx | 2 +- .../stdlib/upgrade/1_36_to_1_37.mtlx | 8 +- 9 files changed, 47 insertions(+), 68 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 5b2354da24..fecdbf7a52 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -203,7 +203,7 @@ jobs: run: | python MaterialXTest/main.py python MaterialXTest/genshader.py - python Scripts/mxformat.py ../resources/Materials/TestSuite/stdlib/upgrade --yes --upgradeVersion True + python Scripts/mxformat.py ../resources/Materials/TestSuite/stdlib/upgrade --yes --upgrade python Scripts/mxvalidate.py ../resources/Materials/Examples/StandardSurface/standard_surface_marble_solid.mtlx --stdlib --verbose python Scripts/mxdoc.py --docType md ../libraries/pbrlib/pbrlib_defs.mtlx python Scripts/mxdoc.py --docType html ../libraries/bxdf/standard_surface.mtlx diff --git a/libraries/lights/genmsl/lights_genmsl_impl.mtlx b/libraries/lights/genmsl/lights_genmsl_impl.mtlx index 1b1782638c..90b4917a8a 100644 --- a/libraries/lights/genmsl/lights_genmsl_impl.mtlx +++ b/libraries/lights/genmsl/lights_genmsl_impl.mtlx @@ -1,5 +1,5 @@ - + diff --git a/libraries/stdlib/stdlib_defs.mtlx b/libraries/stdlib/stdlib_defs.mtlx index 4b9a6c1d34..e3b4344ff2 100644 --- a/libraries/stdlib/stdlib_defs.mtlx +++ b/libraries/stdlib/stdlib_defs.mtlx @@ -2280,7 +2280,7 @@ - + diff --git a/python/Scripts/mxformat.py b/python/Scripts/mxformat.py index 81ba3f72ea..8f6ad731e1 100644 --- a/python/Scripts/mxformat.py +++ b/python/Scripts/mxformat.py @@ -1,49 +1,38 @@ #!/usr/bin/env python ''' -Format MaterialX document content by reanding and writing files. Optionally -upgrade the document version. +Reformat a folder of MaterialX documents in place, optionally upgrading +the documents to the latest version of the standard. ''' import sys, os, argparse import MaterialX as mx -def getFiles(rootPath): - filelist = [] - for subdir, dirs, files in os.walk(rootPath): - for file in files: - if file.endswith('mtlx'): - filelist.append(os.path.join(subdir, file)) - return filelist - def main(): - parser = argparse.ArgumentParser(description="Format document by reading the file and writing it back out. Optionally update to the latest version.") + parser = argparse.ArgumentParser(description="Reformat a folder of MaterialX documents in place.") parser.add_argument("--yes", dest="yes", action="store_true", help="Proceed without asking for confirmation from the user.") - parser.add_argument('--checkForChanges', dest='checkForChanges', type=mx.stringToBoolean, default=True, help='Check if a file has changed. Default is True') - parser.add_argument('--upgradeVersion', dest='upgradeVersion', type=mx.stringToBoolean, default=False, help='Upgrade the document version. Default is False') + parser.add_argument('--upgrade', dest='upgrade', action="store_true", help='Upgrade documents to the latest version of the standard.') parser.add_argument(dest="inputFolder", help="An input folder to scan for MaterialX documents.") opts = parser.parse_args() - fileList = [] - rootPath = opts.inputFolder - if os.path.isdir(rootPath): - fileList = getFiles(rootPath) - else: - fileList.append(rootPath) - - # Preserve version, comments and newlines - readOptions = mx.XmlReadOptions() - readOptions.readComments = True - readOptions.readNewlines = True - readOptions.upgradeVersion = opts.upgradeVersion - validDocs = dict() - for filename in fileList: - doc = mx.createDocument() - try: - mx.readFromXmlFile(doc, filename, mx.FileSearchPath(), readOptions) - validDocs[filename] = doc - except mx.Exception: - pass + for root, dirs, files in os.walk(opts.inputFolder): + for file in files: + if file.endswith('.mtlx'): + filename = os.path.join(root, file) + doc = mx.createDocument() + try: + readOptions = mx.XmlReadOptions() + readOptions.readComments = True + readOptions.readNewlines = True + readOptions.upgradeVersion = opts.upgrade + try: + mx.readFromXmlFile(doc, filename, mx.FileSearchPath(), readOptions) + except Exception as err: + print('Skipping "' + file + '" due to exception: ' + str(err)) + continue + validDocs[filename] = doc + except mx.Exception: + pass if not validDocs: print('No MaterialX documents were found in "%s"' % (opts.inputFolder)) @@ -54,31 +43,21 @@ def main(): mxVersion = mx.getVersionIntegers() if not opts.yes: - question = 'Would you like to update all %i documents in place (y/n)?' % len(validDocs) - if opts.upgradeVersion: - question = 'Would you like to update all %i documents to MaterialX v%i.%i in place (y/n)?' % (len(validDocs), mxVersion[0], mxVersion[1]) + if opts.upgrade: + question = 'Would you like to upgrade all %i documents to MaterialX v%i.%i in place (y/n)?' % (len(validDocs), mxVersion[0], mxVersion[1]) + else: + question = 'Would you like to reformat all %i documents in place (y/n)?' % len(validDocs) answer = input(question) if answer != 'y' and answer != 'Y': return - writeCount = 0 for (filename, doc) in validDocs.items(): - writeFile = True - if opts.checkForChanges: - origString = mx.readFile(filename) - docString = mx.writeToXmlString(doc) - if origString == docString: - writeFile = False - - if writeFile: - writeCount = writeCount + 1 - print('- Updated file %s.' % filename) - mx.writeToXmlFile(doc, filename) + mx.writeToXmlFile(doc, filename) - if opts.upgradeVersion: - print('Updated %i documents to MaterialX v%i.%i' % (writeCount, mxVersion[0], mxVersion[1])) + if opts.upgrade: + print('Upgraded %i documents to MaterialX v%i.%i' % (len(validDocs), mxVersion[0], mxVersion[1])) else: - print('Updated %i documents ' % writeCount) + print('Reformatted %i documents ' % len(validDocs)) if __name__ == '__main__': main() diff --git a/resources/Lights/goegap_split.mtlx b/resources/Lights/goegap_split.mtlx index 026d07b45f..e046df5bf4 100644 --- a/resources/Lights/goegap_split.mtlx +++ b/resources/Lights/goegap_split.mtlx @@ -1,5 +1,5 @@ - + diff --git a/resources/Lights/san_giuseppe_bridge_split.mtlx b/resources/Lights/san_giuseppe_bridge_split.mtlx index e7975ae900..570c7b4f70 100644 --- a/resources/Lights/san_giuseppe_bridge_split.mtlx +++ b/resources/Lights/san_giuseppe_bridge_split.mtlx @@ -1,5 +1,5 @@ - + diff --git a/resources/Lights/table_mountain_split.mtlx b/resources/Lights/table_mountain_split.mtlx index 634f9facb3..b16050465f 100644 --- a/resources/Lights/table_mountain_split.mtlx +++ b/resources/Lights/table_mountain_split.mtlx @@ -1,5 +1,5 @@ - + diff --git a/resources/Materials/TestSuite/stdlib/upgrade/1_36_to_1_37.mtlx b/resources/Materials/TestSuite/stdlib/upgrade/1_36_to_1_37.mtlx index 0a0b3fd720..84db1c6101 100644 --- a/resources/Materials/TestSuite/stdlib/upgrade/1_36_to_1_37.mtlx +++ b/resources/Materials/TestSuite/stdlib/upgrade/1_36_to_1_37.mtlx @@ -1,10 +1,10 @@ - - + --> From 4075137e963522100fc1025b203657e2ae9552fa Mon Sep 17 00:00:00 2001 From: utzcoz <43091780+utzcoz@users.noreply.github.com> Date: Sun, 9 Jul 2023 11:33:07 +0800 Subject: [PATCH 31/42] Update image links to support Markdown preview (#1400) Links start with "/" doesn't work for Markdown preview of CLion on Windows.. --- README.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 9fee79795f..e6c6e2d0e4 100644 --- a/README.md +++ b/README.md @@ -34,16 +34,16 @@ The [MaterialX Viewer](documents/DeveloperGuide/Viewer.md) leverages shader gene **Figure 1:** Procedural and uniform materials in the MaterialX viewer

- - - - + + + +

**Figure 2:** Textured, color-space-managed materials in the MaterialX viewer

- - + +

### Open Chess Set @@ -51,10 +51,10 @@ The [MaterialX Viewer](documents/DeveloperGuide/Viewer.md) leverages shader gene The Open Chess Set is an open reference asset, consisting of a [MaterialX file](resources/Materials/Examples/StandardSurface/standard_surface_chess_set.mtlx) in the Standard Surface shading model and a [geometry file](resources/Geometry) in the glTF format. It was authored by Moeen Sayed and Mujtaba Sayed, and was contributed to the MaterialX project by Side Effects. **Figure 3:** The Open Chess Set, rendered in Arnold for Maya - + **Figure 4:** The Open Chess Set, rendered in Karma XPU for Houdini - + ### Pre-Built Binaries From f17c2b1fc4579aac49769c216a9a1101c1c6d923 Mon Sep 17 00:00:00 2001 From: krohmerNV <42233792+krohmerNV@users.noreply.github.com> Date: Sun, 9 Jul 2023 05:37:48 +0200 Subject: [PATCH 32/42] Add support for displacement in MDL generation (#1396) --- source/MaterialXGenMdl/MdlShaderGenerator.cpp | 21 ++++++++++-- source/MaterialXGenMdl/MdlSyntax.cpp | 6 ++-- .../MaterialXGenMdl/Nodes/MaterialNodeMdl.cpp | 3 ++ .../MaterialXGenMdl/mdl/materialx/pbrlib.mdl | 32 ++++++++++++------- .../MaterialXGenMdl/mdl/materialx/stdlib.mdl | 6 ++-- .../MaterialXTest/MaterialXGenMdl/GenMdl.cpp | 2 +- 6 files changed, 49 insertions(+), 21 deletions(-) diff --git a/source/MaterialXGenMdl/MdlShaderGenerator.cpp b/source/MaterialXGenMdl/MdlShaderGenerator.cpp index d1399e8aed..dddf1f2f13 100644 --- a/source/MaterialXGenMdl/MdlShaderGenerator.cpp +++ b/source/MaterialXGenMdl/MdlShaderGenerator.cpp @@ -42,7 +42,6 @@ const vector DEFAULT_IMPORTS = "import ::anno::*", "import ::tex::*", "import ::mx::swizzle::*", - "import ::mx::cm::*", "using ::mx::core import *", "using ::mx::stdlib import *", "using ::mx::pbrlib import *", @@ -273,9 +272,22 @@ ShaderPtr MdlShaderGenerator::generate(const string& name, ElementPtr element, G // Get final result const string result = getUpstreamResult(outputSocket, context); + const TypeDesc* outputType = outputSocket->getType(); if (graph.hasClassification(ShaderNode::Classification::TEXTURE)) { - emitLine("color finalOutput__ = mk_color3(" + result + ")", stage); + if (outputType == Type::DISPLACEMENTSHADER) + { + emitLine("float3 displacement__ = " + result + ".geometry.displacement", stage); + emitLine("color finalOutput__ = mk_color3(" + "r: math::dot(displacement__, state::texture_tangent_u(0))," + "g: math::dot(displacement__, state::texture_tangent_v(0))," + "b: math::dot(displacement__, state::normal()))", stage); + } + else + { + emitLine("float3 displacement__ = float3(0.0)", stage); + emitLine("color finalOutput__ = mk_color3(" + result + ")", stage); + } // End shader body emitScopeEnd(stage); @@ -289,13 +301,16 @@ ShaderPtr MdlShaderGenerator::generate(const string& name, ElementPtr element, G " intensity : finalOutput__ * math::PI,\n" " mode : intensity_radiant_exitance\n" " )\n" + " ),\n" + " geometry: material_geometry(\n" + " displacement : displacement__\n" " )\n" ");"; emitBlock(textureMaterial, FilePath(), context, stage); } else { - emitLine(_syntax->getTypeSyntax(outputSocket->getType()).getName() + " finalOutput__ = " + result, stage); + emitLine(_syntax->getTypeSyntax(outputType).getName() + " finalOutput__ = " + result, stage); // End shader body emitScopeEnd(stage); diff --git a/source/MaterialXGenMdl/MdlSyntax.cpp b/source/MaterialXGenMdl/MdlSyntax.cpp index 260eb3e38a..9d5483bcca 100644 --- a/source/MaterialXGenMdl/MdlSyntax.cpp +++ b/source/MaterialXGenMdl/MdlSyntax.cpp @@ -397,9 +397,9 @@ MdlSyntax::MdlSyntax() registerTypeSyntax( Type::DISPLACEMENTSHADER, std::make_shared( - "float3", - "float3(0.0)", - "float3(0.0)")); + "material", + "material()", + "material()")); registerTypeSyntax( Type::LIGHTSHADER, diff --git a/source/MaterialXGenMdl/Nodes/MaterialNodeMdl.cpp b/source/MaterialXGenMdl/Nodes/MaterialNodeMdl.cpp index e4fff0567b..936526d59d 100644 --- a/source/MaterialXGenMdl/Nodes/MaterialNodeMdl.cpp +++ b/source/MaterialXGenMdl/Nodes/MaterialNodeMdl.cpp @@ -46,6 +46,9 @@ void MaterialNodeMdl::emitFunctionCall(const ShaderNode& _node, GenContext& cont for (ShaderInput* input : node.getInputs()) { shadergen.emitString(delim, stage); + shadergen.emitString("mxp_", stage); + shadergen.emitString(input->getName(), stage); + shadergen.emitString(": ", stage); shadergen.emitInput(input, context, stage); delim = ", "; } diff --git a/source/MaterialXGenMdl/mdl/materialx/pbrlib.mdl b/source/MaterialXGenMdl/mdl/materialx/pbrlib.mdl index 3f64767491..9c166f7468 100644 --- a/source/MaterialXGenMdl/mdl/materialx/pbrlib.mdl +++ b/source/MaterialXGenMdl/mdl/materialx/pbrlib.mdl @@ -641,23 +641,33 @@ export material mx_light( // TODO: Check if this works in the translator and higher level nodes, like // mxp_material, if not, we have to switch to the material type and // use two different names for mxp_displacemnnt. -export float3 mx_displacement_float( +export material mx_displacement_float( float mxp_displacement = 0.0, float mxp_scale = 1.0 -) -{ - return mxp_displacement * mxp_scale * state::normal(); -} +) [[ + anno::usage( "materialx:displacementshader") +]] = material( + geometry: material_geometry( + displacement: mxp_displacement * mxp_scale * state::scene_units_per_meter() * state::normal() + ) +); -export float3 mx_displacement_vector3( +export material mx_displacement_vector3( float3 mxp_displacement = float3(0.0), float mxp_scale = 1.0 -) +) [[ + anno::usage( "materialx:displacementshader") +]] = let { - return mxp_scale * ( mxp_displacement.x * state::texture_tangent_u(0) - + mxp_displacement.y * state::texture_tangent_v(0) - + mxp_displacement.z * state::normal()); -} + float3 vec = (mxp_displacement.x * state::texture_tangent_u(0) + + mxp_displacement.y * state::texture_tangent_v(0) + + mxp_displacement.z * state::normal()); +} in material( + geometry: material_geometry( + displacement: vec * mxp_scale * state::scene_units_per_meter() + ) +); + export material mx_mix_bsdf( material mxp_fg = material() [[ anno::usage( "materialx:bsdf") ]], diff --git a/source/MaterialXGenMdl/mdl/materialx/stdlib.mdl b/source/MaterialXGenMdl/mdl/materialx/stdlib.mdl index b73e881fcb..2cb313221c 100644 --- a/source/MaterialXGenMdl/mdl/materialx/stdlib.mdl +++ b/source/MaterialXGenMdl/mdl/materialx/stdlib.mdl @@ -36,8 +36,8 @@ import ::df::*; // Shader Nodes export material mx_surfacematerial( - material mxp_surfaceshader = material() [[ anno::usage( "materialx:surfaceshader") ]], - float3 mxp_displacement = float3(0.0, 0.0, 0.0) + material mxp_surfaceshader = material() [[ anno::usage( "materialx:surfaceshader") ]], + material mxp_displacementshader = material() [[ anno::usage( "materialx:displacementshader") ]] ) = material( thin_walled: false, @@ -45,7 +45,7 @@ export material mx_surfacematerial( backface: mxp_surfaceshader.backface, geometry: material_geometry( cutout_opacity: mxp_surfaceshader.geometry.cutout_opacity, - displacement : mxp_displacement, + displacement : mxp_displacementshader.geometry.displacement, normal: mxp_surfaceshader.geometry.normal ), ior: mxp_surfaceshader.ior, diff --git a/source/MaterialXTest/MaterialXGenMdl/GenMdl.cpp b/source/MaterialXTest/MaterialXGenMdl/GenMdl.cpp index fbe19a5957..e565071caa 100644 --- a/source/MaterialXTest/MaterialXGenMdl/GenMdl.cpp +++ b/source/MaterialXTest/MaterialXGenMdl/GenMdl.cpp @@ -288,7 +288,7 @@ void MdlShaderGeneratorTester::compileSource(const std::vector& so std::string iblFile = (rootPath / "resources/lights/san_giuseppe_bridge.hdr").asString(); renderCommand += " --hdr \"" + iblFile + "\" --hdr_rotate 90"; // set scene - renderCommand += " --uv_scale 0.5 1.0 --uv_offset 0.0 0.0 --uv_repeat"; + renderCommand += " --uv_scale 0.5 1.0 --uv_offset 0.0 0.0 --uv_repeat --uv_flip"; renderCommand += " --camera 0 0 3 0 0 0 --fov 45"; // set the material From 9d7b1a20f1e9f53a17eef3403b01780d092796db Mon Sep 17 00:00:00 2001 From: Jonathan Stone Date: Wed, 5 Jul 2023 14:34:00 -0700 Subject: [PATCH 33/42] Update JavaScript packages This changelist updates all referenced JavaScript packages to their latest version via 'npm update'. --- javascript/MaterialXTest/package-lock.json | 1784 +++++++++++--------- javascript/MaterialXTest/package.json | 12 +- javascript/MaterialXView/package-lock.json | 681 ++++---- javascript/MaterialXView/package.json | 6 +- 4 files changed, 1345 insertions(+), 1138 deletions(-) diff --git a/javascript/MaterialXTest/package-lock.json b/javascript/MaterialXTest/package-lock.json index ab19383536..7835f07ce5 100644 --- a/javascript/MaterialXTest/package-lock.json +++ b/javascript/MaterialXTest/package-lock.json @@ -9,27 +9,27 @@ "version": "1.0.0", "license": "ISC", "devDependencies": { - "@babel/core": "^7.20.2", - "@babel/preset-env": "^7.20.2", - "@babel/register": "^7.18.9", + "@babel/core": "^7.22.5", + "@babel/preset-env": "^7.22.5", + "@babel/register": "^7.22.5", "chai": "^4.3.7", "copyfiles": "^2.4.1", - "karma": "^6.4.1", + "karma": "^6.4.2", "karma-chai": "^0.1.0", - "karma-chrome-launcher": "^3.1.1", + "karma-chrome-launcher": "^3.2.0", "karma-mocha": "^2.0.1", "karma-mocha-reporter": "^2.2.5", - "mocha": "^10.1.0", + "mocha": "^10.2.0", "rimraf": "^3.0.2" } }, "node_modules/@ampproject/remapping": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", - "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", + "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", "dev": true, "dependencies": { - "@jridgewell/gen-mapping": "^0.1.0", + "@jridgewell/gen-mapping": "^0.3.0", "@jridgewell/trace-mapping": "^0.3.9" }, "engines": { @@ -37,46 +37,46 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", - "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.5.tgz", + "integrity": "sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==", "dev": true, "dependencies": { - "@babel/highlight": "^7.18.6" + "@babel/highlight": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/compat-data": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.1.tgz", - "integrity": "sha512-EWZ4mE2diW3QALKvDMiXnbZpRvlj+nayZ112nK93SnhqOtpdsbVD4W+2tEoT3YNBAG9RBR0ISY758ZkOgsn6pQ==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.5.tgz", + "integrity": "sha512-4Jc/YuIaYqKnDDz892kPIledykKg12Aw1PYX5i/TY28anJtacvM1Rrr8wbieB9GfEJwlzqT0hUEao0CxEebiDA==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.20.2.tgz", - "integrity": "sha512-w7DbG8DtMrJcFOi4VrLm+8QM4az8Mo+PuLBKLp2zrYRCow8W/f9xiXm5sN53C8HksCyDQwCKha9JiDoIyPjT2g==", - "dev": true, - "dependencies": { - "@ampproject/remapping": "^2.1.0", - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.20.2", - "@babel/helper-compilation-targets": "^7.20.0", - "@babel/helper-module-transforms": "^7.20.2", - "@babel/helpers": "^7.20.1", - "@babel/parser": "^7.20.2", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.20.1", - "@babel/types": "^7.20.2", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.5.tgz", + "integrity": "sha512-SBuTAjg91A3eKOvD+bPEz3LlhHZRNu1nFOVts9lzDJTXshHTjII0BAtDS3Y2DAkdZdDKWVZGVwkDfc4Clxn1dg==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.22.5", + "@babel/generator": "^7.22.5", + "@babel/helper-compilation-targets": "^7.22.5", + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helpers": "^7.22.5", + "@babel/parser": "^7.22.5", + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.5", + "@babel/types": "^7.22.5", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", - "json5": "^2.2.1", + "json5": "^2.2.2", "semver": "^6.3.0" }, "engines": { @@ -88,67 +88,54 @@ } }, "node_modules/@babel/generator": { - "version": "7.20.4", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.4.tgz", - "integrity": "sha512-luCf7yk/cm7yab6CAW1aiFnmEfBJplb/JojV56MYEK7ziWfGmFlTfmL9Ehwfy4gFhbjBfWO1wj7/TuSbVNEEtA==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.5.tgz", + "integrity": "sha512-+lcUbnTRhd0jOewtFSedLyiPsD5tswKkbgcezOqqWFUVNEwoUTlpPOBmvhG7OXWLR4jMdv0czPGH5XbflnD1EA==", "dev": true, "dependencies": { - "@babel/types": "^7.20.2", + "@babel/types": "^7.22.5", "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", "jsesc": "^2.5.1" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/generator/node_modules/@jridgewell/gen-mapping": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", - "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", - "dev": true, - "dependencies": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz", - "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", + "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", "dev": true, "dependencies": { - "@babel/types": "^7.18.6" + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.18.9.tgz", - "integrity": "sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.5.tgz", + "integrity": "sha512-m1EP3lVOPptR+2DwD125gziZNcmoNSHGmJROKoy87loWUQyJaVXDgpmruWqDARZSmtYQ+Dl25okU8+qhVzuykw==", "dev": true, "dependencies": { - "@babel/helper-explode-assignable-expression": "^7.18.6", - "@babel/types": "^7.18.9" + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.0.tgz", - "integrity": "sha512-0jp//vDGp9e8hZzBc6N/KwA5ZK3Wsm/pfm4CrY7vzegkVxc65SgSn6wYOnwHe9Js9HRQ1YTCKLGPzDtaS3RoLQ==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.5.tgz", + "integrity": "sha512-Ji+ywpHeuqxB8WDxraCiqR0xfhYjiDE/e6k7FuIaANnoOFxAHskHChz4vA1mJC9Lbm01s1PVAGhQY4FUKSkGZw==", "dev": true, "dependencies": { - "@babel/compat-data": "^7.20.0", - "@babel/helper-validator-option": "^7.18.6", + "@babel/compat-data": "^7.22.5", + "@babel/helper-validator-option": "^7.22.5", "browserslist": "^4.21.3", + "lru-cache": "^5.1.1", "semver": "^6.3.0" }, "engines": { @@ -159,18 +146,20 @@ } }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.20.2.tgz", - "integrity": "sha512-k22GoYRAHPYr9I+Gvy2ZQlAe5mGy8BqWst2wRt8cwIufWTxrsVshhIBvYNqC80N0GSFWTsqRVexOtfzlgOEDvA==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.19.0", - "@babel/helper-member-expression-to-functions": "^7.18.9", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/helper-replace-supers": "^7.19.1", - "@babel/helper-split-export-declaration": "^7.18.6" + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.5.tgz", + "integrity": "sha512-xkb58MyOYIslxu3gKmVXmjTtUPvBU4odYzbiIQbWwLKIHCsx6UGZGX6F1IznMFVnDdirseUZopzN+ZRt8Xb33Q==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-member-expression-to-functions": "^7.22.5", + "@babel/helper-optimise-call-expression": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.5", + "semver": "^6.3.0" }, "engines": { "node": ">=6.9.0" @@ -180,13 +169,14 @@ } }, "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.19.0.tgz", - "integrity": "sha512-htnV+mHX32DF81amCDrwIDr8nrp1PTm+3wfBN9/v8QJOLEioOCOG7qNyq0nHeFiWbT3Eb7gsPwEmV64UCQ1jzw==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.5.tgz", + "integrity": "sha512-1VpEFOIbMRaXyDeUwUfmTIxExLwQ+zkW+Bh5zXpApA3oQedBx9v/updixWxnx/bZpKw7u8VxWjb/qWpIcmPq8A==", "dev": true, "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "regexpu-core": "^5.1.0" + "@babel/helper-annotate-as-pure": "^7.22.5", + "regexpu-core": "^5.3.1", + "semver": "^6.3.0" }, "engines": { "node": ">=6.9.0" @@ -196,9 +186,9 @@ } }, "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz", - "integrity": "sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==", + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.0.tgz", + "integrity": "sha512-RnanLx5ETe6aybRi1cO/edaRH+bNYWaryCEmjDDYyNr4wnSzyOp8T0dWipmqVHKEY3AbVKUom50AKSlj1zmKbg==", "dev": true, "dependencies": { "@babel/helper-compilation-targets": "^7.17.7", @@ -213,125 +203,113 @@ } }, "node_modules/@babel/helper-environment-visitor": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", - "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz", + "integrity": "sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==", "dev": true, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/helper-explode-assignable-expression": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz", - "integrity": "sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/helper-function-name": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz", - "integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz", + "integrity": "sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==", "dev": true, "dependencies": { - "@babel/template": "^7.18.10", - "@babel/types": "^7.19.0" + "@babel/template": "^7.22.5", + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-hoist-variables": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", - "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", "dev": true, "dependencies": { - "@babel/types": "^7.18.6" + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.18.9.tgz", - "integrity": "sha512-RxifAh2ZoVU67PyKIO4AMi1wTenGfMR/O/ae0CCRqwgBAt5v7xjdtRw7UoSbsreKrQn5t7r89eruK/9JjYHuDg==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.22.5.tgz", + "integrity": "sha512-aBiH1NKMG0H2cGZqspNvsaBe6wNGjbJjuLy29aU+eDZjSbbN53BaxlpB02xm9v34pLTZ1nIQPFYn2qMZoa5BQQ==", "dev": true, "dependencies": { - "@babel/types": "^7.18.9" + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-imports": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", - "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz", + "integrity": "sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==", "dev": true, "dependencies": { - "@babel/types": "^7.18.6" + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.20.2.tgz", - "integrity": "sha512-zvBKyJXRbmK07XhMuujYoJ48B5yvvmM6+wcpv6Ivj4Yg6qO7NOZOSnvZN9CRl1zz1Z4cKf8YejmCMh8clOoOeA==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.5.tgz", + "integrity": "sha512-+hGKDt/Ze8GFExiVHno/2dvG5IdstpzCq0y4Qc9OJ25D4q3pKfiIP/4Vp3/JvhDkLKsDK2api3q3fpIgiIF5bw==", "dev": true, "dependencies": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-simple-access": "^7.20.2", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/helper-validator-identifier": "^7.19.1", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.20.1", - "@babel/types": "^7.20.2" + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-simple-access": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.5", + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.5", + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz", - "integrity": "sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz", + "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==", "dev": true, "dependencies": { - "@babel/types": "^7.18.6" + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", - "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", + "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz", - "integrity": "sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.5.tgz", + "integrity": "sha512-cU0Sq1Rf4Z55fgz7haOakIyM7+x/uCFwXpLPaeRzfoUtAEAuUZjZvFPjL/rk5rW693dIgn2hng1W7xbT7lWT4g==", "dev": true, "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-wrap-function": "^7.18.9", - "@babel/types": "^7.18.9" + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-wrap-function": "^7.22.5", + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -341,120 +319,121 @@ } }, "node_modules/@babel/helper-replace-supers": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.19.1.tgz", - "integrity": "sha512-T7ahH7wV0Hfs46SFh5Jz3s0B6+o8g3c+7TMxu7xKfmHikg7EAZ3I2Qk9LFhjxXq8sL7UkP5JflezNwoZa8WvWw==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.5.tgz", + "integrity": "sha512-aLdNM5I3kdI/V9xGNyKSF3X/gTyMUBohTZ+/3QdQKAA9vxIiy12E+8E2HoOP1/DjeqU+g6as35QHJNMDDYpuCg==", "dev": true, "dependencies": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-member-expression-to-functions": "^7.18.9", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/traverse": "^7.19.1", - "@babel/types": "^7.19.0" + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-member-expression-to-functions": "^7.22.5", + "@babel/helper-optimise-call-expression": "^7.22.5", + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.5", + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-simple-access": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz", - "integrity": "sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", + "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", "dev": true, "dependencies": { - "@babel/types": "^7.20.2" + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.20.0.tgz", - "integrity": "sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz", + "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==", "dev": true, "dependencies": { - "@babel/types": "^7.20.0" + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-split-export-declaration": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", - "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.5.tgz", + "integrity": "sha512-thqK5QFghPKWLhAV321lxF95yCg2K3Ob5yw+M3VHWfdia0IkPXUtoLH8x/6Fh486QUvzhb8YOWHChTVen2/PoQ==", "dev": true, "dependencies": { - "@babel/types": "^7.18.6" + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-string-parser": { - "version": "7.19.4", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", - "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", + "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", - "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz", + "integrity": "sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-option": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", - "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz", + "integrity": "sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-wrap-function": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.19.0.tgz", - "integrity": "sha512-txX8aN8CZyYGTwcLhlk87KRqncAzhh5TpQamZUa0/u3an36NtDpUP6bQgBCBcLeBs09R/OwQu3OjK0k/HwfNDg==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.5.tgz", + "integrity": "sha512-bYqLIBSEshYcYQyfks8ewYA8S30yaGSeRslcvKMvoUk6HHPySbxHq9YRi6ghhzEU+yhQv9bP/jXnygkStOcqZw==", "dev": true, "dependencies": { - "@babel/helper-function-name": "^7.19.0", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.19.0", - "@babel/types": "^7.19.0" + "@babel/helper-function-name": "^7.22.5", + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.5", + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.1.tgz", - "integrity": "sha512-J77mUVaDTUJFZ5BpP6mMn6OIl3rEWymk2ZxDBQJUG3P+PbmyMcF3bYWvz0ma69Af1oobDqT/iAsvzhB58xhQUg==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.5.tgz", + "integrity": "sha512-pSXRmfE1vzcUIDFQcSGA5Mr+GxBV9oiRKDuDxXvWQQBCh8HoIjs/2DlDB7H8smac1IVrB9/xdXj2N3Wol9Cr+Q==", "dev": true, "dependencies": { - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.20.1", - "@babel/types": "^7.20.0" + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.5", + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/highlight": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", - "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.5.tgz", + "integrity": "sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==", "dev": true, "dependencies": { - "@babel/helper-validator-identifier": "^7.18.6", + "@babel/helper-validator-identifier": "^7.22.5", "chalk": "^2.0.0", "js-tokens": "^4.0.0" }, @@ -463,9 +442,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.20.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.3.tgz", - "integrity": "sha512-OP/s5a94frIPXwjzEcv5S/tpQfc6XhxYUnmWpgdqMWGgYCuErA3SzozaRAMQgSZWKeTJxht9aWAkUY+0UzvOFg==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.5.tgz", + "integrity": "sha512-DFZMC9LJUG9PLOclRC32G63UXwzqS2koQC8dkx+PLdmt1xSePYpbT/NbsrJy8Q/muXz7o/h/d4A7Fuyixm559Q==", "dev": true, "bin": { "parser": "bin/babel-parser.js" @@ -475,12 +454,12 @@ } }, "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz", - "integrity": "sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.22.5.tgz", + "integrity": "sha512-NP1M5Rf+u2Gw9qfSO4ihjcTGW5zXTi36ITLd4/EoAcEhIZ0yjMqmftDNl3QC19CX7olhrjpyU454g/2W7X0jvQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -490,14 +469,14 @@ } }, "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.18.9.tgz", - "integrity": "sha512-AHrP9jadvH7qlOj6PINbgSuphjQUAK7AOT7DPjBo9EHoLhQTnnK5u45e1Hd4DbSQEO9nqPWtQ89r+XEOWFScKg==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.5.tgz", + "integrity": "sha512-31Bb65aZaUwqCbWMnZPduIZxCBngHFlzyN6Dq6KAJjtx+lx6ohKHubc61OomYi7XwVD4Ol0XCVz4h+pYFR048g==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9", - "@babel/plugin-proposal-optional-chaining": "^7.18.9" + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/plugin-transform-optional-chaining": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -506,17 +485,11 @@ "@babel/core": "^7.13.0" } }, - "node_modules/@babel/plugin-proposal-async-generator-functions": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.1.tgz", - "integrity": "sha512-Gh5rchzSwE4kC+o/6T8waD0WHEQIsDmjltY8WnWRXHUdH8axZhuH86Ov9M72YhJfDrZseQwuuWaaIT/TmePp3g==", + "node_modules/@babel/plugin-proposal-private-property-in-object": { + "version": "7.21.0-placeholder-for-preset-env.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", + "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", "dev": true, - "dependencies": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-plugin-utils": "^7.19.0", - "@babel/helper-remap-async-to-generator": "^7.18.9", - "@babel/plugin-syntax-async-generators": "^7.8.4" - }, "engines": { "node": ">=6.9.0" }, @@ -524,63 +497,53 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-class-properties": { + "node_modules/@babel/plugin-proposal-unicode-property-regex": { "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", - "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", + "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", "dev": true, "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-create-regexp-features-plugin": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" }, "engines": { - "node": ">=6.9.0" + "node": ">=4" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-class-static-block": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.18.6.tgz", - "integrity": "sha512-+I3oIiNxrCpup3Gi8n5IGMwj0gOCAjcJUSQEcotNnCCPMEnixawOQ+KeJPlgfjzx+FKQ1QSyZOWe7wmoJp7vhw==", + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", "dev": true, "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-class-static-block": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" + "@babel/helper-plugin-utils": "^7.8.0" }, "peerDependencies": { - "@babel/core": "^7.12.0" + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-dynamic-import": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz", - "integrity": "sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==", + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-dynamic-import": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" + "@babel/helper-plugin-utils": "^7.12.13" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-export-namespace-from": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz", - "integrity": "sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==", + "node_modules/@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + "@babel/helper-plugin-utils": "^7.14.5" }, "engines": { "node": ">=6.9.0" @@ -589,30 +552,37 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-json-strings": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz", - "integrity": "sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==", + "node_modules/@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-json-strings": "^7.8.3" + "@babel/helper-plugin-utils": "^7.8.0" }, - "engines": { - "node": ">=6.9.0" + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.3" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.18.9.tgz", - "integrity": "sha512-128YbMpjCrP35IOExw2Fq+x55LMP42DzhOhX2aNNIdI9avSWl2PI0yuBWarr3RYpZBSPtabfadkH2yeRiMD61Q==", + "node_modules/@babel/plugin-syntax-import-assertions": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.22.5.tgz", + "integrity": "sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -621,14 +591,13 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", - "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==", + "node_modules/@babel/plugin-syntax-import-attributes": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.22.5.tgz", + "integrity": "sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -637,82 +606,109 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-numeric-separator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz", - "integrity": "sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==", + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" + "@babel/helper-plugin-utils": "^7.10.4" }, - "engines": { - "node": ">=6.9.0" + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-object-rest-spread": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.2.tgz", - "integrity": "sha512-Ks6uej9WFK+fvIMesSqbAto5dD8Dz4VuuFvGJFKgIGSkJuRGcrwGECPA1fDgQK3/DbExBJpEkTeYeB8geIFCSQ==", + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", "dev": true, "dependencies": { - "@babel/compat-data": "^7.20.1", - "@babel/helper-compilation-targets": "^7.20.0", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.20.1" + "@babel/helper-plugin-utils": "^7.10.4" }, - "engines": { - "node": ">=6.9.0" + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-optional-catch-binding": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz", - "integrity": "sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==", + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + "@babel/helper-plugin-utils": "^7.10.4" }, - "engines": { - "node": ">=6.9.0" + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-optional-chaining": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.18.9.tgz", - "integrity": "sha512-v5nwt4IqBXihxGsW2QmCWMDS3B3bzGIk/EQVZz2ei7f3NJl8NzAJVvUmpDW5q1CRNY+Beb/k58UAH1Km1N411w==", + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" + "@babel/helper-plugin-utils": "^7.8.0" }, - "engines": { - "node": ">=6.9.0" + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-private-methods": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz", - "integrity": "sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==", + "node_modules/@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", "dev": true, "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.14.5" }, "engines": { "node": ">=6.9.0" @@ -721,16 +717,13 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-private-property-in-object": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.18.6.tgz", - "integrity": "sha512-9Rysx7FOctvT5ouj5JODjAFAkgGoudQuLPamZb0v1TGLpapdNaftzifU8NTWQm0IRjqoYypdrSmyWgkocDQ8Dw==", + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", "dev": true, "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + "@babel/helper-plugin-utils": "^7.14.5" }, "engines": { "node": ">=6.9.0" @@ -739,53 +732,47 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-unicode-property-regex": { + "node_modules/@babel/plugin-syntax-unicode-sets-regex": { "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", - "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", + "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", "dev": true, "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" }, "engines": { - "node": ">=4" + "node": ">=6.9.0" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@babel/core": "^7.0.0" } }, - "node_modules/@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "node_modules/@babel/plugin-transform-arrow-functions": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.22.5.tgz", + "integrity": "sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" + "@babel/helper-plugin-utils": "^7.22.5" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-class-static-block": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", - "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "node_modules/@babel/plugin-transform-async-generator-functions": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.5.tgz", + "integrity": "sha512-gGOEvFzm3fWoyD5uZq7vVTD57pPJ3PczPUD/xCFGjzBpUosnklmXyKnGQbbbGs1NPNPskFex0j93yKbHt0cHyg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-remap-async-to-generator": "^7.22.5", + "@babel/plugin-syntax-async-generators": "^7.8.4" }, "engines": { "node": ">=6.9.0" @@ -794,37 +781,45 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", - "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "node_modules/@babel/plugin-transform-async-to-generator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.22.5.tgz", + "integrity": "sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" + "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-remap-async-to-generator": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-export-namespace-from": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", - "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "node_modules/@babel/plugin-transform-block-scoped-functions": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.22.5.tgz", + "integrity": "sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.8.3" + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-import-assertions": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.20.0.tgz", - "integrity": "sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ==", + "node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.22.5.tgz", + "integrity": "sha512-EcACl1i5fSQ6bt+YGuU/XGCeZKStLmyVGytWkpyhCLeQVA0eu6Wtiw92V+I1T/hnezUv7j74dA/Ro69gWcU+hg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.19.0" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -833,97 +828,132 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "node_modules/@babel/plugin-transform-class-properties": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.22.5.tgz", + "integrity": "sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "node_modules/@babel/plugin-transform-class-static-block": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.22.5.tgz", + "integrity": "sha512-SPToJ5eYZLxlnp1UzdARpOGeC2GbHvr9d/UV0EukuVx8atktg194oe+C5BqQ8jRTkgLRVOPYeXRSBg1IlMoVRA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@babel/core": "^7.12.0" } }, - "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" + "node_modules/@babel/plugin-transform-classes": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.5.tgz", + "integrity": "sha512-2edQhLfibpWpsVBx2n/GKOz6JdGQvLruZQfGr9l1qes2KQaWswjBzhQF7UDUZMNaMMQeYnQzxwOMPsbYF7wqPQ==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-compilation-targets": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-optimise-call-expression": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.5", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "node_modules/@babel/plugin-transform-computed-properties": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.22.5.tgz", + "integrity": "sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/template": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "node_modules/@babel/plugin-transform-destructuring": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.22.5.tgz", + "integrity": "sha512-GfqcFuGW8vnEqTUBM7UtPd5A4q797LTvvwKxXTgRsFjoqaJiEg9deBG6kWeQYkVEL569NpnmpC0Pkr/8BLKGnQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "node_modules/@babel/plugin-transform-dotall-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.22.5.tgz", + "integrity": "sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "node_modules/@babel/plugin-transform-duplicate-keys": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.22.5.tgz", + "integrity": "sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", - "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "node_modules/@babel/plugin-transform-dynamic-import": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.22.5.tgz", + "integrity": "sha512-0MC3ppTB1AMxd8fXjSrbPa7LT9hrImt+/fcj+Pg5YMD7UQyWp/02+JWpdnCymmsXwIx5Z+sYn1bwCn4ZJNvhqQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" }, "engines": { "node": ">=6.9.0" @@ -932,13 +962,14 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "node_modules/@babel/plugin-transform-exponentiation-operator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.22.5.tgz", + "integrity": "sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -947,13 +978,14 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.18.6.tgz", - "integrity": "sha512-9S9X9RUefzrsHZmKMbDXxweEH+YlE8JJEuat9FdvW9Qh1cw7W64jELCtWNkPBPX5En45uy28KGvA/AySqUh8CQ==", + "node_modules/@babel/plugin-transform-export-namespace-from": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.22.5.tgz", + "integrity": "sha512-X4hhm7FRnPgd4nDA4b/5V280xCx6oL7Oob5+9qVS5C13Zq4bh1qq7LU0GgRU6b5dBWBvhGaXYVB4AcN6+ol6vg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" }, "engines": { "node": ">=6.9.0" @@ -962,15 +994,13 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.18.6.tgz", - "integrity": "sha512-ARE5wZLKnTgPW7/1ftQmSi1CmkqqHo2DNmtztFhvgtOWSDfq0Cq9/9L+KnZNYSNrydBekhW3rwShduf59RoXag==", + "node_modules/@babel/plugin-transform-for-of": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.5.tgz", + "integrity": "sha512-3kxQjX1dU9uudwSshyLeEipvrLjBCVthCgeTp6CzE/9JYrlAIaeekVxRpCWsDDfYTfRZRoCeZatCQvwo+wvK8A==", "dev": true, "dependencies": { - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-remap-async-to-generator": "^7.18.6" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -979,13 +1009,15 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz", - "integrity": "sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==", + "node_modules/@babel/plugin-transform-function-name": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.22.5.tgz", + "integrity": "sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-compilation-targets": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -994,13 +1026,14 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.20.2.tgz", - "integrity": "sha512-y5V15+04ry69OV2wULmwhEA6jwSWXO1TwAtIwiPXcvHcoOQUqpyMVd2bDsQJMW8AurjulIyUV8kDqtjSwHy1uQ==", + "node_modules/@babel/plugin-transform-json-strings": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.22.5.tgz", + "integrity": "sha512-DuCRB7fu8MyTLbEQd1ew3R85nx/88yMoqo2uPSjevMj3yoN7CDM8jkgrY0wmVxfJZyJ/B9fE1iq7EQppWQmR5A==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2" + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-json-strings": "^7.8.3" }, "engines": { "node": ">=6.9.0" @@ -1009,21 +1042,13 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-classes": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.20.2.tgz", - "integrity": "sha512-9rbPp0lCVVoagvtEyQKSo5L8oo0nQS/iif+lwlAz29MccX2642vWDlSZK+2T2buxbopotId2ld7zZAzRfz9j1g==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-compilation-targets": "^7.20.0", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.19.0", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-replace-supers": "^7.19.1", - "@babel/helper-split-export-declaration": "^7.18.6", - "globals": "^11.1.0" + "node_modules/@babel/plugin-transform-literals": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.22.5.tgz", + "integrity": "sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1032,13 +1057,14 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.18.9.tgz", - "integrity": "sha512-+i0ZU1bCDymKakLxn5srGHrsAPRELC2WIbzwjLhHW9SIE1cPYkLCL0NlnXMZaM1vhfgA2+M7hySk42VBvrkBRw==", + "node_modules/@babel/plugin-transform-logical-assignment-operators": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.22.5.tgz", + "integrity": "sha512-MQQOUW1KL8X0cDWfbwYP+TbVbZm16QmQXJQ+vndPtH/BoO0lOKpVoEDMI7+PskYxH+IiE0tS8xZye0qr1lGzSA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" }, "engines": { "node": ">=6.9.0" @@ -1047,13 +1073,13 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.20.2.tgz", - "integrity": "sha512-mENM+ZHrvEgxLTBXUiQ621rRXZes3KWUv6NdQlrnr1TkWVw+hUjQBZuP2X32qKlrlG2BzgR95gkuCRSkJl8vIw==", + "node_modules/@babel/plugin-transform-member-expression-literals": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.22.5.tgz", + "integrity": "sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1062,14 +1088,14 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz", - "integrity": "sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==", + "node_modules/@babel/plugin-transform-modules-amd": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.22.5.tgz", + "integrity": "sha512-R+PTfLTcYEmb1+kK7FNkhQ1gP4KgjpSO6HfH9+f8/yfp2Nt3ggBjiVpRwmwTlfqZLafYKJACy36yDXlEmI9HjQ==", "dev": true, "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1078,13 +1104,15 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.9.tgz", - "integrity": "sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==", + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.22.5.tgz", + "integrity": "sha512-B4pzOXj+ONRmuaQTg05b3y/4DuFz3WcCNAXPLb2Q0GT0TrGKGxNKV4jwsXts+StaM0LQczZbOpj8o1DLPDJIiA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-simple-access": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1093,14 +1121,16 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz", - "integrity": "sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==", + "node_modules/@babel/plugin-transform-modules-systemjs": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.22.5.tgz", + "integrity": "sha512-emtEpoaTMsOs6Tzz+nbmcePl6AKVtS1yC4YNAeMun9U8YCsgadPNxnOPQ8GhHFB2qdx+LZu9LgoC0Lthuu05DQ==", "dev": true, "dependencies": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1109,13 +1139,14 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-for-of": { - "version": "7.18.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.8.tgz", - "integrity": "sha512-yEfTRnjuskWYo0k1mHUqrVWaZwrdq8AYbfrpqULOJOaucGSp4mNMVps+YtA8byoevxS/urwU75vyhQIxcCgiBQ==", + "node_modules/@babel/plugin-transform-modules-umd": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.22.5.tgz", + "integrity": "sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1124,30 +1155,29 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-function-name": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz", - "integrity": "sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==", + "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz", + "integrity": "sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==", "dev": true, "dependencies": { - "@babel/helper-compilation-targets": "^7.18.9", - "@babel/helper-function-name": "^7.18.9", - "@babel/helper-plugin-utils": "^7.18.9" + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@babel/core": "^7.0.0" } }, - "node_modules/@babel/plugin-transform-literals": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz", - "integrity": "sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==", + "node_modules/@babel/plugin-transform-new-target": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.22.5.tgz", + "integrity": "sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1156,13 +1186,14 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-member-expression-literals": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz", - "integrity": "sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==", + "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.22.5.tgz", + "integrity": "sha512-6CF8g6z1dNYZ/VXok5uYkkBBICHZPiGEl7oDnAx2Mt1hlHVHOSIKWJaXHjQJA5VB43KZnXZDIexMchY4y2PGdA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" }, "engines": { "node": ">=6.9.0" @@ -1171,14 +1202,14 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.19.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.19.6.tgz", - "integrity": "sha512-uG3od2mXvAtIFQIh0xrpLH6r5fpSQN04gIVovl+ODLdUMANokxQLZnPBHcjmv3GxRjnqwLuHvppjjcelqUFZvg==", + "node_modules/@babel/plugin-transform-numeric-separator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.22.5.tgz", + "integrity": "sha512-NbslED1/6M+sXiwwtcAB/nieypGw02Ejf4KtDeMkCEpP6gWFMX1wI9WKYua+4oBneCCEmulOkRpwywypVZzs/g==", "dev": true, "dependencies": { - "@babel/helper-module-transforms": "^7.19.6", - "@babel/helper-plugin-utils": "^7.19.0" + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" }, "engines": { "node": ">=6.9.0" @@ -1187,15 +1218,17 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.19.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.19.6.tgz", - "integrity": "sha512-8PIa1ym4XRTKuSsOUXqDG0YaOlEuTVvHMe5JCfgBMOtHvJKw/4NGovEGN33viISshG/rZNVrACiBmPQLvWN8xQ==", + "node_modules/@babel/plugin-transform-object-rest-spread": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.5.tgz", + "integrity": "sha512-Kk3lyDmEslH9DnvCDA1s1kkd3YWQITiBOHngOtDL9Pt6BZjzqb6hiOlb8VfjiiQJ2unmegBqZu0rx5RxJb5vmQ==", "dev": true, "dependencies": { - "@babel/helper-module-transforms": "^7.19.6", - "@babel/helper-plugin-utils": "^7.19.0", - "@babel/helper-simple-access": "^7.19.4" + "@babel/compat-data": "^7.22.5", + "@babel/helper-compilation-targets": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1204,16 +1237,14 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.19.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.19.6.tgz", - "integrity": "sha512-fqGLBepcc3kErfR9R3DnVpURmckXP7gj7bAlrTQyBxrigFqszZCkFkcoxzCp2v32XmwXLvbw+8Yq9/b+QqksjQ==", + "node_modules/@babel/plugin-transform-object-super": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.22.5.tgz", + "integrity": "sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw==", "dev": true, "dependencies": { - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-module-transforms": "^7.19.6", - "@babel/helper-plugin-utils": "^7.19.0", - "@babel/helper-validator-identifier": "^7.19.1" + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1222,14 +1253,14 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz", - "integrity": "sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==", + "node_modules/@babel/plugin-transform-optional-catch-binding": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.22.5.tgz", + "integrity": "sha512-pH8orJahy+hzZje5b8e2QIlBWQvGpelS76C63Z+jhZKsmzfNaPQ+LaW6dcJ9bxTpo1mtXbgHwy765Ro3jftmUg==", "dev": true, "dependencies": { - "@babel/helper-module-transforms": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" }, "engines": { "node": ">=6.9.0" @@ -1238,29 +1269,30 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.19.1.tgz", - "integrity": "sha512-oWk9l9WItWBQYS4FgXD4Uyy5kq898lvkXpXQxoJEY1RnvPk4R/Dvu2ebXU9q8lP+rlMwUQTFf2Ok6d78ODa0kw==", + "node_modules/@babel/plugin-transform-optional-chaining": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.5.tgz", + "integrity": "sha512-AconbMKOMkyG+xCng2JogMCDcqW8wedQAqpVIL4cOSescZ7+iW8utC6YDZLMCSUIReEA733gzRSaOSXMAt/4WQ==", "dev": true, "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.19.0", - "@babel/helper-plugin-utils": "^7.19.0" + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { - "@babel/core": "^7.0.0" + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-new-target": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz", - "integrity": "sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==", + "node_modules/@babel/plugin-transform-parameters": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.5.tgz", + "integrity": "sha512-AVkFUBurORBREOmHRKo06FjHYgjrabpdqRSwq6+C7R5iTCZOsM4QbcB27St0a4U6fffyAOqh3s/qEfybAhfivg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1269,14 +1301,14 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-object-super": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz", - "integrity": "sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==", + "node_modules/@babel/plugin-transform-private-methods": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.22.5.tgz", + "integrity": "sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-replace-supers": "^7.18.6" + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1285,13 +1317,16 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-parameters": { - "version": "7.20.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.20.3.tgz", - "integrity": "sha512-oZg/Fpx0YDrj13KsLyO8I/CX3Zdw7z0O9qOd95SqcoIzuqy/WTGWvePeHAnZCN54SfdyjHcb1S30gc8zlzlHcA==", + "node_modules/@babel/plugin-transform-private-property-in-object": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.22.5.tgz", + "integrity": "sha512-/9xnaTTJcVoBtSSmrVyhtSvO3kbqS2ODoh2juEU72c3aYonNF0OMGiaz2gjukyKM2wBBYJP38S4JiE0Wfb5VMQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2" + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" }, "engines": { "node": ">=6.9.0" @@ -1301,12 +1336,12 @@ } }, "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz", - "integrity": "sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.22.5.tgz", + "integrity": "sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1316,13 +1351,13 @@ } }, "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.18.6.tgz", - "integrity": "sha512-poqRI2+qiSdeldcz4wTSTXBRryoq3Gc70ye7m7UD5Ww0nE29IXqMl6r7Nd15WBgRd74vloEMlShtH6CKxVzfmQ==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.22.5.tgz", + "integrity": "sha512-rR7KePOE7gfEtNTh9Qw+iO3Q/e4DEsoQ+hdvM6QUDH7JRJ5qxq5AA52ZzBWbI5i9lfNuvySgOGP8ZN7LAmaiPw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "regenerator-transform": "^0.15.0" + "@babel/helper-plugin-utils": "^7.22.5", + "regenerator-transform": "^0.15.1" }, "engines": { "node": ">=6.9.0" @@ -1332,12 +1367,12 @@ } }, "node_modules/@babel/plugin-transform-reserved-words": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz", - "integrity": "sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.22.5.tgz", + "integrity": "sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1347,12 +1382,12 @@ } }, "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz", - "integrity": "sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.22.5.tgz", + "integrity": "sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1362,13 +1397,13 @@ } }, "node_modules/@babel/plugin-transform-spread": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.19.0.tgz", - "integrity": "sha512-RsuMk7j6n+r752EtzyScnWkQyuJdli6LdO5Klv8Yx0OfPVTcQkIUfS8clx5e9yHXzlnhOZF3CbQ8C2uP5j074w==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.22.5.tgz", + "integrity": "sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.19.0", - "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9" + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1378,12 +1413,12 @@ } }, "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz", - "integrity": "sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.22.5.tgz", + "integrity": "sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1393,12 +1428,12 @@ } }, "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz", - "integrity": "sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.22.5.tgz", + "integrity": "sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1408,12 +1443,12 @@ } }, "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz", - "integrity": "sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.22.5.tgz", + "integrity": "sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1423,12 +1458,28 @@ } }, "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.10.tgz", - "integrity": "sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.22.5.tgz", + "integrity": "sha512-biEmVg1IYB/raUO5wT1tgfacCef15Fbzhkx493D3urBI++6hpJ+RFG4SrWMn0NEZLfvilqKf3QDrRVZHo08FYg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-property-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.22.5.tgz", + "integrity": "sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1438,13 +1489,13 @@ } }, "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz", - "integrity": "sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.22.5.tgz", + "integrity": "sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg==", "dev": true, "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1453,39 +1504,43 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-transform-unicode-sets-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.22.5.tgz", + "integrity": "sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, "node_modules/@babel/preset-env": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.20.2.tgz", - "integrity": "sha512-1G0efQEWR1EHkKvKHqbG+IN/QdgwfByUpM5V5QroDzGV2t3S/WXNQd693cHiHTlCFMpr9B6FkPFXDA2lQcKoDg==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.20.1", - "@babel/helper-compilation-targets": "^7.20.0", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-validator-option": "^7.18.6", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.18.6", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.18.9", - "@babel/plugin-proposal-async-generator-functions": "^7.20.1", - "@babel/plugin-proposal-class-properties": "^7.18.6", - "@babel/plugin-proposal-class-static-block": "^7.18.6", - "@babel/plugin-proposal-dynamic-import": "^7.18.6", - "@babel/plugin-proposal-export-namespace-from": "^7.18.9", - "@babel/plugin-proposal-json-strings": "^7.18.6", - "@babel/plugin-proposal-logical-assignment-operators": "^7.18.9", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.6", - "@babel/plugin-proposal-numeric-separator": "^7.18.6", - "@babel/plugin-proposal-object-rest-spread": "^7.20.2", - "@babel/plugin-proposal-optional-catch-binding": "^7.18.6", - "@babel/plugin-proposal-optional-chaining": "^7.18.9", - "@babel/plugin-proposal-private-methods": "^7.18.6", - "@babel/plugin-proposal-private-property-in-object": "^7.18.6", - "@babel/plugin-proposal-unicode-property-regex": "^7.18.6", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.22.5.tgz", + "integrity": "sha512-fj06hw89dpiZzGZtxn+QybifF07nNiZjZ7sazs2aVDcysAZVGjW7+7iFYxg6GLNM47R/thYfLdrXc+2f11Vi9A==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.22.5", + "@babel/helper-compilation-targets": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-option": "^7.22.5", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.22.5", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.22.5", + "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", "@babel/plugin-syntax-async-generators": "^7.8.4", "@babel/plugin-syntax-class-properties": "^7.12.13", "@babel/plugin-syntax-class-static-block": "^7.14.5", "@babel/plugin-syntax-dynamic-import": "^7.8.3", "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-import-assertions": "^7.20.0", + "@babel/plugin-syntax-import-assertions": "^7.22.5", + "@babel/plugin-syntax-import-attributes": "^7.22.5", + "@babel/plugin-syntax-import-meta": "^7.10.4", "@babel/plugin-syntax-json-strings": "^7.8.3", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", @@ -1495,44 +1550,61 @@ "@babel/plugin-syntax-optional-chaining": "^7.8.3", "@babel/plugin-syntax-private-property-in-object": "^7.14.5", "@babel/plugin-syntax-top-level-await": "^7.14.5", - "@babel/plugin-transform-arrow-functions": "^7.18.6", - "@babel/plugin-transform-async-to-generator": "^7.18.6", - "@babel/plugin-transform-block-scoped-functions": "^7.18.6", - "@babel/plugin-transform-block-scoping": "^7.20.2", - "@babel/plugin-transform-classes": "^7.20.2", - "@babel/plugin-transform-computed-properties": "^7.18.9", - "@babel/plugin-transform-destructuring": "^7.20.2", - "@babel/plugin-transform-dotall-regex": "^7.18.6", - "@babel/plugin-transform-duplicate-keys": "^7.18.9", - "@babel/plugin-transform-exponentiation-operator": "^7.18.6", - "@babel/plugin-transform-for-of": "^7.18.8", - "@babel/plugin-transform-function-name": "^7.18.9", - "@babel/plugin-transform-literals": "^7.18.9", - "@babel/plugin-transform-member-expression-literals": "^7.18.6", - "@babel/plugin-transform-modules-amd": "^7.19.6", - "@babel/plugin-transform-modules-commonjs": "^7.19.6", - "@babel/plugin-transform-modules-systemjs": "^7.19.6", - "@babel/plugin-transform-modules-umd": "^7.18.6", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.19.1", - "@babel/plugin-transform-new-target": "^7.18.6", - "@babel/plugin-transform-object-super": "^7.18.6", - "@babel/plugin-transform-parameters": "^7.20.1", - "@babel/plugin-transform-property-literals": "^7.18.6", - "@babel/plugin-transform-regenerator": "^7.18.6", - "@babel/plugin-transform-reserved-words": "^7.18.6", - "@babel/plugin-transform-shorthand-properties": "^7.18.6", - "@babel/plugin-transform-spread": "^7.19.0", - "@babel/plugin-transform-sticky-regex": "^7.18.6", - "@babel/plugin-transform-template-literals": "^7.18.9", - "@babel/plugin-transform-typeof-symbol": "^7.18.9", - "@babel/plugin-transform-unicode-escapes": "^7.18.10", - "@babel/plugin-transform-unicode-regex": "^7.18.6", + "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", + "@babel/plugin-transform-arrow-functions": "^7.22.5", + "@babel/plugin-transform-async-generator-functions": "^7.22.5", + "@babel/plugin-transform-async-to-generator": "^7.22.5", + "@babel/plugin-transform-block-scoped-functions": "^7.22.5", + "@babel/plugin-transform-block-scoping": "^7.22.5", + "@babel/plugin-transform-class-properties": "^7.22.5", + "@babel/plugin-transform-class-static-block": "^7.22.5", + "@babel/plugin-transform-classes": "^7.22.5", + "@babel/plugin-transform-computed-properties": "^7.22.5", + "@babel/plugin-transform-destructuring": "^7.22.5", + "@babel/plugin-transform-dotall-regex": "^7.22.5", + "@babel/plugin-transform-duplicate-keys": "^7.22.5", + "@babel/plugin-transform-dynamic-import": "^7.22.5", + "@babel/plugin-transform-exponentiation-operator": "^7.22.5", + "@babel/plugin-transform-export-namespace-from": "^7.22.5", + "@babel/plugin-transform-for-of": "^7.22.5", + "@babel/plugin-transform-function-name": "^7.22.5", + "@babel/plugin-transform-json-strings": "^7.22.5", + "@babel/plugin-transform-literals": "^7.22.5", + "@babel/plugin-transform-logical-assignment-operators": "^7.22.5", + "@babel/plugin-transform-member-expression-literals": "^7.22.5", + "@babel/plugin-transform-modules-amd": "^7.22.5", + "@babel/plugin-transform-modules-commonjs": "^7.22.5", + "@babel/plugin-transform-modules-systemjs": "^7.22.5", + "@babel/plugin-transform-modules-umd": "^7.22.5", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5", + "@babel/plugin-transform-new-target": "^7.22.5", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.22.5", + "@babel/plugin-transform-numeric-separator": "^7.22.5", + "@babel/plugin-transform-object-rest-spread": "^7.22.5", + "@babel/plugin-transform-object-super": "^7.22.5", + "@babel/plugin-transform-optional-catch-binding": "^7.22.5", + "@babel/plugin-transform-optional-chaining": "^7.22.5", + "@babel/plugin-transform-parameters": "^7.22.5", + "@babel/plugin-transform-private-methods": "^7.22.5", + "@babel/plugin-transform-private-property-in-object": "^7.22.5", + "@babel/plugin-transform-property-literals": "^7.22.5", + "@babel/plugin-transform-regenerator": "^7.22.5", + "@babel/plugin-transform-reserved-words": "^7.22.5", + "@babel/plugin-transform-shorthand-properties": "^7.22.5", + "@babel/plugin-transform-spread": "^7.22.5", + "@babel/plugin-transform-sticky-regex": "^7.22.5", + "@babel/plugin-transform-template-literals": "^7.22.5", + "@babel/plugin-transform-typeof-symbol": "^7.22.5", + "@babel/plugin-transform-unicode-escapes": "^7.22.5", + "@babel/plugin-transform-unicode-property-regex": "^7.22.5", + "@babel/plugin-transform-unicode-regex": "^7.22.5", + "@babel/plugin-transform-unicode-sets-regex": "^7.22.5", "@babel/preset-modules": "^0.1.5", - "@babel/types": "^7.20.2", - "babel-plugin-polyfill-corejs2": "^0.3.3", - "babel-plugin-polyfill-corejs3": "^0.6.0", - "babel-plugin-polyfill-regenerator": "^0.4.1", - "core-js-compat": "^3.25.1", + "@babel/types": "^7.22.5", + "babel-plugin-polyfill-corejs2": "^0.4.3", + "babel-plugin-polyfill-corejs3": "^0.8.1", + "babel-plugin-polyfill-regenerator": "^0.5.0", + "core-js-compat": "^3.30.2", "semver": "^6.3.0" }, "engines": { @@ -1559,9 +1631,9 @@ } }, "node_modules/@babel/register": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.18.9.tgz", - "integrity": "sha512-ZlbnXDcNYHMR25ITwwNKT88JiaukkdVj/nG7r3wnuXkOTHc60Uy05PwMCPre0hSkY68E6zK3xz+vUJSP2jWmcw==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.22.5.tgz", + "integrity": "sha512-vV6pm/4CijSQ8Y47RH5SopXzursN35RQINfGJkmOlcpAtGuf94miFvIPhCKGQN7WGIcsgG1BHEX2KVdTYwTwUQ==", "dev": true, "dependencies": { "clone-deep": "^4.0.1", @@ -1577,46 +1649,52 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/regjsgen": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", + "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==", + "dev": true + }, "node_modules/@babel/runtime": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.20.1.tgz", - "integrity": "sha512-mrzLkl6U9YLF8qpqI7TB82PESyEGjm/0Ly91jG575eVxMMlb8fYfOXFZIJ8XfLrJZQbm7dlKry2bJmXBUEkdFg==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.5.tgz", + "integrity": "sha512-ecjvYlnAaZ/KVneE/OdKYBYfgXV3Ptu6zQWmgEF7vwKhQnvVS6bjMD2XYgj+SNvQ1GfK/pjgokfPkC/2CO8CuA==", "dev": true, "dependencies": { - "regenerator-runtime": "^0.13.10" + "regenerator-runtime": "^0.13.11" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/template": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz", - "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.5.tgz", + "integrity": "sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==", "dev": true, "dependencies": { - "@babel/code-frame": "^7.18.6", - "@babel/parser": "^7.18.10", - "@babel/types": "^7.18.10" + "@babel/code-frame": "^7.22.5", + "@babel/parser": "^7.22.5", + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.1.tgz", - "integrity": "sha512-d3tN8fkVJwFLkHkBN479SOsw4DMZnz8cdbL/gvuDuzy3TS6Nfw80HuQqhw1pITbIruHyh7d1fMA47kWzmcUEGA==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.20.1", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.19.0", - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.20.1", - "@babel/types": "^7.20.0", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.5.tgz", + "integrity": "sha512-7DuIjPgERaNo6r+PZwItpjCZEa5vyw4eJGufeLxrPdBXBoLcCJCIasvK6pK/9DVNrLZTLFhUGqaC6X/PA007TQ==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.22.5", + "@babel/generator": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.5", + "@babel/parser": "^7.22.5", + "@babel/types": "^7.22.5", "debug": "^4.1.0", "globals": "^11.1.0" }, @@ -1625,13 +1703,13 @@ } }, "node_modules/@babel/types": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.2.tgz", - "integrity": "sha512-FnnvsNWgZCr232sqtXggapvlkk/tuwR/qhGzcmxI0GXLCjmPYQPzio2FbdlWuY6y1sHFfQKk+rRbUZ9VStQMog==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.5.tgz", + "integrity": "sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA==", "dev": true, "dependencies": { - "@babel/helper-string-parser": "^7.19.4", - "@babel/helper-validator-identifier": "^7.19.1", + "@babel/helper-string-parser": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.5", "to-fast-properties": "^2.0.0" }, "engines": { @@ -1648,13 +1726,14 @@ } }, "node_modules/@jridgewell/gen-mapping": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", - "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", "dev": true, "dependencies": { - "@jridgewell/set-array": "^1.0.0", - "@jridgewell/sourcemap-codec": "^1.4.10" + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" }, "engines": { "node": ">=6.0.0" @@ -1679,21 +1758,27 @@ } }, "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", "dev": true }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.17", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", - "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", + "version": "0.3.18", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", + "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", "dev": true, "dependencies": { "@jridgewell/resolve-uri": "3.1.0", "@jridgewell/sourcemap-codec": "1.4.14" } }, + "node_modules/@jridgewell/trace-mapping/node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "dev": true + }, "node_modules/@socket.io/component-emitter": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.0.tgz", @@ -1707,15 +1792,18 @@ "dev": true }, "node_modules/@types/cors": { - "version": "2.8.12", - "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.12.tgz", - "integrity": "sha512-vt+kDhq/M2ayberEtJcIN/hxXy1Pk+59g2FV/ZQceeaTyCtCucjL2Q7FXlFjtWn4n15KCr1NE2lNNFhp0lEThw==", - "dev": true + "version": "2.8.13", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.13.tgz", + "integrity": "sha512-RG8AStHlUiV5ysZQKq97copd2UmVYw3/pRMLefISZ3S1hK104Cwm7iLQ3fTKx+lsUH2CE8FlLaYeEA2LSeqYUA==", + "dev": true, + "dependencies": { + "@types/node": "*" + } }, "node_modules/@types/node": { - "version": "18.11.9", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.9.tgz", - "integrity": "sha512-CRpX21/kGdzjOpFsZSkcrXMGIBWMGNIHXXBVFSH+ggkftxg+XYP20TESbh+zFvFj3EQOl5byk0HTRn1IL6hbqg==", + "version": "20.3.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.3.3.tgz", + "integrity": "sha512-wheIYdr4NYML61AjC8MKj/2jrR/kDQri/CIpVoZwldwhnIrD/j9jIU5bJ8yBKuB2VhpFV7Ab6G2XkBjv9r9Zzw==", "dev": true }, "node_modules/accepts": { @@ -1762,9 +1850,9 @@ } }, "node_modules/anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", "dev": true, "dependencies": { "normalize-path": "^3.0.0", @@ -1790,13 +1878,13 @@ } }, "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz", - "integrity": "sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==", + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.3.tgz", + "integrity": "sha512-bM3gHc337Dta490gg+/AseNB9L4YLHxq1nGKZZSHbhXv4aTYU2MD2cjza1Ru4S6975YLTaL1K8uJf6ukJhhmtw==", "dev": true, "dependencies": { "@babel/compat-data": "^7.17.7", - "@babel/helper-define-polyfill-provider": "^0.3.3", + "@babel/helper-define-polyfill-provider": "^0.4.0", "semver": "^6.1.1" }, "peerDependencies": { @@ -1804,25 +1892,25 @@ } }, "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz", - "integrity": "sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==", + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.1.tgz", + "integrity": "sha512-ikFrZITKg1xH6pLND8zT14UPgjKHiGLqex7rGEZCH2EvhsneJaJPemmpQaIZV5AL03II+lXylw3UmddDK8RU5Q==", "dev": true, "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.3.3", - "core-js-compat": "^3.25.1" + "@babel/helper-define-polyfill-provider": "^0.4.0", + "core-js-compat": "^3.30.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz", - "integrity": "sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==", + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.0.tgz", + "integrity": "sha512-hDJtKjMLVa7Z+LwnTCxoDLQj6wdc+B8dun7ayF2fYieI6OzfuvcLMB32ihJZ4UhCBwNYGl5bg/x/P9cMdnkc2g==", "dev": true, "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.3.3" + "@babel/helper-define-polyfill-provider": "^0.4.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" @@ -1853,13 +1941,13 @@ } }, "node_modules/body-parser": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", - "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", + "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", "dev": true, "dependencies": { "bytes": "3.1.2", - "content-type": "~1.0.4", + "content-type": "~1.0.5", "debug": "2.6.9", "depd": "2.0.0", "destroy": "1.2.0", @@ -1867,7 +1955,7 @@ "iconv-lite": "0.4.24", "on-finished": "2.4.1", "qs": "6.11.0", - "raw-body": "2.5.1", + "raw-body": "2.5.2", "type-is": "~1.6.18", "unpipe": "1.0.0" }, @@ -1920,9 +2008,9 @@ "dev": true }, "node_modules/browserslist": { - "version": "4.21.4", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz", - "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==", + "version": "4.21.9", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.9.tgz", + "integrity": "sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg==", "dev": true, "funding": [ { @@ -1932,13 +2020,17 @@ { "type": "tidelift", "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" } ], "dependencies": { - "caniuse-lite": "^1.0.30001400", - "electron-to-chromium": "^1.4.251", - "node-releases": "^2.0.6", - "update-browserslist-db": "^1.0.9" + "caniuse-lite": "^1.0.30001503", + "electron-to-chromium": "^1.4.431", + "node-releases": "^2.0.12", + "update-browserslist-db": "^1.0.11" }, "bin": { "browserslist": "cli.js" @@ -1988,9 +2080,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001431", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001431.tgz", - "integrity": "sha512-zBUoFU0ZcxpvSt9IU66dXVT/3ctO1cy4y9cscs1szkPlcWb6pasYM144GqrUygUbT+k7cmUCW61cvskjcv0enQ==", + "version": "1.0.30001512", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001512.tgz", + "integrity": "sha512-2S9nK0G/mE+jasCUsMPlARhRCts1ebcp2Ji8Y8PWi4NDE1iRdLCnEPHkEfeBrGC45L4isBx5ur3IQ6yTE2mRZw==", "dev": true, "funding": [ { @@ -2000,6 +2092,10 @@ { "type": "tidelift", "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" } ] }, @@ -2175,9 +2271,9 @@ "dev": true }, "node_modules/content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", "dev": true, "engines": { "node": ">= 0.6" @@ -2218,12 +2314,12 @@ } }, "node_modules/core-js-compat": { - "version": "3.26.1", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.26.1.tgz", - "integrity": "sha512-622/KzTudvXCDLRw70iHW4KKs1aGpcRcowGWyYJr2DEBfRrd6hNJybxSWJFuZYD4ma86xhrwDDHxmDaIq4EA8A==", + "version": "3.31.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.31.0.tgz", + "integrity": "sha512-hM7YCu1cU6Opx7MXNu0NuumM0ezNeAeRKadixyiQELWY3vT3De9S4J5ZBMraWV2vZnrE1Cirl0GtFtDtMUXzPw==", "dev": true, "dependencies": { - "browserslist": "^4.21.4" + "browserslist": "^4.21.5" }, "funding": { "type": "opencollective", @@ -2294,9 +2390,9 @@ } }, "node_modules/deep-eql": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.2.tgz", - "integrity": "sha512-gT18+YW4CcW/DBNTwAmqTtkJh7f9qqScu2qFVlx7kCoeY9tlBu9cUcr7+I+Z/noG8INehS3xQgLpTtd/QUTn4w==", + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz", + "integrity": "sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==", "dev": true, "dependencies": { "type-detect": "^4.0.0" @@ -2358,9 +2454,9 @@ "dev": true }, "node_modules/electron-to-chromium": { - "version": "1.4.284", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz", - "integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==", + "version": "1.4.449", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.449.tgz", + "integrity": "sha512-TxLRpRUj/107ATefeP8VIUWNOv90xJxZZbCW/eIbSZQiuiFANCx2b7u+GbVc9X4gU+xnbvypNMYVM/WArE1DNQ==", "dev": true }, "node_modules/emoji-regex": { @@ -2379,9 +2475,9 @@ } }, "node_modules/engine.io": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.2.0.tgz", - "integrity": "sha512-4KzwW3F3bk+KlzSOY57fj/Jx6LyRQ1nbcyIadehl+AnXjKT7gDO0ORdRi/84ixvMKTym6ZKuxvbzN62HDDU1Lg==", + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.5.1.tgz", + "integrity": "sha512-mGqhI+D7YxS9KJMppR6Iuo37Ed3abhU8NdfgSvJSDUafQutrN+sPTncJYTyM9+tkhSmWodKtVYGPPHyXJEwEQA==", "dev": true, "dependencies": { "@types/cookie": "^0.4.1", @@ -2392,17 +2488,17 @@ "cookie": "~0.4.1", "cors": "~2.8.5", "debug": "~4.3.1", - "engine.io-parser": "~5.0.3", - "ws": "~8.2.3" + "engine.io-parser": "~5.1.0", + "ws": "~8.11.0" }, "engines": { "node": ">=10.0.0" } }, "node_modules/engine.io-parser": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.4.tgz", - "integrity": "sha512-+nVFp+5z1E3HcToEnO7ZIj3g+3k9389DvWtvJZz0T6/eOCPIyyxehFcedoYrZQrp0LgQbD9pPXhpMBKMd5QURg==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.1.0.tgz", + "integrity": "sha512-enySgNiK5tyZFynt3z7iqBR+Bto9EVVVvDFuTT0ioHCGbzirZVGDGiQjZzEp8hWl6hd5FSVytJGuScX1C1C35w==", "dev": true, "engines": { "node": ">=10.0.0" @@ -2649,13 +2745,14 @@ } }, "node_modules/get-intrinsic": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", - "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", + "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", "dev": true, "dependencies": { "function-bind": "^1.1.1", "has": "^1.0.3", + "has-proto": "^1.0.1", "has-symbols": "^1.0.3" }, "funding": { @@ -2704,9 +2801,9 @@ } }, "node_modules/graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", "dev": true }, "node_modules/has": { @@ -2730,6 +2827,18 @@ "node": ">=4" } }, + "node_modules/has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/has-symbols": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", @@ -2831,9 +2940,9 @@ } }, "node_modules/is-core-module": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", - "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz", + "integrity": "sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==", "dev": true, "dependencies": { "has": "^1.0.3" @@ -2978,9 +3087,9 @@ } }, "node_modules/json5": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", - "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", "dev": true, "bin": { "json5": "lib/cli.js" @@ -2999,9 +3108,9 @@ } }, "node_modules/karma": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/karma/-/karma-6.4.1.tgz", - "integrity": "sha512-Cj57NKOskK7wtFWSlMvZf459iX+kpYIPXmkNUzP2WAFcA7nhr/ALn5R7sw3w+1udFDcpMx/tuB8d5amgm3ijaA==", + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/karma/-/karma-6.4.2.tgz", + "integrity": "sha512-C6SU/53LB31BEgRg+omznBEMY4SjHU3ricV6zBcAe1EeILKkeScr+fZXtaI5WyDbkVowJxxAI6h73NcFPmXolQ==", "dev": true, "dependencies": { "@colors/colors": "1.5.0", @@ -3047,9 +3156,9 @@ } }, "node_modules/karma-chrome-launcher": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-3.1.1.tgz", - "integrity": "sha512-hsIglcq1vtboGPAN+DGCISCFOxW+ZVnIqhDQcCMqqCp+4dmJ0Qpq5QAjkbA0X2L9Mi6OBkHi2Srrbmm7pUKkzQ==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-3.2.0.tgz", + "integrity": "sha512-rE9RkUPI7I9mAxByQWkGJFXfFD6lE4gC5nPuZdobf/QdTEJI6EU4yIay/cfU/xV4ZxlM5JiTv7zWYgA64NpS5Q==", "dev": true, "dependencies": { "which": "^1.2.1" @@ -3139,16 +3248,16 @@ } }, "node_modules/log4js": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/log4js/-/log4js-6.7.0.tgz", - "integrity": "sha512-KA0W9ffgNBLDj6fZCq/lRbgR6ABAodRIDHrZnS48vOtfKa4PzWImb0Md1lmGCdO3n3sbCm/n1/WmrNlZ8kCI3Q==", + "version": "6.9.1", + "resolved": "https://registry.npmjs.org/log4js/-/log4js-6.9.1.tgz", + "integrity": "sha512-1somDdy9sChrr9/f4UlzhdaGfDR2c/SaD2a4T7qEkG4jTS57/B3qmnjLYePwQ8cqWnUHZI0iAKxMBpCZICiZ2g==", "dev": true, "dependencies": { "date-format": "^4.0.14", "debug": "^4.3.4", "flatted": "^3.2.7", "rfdc": "^1.3.0", - "streamroller": "^3.1.3" + "streamroller": "^3.1.5" }, "engines": { "node": ">=8.0" @@ -3163,6 +3272,15 @@ "get-func-name": "^2.0.0" } }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "dependencies": { + "yallist": "^3.0.2" + } + }, "node_modules/make-dir": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", @@ -3240,9 +3358,9 @@ } }, "node_modules/minimist": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", - "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -3261,9 +3379,9 @@ } }, "node_modules/mocha": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.1.0.tgz", - "integrity": "sha512-vUF7IYxEoN7XhQpFLxQAEMtE4W91acW4B6En9l97MwE9stL1A9gusXfoHZCLVHDUJ/7V5+lbCM6yMqzo5vNymg==", + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.2.0.tgz", + "integrity": "sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg==", "dev": true, "dependencies": { "ansi-colors": "4.1.1", @@ -3500,9 +3618,9 @@ } }, "node_modules/node-releases": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", - "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==", + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.12.tgz", + "integrity": "sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ==", "dev": true }, "node_modules/noms": { @@ -3534,9 +3652,9 @@ } }, "node_modules/object-inspect": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", - "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", + "version": "1.12.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", + "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -3672,9 +3790,9 @@ } }, "node_modules/pirates": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", - "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==", + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", "dev": true, "engines": { "node": ">= 6" @@ -3802,9 +3920,9 @@ } }, "node_modules/raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", "dev": true, "dependencies": { "bytes": "3.1.2", @@ -3874,14 +3992,14 @@ } }, "node_modules/regexpu-core": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.2.2.tgz", - "integrity": "sha512-T0+1Zp2wjF/juXMrMxHxidqGYn8U4R+zleSJhX9tQ1PUsS8a9UtYfbsF9LdiVgNX3kiX8RNaKM42nfSgvFJjmw==", + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", + "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", "dev": true, "dependencies": { + "@babel/regjsgen": "^0.8.0", "regenerate": "^1.4.2", "regenerate-unicode-properties": "^10.1.0", - "regjsgen": "^0.7.1", "regjsparser": "^0.9.1", "unicode-match-property-ecmascript": "^2.0.0", "unicode-match-property-value-ecmascript": "^2.1.0" @@ -3890,12 +4008,6 @@ "node": ">=4" } }, - "node_modules/regjsgen": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.7.1.tgz", - "integrity": "sha512-RAt+8H2ZEzHeYWxZ3H2z6tF18zyyOnlcdaafLrm21Bguj7uZy6ULibiAFdXEtKQY4Sy7wDTwDiOazasMLc4KPA==", - "dev": true - }, "node_modules/regjsparser": { "version": "0.9.1", "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", @@ -3933,12 +4045,12 @@ "dev": true }, "node_modules/resolve": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", - "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "version": "1.22.2", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz", + "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==", "dev": true, "dependencies": { - "is-core-module": "^2.9.0", + "is-core-module": "^2.11.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, @@ -4047,32 +4159,36 @@ } }, "node_modules/socket.io": { - "version": "4.5.3", - "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.5.3.tgz", - "integrity": "sha512-zdpnnKU+H6mOp7nYRXH4GNv1ux6HL6+lHL8g7Ds7Lj8CkdK1jJK/dlwsKDculbyOHifcJ0Pr/yeXnZQ5GeFrcg==", + "version": "4.7.1", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.7.1.tgz", + "integrity": "sha512-W+utHys2w//dhFjy7iQQu9sGd3eokCjGbl2r59tyLqNiJJBdIebn3GAKEXBr3osqHTObJi2die/25bCx2zsaaw==", "dev": true, "dependencies": { "accepts": "~1.3.4", "base64id": "~2.0.0", + "cors": "~2.8.5", "debug": "~4.3.2", - "engine.io": "~6.2.0", - "socket.io-adapter": "~2.4.0", - "socket.io-parser": "~4.2.0" + "engine.io": "~6.5.0", + "socket.io-adapter": "~2.5.2", + "socket.io-parser": "~4.2.4" }, "engines": { "node": ">=10.0.0" } }, "node_modules/socket.io-adapter": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.4.0.tgz", - "integrity": "sha512-W4N+o69rkMEGVuk2D/cvca3uYsvGlMwsySWV447y99gUPghxq42BxqLNMndb+a1mm/5/7NeXVQS7RLa2XyXvYg==", - "dev": true + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.5.2.tgz", + "integrity": "sha512-87C3LO/NOMc+eMcpcxUBebGjkpMDkNBS9tf7KJqcDsmL936EChtVva71Dw2q4tQcuVC+hAUy4an2NO/sYXmwRA==", + "dev": true, + "dependencies": { + "ws": "~8.11.0" + } }, "node_modules/socket.io-parser": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.1.tgz", - "integrity": "sha512-V4GrkLy+HeF1F/en3SpUaM+7XxYXpuMUWLGde1kSSh5nQMN4hLrbPIkD+otwh6q9R6NOQBN4AMaOZ2zVjui82g==", + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.4.tgz", + "integrity": "sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==", "dev": true, "dependencies": { "@socket.io/component-emitter": "~3.1.0", @@ -4111,9 +4227,9 @@ } }, "node_modules/streamroller": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-3.1.3.tgz", - "integrity": "sha512-CphIJyFx2SALGHeINanjFRKQ4l7x2c+rXYJ4BMq0gd+ZK0gi4VT8b+eHe2wi58x4UayBAKx4xtHpXT/ea1cz8w==", + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-3.1.5.tgz", + "integrity": "sha512-KFxaM7XT+irxvdqSP1LGLgNWbYN7ay5owZ3r/8t77p+EtSUAfUgtl7be3xtqtOmGUl9K9YPO2ca8133RlTjvKw==", "dev": true, "dependencies": { "date-format": "^4.0.14", @@ -4230,9 +4346,9 @@ "dev": true }, "node_modules/through2/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "dev": true, "dependencies": { "core-util-is": "~1.0.0", @@ -4324,9 +4440,9 @@ } }, "node_modules/ua-parser-js": { - "version": "0.7.32", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.32.tgz", - "integrity": "sha512-f9BESNVhzlhEFf2CHMSj40NWOjYPl1YKYbrvIr/hFTDEmLq7SRbWvm7FcdcpCYT95zrOhC7gZSxjdnnTpBcwVw==", + "version": "0.7.35", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.35.tgz", + "integrity": "sha512-veRf7dawaj9xaWEu9HoTVn5Pggtc/qj+kqTOFvNiN1l0YdxwC1kvel57UCjThjGa3BHBihE8/UJAHI+uQHmd/g==", "dev": true, "funding": [ { @@ -4410,9 +4526,9 @@ } }, "node_modules/update-browserslist-db": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", - "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", + "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", "dev": true, "funding": [ { @@ -4422,6 +4538,10 @@ { "type": "tidelift", "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" } ], "dependencies": { @@ -4429,7 +4549,7 @@ "picocolors": "^1.0.0" }, "bin": { - "browserslist-lint": "cli.js" + "update-browserslist-db": "cli.js" }, "peerDependencies": { "browserslist": ">= 4.21.0" @@ -4564,9 +4684,9 @@ "dev": true }, "node_modules/ws": { - "version": "8.2.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz", - "integrity": "sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==", + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", + "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", "dev": true, "engines": { "node": ">=10.0.0" @@ -4602,6 +4722,12 @@ "node": ">=10" } }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, "node_modules/yargs": { "version": "16.2.0", "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", diff --git a/javascript/MaterialXTest/package.json b/javascript/MaterialXTest/package.json index 414123b29e..ac3fa3a182 100644 --- a/javascript/MaterialXTest/package.json +++ b/javascript/MaterialXTest/package.json @@ -16,17 +16,17 @@ "author": "", "license": "ISC", "devDependencies": { - "@babel/core": "^7.20.2", - "@babel/preset-env": "^7.20.2", - "@babel/register": "^7.18.9", + "@babel/core": "^7.22.5", + "@babel/preset-env": "^7.22.5", + "@babel/register": "^7.22.5", "chai": "^4.3.7", "copyfiles": "^2.4.1", - "karma": "^6.4.1", + "karma": "^6.4.2", "karma-chai": "^0.1.0", - "karma-chrome-launcher": "^3.1.1", + "karma-chrome-launcher": "^3.2.0", "karma-mocha": "^2.0.1", "karma-mocha-reporter": "^2.2.5", - "mocha": "^10.1.0", + "mocha": "^10.2.0", "rimraf": "^3.0.2" } } diff --git a/javascript/MaterialXView/package-lock.json b/javascript/MaterialXView/package-lock.json index a9d18c7d29..84d65f8589 100644 --- a/javascript/MaterialXView/package-lock.json +++ b/javascript/MaterialXView/package-lock.json @@ -11,13 +11,13 @@ "dependencies": { "dat.gui": "^0.7.9", "three": "^0.135.0", - "webpack": "^5.75.0" + "webpack": "^5.88.1" }, "devDependencies": { "copy-webpack-plugin": "^8.1.1", - "html-webpack-plugin": "^5.5.0", + "html-webpack-plugin": "^5.5.3", "webpack-cli": "^4.10.0", - "webpack-dev-server": "^4.11.1" + "webpack-dev-server": "^4.15.1" } }, "node_modules/@discoveryjs/json-ext": { @@ -30,9 +30,9 @@ } }, "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", - "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", "dependencies": { "@jridgewell/set-array": "^1.0.1", "@jridgewell/sourcemap-codec": "^1.4.10", @@ -59,28 +59,33 @@ } }, "node_modules/@jridgewell/source-map": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz", - "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==", + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", + "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==", "dependencies": { "@jridgewell/gen-mapping": "^0.3.0", "@jridgewell/trace-mapping": "^0.3.9" } }, "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.17", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", - "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", + "version": "0.3.18", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", + "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", "dependencies": { "@jridgewell/resolve-uri": "3.1.0", "@jridgewell/sourcemap-codec": "1.4.14" } }, + "node_modules/@jridgewell/trace-mapping/node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" + }, "node_modules/@leichtgewicht/ip-codec": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", @@ -151,9 +156,9 @@ } }, "node_modules/@types/connect-history-api-fallback": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.3.5.tgz", - "integrity": "sha512-h8QJa8xSb1WD4fpKBDcATDNGXghFj6/3GRWG6dhmRcu0RX1Ubasur2Uvx5aeEwlf0MwblEC2bMzzMQntxnw/Cw==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.0.tgz", + "integrity": "sha512-4x5FkPpLipqwthjPsF7ZRbOv3uoLUFkTA9G9v583qi4pACvq0uTELrB8OLUzPWUI4IJIyvM85vzkV1nyiI2Lig==", "dev": true, "dependencies": { "@types/express-serve-static-core": "*", @@ -161,9 +166,9 @@ } }, "node_modules/@types/eslint": { - "version": "8.4.10", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.10.tgz", - "integrity": "sha512-Sl/HOqN8NKPmhWo2VBEPm0nvHnu2LL3v9vKo8MEq0EtbJ4eVzGPl41VNPvn5E1i5poMk4/XD8UriLHpJvEP/Nw==", + "version": "8.40.2", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.40.2.tgz", + "integrity": "sha512-PRVjQ4Eh9z9pmmtaq8nTjZjQwKFk7YIHIud3lRoKRBgUQjgjRmoGxxGEPXQkF+lH7QkHJRNr5F4aBgYCW0lqpQ==", "dependencies": { "@types/estree": "*", "@types/json-schema": "*" @@ -179,31 +184,32 @@ } }, "node_modules/@types/estree": { - "version": "0.0.51", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", - "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==" + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.1.tgz", + "integrity": "sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==" }, "node_modules/@types/express": { - "version": "4.17.14", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.14.tgz", - "integrity": "sha512-TEbt+vaPFQ+xpxFLFssxUDXj5cWCxZJjIcB7Yg0k0GMHGtgtQgpvx/MUQUeAkNbA9AAGrwkAsoeItdTgS7FMyg==", + "version": "4.17.17", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.17.tgz", + "integrity": "sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q==", "dev": true, "dependencies": { "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.18", + "@types/express-serve-static-core": "^4.17.33", "@types/qs": "*", "@types/serve-static": "*" } }, "node_modules/@types/express-serve-static-core": { - "version": "4.17.31", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.31.tgz", - "integrity": "sha512-DxMhY+NAsTwMMFHBTtJFNp5qiHKJ7TeqOo23zVEM9alT1Ml27Q3xcTH0xwxn7Q0BbMcVEJOs/7aQtUWupUQN3Q==", + "version": "4.17.35", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.35.tgz", + "integrity": "sha512-wALWQwrgiB2AWTT91CB62b6Yt0sNHpznUXeZEcnPU3DRdlDIz74x8Qg1UUYKSVFi+va5vKOLYRBI1bRKiLLKIg==", "dev": true, "dependencies": { "@types/node": "*", "@types/qs": "*", - "@types/range-parser": "*" + "@types/range-parser": "*", + "@types/send": "*" } }, "node_modules/@types/html-minifier-terser": { @@ -212,30 +218,36 @@ "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==", "dev": true }, + "node_modules/@types/http-errors": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.1.tgz", + "integrity": "sha512-/K3ds8TRAfBvi5vfjuz8y6+GiAYBZ0x4tXv1Av6CWBWn0IlADc+ZX9pMq7oU0fNQPnBwIZl3rmeLp6SBApbxSQ==", + "dev": true + }, "node_modules/@types/http-proxy": { - "version": "1.17.9", - "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.9.tgz", - "integrity": "sha512-QsbSjA/fSk7xB+UXlCT3wHBy5ai9wOcNDWwZAtud+jXhwOM3l+EYZh8Lng4+/6n8uar0J7xILzqftJdJ/Wdfkw==", + "version": "1.17.11", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.11.tgz", + "integrity": "sha512-HC8G7c1WmaF2ekqpnFq626xd3Zz0uvaqFmBJNRZCGEZCXkvSdJoNFn/8Ygbd9fKNQj8UzLdCETaI0UWPAjK7IA==", "dev": true, "dependencies": { "@types/node": "*" } }, "node_modules/@types/json-schema": { - "version": "7.0.11", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", - "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==" + "version": "7.0.12", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz", + "integrity": "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==" }, "node_modules/@types/mime": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-3.0.1.tgz", - "integrity": "sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", + "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==", "dev": true }, "node_modules/@types/node": { - "version": "18.11.9", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.9.tgz", - "integrity": "sha512-CRpX21/kGdzjOpFsZSkcrXMGIBWMGNIHXXBVFSH+ggkftxg+XYP20TESbh+zFvFj3EQOl5byk0HTRn1IL6hbqg==" + "version": "20.3.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.3.3.tgz", + "integrity": "sha512-wheIYdr4NYML61AjC8MKj/2jrR/kDQri/CIpVoZwldwhnIrD/j9jIU5bJ8yBKuB2VhpFV7Ab6G2XkBjv9r9Zzw==" }, "node_modules/@types/qs": { "version": "6.9.7", @@ -255,6 +267,16 @@ "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", "dev": true }, + "node_modules/@types/send": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.1.tgz", + "integrity": "sha512-Cwo8LE/0rnvX7kIIa3QHCkcuF21c05Ayb0ZfxPiv0W8VRiZiNW/WuRupHKpqqGVGf7SUA44QSOUKaEd9lIrd/Q==", + "dev": true, + "dependencies": { + "@types/mime": "^1", + "@types/node": "*" + } + }, "node_modules/@types/serve-index": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.1.tgz", @@ -265,11 +287,12 @@ } }, "node_modules/@types/serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-z5xyF6uh8CbjAu9760KDKsH2FcDxZ2tFCsA4HIMWE6IkiYMXfVoa+4f9KX+FN0ZLsaMw1WNG2ETLA6N+/YA+cg==", + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.2.tgz", + "integrity": "sha512-J2LqtvFYCzaj8pVYKw8klQXrLLk7TBZmQ4ShlcdkELFKGwGMfevMLneMMRkMgZxotOD9wg497LpC7O8PcvAmfw==", "dev": true, "dependencies": { + "@types/http-errors": "*", "@types/mime": "*", "@types/node": "*" } @@ -284,142 +307,142 @@ } }, "node_modules/@types/ws": { - "version": "8.5.3", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.3.tgz", - "integrity": "sha512-6YOoWjruKj1uLf3INHH7D3qTXwFfEsg1kf3c0uDdSBJwfa/llkwIjrAGV7j7mVgGNbzTQ3HiHKKDXl6bJPD97w==", + "version": "8.5.5", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.5.tgz", + "integrity": "sha512-lwhs8hktwxSjf9UaZ9tG5M03PGogvFaH8gUgLNbN9HKIg0dvv6q+gkSuJ8HN4/VbyxkuLzCjlN7GquQ0gUJfIg==", "dev": true, "dependencies": { "@types/node": "*" } }, "node_modules/@webassemblyjs/ast": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", - "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.6.tgz", + "integrity": "sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==", "dependencies": { - "@webassemblyjs/helper-numbers": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1" + "@webassemblyjs/helper-numbers": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6" } }, "node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", - "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==" + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", + "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==" }, "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", - "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==" + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", + "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==" }, "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", - "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==" + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz", + "integrity": "sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==" }, "node_modules/@webassemblyjs/helper-numbers": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", - "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", + "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", "dependencies": { - "@webassemblyjs/floating-point-hex-parser": "1.11.1", - "@webassemblyjs/helper-api-error": "1.11.1", + "@webassemblyjs/floating-point-hex-parser": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", "@xtuc/long": "4.2.2" } }, "node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", - "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==" + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", + "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==" }, "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", - "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz", + "integrity": "sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==", "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1" + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6" } }, "node_modules/@webassemblyjs/ieee754": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", - "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", + "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", "dependencies": { "@xtuc/ieee754": "^1.2.0" } }, "node_modules/@webassemblyjs/leb128": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", - "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", + "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", "dependencies": { "@xtuc/long": "4.2.2" } }, "node_modules/@webassemblyjs/utf8": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", - "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==" + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", + "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==" }, "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", - "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz", + "integrity": "sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==", "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/helper-wasm-section": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1", - "@webassemblyjs/wasm-opt": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "@webassemblyjs/wast-printer": "1.11.1" + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/helper-wasm-section": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6", + "@webassemblyjs/wasm-opt": "1.11.6", + "@webassemblyjs/wasm-parser": "1.11.6", + "@webassemblyjs/wast-printer": "1.11.6" } }, "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", - "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz", + "integrity": "sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==", "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/ieee754": "1.11.1", - "@webassemblyjs/leb128": "1.11.1", - "@webassemblyjs/utf8": "1.11.1" + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" } }, "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", - "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz", + "integrity": "sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==", "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1" + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6", + "@webassemblyjs/wasm-parser": "1.11.6" } }, "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", - "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz", + "integrity": "sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==", "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-api-error": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/ieee754": "1.11.1", - "@webassemblyjs/leb128": "1.11.1", - "@webassemblyjs/utf8": "1.11.1" + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" } }, "node_modules/@webassemblyjs/wast-printer": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", - "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz", + "integrity": "sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==", "dependencies": { - "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/ast": "1.11.6", "@xtuc/long": "4.2.2" } }, @@ -483,9 +506,9 @@ } }, "node_modules/acorn": { - "version": "8.8.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz", - "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==", + "version": "8.9.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.9.0.tgz", + "integrity": "sha512-jaVNAFBHNLXspO543WnNNPZFRtavh3skAkITqD0/2aeMkKZTN+254PyhwxFYrk3vQ1xfY+2wbesJMs/JC8/PwQ==", "bin": { "acorn": "bin/acorn" }, @@ -494,9 +517,9 @@ } }, "node_modules/acorn-import-assertions": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", - "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", + "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", "peerDependencies": { "acorn": "^8" } @@ -534,9 +557,9 @@ } }, "node_modules/ajv-formats/node_modules/ajv": { - "version": "8.11.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.2.tgz", - "integrity": "sha512-E4bfmKAhGiSTvMfL1Myyycaub+cUEU2/IvpylXkUu7CHBkBj1f/ikdzbD7YQ6FKUbixDxeYvB/xY4fvyroDlQg==", + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", "dev": true, "dependencies": { "fast-deep-equal": "^3.1.1", @@ -585,9 +608,9 @@ } }, "node_modules/anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", "dev": true, "dependencies": { "normalize-path": "^3.0.0", @@ -667,9 +690,9 @@ } }, "node_modules/bonjour-service": { - "version": "1.0.14", - "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.0.14.tgz", - "integrity": "sha512-HIMbgLnk1Vqvs6B4Wq5ep7mxvj9sGz5d1JJyDNSGNIdA/w2MCz6GTjWTdjqOJV1bEPj+6IkxDvWNFKEBxNt4kQ==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.1.1.tgz", + "integrity": "sha512-Z/5lQRMOG9k7W+FkeGTNjh7htqn/2LMnfOvBZ8pynNZCM9MwkQkI3zeI4oz09uWdcgmgHugVvBqxGg4VQJ5PCg==", "dev": true, "dependencies": { "array-flatten": "^2.1.2", @@ -707,9 +730,9 @@ } }, "node_modules/browserslist": { - "version": "4.21.4", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz", - "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==", + "version": "4.21.9", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.9.tgz", + "integrity": "sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg==", "funding": [ { "type": "opencollective", @@ -718,13 +741,17 @@ { "type": "tidelift", "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" } ], "dependencies": { - "caniuse-lite": "^1.0.30001400", - "electron-to-chromium": "^1.4.251", - "node-releases": "^2.0.6", - "update-browserslist-db": "^1.0.9" + "caniuse-lite": "^1.0.30001503", + "electron-to-chromium": "^1.4.431", + "node-releases": "^2.0.12", + "update-browserslist-db": "^1.0.11" }, "bin": { "browserslist": "cli.js" @@ -771,9 +798,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001431", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001431.tgz", - "integrity": "sha512-zBUoFU0ZcxpvSt9IU66dXVT/3ctO1cy4y9cscs1szkPlcWb6pasYM144GqrUygUbT+k7cmUCW61cvskjcv0enQ==", + "version": "1.0.30001512", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001512.tgz", + "integrity": "sha512-2S9nK0G/mE+jasCUsMPlARhRCts1ebcp2Ji8Y8PWi4NDE1iRdLCnEPHkEfeBrGC45L4isBx5ur3IQ6yTE2mRZw==", "funding": [ { "type": "opencollective", @@ -782,6 +809,10 @@ { "type": "tidelift", "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" } ] }, @@ -821,9 +852,9 @@ } }, "node_modules/clean-css": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.1.tgz", - "integrity": "sha512-lCr8OHhiWCTw4v8POJovCoh4T7I9U11yVsPjMWWnnMmp9ZowCxyad1Pathle/9HjaDp+fdQKjO9fQydE6RHTZg==", + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.2.tgz", + "integrity": "sha512-JVJbM+f3d3Q704rF4bqQ5UUyTtuJ0JRKNbTKVEeujCCBoMdkEi+V+e8oktO9qGQNSvHrFTM6JZRXrUvGR1czww==", "dev": true, "dependencies": { "source-map": "~0.6.0" @@ -847,9 +878,9 @@ } }, "node_modules/colorette": { - "version": "2.0.19", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz", - "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==", + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", "dev": true }, "node_modules/commander": { @@ -925,9 +956,9 @@ } }, "node_modules/content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", "dev": true, "engines": { "node": ">= 0.6" @@ -1100,9 +1131,9 @@ "dev": true }, "node_modules/dns-packet": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.4.0.tgz", - "integrity": "sha512-EgqGeaBB8hLiHLZtp/IbaDQTL8pZ0+IvwzSHA6d7VyMDM+B9hgddEMa9xjK5oYnw0ci0JQ6g2XCD7/f6cafU6g==", + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.0.tgz", + "integrity": "sha512-rza3UH1LwdHh9qyPXp8lkwpjSNk/AMD3dPytUoRoqnypDUhY0xvbdmVhWOfxO68frEfV9BU8V12Ez7ZsHGZpCQ==", "dev": true, "dependencies": { "@leichtgewicht/ip-codec": "^2.0.1" @@ -1192,9 +1223,9 @@ "dev": true }, "node_modules/electron-to-chromium": { - "version": "1.4.284", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz", - "integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==" + "version": "1.4.449", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.449.tgz", + "integrity": "sha512-TxLRpRUj/107ATefeP8VIUWNOv90xJxZZbCW/eIbSZQiuiFANCx2b7u+GbVc9X4gU+xnbvypNMYVM/WArE1DNQ==" }, "node_modules/encodeurl": { "version": "1.0.2", @@ -1206,9 +1237,9 @@ } }, "node_modules/enhanced-resolve": { - "version": "5.10.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.10.0.tgz", - "integrity": "sha512-T0yTFjdpldGY8PmuXXR0PyQ1ufZpEGiHVrp7zHKB7jdR4qlmZHhONVM5AQOAWXuF/w3dnHbEQVrNptJgt7F+cQ==", + "version": "5.15.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", + "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==", "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.2.0" @@ -1227,9 +1258,9 @@ } }, "node_modules/envinfo": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz", - "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==", + "version": "7.10.0", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.10.0.tgz", + "integrity": "sha512-ZtUjZO6l5mwTHvc1L9+1q5p/R3wTopcfqMW8r5t8SJSKqeVI/LtajORwRFEKpEFuekjD0VBjwu1HMxL4UalIRw==", "dev": true, "bin": { "envinfo": "dist/cli.js" @@ -1239,9 +1270,9 @@ } }, "node_modules/es-module-lexer": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", - "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==" + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.3.0.tgz", + "integrity": "sha512-vZK7T0N2CBmBOixhmjdqx2gWVbFZ4DXZ/NyRMZVlJXPa7CyFS+/a4QQsDGDQy9ZfEzxFuNEsMLeQJnKP2p5/JA==" }, "node_modules/escalade": { "version": "3.1.1", @@ -1396,9 +1427,9 @@ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, "node_modules/fast-glob": { - "version": "3.2.12", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", - "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.0.tgz", + "integrity": "sha512-ChDuvbOypPuNjO8yIDf36x7BlZX1smcUMTTcyoIjycexOxd6DFsKsg21qVBzEmr3G7fUKIRy2/psii+CIUt7FA==", "dev": true, "dependencies": { "@nodelib/fs.stat": "^2.0.2", @@ -1426,9 +1457,9 @@ } }, "node_modules/fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", + "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", "dev": true, "dependencies": { "reusify": "^1.0.4" @@ -1528,9 +1559,9 @@ } }, "node_modules/fs-monkey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.3.tgz", - "integrity": "sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.4.tgz", + "integrity": "sha512-INM/fWAxMICjttnD0DX1rBvinKskj5G1w+oy/pnm9u/tSlnBrzFonJMcalKJ30P8RRsPzKcCG7Q8l0jx5Fh9YQ==", "dev": true }, "node_modules/fs.realpath": { @@ -1560,13 +1591,14 @@ "dev": true }, "node_modules/get-intrinsic": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", - "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", + "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", "dev": true, "dependencies": { "function-bind": "^1.1.1", "has": "^1.0.3", + "has-proto": "^1.0.1", "has-symbols": "^1.0.3" }, "funding": { @@ -1643,9 +1675,9 @@ } }, "node_modules/graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" }, "node_modules/handle-thing": { "version": "2.0.1", @@ -1673,6 +1705,18 @@ "node": ">=8" } }, + "node_modules/has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/has-symbols": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", @@ -1707,9 +1751,9 @@ } }, "node_modules/hpack.js/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "dev": true, "dependencies": { "core-util-is": "~1.0.0", @@ -1737,10 +1781,20 @@ } }, "node_modules/html-entities": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.3.tgz", - "integrity": "sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==", - "dev": true + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.4.0.tgz", + "integrity": "sha512-igBTJcNNNhvZFRtm8uA6xMY6xYleeDwn3PeBCkDz7tHttv4F2hsDI2aPgNERWzvRcNYHNT3ymRaQzllmXj4YsQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/mdevils" + }, + { + "type": "patreon", + "url": "https://patreon.com/mdevils" + } + ] }, "node_modules/html-minifier-terser": { "version": "6.1.0", @@ -1764,9 +1818,9 @@ } }, "node_modules/html-webpack-plugin": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.5.0.tgz", - "integrity": "sha512-sy88PC2cRTVxvETRgUHFrL4No3UxvcH8G1NepGhqaTT+GXN2kTamqasot0inS5hXeg1cMbFDt27zzo9p35lZVw==", + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.5.3.tgz", + "integrity": "sha512-6YrDKTuqaP/TquFH7h4srYWsZx+x6k6+FbsTm0ziCwGHDP78Unr1r9F/H4+sGmMbX08GQcJ+K64x55b+7VM/jg==", "dev": true, "dependencies": { "@types/html-minifier-terser": "^6.0.0", @@ -1893,9 +1947,9 @@ } }, "node_modules/ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", "dev": true, "engines": { "node": ">= 4" @@ -1946,9 +2000,9 @@ } }, "node_modules/ipaddr.js": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.0.1.tgz", - "integrity": "sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.1.0.tgz", + "integrity": "sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ==", "dev": true, "engines": { "node": ">= 10" @@ -1967,9 +2021,9 @@ } }, "node_modules/is-core-module": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", - "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz", + "integrity": "sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==", "dev": true, "dependencies": { "has": "^1.0.3" @@ -2124,6 +2178,16 @@ "node": ">=0.10.0" } }, + "node_modules/launch-editor": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.6.0.tgz", + "integrity": "sha512-JpDCcQnyAAzZZaZ7vEiSqL690w7dAEyLao+KC96zBplnYbJS7TYNjvM3M7y3dGz+v7aIsJk3hllWuc0kWAjyRQ==", + "dev": true, + "dependencies": { + "picocolors": "^1.0.0", + "shell-quote": "^1.7.3" + } + }, "node_modules/loader-runner": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", @@ -2169,12 +2233,12 @@ } }, "node_modules/memfs": { - "version": "3.4.11", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.4.11.tgz", - "integrity": "sha512-GvsCITGAyDCxxsJ+X6prJexFQEhOCJaIlUbsAvjzSI5o5O7j2dle3jWvz5Z5aOdpOxW6ol3vI1+0ut+641F1+w==", + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.5.3.tgz", + "integrity": "sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==", "dev": true, "dependencies": { - "fs-monkey": "^1.0.3" + "fs-monkey": "^1.0.4" }, "engines": { "node": ">= 4.0.0" @@ -2333,9 +2397,9 @@ } }, "node_modules/node-releases": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", - "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==" + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.12.tgz", + "integrity": "sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ==" }, "node_modules/normalize-path": { "version": "3.0.0", @@ -2371,9 +2435,9 @@ } }, "node_modules/object-inspect": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", - "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", + "version": "1.12.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", + "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -2431,9 +2495,9 @@ } }, "node_modules/open": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", - "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", + "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", "dev": true, "dependencies": { "define-lazy-prop": "^2.0.0", @@ -2656,9 +2720,9 @@ } }, "node_modules/punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", + "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", "engines": { "node": ">=6" } @@ -2740,9 +2804,9 @@ } }, "node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dev": true, "dependencies": { "inherits": "^2.0.3", @@ -2815,12 +2879,12 @@ "dev": true }, "node_modules/resolve": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", - "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "version": "1.22.2", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz", + "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==", "dev": true, "dependencies": { - "is-core-module": "^2.9.0", + "is-core-module": "^2.11.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, @@ -2935,9 +2999,9 @@ "dev": true }, "node_modules/schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", "dependencies": { "@types/json-schema": "^7.0.8", "ajv": "^6.12.5", @@ -3125,6 +3189,15 @@ "node": ">=8" } }, + "node_modules/shell-quote": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", + "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/side-channel": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", @@ -3332,12 +3405,12 @@ } }, "node_modules/terser": { - "version": "5.15.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.15.1.tgz", - "integrity": "sha512-K1faMUvpm/FBxjBXud0LWVAGxmvoPbZbfTCYbSgaaYQaIXI3/TdI7a7ZGA73Zrou6Q8Zmz3oeUTsp/dj+ag2Xw==", + "version": "5.18.2", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.18.2.tgz", + "integrity": "sha512-Ah19JS86ypbJzTzvUCX7KOsEIhDaRONungA4aYBjEP3JZRf4ocuDzTg4QWZnPn9DEMiMYGJPiSOy7aykoCc70w==", "dependencies": { - "@jridgewell/source-map": "^0.3.2", - "acorn": "^8.5.0", + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", "commander": "^2.20.0", "source-map-support": "~0.5.20" }, @@ -3349,15 +3422,15 @@ } }, "node_modules/terser-webpack-plugin": { - "version": "5.3.6", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.6.tgz", - "integrity": "sha512-kfLFk+PoLUQIbLmB1+PZDMRSZS99Mp+/MHqDNmMA6tOItzRt+Npe3E+fsMs5mfcM0wCtrrdU387UnV+vnSffXQ==", + "version": "5.3.9", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz", + "integrity": "sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==", "dependencies": { - "@jridgewell/trace-mapping": "^0.3.14", + "@jridgewell/trace-mapping": "^0.3.17", "jest-worker": "^27.4.5", "schema-utils": "^3.1.1", - "serialize-javascript": "^6.0.0", - "terser": "^5.14.1" + "serialize-javascript": "^6.0.1", + "terser": "^5.16.8" }, "engines": { "node": ">= 10.13.0" @@ -3382,9 +3455,9 @@ } }, "node_modules/terser-webpack-plugin/node_modules/serialize-javascript": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", - "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz", + "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==", "dependencies": { "randombytes": "^2.1.0" } @@ -3427,9 +3500,9 @@ } }, "node_modules/tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.0.tgz", + "integrity": "sha512-7At1WUettjcSRHXCyYtTselblcHl9PJFFVKiCAy/bY97+BPZXSQ2wbq0P9s8tK2G7dFQfNnlJnPAiArVBVBsfA==", "dev": true }, "node_modules/type-is": { @@ -3455,9 +3528,9 @@ } }, "node_modules/update-browserslist-db": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", - "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", + "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", "funding": [ { "type": "opencollective", @@ -3466,6 +3539,10 @@ { "type": "tidelift", "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" } ], "dependencies": { @@ -3473,7 +3550,7 @@ "picocolors": "^1.0.0" }, "bin": { - "browserslist-lint": "cli.js" + "update-browserslist-db": "cli.js" }, "peerDependencies": { "browserslist": ">= 4.21.0" @@ -3548,21 +3625,21 @@ } }, "node_modules/webpack": { - "version": "5.75.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.75.0.tgz", - "integrity": "sha512-piaIaoVJlqMsPtX/+3KTTO6jfvrSYgauFVdt8cr9LTHKmcq/AMd4mhzsiP7ZF/PGRNPGA8336jldh9l2Kt2ogQ==", + "version": "5.88.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.88.1.tgz", + "integrity": "sha512-FROX3TxQnC/ox4N+3xQoWZzvGXSuscxR32rbzjpXgEzWudJFEJBpdlkkob2ylrv5yzzufD1zph1OoFsLtm6stQ==", "dependencies": { "@types/eslint-scope": "^3.7.3", - "@types/estree": "^0.0.51", - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/wasm-edit": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", + "@types/estree": "^1.0.0", + "@webassemblyjs/ast": "^1.11.5", + "@webassemblyjs/wasm-edit": "^1.11.5", + "@webassemblyjs/wasm-parser": "^1.11.5", "acorn": "^8.7.1", - "acorn-import-assertions": "^1.7.6", + "acorn-import-assertions": "^1.9.0", "browserslist": "^4.14.5", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.10.0", - "es-module-lexer": "^0.9.0", + "enhanced-resolve": "^5.15.0", + "es-module-lexer": "^1.2.1", "eslint-scope": "5.1.1", "events": "^3.2.0", "glob-to-regexp": "^0.4.1", @@ -3571,9 +3648,9 @@ "loader-runner": "^4.2.0", "mime-types": "^2.1.27", "neo-async": "^2.6.2", - "schema-utils": "^3.1.0", + "schema-utils": "^3.2.0", "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.1.3", + "terser-webpack-plugin": "^5.3.7", "watchpack": "^2.4.0", "webpack-sources": "^3.2.3" }, @@ -3673,9 +3750,9 @@ } }, "node_modules/webpack-dev-middleware/node_modules/ajv": { - "version": "8.11.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.2.tgz", - "integrity": "sha512-E4bfmKAhGiSTvMfL1Myyycaub+cUEU2/IvpylXkUu7CHBkBj1f/ikdzbD7YQ6FKUbixDxeYvB/xY4fvyroDlQg==", + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", "dev": true, "dependencies": { "fast-deep-equal": "^3.1.1", @@ -3707,15 +3784,15 @@ "dev": true }, "node_modules/webpack-dev-middleware/node_modules/schema-utils": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", - "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", + "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", "dev": true, "dependencies": { "@types/json-schema": "^7.0.9", - "ajv": "^8.8.0", + "ajv": "^8.9.0", "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.0.0" + "ajv-keywords": "^5.1.0" }, "engines": { "node": ">= 12.13.0" @@ -3726,9 +3803,9 @@ } }, "node_modules/webpack-dev-server": { - "version": "4.11.1", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.11.1.tgz", - "integrity": "sha512-lILVz9tAUy1zGFwieuaQtYiadImb5M3d+H+L1zDYalYoDl0cksAB1UNyuE5MMWJrG6zR1tXkCP2fitl7yoUJiw==", + "version": "4.15.1", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.15.1.tgz", + "integrity": "sha512-5hbAst3h3C3L8w6W4P96L5vaV0PxSmJhxZvWKYIdgxOQm8pNZ5dEOmmSLBVpP85ReeyRt6AS1QJNyo/oFFPeVA==", "dev": true, "dependencies": { "@types/bonjour": "^3.5.9", @@ -3737,7 +3814,7 @@ "@types/serve-index": "^1.9.1", "@types/serve-static": "^1.13.10", "@types/sockjs": "^0.3.33", - "@types/ws": "^8.5.1", + "@types/ws": "^8.5.5", "ansi-html-community": "^0.0.8", "bonjour-service": "^1.0.11", "chokidar": "^3.5.3", @@ -3750,6 +3827,7 @@ "html-entities": "^2.3.2", "http-proxy-middleware": "^2.0.3", "ipaddr.js": "^2.0.1", + "launch-editor": "^2.6.0", "open": "^8.0.9", "p-retry": "^4.5.0", "rimraf": "^3.0.2", @@ -3759,7 +3837,7 @@ "sockjs": "^0.3.24", "spdy": "^4.0.2", "webpack-dev-middleware": "^5.3.1", - "ws": "^8.4.2" + "ws": "^8.13.0" }, "bin": { "webpack-dev-server": "bin/webpack-dev-server.js" @@ -3775,15 +3853,18 @@ "webpack": "^4.37.0 || ^5.0.0" }, "peerDependenciesMeta": { + "webpack": { + "optional": true + }, "webpack-cli": { "optional": true } } }, "node_modules/webpack-dev-server/node_modules/ajv": { - "version": "8.11.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.2.tgz", - "integrity": "sha512-E4bfmKAhGiSTvMfL1Myyycaub+cUEU2/IvpylXkUu7CHBkBj1f/ikdzbD7YQ6FKUbixDxeYvB/xY4fvyroDlQg==", + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", "dev": true, "dependencies": { "fast-deep-equal": "^3.1.1", @@ -3815,15 +3896,15 @@ "dev": true }, "node_modules/webpack-dev-server/node_modules/schema-utils": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", - "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", + "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", "dev": true, "dependencies": { "@types/json-schema": "^7.0.9", - "ajv": "^8.8.0", + "ajv": "^8.9.0", "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.0.0" + "ajv-keywords": "^5.1.0" }, "engines": { "node": ">= 12.13.0" @@ -3834,9 +3915,9 @@ } }, "node_modules/webpack-merge": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz", - "integrity": "sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==", + "version": "5.9.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.9.0.tgz", + "integrity": "sha512-6NbRQw4+Sy50vYNTw7EyOn41OZItPiXB8GNv3INSoe3PSFaHJEz3SHTrYVaRm2LilNGnFUzh0FAwqPEmU/CwDg==", "dev": true, "dependencies": { "clone-deep": "^4.0.1", @@ -3893,9 +3974,9 @@ } }, "node_modules/wildcard": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", - "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", + "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", "dev": true }, "node_modules/wrappy": { @@ -3905,16 +3986,16 @@ "dev": true }, "node_modules/ws": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", - "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", + "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", "dev": true, "engines": { "node": ">=10.0.0" }, "peerDependencies": { "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" + "utf-8-validate": ">=5.0.2" }, "peerDependenciesMeta": { "bufferutil": { diff --git a/javascript/MaterialXView/package.json b/javascript/MaterialXView/package.json index 3c4012314c..2113d145cf 100644 --- a/javascript/MaterialXView/package.json +++ b/javascript/MaterialXView/package.json @@ -12,12 +12,12 @@ "dependencies": { "dat.gui": "^0.7.9", "three": "^0.135.0", - "webpack": "^5.75.0" + "webpack": "^5.88.1" }, "devDependencies": { "copy-webpack-plugin": "^8.1.1", - "html-webpack-plugin": "^5.5.0", + "html-webpack-plugin": "^5.5.3", "webpack-cli": "^4.10.0", - "webpack-dev-server": "^4.11.1" + "webpack-dev-server": "^4.15.1" } } From 2c50d91cfa3ac61546b4118bd4e216169373382b Mon Sep 17 00:00:00 2001 From: Niklas Harrysson Date: Mon, 10 Jul 2023 03:46:17 +0200 Subject: [PATCH 34/42] Fix bug in BSDF code gen for HW languages (#1399) This change list fixes a bug in code gen for HW languages, where under certain conditions the function call for a BSDF node could be generated multiple times in the same scope. For example, if a pure reflection BSDF node, like oren_nayar_bsdf, where referenced multiple times in a graph. Then during generation of the transmission section of a GLSL surface shader the node's output variable would be emitted multiple times, giving erroneous code. A workaround was previously to duplicate the node in the graph, as for example done in the GltfPbr graph. With this fix duplication is no longer needed. --- libraries/bxdf/gltf_pbr.mtlx | 7 +------ source/MaterialXGenShader/HwShaderGenerator.cpp | 3 +++ source/MaterialXGenShader/ShaderStage.cpp | 10 +++++++--- source/MaterialXGenShader/ShaderStage.h | 5 ++++- 4 files changed, 15 insertions(+), 10 deletions(-) diff --git a/libraries/bxdf/gltf_pbr.mtlx b/libraries/bxdf/gltf_pbr.mtlx index a134faea16..cb393fb82a 100644 --- a/libraries/bxdf/gltf_pbr.mtlx +++ b/libraries/bxdf/gltf_pbr.mtlx @@ -148,11 +148,6 @@ - - - - - @@ -173,7 +168,7 @@ - + diff --git a/source/MaterialXGenShader/HwShaderGenerator.cpp b/source/MaterialXGenShader/HwShaderGenerator.cpp index 704d90873b..568c666478 100644 --- a/source/MaterialXGenShader/HwShaderGenerator.cpp +++ b/source/MaterialXGenShader/HwShaderGenerator.cpp @@ -500,6 +500,9 @@ void HwShaderGenerator::emitFunctionCall(const ShaderNode& node, GenContext& con emitLineBegin(stage); emitOutput(node.getOutput(), true, true, context, stage); emitLineEnd(stage); + + // Register the node as emitted, but omit the function call. + stage.addFunctionCall(node, context, false); } } diff --git a/source/MaterialXGenShader/ShaderStage.cpp b/source/MaterialXGenShader/ShaderStage.cpp index 25701a3051..822f3c9664 100644 --- a/source/MaterialXGenShader/ShaderStage.cpp +++ b/source/MaterialXGenShader/ShaderStage.cpp @@ -365,14 +365,18 @@ void ShaderStage::addFunctionDefinition(const ShaderNode& node, GenContext& cont } } -void ShaderStage::addFunctionCall(const ShaderNode& node, GenContext& context) +void ShaderStage::addFunctionCall(const ShaderNode& node, GenContext& context, bool emitCode) { + // Register this function as being called in the current scope. const ClosureContext* cct = context.getClosureContext(); const FunctionCallId id(&node, cct ? cct->getType() : 0); - _scopes.back().functions.insert(id); - node.getImplementation().emitFunctionCall(node, context, *this); + // Emit code for the function call if not omitted. + if (emitCode) + { + node.getImplementation().emitFunctionCall(node, context, *this); + } } bool ShaderStage::isEmitted(const ShaderNode& node, GenContext& context) const diff --git a/source/MaterialXGenShader/ShaderStage.h b/source/MaterialXGenShader/ShaderStage.h index 288a524a70..71004f8e52 100644 --- a/source/MaterialXGenShader/ShaderStage.h +++ b/source/MaterialXGenShader/ShaderStage.h @@ -265,7 +265,10 @@ class MX_GENSHADER_API ShaderStage void addFunctionDefinition(const ShaderNode& node, GenContext& context); /// Add the function call for the given node. - void addFunctionCall(const ShaderNode& node, GenContext& context); + /// This will register the function as being called in the current scope, and code for the + /// function call will be added to the stage. If emitCode is set to false the code for the + /// function call will be omitted. + void addFunctionCall(const ShaderNode& node, GenContext& context, bool emitCode = true); /// Return true if the function for the given node has been emitted in the current scope. bool isEmitted(const ShaderNode& node, GenContext& context) const; From 6211e9a669c9bc93ccabf833ee4c50bd0e6720e0 Mon Sep 17 00:00:00 2001 From: krohmerNV <42233792+krohmerNV@users.noreply.github.com> Date: Wed, 12 Jul 2023 18:24:52 +0200 Subject: [PATCH 35/42] Fix volume mixes in MDL (#1395) Change the implementation of the volume mix functions in MDL. The mix weight is now interpreted as probability to encounter a particle of one of the mixed media. --- .../MaterialXGenMdl/mdl/materialx/pbrlib.mdl | 79 +++++++++++++------ .../MaterialXGenMdl/mdl/materialx/stdlib.mdl | 4 +- 2 files changed, 58 insertions(+), 25 deletions(-) diff --git a/source/MaterialXGenMdl/mdl/materialx/pbrlib.mdl b/source/MaterialXGenMdl/mdl/materialx/pbrlib.mdl index 9c166f7468..61234c4037 100644 --- a/source/MaterialXGenMdl/mdl/materialx/pbrlib.mdl +++ b/source/MaterialXGenMdl/mdl/materialx/pbrlib.mdl @@ -669,6 +669,27 @@ export material mx_displacement_vector3( ); +// helper function to mix two scattering volumes: +// - combined scattering coefficient is just the sum of the two +// - VDF mixer weight is the relative probability of encountering the corresponding +// particle type +// NOTE: mixer weight should be a color, but due to a bug in current MDL compilers +// the color mixers don't accept non-uniform weights yet +struct volume_mix_return { + color scattering_coefficient; + float mix_weight1; // mix_weight2 = 1.0 - mix_weight1, can use any mixer +}; +volume_mix_return volume_mix( + color scattering_coefficient1, + float weight1, + color scattering_coefficient2, + float weight2) +{ + color s1 = weight1 * scattering_coefficient1; + color s = s1 + weight2 * scattering_coefficient2; + return volume_mix_return(scattering_coefficient: s, mix_weight1: math::average(s1 / s)); +} + export material mx_mix_bsdf( material mxp_fg = material() [[ anno::usage( "materialx:bsdf") ]], material mxp_bg = material() [[ anno::usage( "materialx:bsdf") ]], @@ -676,7 +697,11 @@ export material mx_mix_bsdf( ) [[ anno::usage( "materialx:bsdf") ]] -= material( += let { + volume_mix_return v = volume_mix( + mxp_fg.volume.scattering_coefficient, mxp_mix, + mxp_bg.volume.scattering_coefficient, (1.0f - mxp_mix)); +} in material( surface: material_surface( scattering: df::weighted_layer( weight: mxp_mix, @@ -687,15 +712,14 @@ export material mx_mix_bsdf( // we need to carry volume properties along for SSS ior: mxp_fg.ior, // NOTE: IOR is uniform, cannot mix here volume: material_volume( - scattering: df::clamped_mix( + scattering: df::unbounded_mix( df::vdf_component[]( - df::vdf_component( mxp_mix, mxp_fg.volume.scattering), - df::vdf_component( 1.0 - mxp_mix, mxp_bg.volume.scattering)) + df::vdf_component(v.mix_weight1, mxp_fg.volume.scattering), + df::vdf_component(1.0 - v.mix_weight1, mxp_bg.volume.scattering)) ), absorption_coefficient: mxp_mix * mxp_fg.volume.absorption_coefficient + (1.0 - mxp_mix) * mxp_bg.volume.absorption_coefficient, - scattering_coefficient: mxp_mix * mxp_fg.volume.scattering_coefficient + - (1.0 - mxp_mix) * mxp_bg.volume.scattering_coefficient + scattering_coefficient: v.scattering_coefficient ) ); @@ -709,7 +733,7 @@ export material mx_mix_edf( = material( surface: material_surface( emission: material_emission( - emission: df::clamped_mix( + emission: df::unbounded_mix( // unbounded_mix is cheaper df::edf_component[]( df::edf_component( mxp_mix, mxp_fg.surface.emission.emission), df::edf_component( 1.0 - mxp_mix, mxp_bg.surface.emission.emission)) @@ -727,18 +751,21 @@ export material mx_mix_vdf( ) [[ anno::usage( "materialx:vdf") ]] -= material( += let { + volume_mix_return v = volume_mix( + mxp_fg.volume.scattering_coefficient, mxp_mix, + mxp_bg.volume.scattering_coefficient, (1.0f - mxp_mix)); +} in material( ior: mxp_fg.ior, // NOTE: IOR is uniform, cannot mix here volume: material_volume( - scattering: df::clamped_mix( + scattering: df::unbounded_mix( df::vdf_component[]( - df::vdf_component( mxp_mix, mxp_fg.volume.scattering), - df::vdf_component( 1.0 - mxp_mix, mxp_bg.volume.scattering)) + df::vdf_component( v.mix_weight1, mxp_fg.volume.scattering), + df::vdf_component( 1.0 - v.mix_weight1, mxp_bg.volume.scattering)) ), absorption_coefficient: mxp_mix * mxp_fg.volume.absorption_coefficient + (1.0 - mxp_mix) * mxp_bg.volume.absorption_coefficient, - scattering_coefficient: mxp_mix * mxp_fg.volume.scattering_coefficient + - (1.0 - mxp_mix) * mxp_bg.volume.scattering_coefficient + scattering_coefficient: v.scattering_coefficient ) ); @@ -751,7 +778,11 @@ export material mx_add_bsdf( ) [[ anno::usage( "materialx:bsdf") ]] -= material( += let { + volume_mix_return v = volume_mix( + mxp_in1.volume.scattering_coefficient, 1.0f, + mxp_in2.volume.scattering_coefficient, 1.0f); +} in material( surface: material_surface( scattering: df::unbounded_mix( df::bsdf_component[]( @@ -764,13 +795,12 @@ export material mx_add_bsdf( volume: material_volume( scattering: df::unbounded_mix( df::vdf_component[]( - df::vdf_component( 1.0, mxp_in1.volume.scattering), - df::vdf_component( 1.0, mxp_in2.volume.scattering)) + df::vdf_component( v.mix_weight1, mxp_in1.volume.scattering), + df::vdf_component( 1.0 - v.mix_weight1, mxp_in2.volume.scattering)) ), absorption_coefficient: mxp_in1.volume.absorption_coefficient + mxp_in2.volume.absorption_coefficient, - scattering_coefficient: mxp_in1.volume.scattering_coefficient + - mxp_in2.volume.scattering_coefficient + scattering_coefficient: v.scattering_coefficient ) ); @@ -806,19 +836,22 @@ export material mx_add_vdf( ) [[ anno::usage( "materialx:vdf") ]] -= material( += let { + volume_mix_return v = volume_mix( + mxp_in1.volume.scattering_coefficient, 1.0f, + mxp_in2.volume.scattering_coefficient, 1.0f); +} in material( // assuming mixing the IOR is the best we can do here ior: 0.5 * mxp_in1.ior + 0.5 * mxp_in2.ior, volume: material_volume( scattering: df::unbounded_mix( df::vdf_component[]( - df::vdf_component( 1.0, mxp_in1.volume.scattering), - df::vdf_component( 1.0, mxp_in2.volume.scattering)) + df::vdf_component( v.mix_weight1, mxp_in1.volume.scattering), + df::vdf_component( 1.0 - v.mix_weight1, mxp_in2.volume.scattering)) ), absorption_coefficient: mxp_in1.volume.absorption_coefficient + mxp_in2.volume.absorption_coefficient, - scattering_coefficient: mxp_in1.volume.scattering_coefficient + - mxp_in2.volume.scattering_coefficient + scattering_coefficient: v.scattering_coefficient ) ); diff --git a/source/MaterialXGenMdl/mdl/materialx/stdlib.mdl b/source/MaterialXGenMdl/mdl/materialx/stdlib.mdl index 2cb313221c..bce4a44ea5 100644 --- a/source/MaterialXGenMdl/mdl/materialx/stdlib.mdl +++ b/source/MaterialXGenMdl/mdl/materialx/stdlib.mdl @@ -2981,7 +2981,7 @@ export material mx_mix_surfaceshader( base: mxp_bg.surface.scattering ), emission: material_emission( - emission: df::clamped_mix( + emission: df::unbounded_mix( // unbounded_mix is cheaper df::edf_component[]( df::edf_component( mxp_mix, mxp_fg.surface.emission.emission), df::edf_component( 1.0 - mxp_mix, mxp_bg.surface.emission.emission)) @@ -2994,7 +2994,7 @@ export material mx_mix_surfaceshader( // we need to carry volume properties along for SSS ior: mxp_fg.ior, // NOTE: IOR is uniform, cannot mix here volume: material_volume( - scattering: df::clamped_mix( + scattering: df::unbounded_mix( // unbounded_mix is cheaper df::vdf_component[]( df::vdf_component( mxp_mix, mxp_fg.volume.scattering), df::vdf_component( 1.0 - mxp_mix, mxp_bg.volume.scattering)) From 2c0c7ea713b72de0d1c8e926b835240325344972 Mon Sep 17 00:00:00 2001 From: Mostafa Azab <31315913+Cinifreak@users.noreply.github.com> Date: Wed, 12 Jul 2023 20:23:29 +0300 Subject: [PATCH 36/42] Add triangle wave node (#1334) This node generates values from zero to one based on the input value. --- libraries/stdlib/stdlib_defs.mtlx | 10 ++++++++++ libraries/stdlib/stdlib_ng.mtlx | 26 ++++++++++++++++++++++++++ 2 files changed, 36 insertions(+) diff --git a/libraries/stdlib/stdlib_defs.mtlx b/libraries/stdlib/stdlib_defs.mtlx index e3b4344ff2..bc1240e574 100644 --- a/libraries/stdlib/stdlib_defs.mtlx +++ b/libraries/stdlib/stdlib_defs.mtlx @@ -2546,6 +2546,16 @@ + + + + + + diff --git a/libraries/stdlib/stdlib_ng.mtlx b/libraries/stdlib/stdlib_ng.mtlx index 31c5eea740..f40001e14d 100644 --- a/libraries/stdlib/stdlib_ng.mtlx +++ b/libraries/stdlib/stdlib_ng.mtlx @@ -1540,6 +1540,32 @@ + + + + + + + + + + + + + + + + + + + + + + From 3e838e2f4b4bcc434bd0e99f0e382c8d475b322a Mon Sep 17 00:00:00 2001 From: nicolassavva-autodesk <61437351+nicolassavva-autodesk@users.noreply.github.com> Date: Wed, 12 Jul 2023 10:26:22 -0700 Subject: [PATCH 37/42] Add blackbody PBR node implementations (#1367) Address the missing targets for the PBR blackbody node implementation using the following approximation: Wikipedia: Planckian Locus Approximation Add a simple unlit surface material example using the above blackbody node for emission. Reenable blackbody node tests. --- libraries/pbrlib/genglsl/mx_blackbody.glsl | 48 +++++++++++++++++++ .../pbrlib/genglsl/pbrlib_genglsl_impl.mtlx | 3 ++ .../pbrlib/genmsl/pbrlib_genmsl_impl.mtlx | 3 ++ libraries/pbrlib/genosl/mx_blackbody.osl | 48 +++++++++++++++++++ .../pbrlib/genosl/pbrlib_genosl_impl.legacy | 3 ++ .../pbrlib/genosl/pbrlib_genosl_impl.mtlx | 3 ++ .../TestSuite/pbrlib/bsdf/blackbody.mtlx | 16 +++++++ .../MaterialXGenGlsl/GenGlsl.cpp | 2 +- .../MaterialXTest/MaterialXGenMdl/GenMdl.cpp | 2 +- .../MaterialXTest/MaterialXGenMsl/GenMsl.cpp | 2 +- .../MaterialXTest/MaterialXGenOsl/GenOsl.cpp | 2 +- .../MaterialXGenShader/GenShaderUtil.cpp | 1 - source/MaterialXView/Editor.cpp | 2 +- 13 files changed, 129 insertions(+), 6 deletions(-) create mode 100644 libraries/pbrlib/genglsl/mx_blackbody.glsl create mode 100644 libraries/pbrlib/genosl/mx_blackbody.osl create mode 100644 resources/Materials/TestSuite/pbrlib/bsdf/blackbody.mtlx diff --git a/libraries/pbrlib/genglsl/mx_blackbody.glsl b/libraries/pbrlib/genglsl/mx_blackbody.glsl new file mode 100644 index 0000000000..55d5c87541 --- /dev/null +++ b/libraries/pbrlib/genglsl/mx_blackbody.glsl @@ -0,0 +1,48 @@ +/// XYZ to Rec.709 RGB colorspace conversion +const mat3 XYZ_to_RGB = mat3( 3.2406, -0.9689, 0.0557, + -1.5372, 1.8758, -0.2040, + -0.4986, 0.0415, 1.0570); + +void mx_blackbody(float temperatureKelvin, out vec3 colorValue) +{ + float xc, yc; + float t, t2, t3, xc2, xc3; + + // if value outside valid range of approximation clamp to accepted temperature range + temperatureKelvin = clamp(temperatureKelvin, 1667.0, 25000.0); + + t = 1000.0 / temperatureKelvin; + t2 = t * t; + t3 = t * t * t; + + // Cubic spline approximation for Kelvin temperature to sRGB conversion + // (https://en.wikipedia.org/wiki/Planckian_locus#Approximation) + if (temperatureKelvin < 4000.0) { // 1667K <= temperatureKelvin < 4000K + xc = -0.2661239 * t3 - 0.2343580 * t2 + 0.8776956 * t + 0.179910; + } + else { // 4000K <= temperatureKelvin <= 25000K + xc = -3.0258469 * t3 + 2.1070379 * t2 + 0.2226347 * t + 0.240390; + } + xc2 = xc * xc; + xc3 = xc * xc * xc; + + if (temperatureKelvin < 2222.0) { // 1667K <= temperatureKelvin < 2222K + yc = -1.1063814 * xc3 - 1.34811020 * xc2 + 2.18555832 * xc - 0.20219683; + } + else if (temperatureKelvin < 4000.0) { // 2222K <= temperatureKelvin < 4000K + yc = -0.9549476 * xc3 - 1.37418593 * xc2 + 2.09137015 * xc - 0.16748867; + } + else { // 4000K <= temperatureKelvin <= 25000K + yc = 3.0817580 * xc3 - 5.87338670 * xc2 + 3.75112997 * xc - 0.37001483; + } + + if (yc <= 0.0) { // avoid division by zero + colorValue = vec3(1.0); + return; + } + + vec3 XYZ = vec3(xc / yc, 1.0, (1.0 - xc - yc) / yc); + + colorValue = XYZ_to_RGB * XYZ; + colorValue = max(colorValue, vec3(0.0)); +} diff --git a/libraries/pbrlib/genglsl/pbrlib_genglsl_impl.mtlx b/libraries/pbrlib/genglsl/pbrlib_genglsl_impl.mtlx index b94f513d82..fa4617375f 100644 --- a/libraries/pbrlib/genglsl/pbrlib_genglsl_impl.mtlx +++ b/libraries/pbrlib/genglsl/pbrlib_genglsl_impl.mtlx @@ -74,4 +74,7 @@ + + + diff --git a/libraries/pbrlib/genmsl/pbrlib_genmsl_impl.mtlx b/libraries/pbrlib/genmsl/pbrlib_genmsl_impl.mtlx index 1900f1e824..8d1d2a4729 100644 --- a/libraries/pbrlib/genmsl/pbrlib_genmsl_impl.mtlx +++ b/libraries/pbrlib/genmsl/pbrlib_genmsl_impl.mtlx @@ -71,4 +71,7 @@ + + + diff --git a/libraries/pbrlib/genosl/mx_blackbody.osl b/libraries/pbrlib/genosl/mx_blackbody.osl new file mode 100644 index 0000000000..8b4de5ba9f --- /dev/null +++ b/libraries/pbrlib/genosl/mx_blackbody.osl @@ -0,0 +1,48 @@ +void mx_blackbody(float temperature, output color color_value) +{ + float xc, yc; + float t, t2, t3, xc2, xc3; + + // if value outside valid range of approximation clamp to accepted temperature range + temperature = clamp(temperature, 1667.0, 25000.0); + + t = 1000.0 / temperature; + t2 = t * t; + t3 = t * t * t; + + // Cubic spline approximation for Kelvin temperature to sRGB conversion + // (https://en.wikipedia.org/wiki/Planckian_locus#Approximation) + if (temperature < 4000.0) { // 1667K <= temperature < 4000K + xc = -0.2661239 * t3 - 0.2343580 * t2 + 0.8776956 * t + 0.179910; + } + else { // 4000K <= temperature <= 25000K + xc = -3.0258469 * t3 + 2.1070379 * t2 + 0.2226347 * t + 0.240390; + } + xc2 = xc * xc; + xc3 = xc * xc * xc; + + if (temperature < 2222.0) { // 1667K <= temperature < 2222K + yc = -1.1063814 * xc3 - 1.34811020 * xc2 + 2.18555832 * xc - 0.20219683; + } + else if (temperature < 4000.0) { // 2222K <= temperature < 4000K + yc = -0.9549476 * xc3 - 1.37418593 * xc2 + 2.09137015 * xc - 0.16748867; + } + else { // 4000K <= temperature <= 25000K + yc = 3.0817580 * xc3 - 5.87338670 * xc2 + 3.75112997 * xc - 0.37001483; + } + + if (yc <= 0.0) { // avoid division by zero + color_value = color(1.0); + return; + } + + vector XYZ = vector(xc / yc, 1.0, (1 - xc - yc) / yc); + + /// XYZ to Rec.709 RGB colorspace conversion + matrix XYZ_to_RGB = matrix( 3.2406, -0.9689, 0.0557, + -1.5372, 1.8758, -0.2040, + -0.4986, 0.0415, 1.0570); + + color_value = transform(XYZ_to_RGB, XYZ); + color_value = max(color_value, vector(0.0)); +} diff --git a/libraries/pbrlib/genosl/pbrlib_genosl_impl.legacy b/libraries/pbrlib/genosl/pbrlib_genosl_impl.legacy index d7ccf80906..6ab7cc9e61 100644 --- a/libraries/pbrlib/genosl/pbrlib_genosl_impl.legacy +++ b/libraries/pbrlib/genosl/pbrlib_genosl_impl.legacy @@ -71,4 +71,7 @@ + + + diff --git a/libraries/pbrlib/genosl/pbrlib_genosl_impl.mtlx b/libraries/pbrlib/genosl/pbrlib_genosl_impl.mtlx index b37dc79fcd..7a38f0fb12 100644 --- a/libraries/pbrlib/genosl/pbrlib_genosl_impl.mtlx +++ b/libraries/pbrlib/genosl/pbrlib_genosl_impl.mtlx @@ -71,4 +71,7 @@ + + + diff --git a/resources/Materials/TestSuite/pbrlib/bsdf/blackbody.mtlx b/resources/Materials/TestSuite/pbrlib/bsdf/blackbody.mtlx new file mode 100644 index 0000000000..f2d9b193f3 --- /dev/null +++ b/resources/Materials/TestSuite/pbrlib/bsdf/blackbody.mtlx @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/source/MaterialXTest/MaterialXGenGlsl/GenGlsl.cpp b/source/MaterialXTest/MaterialXGenGlsl/GenGlsl.cpp index 54b6fbf420..339d3853cb 100644 --- a/source/MaterialXTest/MaterialXGenGlsl/GenGlsl.cpp +++ b/source/MaterialXTest/MaterialXGenGlsl/GenGlsl.cpp @@ -85,7 +85,7 @@ TEST_CASE("GenShader: GLSL Implementation Check", "[genglsl]") mx::StringSet generatorSkipNodeTypes; mx::StringSet generatorSkipNodeDefs; - GenShaderUtil::checkImplementations(context, generatorSkipNodeTypes, generatorSkipNodeDefs, 48); + GenShaderUtil::checkImplementations(context, generatorSkipNodeTypes, generatorSkipNodeDefs, 47); } TEST_CASE("GenShader: GLSL Unique Names", "[genglsl]") diff --git a/source/MaterialXTest/MaterialXGenMdl/GenMdl.cpp b/source/MaterialXTest/MaterialXGenMdl/GenMdl.cpp index e565071caa..1a3e127cde 100644 --- a/source/MaterialXTest/MaterialXGenMdl/GenMdl.cpp +++ b/source/MaterialXTest/MaterialXGenMdl/GenMdl.cpp @@ -93,7 +93,7 @@ TEST_CASE("GenShader: MDL Implementation Check", "[genmdl]") generatorSkipNodeTypes.insert("light"); mx::StringSet generatorSkipNodeDefs; - GenShaderUtil::checkImplementations(context, generatorSkipNodeTypes, generatorSkipNodeDefs, 49); + GenShaderUtil::checkImplementations(context, generatorSkipNodeTypes, generatorSkipNodeDefs, 48); } diff --git a/source/MaterialXTest/MaterialXGenMsl/GenMsl.cpp b/source/MaterialXTest/MaterialXGenMsl/GenMsl.cpp index e3bcc7cfa1..03dbcbde69 100644 --- a/source/MaterialXTest/MaterialXGenMsl/GenMsl.cpp +++ b/source/MaterialXTest/MaterialXGenMsl/GenMsl.cpp @@ -84,7 +84,7 @@ TEST_CASE("GenShader: MSL Implementation Check", "[genmsl]") mx::StringSet generatorSkipNodeTypes; mx::StringSet generatorSkipNodeDefs; - GenShaderUtil::checkImplementations(context, generatorSkipNodeTypes, generatorSkipNodeDefs, 48); + GenShaderUtil::checkImplementations(context, generatorSkipNodeTypes, generatorSkipNodeDefs, 47); } TEST_CASE("GenShader: MSL Unique Names", "[genmsl]") diff --git a/source/MaterialXTest/MaterialXGenOsl/GenOsl.cpp b/source/MaterialXTest/MaterialXGenOsl/GenOsl.cpp index 9d3fa78db4..13a8b5ffdf 100644 --- a/source/MaterialXTest/MaterialXGenOsl/GenOsl.cpp +++ b/source/MaterialXTest/MaterialXGenOsl/GenOsl.cpp @@ -89,7 +89,7 @@ TEST_CASE("GenShader: OSL Implementation Check", "[genosl]") generatorSkipNodeTypes.insert("light"); mx::StringSet generatorSkipNodeDefs; - GenShaderUtil::checkImplementations(context, generatorSkipNodeTypes, generatorSkipNodeDefs, 49); + GenShaderUtil::checkImplementations(context, generatorSkipNodeTypes, generatorSkipNodeDefs, 48); } TEST_CASE("GenShader: OSL Unique Names", "[genosl]") diff --git a/source/MaterialXTest/MaterialXGenShader/GenShaderUtil.cpp b/source/MaterialXTest/MaterialXGenShader/GenShaderUtil.cpp index 75b69ff93b..863cd1af05 100644 --- a/source/MaterialXTest/MaterialXGenShader/GenShaderUtil.cpp +++ b/source/MaterialXTest/MaterialXGenShader/GenShaderUtil.cpp @@ -94,7 +94,6 @@ void checkImplementations(mx::GenContext& context, "arrayappend", "displacement", "volume", - "blackbody", "curveadjust", "conical_edf", "measured_edf", diff --git a/source/MaterialXView/Editor.cpp b/source/MaterialXView/Editor.cpp index a4c6d3f675..ff91f0f129 100644 --- a/source/MaterialXView/Editor.cpp +++ b/source/MaterialXView/Editor.cpp @@ -701,7 +701,7 @@ ng::FloatBox* createFloatWidget(ng::Widget* parent, const std::string& la if (ui) { - std::pair range(0.0f, 0.0f); + std::pair range(0.0f, 1.0f); if (ui->uiMin) { box->set_min_value(ui->uiMin->asA()); From 4a55b91de352cd58c0d070434b4d4260d4388ae4 Mon Sep 17 00:00:00 2001 From: Brian Sharpe Date: Fri, 14 Jul 2023 05:15:42 +1200 Subject: [PATCH 38/42] Remove modulo from randomfloat graph (#1407) It did not achieve its intention of allowing for more consistent behavior over large ranges, giving no benefit over that of a simple scale. The scale value of 4096 has been chosen arbitrarily. Perhaps we could expose it as an input someday. --- libraries/stdlib/stdlib_ng.mtlx | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/libraries/stdlib/stdlib_ng.mtlx b/libraries/stdlib/stdlib_ng.mtlx index f40001e14d..ab1332e79d 100644 --- a/libraries/stdlib/stdlib_ng.mtlx +++ b/libraries/stdlib/stdlib_ng.mtlx @@ -1246,13 +1246,9 @@ - - - - - - + + From 0e69033aa90e5c4212df9a07e7ac93e584cafd87 Mon Sep 17 00:00:00 2001 From: Karen Lucknavalai <34335343+klucknav@users.noreply.github.com> Date: Fri, 14 Jul 2023 16:06:42 -0700 Subject: [PATCH 39/42] Add missing cctype include for VS2017 (#1412) - std::isspace requires include of cctype in VS2017 --- source/MaterialXGenMsl/MslShaderGenerator.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/source/MaterialXGenMsl/MslShaderGenerator.cpp b/source/MaterialXGenMsl/MslShaderGenerator.cpp index 61a1c8f572..dcb0a3ed69 100644 --- a/source/MaterialXGenMsl/MslShaderGenerator.cpp +++ b/source/MaterialXGenMsl/MslShaderGenerator.cpp @@ -43,6 +43,8 @@ #include "MslResourceBindingContext.h" +#include + MATERIALX_NAMESPACE_BEGIN const string MslShaderGenerator::TARGET = "genmsl"; From 333ac964158c584ef80d2eb5cf6526230cdc9cea Mon Sep 17 00:00:00 2001 From: Jonathan Stone Date: Fri, 21 Jul 2023 15:08:10 -0700 Subject: [PATCH 40/42] Update three.js to r140 This changelist updates the version of three.js to r140 in the MaterialX Web Viewer, making a handful of adjustments to account for changes in environment texture conventions. --- javascript/MaterialXView/package-lock.json | 50 +++++++++++----------- javascript/MaterialXView/package.json | 2 +- javascript/MaterialXView/source/helper.js | 2 - javascript/MaterialXView/source/viewer.js | 2 +- 4 files changed, 27 insertions(+), 29 deletions(-) diff --git a/javascript/MaterialXView/package-lock.json b/javascript/MaterialXView/package-lock.json index 84d65f8589..f22bb7674c 100644 --- a/javascript/MaterialXView/package-lock.json +++ b/javascript/MaterialXView/package-lock.json @@ -10,7 +10,7 @@ "license": "ISC", "dependencies": { "dat.gui": "^0.7.9", - "three": "^0.135.0", + "three": "^0.140.2", "webpack": "^5.88.1" }, "devDependencies": { @@ -166,9 +166,9 @@ } }, "node_modules/@types/eslint": { - "version": "8.40.2", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.40.2.tgz", - "integrity": "sha512-PRVjQ4Eh9z9pmmtaq8nTjZjQwKFk7YIHIud3lRoKRBgUQjgjRmoGxxGEPXQkF+lH7QkHJRNr5F4aBgYCW0lqpQ==", + "version": "8.44.0", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.44.0.tgz", + "integrity": "sha512-gsF+c/0XOguWgaOgvFs+xnnRqt9GwgTvIks36WpE6ueeI4KCEHHd8K/CKHqhOqrJKsYH8m27kRzQEvWXAwXUTw==", "dependencies": { "@types/estree": "*", "@types/json-schema": "*" @@ -245,9 +245,9 @@ "dev": true }, "node_modules/@types/node": { - "version": "20.3.3", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.3.3.tgz", - "integrity": "sha512-wheIYdr4NYML61AjC8MKj/2jrR/kDQri/CIpVoZwldwhnIrD/j9jIU5bJ8yBKuB2VhpFV7Ab6G2XkBjv9r9Zzw==" + "version": "20.4.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.4.2.tgz", + "integrity": "sha512-Dd0BYtWgnWJKwO1jkmTrzofjK2QXXcai0dmtzvIBhcA+RsG5h8R3xlyta0kGOZRNfL9GuRtb1knmPEhQrePCEw==" }, "node_modules/@types/qs": { "version": "6.9.7", @@ -506,9 +506,9 @@ } }, "node_modules/acorn": { - "version": "8.9.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.9.0.tgz", - "integrity": "sha512-jaVNAFBHNLXspO543WnNNPZFRtavh3skAkITqD0/2aeMkKZTN+254PyhwxFYrk3vQ1xfY+2wbesJMs/JC8/PwQ==", + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", + "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", "bin": { "acorn": "bin/acorn" }, @@ -798,9 +798,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001512", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001512.tgz", - "integrity": "sha512-2S9nK0G/mE+jasCUsMPlARhRCts1ebcp2Ji8Y8PWi4NDE1iRdLCnEPHkEfeBrGC45L4isBx5ur3IQ6yTE2mRZw==", + "version": "1.0.30001515", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001515.tgz", + "integrity": "sha512-eEFDwUOZbE24sb+Ecsx3+OvNETqjWIdabMy52oOkIgcUtAsQifjUG9q4U9dgTHJM2mfk4uEPxc0+xuFdJ629QA==", "funding": [ { "type": "opencollective", @@ -1223,9 +1223,9 @@ "dev": true }, "node_modules/electron-to-chromium": { - "version": "1.4.449", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.449.tgz", - "integrity": "sha512-TxLRpRUj/107ATefeP8VIUWNOv90xJxZZbCW/eIbSZQiuiFANCx2b7u+GbVc9X4gU+xnbvypNMYVM/WArE1DNQ==" + "version": "1.4.460", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.460.tgz", + "integrity": "sha512-kKiHnbrHME7z8E6AYaw0ehyxY5+hdaRmeUbjBO22LZMdqTYCO29EvF0T1cQ3pJ1RN5fyMcHl1Lmcsdt9WWJpJQ==" }, "node_modules/encodeurl": { "version": "1.0.2", @@ -2397,9 +2397,9 @@ } }, "node_modules/node-releases": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.12.tgz", - "integrity": "sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ==" + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", + "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==" }, "node_modules/normalize-path": { "version": "3.0.0", @@ -3405,9 +3405,9 @@ } }, "node_modules/terser": { - "version": "5.18.2", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.18.2.tgz", - "integrity": "sha512-Ah19JS86ypbJzTzvUCX7KOsEIhDaRONungA4aYBjEP3JZRf4ocuDzTg4QWZnPn9DEMiMYGJPiSOy7aykoCc70w==", + "version": "5.19.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.19.0.tgz", + "integrity": "sha512-JpcpGOQLOXm2jsomozdMDpd5f8ZHh1rR48OFgWUH3QsyZcfPgv2qDCYbcDEAYNd4OZRj2bWYKpwdll/udZCk/Q==", "dependencies": { "@jridgewell/source-map": "^0.3.3", "acorn": "^8.8.2", @@ -3468,9 +3468,9 @@ "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" }, "node_modules/three": { - "version": "0.135.0", - "resolved": "https://registry.npmjs.org/three/-/three-0.135.0.tgz", - "integrity": "sha512-kuEpuuxRzLv0MDsXai9huCxOSQPZ4vje6y0gn80SRmQvgz6/+rI0NAvCRAw56zYaWKMGMfqKWsxF9Qa2Z9xymQ==" + "version": "0.140.2", + "resolved": "https://registry.npmjs.org/three/-/three-0.140.2.tgz", + "integrity": "sha512-DdT/AHm/TbZXEhQKQpGt5/iSgBrmXpjU26FNtj1KhllVPTKj1eG4X/ShyD5W2fngE+I1s1wa4ttC4C3oCJt7Ag==" }, "node_modules/thunky": { "version": "1.1.0", diff --git a/javascript/MaterialXView/package.json b/javascript/MaterialXView/package.json index 2113d145cf..7ee8611600 100644 --- a/javascript/MaterialXView/package.json +++ b/javascript/MaterialXView/package.json @@ -11,7 +11,7 @@ "license": "ISC", "dependencies": { "dat.gui": "^0.7.9", - "three": "^0.135.0", + "three": "^0.140.2", "webpack": "^5.88.1" }, "devDependencies": { diff --git a/javascript/MaterialXView/source/helper.js b/javascript/MaterialXView/source/helper.js index e8ffb9dcae..111dfd9b5d 100644 --- a/javascript/MaterialXView/source/helper.js +++ b/javascript/MaterialXView/source/helper.js @@ -20,8 +20,6 @@ const IMAGE_PATH_SEPARATOR = "/"; export function prepareEnvTexture(texture, capabilities) { const rgbaTexture = RGBToRGBA_Float(texture); - // RGBELoader sets flipY to true by default - rgbaTexture.flipY = false; rgbaTexture.wrapS = THREE.RepeatWrapping; rgbaTexture.anisotropy = capabilities.getMaxAnisotropy(); rgbaTexture.minFilter = THREE.LinearMipmapLinearFilter; diff --git a/javascript/MaterialXView/source/viewer.js b/javascript/MaterialXView/source/viewer.js index 0bc537faf0..126b5d5bca 100644 --- a/javascript/MaterialXView/source/viewer.js +++ b/javascript/MaterialXView/source/viewer.js @@ -777,7 +777,7 @@ export class Material Object.assign(uniforms, { u_numActiveLightSources: { value: lights.length }, u_lightData: { value: lightData }, - u_envMatrix: { value: getLightRotation() }, + u_envMatrix: { value: new THREE.Matrix4().multiplyMatrices(getLightRotation(), new THREE.Matrix4().makeScale(1, -1, 1)) }, u_envRadiance: { value: radianceTexture }, u_envRadianceMips: { value: Math.trunc(Math.log2(Math.max(radianceTexture.image.width, radianceTexture.image.height))) + 1 }, u_envRadianceSamples: { value: 16 }, From 42e8b765380efe157eaf9d072128db1835aff352 Mon Sep 17 00:00:00 2001 From: Benjamin Beilharz Date: Sun, 23 Jul 2023 20:34:46 +0200 Subject: [PATCH 41/42] Added option to install resource folder (#1419) Added an option in the CMake file which toggles the installation of resources if the renderer is built and the user wants to install the resources. --- CMakeLists.txt | 5 ++++- cmake/modules/MaterialXConfig.cmake.in | 4 +++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 86872f26de..a5624f0a64 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -49,6 +49,7 @@ option(MATERIALX_BUILD_TESTS "Build unit tests." ON) option(MATERIALX_BUILD_SHARED_LIBS "Build MaterialX libraries as shared rather than static." OFF) option(MATERIALX_PYTHON_LTO "Enable link-time optimizations for MaterialX Python." ON) option(MATERIALX_INSTALL_PYTHON "Install the MaterialX Python package as a third-party library when the install target is built." ON) +option(MATERIALX_INSTALL_RESOURCES "Install the resources folder when building render modules." ON) option(MATERIALX_TEST_RENDER "Run rendering tests for MaterialX Render module. GPU required for graphics validation." ON) option(MATERIALX_WARNINGS_AS_ERRORS "Interpret all compiler warnings as errors." OFF) option(MATERIALX_DYNAMIC_ANALYSIS "Build MaterialX libraries with dynamic analysis on supporting platforms." OFF) @@ -276,7 +277,9 @@ if(MATERIALX_BUILD_RENDER) if(MATERIALX_BUILD_GRAPH_EDITOR) add_subdirectory(source/MaterialXGraphEditor) endif() - add_subdirectory(resources) + if(MATERIALX_INSTALL_RESOURCES) + add_subdirectory(resources) + endif() endif() # Add test subdirectory diff --git a/cmake/modules/MaterialXConfig.cmake.in b/cmake/modules/MaterialXConfig.cmake.in index b4c8b7fad6..e1598087bf 100644 --- a/cmake/modules/MaterialXConfig.cmake.in +++ b/cmake/modules/MaterialXConfig.cmake.in @@ -22,6 +22,8 @@ set_and_check(MATERIALX_STDLIB_DIR "@PACKAGE_CMAKE_INSTALL_PREFIX@/libraries") if(@MATERIALX_BUILD_PYTHON@ AND @MATERIALX_INSTALL_PYTHON@) set_and_check(MATERIALX_PYTHON_DIR "@PACKAGE_CMAKE_INSTALL_PREFIX@/python") endif() -set_and_check(MATERIALX_RESOURCES_DIR "@PACKAGE_CMAKE_INSTALL_PREFIX@/resources") +if(@MATERIALX_BUILD_RENDER@ AND @MATERIALX_INSTALL_RESOURCES@) + set_and_check(MATERIALX_RESOURCES_DIR "@PACKAGE_CMAKE_INSTALL_PREFIX@/resources") +endif() check_required_components(@CMAKE_PROJECT_NAME@) From 6bdec4e7d6a82e3b67c5a4f5890568b0560ff256 Mon Sep 17 00:00:00 2001 From: Niklas Harrysson Date: Mon, 24 Jul 2023 18:07:06 +0200 Subject: [PATCH 42/42] Fixes for OSL implementation of blackbody node (#1423) Fix a few syntactical mistakes causing compile errors in blackbody implementation. --- libraries/pbrlib/genosl/mx_blackbody.osl | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/libraries/pbrlib/genosl/mx_blackbody.osl b/libraries/pbrlib/genosl/mx_blackbody.osl index 8b4de5ba9f..95951330f2 100644 --- a/libraries/pbrlib/genosl/mx_blackbody.osl +++ b/libraries/pbrlib/genosl/mx_blackbody.osl @@ -1,10 +1,10 @@ -void mx_blackbody(float temperature, output color color_value) +void mx_blackbody(float temp, output color color_value) { float xc, yc; float t, t2, t3, xc2, xc3; // if value outside valid range of approximation clamp to accepted temperature range - temperature = clamp(temperature, 1667.0, 25000.0); + float temperature = clamp(temp, 1667.0, 25000.0); t = 1000.0 / temperature; t2 = t * t; @@ -39,9 +39,10 @@ void mx_blackbody(float temperature, output color color_value) vector XYZ = vector(xc / yc, 1.0, (1 - xc - yc) / yc); /// XYZ to Rec.709 RGB colorspace conversion - matrix XYZ_to_RGB = matrix( 3.2406, -0.9689, 0.0557, - -1.5372, 1.8758, -0.2040, - -0.4986, 0.0415, 1.0570); + matrix XYZ_to_RGB = matrix( 3.2406, -0.9689, 0.0557, 0.0, + -1.5372, 1.8758, -0.2040, 0.0, + -0.4986, 0.0415, 1.0570, 0.0, + 0.0, 0.0, 0.0, 1.0); color_value = transform(XYZ_to_RGB, XYZ); color_value = max(color_value, vector(0.0));