Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
### Features

- [usd#2619](https://github.com/Autodesk/arnold-usd/issues/2619) - Add MtoA scene index plugin for MayaHydra support of custom attributes
- [usd#2650](https://github.com/Autodesk/arnold-usd/issues/2650) - Optionally use Hydra Render Settings primitive instead of settings map
- [usd#2583](https://github.com/Autodesk/arnold-usd/issues/2583) - Support nested instancers with lightweight shape instancing
- [usd#2594](https://github.com/Autodesk/arnold-usd/issues/2594) - Use a global map for shared arrays
- [usd#2608](https://github.com/Autodesk/arnold-usd/issues/2608) - Implement preliminary support for ParticleField3DGaussianSplat.
Expand Down
1 change: 0 additions & 1 deletion cmake/utils/options.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,6 @@ option(BUILD_USDGENSCHEMA_ARNOLD "Build and use a custom usdgenschema" OFF)
# Configurations:
option(ENABLE_HYDRA_IN_USD_PROCEDURAL "Enable hydra in the procedural" ON)
option(ENABLE_SHARED_ARRAYS "Enable using shared arrays" OFF)
option(ENABLE_HYDRA2_RENDERSETTINGS "Enable using RenderSetting hydra prim" OFF)
option(ENABLE_SCENE_INDEX_IN_BUNDLE "Add the scene index filters in the bundle" OFF)
option(ENABLE_TRACING "Enable USD trace instrumentation (TRACE_FUNCTION/TRACE_SCOPE)." OFF)
option(MTOA_BUILD "Build MtoA-specific plugins (e.g. the ai<Name> primvar remap scene index)" OFF)
Expand Down
3 changes: 0 additions & 3 deletions libs/render_delegate/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -72,9 +72,6 @@ target_link_libraries(render_delegate INTERFACE common)
if (ENABLE_SHARED_ARRAYS)
target_compile_definitions(render_delegate PUBLIC ENABLE_SHARED_ARRAYS=1)
endif()
if (ENABLE_HYDRA2_RENDERSETTINGS)
target_compile_definitions(render_delegate PUBLIC ENABLE_HYDRA2_RENDERSETTINGS=1)
endif()
if (HYDRA_NORMALIZE_DEPTH)
target_compile_definitions(render_delegate PUBLIC HYDRA_NORMALIZE_DEPTH=1)
endif()
Expand Down
3 changes: 0 additions & 3 deletions libs/render_delegate/SConscript
Original file line number Diff line number Diff line change
Expand Up @@ -58,9 +58,6 @@ if local_env['USD_HAS_FULLSCREEN_SHADER']:
if local_env['ENABLE_SHARED_ARRAYS']:
local_env.Append(CPPDEFINES = ['ENABLE_SHARED_ARRAYS'])

if local_env['ENABLE_HYDRA2_RENDERSETTINGS']:
local_env.Append(CPPDEFINES = ['ENABLE_HYDRA2_RENDERSETTINGS'])

if local_env['BUILD_SCENE_INDEX_PLUGIN']:
local_env.Append(CPPDEFINES = ['ENABLE_SCENE_INDEX'])

Expand Down
13 changes: 7 additions & 6 deletions libs/render_delegate/reader.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,9 @@ PXR_NAMESPACE_USING_DIRECTIVE
// clang-format off
TF_DEFINE_PRIVATE_TOKENS(_tokens,
((hydraProcCamera, "/ArnoldHydraProceduralCamera"))
(renderSettingsSrc)
(hydraSceneRenderSettingsSrc)

);

// check pxr/imaging/hd/testenv/testHdRenderIndex.cpp
Expand Down Expand Up @@ -299,24 +302,22 @@ void HydraArnoldReader::ReadStage(UsdStageRefPtr stage,
TRACE_SCOPE("ChooseRenderSettings");
ChooseRenderSettings(stage, _renderSettings, _time);
}
// TODO HERE WE COULD CHECK IF WE WANT TO USE HYDRA2

if (!_renderSettings.empty()) {
TRACE_SCOPE("ReadRenderSettings");
// Sets the default parameters on the Arnold option node (AA_samples, GI_diffuse_depth, ...)
SetArnoldDefaultOptions(_universe);
#ifdef ENABLE_HYDRA2_RENDERSETTINGS
// We want to use the RenderSetting hydra prim only if we use the scene index system
if (_useSceneIndex) {
// TODO set metadata only if it it not already set
VtValue val(_tokens->hydraSceneRenderSettingsSrc);
// Tell the arnold render delegate to use the hydra render settings
arnoldRenderDelegate->SetRenderSetting(_tokens->renderSettingsSrc, val);
stage->SetMetadata(UsdRenderTokens->renderSettingsPrimPath, _renderSettings);
} else {
UsdPrim renderSettingsPrim = stage->GetPrimAtPath(SdfPath(_renderSettings));
ReadRenderSettings(renderSettingsPrim, arnoldRenderDelegate->GetAPIAdapter(), this, _time, _universe, _renderCameraPath);
}
#else
UsdPrim renderSettingsPrim = stage->GetPrimAtPath(SdfPath(_renderSettings));
ReadRenderSettings(renderSettingsPrim, arnoldRenderDelegate->GetAPIAdapter(), this, _time, _universe, _renderCameraPath);
#endif
}
}

Expand Down
32 changes: 10 additions & 22 deletions libs/render_delegate/render_delegate.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -68,10 +68,7 @@
#include "render_pass.h"
#include "volume.h"
#include <cctype>

#ifdef ENABLE_HYDRA2_RENDERSETTINGS
#include "render_settings.h"
#endif

PXR_NAMESPACE_OPEN_SCOPE

Expand Down Expand Up @@ -112,6 +109,9 @@ TF_DEFINE_PRIVATE_TOKENS(_tokens,
(GeometryLight)
(dataWindowNDC)
(resolution)
(renderSettingsSrc)
(hydraSceneRenderSettingsSrc)

// The following tokens are also defined in read_options.cpp, we need them
// here for the conversion from TfToken to HdFormat, while in read_options they
// are used for the conversion of HdFormat to TfToken.
Expand Down Expand Up @@ -294,11 +294,7 @@ inline const TfTokenVector& _SupportedBprimTypes(bool ownsUniverse)
} else
#endif
{
#ifdef ENABLE_HYDRA2_RENDERSETTINGS
static const TfTokenVector r{HdPrimTypeTokens->renderBuffer, _tokens->openvdbAsset, HdPrimTypeTokens->renderSettings};
#else
static const TfTokenVector r{HdPrimTypeTokens->renderBuffer, _tokens->openvdbAsset};
#endif
return r;
}
}
Expand Down Expand Up @@ -716,6 +712,12 @@ void HdArnoldRenderDelegate::_SetRenderSetting(const TfToken& _key, const VtValu
_ParseDelegateRenderProducts(_value);
return;
}
if (_key == _tokens->renderSettingsSrc) {
if (_value.IsHolding<TfToken>()) {
TfToken renderSettingsSrc = _value.UncheckedGet<TfToken>();
_useHydraRenderSettings = (renderSettingsSrc == _tokens->hydraSceneRenderSettingsSrc);
}
}
TfToken key;
_RemoveArnoldGlobalPrefix(_key, key);

Expand Down Expand Up @@ -1126,15 +1128,6 @@ HdRenderSettingDescriptorList HdArnoldRenderDelegate::GetRenderSettingDescriptor
return ret;
}

// for testing in batch mode. TODO: correctly check the if we can and want to use the hydra render settings
bool HdArnoldRenderDelegate::IsUsingHydraRenderSettings() const {
#ifdef ENABLE_HYDRA2_RENDERSETTINGS
return true;
#else
return false;
#endif
}

VtDictionary HdArnoldRenderDelegate::GetRenderStats() const
{
VtDictionary stats;
Expand Down Expand Up @@ -1367,14 +1360,9 @@ HdBprim* HdArnoldRenderDelegate::CreateBprim(const TfToken& typeId, const SdfPat
#if PXR_VERSION >= 2208
// Only support render settings when we don't own the universe (procedural context).
// When we own the universe (batch context), settings come through SetRenderSettings.
#ifdef ENABLE_HYDRA2_RENDERSETTINGS
if (typeId == HdPrimTypeTokens->renderSettings /*&& !_renderDelegateOwnsUniverse*/) {
return new HdArnoldRenderSettings(bprimId);
return new HdArnoldRenderSettings(this, bprimId);
}
#else
if (typeId == HdPrimTypeTokens->renderSettings)
return nullptr;
#endif // ENABLE_HYDRA2_RENDERSETTINGS
#endif // PXR_VERSION >= 2208

TF_CODING_ERROR("Unknown Bprim Type %s", typeId.GetText());
Expand Down
3 changes: 2 additions & 1 deletion libs/render_delegate/render_delegate.h
Original file line number Diff line number Diff line change
Expand Up @@ -699,7 +699,7 @@ class HdArnoldRenderDelegate final : public HdRenderDelegate {
void SetHasCryptomatte(bool b);
void SetInstancerCryptoOffset(AtNode *node, size_t numInstances);

bool IsUsingHydraRenderSettings() const;
bool IsUsingHydraRenderSettings() const {return _useHydraRenderSettings;}

private:
HdArnoldRenderDelegate(const HdArnoldRenderDelegate&) = delete;
Expand Down Expand Up @@ -827,6 +827,7 @@ class HdArnoldRenderDelegate final : public HdRenderDelegate {
bool _enableNodesDestruction = true;
bool _supportShapeInstancing = true;
bool _forceIgnoreMotionBlur = false;
bool _useHydraRenderSettings = false;
std::unordered_map<std::string, AtNode *> _nodeNames;

// We store a list of functions that must be run once all the prims are synced
Expand Down
6 changes: 0 additions & 6 deletions libs/render_delegate/render_pass.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -47,9 +47,7 @@
#include "nodes/nodes.h"
#include "utils.h"
#include "rendersettings_utils.h"
#ifdef ENABLE_HYDRA2_RENDERSETTINGS
#include "render_settings.h"
#endif
#include <regex>
#include <cmath>
#include <cstdio>
Expand Down Expand Up @@ -501,7 +499,6 @@ HdArnoldRenderPass::~HdArnoldRenderPass()
void HdArnoldRenderPass::_Execute(const HdRenderPassStateSharedPtr& renderPassState, const TfTokenVector& renderTags)
{
HdArnoldRenderParam* renderParam = reinterpret_cast<HdArnoldRenderParam*>(_renderDelegate->GetRenderParam());
#ifdef ENABLE_HYDRA2_RENDERSETTINGS
if (_renderDelegate->IsUsingHydraRenderSettings()) {
// If we are using the hydra render settings, we let the render settings prim handle the conversion.
// We need to provide a camera pas
Expand Down Expand Up @@ -529,7 +526,6 @@ void HdArnoldRenderPass::_Execute(const HdRenderPassStateSharedPtr& renderPassSt
}
// We couldn't use the render settings, we fall back to the original code
}
#endif

if (_renderDelegate->SetRenderTags(renderTags)) {
// Render tags have changed, let's iterate through all the nodes
Expand Down Expand Up @@ -1341,7 +1337,6 @@ void HdArnoldRenderPass::_ClearRenderBuffers()
decltype(_renderBuffers){}.swap(_renderBuffers);
}

#ifdef ENABLE_HYDRA2_RENDERSETTINGS
#if PXR_VERSION >= 2308
HdArnoldRenderSettings*
HdArnoldRenderPass::_GetHydraRenderSettingsPrim() const
Expand All @@ -1354,6 +1349,5 @@ HdArnoldRenderPass::_GetHydraRenderSettingsPrim() const
renderParam->GetHydraRenderSettingsPrimPath()));
}
#endif
#endif

PXR_NAMESPACE_CLOSE_SCOPE
4 changes: 0 additions & 4 deletions libs/render_delegate/render_pass.h
Original file line number Diff line number Diff line change
Expand Up @@ -50,9 +50,7 @@

PXR_NAMESPACE_OPEN_SCOPE

#ifdef ENABLE_HYDRA2_RENDERSETTINGS
class HdArnoldRenderSettings;
#endif

/// Utility class for handling Render Passes.
class HdArnoldRenderPass : public HdRenderPass {
Expand Down Expand Up @@ -95,14 +93,12 @@ class HdArnoldRenderPass : public HdRenderPass {
HDARNOLD_API
void _ClearRenderBuffers();

#ifdef ENABLE_HYDRA2_RENDERSETTINGS
#if PXR_VERSION >= 2308
/// Gets the driving hydra render settings prim.
///
/// @return Pointer to the HdArnoldRenderSettings prim.
HdArnoldRenderSettings* _GetHydraRenderSettingsPrim() const;
#endif
#endif

private:
HdArnoldRenderBufferStorage _renderBuffers; ///< Render buffer storage.
Expand Down
Loading