diff options
author | Dario <dariosamo@gmail.com> | 2023-09-18 10:05:20 -0300 |
---|---|---|
committer | Dario <dariosamo@gmail.com> | 2023-09-25 14:53:45 -0300 |
commit | ab65effed015df76b0858df27127f62b3aa94e0e (patch) | |
tree | cab7bbbdd2b63235b809560e47c3ac3784fa892b /thirdparty/oidn/core/transfer_function.h | |
parent | 1b2b726502eabaae4a15d544d92735cc2efe35b5 (diff) | |
download | redot-engine-ab65effed015df76b0858df27127f62b3aa94e0e.tar.gz |
Remove denoise module and thirdparty OIDN.
This is replaced by a much lighter weight and faster JNLM denoiser. OIDN is still much more accurate, and may be provided as an optional backend in the future, but the JNLM denoiser seems good enough for most use cases and removing OIDN reduces the build system complexity, binary size, and build times very significantly.
Diffstat (limited to 'thirdparty/oidn/core/transfer_function.h')
-rw-r--r-- | thirdparty/oidn/core/transfer_function.h | 201 |
1 files changed, 0 insertions, 201 deletions
diff --git a/thirdparty/oidn/core/transfer_function.h b/thirdparty/oidn/core/transfer_function.h deleted file mode 100644 index 35f2833092..0000000000 --- a/thirdparty/oidn/core/transfer_function.h +++ /dev/null @@ -1,201 +0,0 @@ -// ======================================================================== // -// Copyright 2009-2019 Intel Corporation // -// // -// Licensed under the Apache License, Version 2.0 (the "License"); // -// you may not use this file except in compliance with the License. // -// You may obtain a copy of the License at // -// // -// http://www.apache.org/licenses/LICENSE-2.0 // -// // -// Unless required by applicable law or agreed to in writing, software // -// distributed under the License is distributed on an "AS IS" BASIS, // -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // -// See the License for the specific language governing permissions and // -// limitations under the License. // -// ======================================================================== // - -#pragma once - -#include "image.h" -#include "node.h" - -namespace oidn { - - __forceinline float luminance(float r, float g, float b) - { - return 0.212671f * r + 0.715160f * g + 0.072169f * b; - } - - // Color transfer function base class - class TransferFunction - { - public: - virtual ~TransferFunction() = default; - - virtual float forward(float y) const = 0; - virtual float inverse(float x) const = 0; - }; - - // HDR transfer function base class - class HDRTransferFunction : public TransferFunction - { - protected: - static constexpr float yMax = 65504.f; - - float exposure; - float rcpExposure; - - public: - HDRTransferFunction(float exposure = 1.f) - { - setExposure(exposure); - } - - void setExposure(float exposure) - { - this->exposure = exposure; - this->rcpExposure = (exposure != 0.f) ? (1.f / exposure) : 0.f; - } - }; - - // Linear transfer function (LDR) - class LinearTransferFunction : public TransferFunction - { - public: - __forceinline float forward(float y) const override - { - return min(y, 1.f); - } - - __forceinline float inverse(float x) const override - { - return min(x, 1.f); - } - }; - - // 2.2 gamma transfer function (LDR) - class GammaTransferFunction : public TransferFunction - { - public: - __forceinline float forward(float y) const override - { - return min(pow(y, 1.f/2.2f), 1.f); - } - - __forceinline float inverse(float x) const override - { - return min(pow(x, 2.2f), 1.f); - } - }; - - // Logarithmic transfer function (HDR) - // Compresses [0..65504] to [0..1] - class LogTransferFunction : public HDRTransferFunction - { - private: - static const float xScale; - - public: - LogTransferFunction(float exposure = 1.f) - : HDRTransferFunction(exposure) - { - } - - __forceinline float forward(float y) const override - { - return log(y * exposure + 1.f) * xScale; - } - - __forceinline float inverse(float x) const override - { - return (exp(x * (1.f/xScale)) - 1.f) * rcpExposure; - } - }; - - // PQX transfer function (HDR) - // Compresses [0..65504] to [0..1] - class PQXTransferFunction : public HDRTransferFunction - { - private: - static constexpr float m1 = 2610.f / 4096.f / 4.f; - static constexpr float m2 = 2523.f / 4096.f * 128.f; - static constexpr float c1 = 3424.f / 4096.f; - static constexpr float c2 = 2413.f / 4096.f * 32.f; - static constexpr float c3 = 2392.f / 4096.f * 32.f; - static constexpr float a = 3711.f / 4096.f / 8.f; - - static constexpr float yScale = 100.f / 10000.f; - static const float xScale; - - public: - PQXTransferFunction(float exposure = 1.f) - : HDRTransferFunction(exposure) - { - } - - __forceinline float forward(float y) const override - { - return pqxForward(y * exposure * yScale) * xScale; - } - - __forceinline float inverse(float x) const override - { - return pqxInverse(x * (1.f/xScale)) * (1.f/yScale) * rcpExposure; - } - - private: - static __forceinline float pqForward(float y) - { - const float yp = pow(y, m1); - return pow((c1 + c2 * yp) * rcp(1.f + c3 * yp), m2); - } - - static __forceinline float pqxForward(float y) - { - if (y <= 1.f) - return pqForward(y); - else - return a * log(y) + 1.f; - } - - static __forceinline float pqInverse(float x) - { - const float xp = pow(x, 1.f/m2); - return pow(max((xp - c1) * rcp(c2 - c3 * xp), 0.f), 1.f/m1); - } - - static __forceinline float pqxInverse(float x) - { - if (x <= 1.f) - return pqInverse(x); - else - return exp((x - 1.f) * (1.f/a)); - } - }; - - // Autoexposure node - class AutoexposureNode : public Node - { - private: - Image color; - std::shared_ptr<HDRTransferFunction> transferFunc; - - public: - AutoexposureNode(const Image& color, - const std::shared_ptr<HDRTransferFunction>& transferFunc) - : color(color), - transferFunc(transferFunc) - {} - - void execute(stream& sm) override - { - const float exposure = autoexposure(color); - //printf("exposure = %f\n", exposure); - transferFunc->setExposure(exposure); - } - - private: - static float autoexposure(const Image& color); - }; - -} // namespace oidn |