diff --git a/cmake/macros/TargetOpenEXR.cmake b/cmake/macros/TargetOpenEXR.cmake
index 03c6fed33d..e085f33224 100644
--- a/cmake/macros/TargetOpenEXR.cmake
+++ b/cmake/macros/TargetOpenEXR.cmake
@@ -11,8 +11,8 @@ if (NOT ANDROID)
    	# using VCPKG for OPENEXR
     find_package(OpenEXR REQUIRED)
 
-    include_directories(SYSTEM "${OpenEXR_INCLUDE_DIRS}")
-    target_link_libraries(${TARGET_NAME} ${OpenEXR_LIBRARIES})
+    include_directories(SYSTEM "${OPENEXR_INCLUDE_DIRS}")
+    target_link_libraries(${TARGET_NAME} ${OPENEXR_LIBRARIES})
     target_compile_definitions(${TARGET_NAME} PUBLIC OPENEXR_DLL)
 endif()
 
diff --git a/cmake/modules/FindOpenEXR.cmake b/cmake/modules/FindOpenEXR.cmake
index a381c6db9a..ba3c335a84 100644
--- a/cmake/modules/FindOpenEXR.cmake
+++ b/cmake/modules/FindOpenEXR.cmake
@@ -1,87 +1,144 @@
+
+# adapted from FindOpenEXR.cmake in Pixar's USD distro.
+# 
+# The original license is as follows:
+#
+# Copyright 2016 Pixar
+#
+# Licensed under the Apache License, Version 2.0 (the "Apache License")
+# with the following modification; you may not use this file except in
+# compliance with the Apache License and the following modification to it:
+# Section 6. Trademarks. is deleted and replaced with:
+#
+# 6. Trademarks. This License does not grant permission to use the trade
+#    names, trademarks, service marks, or product names of the Licensor
+#    and its affiliates, except as required to comply with Section 4(c) of
+#    the License and to reproduce the content of the NOTICE file.
+#
+# You may obtain a copy of the Apache License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the Apache License with the above modification is
+# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the Apache License for the specific
+# language governing permissions and limitations under the Apache License.
+#
+
+find_path(OPENEXR_INCLUDE_DIR
+    OpenEXR/ImfHeader.h
+
+DOC
+    "OpenEXR headers path"
+)
+
+if(OPENEXR_INCLUDE_DIR)
+  set(openexr_config_file "${OPENEXR_INCLUDE_DIR}/OpenEXR/OpenEXRConfig.h")
+  if(EXISTS ${openexr_config_file})
+      file(STRINGS
+           ${openexr_config_file}
+           TMP
+           REGEX "#define OPENEXR_VERSION_STRING.*$")
+      string(REGEX MATCHALL "[0-9.]+" OPENEXR_VERSION ${TMP})
+
+      file(STRINGS
+           ${openexr_config_file}
+           TMP
+           REGEX "#define OPENEXR_VERSION_MAJOR.*$")
+      string(REGEX MATCHALL "[0-9]" OPENEXR_MAJOR_VERSION ${TMP})
+
+      file(STRINGS
+           ${openexr_config_file}
+           TMP
+           REGEX "#define OPENEXR_VERSION_MINOR.*$")
+      string(REGEX MATCHALL "[0-9]" OPENEXR_MINOR_VERSION ${TMP})
+  endif()
+else()
+    message(WARNING, " OpenEXR headers not found")
+endif()
+
+set( ORIGINAL_CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES})
+if (APPLE)
+    set(CMAKE_FIND_LIBRARY_SUFFIXES ".dylib")
+elseif (UNIX)
+    set(CMAKE_FIND_LIBRARY_SUFFIXES ".so")
+endif()
+
+foreach(OPENEXR_LIB
+    IlmImf
+    IlmImfUtil
+    Half
+    Iex
+    IexMath
+    Imath
+    IlmThread)
+
+    # OpenEXR libraries may be suffixed with the version number, so we search
+    # using both versioned and unversioned names.
+    find_library(OPENEXR_${OPENEXR_LIB}_LIBRARY
+        NAMES
+            ${OPENEXR_LIB}-${OPENEXR_MAJOR_VERSION}_${OPENEXR_MINOR_VERSION}
+            ${OPENEXR_LIB}
+
+        DOC
+            "OPENEXR's ${OPENEXR_LIB} library path"
+    )
+    #mark_as_advanced(OPENEXR_${OPENEXR_LIB}_LIBRARY)
+
+    if(OPENEXR_${OPENEXR_LIB}_LIBRARY)
+        list(APPEND OPENEXR_LIBRARIES ${OPENEXR_${OPENEXR_LIB}_LIBRARY})
+    endif()
+
+    # OpenEXR libraries may be suffixed with the version number, so we search
+    # using both versioned and unversioned names.
+    find_library(OPENEXR_${OPENEXR_LIB}_DEBUG_LIBRARY
+        NAMES
+            ${OPENEXR_LIB}-${OPENEXR_MAJOR_VERSION}_${OPENEXR_MINOR_VERSION}_d
+            ${OPENEXR_LIB}_d
+
+        DOC
+            "OPENEXR's ${OPENEXR_LIB} debug library path"
+    )
+    #mark_as_advanced(OPENEXR_${OPENEXR_LIB}_DEBUG_LIBRARY)
+
+    # OpenEXR libraries may be suffixed with the version number, so we search
+    # using both versioned and unversioned names.
+    find_library(OPENEXR_${OPENEXR_LIB}_STATIC_LIBRARY
+        NAMES
+            ${OPENEXR_LIB}-${OPENEXR_MAJOR_VERSION}_${OPENEXR_MINOR_VERSION}_s
+            ${OPENEXR_LIB}_s
+
+        DOC
+            "OPENEXR's ${OPENEXR_LIB} static library path"
+    )
+    #mark_as_advanced(OPENEXR_${OPENEXR_LIB}_STATIC_LIBRARY)
+
+    # OpenEXR libraries may be suffixed with the version number, so we search
+    # using both versioned and unversioned names.
+    find_library(OPENEXR_${OPENEXR_LIB}_STATIC_DEBUG_LIBRARY
+        NAMES
+            ${OPENEXR_LIB}-${OPENEXR_MAJOR_VERSION}_${OPENEXR_MINOR_VERSION}_s_d
+            ${OPENEXR_LIB}_s_d
+
+        DOC
+            "OPENEXR's ${OPENEXR_LIB} static debug library path"
+    )
+    #mark_as_advanced(OPENEXR_${OPENEXR_LIB}_STATIC_DEBUG_LIBRARY)
+
+endforeach(OPENEXR_LIB)
+# MUST reset
+set(CMAKE_FIND_LIBRARY_SUFFIXES ${ORIGINAL_CMAKE_FIND_LIBRARY_SUFFIXES})
+
+# So #include <half.h> works
+list(APPEND OPENEXR_INCLUDE_DIRS ${OPENEXR_INCLUDE_DIR})
+list(APPEND OPENEXR_INCLUDE_DIRS ${OPENEXR_INCLUDE_DIR}/OpenEXR)
+
 include(FindPackageHandleStandardArgs)
-
-find_path(OpenEXR_INCLUDE_DIRS OpenEXR/OpenEXRConfig.h)
-find_path(OPENEXR_INCLUDE_PATHS NAMES ImfRgbaFile.h PATH_SUFFIXES OpenEXR)
-
-file(STRINGS "${OpenEXR_INCLUDE_DIRS}/OpenEXR/OpenEXRConfig.h" OPENEXR_CONFIG_H)
-
-string(REGEX REPLACE "^.*define OPENEXR_VERSION_MAJOR ([0-9]+).*$" "\\1" OpenEXR_VERSION_MAJOR "${OPENEXR_CONFIG_H}")
-string(REGEX REPLACE "^.*define OPENEXR_VERSION_MINOR ([0-9]+).*$" "\\1" OpenEXR_VERSION_MINOR "${OPENEXR_CONFIG_H}")
-set(OpenEXR_LIB_SUFFIX "${OpenEXR_VERSION_MAJOR}_${OpenEXR_VERSION_MINOR}")
-
-include(SelectLibraryConfigurations)
-
-if(NOT OpenEXR_BASE_LIBRARY)
-  find_library(OpenEXR_BASE_LIBRARY_RELEASE NAMES IlmImf-${OpenEXR_LIB_SUFFIX})
-  find_library(OpenEXR_BASE_LIBRARY_DEBUG NAMES IlmImf-${OpenEXR_LIB_SUFFIX}_d)
-  select_library_configurations(OpenEXR_BASE)
-endif()
-
-if(NOT OpenEXR_UTIL_LIBRARY)
-  find_library(OpenEXR_UTIL_LIBRARY_RELEASE NAMES IlmImfUtil-${OpenEXR_LIB_SUFFIX})
-  find_library(OpenEXR_UTIL_LIBRARY_DEBUG NAMES IlmImfUtil-${OpenEXR_LIB_SUFFIX}_d)
-  select_library_configurations(OpenEXR_UTIL)
-endif()
-
-if(NOT OpenEXR_HALF_LIBRARY)
-  find_library(OpenEXR_HALF_LIBRARY_RELEASE NAMES Half-${OpenEXR_LIB_SUFFIX})
-  find_library(OpenEXR_HALF_LIBRARY_DEBUG NAMES Half-${OpenEXR_LIB_SUFFIX}_d)
-  select_library_configurations(OpenEXR_HALF)
-endif()
-
-if(NOT OpenEXR_IEX_LIBRARY)
-  find_library(OpenEXR_IEX_LIBRARY_RELEASE NAMES Iex-${OpenEXR_LIB_SUFFIX})
-  find_library(OpenEXR_IEX_LIBRARY_DEBUG NAMES Iex-${OpenEXR_LIB_SUFFIX}_d)
-  select_library_configurations(OpenEXR_IEX)
-endif()
-
-if(NOT OpenEXR_MATH_LIBRARY)
-  find_library(OpenEXR_MATH_LIBRARY_RELEASE NAMES Imath-${OpenEXR_LIB_SUFFIX})
-  find_library(OpenEXR_MATH_LIBRARY_DEBUG NAMES Imath-${OpenEXR_LIB_SUFFIX}_d)
-  select_library_configurations(OpenEXR_MATH)
-endif()
-
-if(NOT OpenEXR_THREAD_LIBRARY)
-  find_library(OpenEXR_THREAD_LIBRARY_RELEASE NAMES IlmThread-${OpenEXR_LIB_SUFFIX})
-  find_library(OpenEXR_THREAD_LIBRARY_DEBUG NAMES IlmThread-${OpenEXR_LIB_SUFFIX}_d)
-  select_library_configurations(OpenEXR_THREAD)
-endif()
-
-if(NOT OpenEXR_IEXMATH_LIBRARY)
-  find_library(OpenEXR_IEXMATH_LIBRARY_RELEASE NAMES IexMath-${OpenEXR_LIB_SUFFIX})
-  find_library(OpenEXR_IEXMATH_LIBRARY_DEBUG NAMES IexMath-${OpenEXR_LIB_SUFFIX}d)
-  select_library_configurations(OpenEXR_IEXMATH)
-endif()
-
-set(OPENEXR_HALF_LIBRARY "${OpenEXR_HALF_LIBRARY}")
-set(OPENEXR_IEX_LIBRARY "${OpenEXR_IEX_LIBRARY}")
-set(OPENEXR_IMATH_LIBRARY "${OpenEXR_MATH_LIBRARY}")
-set(OPENEXR_ILMIMF_LIBRARY "${OpenEXR_BASE_LIBRARY}")
-set(OPENEXR_ILMIMFUTIL_LIBRARY "${OpenEXR_UTIL_LIBRARY}")
-set(OPENEXR_ILMTHREAD_LIBRARY "${OpenEXR_THREAD_LIBRARY}")
-
-set(OpenEXR_LIBRARY "${OpenEXR_BASE_LIBRARY}")
-
-set(OpenEXR_LIBRARIES
-    ${OpenEXR_LIBRARY}
-    ${OpenEXR_MATH_LIBRARY}
-    ${OpenEXR_IEXMATH_LIBRARY}
-    ${OpenEXR_UTIL_LIBRARY}
-    ${OpenEXR_HALF_LIBRARY}
-    ${OpenEXR_IEX_LIBRARY}
-    ${OpenEXR_THREAD_LIBRARY}
+find_package_handle_standard_args(OpenEXR
+    REQUIRED_VARS
+        OPENEXR_INCLUDE_DIRS
+        OPENEXR_LIBRARIES
+    VERSION_VAR
+        OPENEXR_VERSION
 )
-
-set(OPENEXR_LIBRARIES
-    ${OPENEXR_HALF_LIBRARY}
-    ${OPENEXR_IEX_LIBRARY}
-    ${OPENEXR_IMATH_LIBRARY}
-    ${OPENEXR_ILMIMF_LIBRARY}
-    ${OPENEXR_ILMTHREAD_LIBRARY}
-)
-
-FIND_PACKAGE_HANDLE_STANDARD_ARGS(OpenEXR REQUIRED_VARS OpenEXR_LIBRARIES OpenEXR_INCLUDE_DIRS)
-
-if(OpenEXR_FOUND)
-    set(OPENEXR_FOUND 1)
-endif()