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

Project 3: Matt Schwartz #31

Open
wants to merge 39 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
39 commits
Select commit Hold shift + click to select a range
1f34e7e
Basic changes to shade diffuse surfaces
Sep 24, 2024
4f0a4ff
Uses stream compaction for early ray termination
Sep 24, 2024
508efb9
Basic reflectance shading
Sep 24, 2024
7577d3d
Implements stochastic antialiasing
Sep 24, 2024
37f011a
Sorts materials by IDs
Sep 25, 2024
ff5d7f1
Adds basic color/normal OIDN integration
Sep 26, 2024
d6619bb
Fixing small cmake error
Sep 26, 2024
0accb37
Improvements to denoising
Sep 27, 2024
ba98d94
Implements depth of field (+ small cmake typo fix)
Sep 27, 2024
aa247a0
Don't denoise in debug mode (only have release libs for OIDN)
Sep 27, 2024
955473b
Handles refractive materials
Sep 29, 2024
5944a36
Initial gltf loading (WIP - needs intersection testing)
Sep 30, 2024
792d5f3
Fixes to GLTF material loading
Sep 30, 2024
b785ad5
Implements intersection testing meshes
Oct 1, 2024
2aca664
Fixes bounding box calcs for mesh intersection
Oct 1, 2024
49c7f81
Implements initial texture loading (WIP)
Oct 3, 2024
6c25409
Fixes to texture mapping implementation
Oct 3, 2024
c402e51
Adds support for emissive textures
Oct 3, 2024
574accc
Emissive textures followup
Oct 3, 2024
558767f
Aligns util function with glm::eulerAngles behavior
Oct 3, 2024
18d0229
Correction to normals in mesh intersection
Oct 4, 2024
493e345
Implements BVH construction (not traversal, yet!)
Oct 4, 2024
b6fba33
Implements BVH traversal and minor fixes
Oct 5, 2024
8b36c8e
Improves BVH efficiency via use of shared memory
Oct 5, 2024
bf28ecd
Update denoising abledos with texture values
Oct 5, 2024
a901c8f
Update denoising with texture values (forgot file)
Oct 5, 2024
11974d7
Improvements to GLTF loading and material BRDFs
Oct 6, 2024
0cf9a7d
Scaling fix
Oct 6, 2024
a181e7e
Lambertian shading on direct light hits
Oct 6, 2024
e72afdf
Russian roulette termination, SDR tone mapping, gamma correction, and…
Oct 6, 2024
90f53e3
Adds environment mapping
Oct 6, 2024
7b67472
Environment mapping fix
Oct 7, 2024
5115d7f
Finishes normal mapping
Oct 7, 2024
d13a89e
README updates / skeleton
Oct 7, 2024
d7d14f3
Readme typo update
Oct 7, 2024
58a99af
Adding to README
Oct 8, 2024
8855c8d
Images, README, and small fixes
Oct 9, 2024
633c4eb
One more readme change
Oct 9, 2024
e2e82a7
Adds some test files
Oct 9, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
51 changes: 48 additions & 3 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,39 @@ set(GLM_ROOT_DIR "${CMAKE_SOURCE_DIR}/external")
find_package(GLM REQUIRED)
include_directories(${GLM_INCLUDE_DIRS})

# Include tinygltf header
include_directories("${CMAKE_SOURCE_DIR}/external/include")

# Include OIDN headers
include_directories("${CMAKE_SOURCE_DIR}/external/include/OpenImageDenoise")

# Define OIDN libraries
set(OIDN_LIBRARIES
"${CMAKE_SOURCE_DIR}/external/lib/OpenImageDenoise.lib"
"${CMAKE_SOURCE_DIR}/external/lib/OpenImageDenoise_core.lib"
"${CMAKE_SOURCE_DIR}/external/lib/OpenImageDenoise_device_cuda.lib"
"${CMAKE_SOURCE_DIR}/external/lib/OpenImageDenoise_device_cpu.lib"
"${CMAKE_SOURCE_DIR}/external/lib/OpenImageDenoise_utils.lib"
"${CMAKE_SOURCE_DIR}/external/lib/tbb12.lib"
)

# Define the destination directory
set(OIDN_DEST_DIR "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}")

# Add a custom command to copy the OIDN libraries
foreach(OIDN_LIB ${OIDN_LIBRARIES})
get_filename_component(OIDN_LIB_NAME ${OIDN_LIB} NAME)
add_custom_command(
OUTPUT "${OIDN_DEST_DIR}/${OIDN_LIB_NAME}"
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${OIDN_LIB} ${OIDN_DEST_DIR}
DEPENDS ${OIDN_LIB}
)
list(APPEND OIDN_COPY_TARGETS "${OIDN_DEST_DIR}/${OIDN_LIB_NAME}")
endforeach()

# Add a custom target to execute the copy command
add_custom_target(copy_oidn_libs ALL DEPENDS ${OIDN_COPY_TARGETS})

set(headers
src/main.h
src/image.h
Expand All @@ -66,6 +99,7 @@ set(headers
set(sources
src/main.cpp
src/stb.cpp
src/tinygltf.cpp
src/image.cpp
src/glslUtility.cpp
src/pathtrace.cu
Expand Down Expand Up @@ -120,11 +154,22 @@ elseif(CMAKE_VERSION VERSION_LESS "3.24.0")
else()
set_target_properties(${CMAKE_PROJECT_NAME} PROPERTIES CUDA_ARCHITECTURES native)
endif()

# Link OIDN libraries only in Release mode
target_link_libraries(${CMAKE_PROJECT_NAME}
${LIBRARIES}
cudadevrt
$<$<CONFIG:Release>:${OIDN_LIBRARIES}>
#stream_compaction # TODO: uncomment if using your stream compaction
)
)

# Add dependencies for copying OIDN libraries only in Release mode
add_custom_command(TARGET ${CMAKE_PROJECT_NAME} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E echo "Copying OIDN libraries..."
COMMAND ${CMAKE_COMMAND} -E copy_if_different $<$<CONFIG:Release>:${OIDN_LIBRARIES}> ${OIDN_DEST_DIR}
COMMENT "Copying OIDN libraries in Release mode"
)

target_compile_options(${CMAKE_PROJECT_NAME} PRIVATE "$<$<AND:$<CONFIG:Debug,RelWithDebInfo>,$<COMPILE_LANGUAGE:CUDA>>:-G;-src-in-ptx>")
target_compile_options(${CMAKE_PROJECT_NAME} PRIVATE "$<$<AND:$<CONFIG:Release>,$<COMPILE_LANGUAGE:CUDA>>:-lineinfo;-src-in-ptx>")
set_property(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY VS_STARTUP_PROJECT ${CMAKE_PROJECT_NAME})
target_compile_options(${CMAKE_PROJECT_NAME} PRIVATE "$<$<AND:$<CONFIG:Release>,$<COMPILE_LANGUAGE:CUDA>>:-lineinfo;-src-in-ptx>;--extended-lambda")
set_property(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY VS_STARTUP_PROJECT ${CMAKE_PROJECT_NAME})
204 changes: 199 additions & 5 deletions README.md

Large diffs are not rendered by default.

81 changes: 81 additions & 0 deletions external/include/OpenImageDenoise/config.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
// Copyright 2018 Intel Corporation
// SPDX-License-Identifier: Apache-2.0

#pragma once

#define OIDN_VERSION_MAJOR 2
#define OIDN_VERSION_MINOR 3
#define OIDN_VERSION_PATCH 0
#define OIDN_VERSION 20300
#define OIDN_VERSION_STRING "2.3.0"

/* #undef OIDN_API_NAMESPACE */
#define OIDN_STATIC_LIB

#if defined(OIDN_API_NAMESPACE)
#define OIDN_API_NAMESPACE_BEGIN namespace {
#define OIDN_API_NAMESPACE_END }
#define OIDN_API_NAMESPACE_USING using namespace ;
#define OIDN_API_EXTERN_C
#define OIDN_NAMESPACE ::oidn
#define OIDN_NAMESPACE_C _oidn
#define OIDN_NAMESPACE_BEGIN namespace { namespace oidn {
#define OIDN_NAMESPACE_END }}
#else
#define OIDN_API_NAMESPACE_BEGIN
#define OIDN_API_NAMESPACE_END
#define OIDN_API_NAMESPACE_USING
#if defined(__cplusplus)
#define OIDN_API_EXTERN_C extern "C"
#else
#define OIDN_API_EXTERN_C
#endif
#define OIDN_NAMESPACE oidn
#define OIDN_NAMESPACE_C oidn
#define OIDN_NAMESPACE_BEGIN namespace oidn {
#define OIDN_NAMESPACE_END }
#endif

#define OIDN_NAMESPACE_USING using namespace OIDN_NAMESPACE;

#if defined(OIDN_STATIC_LIB)
#define OIDN_API_IMPORT OIDN_API_EXTERN_C
#define OIDN_API_EXPORT OIDN_API_EXTERN_C
#elif defined(_WIN32)
#define OIDN_API_IMPORT OIDN_API_EXTERN_C __declspec(dllimport)
#define OIDN_API_EXPORT OIDN_API_EXTERN_C __declspec(dllexport)
#else
#define OIDN_API_IMPORT OIDN_API_EXTERN_C
#define OIDN_API_EXPORT OIDN_API_EXTERN_C __attribute__((visibility ("default")))
#endif

#if defined(OpenImageDenoise_EXPORTS)
#define OIDN_API OIDN_API_EXPORT
#else
#define OIDN_API OIDN_API_IMPORT
#endif

#if defined(_WIN32)
#define OIDN_DEPRECATED(msg) __declspec(deprecated(msg))
#else
#define OIDN_DEPRECATED(msg) __attribute__((deprecated(msg)))
#endif

#if !defined(OIDN_DEVICE_CPU)
#define OIDN_DEVICE_CPU
#endif
#if !defined(OIDN_DEVICE_SYCL)
/* #undef OIDN_DEVICE_SYCL */
#endif
#if !defined(OIDN_DEVICE_CUDA)
#define OIDN_DEVICE_CUDA
#endif
#if !defined(OIDN_DEVICE_HIP)
/* #undef OIDN_DEVICE_HIP */
#endif
#if !defined(OIDN_DEVICE_METAL)
/* #undef OIDN_DEVICE_METAL */
#endif

#define OIDN_FILTER_RT
#define OIDN_FILTER_RTLIGHTMAP
81 changes: 81 additions & 0 deletions external/include/OpenImageDenoise/config.h.in
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
// Copyright 2018 Intel Corporation
// SPDX-License-Identifier: Apache-2.0

#pragma once

#define OIDN_VERSION_MAJOR @OIDN_VERSION_MAJOR@
#define OIDN_VERSION_MINOR @OIDN_VERSION_MINOR@
#define OIDN_VERSION_PATCH @OIDN_VERSION_PATCH@
#define OIDN_VERSION @OIDN_VERSION_NUMBER@
#define OIDN_VERSION_STRING "@OIDN_VERSION_MAJOR@.@OIDN_VERSION_MINOR@.@OIDN_VERSION_PATCH@@OIDN_VERSION_NOTE@"

#cmakedefine OIDN_API_NAMESPACE @OIDN_API_NAMESPACE@
#cmakedefine OIDN_STATIC_LIB

#if defined(OIDN_API_NAMESPACE)
#define OIDN_API_NAMESPACE_BEGIN namespace @OIDN_API_NAMESPACE@ {
#define OIDN_API_NAMESPACE_END }
#define OIDN_API_NAMESPACE_USING using namespace @OIDN_API_NAMESPACE@;
#define OIDN_API_EXTERN_C
#define OIDN_NAMESPACE @OIDN_API_NAMESPACE@::oidn
#define OIDN_NAMESPACE_C @OIDN_API_NAMESPACE@_oidn
#define OIDN_NAMESPACE_BEGIN namespace @OIDN_API_NAMESPACE@ { namespace oidn {
#define OIDN_NAMESPACE_END }}
#else
#define OIDN_API_NAMESPACE_BEGIN
#define OIDN_API_NAMESPACE_END
#define OIDN_API_NAMESPACE_USING
#if defined(__cplusplus)
#define OIDN_API_EXTERN_C extern "C"
#else
#define OIDN_API_EXTERN_C
#endif
#define OIDN_NAMESPACE oidn
#define OIDN_NAMESPACE_C oidn
#define OIDN_NAMESPACE_BEGIN namespace oidn {
#define OIDN_NAMESPACE_END }
#endif

#define OIDN_NAMESPACE_USING using namespace OIDN_NAMESPACE;

#if defined(OIDN_STATIC_LIB)
#define OIDN_API_IMPORT OIDN_API_EXTERN_C
#define OIDN_API_EXPORT OIDN_API_EXTERN_C
#elif defined(_WIN32)
#define OIDN_API_IMPORT OIDN_API_EXTERN_C __declspec(dllimport)
#define OIDN_API_EXPORT OIDN_API_EXTERN_C __declspec(dllexport)
#else
#define OIDN_API_IMPORT OIDN_API_EXTERN_C
#define OIDN_API_EXPORT OIDN_API_EXTERN_C __attribute__((visibility ("default")))
#endif

#if defined(OpenImageDenoise_EXPORTS)
#define OIDN_API OIDN_API_EXPORT
#else
#define OIDN_API OIDN_API_IMPORT
#endif

#if defined(_WIN32)
#define OIDN_DEPRECATED(msg) __declspec(deprecated(msg))
#else
#define OIDN_DEPRECATED(msg) __attribute__((deprecated(msg)))
#endif

#if !defined(OIDN_DEVICE_CPU)
#cmakedefine OIDN_DEVICE_CPU
#endif
#if !defined(OIDN_DEVICE_SYCL)
#cmakedefine OIDN_DEVICE_SYCL
#endif
#if !defined(OIDN_DEVICE_CUDA)
#cmakedefine OIDN_DEVICE_CUDA
#endif
#if !defined(OIDN_DEVICE_HIP)
#cmakedefine OIDN_DEVICE_HIP
#endif
#if !defined(OIDN_DEVICE_METAL)
#cmakedefine OIDN_DEVICE_METAL
#endif

#cmakedefine OIDN_FILTER_RT
#cmakedefine OIDN_FILTER_RTLIGHTMAP
Loading