6995b0429c
Various fixes to UV2 unwrapping and the GPU lightmapper. Listed here for context in case of git blame/bisect: * Fix UV2 unwrapping on import, also cleaned up the unwrap cache code. * Fix saving of RGBA images in EXR format. * Fixes to the GPU lightmapper: - Added padding between atlas elements, avoids bleeding. - Remove old SDF generation code. - Fix baked attenuation for Omni/Spot lights. - Fix baking of material properties onto UV2 (wireframe was wrongly used before). - Disable statically baked lights for objects that have a lightmap texture to avoid applying the same light twice. - Fix lightmap pairing in RendererSceneCull. - Fix UV2 array generated from `RenderingServer::mesh_surface_get_arrays()`. - Port autoexposure fix for OIDN from 3.x. - Save debug textures as EXR when using floating point format.
337 lines
9.3 KiB
Diff
337 lines
9.3 KiB
Diff
diff --git a/common/platform.h b/common/platform.h
|
|
index be14bc7..9373b61 100644
|
|
--- a/common/platform.h
|
|
+++ b/common/platform.h
|
|
@@ -19,7 +19,7 @@
|
|
#if defined(_WIN32)
|
|
#define WIN32_LEAN_AND_MEAN
|
|
#define NOMINMAX
|
|
- #include <Windows.h>
|
|
+ #include <windows.h>
|
|
#elif defined(__APPLE__)
|
|
#include <sys/sysctl.h>
|
|
#endif
|
|
@@ -129,4 +129,3 @@ namespace oidn {
|
|
std::string getBuildName();
|
|
|
|
} // namespace oidn
|
|
-
|
|
diff --git a/core/autoencoder.cpp b/core/autoencoder.cpp
|
|
index d6915e6..d8da684 100644
|
|
--- a/core/autoencoder.cpp
|
|
+++ b/core/autoencoder.cpp
|
|
@@ -90,13 +90,19 @@ namespace oidn {
|
|
if (!dirty)
|
|
return;
|
|
|
|
- device->executeTask([&]()
|
|
- {
|
|
+ // -- GODOT start --
|
|
+ //device->executeTask([&]()
|
|
+ //{
|
|
+ // GODOT end --
|
|
+
|
|
if (mayiuse(avx512_common))
|
|
net = buildNet<16>();
|
|
else
|
|
net = buildNet<8>();
|
|
- });
|
|
+
|
|
+ // GODOT start --
|
|
+ //});
|
|
+ // GODOT end --
|
|
|
|
dirty = false;
|
|
}
|
|
@@ -108,9 +114,10 @@ namespace oidn {
|
|
|
|
if (!net)
|
|
return;
|
|
-
|
|
- device->executeTask([&]()
|
|
- {
|
|
+ // -- GODOT start --
|
|
+ //device->executeTask([&]()
|
|
+ //{
|
|
+ // -- GODOT end --
|
|
Progress progress;
|
|
progress.func = progressFunc;
|
|
progress.userPtr = progressUserPtr;
|
|
@@ -156,7 +163,9 @@ namespace oidn {
|
|
tileIndex++;
|
|
}
|
|
}
|
|
- });
|
|
+ // -- GODOT start --
|
|
+ //});
|
|
+ // -- GODOT end --
|
|
}
|
|
|
|
void AutoencoderFilter::computeTileSize()
|
|
@@ -464,6 +473,11 @@ namespace oidn {
|
|
return std::make_shared<GammaTransferFunction>();
|
|
}
|
|
|
|
+// -- GODOT start --
|
|
+// Godot doesn't need Raytracing filters. Removing them saves space in the weights files.
|
|
+#if 0
|
|
+// -- GODOT end --
|
|
+
|
|
// --------------------------------------------------------------------------
|
|
// RTFilter
|
|
// --------------------------------------------------------------------------
|
|
@@ -491,6 +505,9 @@ namespace oidn {
|
|
weightData.hdr_alb = weights::rt_hdr_alb;
|
|
weightData.hdr_alb_nrm = weights::rt_hdr_alb_nrm;
|
|
}
|
|
+// -- GODOT start --
|
|
+#endif
|
|
+// -- GODOT end --
|
|
|
|
// --------------------------------------------------------------------------
|
|
// RTLightmapFilter
|
|
diff --git a/core/autoencoder.h b/core/autoencoder.h
|
|
index c199052..98b6108 100644
|
|
--- a/core/autoencoder.h
|
|
+++ b/core/autoencoder.h
|
|
@@ -93,11 +93,18 @@ namespace oidn {
|
|
// RTFilter - Generic ray tracing denoiser
|
|
// --------------------------------------------------------------------------
|
|
|
|
+// -- GODOT start --
|
|
+// Godot doesn't need Raytracing filters. Removing them saves space in the weights files.
|
|
+#if 0
|
|
+// -- GODOT end --
|
|
class RTFilter : public AutoencoderFilter
|
|
{
|
|
public:
|
|
explicit RTFilter(const Ref<Device>& device);
|
|
};
|
|
+// -- GODOT start --
|
|
+#endif
|
|
+// -- GODOT end --
|
|
|
|
// --------------------------------------------------------------------------
|
|
// RTLightmapFilter - Ray traced lightmap denoiser
|
|
diff --git a/core/common.h b/core/common.h
|
|
index a3a7e8a..a35dd90 100644
|
|
--- a/core/common.h
|
|
+++ b/core/common.h
|
|
@@ -27,7 +27,9 @@
|
|
#include "common/ref.h"
|
|
#include "common/exception.h"
|
|
#include "common/thread.h"
|
|
-#include "common/tasking.h"
|
|
+// -- GODOT start --
|
|
+//#include "common/tasking.h"
|
|
+// -- GODOT end --
|
|
#include "math.h"
|
|
|
|
namespace oidn {
|
|
diff --git a/core/device.cpp b/core/device.cpp
|
|
index c455695..3cd658b 100644
|
|
--- a/core/device.cpp
|
|
+++ b/core/device.cpp
|
|
@@ -29,7 +29,9 @@ namespace oidn {
|
|
|
|
Device::~Device()
|
|
{
|
|
- observer.reset();
|
|
+ // -- GODOT start --
|
|
+ //observer.reset();
|
|
+ // -- GODOT end --
|
|
}
|
|
|
|
void Device::setError(Device* device, Error code, const std::string& message)
|
|
@@ -141,6 +143,9 @@ namespace oidn {
|
|
if (isCommitted())
|
|
throw Exception(Error::InvalidOperation, "device can be committed only once");
|
|
|
|
+ // -- GODOT start --
|
|
+ #if 0
|
|
+ // -- GODOT end --
|
|
// Get the optimal thread affinities
|
|
if (setAffinity)
|
|
{
|
|
@@ -157,7 +162,10 @@ namespace oidn {
|
|
// Automatically set the thread affinities
|
|
if (affinity)
|
|
observer = std::make_shared<PinningObserver>(affinity, *arena);
|
|
-
|
|
+ // -- GODOT start --
|
|
+ #endif
|
|
+ numThreads = 1;
|
|
+ // -- GODOT end --
|
|
dirty = false;
|
|
|
|
if (isVerbose())
|
|
@@ -191,9 +199,17 @@ namespace oidn {
|
|
|
|
Ref<Filter> filter;
|
|
|
|
+// -- GODOT start --
|
|
+// Godot doesn't need Raytracing filters. Removing them saves space in the weights files.
|
|
+#if 0
|
|
+// -- GODOT end --
|
|
if (type == "RT")
|
|
filter = makeRef<RTFilter>(Ref<Device>(this));
|
|
- else if (type == "RTLightmap")
|
|
+// -- GODOT start --
|
|
+// Godot doesn't need Raytracing filters. Removing them saves space in the weights files.
|
|
+#endif
|
|
+ if (type == "RTLightmap")
|
|
+// -- GODOT end --
|
|
filter = makeRef<RTLightmapFilter>(Ref<Device>(this));
|
|
else
|
|
throw Exception(Error::InvalidArgument, "unknown filter type");
|
|
@@ -210,11 +226,12 @@ namespace oidn {
|
|
std::cout << " Build : " << getBuildName() << std::endl;
|
|
std::cout << " Platform: " << getPlatformName() << std::endl;
|
|
|
|
- std::cout << " Tasking :";
|
|
- std::cout << " TBB" << TBB_VERSION_MAJOR << "." << TBB_VERSION_MINOR;
|
|
- std::cout << " TBB_header_interface_" << TBB_INTERFACE_VERSION << " TBB_lib_interface_" << tbb::TBB_runtime_interface_version();
|
|
- std::cout << std::endl;
|
|
-
|
|
+// -- GODOT start --
|
|
+// std::cout << " Tasking :";
|
|
+// std::cout << " TBB" << TBB_VERSION_MAJOR << "." << TBB_VERSION_MINOR;
|
|
+// std::cout << " TBB_header_interface_" << TBB_INTERFACE_VERSION << " TBB_lib_interface_" << tbb::TBB_runtime_interface_version();
|
|
+// std::cout << std::endl;
|
|
+// -- GODOT end --
|
|
std::cout << std::endl;
|
|
}
|
|
|
|
diff --git a/core/device.h b/core/device.h
|
|
index c2df714..d9cfd85 100644
|
|
--- a/core/device.h
|
|
+++ b/core/device.h
|
|
@@ -41,10 +41,12 @@ namespace oidn {
|
|
ErrorFunction errorFunc = nullptr;
|
|
void* errorUserPtr = nullptr;
|
|
|
|
- // Tasking
|
|
- std::shared_ptr<tbb::task_arena> arena;
|
|
- std::shared_ptr<PinningObserver> observer;
|
|
- std::shared_ptr<ThreadAffinity> affinity;
|
|
+// -- GODOT start --
|
|
+// // Tasking
|
|
+// std::shared_ptr<tbb::task_arena> arena;
|
|
+// std::shared_ptr<PinningObserver> observer;
|
|
+// std::shared_ptr<ThreadAffinity> affinity;
|
|
+// -- GODOT end --
|
|
|
|
// Parameters
|
|
int numThreads = 0; // autodetect by default
|
|
@@ -66,17 +68,19 @@ namespace oidn {
|
|
|
|
void commit();
|
|
|
|
- template<typename F>
|
|
- void executeTask(F& f)
|
|
- {
|
|
- arena->execute(f);
|
|
- }
|
|
+// -- GODOT start --
|
|
+// template<typename F>
|
|
+// void executeTask(F& f)
|
|
+// {
|
|
+// arena->execute(f);
|
|
+// }
|
|
|
|
- template<typename F>
|
|
- void executeTask(const F& f)
|
|
- {
|
|
- arena->execute(f);
|
|
- }
|
|
+// template<typename F>
|
|
+// void executeTask(const F& f)
|
|
+// {
|
|
+// arena->execute(f);
|
|
+// }
|
|
+// -- GODOT end --
|
|
|
|
Ref<Buffer> newBuffer(size_t byteSize);
|
|
Ref<Buffer> newBuffer(void* ptr, size_t byteSize);
|
|
@@ -86,7 +90,10 @@ namespace oidn {
|
|
__forceinline std::mutex& getMutex() { return mutex; }
|
|
|
|
private:
|
|
- bool isCommitted() const { return bool(arena); }
|
|
+// -- GODOT start --
|
|
+ //bool isCommitted() const { return bool(arena); }
|
|
+ bool isCommitted() const { return false; }
|
|
+// -- GODOT end --
|
|
void checkCommitted();
|
|
|
|
void print();
|
|
diff --git a/core/network.cpp b/core/network.cpp
|
|
index 8c2de09..ed8328c 100644
|
|
--- a/core/network.cpp
|
|
+++ b/core/network.cpp
|
|
@@ -17,6 +17,9 @@
|
|
#include "upsample.h"
|
|
#include "weights_reorder.h"
|
|
#include "network.h"
|
|
+// -- GODOT start --
|
|
+#include <cstring>
|
|
+// -- GODOT end --
|
|
|
|
namespace oidn {
|
|
|
|
diff --git a/core/transfer_function.cpp b/core/transfer_function.cpp
|
|
index 601f814..ce5deca 100644
|
|
--- a/core/transfer_function.cpp
|
|
+++ b/core/transfer_function.cpp
|
|
@@ -38,16 +38,24 @@ namespace oidn {
|
|
// Compute the average log luminance of the downsampled image
|
|
using Sum = std::pair<float, int>;
|
|
|
|
- Sum sum =
|
|
- tbb::parallel_reduce(
|
|
- tbb::blocked_range2d<int>(0, HK, 0, WK),
|
|
- Sum(0.f, 0),
|
|
- [&](const tbb::blocked_range2d<int>& r, Sum sum) -> Sum
|
|
+ // -- GODOT start --
|
|
+ // Sum sum =
|
|
+ // tbb::parallel_reduce(
|
|
+ // tbb::blocked_range2d<int>(0, HK, 0, WK),
|
|
+ // Sum(0.f, 0),
|
|
+ // [&](const tbb::blocked_range2d<int>& r, Sum sum) -> Sum
|
|
+ // {
|
|
+ // // Iterate over blocks
|
|
+ // for (int i = r.rows().begin(); i != r.rows().end(); ++i)
|
|
+ // {
|
|
+ // for (int j = r.cols().begin(); j != r.cols().end(); ++j)
|
|
+ // {
|
|
+
|
|
+ Sum sum = Sum(0.0f, 0);
|
|
+
|
|
+ for (int i = 0; i != HK; ++i)
|
|
{
|
|
- // Iterate over blocks
|
|
- for (int i = r.rows().begin(); i != r.rows().end(); ++i)
|
|
- {
|
|
- for (int j = r.cols().begin(); j != r.cols().end(); ++j)
|
|
+ for (int j = 0; j != WK; ++j)
|
|
{
|
|
// Compute the average luminance in the current block
|
|
const int beginH = int(ptrdiff_t(i) * H / HK);
|
|
@@ -82,11 +90,12 @@ namespace oidn {
|
|
}
|
|
}
|
|
|
|
- return sum;
|
|
- },
|
|
- [](Sum a, Sum b) -> Sum { return Sum(a.first+b.first, a.second+b.second); },
|
|
- tbb::static_partitioner()
|
|
- );
|
|
+ // return sum;
|
|
+ // },
|
|
+ // [](Sum a, Sum b) -> Sum { return Sum(a.first+b.first, a.second+b.second); },
|
|
+ // tbb::static_partitioner()
|
|
+ // );
|
|
+ // -- GODOT end --
|
|
|
|
return (sum.second > 0) ? (key / exp2(sum.first / float(sum.second))) : 1.f;
|
|
}
|