Skip to content

Commit 1ce9434

Browse files
authored
Merge branch 'AcademySoftwareFoundation:main' into projection_definitions
2 parents 91ac6a5 + ec0955e commit 1ce9434

41 files changed

Lines changed: 714 additions & 104 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/workflows/main.yml

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -25,17 +25,17 @@ jobs:
2525
python: 3.9
2626
cmake_config: -DMATERIALX_BUILD_SHARED_LIBS=ON -DMATERIALX_BUILD_MONOLITHIC=ON
2727

28-
- name: Linux_GCC_14_Python312
28+
- name: Linux_GCC_14_Python39
2929
os: ubuntu-24.04
3030
compiler: gcc
3131
compiler_version: "14"
32-
python: 3.12
32+
python: 3.9
3333

34-
- name: Linux_GCC_14_Python313
34+
- name: Linux_GCC_14_Python311
3535
os: ubuntu-24.04
3636
compiler: gcc
3737
compiler_version: "14"
38-
python: 3.13
38+
python: 3.11
3939
test_render: ON
4040

4141
- name: Linux_GCC_CoverageAnalysis
@@ -53,32 +53,32 @@ jobs:
5353
python: 3.9
5454
cmake_config: -DMATERIALX_BUILD_SHARED_LIBS=ON
5555

56-
- name: Linux_Clang_18_Python313
56+
- name: Linux_Clang_18_Python311
5757
os: ubuntu-24.04
5858
compiler: clang
5959
compiler_version: "18"
60-
python: 3.13
60+
python: 3.11
6161
clang_format: ON
6262

63-
- name: MacOS_Xcode_15_Python311
63+
- name: MacOS_Xcode_15_Python39
6464
os: macos-14
6565
compiler: xcode
6666
compiler_version: "15.4"
6767
cmake_config: -DMATERIALX_BUILD_SHARED_LIBS=ON
68-
python: 3.11
68+
python: 3.9
6969

70-
- name: MacOS_Xcode_15_Python312
70+
- name: MacOS_Xcode_15_Python311
7171
os: macos-15
7272
compiler: xcode
7373
compiler_version: "15.4"
74-
python: 3.12
74+
python: 3.11
7575
test_shaders: ON
7676

77-
- name: MacOS_Xcode_16_Python313
77+
- name: MacOS_Xcode_16_Python311
7878
os: macos-15
7979
compiler: xcode
8080
compiler_version: "16.1"
81-
python: 3.13
81+
python: 3.11
8282
static_analysis: ON
8383
cmake_config: -DCMAKE_EXPORT_COMPILE_COMMANDS=ON
8484

@@ -103,10 +103,10 @@ jobs:
103103
python: 3.9
104104
cmake_config: -G "Visual Studio 16 2019" -A "Win32"
105105

106-
- name: Windows_VS2022_x64_Python313
106+
- name: Windows_VS2022_x64_Python311
107107
os: windows-2025
108108
architecture: x64
109-
python: 3.13
109+
python: 3.11
110110
cmake_config: -G "Visual Studio 17 2022" -A "x64"
111111
test_shaders: ON
112112

CMakeLists.txt

Lines changed: 46 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ set(MATERIALX_MINOR_VERSION 39)
44
set(MATERIALX_BUILD_VERSION 4)
55
set(MATERIALX_LIBRARY_VERSION ${MATERIALX_MAJOR_VERSION}.${MATERIALX_MINOR_VERSION}.${MATERIALX_BUILD_VERSION})
66

7-
# Cmake setup
7+
# CMake setup
88
cmake_minimum_required(VERSION 3.26)
99
set(CMAKE_CXX_STANDARD 17)
1010
set(CMAKE_POSITION_INDEPENDENT_CODE TRUE)
@@ -61,10 +61,10 @@ option(MATERIALX_WARNINGS_AS_ERRORS "Interpret all compiler warnings as errors."
6161
option(MATERIALX_COVERAGE_ANALYSIS "Build MaterialX libraries with coverage analysis on supporting platforms." OFF)
6262
option(MATERIALX_DYNAMIC_ANALYSIS "Build MaterialX libraries with dynamic analysis on supporting platforms." OFF)
6363

64-
option(MATERIALX_BUILD_IOS "Build MaterialX for iOS. (Deprecated. Set CMAKE_SYSTEM_NAME instead)" OFF)
64+
option(MATERIALX_BUILD_IOS "Build MaterialX for iOS. (Deprecated. Set CMAKE_SYSTEM_NAME to iOS instead.)" OFF)
6565
option(MATERIALX_BUILD_APPLE_FRAMEWORK "Build MaterialX as an Apple Framework" ${__build_apple_framework})
6666
if (MATERIALX_BUILD_IOS)
67-
MESSAGE(WARNING "The MATERIALX_BUILD_IOS is deprecated. Set the CMAKE_SYSTEM_NAME to the platform instead")
67+
message(DEPRECATION "The MATERIALX_BUILD_IOS option is deprecated. Set CMAKE_SYSTEM_NAME to iOS instead.")
6868
set(CMAKE_SYSTEM_NAME iOS)
6969
endif()
7070

@@ -107,8 +107,8 @@ if (MATERIALX_BUILD_JS)
107107
set(MATERIALX_BUILD_TESTS OFF)
108108
endif()
109109

110+
# All hardware shading languages currently depend on the GLSL shader generator.
110111
if(MATERIALX_BUILD_GEN_MSL)
111-
# All hardware shading languages currently depend on the GLSL shader generator.
112112
set(MATERIALX_BUILD_GEN_GLSL ON)
113113
endif()
114114

@@ -156,7 +156,7 @@ message(STATUS "Setting namespace to '${MATERIALX_NAMESPACE}'")
156156
# Library name custom suffix
157157
# This helps an application that needs to ship a dynamic library MaterialX ensure
158158
# that it has a unique name that won't conflict with one elsewhere on the system.
159-
set (MATERIALX_LIBNAME_SUFFIX "" CACHE STRING "Specify a suffix to all libraries that are built")
159+
set(MATERIALX_LIBNAME_SUFFIX "" CACHE STRING "Specify a suffix to all libraries that are built")
160160

161161
mark_as_advanced(MATERIALX_BUILD_DOCS)
162162
mark_as_advanced(MATERIALX_BUILD_GEN_GLSL)
@@ -211,21 +211,18 @@ if (MATERIALX_BUILD_USE_CCACHE)
211211
endif()
212212
endif()
213213

214-
# Attempt to configure OSL testing if it can be found by cmake.
215-
# This will not override any explicitly provided oslc and testrender
214+
# Allow the OSL CMake package to provide binary locations for render tests.
215+
# This will not override explicitly provided oslc, testrender, and include paths.
216216
if(MATERIALX_BUILD_RENDER AND MATERIALX_BUILD_GEN_OSL AND MATERIALX_BUILD_TESTS)
217-
# We currently only need the actual OSL binaries if we're running tests with Render and GenOSL enabled.
218217
find_package(OSL QUIET)
219218
if(OSL_FOUND)
220219
if(NOT MATERIALX_OSL_BINARY_OSLC)
221220
set(MATERIALX_OSL_BINARY_OSLC $<TARGET_FILE:OSL::oslc>)
222221
endif()
223222
if(NOT MATERIALX_OSL_BINARY_TESTRENDER)
224-
# currently OSL does not export a cmake target for testrender, but once that's added this can be simplified.
223+
# OSL does not yet export a CMake target for testrender.
225224
set(MATERIALX_OSL_BINARY_TESTRENDER $<TARGET_FILE_DIR:OSL::oslc>/testrender)
226225
endif()
227-
# NOTE : we do not derive a value for MATERIALX_OSL_INCLUDE_PATH here, as a a cmake installed OSL package
228-
# should have the shader includes in the expected location.
229226
endif()
230227
endif()
231228

@@ -327,20 +324,20 @@ function(mx_add_library MATERIALX_MODULE_NAME)
327324
set(options ADD_OBJECTIVE_C_CODE)
328325
set(oneValueArgs EXPORT_DEFINE)
329326
set(multiValueArgs
330-
SOURCE_FILES
331-
HEADER_FILES
332-
INLINED_FILES
333-
MTLX_MODULES)
327+
SOURCE_FILES
328+
HEADER_FILES
329+
INLINED_FILES
330+
MTLX_MODULES)
334331
cmake_parse_arguments(args
335-
"${options}"
336-
"${oneValueArgs}"
337-
"${multiValueArgs}"
338-
${ARGN})
332+
"${options}"
333+
"${oneValueArgs}"
334+
"${multiValueArgs}"
335+
${ARGN})
339336
340337
if (APPLE AND args_ADD_OBJECTIVE_C_CODE)
341338
file(GLOB_RECURSE materialx_source_oc "${CMAKE_CURRENT_SOURCE_DIR}/*.m*")
342339
set_source_files_properties(${materialx_source_oc} PROPERTIES
343-
COMPILE_FLAGS "-x objective-c++")
340+
COMPILE_FLAGS "-x objective-c++")
344341
set(args_SOURCE_FILES ${args_SOURCE_FILES} ${materialx_source_oc})
345342
endif()
346343
@@ -360,30 +357,29 @@ function(mx_add_library MATERIALX_MODULE_NAME)
360357
361358
target_link_libraries(${TARGET_NAME}
362359
PUBLIC
363-
${args_MTLX_MODULES}
364-
${CMAKE_DL_LIBS})
360+
${args_MTLX_MODULES}
361+
${CMAKE_DL_LIBS})
365362
366363
target_include_directories(${TARGET_NAME}
367-
PUBLIC
368-
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/../>
369-
$<INSTALL_INTERFACE:${MATERIALX_INSTALL_INCLUDE_PATH}>
370-
PRIVATE
371-
${EXTERNAL_INCLUDE_DIRS})
364+
PUBLIC
365+
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/../>
366+
$<INSTALL_INTERFACE:${MATERIALX_INSTALL_INCLUDE_PATH}>
367+
PRIVATE
368+
${EXTERNAL_INCLUDE_DIRS})
372369
373370
set_target_properties(
374-
${TARGET_NAME} PROPERTIES
375-
OUTPUT_NAME ${MATERIALX_MODULE_NAME}${MATERIALX_LIBNAME_SUFFIX}
376-
COMPILE_FLAGS "${EXTERNAL_COMPILE_FLAGS}"
377-
LINK_FLAGS "${EXTERNAL_LINK_FLAGS}"
378-
INSTALL_RPATH "${MATERIALX_SAME_DIR_RPATH}"
379-
VERSION "${MATERIALX_LIBRARY_VERSION}"
380-
SOVERSION "${MATERIALX_MAJOR_VERSION}")
371+
${TARGET_NAME} PROPERTIES
372+
OUTPUT_NAME ${MATERIALX_MODULE_NAME}${MATERIALX_LIBNAME_SUFFIX}
373+
COMPILE_FLAGS "${EXTERNAL_COMPILE_FLAGS}"
374+
LINK_FLAGS "${EXTERNAL_LINK_FLAGS}"
375+
INSTALL_RPATH "${MATERIALX_SAME_DIR_RPATH}"
376+
VERSION "${MATERIALX_LIBRARY_VERSION}"
377+
SOVERSION "${MATERIALX_MAJOR_VERSION}")
381378
else()
382379
set(TARGET_NAME ${MATERIALX_MONOLITHIC_TARGET})
383-
384380
add_library(${MATERIALX_MODULE_NAME} ALIAS ${MATERIALX_MONOLITHIC_TARGET})
385381
386-
# Store the aliased MaterialX modules name to create cmake export aliases later.
382+
# Store the aliased MaterialX modules name to create CMake export aliases later.
387383
set_property(GLOBAL APPEND PROPERTY MATERIALX_MODULES ${MATERIALX_MODULE_NAME})
388384
endif()
389385
@@ -406,7 +402,7 @@ function(mx_add_library MATERIALX_MODULE_NAME)
406402
${args_INLINED_FILES})
407403
408404
target_include_directories(${TARGET_NAME} PUBLIC
409-
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/../>)
405+
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/../>)
410406
411407
target_compile_definitions(${TARGET_NAME} PRIVATE "-D${args_EXPORT_DEFINE}")
412408
@@ -424,11 +420,11 @@ function(mx_add_library MATERIALX_MODULE_NAME)
424420
DESTINATION "${MATERIALX_INSTALL_LIB_PATH}/" OPTIONAL)
425421
endif()
426422
427-
# pass TARGET_NAME back to call site - so caller can modify the build target
423+
# Pass TARGET_NAME back to call site, so the caller can modify the build target.
428424
set(TARGET_NAME ${TARGET_NAME} PARENT_SCOPE)
429425
endfunction()
430426
431-
# Propagate shared library setting to NanoGUI:
427+
# Propagate shared library setting to NanoGUI
432428
if(MATERIALX_BUILD_SHARED_LIBS)
433429
set(BUILD_SHARED_LIBS "ON")
434430
else()
@@ -517,7 +513,7 @@ if(MATERIALX_BUILD_JS)
517513
add_subdirectory(source/JsMaterialX)
518514
endif()
519515
520-
if (MATERIALX_BUILD_MONOLITHIC)
516+
if(MATERIALX_BUILD_MONOLITHIC)
521517
# MaterialX monolithic build target needs to be installed after any other included
522518
# modules to ensure the correct files are in mxHeaders
523519
if(NOT SKBUILD)
@@ -552,6 +548,7 @@ if (MATERIALX_BUILD_MONOLITHIC)
552548
endif()
553549
endif()
554550
551+
# Set Visual Studio startup projects
555552
if(MATERIALX_BUILD_VIEWER)
556553
set_property(DIRECTORY PROPERTY VS_STARTUP_PROJECT MaterialXView)
557554
elseif(MATERIALX_BUILD_GRAPH_EDITOR)
@@ -562,16 +559,15 @@ endif()
562559
563560
# Install root-level documents
564561
if(NOT SKBUILD)
565-
install(FILES LICENSE CHANGELOG.md README.md THIRD-PARTY.md
566-
DESTINATION .)
562+
install(FILES LICENSE CHANGELOG.md README.md THIRD-PARTY.md DESTINATION .)
567563
568564
set(MATERIALX_GEN_CONFIG_PATH "${MATERIALX_INSTALL_LIB_PATH}/cmake/${CMAKE_PROJECT_NAME}")
569565
570566
include(CMakePackageConfigHelpers)
571567
572568
if (MATERIALX_BUILD_MONOLITHIC)
573-
# export aliases for the MaterialX modules built in this monolithic build to be
574-
# less disruptive to downstream probjects.
569+
# Export aliases for the MaterialX modules built in this monolithic build
570+
# to be less disruptive to downstream projects.
575571
get_property(MATERIALX_MODULES GLOBAL PROPERTY MATERIALX_MODULES)
576572
set(EXPORT_ALIASES "# Aliased targets for the the monolithic build\n")
577573
foreach (MODULE ${MATERIALX_MODULES})
@@ -584,19 +580,17 @@ if(NOT SKBUILD)
584580
endif()
585581

586582
configure_package_config_file(cmake/modules/MaterialXConfig.cmake.in
587-
${PROJECT_BINARY_DIR}/cmake/${CMAKE_PROJECT_NAME}Config.cmake
588-
INSTALL_DESTINATION "${MATERIALX_GEN_CONFIG_PATH}"
589-
PATH_VARS CMAKE_INSTALL_PREFIX CMAKE_PROJECT_NAME)
583+
${PROJECT_BINARY_DIR}/cmake/${CMAKE_PROJECT_NAME}Config.cmake
584+
INSTALL_DESTINATION "${MATERIALX_GEN_CONFIG_PATH}"
585+
PATH_VARS CMAKE_INSTALL_PREFIX CMAKE_PROJECT_NAME)
590586
write_basic_package_version_file(${PROJECT_BINARY_DIR}/cmake/${CMAKE_PROJECT_NAME}ConfigVersion.cmake
591-
VERSION ${MATERIALX_LIBRARY_VERSION}
592-
COMPATIBILITY AnyNewerVersion)
593-
594-
# Install the auto-generated CMake configuration files:
587+
VERSION ${MATERIALX_LIBRARY_VERSION}
588+
COMPATIBILITY AnyNewerVersion)
595589

590+
# Install auto-generated CMake configuration files
596591
install(EXPORT MaterialX
597592
DESTINATION "${MATERIALX_GEN_CONFIG_PATH}"
598593
FILE ${CMAKE_PROJECT_NAME}Targets.cmake)
599-
600594
install(FILES "${PROJECT_BINARY_DIR}/cmake/${CMAKE_PROJECT_NAME}ConfigVersion.cmake"
601595
"${PROJECT_BINARY_DIR}/cmake/${CMAKE_PROJECT_NAME}Config.cmake"
602596
DESTINATION "${MATERIALX_GEN_CONFIG_PATH}")

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ The following packages contain pre-built binaries for the latest release, includ
7979

8080
## Additional Resources
8181

82-
- The [Developer Guide](http://www.materialx.org/docs/api/index.html) contains a developer-oriented overview of MaterialX with API documentation.
82+
- The [Developer Guide](http://www.materialx.org/docs/api/index.html) contains a developer-oriented overview of MaterialX with Build and API documentation.
8383
- The [Python Scripts](python/Scripts) folder contains standalone examples of MaterialX Python code.
8484
- The [JavaScript](javascript) folder contains details on building JavaScript bindings for MaterialX.
8585
- Presentations at [ASWF Open Source Days](https://materialx.org/assets/ASWF_OSD2024_MaterialX_Final.pdf) and the [SIGGRAPH Physically Based Shading Course](https://blog.selfshadow.com/publications/s2020-shading-course/#materialx) provide details on the roadmap for MaterialX development.

documents/DeveloperGuide/MainPage.md

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@ The MaterialX codebase requires a compiler with support for C++17, and can be bu
2020

2121
The Python bindings for MaterialX are based on [PyBind11](https://github.com/pybind/pybind11), and support Python versions 3.9 and greater.
2222

23+
On macOS, you'll need to [install Xcode](https://developer.apple.com/xcode/resources/), in order to get access to the Metal Tools as well as compiler toolchains.
24+
2325
## Building MaterialX
2426

2527
### Building MaterialX C++
@@ -52,6 +54,29 @@ Select the `MATERIALX_BUILD_VIEWER` option to build the MaterialX Viewer. Insta
5254

5355
To generate HTML documentation for the MaterialX C++ API, make sure a version of [Doxygen](https://www.doxygen.org/) is on your path, and select the advanced option `MATERIALX_BUILD_DOCS` in CMake. This option will add a target named `MaterialXDocs` to your project, which can be built as an independent step from your development environment.
5456

57+
## Editor Setup
58+
59+
MaterialX should work in any editor that supports CMake, or that CMake can generate a project for.
60+
Some common Editors are listed here to help developers get started.
61+
62+
### CLion
63+
64+
[CLion](https://www.jetbrains.com/clion/) is a cross-platform IDE that can be used to develop MaterialX.
65+
Additionally, it includes CMake and is free for non-commercial Use.
66+
67+
To get started with CLion, open the MaterialX repository directly, and it will load the CMake project for you.
68+
If you want to enable features like Python, go to `Settings -> Build, Execution and Deployment -> CMake` and configure
69+
the CMake Options, for example:
70+
71+
```
72+
-DMATERIALX_BUILD_PYTHON=ON
73+
-DMATERIALX_BUILD_VIEWER=ON
74+
-DMATERIALX_BUILD_GRAPH_EDITOR=ON
75+
```
76+
77+
To build, either select `Build -> Build Project` or select a specific configuration to build.
78+
To install, select `Build -> Install`
79+
5580
## Installing MaterialX
5681

5782
Building the `install` target of your project will install the MaterialX C++ and Python libraries to the folder specified by the `CMAKE_INSTALL_PREFIX` setting, and will install MaterialX Python as a third-party library in your Python environment. Installation of MaterialX Python as a third-party library can be disabled by setting `MATERIALX_INSTALL_PYTHON` to `OFF`.

libraries/README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,3 +75,4 @@ This folder contains the standard data libraries for MaterialX, providing declar
7575
- point, directional, spot
7676
- Shader generation does not currently support:
7777
- `displacementshader` and `volumeshader` nodes for hardware shading targets (GLSL, MSL).
78+
- `hextiledimage` and `hextilednormalmap` for OSL and MDL.

libraries/bxdf/translation/standard_surface_to_usd.mtlx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@
4949
<input name="in1" type="color3" interfacename="base_color" />
5050
<input name="in2" type="float" interfacename="base" />
5151
</multiply>
52-
<mix name="albedoOpaqueDielectric" type="color3">
52+
<mix name="baseSubsurfaceColor" type="color3">
5353
<input name="fg" type="color3" interfacename="subsurface_color" />
5454
<input name="bg" type="color3" nodename="scaledBaseColor" />
5555
<input name="mix" type="float" interfacename="subsurface" />
@@ -60,7 +60,7 @@
6060
<input name="mix" type="float" interfacename="coat" />
6161
</mix>
6262
<multiply name="diffuseColor" type="color3">
63-
<input name="in1" type="color3" nodename="albedoOpaqueDielectric" />
63+
<input name="in1" type="color3" nodename="baseSubsurfaceColor" />
6464
<input name="in2" type="color3" nodename="coatAttenuation" />
6565
</multiply>
6666
<dot name="roughness" type="float">
@@ -71,12 +71,12 @@
7171
</dot>
7272

7373
<!-- Clearcoat -->
74-
<multiply name="coatColor" type="color3">
74+
<multiply name="scaledCoatColor" type="color3">
7575
<input name="in1" type="color3" interfacename="coat_color" />
7676
<input name="in2" type="float" interfacename="coat" />
7777
</multiply>
7878
<convert name="coatColorVector" type="vector3">
79-
<input name="in" type="color3" nodename="coatColor" />
79+
<input name="in" type="color3" nodename="scaledCoatColor" />
8080
</convert>
8181
<dotproduct name="clearcoat" type="float">
8282
<input name="in1" type="vector3" nodename="coatColorVector" />

0 commit comments

Comments
 (0)