Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add creatematrix nodes to build matrices from vectors #1553

Merged
merged 25 commits into from
Jan 4, 2024

Conversation

friedererdmann
Copy link
Contributor

@friedererdmann friedererdmann commented Oct 5, 2023

Hello,

I'm opening this PR to add creatematrix, a constructor for Matrix33 from 3 Vector3s, Matrix44 from 4 Vector3s and Matrix44 from 4 Vector4s from the specification document (https://github.com/AcademySoftwareFoundation/MaterialX/blob/main/documents/Specification/MaterialX.Specification.md#math-nodes).

A typical usecase where constructing a Matrix33 can be useful would be to be able to build the tangent to world matrix to translate Normals as shown in this picture:

image

@linux-foundation-easycla
Copy link

linux-foundation-easycla bot commented Oct 5, 2023

CLA Signed

The committers listed above are authorized under a signed CLA.

@friedererdmann friedererdmann marked this pull request as draft October 5, 2023 14:33
@friedererdmann friedererdmann changed the title WIP: Added constructor for Matrix33 from 3 Vector3s WIP: Added creatematrix node to construct matrix from vector3 and vector4 Oct 5, 2023
@kwokcb
Copy link
Contributor

kwokcb commented Oct 5, 2023

Hi @friedererdmann,

  • I think all you really need is oslc, and mdlc to see if the code compiles (OSL, MDL). The generateShader.py script allows for a validator program to run for generated code, where you can use glslValidator with MSL.

  • If you want to render, the testing executable info can be found here

  • MSL rendering needs a Mac :) and can be tested with MaterialXGraphEditor or MaterialXView on the test file.

  • You probably want to check for the render executable for MDL. It used to be df_cuda.

  • If you want to test ESSL, you can use the Web Viewer but you'll need to do a WASM/Javascript build. Probably not worth the time.

Hope this helps.

@friedererdmann friedererdmann changed the title WIP: Added creatematrix node to construct matrix from vector3 and vector4 Added creatematrix node to construct matrix from vector3 and vector4 Oct 11, 2023
@friedererdmann friedererdmann marked this pull request as ready for review October 11, 2023 16:35
@friedererdmann
Copy link
Contributor Author

friedererdmann commented Oct 12, 2023

This is ready for review now! Thanks for the guidance with testing Bernard!

Copy link
Contributor

@kwokcb kwokcb left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This looks great. Thanks for being so thorough with the testing :).

@friedererdmann
Copy link
Contributor Author

Hey :) Just checking if this can be merged into the repo? (I don't have the rights to merge myself and not sure if I missed anything in the contribution guidelines!)

@jstone-lucasfilm
Copy link
Member

Thanks for the reminder, @friedererdmann, and sorry for the delay in review. I'll plan to take a close look soon!

Signed-off-by: Jonathan Stone <jstone@lucasfilm.com>
Signed-off-by: Jonathan Stone <jstone@lucasfilm.com>
@jstone-lucasfilm jstone-lucasfilm changed the title Added creatematrix node to construct matrix from vector3 and vector4 Add creatematrix nodes to build matrices from vectors Nov 1, 2023
Signed-off-by: Jonathan Stone <jstone@lucasfilm.com>
Signed-off-by: Jonathan Stone <jstone@lucasfilm.com>
Signed-off-by: Jonathan Stone <jstone@lucasfilm.com>
Copy link
Member

@jstone-lucasfilm jstone-lucasfilm left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This looks great to me, @friedererdmann, and I had just one recommendation for the naming of outputs.

libraries/stdlib/stdlib_defs.mtlx Outdated Show resolved Hide resolved
Copy link
Member

@jstone-lucasfilm jstone-lucasfilm left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This looks great to me, thanks @friedererdmann!

@jstone-lucasfilm jstone-lucasfilm merged commit 5def239 into AcademySoftwareFoundation:main Jan 4, 2024
31 checks passed
kwokcb added a commit to kwokcb/MaterialX that referenced this pull request Jan 4, 2024
* Add enumeration support to web viewer (AcademySoftwareFoundation#1632)

- Scan for `enum` and `enumvalues` if attributes exist on input. If no `enumvalues` exist then map to "default" of 0..&lt;enum list size&gt;.
- Create a drop-down for each enumerated input.

* Initial nprlib with viewdirection node (AcademySoftwareFoundation#1631)

This changelist introduces an NPR (non-photorealistic rendering) data library to MaterialX, initially consisting of a single `viewdirection` node.

The NPR data library is designed for the portable expression of artistic, non-physically-based materials, with common examples being cartoon shading, architectural diagrams, and edge highlighting.  In future versions of MaterialX, we expect this data library to be extended with additional primitives and artist-facing graphs as they are requested by the graphics community and approved by the MaterialX TSC.

For shader generation, MaterialX initially supports the NPR data library in GLSL, ESSL, MSL, and OSL, with MDL being omitted for now, based on intentional restrictions in its design philosophy.

* Improve shader generation for viewdirection

This changelist improves shader generation logic for the new viewdirection node, allowing it to work correctly in derived hardware languages such as ESSL.

* Add creatematrix nodes to build matrices from vectors (AcademySoftwareFoundation#1553)

I'm opening this PR to add creatematrix, a constructor for Matrix33 from 3 Vector3s, Matrix44 from 4 Vector3s and Matrix44 from 4 Vector4s from the specification document (https://github.com/AcademySoftwareFoundation/MaterialX/blob/main/documents/Specification/MaterialX.Specification.md#math-nodes).

---------

Co-authored-by: Jonathan Stone <jstone@lucasfilm.com>
Co-authored-by: Frieder Erdmann <55715326+friedererdmann@users.noreply.github.com>
kwokcb added a commit to kwokcb/MaterialX that referenced this pull request Jan 4, 2024
* Add enumeration support to web viewer (AcademySoftwareFoundation#1632)

- Scan for `enum` and `enumvalues` if attributes exist on input. If no `enumvalues` exist then map to "default" of 0..&lt;enum list size&gt;.
- Create a drop-down for each enumerated input.

* Initial nprlib with viewdirection node (AcademySoftwareFoundation#1631)

This changelist introduces an NPR (non-photorealistic rendering) data library to MaterialX, initially consisting of a single `viewdirection` node.

The NPR data library is designed for the portable expression of artistic, non-physically-based materials, with common examples being cartoon shading, architectural diagrams, and edge highlighting.  In future versions of MaterialX, we expect this data library to be extended with additional primitives and artist-facing graphs as they are requested by the graphics community and approved by the MaterialX TSC.

For shader generation, MaterialX initially supports the NPR data library in GLSL, ESSL, MSL, and OSL, with MDL being omitted for now, based on intentional restrictions in its design philosophy.

* Improve shader generation for viewdirection

This changelist improves shader generation logic for the new viewdirection node, allowing it to work correctly in derived hardware languages such as ESSL.

* Add creatematrix nodes to build matrices from vectors (AcademySoftwareFoundation#1553)

I'm opening this PR to add creatematrix, a constructor for Matrix33 from 3 Vector3s, Matrix44 from 4 Vector3s and Matrix44 from 4 Vector4s from the specification document (https://github.com/AcademySoftwareFoundation/MaterialX/blob/main/documents/Specification/MaterialX.Specification.md#math-nodes).

---------

Co-authored-by: Jonathan Stone <jstone@lucasfilm.com>
Co-authored-by: Frieder Erdmann <55715326+friedererdmann@users.noreply.github.com>
jstone-lucasfilm added a commit to jstone-lucasfilm/MaterialX that referenced this pull request Jan 17, 2024
This changelist fixes a handful of minor typos in shader generation, introduced in AcademySoftwareFoundation#1355 and AcademySoftwareFoundation#1553.
jstone-lucasfilm added a commit to jstone-lucasfilm/MaterialX that referenced this pull request Jan 17, 2024
This changelist fixes a handful of minor typos in shader generation, introduced in AcademySoftwareFoundation#1355 and AcademySoftwareFoundation#1553.
jstone-lucasfilm added a commit to jstone-lucasfilm/MaterialX that referenced this pull request Jan 17, 2024
This changelist fixes a handful of minor typos in shader generation, introduced in AcademySoftwareFoundation#1355 and AcademySoftwareFoundation#1553.
jstone-lucasfilm added a commit that referenced this pull request Jan 17, 2024
This changelist fixes a handful of minor typos in shader generation, introduced in #1355 and #1553.
kwokcb added a commit to kwokcb/MaterialX that referenced this pull request Jan 18, 2024
* Improvements to noise implementations (AcademySoftwareFoundation#1653)

- Leverage node graphs to share the conversion aspects of noise implementations across languages.
- Simplify noise unit tests to cover only unique implementations.

* Fix shader generation typos

This changelist fixes a handful of minor typos in shader generation, introduced in AcademySoftwareFoundation#1355 and AcademySoftwareFoundation#1553.

* Add frame capture to web viewer (AcademySoftwareFoundation#1636)

Add frame capture code to trigger on 'f' key. This is the same key as used for the desktop viewer.

* Document format updates

This changelist applies the mxformat.py script to the libraries and resources folders in the repository, updating formatting for a handful of documents.

---------

Co-authored-by: Jonathan Stone <jstone@lucasfilm.com>
kwokcb added a commit to kwokcb/MaterialX that referenced this pull request Jan 30, 2024
* Web viewer formatting improvements and fixes (AcademySoftwareFoundation#1635)

- Add colouring to items and folders which can be set vis CSS. This makes it easier to tell what areas are under what folders.
- Fix string disable setting (was using old API).
- Fix parenting of enum widgets to be under current folder instead of top level.

* Add HwImplementation class

This changelist adds an intermediate HwImplementation class, allowing the sharing of common features between node implementations in hardware shading languages.

* Merge geometry node implementations

This changelist merges the implementations of geometry nodes across hardware shading languages, allowing a greater degree of code sharing.

* Merge application node implementations

This changelist merges the implementations of application and NPR nodes across hardware shading languages, allowing a greater degree of code sharing.

* Add vector2 variant of normalmap (AcademySoftwareFoundation#1355)

The materialx specification defines the scale attribute of the normalmap to be either a float or a vector2 but the vector2 variant was missing from the implementation. This PR adds it.

* Renderable logic improvements to web viewer (AcademySoftwareFoundation#1644)

- Adds in proper parsing of renderable elements vs always just picking the first surface shader found.
  - The test suite files which have (multiple) nodegraph outputs and top level outputs will now load properly.
- Adds in UI to mark folders as renderable (using a shaderball icon) 
- Adds in "soloing" capability to allow picking a renderable and have it show up on all geometry. When nothing is solo'ed the default material assignment is used.
- Includes fixes for:
  - Dag path assignment matching .
  - Missing exposure of NodeGraph::getDownStreamPorts() in JS.
  - Addressing the big performance hit when binding materials to geometry in ThreeJS. The code by default is some quite slow code for reflection / debugging purposes which is now turned off. Chess set load is seconds vs minutes. This affects the 'solo'ing workflow significantly as each switch is a geometry re-bind. If the material is not already cached then slow code will be hit which can cause seconds to pass when selecting a new material -- which appears like a "hang" from a user perspective.

* Fix irradiance generation in MaterialXView (AcademySoftwareFoundation#1647)

This changelist fixes a regression to environment irradiance generation in MaterialXView, caused by a change to image caching logic for GLSL rendering in MaterialX 1.38.8.  This fix restores the ability to render environment maps that are missing their pre-generated irradiance data, with irradiance being generated on the fly via spherical harmonics.

* Add UI limits for useSpecularWorkflow and normal in UsdPreviewSurface (AcademySoftwareFoundation#1646)

UsdPreviewSurface allows useSpecularWorkflow to be 0 or 1. Normals should have values between -1 to 1, inclusive. This PR puts these limits into place.

* Unify noise unit tests

This changelist merges two sets of noise unit tests into a single document, and aligns their implementations for clarity.

* Static analysis optimizations

This changelist addresses a handful of static analysis optimizations flagged by PVS-Studio and cppcheck, including the following:

- Pass immutable std::string, FilePath, and FileSearchPath arguments by const reference.
- Mark immutable ShaderGenerator references as const.
- Prefer std::string::empty over comparison against an empty string.
- Remove unused private methods Graph::findLinkId, Graph::findInput, and Graph::selectMaterial.
- Remove variable assignments with no impact on code behavior.

* Improvements to noise implementations (AcademySoftwareFoundation#1653)

- Leverage node graphs to share the conversion aspects of noise implementations across languages.
- Simplify noise unit tests to cover only unique implementations.

* Fix shader generation typos

This changelist fixes a handful of minor typos in shader generation, introduced in AcademySoftwareFoundation#1355 and AcademySoftwareFoundation#1553.

* Add frame capture to web viewer (AcademySoftwareFoundation#1636)

Add frame capture code to trigger on 'f' key. This is the same key as used for the desktop viewer.

* Document format updates

This changelist applies the mxformat.py script to the libraries and resources folders in the repository, updating formatting for a handful of documents.

* Add versioning rules to Developer Guide (AcademySoftwareFoundation#1664)

This changelist adds two new sections to the Developer Guide, describing the categories of changes to the MaterialX API and data libraries that are allowed in version upgrades.

* Improve robustness of TypeDesc pointer comparisons (AcademySoftwareFoundation#1665)

- The globals presets defined for TypeDesc are pointers which may not be shared between shared modules. This occurs for instance in Python where the pointers are declared locally for each module.
- Any pointer comparison between the same TypeDesc preset can thus result in a failure status.

* Improvements to smoothstep implementations

- Leverage node graphs to share the conversion aspects of smoothstep implementations across languages.
- Simplify smoothstep unit tests to cover only unique implementations.

* Update changelog for recent work

* Update comments in stdlib_ng.mtlx

This changelist updates the comments in stdlib_ng, aligning them with the conventions for nodegraph definitions in the data libraries.

* Fix orphaned links when deleting node in graph editor (AcademySoftwareFoundation#1667)

This PR introduces fixes related to the removal of orphaned links when deleting a node in the Graph Editor:
- remove the attribute `INTERFACE_NAME_ATTRIBUTE` of input pins that were connected to the deleted node
(Fixes AcademySoftwareFoundation#1577) 
- iterate over all of the output pins instead of only handling the first one.
(Fixes AcademySoftwareFoundation#1666)

* Add facingratio node to nprlib (AcademySoftwareFoundation#1671)

This changelist adds a `facingratio` node to the NPR data library, providing an additional intermediate node for building NPR graphs.

* Add geometry drag & drop to web viewer (AcademySoftwareFoundation#1663)

- Add support to recognize dropping of individual geometry (glb) files.
- Minor cleanup to stop if no MTLX or GLB files loaded.

* Apply JavaScript formatting

This changelist applies automated formatting to the MaterialX JavaScript codebase, aligning it with the 4-space indentation and Allman braces used in MaterialX C++.

* Add missing classification of VolumeShader nodes (AcademySoftwareFoundation#1675)

ShaderNodes.cpp had missing classification information for Volume Shaders. This PR is a simple addition of that classification.

* Add invert node to specification (AcademySoftwareFoundation#1676)

The node exists in the standard library code, but is missing from the specification.

* Improvements to facingratio

- Fix syntax of input default values.
- Use the invert node in facingratio for compactness.
- Clarify the edge brighten example material.

* Always build GLFW as a static library (AcademySoftwareFoundation#1680)

Currently the embedded glfw build for MaterialXGraphEditor inherits the value of BUILD_SHARED_LIBS from MATERIALX_BUILD_SHARED_LIBS, but we're not installing libglfw, per AcademySoftwareFoundation#1245 the intention was to statically link.

---------

Co-authored-by: Jonathan Stone <jstone@lucasfilm.com>
Co-authored-by: mnikelsky <michael.nikelsky@autodesk.com>
Co-authored-by: Eric Haines <erich@acm.org>
Co-authored-by: Leo Belda <leo.belda@wanadoo.fr>
Co-authored-by: Dhruv Govil <dgovil2@apple.com>
Co-authored-by: ld-kerley <154285602+ld-kerley@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

3 participants