Files
goo-engine/intern/cycles/device/denoise.cpp
T
Stefan Werner 2e2291dd83 Cycles: Added quality parameter for OIDN
OpenImageDenoise has two modes, high quality and balanced. This now exposes the modes as user parameters, with viewport denoising defaulting to balanced and final frame rendering set to high quality.

Ref #115045

Co-authored-by: Werner, Stefan <stefan.werner@intel.com>
Pull Request: https://projects.blender.org/blender/blender/pulls/115265
2023-11-23 12:35:30 +01:00

91 lines
2.1 KiB
C++

/* SPDX-FileCopyrightText: 2011-2022 Blender Foundation
*
* SPDX-License-Identifier: Apache-2.0 */
#include "device/denoise.h"
CCL_NAMESPACE_BEGIN
const char *denoiserTypeToHumanReadable(DenoiserType type)
{
switch (type) {
case DENOISER_OPTIX:
return "OptiX";
case DENOISER_OPENIMAGEDENOISE:
return "OpenImageDenoise";
case DENOISER_NUM:
case DENOISER_NONE:
case DENOISER_ALL:
return "UNKNOWN";
}
return "UNKNOWN";
}
const NodeEnum *DenoiseParams::get_type_enum()
{
static NodeEnum type_enum;
if (type_enum.empty()) {
type_enum.insert("optix", DENOISER_OPTIX);
type_enum.insert("openimageio", DENOISER_OPENIMAGEDENOISE);
}
return &type_enum;
}
const NodeEnum *DenoiseParams::get_prefilter_enum()
{
static NodeEnum prefilter_enum;
if (prefilter_enum.empty()) {
prefilter_enum.insert("none", DENOISER_PREFILTER_NONE);
prefilter_enum.insert("fast", DENOISER_PREFILTER_FAST);
prefilter_enum.insert("accurate", DENOISER_PREFILTER_ACCURATE);
}
return &prefilter_enum;
}
const NodeEnum *DenoiseParams::get_quality_enum()
{
static NodeEnum quality_enum;
if (quality_enum.empty()) {
quality_enum.insert("high", DENOISER_QUALITY_HIGH);
quality_enum.insert("balanced", DENOISER_QUALITY_BALANCED);
}
return &quality_enum;
}
NODE_DEFINE(DenoiseParams)
{
NodeType *type = NodeType::add("denoise_params", create);
const NodeEnum *type_enum = get_type_enum();
const NodeEnum *prefilter_enum = get_prefilter_enum();
const NodeEnum *quality_enum = get_quality_enum();
SOCKET_BOOLEAN(use, "Use", false);
SOCKET_ENUM(type, "Type", *type_enum, DENOISER_OPENIMAGEDENOISE);
SOCKET_INT(start_sample, "Start Sample", 0);
SOCKET_BOOLEAN(use_pass_albedo, "Use Pass Albedo", true);
SOCKET_BOOLEAN(use_pass_normal, "Use Pass Normal", false);
SOCKET_BOOLEAN(temporally_stable, "Temporally Stable", false);
SOCKET_ENUM(prefilter, "Prefilter", *prefilter_enum, DENOISER_PREFILTER_FAST);
SOCKET_ENUM(quality, "Quality", *quality_enum, DENOISER_QUALITY_HIGH);
return type;
}
DenoiseParams::DenoiseParams() : Node(get_node_type()) {}
CCL_NAMESPACE_END