From ada5a2dfa8752353fadc84c8b7b512fd93a23753 Mon Sep 17 00:00:00 2001 From: Nick Shelton Date: Tue, 18 Aug 2026 13:43:16 -0700 Subject: [PATCH 1/3] update hdas for openmoonray 2026.29.1 Signed-off-by: Nick Shelton --- houdini/moonray_nodes.json | 764 ++++- .../otls/Vop::DW_MOONRAY::AttributeMap::1.hda | Bin 8095 -> 6201 bytes .../otls/Vop::DW_MOONRAY::AxisAngleMap::1.hda | Bin 6892 -> 4999 bytes .../otls/Vop::DW_MOONRAY::BaseVolume::1.hda | Bin 17673 -> 15769 bytes ...Vop::DW_MOONRAY::BlendDisplayFilter::1.hda | Bin 6807 -> 4933 bytes houdini/otls/Vop::DW_MOONRAY::BlendMap::1.hda | Bin 6647 -> 4743 bytes .../Vop::DW_MOONRAY::CheckerboardMap::1.hda | Bin 6771 -> 4887 bytes ...Vop::DW_MOONRAY::ClampDisplayFilter::1.hda | Bin 6272 -> 4399 bytes houdini/otls/Vop::DW_MOONRAY::ClampMap::1.hda | Bin 5924 -> 4020 bytes ...DW_MOONRAY::ColorCorrectContrastMap::1.hda | Bin 7840 -> 5976 bytes ..._MOONRAY::ColorCorrectDisplayFilter::1.hda | Bin 7638 -> 5783 bytes ..._MOONRAY::ColorCorrectGainOffsetMap::1.hda | Bin 8980 -> 7122 bytes ...p::DW_MOONRAY::ColorCorrectGammaMap::1.hda | Bin 7369 -> 5498 bytes ...Vop::DW_MOONRAY::ColorCorrectHsvMap::1.hda | Bin 7773 -> 5896 bytes ...DW_MOONRAY::ColorCorrectHueShiftMap::1.hda | Bin 5894 -> 4032 bytes ...::DW_MOONRAY::ColorCorrectLegacyMap::1.hda | Bin 7563 -> 5694 bytes .../Vop::DW_MOONRAY::ColorCorrectMap::1.hda | Bin 20528 -> 18643 bytes ..._MOONRAY::ColorCorrectSaturationMap::1.hda | Bin 7654 -> 5795 bytes ...Vop::DW_MOONRAY::ColorCorrectTMIMap::1.hda | Bin 6038 -> 4161 bytes ...op::DW_MOONRAY::CombineDisplacement::1.hda | Bin 6997 -> 5128 bytes .../Vop::DW_MOONRAY::CombineNormalMap::1.hda | Bin 6201 -> 4322 bytes .../Vop::DW_MOONRAY::ConstantColorMap::1.hda | Bin 4939 -> 3057 bytes ...::DW_MOONRAY::ConstantDisplayFilter::1.hda | Bin 5700 -> 3834 bytes .../Vop::DW_MOONRAY::ConstantScalarMap::1.hda | Bin 4926 -> 3047 bytes ...W_MOONRAY::ConvolutionDisplayFilter::1.hda | Bin 7086 -> 5229 bytes .../otls/Vop::DW_MOONRAY::CurvatureMap::1.hda | Bin 6128 -> 4234 bytes .../otls/Vop::DW_MOONRAY::CutoutVolume::1.hda | Bin 7504 -> 5608 bytes houdini/otls/Vop::DW_MOONRAY::DebugMap::1.hda | Bin 7666 -> 5761 bytes .../Vop::DW_MOONRAY::DeformationMap::1.hda | Bin 6119 -> 4228 bytes .../Vop::DW_MOONRAY::DirectionalMap::1.hda | Bin 11742 -> 9851 bytes ...DW_MOONRAY::DiscretizeDisplayFilter::1.hda | Bin 6043 -> 4182 bytes .../Vop::DW_MOONRAY::DistortNormalMap::1.hda | Bin 9000 -> 7119 bytes .../Vop::DW_MOONRAY::DofDisplayFilter::1.hda | Bin 7321 -> 5443 bytes .../Vop::DW_MOONRAY::DwaAdjustMaterial::1.hda | Bin 12228 -> 10345 bytes .../Vop::DW_MOONRAY::DwaBaseMaterial::1.hda | Bin 57344 -> 55379 bytes ...DW_MOONRAY::DwaColorCorrectMaterial::1.hda | Bin 9757 -> 7889 bytes ...op::DW_MOONRAY::DwaEmissiveMaterial::1.hda | Bin 7909 -> 6031 bytes .../Vop::DW_MOONRAY::DwaFabricMaterial::1.hda | Bin 36088 -> 34205 bytes .../Vop::DW_MOONRAY::DwaLayerMaterial::1.hda | Bin 17865 -> 15979 bytes .../Vop::DW_MOONRAY::DwaMetalMaterial::1.hda | Bin 44995 -> 43033 bytes .../Vop::DW_MOONRAY::DwaMixMaterial::1.hda | Bin 38734 -> 36842 bytes ...::DW_MOONRAY::DwaRefractiveMaterial::1.hda | Bin 34420 -> 32469 bytes .../Vop::DW_MOONRAY::DwaSkinMaterial::1.hda | Bin 50002 -> 48038 bytes ...MOONRAY::DwaSolidDielectricMaterial::1.hda | Bin 51325 -> 49387 bytes .../Vop::DW_MOONRAY::DwaSwitchMaterial::1.hda | Bin 29110 -> 27225 bytes .../Vop::DW_MOONRAY::DwaToonMaterial::1.hda | Bin 94881 -> 92915 bytes ...op::DW_MOONRAY::DwaTwoSidedMaterial::1.hda | Bin 10626 -> 8747 bytes .../Vop::DW_MOONRAY::DwaVelvetMaterial::2.hda | Bin 29872 -> 27987 bytes .../otls/Vop::DW_MOONRAY::ExtraAovMap::1.hda | Bin 5843 -> 3946 bytes .../Vop::DW_MOONRAY::FloatToRgbMap::1.hda | Bin 5306 -> 3415 bytes .../otls/Vop::DW_MOONRAY::GradientMap::1.hda | Bin 10365 -> 8467 bytes ...W_MOONRAY::HairColorCorrectMaterial::1.hda | Bin 9757 -> 7891 bytes ...op::DW_MOONRAY::HairColorPresetsMap::1.hda | Bin 5592 -> 3718 bytes .../Vop::DW_MOONRAY::HairColumnMap::1.hda | Bin 4586 -> 2692 bytes ...op::DW_MOONRAY::HairDiffuseMaterial::1.hda | Bin 14013 -> 12135 bytes .../Vop::DW_MOONRAY::HairLayerMaterial::1.hda | Bin 8654 -> 6770 bytes houdini/otls/Vop::DW_MOONRAY::HairMap::1.hda | Bin 6419 -> 4511 bytes .../otls/Vop::DW_MOONRAY::HairMaterial::3.hda | Bin 23141 -> 21243 bytes .../Vop::DW_MOONRAY::HairToonMaterial::1.hda | Bin 76245 -> 74359 bytes ...::DW_MOONRAY::HalftoneDisplayFilter::1.hda | Bin 6933 -> 5067 bytes .../otls/Vop::DW_MOONRAY::HsvToRgbMap::1.hda | Bin 4861 -> 2965 bytes ...Vop::DW_MOONRAY::ImageDisplayFilter::1.hda | Bin 6721 -> 4848 bytes houdini/otls/Vop::DW_MOONRAY::ImageMap::1.hda | Bin 15406 -> 13500 bytes .../Vop::DW_MOONRAY::ImageNormalMap::1.hda | Bin 10009 -> 8123 bytes houdini/otls/Vop::DW_MOONRAY::LODMap::1.hda | Bin 6470 -> 4559 bytes houdini/otls/Vop::DW_MOONRAY::LayerMap::1.hda | Bin 6375 -> 4469 bytes houdini/otls/Vop::DW_MOONRAY::LayerMap::2.hda | Bin 4381 -> 4472 bytes houdini/otls/Vop::DW_MOONRAY::ListMap::1.hda | Bin 10499 -> 8591 bytes ...:DW_MOONRAY::MultiChannelToFloatMap::1.hda | Bin 5919 -> 4052 bytes houdini/otls/Vop::DW_MOONRAY::NoiseMap::2.hda | Bin 16809 -> 14904 bytes .../Vop::DW_MOONRAY::NoiseWorleyMap::2.hda | Bin 17623 -> 15734 bytes .../Vop::DW_MOONRAY::NoiseWorleyMap::3.hda | Bin 6076 -> 15734 bytes ...Vop::DW_MOONRAY::NormalDisplacement::1.hda | Bin 6437 -> 4563 bytes .../Vop::DW_MOONRAY::NormalToRgbMap::1.hda | Bin 4913 -> 3024 bytes .../Vop::DW_MOONRAY::OpDisplayFilter::1.hda | Bin 7675 -> 5794 bytes houdini/otls/Vop::DW_MOONRAY::OpMap::1.hda | Bin 8529 -> 6615 bytes .../otls/Vop::DW_MOONRAY::OpSqrtMap::1.hda | Bin 4226 -> 2904 bytes .../otls/Vop::DW_MOONRAY::OpenVdbMap::1.hda | Bin 9256 -> 7355 bytes .../otls/Vop::DW_MOONRAY::OpenVdbMap::2.hda | Bin 9324 -> 7423 bytes .../Vop::DW_MOONRAY::OverDisplayFilter::1.hda | Bin 5930 -> 4055 bytes .../Vop::DW_MOONRAY::ProjectCameraMap::1.hda | Bin 7595 -> 5714 bytes .../Vop::DW_MOONRAY::ProjectCameraMap::2.hda | Bin 8382 -> 6501 bytes ...:DW_MOONRAY::ProjectCameraNormalMap::1.hda | Bin 7486 -> 5622 bytes ...::DW_MOONRAY::ProjectCylindricalMap::1.hda | Bin 10127 -> 8257 bytes .../Vop::DW_MOONRAY::ProjectPlanarMap::1.hda | Bin 9679 -> 7796 bytes ...:DW_MOONRAY::ProjectPlanarNormalMap::1.hda | Bin 10136 -> 8272 bytes ...op::DW_MOONRAY::ProjectSphericalMap::1.hda | Bin 8939 -> 7066 bytes ...op::DW_MOONRAY::ProjectTriplanarMap::1.hda | Bin 39198 -> 37323 bytes ...op::DW_MOONRAY::ProjectTriplanarMap::2.hda | Bin 39829 -> 37954 bytes ..._MOONRAY::ProjectTriplanarNormalMap::1.hda | Bin 38909 -> 37053 bytes ..._MOONRAY::ProjectTriplanarNormalMap::2.hda | Bin 39930 -> 38074 bytes ...DW_MOONRAY::ProjectTriplanarUdimMap::1.hda | Bin 13235 -> 11371 bytes .../Vop::DW_MOONRAY::RampDisplayFilter::1.hda | Bin 7299 -> 5424 bytes houdini/otls/Vop::DW_MOONRAY::RampMap::1.hda | Bin 10335 -> 8427 bytes .../otls/Vop::DW_MOONRAY::RandomMap::1.hda | Bin 6093 -> 4190 bytes .../Vop::DW_MOONRAY::RandomNormalMap::1.hda | Bin 5264 -> 3381 bytes .../Vop::DW_MOONRAY::RaySwitchMaterial::1.hda | Bin 9486 -> 7603 bytes ...Vop::DW_MOONRAY::RemapDisplayFilter::1.hda | Bin 13079 -> 11206 bytes houdini/otls/Vop::DW_MOONRAY::RemapMap::1.hda | Bin 12156 -> 10251 bytes ...DW_MOONRAY::RgbToFloatDisplayFilter::1.hda | Bin 6307 -> 4448 bytes .../Vop::DW_MOONRAY::RgbToFloatMap::1.hda | Bin 5413 -> 3522 bytes ...::DW_MOONRAY::RgbToHsvDisplayFilter::1.hda | Bin 6140 -> 4276 bytes .../otls/Vop::DW_MOONRAY::RgbToHsvMap::1.hda | Bin 4864 -> 2968 bytes .../otls/Vop::DW_MOONRAY::RgbToLabMap::1.hda | Bin 4896 -> 3000 bytes .../Vop::DW_MOONRAY::RgbToNormalMap::1.hda | Bin 4929 -> 3044 bytes ...op::DW_MOONRAY::ShadowDisplayFilter::1.hda | Bin 5765 -> 3896 bytes .../Vop::DW_MOONRAY::SwitchColorMap::1.hda | Bin 21987 -> 20098 bytes ...Vop::DW_MOONRAY::SwitchDisplacement::1.hda | Bin 29974 -> 28101 bytes .../Vop::DW_MOONRAY::SwitchFloatMap::1.hda | Bin 20195 -> 18307 bytes .../Vop::DW_MOONRAY::SwitchMaterial::1.hda | Bin 28124 -> 26232 bytes .../Vop::DW_MOONRAY::SwitchNormalMap::1.hda | Bin 22458 -> 20576 bytes ..._MOONRAY::TangentSpaceDisplayFilter::1.hda | Bin 6881 -> 5027 bytes .../Vop::DW_MOONRAY::ToonDisplayFilter::1.hda | Bin 8486 -> 6611 bytes houdini/otls/Vop::DW_MOONRAY::ToonMap::1.hda | Bin 7507 -> 5599 bytes ...Vop::DW_MOONRAY::TransformNormalMap::1.hda | Bin 5875 -> 3996 bytes .../Vop::DW_MOONRAY::TransformSpaceMap::1.hda | Bin 10106 -> 8226 bytes .../otls/Vop::DW_MOONRAY::TwoSidedMap::1.hda | Bin 4334 -> 3376 bytes .../Vop::DW_MOONRAY::UVTransformMap::1.hda | Bin 6868 -> 4980 bytes .../otls/Vop::DW_MOONRAY::VdbVolume::1.hda | Bin 0 -> 6772 bytes ...Vop::DW_MOONRAY::VectorDisplacement::1.hda | Bin 6864 -> 4989 bytes .../otls/Vop::DW_MOONRAY::WireframeMap::1.hda | Bin 5608 -> 3713 bytes .../parameters/HdMoonrayRendererPlugin_Aov.ds | 22 + .../HdMoonrayRendererPlugin_Geometry.ds | 1576 ++++++++++ .../HdMoonrayRendererPlugin_Global.ds | 57 +- .../HdMoonrayRendererPlugin_Light.ds | 373 ++- .../soho/parameters/moonray_AttributeMap.ds | 4 +- .../parameters/moonray_CombineNormalMap.ds | 4 +- .../soho/parameters/moonray_CylinderLight.ds | 48 +- houdini/soho/parameters/moonray_DebugMap.ds | 4 +- houdini/soho/parameters/moonray_DiskLight.ds | 40 +- .../soho/parameters/moonray_DistantLight.ds | 40 +- .../parameters/moonray_DwaBaseMaterial.ds | 104 +- .../moonray_DwaColorCorrectMaterial.ds | 2 +- .../parameters/moonray_DwaFabricMaterial.ds | 64 +- .../parameters/moonray_DwaMetalMaterial.ds | 94 +- .../moonray_DwaRefractiveMaterial.ds | 48 +- .../parameters/moonray_DwaSkinMaterial.ds | 98 +- .../moonray_DwaSolidDielectricMaterial.ds | 102 +- .../parameters/moonray_DwaToonMaterial.ds | 110 +- .../moonray_DwaVelvetMaterial_v2.ds | 64 +- houdini/soho/parameters/moonray_EnvLight.ds | 32 +- .../moonray_HairColorCorrectMaterial.ds | 2 +- .../parameters/moonray_HairDiffuseMaterial.ds | 2 +- .../parameters/moonray_HairMaterial_v3.ds | 18 +- .../parameters/moonray_HairToonMaterial.ds | 236 +- houdini/soho/parameters/moonray_MeshLight.ds | 32 +- .../parameters/moonray_NoiseWorleyMap_v2.ds | 2 +- .../parameters/moonray_NoiseWorleyMap_v3.ds | 2 +- .../parameters/moonray_OrthographicCamera.ds | 40 +- houdini/soho/parameters/moonray_Override.ds | 10 +- .../parameters/moonray_PerspectiveCamera.ds | 48 +- .../parameters/moonray_RdlCurveGeometry.ds | 152 + .../parameters/moonray_RdlMeshGeometry.ds | 152 + .../parameters/moonray_RdlPointGeometry.ds | 152 + houdini/soho/parameters/moonray_RectLight.ds | 56 +- .../soho/parameters/moonray_SphereLight.ds | 40 +- .../parameters/moonray_SphericalCamera.ds | 24 +- houdini/soho/parameters/moonray_SpotLight.ds | 48 +- houdini/soho/parameters/moonray_VdbVolume.ds | 245 ++ scripts/update_hdas.py | 2525 +++++++++++++++++ 160 files changed, 6533 insertions(+), 903 deletions(-) create mode 100644 houdini/otls/Vop::DW_MOONRAY::VdbVolume::1.hda create mode 100644 houdini/soho/parameters/moonray_VdbVolume.ds create mode 100644 scripts/update_hdas.py diff --git a/houdini/moonray_nodes.json b/houdini/moonray_nodes.json index 55d0625..d62b8d7 100644 --- a/houdini/moonray_nodes.json +++ b/houdini/moonray_nodes.json @@ -1,14 +1,5 @@ { - "packages": { - "mcrt_dataio_folio": "mcrt_dataio-16.0", - "mcrt_denoise_folio": "mcrt_denoise-7.0", - "mcrt_messages_folio": "mcrt_messages-15.0", - "moonbase_proxies_folio": "moonbase_proxies-15.0", - "moonray_folio": "moonray-18.0", - "moonshine_folio": "moonshine-15.0", - "moonshine_usd_folio": "moonshine_usd-15.0", - "scene_rdl2_folio": "scene_rdl2-16.0" - }, + "packages": {}, "AttributeMap": { "moonray_name": "AttributeMap", "moonray_type": "Map", @@ -40532,6 +40523,100 @@ ], "help": "Vector of UserData. Each key/value pair will be added as a primitive attribute of the curves." }, + "local_motion_blur_position_list": { + "moonray_name": "local_motion_blur_position_list", + "moonray_type": "Vec3fVector", + "default_value": [], + "houdini_name": "local_motion_blur_position_list", + "houdini_label": "Local Motion Blur Position List", + "order": 37, + "aliases": [ + "local motion blur position list" + ], + "help": "World-space center position for each local motion blur region." + }, + "local_motion_blur_orient_list": { + "moonray_name": "local_motion_blur_orient_list", + "moonray_type": "Vec4fVector", + "default_value": [], + "houdini_name": "local_motion_blur_orient_list", + "houdini_label": "Local Motion Blur Orient List", + "order": 38, + "aliases": [ + "local motion blur orient list" + ], + "help": "Per-point orientation quaternion (x=i, y=j, z=k, w=r) for each local motion blur region. Combined with the scale list, this orients and shapes the blur falloff region. If empty, identity orientation is used. Must match the length of local_motion_blur_position_list." + }, + "local_motion_blur_scale_list": { + "moonray_name": "local_motion_blur_scale_list", + "moonray_type": "Vec3fVector", + "default_value": [], + "houdini_name": "local_motion_blur_scale_list", + "houdini_label": "Local Motion Blur Scale List", + "order": 39, + "aliases": [ + "local motion blur scale list" + ], + "help": "Per-point non-uniform scale (x,y,z) for each local motion blur region. Non-uniform scale makes the falloff region ellipsoidal rather than spherical. If empty, uniform scale (1,1,1) is used. Must match the length of local_motion_blur_position_list." + }, + "local_motion_blur_radius_list": { + "moonray_name": "local_motion_blur_radius_list", + "moonray_type": "FloatVector", + "default_value": [], + "houdini_name": "local_motion_blur_radius_list", + "houdini_label": "Local Motion Blur Radius List", + "order": 40, + "aliases": [ + "local motion blur radius list" + ], + "help": "Per-point outer radius for each local motion blur region. If empty, defaults to 1.0. Must match the length of local_motion_blur_position_list." + }, + "local_motion_blur_inner_radius_list": { + "moonray_name": "local_motion_blur_inner_radius_list", + "moonray_type": "FloatVector", + "default_value": [], + "houdini_name": "local_motion_blur_inner_radius_list", + "houdini_label": "Local Motion Blur Inner Radius List", + "order": 41, + "aliases": [ + "local motion blur inner radius list" + ], + "help": "Per-point inner radius for each local motion blur region (full-strength core). If empty, defaults to 1.0. Must match the length of local_motion_blur_position_list." + }, + "local_motion_blur_multiplier_list": { + "moonray_name": "local_motion_blur_multiplier_list", + "moonray_type": "FloatVector", + "default_value": [], + "houdini_name": "local_motion_blur_multiplier_list", + "houdini_label": "Local Motion Blur Multiplier List", + "order": 42, + "aliases": [ + "local motion blur multiplier list" + ], + "help": "Per-point motion blur strength multiplier for each local motion blur region. If empty, defaults to 1.0. Must match the length of local_motion_blur_position_list." + }, + "local_motion_blur_strength_multiplier": { + "moonray_name": "local_motion_blur_strength_multiplier", + "moonray_type": "Float", + "default_value": [ + 1.0 + ], + "houdini_name": "local_motion_blur_strength_multiplier", + "houdini_label": "Local Motion Blur Strength Multiplier", + "order": 43, + "help": "Global strength multiplier for local motion blur application" + }, + "local_motion_blur_radius_multiplier": { + "moonray_name": "local_motion_blur_radius_multiplier", + "moonray_type": "Float", + "default_value": [ + 1.0 + ], + "houdini_name": "local_motion_blur_radius_multiplier", + "houdini_label": "Local Motion Blur Radius Multiplier", + "order": 44, + "help": "Global radius multiplier applied to per-region radius values, whether supplied via the \"radius\"/\"inner_radius\" point attributes or the \"local_motion_blur_radius_list\"/\"local_motion_blur_inner_radius_list\" explicit list attributes" + }, "tessellation_rate": { "moonray_name": "tessellation_rate", "moonray_type": "Int", @@ -40540,7 +40625,7 @@ ], "houdini_name": "tessellation_rate", "houdini_label": "Tessellation Rate", - "order": 37, + "order": 45, "help": "Number of segments to split curve spans into" }, "curves_subtype": { @@ -40551,7 +40636,7 @@ ], "houdini_name": "curves_subtype", "houdini_label": "Curves Subtype", - "order": 38, + "order": 46, "help": "Selects the style the curves are rendered", "menu": [ "ray_facing", @@ -40572,7 +40657,7 @@ ], "houdini_name": "use_rotation_motion_blur", "houdini_label": "Use Rotation Motion Blur", - "order": 39, + "order": 47, "aliases": [ "use_rotation_motion_blur" ], @@ -40586,7 +40671,7 @@ ], "houdini_name": "motion_blur_type", "houdini_label": "Motion Blur Type", - "order": 40, + "order": 48, "aliases": [ "motion blur type" ], @@ -40616,7 +40701,7 @@ ], "houdini_name": "curved_motion_blur_sample_count", "houdini_label": "Curved Motion Blur Sample Count", - "order": 41, + "order": 49, "aliases": [ "curved motion blur sample count" ], @@ -40630,7 +40715,7 @@ ], "houdini_name": "primitive_attribute_frame", "houdini_label": "Primitive Attribute Frame", - "order": 42, + "order": 50, "help": "Which frame(s) do we take the primitive attributes from?\n\tO : first motion step\n\t1 : second motion step\n\t2 : both motion steps", "menu": [ "first motion step", @@ -40651,7 +40736,7 @@ ], "houdini_name": "use_explicit_shading_attributes", "houdini_label": "Use Explicit Shading Attributes", - "order": 43, + "order": 51, "aliases": [ "use_explicit_shading_attributes" ], @@ -40696,6 +40781,14 @@ "velocity_list_1", "accleration_list", "velocity_scale", + "local_motion_blur_position_list", + "local_motion_blur_orient_list", + "local_motion_blur_scale_list", + "local_motion_blur_radius_list", + "local_motion_blur_inner_radius_list", + "local_motion_blur_multiplier_list", + "local_motion_blur_strength_multiplier", + "local_motion_blur_radius_multiplier", "use_rotation_motion_blur", "motion_blur_type", "curved_motion_blur_sample_count", @@ -41882,6 +41975,100 @@ ], "help": "Vector of UserData. Each key/value pair will be added as a primitive attribute of the mesh." }, + "local_motion_blur_position_list": { + "moonray_name": "local_motion_blur_position_list", + "moonray_type": "Vec3fVector", + "default_value": [], + "houdini_name": "local_motion_blur_position_list", + "houdini_label": "Local Motion Blur Position List", + "order": 46, + "aliases": [ + "local motion blur position list" + ], + "help": "World-space center position for each local motion blur region." + }, + "local_motion_blur_orient_list": { + "moonray_name": "local_motion_blur_orient_list", + "moonray_type": "Vec4fVector", + "default_value": [], + "houdini_name": "local_motion_blur_orient_list", + "houdini_label": "Local Motion Blur Orient List", + "order": 47, + "aliases": [ + "local motion blur orient list" + ], + "help": "Per-point orientation quaternion (x=i, y=j, z=k, w=r) for each local motion blur region. Combined with the scale list, this orients and shapes the blur falloff region. If empty, identity orientation is used. Must match the length of local_motion_blur_position_list." + }, + "local_motion_blur_scale_list": { + "moonray_name": "local_motion_blur_scale_list", + "moonray_type": "Vec3fVector", + "default_value": [], + "houdini_name": "local_motion_blur_scale_list", + "houdini_label": "Local Motion Blur Scale List", + "order": 48, + "aliases": [ + "local motion blur scale list" + ], + "help": "Per-point non-uniform scale (x,y,z) for each local motion blur region. Non-uniform scale makes the falloff region ellipsoidal rather than spherical. If empty, uniform scale (1,1,1) is used. Must match the length of local_motion_blur_position_list." + }, + "local_motion_blur_radius_list": { + "moonray_name": "local_motion_blur_radius_list", + "moonray_type": "FloatVector", + "default_value": [], + "houdini_name": "local_motion_blur_radius_list", + "houdini_label": "Local Motion Blur Radius List", + "order": 49, + "aliases": [ + "local motion blur radius list" + ], + "help": "Per-point outer radius for each local motion blur region. If empty, defaults to 1.0. Must match the length of local_motion_blur_position_list." + }, + "local_motion_blur_inner_radius_list": { + "moonray_name": "local_motion_blur_inner_radius_list", + "moonray_type": "FloatVector", + "default_value": [], + "houdini_name": "local_motion_blur_inner_radius_list", + "houdini_label": "Local Motion Blur Inner Radius List", + "order": 50, + "aliases": [ + "local motion blur inner radius list" + ], + "help": "Per-point inner radius for each local motion blur region (full-strength core). If empty, defaults to 1.0. Must match the length of local_motion_blur_position_list." + }, + "local_motion_blur_multiplier_list": { + "moonray_name": "local_motion_blur_multiplier_list", + "moonray_type": "FloatVector", + "default_value": [], + "houdini_name": "local_motion_blur_multiplier_list", + "houdini_label": "Local Motion Blur Multiplier List", + "order": 51, + "aliases": [ + "local motion blur multiplier list" + ], + "help": "Per-point motion blur strength multiplier for each local motion blur region. If empty, defaults to 1.0. Must match the length of local_motion_blur_position_list." + }, + "local_motion_blur_strength_multiplier": { + "moonray_name": "local_motion_blur_strength_multiplier", + "moonray_type": "Float", + "default_value": [ + 1.0 + ], + "houdini_name": "local_motion_blur_strength_multiplier", + "houdini_label": "Local Motion Blur Strength Multiplier", + "order": 52, + "help": "Global strength multiplier for local motion blur application" + }, + "local_motion_blur_radius_multiplier": { + "moonray_name": "local_motion_blur_radius_multiplier", + "moonray_type": "Float", + "default_value": [ + 1.0 + ], + "houdini_name": "local_motion_blur_radius_multiplier", + "houdini_label": "Local Motion Blur Radius Multiplier", + "order": 53, + "help": "Global radius multiplier applied to per-region radius values, whether supplied via the \"radius\"/\"inner_radius\" point attributes or the \"local_motion_blur_radius_list\"/\"local_motion_blur_inner_radius_list\" explicit list attributes" + }, "mesh_resolution": { "moonray_name": "mesh_resolution", "moonray_type": "Float", @@ -41890,7 +42077,7 @@ ], "houdini_name": "mesh_resolution", "houdini_label": "Mesh Resolution", - "order": 46, + "order": 54, "aliases": [ "resolution factor", "subd resolution", @@ -41906,7 +42093,7 @@ ], "houdini_name": "adaptive_error", "houdini_label": "Adaptive Error", - "order": 47, + "order": 55, "aliases": [ "adaptive error" ], @@ -41920,7 +42107,7 @@ ], "houdini_name": "smooth_normal", "houdini_label": "Smooth Normal", - "order": 48, + "order": 56, "help": "Generates smooth shading normals on a PolygonMesh when the mesh doesn't provide shading normals" }, "use_rotation_motion_blur": { @@ -41931,7 +42118,7 @@ ], "houdini_name": "use_rotation_motion_blur", "houdini_label": "Use Rotation Motion Blur", - "order": 49, + "order": 57, "aliases": [ "use_rotation_motion_blur" ], @@ -41945,7 +42132,7 @@ ], "houdini_name": "motion_blur_type", "houdini_label": "Motion Blur Type", - "order": 50, + "order": 58, "aliases": [ "motion blur type" ], @@ -41975,7 +42162,7 @@ ], "houdini_name": "curved_motion_blur_sample_count", "houdini_label": "Curved Motion Blur Sample Count", - "order": 51, + "order": 59, "aliases": [ "curved motion blur sample count" ], @@ -41989,7 +42176,7 @@ ], "houdini_name": "primitive_attribute_frame", "houdini_label": "Primitive Attribute Frame", - "order": 52, + "order": 60, "help": "Which frame(s) do we take the primitive attributes from?\n\tO : first motion step\n\t1 : second motion step\n\t2 : both motion steps", "menu": [ "first motion step", @@ -42010,7 +42197,7 @@ ], "houdini_name": "use_explicit_shading_attributes", "houdini_label": "Use Explicit Shading Attributes", - "order": 53, + "order": 61, "aliases": [ "use_explicit_shading_attributes" ], @@ -42063,6 +42250,14 @@ "velocity_list_1", "accleration_list", "velocity_scale", + "local_motion_blur_position_list", + "local_motion_blur_orient_list", + "local_motion_blur_scale_list", + "local_motion_blur_radius_list", + "local_motion_blur_inner_radius_list", + "local_motion_blur_multiplier_list", + "local_motion_blur_strength_multiplier", + "local_motion_blur_radius_multiplier", "use_rotation_motion_blur", "motion_blur_type", "curved_motion_blur_sample_count", @@ -42516,6 +42711,100 @@ ], "help": "Vector of UserData. Each key/value pair will be added as a primitive attribute of the points." }, + "local_motion_blur_position_list": { + "moonray_name": "local_motion_blur_position_list", + "moonray_type": "Vec3fVector", + "default_value": [], + "houdini_name": "local_motion_blur_position_list", + "houdini_label": "Local Motion Blur Position List", + "order": 34, + "aliases": [ + "local motion blur position list" + ], + "help": "World-space center position for each local motion blur region." + }, + "local_motion_blur_orient_list": { + "moonray_name": "local_motion_blur_orient_list", + "moonray_type": "Vec4fVector", + "default_value": [], + "houdini_name": "local_motion_blur_orient_list", + "houdini_label": "Local Motion Blur Orient List", + "order": 35, + "aliases": [ + "local motion blur orient list" + ], + "help": "Per-point orientation quaternion (x=i, y=j, z=k, w=r) for each local motion blur region. Combined with the scale list, this orients and shapes the blur falloff region. If empty, identity orientation is used. Must match the length of local_motion_blur_position_list." + }, + "local_motion_blur_scale_list": { + "moonray_name": "local_motion_blur_scale_list", + "moonray_type": "Vec3fVector", + "default_value": [], + "houdini_name": "local_motion_blur_scale_list", + "houdini_label": "Local Motion Blur Scale List", + "order": 36, + "aliases": [ + "local motion blur scale list" + ], + "help": "Per-point non-uniform scale (x,y,z) for each local motion blur region. Non-uniform scale makes the falloff region ellipsoidal rather than spherical. If empty, uniform scale (1,1,1) is used. Must match the length of local_motion_blur_position_list." + }, + "local_motion_blur_radius_list": { + "moonray_name": "local_motion_blur_radius_list", + "moonray_type": "FloatVector", + "default_value": [], + "houdini_name": "local_motion_blur_radius_list", + "houdini_label": "Local Motion Blur Radius List", + "order": 37, + "aliases": [ + "local motion blur radius list" + ], + "help": "Per-point outer radius for each local motion blur region. If empty, defaults to 1.0. Must match the length of local_motion_blur_position_list." + }, + "local_motion_blur_inner_radius_list": { + "moonray_name": "local_motion_blur_inner_radius_list", + "moonray_type": "FloatVector", + "default_value": [], + "houdini_name": "local_motion_blur_inner_radius_list", + "houdini_label": "Local Motion Blur Inner Radius List", + "order": 38, + "aliases": [ + "local motion blur inner radius list" + ], + "help": "Per-point inner radius for each local motion blur region (full-strength core). If empty, defaults to 1.0. Must match the length of local_motion_blur_position_list." + }, + "local_motion_blur_multiplier_list": { + "moonray_name": "local_motion_blur_multiplier_list", + "moonray_type": "FloatVector", + "default_value": [], + "houdini_name": "local_motion_blur_multiplier_list", + "houdini_label": "Local Motion Blur Multiplier List", + "order": 39, + "aliases": [ + "local motion blur multiplier list" + ], + "help": "Per-point motion blur strength multiplier for each local motion blur region. If empty, defaults to 1.0. Must match the length of local_motion_blur_position_list." + }, + "local_motion_blur_strength_multiplier": { + "moonray_name": "local_motion_blur_strength_multiplier", + "moonray_type": "Float", + "default_value": [ + 1.0 + ], + "houdini_name": "local_motion_blur_strength_multiplier", + "houdini_label": "Local Motion Blur Strength Multiplier", + "order": 40, + "help": "Global strength multiplier for local motion blur application" + }, + "local_motion_blur_radius_multiplier": { + "moonray_name": "local_motion_blur_radius_multiplier", + "moonray_type": "Float", + "default_value": [ + 1.0 + ], + "houdini_name": "local_motion_blur_radius_multiplier", + "houdini_label": "Local Motion Blur Radius Multiplier", + "order": 41, + "help": "Global radius multiplier applied to per-region radius values, whether supplied via the \"radius\"/\"inner_radius\" point attributes or the \"local_motion_blur_radius_list\"/\"local_motion_blur_inner_radius_list\" explicit list attributes" + }, "use_rotation_motion_blur": { "moonray_name": "use_rotation_motion_blur", "moonray_type": "Bool", @@ -42524,7 +42813,7 @@ ], "houdini_name": "use_rotation_motion_blur", "houdini_label": "Use Rotation Motion Blur", - "order": 34, + "order": 42, "aliases": [ "use_rotation_motion_blur" ], @@ -42538,7 +42827,7 @@ ], "houdini_name": "motion_blur_type", "houdini_label": "Motion Blur Type", - "order": 35, + "order": 43, "aliases": [ "motion blur type" ], @@ -42568,7 +42857,7 @@ ], "houdini_name": "curved_motion_blur_sample_count", "houdini_label": "Curved Motion Blur Sample Count", - "order": 36, + "order": 44, "aliases": [ "curved motion blur sample count" ], @@ -42582,7 +42871,7 @@ ], "houdini_name": "primitive_attribute_frame", "houdini_label": "Primitive Attribute Frame", - "order": 37, + "order": 45, "help": "Which frame(s) do we take the primitive attributes from?\n\tO : first motion step\n\t1 : second motion step\n\t2 : both motion steps", "menu": [ "first motion step", @@ -42603,7 +42892,7 @@ ], "houdini_name": "use_explicit_shading_attributes", "houdini_label": "Use Explicit Shading Attributes", - "order": 38, + "order": 46, "aliases": [ "use_explicit_shading_attributes" ], @@ -42633,6 +42922,14 @@ "velocity_list_1", "accleration_list", "velocity_scale", + "local_motion_blur_position_list", + "local_motion_blur_orient_list", + "local_motion_blur_scale_list", + "local_motion_blur_radius_list", + "local_motion_blur_inner_radius_list", + "local_motion_blur_multiplier_list", + "local_motion_blur_strength_multiplier", + "local_motion_blur_radius_multiplier", "use_rotation_motion_blur", "motion_blur_type", "curved_motion_blur_sample_count", @@ -44045,6 +44342,20 @@ ], "help": "If \"result\" is \"material aov\", this attribute specifies a material aov expression to output. The expression format is: \n\t[('')+\\.][('')+\\.][('')+\\.][(SS|R|T|D|G|M)+\\.][fresnel\\.]. Where:\n\t\t is a label associated with the geometry \n\t\t is a label associated with the material \n\t\t is a lobe label \n\t\tR means reflection side lobe \n\t\tT means transmission side lobe \n\t\tD means diffuse lobe category \n\t\tG means glossy lobe category \n\t\tM means mirror lobe category \n\t\tSS means sub-surface component of the material \n\t\tfresnel means to select the lobe's or sub-surface's fresnel \n\t\t can be one of: \n\t\t\t'albedo' (bsdf lobe | subsurface) (RGB),\n\t\t\t'color' (bsdf lobe | subsurface | fresnel) (RGB),\n\t\t\t'depth' (state variable) (FLOAT),\n\t\t\t'dPds' (state variable) (VEC3F),\n\t\t\t'dPdt' (state variable) (VEC3F),\n\t\t\t'dSdx' (state variable) (FLOAT),\n\t\t\t'dSdy' (state variable) (FLOAT),\n\t\t\t'dTdx' (state variable) (FLOAT),\n\t\t\t'dTdy' (state variable) (FLOAT),\n\t\t\t'emission' (bsdf) (RGB),\n\t\t\t'factor' (fresnel) (FLOAT),\n\t\t\t'float:' (primitive attribute) (FLOAT),\n\t\t\t'matte' (bsdf lobe | subsurface) (FLOAT),\n\t\t\t'motionvec' (state variable) (VEC2F),\n\t\t\t'N' (state variable) (VEC3F),\n\t\t\t'Ng' (state variable) (VEC3F),\n\t\t\t'normal' (bsdf lobe | subsurface) (VEC3F),\n\t\t\t'P' (state variable) (VEC3F),\n\t\t\t'pbr_validity' (bsdf lobe | subsurface) (RGB),\n\t\t\t'radius' (subsurface) (RGB),\n\t\t\t'rgb:' (primitive attribute) (RGB),\n\t\t\t'roughness' (bsdf lobe) (fresnel) (VEC2F),\n\t\t\t'St' (state variable) (VEC2F),\n\t\t\t'vec2:' (primitive attribute) (VEC2F),\n\t\t\t'vec3:' (primitive attribute) (VEC3F),\n\t\t\t'Wp' (state variable) (VEC3F)\n\tExamples:\n\t\talbedo : Albedo of all rendered materials \n\t\tR.albedo : Total reflection albedo \n\t\t'spec'.MG.roughness : Roughness of all mirror and glossy lobes that have the 'spec' label" }, + "material_aov_secondary_rays": { + "moonray_name": "material_aov_secondary_rays", + "moonray_type": "Bool", + "default_value": [ + false + ], + "houdini_name": "material_aov_secondary_rays", + "houdini_label": "Material Aov Secondary Rays", + "order": 7, + "aliases": [ + "material aov secondary rays" + ], + "help": "When \"result\" is \"material aov\", this controls whether the material aov is evaluated on secondary (indirect) rays in addition to primary rays. Enabling this allows material aovs to appear behind refractive or reflective surfaces. Defaults to false for backward compatibility." + }, "lpe": { "moonray_name": "lpe", "moonray_type": "String", @@ -44053,7 +44364,7 @@ ], "houdini_name": "lpe", "houdini_label": "Lpe", - "order": 7, + "order": 8, "aliases": [ "light_aov", "light aov" @@ -44068,7 +44379,7 @@ ], "houdini_name": "visibility_aov", "houdini_label": "Visibility Aov", - "order": 8, + "order": 9, "help": "If \"result\" is \"visibility aov\", this attribute specifies a light path expression that defines the set of all paths usedto compute the visibility ratio." }, "file_name": { @@ -44079,7 +44390,7 @@ ], "houdini_name": "file_name", "houdini_label": "File Name", - "order": 9, + "order": 10, "aliases": [ "file name" ], @@ -44093,7 +44404,7 @@ ], "houdini_name": "file_part", "houdini_label": "File Part", - "order": 10, + "order": 11, "aliases": [ "file part" ], @@ -44107,7 +44418,7 @@ ], "houdini_name": "compression", "houdini_label": "Compression", - "order": 11, + "order": 12, "help": "Compression used for file (or file part in the multi-part case). All render outputs that target the same image must specify the same compression.", "menu": [ "none", @@ -44142,7 +44453,7 @@ ], "houdini_name": "exr_dwa_compression_level", "houdini_label": "Exr Dwa Compression Level", - "order": 12, + "order": 13, "aliases": [ "exr dwa compression level" ], @@ -44156,7 +44467,7 @@ ], "houdini_name": "channel_name", "houdini_label": "Channel Name", - "order": 13, + "order": 14, "aliases": [ "channel name" ], @@ -44170,7 +44481,7 @@ ], "houdini_name": "channel_suffix_mode", "houdini_label": "Channel Suffix Mode", - "order": 14, + "order": 15, "help": "When processing multi-channel outputs, how should channel names be suffixed?\n\tauto : a best guess suffix is chosen based on the type of output\n\trgb : .R, .G, .B\n\txyz : .X, .Y, .Z\n\tuvw : .U, .V, .W", "menu": [ "auto", @@ -44193,7 +44504,7 @@ ], "houdini_name": "channel_format", "houdini_label": "Channel Format", - "order": 15, + "order": 16, "aliases": [ "channel format" ], @@ -44215,7 +44526,7 @@ ], "houdini_name": "math_filter", "houdini_label": "Math Filter", - "order": 16, + "order": 17, "aliases": [ "math filter" ], @@ -44243,7 +44554,7 @@ "default_value": [], "houdini_name": "exr_header_attributes", "houdini_label": "Exr Header Attributes", - "order": 17, + "order": 18, "interface": "Metadata", "aliases": [ "exr header attributes" @@ -44258,7 +44569,7 @@ ], "houdini_name": "denoiser_input", "houdini_label": "Denoiser Input", - "order": 18, + "order": 19, "help": "How to use this output as a denoiser input", "menu": [ "not an input", @@ -44279,7 +44590,7 @@ ], "houdini_name": "denoise", "houdini_label": "Denoise", - "order": 19, + "order": 20, "help": "Run optix denoiser before writing to disk" }, "checkpoint_file_name": { @@ -44290,7 +44601,7 @@ ], "houdini_name": "checkpoint_file_name", "houdini_label": "Checkpoint File Name", - "order": 20, + "order": 21, "aliases": [ "checkpoint file name" ], @@ -44304,7 +44615,7 @@ ], "houdini_name": "checkpoint_multi_version_file_name", "houdini_label": "Checkpoint Multi Version File Name", - "order": 21, + "order": 22, "aliases": [ "checkpoint multi version file name" ], @@ -44318,7 +44629,7 @@ ], "houdini_name": "resume_file_name", "houdini_label": "Resume File Name", - "order": 22, + "order": 23, "aliases": [ "resume file name" ], @@ -44332,7 +44643,7 @@ ], "houdini_name": "cryptomatte_depth", "houdini_label": "Cryptomatte Depth", - "order": 23, + "order": 24, "help": "Number of cryptomatte (id,coverage) data sets to output" }, "cryptomatte_output_positions": { @@ -44343,7 +44654,7 @@ ], "houdini_name": "cryptomatte_output_positions", "houdini_label": "Cryptomatte Output Positions", - "order": 24, + "order": 25, "help": "Whether to output position data per cryptomatte id" }, "cryptomatte_output_p0": { @@ -44354,7 +44665,7 @@ ], "houdini_name": "cryptomatte_output_p0", "houdini_label": "Cryptomatte Output P0", - "order": 25, + "order": 26, "help": "Whether to output p0 data per cryptomatte id" }, "cryptomatte_output_normals": { @@ -44365,7 +44676,7 @@ ], "houdini_name": "cryptomatte_output_normals", "houdini_label": "Cryptomatte Output Normals", - "order": 26, + "order": 27, "help": "Whether to output shading normal data per cryptomatte id" }, "cryptomatte_output_beauty": { @@ -44376,7 +44687,7 @@ ], "houdini_name": "cryptomatte_output_beauty", "houdini_label": "Cryptomatte Output Beauty", - "order": 27, + "order": 28, "help": "Whether to output beauty data per cryptomatte id" }, "cryptomatte_output_refp": { @@ -44387,7 +44698,7 @@ ], "houdini_name": "cryptomatte_output_refp", "houdini_label": "Cryptomatte Output Refp", - "order": 28, + "order": 29, "help": "Whether to output refp data per cryptomatte id" }, "cryptomatte_output_refn": { @@ -44398,7 +44709,7 @@ ], "houdini_name": "cryptomatte_output_refn", "houdini_label": "Cryptomatte Output Refn", - "order": 29, + "order": 30, "help": "Whether to output refn data per cryptomatte id" }, "cryptomatte_output_uv": { @@ -44409,7 +44720,7 @@ ], "houdini_name": "cryptomatte_output_uv", "houdini_label": "Cryptomatte Output Uv", - "order": 30, + "order": 31, "help": "Whether to output uv data per cryptomatte id" }, "cryptomatte_support_resume_render": { @@ -44420,7 +44731,7 @@ ], "houdini_name": "cryptomatte_support_resume_render", "houdini_label": "Cryptomatte Support Resume Render", - "order": 31, + "order": 32, "help": "Whether to add additional cryptomatte layers to support checkpoint/resume rendering" }, "cryptomatte_record_reflected": { @@ -44431,7 +44742,7 @@ ], "houdini_name": "cryptomatte_record_reflected", "houdini_label": "Cryptomatte Record Reflected", - "order": 32, + "order": 33, "aliases": [ "record reflected cryptomatte" ], @@ -44445,7 +44756,7 @@ ], "houdini_name": "cryptomatte_record_refracted", "houdini_label": "Cryptomatte Record Refracted", - "order": 33, + "order": 34, "aliases": [ "record refracted cryptomatte" ], @@ -44457,7 +44768,7 @@ "default_value": [], "houdini_name": "camera", "houdini_label": "Camera", - "order": 34, + "order": 35, "interface": "Camera", "help": "Camera to use for this output. If not specified, defaults to the primary camera." }, @@ -44467,7 +44778,7 @@ "default_value": [], "houdini_name": "display_filter", "houdini_label": "Display Filter", - "order": 35, + "order": 36, "interface": "DisplayFilter", "help": "If \"result\" is \"display filter\", this attribute refers to a display filter object which is used to compute the output pixel values." } @@ -46531,6 +46842,133 @@ ], "help": "The color to use for materials or map shaders that are unable to execute shading, usually due to incomplete initialization." }, + "fatal_bool": { + "moonray_name": "fatal_bool", + "moonray_type": "Bool", + "default_value": [ + false + ], + "houdini_name": "fatal_bool", + "houdini_label": "Fatal Bool", + "order": 106, + "aliases": [ + "fatal bool" + ], + "help": "The bool to use for materialx map shaders that are unable to execute shading, usually due to incomplete initialization." + }, + "fatal_int": { + "moonray_name": "fatal_int", + "moonray_type": "Int", + "default_value": [ + 0 + ], + "houdini_name": "fatal_int", + "houdini_label": "Fatal Int", + "order": 107, + "aliases": [ + "fatal int" + ], + "help": "The int to use for materialx map shaders that are unable to execute shading, usually due to incomplete initialization." + }, + "fatal_vec4f": { + "moonray_name": "fatal_vec4f", + "moonray_type": "Vec4f", + "default_value": [ + 0.0, + 0.0, + 0.0, + 0.0 + ], + "houdini_name": "fatal_vec4f", + "houdini_label": "Fatal Vec4F", + "order": 108, + "aliases": [ + "fatal vec4f" + ], + "help": "The vec4f to use for materialx map shaders that are unable to execute shading, usually due to incomplete initialization." + }, + "fatal_rgba": { + "moonray_name": "fatal_rgba", + "moonray_type": "Rgba", + "default_value": [ + 1.0, + 0.0, + 1.0, + 1.0 + ], + "houdini_name": "fatal_rgba", + "houdini_label": "Fatal Rgba", + "order": 109, + "aliases": [ + "fatal rgba" + ], + "help": "The rgba to use for materialx map shaders that are unable to execute shading, usually due to incomplete initialization." + }, + "fatal_mat3f": { + "moonray_name": "fatal_mat3f", + "moonray_type": "Mat3f", + "default_value": [ + [ + 1.0, + 0.0, + 0.0 + ], + [ + 0.0, + 1.0, + 0.0 + ], + [ + 0.0, + 0.0, + 1.0 + ] + ], + "houdini_name": "fatal_mat3f", + "houdini_label": "Fatal Mat3F", + "order": 110, + "aliases": [ + "fatal mat3f" + ], + "help": "The mat3f to use for materialx map shaders that are unable to execute shading, usually due to incomplete initialization." + }, + "fatal_mat4f": { + "moonray_name": "fatal_mat4f", + "moonray_type": "Mat4f", + "default_value": [ + [ + 1.0, + 0.0, + 0.0, + 0.0 + ], + [ + 0.0, + 1.0, + 0.0, + 0.0 + ], + [ + 0.0, + 0.0, + 1.0, + 0.0 + ], + [ + 0.0, + 0.0, + 0.0, + 1.0 + ] + ], + "houdini_name": "fatal_mat4f", + "houdini_label": "Fatal Mat4F", + "order": 111, + "aliases": [ + "fatal mat4f" + ], + "help": "The mat4f to use for materialx map shaders that are unable to execute shading, usually due to incomplete initialization." + }, "stats_file": { "moonray_name": "stats_file", "moonray_type": "String", @@ -46539,7 +46977,7 @@ ], "houdini_name": "stats_file", "houdini_label": "Stats File", - "order": 106, + "order": 112, "aliases": [ "stats file" ], @@ -46553,7 +46991,7 @@ ], "houdini_name": "athena_debug", "houdini_label": "Athena Debug", - "order": 107, + "order": 113, "aliases": [ "athena debug" ], @@ -46568,7 +47006,7 @@ ], "houdini_name": "debug_pixel", "houdini_label": "Debug Pixel", - "order": 108, + "order": 114, "aliases": [ "debug pixel" ], @@ -46582,7 +47020,7 @@ ], "houdini_name": "debug_console", "houdini_label": "Debug Console", - "order": 109, + "order": 115, "aliases": [ "debug console" ], @@ -46596,7 +47034,7 @@ ], "houdini_name": "validate_geometry", "houdini_label": "Validate Geometry", - "order": 110, + "order": 116, "aliases": [ "validate geometry" ], @@ -46610,7 +47048,7 @@ ], "houdini_name": "cryptomatte_multi_presence", "houdini_label": "Cryptomatte Multi Presence", - "order": 111, + "order": 117, "help": "Determines whether to record presence bounces as separate cryptomatte samples." } }, @@ -54932,6 +55370,42 @@ "order": 17, "help": "vec3f type user data values for motion step 1" }, + "mat3f_key": { + "moonray_name": "mat3f_key", + "moonray_type": "String", + "default_value": [ + "" + ], + "houdini_name": "mat3f_key", + "houdini_label": "Mat3F Key", + "order": 18, + "aliases": [ + "mat3f key" + ], + "help": "key name for mat3f type user data" + }, + "mat3f_values_0": { + "moonray_name": "mat3f_values_0", + "moonray_type": "Mat3fVector", + "default_value": [], + "houdini_name": "mat3f_values_0", + "houdini_label": "Mat3F Values 0", + "order": 19, + "aliases": [ + "mat3f_values", + "mat3f values" + ], + "help": "mat3f type user data values for motion step 0" + }, + "mat3f_values_1": { + "moonray_name": "mat3f_values_1", + "moonray_type": "Mat3fVector", + "default_value": [], + "houdini_name": "mat3f_values_1", + "houdini_label": "Mat3F Values 1", + "order": 20, + "help": "mat3f type user data values for motion step 1" + }, "mat4f_key": { "moonray_name": "mat4f_key", "moonray_type": "String", @@ -54940,7 +55414,7 @@ ], "houdini_name": "mat4f_key", "houdini_label": "Mat4F Key", - "order": 18, + "order": 21, "aliases": [ "mat4f key" ], @@ -54952,7 +55426,7 @@ "default_value": [], "houdini_name": "mat4f_values_0", "houdini_label": "Mat4F Values 0", - "order": 19, + "order": 22, "aliases": [ "mat4f_values", "mat4f values" @@ -54965,7 +55439,7 @@ "default_value": [], "houdini_name": "mat4f_values_1", "houdini_label": "Mat4F Values 1", - "order": 20, + "order": 23, "help": "mat4f type user data values for motion step 1" }, "rate": { @@ -54976,7 +55450,7 @@ ], "houdini_name": "rate", "houdini_label": "Rate", - "order": 21, + "order": 24, "aliases": [ "rate" ], @@ -55696,6 +56170,158 @@ ] } }, + "VdbVolume": { + "moonray_name": "VdbVolume", + "moonray_type": "Volume", + "parms": { + "label": { + "moonray_name": "label", + "moonray_type": "String", + "default_value": [ + "" + ], + "houdini_name": "label", + "houdini_label": "Label", + "order": 0, + "help": "label used in light aovs" + }, + "bake_resolution_mode": { + "moonray_name": "bake_resolution_mode", + "moonray_type": "Int", + "default_value": [ + 0 + ], + "houdini_name": "bake_resolution_mode", + "houdini_label": "Bake Resolution Mode", + "order": 1, + "help": "Method to specify grid resolution of baked density grid. Choices are:\n\t\t\"default\": For shaders that are bound to vdb volumes, use vdb resolution.\n\t\t\t\t\t\tFor shaders that are bounds to mesh geometries use 100 divisions\n\t\t\"divisions\": Specify number of divisions.\n\t\t\"voxel size\": Specify voxel size.", + "menu": [ + "default", + "divisions", + "voxel size" + ], + "menu_values": [ + "0", + "1", + "2" + ] + }, + "bake_divisions": { + "moonray_name": "bake_divisions", + "moonray_type": "Int", + "default_value": [ + 100 + ], + "houdini_name": "bake_divisions", + "houdini_label": "Bake Divisions", + "order": 2, + "help": "Divide widest axis by this many divisions" + }, + "bake_voxel_size": { + "moonray_name": "bake_voxel_size", + "moonray_type": "Float", + "default_value": [ + 10.0 + ], + "houdini_name": "bake_voxel_size", + "houdini_label": "Bake Voxel Size", + "order": 3, + "help": "Size of voxel in world space" + }, + "surface_opacity_threshold": { + "moonray_name": "surface_opacity_threshold", + "moonray_type": "Float", + "default_value": [ + 0.5 + ], + "houdini_name": "surface_opacity_threshold", + "houdini_label": "Surface Opacity Threshold", + "order": 4, + "help": "Accumulated opacity that's considered the 'surface' for computing surface position and Z" + }, + "opacity_gain_mult": { + "moonray_name": "opacity_gain_mult", + "moonray_type": "Rgb", + "default_value": [ + 1.0, + 1.0, + 1.0 + ], + "houdini_name": "opacity_gain_mult", + "houdini_label": "Opacity Gain Mult", + "order": 5, + "aliases": [ + "opacity gain mult" + ], + "bindable": true, + "help": "A multiplier applied to the volume density" + }, + "color_mult": { + "moonray_name": "color_mult", + "moonray_type": "Rgb", + "default_value": [ + 1.0, + 1.0, + 1.0 + ], + "houdini_name": "color_mult", + "houdini_label": "Color Mult", + "order": 6, + "aliases": [ + "color mult" + ], + "bindable": true, + "help": "The albedo of the volume" + }, + "incandescence_gain_mult": { + "moonray_name": "incandescence_gain_mult", + "moonray_type": "Rgb", + "default_value": [ + 1.0, + 1.0, + 1.0 + ], + "houdini_name": "incandescence_gain_mult", + "houdini_label": "Incandescence Gain Mult", + "order": 7, + "aliases": [ + "incandescence gain mult" + ], + "bindable": true, + "help": "A multiplier applied to the volume emission" + }, + "anisotropy": { + "moonray_name": "anisotropy", + "moonray_type": "Float", + "default_value": [ + 0.0 + ], + "houdini_name": "anisotropy", + "houdini_label": "Anisotropy", + "order": 8, + "bindable": true, + "help": "Value in the interval [-1,1] that defines how foward (1) or backward (-1) scattering the volume is. A value of 0.0 indicates an isotropic volume." + } + }, + "folders_sorted": [ + "Volume Baking", + "Volume" + ], + "folders_with_parms": { + "Volume": [ + "surface_opacity_threshold", + "opacity_gain_mult", + "color_mult", + "incandescence_gain_mult", + "anisotropy" + ], + "Volume Baking": [ + "bake_resolution_mode", + "bake_divisions", + "bake_voxel_size" + ] + } + }, "VectorDisplacement": { "moonray_name": "VectorDisplacement", "moonray_type": "Displacement", diff --git a/houdini/otls/Vop::DW_MOONRAY::AttributeMap::1.hda b/houdini/otls/Vop::DW_MOONRAY::AttributeMap::1.hda index 48ef3d76bc277963b0b59f5c9c5378cf52926ab2..997e3061e69d8e44a7d32285f93df77662682ae8 100644 GIT binary patch delta 1357 zcmbPlztdoX2J4fomR+V3btO5UFaQCV2A!1_r^eKq&*L5^m>wpcDX`eLz7TKxGa;JVf`7-lPy=3_BTQ6K3>X%-OntCr{ZC*{Rb%(xv@F90==&m5K?%BVx zE+44o{!zp>AcfW%+L8-FaPgXY<^Cm3vbML?Nu3>&wgW7 z{i=7j_jX;lo)@lOuyN{IRkw{VYp+*-cVe1y{QYD8!nOQi2^TA0E}WpUH1r|YlB1gh zPTTm42e5~)h`Y~M8p&0<>AQ5Y@LRK0AKm`nId#eV`Rk&p*w>k?YqwlKwy!kU;$lHX zWZPs>*FcB-ibE&ouMgXw^zhM3{mvPB?d3e?N2YG8fA^v7(A5pSSHk!12|Ae;Er0l_ zUD&dmmQN+>!SAQ=e%EMvyZXiLt65*8BH67RIalqotJ?JJF{5$e_1FFD_TRa;?#sP5 zQmfwkFaGkvSpQh&6nP0|)5Xs&e0_XI!`4URFYB4*Z#K{HZ@ziq#G{7Lxm$9-*wt;H z>z|mgu`PSL-#@=2^(s3a&+B+H|K#_{moJ~>FI3hKbxvVCEzxs=X_~RbMAn>R2`*wA zESm)*4~X%&r7&uPWVWRkC~@EL2l6X+vzG7g6mSd^IW}cVa4VPKlaz%{ES9k=1RVV& zv|J_xw*iHgfP`{ELNZ!MB+t)uZsjO?7NFSlrky9b-tQQkKgTkpLm{0{ROtkYko+%H ziB0hVJ(iZ3>fl;`>_ymt&}w(b;Mp0AVxTk5$pBqu+zxcvnT7R0rvb&}|6<5MBpkmT zoMD)L4#hzriymFJ$L@kUi(lfeHq>aOy=;tMF+b+dPc`9SL)~XDn{^L#?71P$p{G!@ zg{@^P|6Udo8H;sG;@|Z)#0A%`5nZ64<7*mQCzkC{os|A4c`cs~qpbbP58fSefgF76QlO*vZ()d{Jprky86ZX MNQa{EHBt-=0Q2ulR{#J2 literal 8095 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 KP17nV1_l89^+wbH delta 3314 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 Z?0)@zy7}_r#fu+U>&6`1wMmMB0RXFWT?+sJ literal 6807 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 qt*5;@oodMhcRVZAm7clRPF7Iytl}| z1cAWQ&m{uF0+TG0;~B-{xuF_)oQqNuOHzZAi!uvJ7#O&@foAzZ<%B)+N>YpR5_8-# zb5i{aN;32FiWwMqB7w#jK$UPi=L6N`l@#lxR{^Cu85mepK~kHunT|5Cm8B+^G0&zK5 zv>>r47ghyu*kxZ|tD;&vCH2|oW(^_Lf33Qr zvvcj{cmK~b&x}ghY;u;{P`|)jx_?Gy@aoq6??S(v`|@$2uDJ4)^;wy{A1}L^+i}^d z^b5au{N>Bf`0nuhdwcAve|>-Xa&y?rUsGFdnY>%FKJ3)hEKc{X=Ho`UpFG`jqlfiY zpVsA4uisC8SiI}auBlHhQChJ7RK{AZ{54_W`&KSYyLpP6J=rrVc(4DNqM0QHTcdO; zuYO(og{yqpg|d9<43jspk(IrzpI^sWwIAJ8Sny-ltwWmH-A6-n@!<<^6niR@KcHnY?RDrXSl^9&B;3pdz$&vS@0gQ+~yv zlk@Y%_a{Dl^F6(D#=IPR!#e`uHe5=C>AwSJZW26ox!0#T z*zC??j&1Ub=8Jb9wN90N!J@k2*T)B)v-;W39PwShf7ipB+TE9;jkBX`tEHB*&#$!f zTU>KqVufU=!}agRi@%gPy?mcw_w@denp?AYd(V82xaxh|RsJ#m>z^WQV%a;&UOt)c z;?rbZ|8Aqlzqx;mEbZpm^h8&#i&El_IF{fdwqee}4xI#JHswtXqC9RXjI)g;CbF(c zF;L>Z!PzVrc|gukV&cQMVt4+kIk7|rN(2Y_iE6n_nB2-G_@rc^6N_cy3IRtyNsv$* zP-qKCsBncqx=lKtsM3j<&aE7q_$80c=`pTv2TGp-Nf!fkoRb0SFh&-V|24-lq(cFr zEk2;f(h|-sdKRGAgrefd-t!>i(IocWF?e>y0*e*(K(YA0*knM8za5=nxcmWz^FF?v zkK#zUyX|HFaF_0`(MWqaFMh@U-9J7Dt1U~45_>sU_dv&5VTDF$&W!Yj| z5aW4Qk}-DgvZ{D(hx<2YW&L_FJA(O^ptW#(_SSUH7au%r*R8lW>xy~oz1wsAjx%pQ zJ7*pnYwnbzkDb--@x6WbPm;+t&+5u4_xA03Hhbvan`is?@zd_jix)3`!F^d+vUG(M G0|Nj|=0M8; literal 6647 zcmc&(Pj4H?6<6Q@2G=nVw50iBOS(W&&uAPLD*l+)vT3&|5x2u00gJ^j4sspojiuc6Pa>DBCR(cms>O@4b2N&HFd+P4+vj zuU2Ny4ZPmo@3h)q1;_2(-hQ{^aNqO4{^LJ*|H)WPLmu zQ><`gP5ZS#sK=72v53N8!sC+P%Rb2=kFO`C7jvZa!nYe2Q(f5QgeD~ zytV|oQ<{esHd>z}PZ4f&^K0g}b1e?~1E=^Xrg|z_$#1bCokp7M8#gJx6sF&$mn3yr z_5%kHYvH-SeH9Li6o^mBFYc39Y3!tC5ob(F9x|0NwFb6b|K-1HR-#i1g&-l2?x(JE(1gkfpeB>dW3tKo`YvKqS_84!Vla6K z8>o3qWSU>QB2s)hZ9JHJZy2EnLp@nLcMMb}7{)s5XScS2kbC4!Kufn<@6=M$lZfo(avZv2Yr_ zy*ZW|V}D3AO37m7h?r79(3s#TW`CH{h`?5QjG~g7Zi8@5&UqA(!B_~D6(ei8nbLEX zDg^KkQgjN2%FbG2jAe!@;@=oID7>@y&Qt9gLyc@(DpOm%**>p}q=M8R#6D;>W}e8c zG6&6UffJmKn9Q??$7ft|1Vs*sh2@Zc7xS!WuQ`ujbIvFn_`{1vBkd0ZuH0c$D>5pW zV1eFX%o&X12~EV?uQ8j&8e1>!XUkrBukMoO^7h%a-`+P0$7?Jw#Zg7J(9hoW?h;}L z5=;O~n)F7)HOxT|GF8w-cW&BrGoeuQx?tepxV}gHPpBLr-nO=g?~^r?im^2@LspTV zNjEnF;LSJ*{dP#81tkL$cr)?ostc|?(D0!L4Lc%a#0ntyT=Sn!m`jyg^Pt^DA|o^k zQ;J@ptjO32w@iSaDkjYcL&`B(MTh2QAiS-T@)=oOO~rY~^o$+DP3#F=rAT9o)V}a` z$82zlsmhK923G&V67COR!}RmZZ+WsS%r>=M1&Ztwb5(+-+>Bhtrf$JW9ErhcH%^B` zC&)kR3Sh3xaNi|!X8TSPpOY{)NK zm^l*`8pMGal$@+9$d2h4Q#~w`$5Kq54m0x2M;DU_owA)LxBPkqdBEanA#G9sTnZ0;qc9m%jGmkhL}@vR>hj~SP^6w?j7t9OwbsZb!SX%pn{92 zPbJ>W(Pq9>#UuL~6k-~M2yspNjG*d=WfpP_kmMWzX(~O!ug^?#fe;8u|I$P%p$YC3 z1~v-8rz13jj4{2C4gC|GeQ=%XPTQU2okaBt3%nF-E zQ`>cK`Je2ynnA1mxOsBW3wqt|fuGiUhdF5Ov;pEUg@f$xc00Z?7WkN2-otRZz4`I; z-Bz>LeE#Ca_GUE)&!|q04jjU~rEsIgA^IpAMHeUt*v*!I#@RWOP6A{YCqP7pX%nW~ zPrFYxs|&D{U3G!qYo)|!PlPcpm1HG^A5DgELKKH?gULQ|n$s<&Q+IyQNR&8ccLivEvPd;6_cyR&5B zrmJ4*k1^DipIqv(i2Ydv@JS-1CTAis{+MbWDbFi@Rorbw59oWR=cw1npH*vdW9QX1 z508zbRE|wdYcZs3bs=YQ!DF5q$Z>D$-8`O`)jT#yG!hwh@jRS>V<8)vU&%ysJ;g@* z=QKja##<;ctkP4VyaTEAgTb zz)Db|(A#4RrNCZn`8j{@otYz@>wSc7AXy>;+gUV-?{04cHx&CDHt-$Y1hr224e~tC z27~ww{*9;o3XS=s5}LR+NvkRYoc@_1s|$Q9SmSsbI8PMI(&&dTij;sgl)%59(E;>LS}K-{$bofK^;*s_Z`bnvTcZeP^P7&m|3P z6S-iyz2p5}yJ&-M?;velv(1>!$6P1|F%ERQI>T6|xFSOEE^tjFxX3nhK@pZm^}Imo zqI;g_>ix=thn0Gzo*~Ma$P7@;0Kvmw|Bt@ScUIgH+L(oXYmTNJ zTe+@aEYhc23kpnU^GrISz3^U*wN4t<>f|y!UzT{)5aUHeFRNc3?=@TPqvNVM)zlal h9_!`xV|yvB*3t2-<9{FwSU8oqw_eAE`?@>*{tG|?k81z` diff --git a/houdini/otls/Vop::DW_MOONRAY::CheckerboardMap::1.hda b/houdini/otls/Vop::DW_MOONRAY::CheckerboardMap::1.hda index b78d67255732da675922872d71dcd8186bb23d08..7765f664e4c9c87844bc4b8a2c042bc0cf434852 100644 GIT binary patch delta 1361 zcmextGF@$g2J45cmR+V3btO4JFaQCVnCB=H_RX{nQ>sYiwa+~{@1ew{&Qj<&aizaVl zwPMjR&@tHT#+Jx2c_owV}AslA4^Kmse6*kO~xmcm^z5 zkXV$9EGpm40aO44|DVphpLg3#q}}w*GO-QfFQ!gf{r1>mmD66#A`#blT^s)~Hf=j> zz{93|aic(|h{r0=fG?fjCRy9`rKW$i++8rCJFJnh%f7x=MYVQH>a+RB1692Ka7SyI z-LA0{|9>~{@|F{6nX|-`;vVE}vrSs&yH@Pqvha)Smyfq^i|JvXa&y(RYZCUkC65_3&URx5u^*!6uY7pC1j#m%1V85JC>mbTN! zYDb3dv^}qWg;lj$duQz4&TAs|ZQa^E2M_)9)t`Gf>8^!EO>FMebyJT%TD3D`>xanZ z=DglD8(%ze5B1hBWOut0EgE$xAg{Oe@&xDChxhGjn;cN8vF+KausE~V^^9e!^4jv2 zD}C8|^D1XdPO5ZgU=G`T{(E~TGCcjb{73Pf7kfn`O5&&XmoV>C(@>rhBu#Y-tPIrJbyQSH#amCNA`0ifiPw z3)1rnKK;A<$WrWF+@Dz;FHipHeArgMHCx8CqI6CvV6zX=c`mVHKg*mr7)hB>^Z??mTaKJ9dR(hMQnp* zvtZ-_FE-^(4RZ}7CbGWaY!;Nfmv``PzLLuX(N;s%ry&cSSS%w~2srwQYq?AiZsQVs zG6f`*2@;Y93AJ+-9xHwppx89WGNeP{cm0IKGbb&Ifzsz>fYQe8Kpkg5I*^4vE<8We zxs{^`p^f$EjL8U7()mP{PN1l`{~K&Ps>GYqyvgT!P_3wkS^M#7KdKB&LNF!1N3xg; z&V@Vg{y!8)!rlGh^TGWA$DcYIdVl}p^!NVJ`R+4kbY(^^`M!-o`BPE4!j6UyN2LU= z-TN+dq2fVunQCb|%a>WNoYykcCTFjDIeC2&Z-)CDpPH3d=cz6@tp2sk_3ODM``&&! z_^f1?t-bZxF~|$P1XTq)g~#%jpHzqTw0VZp%Q6Gl$^jZwnOfaoM^eT zo!Qk-45L>Cdfm6_U2lp!MjxPggkJPJv$IQzq8uk^k~IYGp8q*>=KPFzI_)o(rq6Y} zzPHn9Z+#IQY;E>-x*do6PX6QH|Hb>QvC2Xj%i1{Pk?d=(&jJ08s2s)ekxH7)_VZw` z+wJVPzHBxDsBezN;8^Is;yT>pAZX-lA6#>6*YN!g{%&7lU Yo>H;q=WGrO2@n9w zn)OS97TfXYE$JZnz0Owed3XPh2Z2^91)zAYLq_rLek;FYlib7t;T8(-&U)Mf`rWqV zks2Kgv`n1Xo8LO}cQ>`*sVHzazg=3ow*S@N|1tvKZ+qv7c&1e%bSj1ECaF}hft??K zsP?5fk3jU!wuoTdubz?}4tBGrRAg#qETUnKy8a)h@7G&rspd~)Bua6&J|;1a^~RCV z25Jxr4*%4OAKhAy4_z(r^B?v~>NS4t0aRrZ7|&8Q;i(+(C^}~&5ep5Ug`W4yV|Zdd5tX-) zV~KOsl{qaI74g1^D*hFr=X;h&i#QZ|!p(8T1%L&MvsCDqM`p}{W{q5z{YbHk6>GE{ zcoi8ZSz0*}gH-9tKt)Oit%|=%FRbM+#6K?Zk4wCa(@LC8f-Fd}m8Rl%vI#q6J^Hvr zbTUhHw16mu^_dpIKq-yW58py!F9)*CDX^66%(rU^7IN>ST87vYC)vi7gS@zrKs`oR%Q= zkP)T~d4keI=Y)POODW07Z!GkF32|Ovub98;mw&HIyyo$USYEMJ)>wrvNhm#JW6DRw z=#Fl)DNR6N$Z7bFG-r78f^ZUZnU@wcgZU8)f)QlM)ELt8(=KS{@GMx=g}hQMxmXyY zS&W1(T`{vW4-0P+j}008`q0%!c2q+)m}wZ8`E$m#FgP779Sh{KP--Mdl%c6bKfM!N zo|vjELzSFR=FOkU2}eJ_6BeYz1G_oIw(s!}463XwH z+=!|*4TrZ`l0o$!o;91fHv?&0$+{qDrn=416NU;h>IyoFS>XYRsp-?#)*8oU1;2j2kXuf9iiRGI6981VPiMgSRue?MrfLiST$zLXxH3u zg|}r^Jz>ksxjOHFpNIo&hIodpGOW4IRzLUbh=Os=&J_e}d~OMM2Jm72`Scr^Y${r2 zYPmpBd}3frP*Z7^BcD2k!#Gld<8GW!olX&H-{eTV;U;+?*S-t7LY8CR>LMqj4pv7HnYDvLsdc#2ZR#=urZC^3?< zQv@WFX!NOw!5)SX2wDH!7Av0M>SAD{5OO*y70^McF+ElDMo@7xJ&010v`z$I+u#q z60UHNoy~5?CuczpWpgU`8*3lF*lf3Ytrss}ZmiWy@RaIsf7c=CEr*j8d#JrOiq4P_ zu$p!MM2b_Pod)QjO@NAyNGVJ=j=Im*>T|GMTzyX78@0q}Ae277q^6r#E!Hc&*5lo+ zpw(#yoz~t~snwCZNhvvp9_#3XtWO=rM*BH)d1B3)TEMNKoPM4|j%3Os)-uSK=B>Gq z$0pCQI8$#$(U0KT-f6eDItv)rT=vR;$WiNla-NRShEF3vP7oFYJ`rMht%@IA?@n3GR?5i{wa@;vGEpaOs@P`8E==HlD)V3Lb$Tz655Ng3Bzjx6kP7ULnP1BHeld6CL%xsD4YWv9U^|N@ z^WDvH;6`izo(+6QH$kp5ev`c@PXi(TfWL9puklz;Y9Yln9a>Wxp!ye%tk213xvhDr_rNGIHbhgn7Ov#o;PL%awc*(0EW= ztv&qo(;3^Wj(llEvA}vuVN|9E!tSLOQ9a>-TG)Jg7BljRH|ER2G1G z0SF%a{s-=Dxw6?6p^ceacPi1eV<}f9jCuNeX~B%p={%E99521s<1|g0_4?#IJY96~ z>LJF9h@aP=9&ESTTl)ufs%mB|V{x~7_rTt0o4e?E?&5zY1|rNfF1_#KCjYLhe*Xi1 Cs>-MU diff --git a/houdini/otls/Vop::DW_MOONRAY::ClampDisplayFilter::1.hda b/houdini/otls/Vop::DW_MOONRAY::ClampDisplayFilter::1.hda index bcac2440a7b2bd9f812113191ca36d96f193dd24..f8b1dff7b603f1929c9b736a5475b38ba5453cb1 100644 GIT binary patch delta 1366 zcmZoLT(2}igY|z_%P!N2x{{p#8Gr!H@i!C%a`=~nI6yH*AZDF7@l8F558?oUr=Lp% zgasy9fFzGgW@1i$dT?@4Wam-`IY9;~Ssab2>697qtu=K3;dP54z+YnYQn*D2vi@ z`~63gHv29Q{&@ebR`2E%q2rlq%Ou~a-Bwn+H6`m^*jlc8v(0R_Jk7CCI6rOamSZ~# zmuidukXytq_{DIx?O%iXug}iDzU==0Oqzez%`N_`*R6f}sxs6%HGQ*1&JyiutF*5& zNfdrqp>}w|vcoGDyj@`6yLd}?eP93KYb8@x_w=!R371$K`mpEft4pD(S9G!}?;VU- zbW3Eu(&h*k-k9xD-hQSARm%&~8FRO9YjXR0Z|PKRojGfxZk9&qTvzW-U0t$LM{N4l zpPSmwOT8)0P3b)9R~NRlM5sLB$lB0-s=QBcMOg6OyngQeYHth9&|gWpdR|Xcw#wBf zEIzd=zf7wpes-+v!J}c@CP}m|E6;tu>$=balRrXryxM!WGj-3M%*PcN67h7s!<_j~ z9;x^~mU;DnE42G+z;u-W_3G^=W|!^;T|M`ry;o<>o0!lZeJxwPg;Sp$y5WCU!taWF zoXEcv*Llw`NY5+y^6u>)PBFiDo4zAIQhu})IM?qw6sCJGV29MUX}|VNf36j^?zQud zJME{YyzdncE%8_$boqffrWw)8t9<91w9b3O`U+l-N zmS!RG^W8okOrMv(JaAV!&y}823tr!z8CW$V;FtIe|Cj!T^Vv2pocL01byVi;2i`v_ zZRh_v;KX}fPp=Nd>%tbAkFEGT&|@8I2hC6@`Jt%j=4LKZr)SVpc8aP$+` za+x69#wGY<3P>muBqR+IYUe6ER{ShLv1yKFNQc7j`U#0=JS~cW(&uD=(#GvT9cMr~ zkcB=jJU`R9m7@rujrHh^$p~&bpQzFa6czV>gN;X(cypRJ`CJRC74xIdu%sk33{_dia5?;o9SFJvh8*rq!_htX}x&vOn1 zj1SvQ71r#1sk-3df#kPdug-D2Fui&^it*RcYax$++aHy>(08NrN8oB(Z-;jOS8uys zZS}0Z`gHBtmlf3sn`T~4UcZ2MQo-*Dob3zm-m!OHaNM^&YUhIw)5^tG9=(0py?%d9 TSyf4iNDX`18QbZbq!<_gp|MlZ literal 6272 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 E0JtGP9{>OV literal 5924 zcmdT|UvC@75m(@#4$ldk2F+9Zus#QnU7Ms>H%`Jxav4#Mgi53#QFaW+xGu>hxz+LZ zuzM#_5rn?>xo<^2N#FVr^3vyifTG`^1^S!aJ(8kmJ1vR^JwxW*%%&MZm4Q%P*RZ&__rIl|v$6B0VEAAF-8`HD*zYza zkJa$7r)BEZzVodYe|Jj@o{56@&bKQoZykL7hu;mc?!(SmDxPSS3Y|$|+G!?LVpdj4 ze}_=zxjBm=^!AR3;oOa%k{_OSqoY)8DrO|&fn#0!8|?i967O$MGR+^$SWMO3{1K_~ zORql_+Q7`p%1v_px_9OJmKu*m0`G7B7{-4OGDKEx^iLy|#ZjMU9J>FwvU2Uuo^_r4 zI?{0QC(j}I8?t|!IV6~|P_Tj0S8Jt6F6xBwJX2$y$sUj6Gd2{7&;Y9+1m^+6mGH4B zT}kYm0xRW=l?t+@#k?!xQn*-9VPLshBz>XB+#HvDk}X+GGNBV5n-K?_)tq+wkRekg z>!0ieC7GmoRyq;AOlkkHOQeD$ldROE?ckg$$b(pM&xpn{DTUT$wl9-#sR*A;MffDN z-l#mAGd<>M2|La&9>jcTygO@`XwH|~Rho5UDIK;!H*%QpEZ3qGHpPJFamH+*CM@;c zbLpHp92kOTHbVb@*YpSTJmgu+$pd!ba^NCSCqir47pBl>qdX5vQ51E>5Fk;B1f^2x z&f49j)cb4qU%^=_Un6<^oBrOl7QIv0P$`4;(4pJ5 z52@(SENh+&$;dfdW3@FPPj1jf5oLTxru+t|*QJSw>?}J`_y4QHw^cPWHVxla^^9JG zpQ+(67E>24M>}(E8l^~hHx{Pam&V>OYfmOarUr~4a24b+s4&(UNyBm@26@au>vSX%CMGFQaLf&@s(CakGuQunFwsVv>Aeh<}s7>7F4%0E60KHu6=A<0=EqK|EJ59&0NXo;$?ZtqoRV7c=kw2UQh~ zi-t$AEW$O9^xvAQC7qB zd2Wwhs=Dt}0R~-tFsawwVH!!}o699da~o_yo;cKK(T=c(=X3b_H54q?*xmD>SauOy z+-8mCvxc8lg0GFpSfViUa>G#Z!R_ESV|IGOxU^)Vsn`8<5p`hGL=B8GG}F*H$1xZ{ zK_Cb04huixdWbUI*kEDE?oz`^EX1NWQm$+Hc?nyRl7!);&)@}TJsKWo=H04^%mT>B zK>!b1sxO!|!0z}-$&KSnox2;ryGg2J91JtEdqZS>i}yyNzeNZ*>wAzZbos^m{8%*o=;G`j z8PPnP`V8xjmF~)ZJI|;D=NV757|2Nz13FGsV(igW>1|zMwrDJHepn@swHiMi6yocT zCgT|6kR84^!deCUKqNgyN6uftlOEssd_n0u#a*s(hx5%onM%NRGf1dB?xVyr8Wu+2mPKD;+IGi+ z%;-eu3OW)|0)1u=4#6-|#F)>?5cITECSYU4GnSpIMJK4M8iGN@g8XNw4r>tOy*h5D?8q zcp}BA(B1-UP!eFGB{C}0&8O`r>(vFCQ&(Nk_gX870Hpf(ikWt5tyok#jW71LqeiP4 zwHo`|Q>$L&bw&vsx-8I#c^CP~H=ECx?-T3R)q-vnIr+sEawsz%vxY&xG~as_`q=mx zf-}`d9RCNac6OW1?beco>%M!r9|CG4OwY2BO2SzM$Z@JPre&2pH+)E;kZ_T_IR-I!(2g7^gJ<6GfaTM zB?xc=j+Cw!d1d2FW;p`wp7IzS8+Uz;w-SD=Ot8mI#tsBc2r9vnXV|^_T(e)$n?(KN z&+2Ora9{h3m09>=ztwq(et?ybLZi3G7FvP*3J^~92R|4b?&U2+=|)R@R{ipDr_tO#IIPmCW=1j*_saJU?H4?A4-?Nld~NNCey;J6?;gHR-t(v5zW~Eb B$?X6D diff --git a/houdini/otls/Vop::DW_MOONRAY::ColorCorrectContrastMap::1.hda b/houdini/otls/Vop::DW_MOONRAY::ColorCorrectContrastMap::1.hda index 75015d88345244038023264e86b5af5517efc602..986aba6606b75004c7905e81ad0dce0ce0422db0 100644 GIT binary patch delta 1377 zcmZ2rdqZ!62CG0;%P!N2x{{m%3_t+p_?rm=IikBj9H1B@5VKC4_O~9y2XTPF)6XRW z!UB^lK$6ELGchMWJvg~2v!Dbb$Dau`g2%ZiHL)ZWCdZ!%G&Kh*C+wM5l3J9PnB$h2 zlj>hkl9``Z%)lUU6=;M3R0+3pK2VKRUP-ZDdKCkMAS(j{i#|wBSpj0{w<5oA3t80AM;pxu`uJ`P`7M}DI23=e=lpB zm8z{T+oPK4`&H5Kbn2ypPqs#UTJ<{mrKp_F!ngO#E@W8j+V+W!Tikqa314^V;|E_# zw}$Qt6YF06tmx{Y|57p~*(trQ>h`Omsyf*X9^G4YVN#pX8TpttnJD?btEMq6tDHBQ zhSzWXv?-E*LvX2aiM8m$^=B9QC2X3StKzm%vc|sRdlb`@6S~e zlD`l7K6E<#GE`JAY)UHU-iNH}@9*hdnDgY%&-I-%=GEu?Pu`)pZj*1nxk%dKZ9(yT zpMq3Zm)7!Ju3h1CljG@2w`B)4rQZdztbe~qUab3Qb*k(O7S$EM{yiw2-LHP;NbY+3 z-4By$cVDvR&W)}umt4voUumhgxaPdX3eix9>-?J+eJOK%nV(?$H2!GSty#RiXTC>V z^}g*o|55+zuOe(>_1QCamwXCWQadR7Jw&D6ziy6zWh;CGH!X&4Q5!<{3y#eE3%E&R;brmdHSf;2=LyEtd(C zTe$?Elq_^&u}oYc;OHj_5^4hqZ2<`tt`G>fN#_$)Ix(}}xs_v6zEO{*B!my-7Cj44 zY?@;k(xHGNwC`mxszjZG;j<^0>fl-*J-0(K03z|b;P4FN$7ev!CU|6Uy?=Iov5(Ku zEjpK~Z#M{5?lcy-TQ7%*4 zcO~n**oBAPRd)jSZeEeUyJmyw+&=ZR*`~Im3kDJe|u-@|fx1meV{>vFp7axwk ecXNqY{`vWPD}Mg|dGTW47yUH;Fvsmu3=9C3s7X8k literal 7840 zcmdT}-EJGl6=vX|1~(4U21t5Qv>mSl*se@cteZbZl1q!SEmR^6iMA6s#&*aZl2a{r z7Bfrz#4vhW^s;Z$yIvQ0hdw}`p+LVgJG)C!q#YM70w%iC%?6)~j$_%4|L1z@05-V09xl}16xQ(me3 z{GXM|rGL1o%Ouw$4H19wS782;_+Mk0C77|MU?Zj31vjmT1cV&pvs6uaDu+CZ&e&MQ zLc?~U=RNlro|sQX^)=|(MVTno6d6ZoI1@KC1 zp|=Z&vom|n{H9<0z9{Cca72F~6XEA_n*Cj+vWiPig}%KxV6JSc#^Xp7%+Kpq3RUPNVm^q3X@t_)7lti0 zvl#x`?o~o_wQOkraIGflgiU9|2~#8MFbemJilvG{ z1bDOL=ge?25i#?hGZnL|o2DY9zUB{v|cN*bjbYE5!b5gTtLGFORF@-O_d`jE`hpRwFet5b8iqg-k- zBcK!N8+LI2E|L;wFp4@`GhGaqRi-Tke z$lI1d0~|7Mql0k6SmK#;(A*`c!^K#XC8mszrI9GBiu8(=^=&bpE6dJpeC4UOx`;F= z+efFZR(697q@f)hmE<`>bG!TkKFv@ijTN{G%vT66Uqi}bjSaus`LY+@i)*aC{5I|` z_ujWgq%2lwH*v#IOnKM5YmC`;2WrYCEr3?b-LQi`c$%P%%Rb%uvpN)|{58*$BX)!N zpKv`!$-cSCe4pK<;v=>u7Q=~R{fRU=b-a<2a3c>Hq~MIo6)I_SAt}SesZ2fK$dLyL zyDAjSGGI4cFClA%Efwyj2kA}|9pM%*$qpR4h!C{ zv)VDcem!I79r9yw2xo|gaFt;#R6bvM+Y>Q7LeIuF4+z%$$|CM!t9Qfu-^ql|UbJWI zDq!S8bZrtX3^jDfrf$KbI8wu-UYxa_93$es&4&{aZj%Kv?t8$?X}QJw{77`%jWrVo zl~CufkQv`?rAlBJj&5G z?wn2|+;?raYSVAlkq4+?6}p_`P5)8;Y?;gx^fQMx3PGoIR_6(G`^1J7HHTY58UEr5IhHApSleK~ zG(UJ1_Oa;`C}$e&DEc2(J=pDZcDhRzZn)hm`$vY_^pmr6f=)yk0dkrsow8$XTG)a-ju#4y61e_?{%KgfwsZ3{3ba28W?AUkqf zyU#WIEuHwSPrq!f-^P3MOIBn4)BSG$8TJFL1Qs@Wdu(AVux)d{pzr-?=E%BpK0-Ip zB2j^@ELzNWpP2&J@$zrkz;}34>~+R(v8P2g(8TZYJDCmYJeJdXNO4U`YwAOs{<$F= z3v}yP<7kudUq$9Y_VH^e6)Vd#Cnp-C*2HiTyS+!v-;%BM_b41JgOx7-Y=DnDtY0_#m zrf1>Fvc#jda1!ye#{I(w?at1@VS`RJGm)`atF0Z{&sJs)70((zPY%&YM3>d9;d9=a HJN^C(=Pw~q diff --git a/houdini/otls/Vop::DW_MOONRAY::ColorCorrectDisplayFilter::1.hda b/houdini/otls/Vop::DW_MOONRAY::ColorCorrectDisplayFilter::1.hda index 8ad319e539de423f3025a5eedc85e5fbf6e7e6cc..e15e7312890a658f868791acad4be85d7612b00e 100644 GIT binary patch delta 1371 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 Ix83UZKbR@HhyVZp diff --git a/houdini/otls/Vop::DW_MOONRAY::ColorCorrectGainOffsetMap::1.hda b/houdini/otls/Vop::DW_MOONRAY::ColorCorrectGainOffsetMap::1.hda index e53391c84ccb27cbb6d6c2ab16da02174ae75e19..08f2fb14f1a791c8c9bb159622c7bfeabe98b3a4 100644 GIT binary patch delta 1369 zcmbQ@cFBB#2CGC?%P!N2x{{m{3_t+p_*)19IZ|364p58{h*>wzU}dZa34nM&;OXZQ z0bzkj79h#vl9`y3pB|iClvz*$krTcQHG{{wC^fMp6(%Qq8E9+)R8H74uOzi7FEPh0 zGbh!*pd>Rtub6>B)EQ`m0aOXMb3RawP+m!~UV0T!4k*uJ2$I`;fJu*qtt>UUB)@1f zE4vkoj)9KB=BezP`6u6IQlFe4-Z>kIW}0n{`Y}7sHQ!fW{#KFUv(2HpYYppey*TE+ zu>DCPQ|+92cE7VfzIyZK>(9yM%a{B6X1@teUc2fK_stiZpI*}Z?{z3M^Nwfy+9|8A z3I!B?c#t-G&m8gD2OV$M2d3`w%bYJGe|&FYZ+?#-%a?G;wTThOvP$31mdcv8c29}H zv?Zoje;?7A?#X`ndeX_&>++X|S8Qn6R(;!H@xvFlPD$&;-1&0JQs-K4^X2PT!(K*3 z>a3e}I+Xjpsl|(HC#1Ul>H@ZY5#mocvNv?0DsSox#~nPDTkK?3XYb$$ZBMGtUYGSW zb+cT;@>gju%Cwx~XFJb5kfMFtqbJGuN8N{aTUj*v?T^iWMpysmv$k`a#}u>C|`ash4;Hg)AjO;{oO|&t=+^|(j*j8TmRwI+2g`#kG5Tpzgw_z zU+l}dOSi4vx4Y+3^ZGq9(*yUV^IYlDTJX9(GO%j*f-mM9=6zb9WSe`o&FxwBnpaET zF6#f-{G}NiiNaq7OZ6?TR zKry>tFc~z7rZ>%o$$kf6>OgwIDjr?7M=<~{QD^l-{8icSfHRkD_Xq6X@$<8@+Oni5 zv6p*u4|MFgBgv7cP_vD_C3EZdy{ubo3-5T|m1Nwz{8xar!~GlcvVOf-eS`UyptbP) z?5*kCFFv^1zFToG^2+vDyBo9ojtg%-J8K>rYwnbzkK29r$lm(<*O;a1PRWX?{e1bA d>64@OSk`~~)c^dsySw|vdNt9`_?=P=3;@x%R~i5S literal 8980 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 XX9a%<(PQBl*B@#He>kw>R=@uP&B8zO diff --git a/houdini/otls/Vop::DW_MOONRAY::ColorCorrectGammaMap::1.hda b/houdini/otls/Vop::DW_MOONRAY::ColorCorrectGammaMap::1.hda index 7372c3a28da6c39e786670a65e28832ca26acfaa..f8a8171700b6227c255415cd007a02f1c6116171 100644 GIT binary patch delta 1372 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 diff --git a/houdini/otls/Vop::DW_MOONRAY::ColorCorrectHsvMap::1.hda b/houdini/otls/Vop::DW_MOONRAY::ColorCorrectHsvMap::1.hda index b5b1d15cf18145fcc546b45c317c5d66f2de6eed..c1f3aea3efddd395b48cdabf63749d462fd5c8b5 100644 GIT binary patch delta 1344 zcmca>)1fy(gY{2V%P!N2x{{oK7=QrG@i!C%azvX!9H1B@5VKC4_);3g2XTPF)6XRW z!UB^llP5BY$J;|S@HiKxCYGcICl_TFlrS*x+XKx=g31Yd=9Q!t?#xg@`6@?JJ8799f} zgU!C|F5HuMFeyx4DbzSwj8S>AtFTW!&@?6np1k~&)a3lUypqa-RG0r@<#G+he zQTc8Tus<07Kb?6$@3xspyXl){VjIM7Or5m)?Xkrwr@fd(BChk@ZrIA&w9eU(hfVq7 z#(+){53TxuFH^tuSljfaF8^w|w_rl|wMND+`}$fH*V-+q&-TAx>@nqsc-+bxd!BvX z`Qu0F>}9TI-k0|Xd}iX`{8rL9H*4z$^Sxd7X4u(nd75OiP$z8bmSaCM7fZ{x%1u(| z{8Cu;>(Be6-Qnxw=GoR(SN%G(<(QrEwNX!v!$}8t=&^#Fl~wH)!j#QrhBq~ zzLs=y^}76};T0QNwpHJDSp4wCty9uEbMAk+WT|tlxB2q*t6?vrB6Zfy>JH_8Z))-4 z+6k#{zqnOVRh{exkM6CyFsaSRM>eKSCQ82Vs%cEiD(8)+;afj#s*mK~5L{|pVlBFG z{n>?n37e+os<>^Gtg)~79>g@|`1{BFg^Rz3C0wk0xp0EY)X+q>OP`jAs8`OL7Qk+N zMJNB*E}dp8%O6uWc9v;hty*0FF6HUc&%UO6v%YL;3)`ige1E5AOoqkYRfmptZPHn2 zzURS{_1C$ls9FAgJKe>{|5!Osz4?*QZ7)Bz9m=^8_Nv=4Zbi!0b^VFE_@`>#cB-O?s zcwFA}z)lChlJZ>qBrzLw%FqtJAC~-#|OmGp~VA(7f zdBBTJc~iq&1Br>OZw#9SCGX`OyqmA&GC{P}Q1xlZLMIl>$Q1&Pe&Sj#6NKBi1fNU+ z31xzWq(MUMT!lxAp9Ls3&9MyWP^kZ{czDL-LO4I2PgLo|Oy^dPB4nXQ?RKaVZ^T8C z{mx;iLujpgkFW!-brZjNkEQWB8K5(a+kq}Sv(TxY#j+UaG@#fKcY72WxP;4uT7$GR znif!X2)#AGo&!xlQU^8k5I_5WC)w@%M|JLg=Ki{Qwtc^mq3GpJ9`AFR-JU!>=TN}> zaI&q!n!WFJ7ko@P^49OwIgS^$SKDtf{yOz7CERkI&aP SFJ8R(Mg2Y_@r+GU3=9C4?oY}9 literal 7773 zcmc&(TW=f36=vW71~)O12B=%KeVD9+N{UQUtQsd_B)JSJMM5Rg5GgrAh~5*GiUc&&94jD zbqlw5_FB#Duf5K8qr2B`*|8t^U;puM+x+pWX;H?`^2_7R8*& zb{KOJ$U@=$e*vldjlA@M^!6_EA>0S9lEcE@=?dY?vK%viXohb6)ADKLHGs!aIX=PsF}ApfN2Je)g9_ z;nv^m&}}8xQ3Mfx`7JQNRs8P}V+kU)DacSndP_3 zFsT}j`XPo#i&}c#cZxg+r*ZKNOGrfaVNZdQ5gx=v5fs}&0vP&&#>MfJd2-B$anaqK zGSX4E?ktL=@e~GvBfTNj`8*7%Lu@GRAj{+4itmrn`kWT%W z=+KmIabTW{&xna!0@D&5nK$}X*gZKI=4WGNNBm-)JU8pg_(hztDB=Sq6OP(v&zz#? zc|A7bK~W_Ir&ug5udU35-e0@FU}P?SRpH~4{;z0`RwyLXkbt}E=Aj{tCV;9Oq%M_* z)W55jw!u`-I-@AKHev=>`9O{L)pnXvk^DOiT~8s_=HwZ1t8V&zo{nqb6n)LtkjuD4 zG#Dv@&&V37uEENRrMi^#F&!zgHi6Y@TzU#@xENIPyGT_LWSmkx+c{vOWGqG_pQX%a zb;^WFbwR2pG)83frZJO51QjtHX1rdB@afvk=%za4lB+QnA&DwF+~;Ys=H|?sYN8jf zB=MLLFeGBAZ;h{(*B`8rNccW9M8uOG?VplZkhPUeq#xITxh!LHNya#}MJ}l)yT^@f zf{2~t-3f9EM?nYAD!XJt%$O$=<+a%$Ntzk!c~;2wp&Q#_er!y{fDaQZB)n&Auq5-= zSuR!Ylj@rY4jsiWwu;?z|4)$Ag|d9`JHx-1&(K`m>X+m8o zjM7O+W?a+dVAOuSE5VrKjkteN{2Md8^3XS$&h8bjckSzHaE{+~1)af@O>y!5K0otm z^4Rrs6|T0tC#bznhz{zE`YYMyQQKz})A*f%CR(6AWh0gqV>~$HlJ|0jOCU6bmu~+z zS)CFE?(m{kGiODQOIv%*SS)9PEBI!x=o;9)h{&S9+Itn{OUU%s?3U} zi=G9H9z|@(FPi96g>0Y(_Er1D^13$IQYR!MhbFQUiOKOW zLEm_IG4XLS)IF$8w_3(JU_l=xQZU+dkGeah&)kPw&W3JnHAR1_no?VE_{N8&k_nO_ zdRsUE1u^A;Bv@VOZtBLF+C$a6GbZmN+X%l$Bizwopr2&fA$u_}#MB=k#BoYRwT{se z8*sFm$TDz?*2afV8qIpQ{^aCjYon5aGpwV-eLJA;3|vWZ zz=Elcq6;JhICaxK6j4mhM5z2R zjkzx!C;wEooy#tUmru`;ud#lXw8fR3msT8HI*tqbiwB?rgr9 z%W;yN$0lKng$%nm4tBt?h-!&n$t33S6pHrFsgI0}yFr8o4Ludo*+-X@95PiQhyYU_ zWAz@;i2O!1T56wsURztoef4uvBJPueR`&$?05gGwM6b6koP71J=BD(WH)amg$8r(6 zUc^G->B^!;T>Fm5vppjBz7BkgH$kqGZjC%iSA!b(9lqmfuS^3zDGyX!t3@lzeeC{; zAuCttmNCcDR>prBnO*bdYAzKm%ZZf}Ektc%xCnB(iTKzauta@yyW+8eSEe$mguGv^ zC{eGHz4oj&{{&dUOAwj7ms(Kqs5fj0>p$>_db)_bV!7SUUUxfhgLZe{6t0Ofs`61U z7rX!)x}KekXrgF|B6zP*H4&UAo46nkOQU+0VPvCwmS)!S)UJYC)lR0&_>wR;K1mi= z8d`SCR|KjL%4_A%KK(Q&o91CuQy6ok*BDYvqdwEVjF?{u(Mdz~CKE3u@mpChfAXMQ zEmxC)Qo=F;R1$#q;J5#!Z&S_k8ljB2qIb+uv_q9e3F9ihQO(N{&CWBXxpv|_AIEW6 zt5hbJgY$U{uQI^#!l##&uR6Q+=JsKyqINZ$Y6G@fTJ7i;RB{y+&njLz_Spb$kbJp{ KmvpOk_xlg?4du81 diff --git a/houdini/otls/Vop::DW_MOONRAY::ColorCorrectHueShiftMap::1.hda b/houdini/otls/Vop::DW_MOONRAY::ColorCorrectHueShiftMap::1.hda index 7588cad0e466325e75ce39d33d44c850485e51d5..a002f60a2b46dc6c13fe1d262d7c2af50e3d1c2a 100644 GIT binary patch delta 1367 zcmZqEJ0L$ngH<4_WtZthT}e&>1|R@){LKV`96luw2Pnn}#HkmPa6Ow7qo4^A%1EGU7hkl9``Z%)r2D4K%_4s)XA)AE-tsucTNny$UFo&A`B72$I{pjY)@ztt>UUB)@3# zPZlc{9RnSM&7G_pStnm)Qk@*c-8eByWAZz0pL(EaObk4E`6;Q%`FVLIl?ACl5r}8N zq6LXXxyYjO-5d}<{C_(0V%}{tkv7veX<{41Ure2}`t7mBDyO}eMIx^A<~D9+-L%ft zkcUnA;>LhZ5sy`#0bf>rYqGZK(@p@wz&RO$=pkJmUeyBkEQNQ%;k8o-YDwuf}X3dPMMot(TT2nn4sgC zz3O{sq~2scwe?3Qg~#6aTK^$|Gxz(pMz_Nkr%t^dVX^<+(&C6U((KFEuU>m;>!yep zQ}NYe|E@n+5Urf8WA)SV>LqWR2Ep%PtsC~^yI>?f;HX$U1uNsKDc|j&;px(67^lud$%)npY!H#Rav=)%Xq>x z^`#akKW}NVnz1mga_`#HMk^*a$4k!6*dDaj{MU28usEyxA(v0P`DbS=-EH!1@9aaZ zZI@ST#jMddEmU=w+wWh^UWejIo0sobNvf~f^tbSH9WyRbTN*K_UW83>#2{r9Bp^Vhdt z`MO(jzrIbKB3JYD>5iUHw#f^^LKtK3pYOVKn|0~_rms`#1z%@oo0%BhPY%`36|e2F zUvoWJqCR3x;=4;H<2z@tl;2UF_{a8VVo{CFPs6;YJF_}<5+s`iBM%g@DQ{{xE75a; zDa=4(B5TgM1Q)RllMZ(1B&hSar7%{XNN{P}9$oN#Hiuw}Yod>*W#|e4M?WzwmkF0! zxdflIEOcVAOa%!^frQ$CLPr)l#eAG&8PcIppUx+$bYkC0gJ&sVKA1bxxs{{nS%6{_ ziqMZ`=TRkoGaj8WxfnwoLhJnBCmc>A)os$7N4Jh{U zVn0jNeOY2-czeyu%zz7Skv98I9=W~n?%jUHq(5`rwB=>*eLAPM cwW9XhkDu@N&y|&xb^Xt@%-3k;b}0r100$^ld;kCd literal 5894 zcmc&2O>Y~=m4*X2yK#)5Ma~_s1IVh(FS~IPMv}{jawJqD4Uw`FIL2nk9dajH?kr|z z^$|hnrH7t-@1eJzd+V+Lq(7jS{(%C0Z)SG+A<2$|0A7OR?t5?E_j~hZce|Z$Dzob* z+%e^ zya@Muz3xH#+g1wz^(~PIxh14zBfXQee$2;up8{diF8?@j%WnXu_u#vBiOuU+RDQEB zL@MbSxrPcjjztCZ%IZqD{${W1iv19_m@9TVBN=qvy45HB4bi> zrh1v?B2|@&_a`8#eXGtAAbM|yC7_)D57fiKJ{Sm*sG5pdGPbCj|8ep@+CJ5iKII83 z+1>dovT;jqJ!evZm`df&-vE5esd8&eOs6ab?eF{@g#Q`9KvMZ2IthhN!iZ{GseII^ zRBryup>CmGhZ0o$^?!l#dz62VSWggTTtUV{l1pK_CKDj#2+g&aQq4y+NzTZGrA&hF zBHusv30x_iGVd+;nMGC=?;5FwB%wo=c)=S|HSi6wWNF0Yl&T}oC5QpDQ_W;b6BScH zlctqz9yCPRGsf_d@9{LtwRa5lCZv1VMNom^srE$b_0j?`P6XB7l%IP0{B#i*=PXoM zvR(kiOHB0!MzYBDoR}%iJg927c%0CQa-tgxFp%3^0HD-Gl9@<=D?Ul7&L#7L4ja=v z(ZtxI0xz=9-Z`|O-hDD)2KpfeqQ5u>08W*keapcrS+!Yq^E zKi#TWoRDcgiisGTfML2{HcSfwDnK-6@|+t^VwRHNoQRa%-5^bJF{41@h41_Ty9vPpekWza!oJ|)&ru1KTWT%GCjjy(h&ccx3} zn+0g$6=;lX!e*7v(_^kUWP6!MsW2SM=ecTG@Z3Vouc>VX-E@4~YT11%4VeVek1qACvne_=L&{bkdCt5(H!w^DH$kW}{e; zK@2J7#u&K6Ai=&L5zvB?5zcfo@pjcI*FMnju@4${MZ|~^K<>MV#SYw8D!1x`cBh$4 zpgHFh`g2v0*a$6};TyeR{+?Ze+0X4;Ab5OPxXbQz3^u>g5_!a31kYvN1pH zz}%d%2oZZYzd2c#kX_u4tsaKSQz@p;#|8QNlhbJeV~ClFH-csj>VTyq0cWYnMsPTI zTKznDvgxmzQM)5XIS$F25b*W8)v8UBG0fVq38k9yR1v5yIEI;R2s;+8J7($u(J-+O zsf0U5Wc0zTN)2QVaWuHSvR z)oBmfFJHadT(6hl8P(yzoaq6YECR0&W;t`sEdT!Zl4uTS326KY11OvFQsiPSx8<@-tTL>~=ca-76NZ zyY6NG&`}#fcBW$(5N8>{rs9lU~m z04sqC8ok-JpcRcjA2PW|y-4uGA3R>i4 zSq+HzJ$&PQSfeSQ)*{SnELv3?!R}u;vcAN(25TH|bpD&z?ATXqS8_4BymETNdDXZW zLIipSh5E2PK#3-Bq|!0M>$#HkjE|aiRCSr{rDxpy3t$~y%BbRv*)~_32r3a#i8sX+2BmS^ew&PP?;x(68gJ2FJRT gtyS0h=H-}LgNbJiUV@HTl*8dyt-(vfHMjfyA0#`%!2kdN diff --git a/houdini/otls/Vop::DW_MOONRAY::ColorCorrectLegacyMap::1.hda b/houdini/otls/Vop::DW_MOONRAY::ColorCorrectLegacyMap::1.hda index 781d5ea21f23237c2350494abf56571dd650dc83..e267291fb3ee668dda15f063162ccc5b5726fc18 100644 GIT binary patch delta 1353 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 R7cYLn9Xc^hW4#mu0|1>GOSJ$1 delta 3288 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 Y`|I^f`E+-8_ly6v^QvujN-;110Q{a#A^-pY literal 7654 zcmd^EUvC@75vO6J4lfCk7BLDGeOR9Z$gWIMtP>|;B)K#xTS6sL5GgyUV_cWKCArb@ z_ON@@p9pGS^W1OKw?6f2^aJ!e6#ebq-W^Gia-0gyLnuhPo1LAR{msno>~N>m{HlS^4CxXF%Kgt*!3M_Q4-Jo)jVmA^qHhwDj5jFaC~< zlLe#$77+Mj+D8tC-)nLjh+(HMd1S?Y@Q!7FuOS(YSvvN?JHYqgo4@^ah!X; z(q}winYcR;S-54V-hRQPf*NQ)0r|Ey<#t1i$1H^Pcm4w9--8U6!n^*7C*r{KX-o@+ zU;m;|xcLt|bX(hXC}HAn{t3=MYyI~~f&@_p3NjFqTyoUXctG$GI*G*?(b%U!a7KnK zWQa}XJI=X7@CoUd72istnUS4qWi|MbsfVlS?Du4rs}9@1I3WpY0P9u z12v);Ce=j0d5PieqFEB}J4GHwlel<{3>4D7>}XOt!o#>I!eTp234=h;xH#sg#XWvH zOH^477xQ#ZS+t;uVjiN*>yKy{vcQ{~;2tVQ_F-xx86&v_Hx-en&L?@Y=;mzXU^(M( zhVl7w#@-C$Q`g`oCh-(VV;U8)M_Ho=0Uas}+}aEcs8weO8naoJd?|ASR{%9DGnW7` zmI?QU%ZGY;NbzB)eaDJ!lMU!3h=~aTlxi0M#^ zx7$Rm#+9eZiME6_`MYe%BFr^q>upaF)5XSOI1E^(e0FWQQQ4YUNP7WO6`w2fK(Os5 zh~cj(4~RaUOnIPk8?I$h$jV$|wkqsxIW=9D3GE-gs*yM$<4J!+#K1UAhx_G)#e%>D zcr({$VK^DFkhteWgyil9sgjGFW5&$rWb6CP#5bMjgQH?0_BbPFb=qJ~W=yE%912TlKItY_wCL~3C zd7`bkQ;V2SG@=-C2NexDc>WYA7RC~VoT-y?taHT!b)6q-#caC>gf1pB2Wv9K=N!+v-x| zoaXcY7{$F{!hQx2qXJ)m>8A! zK5;*$a)?59V}rOZd7#ht&_K-kBSE?&j#E9koa0G53Ab3B_KHx_*PV)7eKPBm#}0V- zz=4G=;WJ_sko)!)o-~ve8u!3~b*GUGP#aGu%HxtEBdgp9!8i_RshbO=6p|I(K5Taa zPb;K!OjcGBbxwyKvksiW_Tef;YA7PUbQ&YpKSIC5T(~u@`lVsq!NF=@pMS@r298;@ zHq0z=q_60BM3O1p4AGd{35Q`I`bX_BY1>#uT6=@`N6c?%1QPAL;7euM$$RvOHSIkv zF$Xn8vy<5j?azelalbu@bqG!m>`OM_r%iN&BIfIXUEPncx-Jd2^ld1y!w7jM#rVY_ zWnX`CIu39PG@YIeS66L>g?)iu;c&w}>^>`f?mpRc)=dMcDf$!L`q_lT*YB1}NstWC zK{5pj<)I?TF0>g6%f$sj@?MVsMB_;3LFi(qjaj1;506 zj!q6S#Wjx!!mr0*kFFJc(mOMiD2>n$?3*ZroR)|gbc|?B;uA4%guaR?4Fe09wx1w6 zj6#(9;si1|0-q8E9axH9PnncToBAHSt}Qh;$_@A9?PlF;Zau3X?smOyyS?isS4umw zTYtI*5=Tf`%1)!*ay3|xqwBjaT0WcWcV9J{^=|#u>(`s>m5iKo9Uko30sWNFwH13T zoR}y&#fE^@Y`DjqoiJ%NKnFC(P|;$s4%5vS?fv!294!%7nUi;=mXHBbd2~rlJ2F}f zD&6|i-7T-)YI?2u-d3j7vRtK9gQGtN=+2}E|4cTUFNxhJ){Utt-3Utf=V$OCk7+>a z3j3w{!LzWBjbCDMs!|VvA2Dltr`gNvA90w=hNXT01S2B)yJi$VHCp5s0jVE8C8AFeRa(1bT$pO<9f(S9? zC9-#qO7eT%OsRePMQ!a7o~vJw5^-PcwYsmdA7Cc9u+f`i3tNFX)!a;^t-`hKpdQo0^Z~0Vx`wqZN-dy)sd<67hbu zqD`F_d+A*t{wcA7uNqYPUC@$>M}O6os{WQs>X{;P4!P~lPIqe>gLZc}DO}UV=*ma8 z>AesKx|yAh7@=r?B6#PdCJ{U>Hg&-?EsN?|h0;d%tjxTXS^v_=Ye~e3B+t z7Fzbm*8-}K%WLJ&Kl^OTHlrh1n&wzwz2Q(|BKyqvQnH{D(f$#tH z)p9i*D5WY>LM0`5k3V@!-)1YDUJ=Texpl`JMLU+VY{Qu6PnPCQ3C-^_Nqh9Qb1{nJ zs8*?r&-{}`iKm;TQ9#cs&pX@o=GH-{qE9t7;vritt#-^;J!%yd&nmv!>oXtUt_Erq KUxlsO)9=4nrrLJ^ diff --git a/houdini/otls/Vop::DW_MOONRAY::ColorCorrectTMIMap::1.hda b/houdini/otls/Vop::DW_MOONRAY::ColorCorrectTMIMap::1.hda index 89912a0ce6e60c03e78a50fa4218307d56f0181f..ef37e5b261545691e67b120df90113a1a7aa65c7 100644 GIT binary patch delta 1344 zcmbQHe^6n92J4@!mR+V3btO6fFaQCV<8LSk^n zpI6Mlz$w{t#FOR)Z~)`i$q-Kb8cM9+O+1d0S}w< z#f<@-A|9(e1HMfC)njYZmzw_7a(BUm?rV*VUHj|pCM~kNW%T)DyM~bJzt(Uqv-Lk~ z^#1+c<$YOc_R`F_j>^XNo8Nk7nr)5xaXZd6-$!2lR*~Vn0I}6kQOSR{T{`~wuJKNg4sO0(5*`ZJM&&AF2JaKu)X^v!$}8t=&^(Fl~wH)!RpOrhBq~ zzLs=y^}76};T0QNwpHJDSp4wCu~X4HG55Y*vedcO+kE-@)v%XQkvi*Utq$dWZ))-4 z+6k#{zkR`5zX?tEG2vgtjMTugiX#TEAH?Vfm}H7iC&b z@w1)h9!Sx??a`BD{G;x}yQwT1{r8W{KXQA&_Q0agmz)(nwN@YES@P6V)9;gw?n1t_ z6_NM)N+a1yi#}*43%?Cp_0{eFrIV+;pU=*!y89xNcWue_WBW>jcU&l_3T^EcO^tNQ zuQ+&ezBu<3HOv2huecJT(vI-|DZX)@+vbH6f6A?{%G~{;_D|m4d4~=p@fJ_7 z_xtC0L}kb0d0kKLpX{If`0+{qLT&v}?-a(<50pOWLNS~2 zriQ6JZYhk`i3UpCH-y=gjrQDa+I`=pLqVG>+3VCwr&f-lO#zBcbM!(w6x4Y{l}>0n z1BEVugv>xfe4>xKo}XFh#9~>zLcp>9n{%6?`eQi%oQ#&s1mkut!6(Q;3WNJkSIrbudHa`Tn(9<;izN?s_i%>VMw9n(3V@XH0Ybl^|`Pq+ia~B+W7Z zEo0(a=X}QA6!pCFpmH~d_bctL@m&btwtSY|Po-}SWk=2(c^>ulCX-c7V19YXd)-&N z_2hGXm){oNe0J76HrCuJM{o1btdO~N_^&Zb)t!~C)kyMw;N{lNe6@BiZY7m>(9p744U(wL7Vm8XFIV5l6$$4^DtYIU9k zy}_Wr*Z#KE0-&)aVj;JLlx(bry>5?!rkSt&)rW57TX=sP_irw7xNh~YdqO0Vo|4N1 z;PXPHP_fmx#O_*!9=$#(_`lcR9zGlF{c%5#LTCVr>ju~q&+fPSF`4DM76@lFoV^$T z59oJ0oW^3hKbAaoY~T6bk-xho8P%-7z4Lvg^48vqzx`#3bsr8-Q}#rPlu6B*8l;+w zL{%zY4Mg>C)oBc(w;!_@%H4Wy^l-3SLm^^SR}qURIqJrLoV*XVPqd^vJZ2@k_je2% zxAf*yCKbd~D)0XR;G0gBn_FTwV+pi>|7!^UE5IPB+zO8aq2nN=npP?w{Hs#A@lS`k zY4kdfQ1O?42j!oP{5vG~1X0!%WFjQF6rszZM`jV4X)&Xkk7*pAk||4=gxf;TJM##x zgw9y?^;lW@T!HFkSr!}95sRz-^~vaamQJ!HWO7E;Vbvvr1+x>)WI|&VQJ_gPmuO!! zB3iZD^RZXuNt)^E5lTo%_tG_>0>cws6-jlF6o5%AsIJcVNwvpM3ZPq$Dy-tR!bGMQ zIL~NWMS(i{Nld58Nn5)BgQ(^OfDv?�UXI@o7SJCRx?*unEm#O|0U|uZH=1^^D|t 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 W8~6*$P((9@%lZxcMPkFBe*XoY;~EwK diff --git a/houdini/otls/Vop::DW_MOONRAY::CombineNormalMap::1.hda b/houdini/otls/Vop::DW_MOONRAY::CombineNormalMap::1.hda index 22bb66f43ff37b77874da4cf099a7c5886867ddb..297a94f49d71e007b375f6e1b391322df767b0c3 100644 GIT binary patch delta 1364 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 literal 5700 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 S@nYZ?`<>Gzj%}1;U;qHukxqgD literal 4926 zcmc&&O>g7I8TP_kxMUI_Ezm=56K)Ex>y>16n@yrv-YS+H8?~i{CEH0h20Ic*($o}( zm>K#b#-g`k&;2*O75y2#^au3V0KFA`W;m2($=+;x2@Qkf`~5ZV`%-)D=2uHM*D@a8 z+iN#lUxnS)c5koKcDV2PU;gnQJpX(wvWO?VJdSA0`;y8lK)*Lsj$-Xtq_tY}Bs}PJ z+J}v=Yc&8W+agh#Cb~PIF_i}tB-NbpXMb~y5AgmF|G!)ia1Zkb2SOy0UXcYnqF>2$y_3%2@4BHBLIY4-%aBq$ySw)*GRX}s5YA!5c{cVw(C;=m zjm4-tkUVu_AHH_v?`}&*H7jrrUoR~^IQ;g{e;k4D7rm>Ly^tbhQgfy{spbgy($Y`< z4x;kc>M91&!(A4`xRsw8I~?qto)EDrt1*j*IcoWzPT%{jOD*XRkJ(h5|1TrPv9265 zsi0V{-*aetI-*S!cGaa2YGxPG^KI^s3{0@ znW8ZFU^cutg8|z-8}wql4ccVO+-;DiGF|Y*5;r}O*qq)d zl{6U{vDajSR5xY>7~3@+8NsfcYBjDx0}f_%Je$&-A`O&^1oF~lSE(`Qbp=G#gF_)gxFS%-grm*s?}V-2z$_}!Uo!v z>073EQyf|d@cEEDCc#Hkj!-)FItc=@M)a5^HpFZ&7Nj@ks*sK+lO%MRh`IQof0KGi+CZ~kY6@2jZ+pG#J-smPS*mmZF)~`hZV9T z#pHNckZ(S}oW$t4cGA{^Y8mH%B?EySY*Y`9dOM|0gXdfRrXAo-G04p5-9o}QKP;8< zA{k3v!P~w{O85sjx zViCtgB^M}2!Zktp^%?9TD1nIduS}&9nqvPN*eZmaw$KbZ##9r1A?A%R^vZ;R#mv}G zP#snwM!2|uOpd~*L_r5!G5(ZEskCLL&Ze>3_V0S|(QdO5Hd{N5qy1jk>vZ;mymLFu ze&dT4KpdfPkiG3rJ21h59MhJ27|C0kAHLjfHhPVhr>9$+l_~g!>gaIaAcKf@7fd=0&|#7Q6>X+XnQk3-UTjw8V7a);oV+(`Nf<&Z&lc2lQme&A zrPugkzZEvx&9L1#Xic>`k~b+e!7-N&bT{iGKiO9Egt$JjX-zHQR!~kq&%sAr)0i|A z`lWhnF7&a<37k`vMjZbiT)TVCW~+S%F$ntWuM z$IAC--^y-B>jC}v>;nB7=V#SM+{Afx&BtZyDA!{Tri~bmY-R4uV)ZrGGS0YP|8Xwg zFM1xEq#6eqaq)djz_F0EBClkkxz6Bd|ANNo*m#O0|Blf!q5OTSG&y8uLl6mAPH=h; zu-yFGEHSl@KdWs##dGyDQX;|2gLdx}{Q#VxLZi213$4Je{J~Vd|D%N?-w*?oZYWtQ zLc3YiNZ>w#L$`kgPi)~kx(Rxn3Tou#^fVa6Z}C6Q`emB%NjWlgZ4Rv}4>0|UKvw4D zmcip>o8bSDnBDx-{7xy>mQ!aZmUA0oqzHBfh4~l{IHEB&Nj*03N~UBb<%4R)m^v?Z z;oS`X0$9PPo+`e*@7Z|FPY8wTKX6GyyF|`KZnwMFYt6=>)7#G%*TNaI`IyhBFu_2# z+y%x8#m5GUcTQ?v!LwqE6wJb=Ref8bbk%)Z=FP{1O%>8=CYcH250rVHlj3kqOUsRX zBcS@Myixx2lTT)BvpRCu48sUk~7{Z^iqKYmuOma7G# zRH!Tfl>!hx`_2ED+o@->9$}4{^ILN)?QrG3hA~f{yB5v}z4@NWKYdR9S7WWyTBS0% ziZ1Rtc$EmB7csr6eA(S?G+T$=ikWI^%oDa=TJPFVakY+(XB|JS3|N#&e66qJr-*eo G{r(G2WV%QI diff --git a/houdini/otls/Vop::DW_MOONRAY::ConvolutionDisplayFilter::1.hda b/houdini/otls/Vop::DW_MOONRAY::ConvolutionDisplayFilter::1.hda index dc8641b2dd6595277a05466a3ca1c4efc534e121..a48303ab8c0de624b67a9836ba607ce92c965964 100644 GIT binary patch delta 1371 zcmZ2y{#Ijx2CH~h%P!N2x{{pY3_t+p_?rs?IYP%l9H1B@5VLNa&cav^5&-dlz|+qq z0>T25EI^XSB{MN6KRr0PD6^mhBF9q#HG{{wC^fMp6(+|6lxNI?$_absm82HsCFZzg z=A`-;lw{`T6*DmKJ^~tH09C^6oDWnZlvh%$mtMudz$e7Oz@iV5+q{p7m6^Y|q^LBx zB;KvGs;V+LwPf-wR-4T^Y-OC2Z!)P({>9%oS&vb3@-zXTdZ3X^3_N-HDXGc%d3hz3 z1*t$0h>yUc1&Kwu$fEMy91xHEe>yWZ|F)S(o9UZ0u?_YYv{l1z_j-Fyn<}NTp>DB* zeZzv+0X)qIJxX*!lvumGl0^Q7|82Cj>C;XBYPq*yLU&jrW7m4Q`bm@IP8ofE8Yj>p z^Z$=n_gS;Kenb1HYYxU;cbgXR=1Hs8(#boRmGjnq(#_Pke(X@@iG5{t@v#RzS6mX$E{@cy zS6}^=K{_<7c60E<-?!ep;?Uc+Y3dOTlfBv1*Y{3jSo(1JhvJBrdqpGO%qa=zSae9M zp7qfm6>;@UspkRg;VYunY%BF-D&17>oveIUH}q}Kztt04C(m8o^)Yqnan&uCVx)d= zls??~>u~p>`D;#mmZ>@{-1o1}yuPXRvUtC;q20~;I;S0qv5Bk2@-3hJgCRTf5!=yCprj`%@jlv(-hE-2% z;G2KtaM!C|&)U0B=bn98VPSCd%*&187uY;4Y*G%ry^!~QzT$<)%beH76jYqH?!NNq a?#so~*Uy_PCo9Vu&lo#R=)(>v1_l6saZPam literal 7086 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 O?)I1PqsEfylK%^jB^>Gi diff --git a/houdini/otls/Vop::DW_MOONRAY::CurvatureMap::1.hda b/houdini/otls/Vop::DW_MOONRAY::CurvatureMap::1.hda index c6061ec98eea4c0ac99b4d2f485fd8ec7487bfd5..8ffedbcc5a89b2a0c7729ff0700bcab171e15f03 100644 GIT binary patch delta 1357 zcmeyM-=#P~gY`*P%P!N2x{{nv7=QrG@z)jva`=@&9H1B@5VKC~zE}_9gE&Co>E{vw zVSz~&Aj#vBnV6HG9-Lg1Sx^FzU>;?Bp9fKJ`G;m>78S@>5ci^YijbDhpD9A`s7j zMGF#(a*;*lyE!0!`2TcfZ1-&ok+!{GmKlEG|8mMW{PygSZI3Ig0$v=~TY7P8)|3&So{r~Uo$+NU8`DVrRtuylJE|h{U|$S+UXUI z+F{8jS1wz-G%H!enLkt=r}`{Zvw6=-jng73&Yi zU3Z%n@#e`+t)-K9Fe~S+{iK_zasAk#%oF>{>f&P$d9Ju5o?RTMrM~(rgLG(pSncM} zhre&VdBvf(ZPU~v8YX+QtFP~!%&_#~_7Bw&FXxIzyqQxH(6Q){Rz2&ZKN{lhnNrUK z*uz&u#qpMUGL>#B*G^WxyEf!)Pu;Z>hfbagJ^E$QrOQH5nR-2cZ}~oS`TNlIp?}zu zO1`}hIo;*$b>fm9KDpZM;nUw%&SAbpJE#8YBi`24iP&Ij3ckPS)*n877$WI?eew$1wjxR*s@)0g6p1LO&LsN0s=^ zdUVEQOmzsY_kW`p0Fiiem^b-ck8wND8D~H)D+apkoQzhz%LJg<$BX?KGGGb86!{*> zVk4kJ2p6t*{y&%rs1hH3-`gM1{?ys9yZn#S-}^`B|L&a8l{xR|_H7Kxmuj*Vb~JoA zEG2O5-Z!BO1rK&i+7)lgROS11U06fiM$@Z5PWo?T+oD>gRCguoxX^`vldEC^_ZqHT zzkAPSOWA&QwZrwQagNd|4}T~M^EvO{Ywx_^xNm#Z&V>Kdwu`Mi+CKUD`ul$>iwX(^ P{&1K7S@3g>6axbQ7)o2i literal 6128 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 diff --git a/houdini/otls/Vop::DW_MOONRAY::DeformationMap::1.hda b/houdini/otls/Vop::DW_MOONRAY::DeformationMap::1.hda index e964981d261c12e82827b7ae78cb07fbe62979af..3689cfedb78c703ddac20aa8b2ed0bfdc387e809 100644 GIT binary patch delta 1356 zcmaE^-=a7{gY`{T%P!N2x{{o47=QrG@z)gua`=To9H1B@5VKC~y;%?9gE&Co>E{vw zVSz~&Aj#vBnV6HG9-Lg1Sx^FzTx4J5a@lSz$UUB)@3# zF%~Np9RnSM&0(xZ*(T1Ao@~U^G?|T2e)4%9pL(EaObk4E`6;Q%`FVLIl?ACl5r}8N zq6LXXxyYjO-5d}<{C_(0e%@^}k@nCx%fvQ_znD5{_1j~MRZe?xi$rYab8h^{*tG7b zfe4%O#f<@-A|9(e1HQEWnqq6ymzw_7a&N(e?rV*VUH0{LDyp?xQlEWp)(}$t*BY*6 zw*F_0-oO95{4OiaUYZ%#QQ6pjbK6m$*-^TGLf0=cU)In6cBh2&l$WcfU6ZiSEqT1y z!0D4kqoJH_)vvOTkFKtszTE#`>!v8F+n)C&{yI5LJ5~^|cFO9jLbtk`(@mt+P4vx- zoAxa}RWkRIouyr0b^YU628}KUDyCkH3cVMxR z8u4k>>*$xFaykp&-!r?AX|Zd|Cob;v@VzB`-KCEg{M>a*D^|PvXlU`itcQEq*zZb3 zCSN?sziL|CBgQj3wrhP^vha=+_j1MdYwgLUoazf-1>~G{UArgen(&*DyY)PG{ahuo zi&qHmxN*u%Xz>l6ee!#%H5pGm?*F)a$Hi*x4KMb53GkS7YE=R2rB6#l)GOyr3t$gl z5gFH88p&2#^g%mW_-)v#uWtYEojm3Je0EmV#TS{pdrQQR?JEzqxOidDszWEcHt8gq z*gSkP|9ZFm#)4npv=Dc*ReY1a{Xi8*42s8E6=l6uA6jqmtEWG+7&)G#ZI~J zWnZ4N!(DLCJ6C&sv2OEIRu?$E0=`~8c-r*7*^JKDf%V0QZ~iJ^Z>{ zW+X9@^-asc4xI#kApb)d_q#e_#ilhHJ(`-!xkQytoOEjCDB2aE*fhr=q(fmj4^YU{ z87OoMBxDiNp*_#IolEe^nT1X)H~A%x&FQI!^DT>42soaT(Q=u9B4qysRU&2o0*T@x zOm%RrAFJo17yyx|-H~`^X5llCGc18FOXmZ+Y$niU^+iB2yI)vjKoU)Fnhlfv4uTYd zxiGztF5AORK#{1k`XT;mN3BNM%X#rD?%(;dbAIQ_8Pi;=vZW1_^vl(nq&ec>GA6#w z&1dZ8-EO_o+Bj~(_mKBl>@V1F2m8v`iB~&VC#65iUi&SFQFh;o?bfTz#lC)>P`+*1 z<=n$Lo0lzjbd*m0_{~{OZh2Ytf1XA`bLOn4iw{@dySYScz5jfh>VMZ?Uc4Cig>_wF K(E4>!3=9CTTSB`4 literal 6119 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 K`?yYufdK$i>PPwj delta 3298 zcmb_f&2Jk;6nE8DAzP4&1eBgSS*Th_ylYd^w62rl+D;S6v7^{YKp|Sj-myJocW0Ry z$4ODO;(!DPBuf7S4%|5PfVgqy!VQTFTq|+r#G$;I-E|!|YAawZ%R6u0=kI;Y`0v{9 zJ6~Tu{gD3n$D@1M^V1JA@aRP&`!X!%K2Zyxoq+GDdtd!_E?KYEEAK1bxNwdRgC^MN03!q@*!*8Mon|(Fi4FfyiXgm%wCwAPzlX zI<-Q)Fq4`2LFrFuXIhMT!V-Prb>pp*eGX5`WHY3mdqJ<=rHLyE|xfxxip{2oct--no^E!a`5r(zku^2 z<-i-LLb1ns4<4QP`SiKAaJy)qbR^@51`_#La(Zy({x4I7t+$M6$8p-EM}uiRkj$8# zp1z!$gU|6h$5Qi(A3mes2QR&F_WUb_!Wv@%$A^vrSU4rg{QL7WpTAxxY_ZTjX7ksX zM%2Xnq#0sP)-m@5DlDSh4WryAojrh*@Bn*?mcL;r#?=lBlI86?G%T|~0(e>qIMO9x z8ge2O+{%+gU^DPoXRi^&m5~@~MxeEfJALAonX6gBd<_^=Wr_3}-Xj&##RE^K`UI&o zM^1zJWyagoZ49KK?&D}+W1W*OJ*Ys%g~U}7HQXjTtlW+0$=y2kQ%AJ=WzPJqZo+RA zZyxv_q*qtdqM5gHCL%$Hxisi4nwzcV>^1Y|l2O!ET49}mDz7C2q2f$7i&}juP#3Bc z0g@8aAQH$0?*giu0I@Dog8M|wAqmyq#vI;o;OdpI474hNgAF_v1x%tgL4DZG5|>Ki zqG6u|h)M)T+5{Xz0|C_bA(DN9a2R^DgOwrBQ)iNZji`?$l0!D>g%S`72;vbH0fGwA z7P05CAtGGRYztMo~Kz=@Tf;)-5j(bMT4cvHcFbjsC`Z8T2ahDDM6zimC)iP zA&3;uEe6Bg--hsnUGlttA+@qvsZ{GqFk;>jH;Y0a87TfySS_02q3pB3d|U<84;hze zpM@$V14%t$7~?CeM*_lWrv=-W_lB7Fpo=bP&=t~`-ZJ3PwG_pMbc1Tppmptu-i0x* zo|Dk)#^V3{M9-eQ3J;;AQOfo%wp>J@nLArjq~|1^#pM3q&*QKrQtpJ z_6KbX2h_J*Ro$w2h1FqxA;r?3P;7xrqFmwsEHx{!Ta#KMtwwvZn|SJyxF#V@DxNd| z8VKlA&k3>YE4n=p+zx3cZ!2FX^**sySDBP(!`(*Ma49GhqRRGh_l80tZ}nZA+Wwew z?C8OL1UzJ}G*?^IaTFS@nt3D|xB=-~gcHE|uBFpBwbBS~K~TaIYU4T{*PCWxoHnZM zqZWBm<41MI<&t)a37J*Lni&C-&nWgdEhEXa43aB=N=5#vm9wrbEQ~p)OCpXn!jr0t$ezXO>L$GJ0&<*-yO^Ev(g)-acOtP zV}gs#MC6jj9TrcHCkMwQztFKcV@l&hDN}djA~EpYzLa6Xw*5nQcwGP4E)}7N5AEB{ sl~Sd;(bN}N(We2K&CWLa*o8Sa3wNMd_)F0t?to)Y%yt={P0qr90OZW-mjD0& diff --git a/houdini/otls/Vop::DW_MOONRAY::DiscretizeDisplayFilter::1.hda b/houdini/otls/Vop::DW_MOONRAY::DiscretizeDisplayFilter::1.hda index 1d4dbe4c974968464b6cabca9af67236e7fbfe76..54cf27fd361e0c18821a46f20b2d9249299b26ac 100644 GIT binary patch delta 1356 zcmbQOe@$V62CHyZ%P!N2x{{p23_t+p_?w9WIec3|9H1B@5VHcY_T;ln+7pjnlm>}| z1cAWQ&m{uF0+TG0*D{L7r$IIHI2WZRmZSzJ7iAWdFfeeW0nN&R$_absm82HsCFZzg z=A`-;lw{`T6*Dk!UIH3p09C^6oDWo!S5mB(Ud6z`#l*nCq6?DRypw4w6Mu0@QE75X zyjy8iRb_B$$>dg6o6X{EJ6I=QVN#v^oV#&il*Z&{9-n%kflLfMdHE@+$@zJCC6xuK zKoN-R!J-9;MY+hL^4%O@uQ2?7I`e+sZ8MQ}(>G~i8^mu+owWMxvBfHHH%#w`TJ8p5c$U>UrJm z{iE%(e~Pe)N$)7DfB9s+i%*mF-{gsZY=4#&RayPi%X_jkt3xM2vRN?lKoOhrriQZ; zJtvsL3?wG9=A27#5!*27AW%A;$1R1i`bdIH+xF;!@3T1sQ(O~$JS{_42srwQX}L_e z+{z{Rq-CKKi)AWEND3s>1{6B7&}q)cIhG+E3h8{JO7$n|P8d8(f%8wybZ+G+dKRGA zgd+4~;dxYv->gSxOfJSyhtPWeH;Mrei8qINlh5@Sw*#GV2IR8h74-s+=VX9R1B!jT z*pDoOkPu9f?~yF#f~kY+6`21IXabTtn4us3Ufds0e!4wrn%s}pU;Df5<5QEgmZeU- zcblo_#Ob|_510Xp5M7qVCJZ)N&2bM4Ay{dS$E3v4$Uf7}?x zKCPi|{*}jFujYEz-hSGA_GO8U!R>P|GXpNTM%vV!II?@;-TU(ulm5&AZDX;F#m~ z5QuVc9H2kxNFJ#1!7!GQNy$I{AtV1}BNp6<9QW}LaP9v0fBW+obf5MwBJna-k%)~H zx)&L#LS3mizXnnLJADy==%Z~BK)JgeVw}P5_LT~BT~9R7}oyohud2V8kK#GFh zy#}$#mfm?KVhu5s%DpE5-^o|Gk~)E^3djHNGhF2?%mtyA?pZy?4ptWxee z)oS(O%A+fxk5?XFgSnEvN%Z(v{64Z0Go?`Y5rcHsEkh$7PXVP;p@+(aeqEb#DJ6Z| zbSJp=+zd{6N_Z7T+)N5Kh>6s45QqYjd78att_wHO8hWf!_;vSfiS%qDF{2oAC);Oc z!bn%c$HXHmqgG35kH9W-n`OQwQWeD_K!Z3HAgbp?sS4LwpJ(4pcHw|oQCS1>Ly%a+ z9I=PY{hY^RIA?8*8tWqpZ)kleh7-m56RC6Vc%u%5NyKN+f;042w8cVvy6RjS2Q+fz zK*O%`1+xO!!)%61PXSjd_sD^E=TRJ>UnLwZtESl`o9ZkR;8F514Th{1vL)<;*<^{g zC009SOG~LZ=YXGz1H?kSM03}ywZ>Myb~Ywrc!F8g4ow7Wer*YNhA<-i{N{~}HWZm@ z>?%;?pO{v$6KEP_$*0+Z!!S_8lU`_JVSx}t(l_{UBK!^VKq`F~bUCkV@g6@Boou8? zp_~V-hGMUdCc1&pVjpBjFQbmnOKU}|ROrWO)+!kA7;jWt^rh<#+rg-W<7D6?#SLnZO@OTlUt$ht zXGlmU4MX}31hsVA^#>QW5%CB|xuMNM@aZZeAY;M}GiMk9=9Qo>rpXN=5Trjtc36QJ z{M8vGNhCgJn$Bv1kv(-*tF6;Swo01X&c5b;zTIhioz1QG;cnmS_j9=3( zZhGx*$LqHDHVdg4$xTAZIrLaZA0z|BCt2^jW?7$DwW{WD%P6H^Tp`EO@PM^7`lbHS ztI)@$uVI{Sw1eO$tlHk`bT+$JEL_dHSNcPaT63cdGf|;C%K$lzRBYI(iYOk5k%4xc z@>e}O$Mu1Jcyfk*jrv)#9w$F9J#z5aJWAzI98+abvW6*Z`%BG zU<21gI={xdX5yjy$z1fGWXwG~H7|H>`(UTPS@uD%znhMHxiK{P&{c~UVnes9bBtw* zgE*3Rfoqz diff --git a/houdini/otls/Vop::DW_MOONRAY::DistortNormalMap::1.hda b/houdini/otls/Vop::DW_MOONRAY::DistortNormalMap::1.hda index c36d086244992cc4d1766ed76bc763d03967b730..37b7f1a118fc45c62995c5bc5136cb1f19e5c0f9 100644 GIT binary patch delta 1362 zcmZ4CcHVq~2J6SHmR+V3btO4JG5`UXhkl9``Z%)lU80W`t@s)XA)AE-tsucTNny$UF|f`NfW6C}5J0#g|ads%97Nq&*Z zWLb7AHXQ>H+`N{3J^$p@OmdS;#2Y6*Rh%p!;ZqMZkcojOFFz$UIX^G2q_Q9tC<5^h zShOIqC>L2&zMBK$jsH()Ud+2~CejxACQWRE_>HNPR)0ITSmm@Aw@AirzQYZstWE2V z8i=qdU)&hbDdMrpGvG__w+YrZeW~eRE%z2o=niXS?Al*%H))dHDWlKt&j+e_{o#(* zGP_-4C;tC_-lZ)k(lTd>C&fL;+h&`z%y+HWzg^)Mqc0zC-xkxuKIP}CY1bs|b4wmC zzTo`Hq|t7kP36zLkFUPIzP$N)z4Ok(dlB_nIqJ8=g)W)ATe3dv)YUA`7K;j>&4nJH zlZ@3etXKJ5*L*wq@#Fd(=IcK8UhHi6r?q(Ns)UfJ*q_VVW~FND%k-#b`hHb3Je_*! zU}*NnC!yE3U(&u4>2!N1W^jTe8hSoo#fVE(84B)i@;XXVefVP7wmU0nX-ag|+b<58(~ zu~t9T>jfu2=&RP6^nG$WFg8vu-ZAz0D%DL5sXT5ejHe}gPB57z8z^x{987Q#+hEx& z7b&(Cyj zN_>xGF&C!u z?*Bt^B;4H}J|Em4aQvyWq4)PcPJdrLI^REYMptI!lJac~%AbnT6?QayI4UJ@?cP_R z3l$H_R1-_nS-#AARlAmx+ou|6su=>|B*RR)>?0fm?-m{Wj zwg$J)yvz)^;1;>3_Qa9L7v8;_uXy3{GUv55B^9TwyRSStd-JpXzdvu^ym+DUi@$JI K@`Vk+A`JlURb2o8 literal 9000 zcmdT~OOG4J5ne+E1dbgb2%Nw$a%hbVNQ$)NGO}fx-d%@YuDlEEl7dLCY{2-18?@a0uJ`s+$+CgQ>~%}n3=-9MVmVS zzugM`NQ}F~B%Gxh{hg-<{q4Pk`zg1ucb;x+yz%hsKmL9Uyr1_jXZ%4TW;{tlE<3X{ z6tTqkUx8HpN?t}ldh>usQ0^E1CdOv$t)38(tjYdcqS4F&i82{R6{SjVf37#B|DIX#d{7Ap8#)2Fk`;!MP{W$P4_`-`M!&#m2^! zzZlR}(yO09MfNc;e@pVO!<}RaCY34JNF;2@Ig1`gFfo6gim9K5LqCcx*_g*XfzblT zdFC)&u|MUNS7D^EweZTK90iN~0go!~y6AHqg_ZC);D~j3S}{SOhWSOxlh}{s#0Qww zwKVmT!jl!HcQ|w^VLY3s_)ROZ2qpLA%pdZK+ol)Rr5D#Co$(=-mZtDhNSG(w8w!zN zox%jN;vNz+*3%%imxD4MBxnvXO01_jg0K%^n)pNskr_crXy1zHuZEvk_(=vQfs*r} z(#6lhOhyU+-JHk6OAn0i+ZVRPJja8894{9#iiDq5{3((_IuAIpYuc9ryG1l`%h7Uf zddeRdL+cEX8CNGZ*oT5m%v187CD5o-e^$|0NPlL=qsSl2l85Uhh<3*+pKg`#mR+}s zPrp*8(%erLMwM5}`k7Pl zJa53qVO*gcW@i~NvDlQC_Nf> znOnEAwFc{KU_|F!vzZ^N1c?M=Ct&A06p=`>Q5il}R=Asulnp>eSYrq!oAp_ZrGAVo zpQ@cL&{YvO(_A#h{6WN(<=kgvmU32RJ3DNPJ|6I5Sd6OMo7LdjfB^o zJTv)T!PP6KT!6mTDZhf7U-y*tCTnWA6*)m~wYm^C)3w2G2N#T^3b0Ul^+Db=9g4oNN zUZUoW$C)$&7mO_i-@s^gN|rXu!9CiM=vYb?#~FM$haK>e?M-2!#35?53g!iCScdMo zNTR^Cucf>DNWn@P5`t@WD`D#wx1;r5CQA5-|y(A26`FOslnmh5s#FO)61XFwSv!WL60l~Tk)<0XJg`yrtLUNfd zaM9Fz2DXk%UW<@sg~)$VRZgfm;ftbJCl6z#Vh^J{mn^1V(Q-Dz7dBVYYq{*8(L&st zlD=HlE1YtjURZ$a+7A1uSfLa8+KPjK-`S8aIqm6mhK@sSx6EcMVAej1b?9>TjfLWq zt%|atawo5yZDFPoXX(*JqoI3YUWoLePIIM`jT>5=)Ai3d_OOIMfU6{H;N1GDvq#MUbeL5el*a0xD#Sx<%jWfq zr{Qc5H9bzriV7I^6+LEbv69-)WK%=Xk0UWW?ZmoKZUm9^Js-V?V2>=Ir5^#$@-oE7 z{wZ&n=8{&YFL|q*=?v-jMKTD3&OD`%Edm~36A3R`=)cc+K!77^4jWlZz&15wv>uAd z{X|SpMizbhvx{kjCY0)}@3{3U)&aIBfiCWN$L;s-Z+`54w(D%GmVHYM=hST9g~PY6 zZEory8KGxSjt80F}Q)cgE!%Y|tVa_z9k<2SabN>afEU7-Aj;szw@c zHUV^#2O$b2rkW99$`F174t=OA5wO9f+TZ;d`l~|~h2YZ`DTj=SpR)8E#aCGgss|*Q zfk&M5XNV3Z5M6t54xS+b-$z!C(Pm;apDNqj+@&_$HfgG=rXBbFgI3dP?cZZc=ons(J&CmBS6v7l{H~4e|Tg7 z^rXj0i(}L-DvB)D^=~dVx;jG zDZ(+DH4$q{YT|C!6VVlf-eBACmK|TN_u#o80wuMxnKJvL4 zf9FRthd!6N2wgAXGvTSqqQPAAx!W`Kt$RlWzQLO!*Gad*9%rk80KdWi$$U`t<8WFH zD6VPI%IXlizcplSfo~NwhBq1iWo!=gNBEUolrB$g!Obi!6PuHrC?EyS6W>!sNKh)dzTa Z8x_xO{4vFl2lE8opxgN4gWG2J`!Cc1ELi{m diff --git a/houdini/otls/Vop::DW_MOONRAY::DofDisplayFilter::1.hda b/houdini/otls/Vop::DW_MOONRAY::DofDisplayFilter::1.hda index 12c12f25b27b8604c40a101749a69e487362fdd6..00e275eca33eec1c0c67d4585f915ff0031365b1 100644 GIT binary patch delta 1352 zcmbPfd01oucWdd6(|Dn1X#2nu_zZ= zRKA-7;`aYfXI{*^Z6?xY`evEf2JstHC#`;aY_ZB|FJ_U5?RkeAwz4*@a}MNTQ@*${ zpi{(SRcGLr-ft7EZTeEvzgq4tn9v>8$k?^N-fq$)yHiG=&u(lXz*Vs&>{zu5ZnadNcYG3HY>q2Ad&^UZdB41A$jImto( z`SbJtqHOAaemZ*evUz~n>Ga;$(L4Wb&D^```SZ*>p7Cp^tiCG5QTSy>+T#h&j+Xgc zC<~dnF8G#u{qp67`7w{B7Yj4~4Ry;7txVp!>!UBP>FKaIO9}5wvtGp}O*_4$dG)oV zldJjM-iyA|S@`yz*@cW7yEhi~ww^B4pL;lIuVti8^wR9qjXSc|h3VFqJy;N}oULQ^ zGw$jo?>mix-@{s`nM{dJerWRK!mkbM^B$;#$abyWxo+z8vuO?Wb63q?czZQRZEkrf zlX&z^w#I0a{!#oVVg4(DRc!8bIWEtjNYQl;QS+ug(m8)w=+y%*)6-ug zrl$s|v+p-DyO_5$D*sFW+%-H*g?ZbTBvQ=jwa zXVyn!F}=Fqnu3=%e-u8TD%`7<8 zRxNVyTj-awNgFHHu3?_LfF(3u-Zt^`T}I==+pqcacHFtM?#nqI>DBN37JqqRtY3av z!`^@`%T4sc*TZKtZ2dI;vYuJ~XY&mI#WydU_|p)&cT4OS#k&17{Sy;5wq;NEyH~H4 zBy^|H-{sTyC%aF+eEH<}j;YgEscvdW<#9`4JT2LCg2^n|K#4ozV1kR-2Fqr_$OB$% z%9|SI8cIxLePh@xD0wgM;N5&BmkFY+hN@3P7CNz5My?QW^b^-|nIPQ8CHQ0tNGKB| zBn=X3=PEo_{47ARX^v$`hr;g(^@(RrS`-7N&&dF#joX1b&VY0v3w>O8ex`FPM-f6B z>(LpL5vHW`i7K5yQE~q_*mzWlH>Y`%&-I{LQ4h8DIpz4`w*{k?y5zWdA>U73+fzHeht{#2B&u%qF_NhyJA_r42VsCbZ< zq*|KK@@3X5=d}#AiP@`OK0cqso8kY)r)JgFM%4w6)xYMsem%Ej-`h_IpOx&gHn@H6 zWoEzyx5z!!CyqS6@b3M5#S4$OIj^lLsX1NUedW>BqnGdh|MB$ElP4;_#Pe?0i)@f$ GU;qFd+gAVp literal 7321 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 IqZ9)J0ALqK6#xJL delta 3296 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 bQF|<_zy0ohp6>4MesO<-^R~#%QVa|L*=|l2 literal 7909 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 WS;r5bxRRV|{D!uU9}3r9_4_Z1vPT90 diff --git a/houdini/otls/Vop::DW_MOONRAY::DwaFabricMaterial::1.hda b/houdini/otls/Vop::DW_MOONRAY::DwaFabricMaterial::1.hda index 10f8f1d7baa33c44129e017924e4d12412f65e0c..a0d6a51df98b662e0cc939d5ba63056f3e1913a0 100644 GIT binary patch delta 1359 zcmew{lWA@@(*zCH?^!LoOeg9}a(-t30x-wlKoH1jkpppnVvIn{I&s32dJrGP0Rm4y zmk0<8OtJt;9+%9-oc#3Qc@vZTWS7Rqi7%8UKWOx+2b#phz>}AslA4^Kmse6*kO~xmcmyn3 zkXV$9EGpm40dfETr!(*8-8K_x4}Fs+wn6;H)Jdz~9$Tz(+KX8v;`{QW4O>~8*0~0X zuqj{M7|x%fxSe);4{q>0d4P7EI_4Yh>)Qudh{6t(}tk?7sYBk10RIw}s?v z`&py+Z~xsTnG?@mGSNS>=fK^Z>LWh0qjdk2u3r?ste-!3rv$%7`s%2tZCk!P^Nwfy+9|8A3JDZ`SdjL3 z#hcwv6bW9h}hjDJJjvO_DAx9 z)&*?dBlmg}&#Na7!jGxlS{w4Z_utmZQ>ULZzxrj<#miDrFZFtB-!Cgz^zg$fE_Llw zn_BLDXqj9er&o9U(9O&Dg$!*a?G5kL3xwZXc3he({P4D*c%DyAs;f(Dd8Ypkn7K)J z%5v$MY|C?YxC`d+FOnDQKB}E6`+`Mv#jke{BxmRI&*+>TS6_Je=dZG*+n3#lsI8V- z%09nx=Ulg+^9%!wS2e7ApYHau(CKAT*NlC1NjxZSigv*3l!?ZJ+ z78uT}`TZQ(k#Kh(@@N0=Bs-n|sLtKb++Vx9?eC{2X)Q~gc<&}t&xzA>8y_$oO3!wP zsJ`y)@VGJg_S7qL1utZ;`o5LvOYhp1%lP+qnJ$psX#8e-iHemjt3ynMN%qjc)WZ;HbG&bxQlw>k9B=G*$|;zQl{Izipj)BFGb`h9-$;>C+! O*w4@BowHGjfdK$MV^Jmm delta 3253 zcmb_f&2Jk;6nDQAvE@KTX~S*0AhlKEUAv`e>pCf}?KF`bJBpnI6e2VBj_o14JFA&- zoD|y4p&&#Lv_u>@aDYF614u}{A@PrJ;Ks2Rj=Y)ObsZ;aD_|_kJ8$0S?|tm}`$xzB z{_gnWOQ)XEr+=iLq~Ct+Sqhfk)G}va^XR_Xz&ZxslTRN1c|P7RR!bi!dc2JNuaBJz z9~9%$*NdEBN$PD*1DQ%aD1w5OkG=`J!2VWaHz3QL1%yjVL@kh%`687HzXc}iL$T`u z)5!(m2C3BE?@E76JKbQ+6_)4`w-X(m_$#*eMtMha9L`gh4D~(yN$H7YC)NlTU?-J& z_%o0vVqYeT%=3s3E)1)4>v_QePBOsT04&M-$4iRSrIWr6BoO zIq(iDQS7qr{)N3OzuZ1PbMAagI32W2+LCcZeTh6QIo-Ls|Jh`I|HsL*r=~O0nale> zOrD3`n`g3W3!mZdFTYMc=$_5xmKgIn-fb$xM6)27w_n@)d@`3?V}X6d;j_J3SjXF> z9$-$EG4}+@&7#aLqu3+uEx?FyAG?Z{y=5rI#WwTf?cIAcC^BCH8d?fCk}ZG~a3U0b z%9B`N)puEYtL8_kjt$jA&|1Xp9&w7y(X3#;0*r~WSb7O>krL_PzAF=bf|Tk*r@{O@ z<1Omc`chEmc{Fga%t?ptl%RwH;wXs_Jwd%$dQQYKt?Q25UiX#4T2^w~(gcdIdL8N$P zF__lgI)o?eg6sYZsfEQ-sa#cpA#)G7nHTyUfTACT)vOup${zF0=T$(xfN_boS)fwV zm(&%8F}kz5#3!7#8*qGSYk+wdy6B(InYIOOO`24yq3Yd3S5tMHt?iPFg2SgJNQVJ?6uu))x8>lbvK7ISF8_^*Jx zYW#;_GCtL1Z9@GvISE)(4IDFvOc;(Zi)qt~UWVrMD4z#YPXO0O(i0(48s3L*uivt; zPd&>~)vcOWSZ(Iz5-ja8#TLlK$`$@EQ?n4cHLfMpYP2_-v8N7+Y7)|<;zUdOdl7&&)u(l6c$XWJTRK15Cm~&Hb2bzNa2yNo@Id;WVhw-WSUHA{pZryMI diff --git a/houdini/otls/Vop::DW_MOONRAY::DwaLayerMaterial::1.hda b/houdini/otls/Vop::DW_MOONRAY::DwaLayerMaterial::1.hda index ed6493638d1298c6feb599009eedcf1b6fbbf588..f73f9686c7d1231b9abf68dfb5c5a46f43a6e38f 100644 GIT binary patch delta 1357 zcmX@v&G@=zf(Gm7td?D-6LlpyKQjOUnB%W62;|s&1aW|3j6lpfvHw9mh!5fbfv2BK z1cU`9S%4&uOJ-tDetK|nQD#92M9yq8)CeBuqSVBaRG6IEW}vBYP&r}Gypq(Syu=*0 z%$!vJf|AVqykZ6h3qha}22ds3&iOz!LU|>{dg)a_IY$Nt7A=t6=1EKwxY>(Ki_#L4 zQzu*U*=#<|XQVxOEtA}2QLDy@PZcL`wDPG3n#9Dwlb4^8nw+1PS5jG!3KW5O1T0#R zSd@z_D&NfkasU6PGh_2_n~AiUzDX0?V820IHT-R_yXUm2Y#JNhF&}QIV{p8_P=l>` z;){qCE?g>Ck7)er|E64CA#?iNtKzbU3gT;-m__32ZB-W`BHib@g=d^Y@&7M%hizPL20ipQC*H^JkNHOV)>-x|+q=Vo~L@xzOWt zlC@ff^(vq1nr|o9U%tG^!;jQcsljc z!O-lDPeQM6H>kK1>2!N)EkgYs->_cci$NE4E*2uPtR(U-&8@=WOZPJvnCe%x^;O^4yJc zeUZI;_2hTo4z+8THNR(nALrHZ=|}P(&AcxMxpb`bZAB(6*`yWIxWz{MXym-*s#gw* zW=(s&QSbBuKfb!uoJDuNw%&U&-zu{5WlgZ}dTHCW3#Y!jb>n*;m%0?+`c(y+7U_7u z;Ptoo`T6T3ah;ey|B98Cr9W10lYUgMb^A+&^TVtgVXsy@#;r`*y0ZUak-T>Bw&qVI z+Ls?p;r*`B^mg`(-$#=^x<#^EIdZPrXIpjX*>2{vN87H;-!0g=Gxp_NNwcu~bKPEE zOpklFEU+$t=Sq*(g4gXc1FPl){L-G`|5My>zT4)76Mr(UuFBl~BKc3E@%%#vl6bG{ z&D~S)eMDu)<9S_A-k)52^5x4Xg?CPQUlocxV8o`pso^P)TMFZBLy3v3YZ45UxNpok z*rAi4+AJ7(;G9Iy38rr?2RnH3w?BAiE~s>(>(GozMXLf7o95_*bSNz67F9aI>DMLd_d`$ARW&@I*^5aTzGzF zp%V*2+ux?7Gba&T<905=C&(&}ysrftk1Fx)X`5mCF*Gacq1OI*bsS9w=AKRZ$9gPT zF`bwHAH|VycmH_#B7Vi=PYY)(Wv^TK@BO3mpmsziz*D}&AO|NstX>gf6a6KdTz`<-TV297anhOURzUAbGo|w%A>DGH`~wqUshODB=nbi N%e6BbHb^lr005$*WKIA8 delta 3306 zcmb_f&2Jk;6nAM+lx-`41S&l-U4hyvwb!N}XlA#?JbnB;O7?5b+GmQMECYVe)hPB@zwK}u z%9y@*F=0PfCUbiTOu5g+p$AN7 zR*4s8GE313s>w@tVJJDE)R z5s>E+U*@XJ_elWmmmh=mM?eOa%vpDAGwInb{#fEn=I#Zs^jmT^r##!@;N-o(fb~n| zz|U_zIeVci+#cE|j$|CsKq4PYP7kg>`|*6KGjH2=m-J~ck4KUj^Yimp^4H*V)i~+o zL~23t!)NmQ%b(|OEWB4Nt}_;Jd}u3JguocAhkQi!5ptXvf0dcF$)vRE?0gS1#M0y<$NsaXI$djo)L2B)Z(_nsu@h){+ zBPpo+G8#D8;G{I!t1K)$>>KZDW zga1jMn|GIuk}k~}b4IGDmJNhTm$F&Z8Bl?GP@4#ll$ZvQKrVO} zP+j_n^^g+WC*m5CP~u(8;Ry$>-ie%n)+BJSk>{d-Nz^510H;~vQb}Ai9*_W0iNHvg zfJ0~`fZ9DoazGFcLytOG83H{`CJESx23R6FX0u)>0il2(9#Ih>s1R)tdmbBuQW_Wt zBLPMr7!^?tWwXnM3RF3c0uU~nAFb9ZcCEfr*=ls`POH^0k*B~!mTdh?(mEFC)<&rfazvSB5Y$ONjDW)qo)=4nZm2@BzkM=1U z6P{Q=C@QH$fQ=@Rs#uq|TN@>7h8F9yW)!~COh5osKAhM|&9p*oMdQ+`+-pR2yV9)L z&B}UxVm9GIuV` z-sSovAe=fKIKDC*W8Q}@x~xH0NMF8cz|yr8#fEf)YS5r{t(o41*{;@U=yjv~Kd66-?7{GcCzsO)1P_@o8dylQN%pCl%OJ7? zO}vgHjy}nwLcVx&shGbG&xIwFMdt2$v$F?t0YrffhQ6cU;z?S}i2>uk0`jKuAA`yG zT9>s6^=oqyGFuHCvxrO>jxdXv}P3NKqgVH@PD0})!40BEs<8Ez1d4VbxB;4kR}yR8UPIhbgE~ESPm53 z8VPQN)G1iX*IB*C_AZt3NKMLD+h;64H#GFRJc zo%%Eitxm%{5)Isc^ew^;;Qg+p(>S%#2yQ`8!ZT{)I-b^>W?`B(sqLc{c~av?b;jkA zc8Up^Rj)NO0wiBk>~UHql4%(vR{)iY!mV6BcYASh$~j#Uacqj?1ot(Eh}eibx^68_ zJS)V`5ci2lGnH1cbv<|UR<4jMqzBp5W=gP9f_>}8RDNHV-YAVryE7dVTx@0{mo)CM zcyb&c9JBmF$7W9{jT5CzJ&cRQzz+vfhDFQr58d%e{b#vUgdRS$?zdMfwfbgTUu4CA i24o?-&>mnH=G+3@ffnG8ghSjB$DUZ|F}{$z3;zKfbmUC{ diff --git a/houdini/otls/Vop::DW_MOONRAY::DwaMetalMaterial::1.hda b/houdini/otls/Vop::DW_MOONRAY::DwaMetalMaterial::1.hda index 609f0a78f399c5b9e1be7c6ea1d8e16be998ed09..e3ba120bf43799d5e3efd9f8aa0e60ff773a53fd 100644 GIT binary patch delta 1390 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 i)F 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 diff --git a/houdini/otls/Vop::DW_MOONRAY::DwaSwitchMaterial::1.hda b/houdini/otls/Vop::DW_MOONRAY::DwaSwitchMaterial::1.hda index b0251f61df92ff901a569a31c1899451add6c4b8..0789a10c8a0db0105951af68f9c34b2546412545 100644 GIT binary patch delta 1357 zcmdn?nDOQn#t9m%-?LhFnN8G{%<99>Op)E2M9d< zTp}PWFv$WWd0a9RbMn)JlZ!G7N+5Dcv!O=tI2WZRmZZYul4b)rWy|}a} zEipND@*Q!T&3O_vzLPgG$xmiVYn=E(Y4W@@pL(E4Obk4E`6;Q%`FVLIl?ACl5r{{? zq6LXXxyYjO-5e12|9?93e%@^}k#^HJX<{41Z%m!E`t7mB|89I@5{cN(cer6I>!x*w z4S3j;FK!Iz6!BQ)7w~1`w?1o|zSQ)umb(ikbYE*^?6R+~Q&FwmlKO1^`b8d7eu&4d zys`J$=bb;^zt;0jkDR#dr%%r8B{%oEF7#bH?ccWWi`kctFaKsEEj{Jvu4&gK>~l*V zFE()cq|#`pr#J8K#+rYho_3#JUhh{8)OzCD(>N?Y;Wyn7QedHBpss6ZAZ@SDAN4 zuARiE7u~J8e%HR%laCK_{d$+nJhyGJw08c+g3{aG&o@Mv^Uca%z4p@9O%XBX*I$d> zi!QjZcA}}++?v%{FID9Z^i;2Q@|QZbc4L85QAVvrn0bNFD!!xFa4ip z3qGww5xbq|mXwRzxoniIv9I{<#5Cpj`$yjk7x#xHT&#S#aDvLz(1%=0o-PvUw(%Da zU=LprdAF}LlCQMrLw2(8+iR=7y4Bx5dCL3w?5tgxU$(Tx?dsi_e@Dd6#AN-df=!Eb zyd`-3Eq?yJ`pI1<=HDM@rDfe8We@Wf)=$l?+Ox30G)MdESB3SVo9BnLz1I;uQjp-<<2)4AmdQ`R8P`TqYQ|a|u2{7CORTiz;zb zU*p)EIT-2?TL0Wb*a6p?BA+Kw%mwE{tf&V$11NUH-5yN_D&aDr)*$W7%))0NFIWP- zkj@A6)lBEsA79P`Nsb~6iTD2hTCMWryOeA{aeu8huitm#NQlqr$X^N421@$;YE9A{ z@^2Uu-#X_r_VRvDv|h<>yx@C?d^Y=w;M>8X@<-(^G~Sr`BVe_1w8L`!SAY9n?RBj+ zf3kS(%aZ#Bx7WVR47lJHx#$0c&f_a>@7Oyh9J$*N_4CD-dHiN8kFGwweE*+cm!ICe Q8Tm#3?%u;X8>JW+0B|N!djJ3c delta 3268 zcmb_f-)|d55O!#*C|8g`Dg@rPN2Rt(?6X_?%W+a%+i4;>b`(1aC`8xw-P+#f?)J31 zj+3Ht;sJ>_TJo2mN=Q7xAHfSxAi*1tb=OB zN_O9@aDpXiIh=+vlX1X$YU8tSqaLWg+dd4*I%gr_k`mDjC1rugWZV`g4d+0xO2*$e09^Yi(uNA~ROr5W3{ zJETX089b28n3y*v! zNHc2TebNdsC+nE|0u>ige!-~piL(ck5guSq$qEaGQe1UdkSy;%qG5#v63Ee3pphoM zC}?oM%y@^o&4CoueUS}ptaH+(2UX~(khsdCjypuBm0yTX?l!QW2BP7YIrF!=iM~;~ zd*FLeI^8XcW+9h15eXdT(xA6!Znl@Rx6QjtMoD*Jl{o{|K1&8drHk1tYWJx?UFbpt zOiE0HNFW!Y3#e{##JWfs?h`SOBy@8JbNGb=SFc3QK&uio*uZm9z$EGr)Q8L4%uWB%0MV0h(}Zg2s%W2 z#Gc2707?S`VI;r_B%?CQp=@@^P>HI*Q2@q^=B1Tt*{;@>%bWGK-EKDPCh`>d$xgi- z-K&9&0vm~FwbE>uiZ1{HCc-v3kV~bDJC$m=UEbN-L&6ge2t_4T2=LJ$QZ?(+R&%{%O~_(AYXb14ZUO?N^1YFt)J-$gUNkT5 z^1XUgv&)UD-6*fsMs5?Gmw8q6s7G_%8g!sUgQe;=N)CBR$C}DDP^>>`L8Bg(aKy_( z5Gh{U42HMA4e1H1?0NsfYGt)rtu>Tk#Jpo+mV|yKp!iF1wP=Qivd;qZMHf&%WL%FAu9&`j)qqF$QWQJV2UL>=N7tG-yD-Mp za|X`3vG_kf(QD!vMmqh7A4)jTz>Hy(2fz$3rnN=Bq;deMc81u4;SIlBP9G7x$AnSG zLZS__Pt{xolWjP}YdGTQS{@bh#T$2u`Rnkza0g|PxwF=2@4{RFQ&5AU@96h+QWkUM z!1%9(yl(y{Xfi(6ZEZsT+MI;URs+W@A`^xq%wlT$@ypPhAJ_9?>Iu-=NzX)t6vD^w z=?^+N98f>!s_s^YSL7V#7gH{+3E&*qB;bnwSHY~rVNIe$8b(L6n?&l8xF?}ZDxWj~ z8VES4o*iP@S8{70xD`^TV5wLqaZjw(RV5W#aCZ?FTndWCsJeaHy`fkvx}Wux9c z?vW=wejGDym-M8VP+9d_Gb3Q~70n)(Wn`JQL2?C9r6}CY<#V@h-5Lu{w?v$q(l{l2 ztsx>d;EwKFixbZZv9pJJM5L8UyV$y(yKysD$Q9C!Z0a)=SgF9i`O#Q?Usc{H%}a+f zo)cVbCNh^aK4J0XI5{{b^@YyO9s`XFrCdFZo5aA6`%;EQ%kmH1;c4g3a;XSCd}!To st(2>^jh4R1iarg_ep2Pnn}#H$^xJ<22ds3&iOz!c_qbq=~Y0f3k(b_8X&37y-cg^*o#Yx(h`$XC;L0v zY<}ptJ%2h6KcmXzJsbI_yYe$CPky(NkI`iF-;M7rH~)YAgK_fz*DEI1NC-`5=VauY zp3lL^z4`7tMUb%GX8R8>K@5q_!JnE+Ca++Uo&GkBv2o%fh3TE?j6U^17cnvL)Qudh>4 zt=*FP?0)=W50M|@aVu}^N!vX0$N$%AzRPc__dAV=J|2+?P}SddRM0P)T!>>v^B@i@6wK` z`(iZ1SE@2RdZ6jsCV6(*Y)!}eftk0$GUv?)Q`S_sFuXj1TbK4ecYp>r}PkYd|k-8cgyr+ zbtTCb7ccD5IefBfkw$`v&BG_}Hy&F`4zR`SLYlcyD{uUOde` zbGf?PJfa1D}b23^k6O7xr1XJu&BZEDNMbxWgryS&jygRQ%Nr*rh|kPOh4m%aD-oZ40k>)KzR*4z8{ S_w_CM&+v3+73X>>1_l6(yKPed delta 3404 zcmb_f&2JmW73aow1+4?Osa>Q20(7!1U?(znNxN}unqtg|Qlx?+1(UK{*zRVyI~2#- z-Pz6z^^qc2pg@3}3a32yY@nwE0UW3o9|Gi0$R)QNatT^gsDYw|FTM25>@H2wf^D=J zg5u7b_kQpD?dV@$AG`P6u{&pu?b8R}zVLDJmD&9QEWK&lFYOnM-<8w`Xa;hBe(^zV{;XP99qkG25E|Y=lV~GpK=D!Pt zBVT4mGs>`a9uy4r7vOwPxw!WqmD!7V#wGh(;2HSaP~^e)QRuYIoLk-5%MX z(JUTHX3oyeo++J$&+F!4Cx=qYiXT4X-@U(HdBBYF=-&Nv`tPaH-|oMvpHANW)d}N` z(ail5duyNn`O*)((=TMKXZC*h&p*ghmC7n(5y!i(%As)Ul7)9aA;yP4tyHeD*g531**Drr2XB#1 zj5%4uJQS!hk4l%#g#qz4A#a37I8e0mWm7S(cr41c@4ipt1r|xjkd^|Dd<%(-IT0$S z%9c!EJqnn&*^U-C!BP`JQ6~Y^1?&xozrg&Q+62ZNER$Zvo1{Vdco@hWPmo4uY&57} zV!TKF_D~AyKlTO=);Q_Yod%S3OnfEL#66$48G?+J3HC!_hs=ih%qV9kS)Q4U`5J`z? zlnCU5brIE_hFBjd!7U=rA_*4EGnJ#ta1?>?y!DIaM%`^JF4fnYUANnAH!T#X;Abbzdh*U9 z&?rPBBdsj7Tb7C!06`?;F4>W_>T5R^8uf1d#;semsxu}(=32kn%nsC3N>^sAl4z(a zX-8%jZBepKc%}iNq^c4DI$A`kVy#_kuT`BXT8igP0X|htL?EbqbF3#<(~h+k9hYwX zoo2G=)>{p?RbO2ktIc?xrd5SUEgkF5um>p`)*9DQ*5y@gYfjfdDgU$tO*W{67Ox9I zqVoM1oEI43hRp_@AN`F+W=B;>F4p?M8t^yjyj7zk| zVwIAiq=7Ka$(_AHBEqTHh2t}u+n8@a7oFBYSCKybx(Q3yQj#jt4XT3%t?NwnF1$j-V+jonkulBs5F*1Xd2UfCsT_i zA<+bJf7HD#(K22(y^FVfs3>&Q9`$F!cm*-N<_)K?>mt zdY+*#=^PDY{KZCVGsf$NsOMYs{X-?en^rv^>n(gh_v1)J9KByOICN!qx! z4{GFDjUU8J%O&p=3o@%-YgPi0d`7XSX&FoAWsqF~R4U3B?2>))t+ytO(@V(e|=4I=VPDn<>vFO*<@|98V68X?~%7b0?R1zTo diff --git a/houdini/otls/Vop::DW_MOONRAY::DwaTwoSidedMaterial::1.hda b/houdini/otls/Vop::DW_MOONRAY::DwaTwoSidedMaterial::1.hda index 6c83934da1c33155fcecf0fbd37a8b2b7354af40..0c2b43f849da83007beddf495112937a87823000 100644 GIT binary patch delta 1350 zcmZn)UhOhLgY|z_%PzBtx{{p#8Gr!H@i!6$augPUI6yH*AZ7((^~sFP>J#@KGzW=; z1cAWQ&m{uF0+TF2lE)=8F(*GgIJqdZpadc(6${cbc_X8+do0kr6sW<%o_QsyMR|!i zZkai${skqO`FX_*4AKXInhc;yxSjKXYVt~o_0p?=QXd%@ShPV>n-?<4v#}SK7NsR7 zr%t}kVY4}t(^q8j9wx=f=VTivzEhc;CFfHQG>D0TCoexGH90>oucWdd6(|C6IastH zu_zZ=RKA-7;^6;JXWq}dZ6?xg`X)_mgZPc9lUBbywpiu%Cnk}I?R@u8v*#s`bmMYnv>sy&s4DDq0+~^cq9w;&xMM zchmd)+aCQ7&AT-ZZ_Hi$a6#hxTc@OTV(yh(veXIN+Wc&H*6Na_I%4KuuP$pm z&-bP@Ii=NA{r)Pis!nTzN9R@*sPH~L7Gc4A)7TC;JCvyLFpee$kCD`(E#@)?_^OxcuYq9oN2xC0wk0xp0EY($I%oOO9?5IBnxU zJ%BxYMcjR!(n!A2P2Z)Hh2NU3`snum#;Hr*&tDhqTKjcN)8Z}B$@h0?&dJD#oAxlp zHBjV&^t^&k$B({B*O~MGSFqBu(+`CY*Yg%GU2DB(VS#Cm^4C!P^&y*XUOis0vwy0l z^g^4vr>|J29=7dD_^tG-YHQTquxpKe0Zps)`{!-`c_TqBuln!3uhVzmo_cR)iu2dI znN#FypB=U6{ZxI-;p_^_lD`(lUi`vd^=zLrzj>Zne(+7wpK}&lR!!d4d+%s|`DaZY zoofYe>o1+W-#LS&{EqO%KgK`HimI%B>g7FIn$@9`AlWP!d7y|*c~iq#iJlWoX6Xh> z+&7vI0%cf1GShh6QW$?X9_--B-~Qm8xuDXCu0t~>6|D+TY?`AJ(xI@NTU6-;r*kVu z(J7FS2}p<+DAeiPYVp{zc!hxDIT?w|^8ux2f^<9s=|C3xapC!y zg-$GRZ4>@BC7n5m;2O7c2|htqapZk1$oL7U65pP-8KxgYwxS+k?T=T-k!27P9Gmoy z^;i~Tns@&nb{Bm3dvSk2`%`B_@Ap4jf9>zKk55g~T6WZ?b_1)#L~(ZJgRCw6*BUl_ zTR6QTxvlN7*QyAZL=|T6)er6O~ z$x5gFwzTEtx~0*5yxqr!=k3FPl1#SmtgoDMKQ8|>VPaIw9Q(g-f9gM1S69Ed-`?fG J#m!O-3;;L2TvPx6 delta 3314 zcmb_fTW=dh6gF)k&9)Lev;wMDOjbZzrQWq$dUKr=*LFxG$Btqr0flH8d&l;W-JR9U zY%WFBsz^vYQu;G^>=O@2RQ(ye@Xk-DkT^5D>pD)aNfoqfVi%s&3@S)9_Bo3$^2oIM7-oUKvp zu|d1XX(*G83(r&bvsF&8B-!4D=b(A*>!0HR@SX1*gk+VokZ?(fXoZrpK;&{4&jXY7 zl{oN#>C_VO!d&iBTveJ=;+YO(p0LD_czxJ|t&@MH2H&giOO6+*M@IT)ETtzEo!TH= zfSp`!<{FTvQeUR3%=bwE?$6u->pub+SaN6FJ%>rpaq%Y-=W^yVu=IPnH>EsV=iub0 zkAU?X<-pT-Pki*w`(5Go(Jtvp#t{u9^0DM}|N4^~r^}sb$8ox3K!a%PhT!v zh0hh^xSeCEMa2)F(eG1sx^?bcskFja!0~~ja1~BPGXKdR7k~JmRN7#neaz;gORcz# zcS$?MoUCH*3sjm%g}X*|NP0T}B;f(}6s>sIP>jnx7NpBB9?-DL0tuLDDd5PK0ApE`8Rq!MlL!+DEL9l;AEASCNDo?_v&bIB@k!SO!{_z`-KVMFEqjOVAK@^Tef+xM*)k z0z@SOBV7Uxp-2F=dw}GSARLAs?O|mI^fZ|yU?U!4iR2!e^g;;;1qAVkiU2`{Xp7kM z*d8dQfq^g*U<86u5m_joUocdl%5fBc@Vxo)Qmx|D>Wh{2M#t&2S`8C<3jB1ZQHk%@ zfkpw1l(bxJHBE&VC;}wH4%wFr<(aK&t?GgDU*ZNu`-B51{UAeJBf=E}= zzDzyZrDTur)B-|rStSB&G>KHjy0Fn&E!z{cM4vsO@Reo)0-*Apk)6y;E7VprE}hE# zMqGC)&6?A!tkg$lQ=V5@Rq&`sW8IFrkfLazwu#avFKb^jx>l6%PfE~uKqa(zMF=9r z8;ikA_ctLtVOKowUq~%2*J|~q5{#L5$j!3QrwB@Z6jt+Qcp!%?Fke;y^+U!b+GU|i zNhGN!3}bv{4M;#Z?R8-L^3ERS1L&ez4Z1>l_KE?IuBA9Jq#IO&2CZvP^ezl{^_+xW zH|GE6Cw@bHhLKG_;)fC%8jvxJN(9L8QkGlfODZD>wY!Hs7~b&aa{7Sa9VUzh780$I zU8?3Xh-^X=ui%)YYXwv+ly2N96|Td3@eax(b8Ds9*@n3QqQC}2zo(D!G%e=Hfbm}e zdDHlhz+`-<%i4tcbvOx`qXv#yLM9AHn8noblf%%wI?m_A)Dyt9mGwl7l!njYJB+#( z4ybRrs=8J43aiKbQii2Hq1XbMRJp?cb!wIpwpU0w2IkAKC_t-?2O>t{A?`0uS;*7#iiXDj|na| z6Ol`rbXYPujt-7VexYM?#*`+BQl=gzMPlHGLn*_OZTkoA-f{hByHtc8KCr)NFI8&w owYI*%<99>Op)E2M9d< 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 diff --git a/houdini/otls/Vop::DW_MOONRAY::ExtraAovMap::1.hda b/houdini/otls/Vop::DW_MOONRAY::ExtraAovMap::1.hda index a8837ebdd1d5f2f481bbb22a0e3dbde14ff462f8..8a9fd1c8e7954ae7de260e24e1bb67cf3bd6011c 100644 GIT binary patch delta 1338 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 KA#l}qzyAR{!OzD4 diff --git a/houdini/otls/Vop::DW_MOONRAY::FloatToRgbMap::1.hda b/houdini/otls/Vop::DW_MOONRAY::FloatToRgbMap::1.hda index 56e06453b5aa5d3314881010ef28b354fab44fbe..d1193ec7ba3f65011e180f6105b722d8ec09ce88 100644 GIT binary patch delta 1359 zcmdm`d0lFP2J4HgmR)8ObtO4pFaQCV42p;F6)Wnihm>la?ps5j1IbqMdlGLKS#2mNG zoK*jUlFaMP$k^X`9L*7c_qbq=~X~ETLuOe4UpXC7N!l1Y-Op*CHX~@ zy;-bSbPRM1Hs59uW|=&nNqRCHXX9ihM!Ct0IDP7Y#xXJQJn{eO%!_%q%|zNv-z*c`Abw-&q}6YaEmpbxiAf}4d*0!Ot*kw3 zoDF%{lrL@z=oIl-KdR<0yPPv=+0T%i*-LKjJL)pqOZRW?@1iAHRjDa@Jr4U-v^ZvI*oBxmHVaM~ z%)41)u3%9fGHYAtE%oR1&kNII-exZrX8b$VEjzR-dF!r^rL3l_-PXzWsAl^7v@%>B zdg;&<(}+*2-b%d`m0R=R&fK*RmppuN>{PT)%-ym}mO5cuo1fjzT3xbKN6h?d)#U@# z+~1^@EjhGka(;;F-XqKsh3TOdliP}tbz<7yNXz$K<&9}s<+Rc8`qWRG?(x-c2o1fv zon3U{`nwDL5;jd;tLnD#W$pFq?=ehMj^{rvFI?LnmTI4SOTDELY!!uiGO7t0Dq^aYy)1KA&XEn|9bU&3(pu^?GS%!-l`uu-x~OioI7$nO7Gxl@k*=AT(1aqI72W0tBrr7NcP``Ld!sJ3-SjLpx-=i|lG)6*~hzbC`8 JW33be0{|k@N|^uv literal 5306 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 C`Z})w diff --git a/houdini/otls/Vop::DW_MOONRAY::HairColorCorrectMaterial::1.hda b/houdini/otls/Vop::DW_MOONRAY::HairColorCorrectMaterial::1.hda index bafd8fd334864a10318e53ee18d7a63373270b14..f958f20a2b39d32d4c10675e459be1cc98101074 100644 GIT binary patch delta 1369 zcmbR1bJ=!+2CGn3%PzBtx{{ni3_t+p_?wFYIkH9|4p58{h*^PHXR;i#&cx&A>p|im zK_Kw-bBTbkz$6QhR(WjnV(n8z#!oVG{OL?gxfhEs75HSq*yP#3Mf~{z`&vhlH0tK=_3n! zacNOnVsh%_gX}h&gE{^QPF7`Botz=nG+B>Pb26*6Pd(5mCI+6o{FKz>{Jgx9%7Rp& z2*f8~(SpRHTx3!CZVsRVAo%}u=KZ|eW+LsTU(&=bh~E&My!zX*r7E{S@rXoR=eymo zm9=TzVFMmE<%=5wIz=?J>I1&4{nlV@)2EyM)pB>igzjsOOkMW%wJNT)TT-9Rf4|7% z*$?5k&O7_kHqZR?{%L(bPgDkWE z?l79#@5KLTXM>$scX+){{QlbC&)yuJ-+fenRgr#f?!*4#T_4s@y}mB!YtqCcy`PRo zl`oBB)a;kLoih9R=9gtT7s^8FZ!Eibto!oi9b03cYG=2!{Nu{z={aGwcztcC)7e#F z;<7!iSGN67c$1|nHDj-ocbs`HZ}ahH(Jgm(aY^yIU-!G4@bJ&F(Af5)n_fNm;=A?o zvMYSuuU{p_9)8dE#y2;#^Qd3!tDwqOc7sRPUS62gXyhXo)AlM`zVEAPOpBiL#%=ZC zOTVqU#k1jJ>Q(b<(S_^ZE)+cb_DH+Nw!Qh)_xA=eq<%d9BRFPevuMPdJ)Z&u78O{X zahPt0N_UX?JJ)4-57ld6A*;O|~G_{QTR1NFv%ulXsme0L;;l!JU(6vRr zUkvx%S+m?=!;Sg_cT^YeZ;@dw-}OA`k8PEam94C8Z+7XrY$fi9Qwc6&8+s0Q=p+cU zDQ{}BLK? zR*s@W0g6p?j6g!XK%q=$pwOcL#dQ_uWVBo+7`NAR38vgnkthy=^0@?`oLT6^Vp+UG zz!62L=JIn?iN6g=XHHsRsDo=ga=sSD0Eoo5hi!)Ghh~DD@eJg$dP|_w()oZ+1B(54 zaU3CoEWxpf|5%S@Fs6C)|6#fmWYLGq7w-p@-)=9OB=e)~*Z$e|_m>sv9RF#ub33oZ z%%|1N2YFl0e{0zAZC~2y_2Y3%-ZQXR*J?z8yR@{)pU#c{f)6iCN7Y?QmTG zRigXXbBp%9{dDkJiP4-HdDp*KXuMctB6lz4(cKI0-p^OO@OYc^;@Xm$)77)De7bwH YJHGz+%QsJ+sQeOVTC_oLhZF+?07dUyxc~qF delta 3303 zcmb_fO>Y}T7wH2_I<(+rl&*%M^@gMWw z)xN&=#u@t4pA*lr=cmqO;L(f5?X$4B^0`_7?F4*J!FTrHtCO?Oe*1kop)c1f9|Jjk zjDzPV-i@XglifGVoM1_s4yU2aWTqEE(b^~9L|x!N+u9GwDrX_#k`mDfC1rugWX^pH zOu0v5-vg#oOT-H^ne)FY0}1VPi!o2+M2~o#cx&SC#NJ!gJ;`yjNIf#tcj39xlgLhP z5H7$@CUfCOAWtT~OqQANlK@=2@H1Hd63D=kIqeQ?COzB55@#|OE1As1FUi)Va%`Q0 zkCzoJpDG6~qYA|y>;7P!{OiU>;RsG2iQ}z{5?Z4E;}qpmJc7(u*?Dp$Z09y zNS6R;$ca!`D^C)E^}u7!P9uoRA~DpAKx-L0J>r&`t69N(4H#2piS!EIAr;cWeNU$P z1gSKKPJ{VH#@p0w^rfKgi)dhDm6HzLt3bJh#8nbC+$K7#xqH#k-8%MDN3{Ay&isu| z!fzDs@A)3&R+rMena|Cchy)IEY0#ZF*ISF(JLdfbqo_-?!koUUtpx+2;-zdBwR%*b z4wNVYBqgRnB#;Z<1ypwcVjZLecZrxq5=y;|IlSS()hm%R(6R&$*7sZ#Fp1g(^VI;r^1fwF#p=@@+P=PAPQ2@g8=9Q&N$*xovOY60k-D)&yCh`>c z$xf{lJ*WbW0vZWvx!kCm3NKIuNQ5o2Cl`vBw#t=KtF*Pfy->7< zLW`G#AX2=x7)*A56T%Z#$@Bh&)Y5XLQmre&hsn*I z3o~9l6VU6%{Qvw!uc^;4(&Q>Dwat`wgDVEll;vC2%$`$^vQnM7hHLfMnYP2`oiKi}!YZB6= z;z=4VIqFa5zt&lo-OZhsk_sCk^V^X387aL*0rJzuVDx1gM8w!PduIJ*^ z_Ggr1TMzC-;30FVx!kIbqR?p7%tO(@^+(?#>;TSpEuF@xl}2z0f)XB68`tru-ZTrN zv|()@w#btjKddt@m$Xw%$gDcn%m|QtMX|?e8A_&QkX!*&D)P5-bGbXWZ;v>qOCpX< zaUA2m<`5CK=;JE&?Tq;5j w?^_R>OQlM6t*I}vqDKQVlbvbyunTi;2JS#J@PEP~Zl7aM%ybx^NzTH507h`%@c;k- diff --git a/houdini/otls/Vop::DW_MOONRAY::HairColorPresetsMap::1.hda b/houdini/otls/Vop::DW_MOONRAY::HairColorPresetsMap::1.hda index afd136c78232f57bc589b314fe7cc43a9fb6bdfa..90027a91fed3fe73000e5761b93833fa5d7ef10d 100644 GIT binary patch delta 1366 zcmcbi-6lIhosE$pt7VtjL|q9kMg|Z7^ZX5kKs=s5ARdqb;;>Gf^tK+vhp1!l^mB;- z3c~;kkip}UnV6HG9-Lg1Sx^FzVA~2cg2%ZiHL)ZWCdalFXle>nPS`WAB(*3nF~==4 zC)K~8Br`v+n1O*q5@>`0R0+3pK2VKNUP-ZDdKFO4lYxOn7bLfN5mOT*TUlyyNq*5} zYZfaO9RnSM&8Jx$StsvhQk<;9)j08;%H#uFKJ`G;m>78S@>5ci^YijbDhpD9A`s7j zMGF#(a*;*lyE!0!`2Td~{k+>|BJH7X(!@51-K@4EQqhTbH#>pX&0nmb(ikbYE*^?6R+~Q*y1{lKSla`^6q2Kg8o! z-qD*4zxsK)e*7G}zrUY6F^{}G-zWKv_UbvG-tBB*%e>x_MCw|Rx1N-7MV zpD$IBe=yG6Ei9ts)817}rdKd1ze`y5z(?woL4JYcru-U zKv-z${db`)`^ws_8c&98n&=2|Y}31X+6 zbUxd}I?0|1*t<{a)h3x&DeujXsolyAdE8rf>C`3f=dX*Z0$*pcrf2H+)IMKUuyA2z zWLvkWYoJ4Z#le&F*N12L6#aU=*~Mr2;d<*f=|^7C2?VzsVc-5SJ{mq&j1L5m?|2_D%`R!Y;e4R}T ze?2qu;@|fvDaP%mZt{Y#D>A$G%@u2mP`D7+I`9WW`&ZK%Ze)Z$WC%YFapAT_PVLUC-bAoA_vBX5yoMQm*A6>g-$G%u`2`|{Uo$p zCIq(ug_eMXazR2eT1Q0B&vb6(D0&u9uh{gaohRAv7?iKrG{-WeLm{0{ROtkYko+%H ziB0hVJ(iZ3>fl;`?1kBZY^L2EgJ)+fih<5JCj)euaeX_`X=gxA1B%K2MUp|5aQt>~ zhGF_S6bFGUdUV+yy9?@Ueu%%?P^*#lQg?sA|MJhzZ~OQh-7;f&`8G!7Pf7U-I~qUS zloPmi?`x{qg$o6DJnu>~?p%4lc z_deHmdGg_$?aP)sI!dR0{Glk!@4S0=eVar7ZoaLbE OvHrDIaQ0>?1_l7R4@_17 literal 5592 zcmc&&O>Y~=8CKu`DmO7&1Z@$Zm&rPS?8+p?x^WUlQc8=mB~&5}k+Ksw?smu>k`pa= z7BfSA#4vj3p*{7`Q~yeD{S`g;-oKDTpLceaU!t6(m#iUk=biU!-tXDNR`ZLs*>el8 zw+~y*{V$@<{$BU6-ST_i%76ZcHs2emNi0)Y8O1!2JvaIC2VCksl_>pG3nQ#K=0K|Dq(49Lq;FyUHvTrQvAB`^SI0`FnqRRM7~u2= zl|jpT^%}#Qb^81V;6lRf)_(VS`{ehXNGoLlD4tv3Q@s1%(y!S#SGU;k2ZzPyy%1pg z-KOM;8g}|xW}fZ(`yTz>JuSEu#oqe+Yin(+n0yr1n~TFoEJL`>P;{xh-h zr0dUwHV^}A`~~23ugdzK8jnQ^?Qj1L!v6{|P}bgwFCt}=DCU;0t^M?uYiqau<+s*J zuTu>b-}^T(|48!hu-p>NI8(5J((IaxR(K!b#rVXkF}JeMljMpGMJhDx76-wrfZ<8` zSd_jeFGrB8P+B3)Z6~}Zl2Z7FkPHKds6`qJJ?7@Dg3IXP1)1P_NOgJFS@|AtQpwuqJ`NQiVYX1zqEu_Fkd z7O+PSwn&i3;Rr!6#U@!t4z>z=sFGNu3+UmK9JUG_rsNkrgwEBJB<##!t4MNvw8(XL z2le`#0Jf-m%=H;tKxJW*VAoM|wtUi?=+v9hvu)(C6`U8aJ?E9!J*_SZuHHrABL`c- zbrCt&cNKDB>N(z1Q?KC7&4?|sW?=)cRjm6XVQe~q+o#MC!5+3mFbj4{FUyCN2)?Y< z>(WF74p~?$@**d=DHl<*W=@=D;sUhDLlh@56nbhxnVw4{dx@ArQsp>I*K?`5Rj5P$ z&^#SdYQJJzthP0mzjH@2sBVMHdOfesku?5X3yf~YryVLdummdRyzn>E&|yI{NEEjZ z3bNP1>pQHmy1V&C8GMB~i=_%<8aHeQ-Q-SihcP!gpjWSGr}et;Tu~P?P1Hd1q%KOc z1V=jogFp`0T^4@G^$_md*QIXm^?E1P+{V_^@o)$WIE63HB#OXc{(HIb|DY zM}Att+XgG2vyF{hT+rd?q624$r*M^F^&PhLS%9eTpJD!SjhSGz&m7`mA2!UFPri}a zo}yz~M+J;xi3y0xJq<@>Q%`W3CaQndPV+I&3nJ-z9Elh2kp*(;N5Ct1dE#S!CYruq z=kiaDXm+MLL;7Q-dopgLl_O;5H!yq;sYlkoH1VA~CpP1T>!D7XuUZ+}oO=Rq>S zM9E-B%Vla9vI`drH?A@@U_^H=%zb7tm-e{E8&6}mGL?WGT41P25+lS>rUd$F8ka>Z zG2gKZ1SFG|A^ds*`Y?n*%z9T8sf=g16ZBmaf=^3X0U0B1nY~cUN)WywGl)cx{tVIK z1Y)367vL!o_?#KYz)|Qt6;>|q(qObrdb<&0C;afB*@&9^j~k~)-Kg7cABFjh;dhQ2 zkM;qQFolO4?zLMX84G-9gy>>4+}-}*#a^?~ZM=B-a(BBr1<$ZfPmcTsz2$Jy;uuqf zi=s;u1e|6kJeT4^XfFXW$O#b95|+Yr_gVYtc6AAsv#T!gd!v+8z@+-@nwWOxq&TZ| z8;_3mqeiP4wHn9!Q>h;1O+v{y^f*IzCOw*+cAL+cuM^u&)dKDq<@n1KawsiNSi{i0 z^m|jGj*Xw=aHiTwlK+G1;IP@;Z>=EQ_SGx@Aw%ti*_9osG@M0%9A`>fcCIq=$HdCS z1i}2O;_nJwY~MY*K)pu(Y&eUPoj2|Ucw8Lia$I6Miy>vJOF4_H7(KU;1V2+IIO4`)?4t=mr675Z>^

QiF{)Hi{OMEM! z@x00S-^J!2|7f(5i__($*Aw?gXJWVrdWMDiXb(uy1e2s45xhDvx|+#;txBpcv%R*a z=3fA-`1D|k??E?AJoIs^5dF2(JaR+ilI0FMhu!^o8??Je`QTa{h9)1n&POR4x}z?3 z98=tf5xh%W^9Y`2Tex5zHjU~{EjfseNrUXG_-unCkC~L zm95GrAAdZjo0E|rjWAYd?=Xy-=)Q2i)FP>7xHe;YGliFm_^m#ueDttVtJI2(av`z+ zR0}}#@V7tEx6_l&p9o{j(z&g~(2k?rR4|tD^P@#`OlS9*{Oa>Ecs;TVztN3D7 z;#Ff@FA{!LebPB-H1|(BRqASHBvY|j-t4$fLS_>a&n7E{vw zVSz~&Aj#vBnV6HG9-Lg1Sx^FzV|oNNg2%ZiHL)ZWCdc#$XlevhPS`WAB(*3nF~==4 zC)K~8Br`v+n1O-C3TT7@R0+3pK2VKNUP-ZDdKFME3y3v9a+_P2L>U=5C(mV8Wh+Zf zF3B&Ne3RLVMaMwLU~?wRR>sNmnWQJ1u{BO+Vw9VFiOr`TXebi{PhNgXYI1&FUP)y^ zDo_OCC$MNiVo@%#sC+jE#4G=w&b;4u*+Qg!^P@JmN31(eow-^RJZDMnE@j1!>ER7q z8cdQLS6^NAN#&i1(njUmiD@kr3u?Xl{4;MwR`H3;o@FfwIr;H?{rtBo^KW1IeE+Y8 z5bM9za4oa-H*?hf{r@#<+2x!`%YKHenZ4xZwxceyy>$PCE?-o>tegLBrIm@skyVqf zN!YI|eY@De>61pIp`Tw}{r-xt&(6NStX@BV&YlTdYtv@!ySiS*CG(C~{JJTtuL#ZR zZdNyud}cg5PmQJ4eQ9R&(%Pb$dYSTLSNEA&2^z#@ZV6jz9=6&$K0IJ^&Xb+ZJ5_o$ z?N!ot`b6zW;hnZ8YqwifE4%lL-J4BIr26#M?m2YmW~lny!%3mm8T;04^9nzeR2Vvc zy;Q~egK_3=VG$*t7Oz?|y@J8`-5M_2Obzp6hcZv>`}i;-_K@caEfMMBKu!JEUs>v- zL$B8E4i-FiOXd}e-nLC!k7$_feP8uH&b#5$kKjL+>%QLO(y`LF6`8bTi&jkImKown z^PazydG&zn>gm-B^-eGJ`&O5lv*@mu>Ae@n*Xryo*{640e5+je1@G#_H|*wZ!n|is z8_ijx(Z%F;SlI7h)$WS6*2~ZRg$?KNzn94C(5}zD`;fPFb)xjj^VOB>CSBcS*LJ#g zh0jf~Q&#EiYnC6(d6Ba1_$t3!X1_%0W7aP> z*cfqmtGD}qmHH%+JB9r&pWeT?e(~eS7mjyM7+)2LJYdA8ys6k1hj|aG6kR zkalJ!ii5xw{rGYoy9?&?|7*3%k?-={^<4Z_xq1D&v?QHlM@{x_Q&pfGJo0pc4e1*5`TvK8=sohSLf+2I4u6P%>C=FMgOdx ztX=!EH7^STF1SVR`8%PredXOd_Ra}M&Nf8-eDPskx!KC2w=b*f|Nry&%ZnEp PznFID81Gyw#lQdn4DU;z literal 4586 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 Sii(8(vfmSyxU^Y{fdK%w>QvhR delta 3314 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 J&qgT*1^~X*RAc}E literal 8654 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 diff --git a/houdini/otls/Vop::DW_MOONRAY::HairMap::1.hda b/houdini/otls/Vop::DW_MOONRAY::HairMap::1.hda index b9ff9c8d5b02b75ced1180f3b4cbf7d4a4ea28cb..ce2e049d70fcc278ef4c4f1b7645110913c7aef7 100644 GIT binary patch delta 1371 zcmbPiG+%jw2J3~amR)8ObtO43FaQCVhkl9``Z%)r210W`t@s)XA)AE-tsucTNny$UF|f`NfW86>wkjVY0dtt>UUB)@3# zJr=9UdaP`l3s|qSPi|xqogB~GC>rnU@9!7n7-?k{mS3Rnk(gQJn^-XU2d{rU(0nEa zp1k~&)a3lUypqa-RG6c|<7sPK&owWMx zvBfI4KQW19>=wJ*u$8rGowFeioASkt0i7ZqTJ-^6GQTadw&~Md{?&4C!G!K>jf`FP z^>r$$wOdl3?U!HdA@V~!ZsmN0jzQ?}5o6Q*@SKniQbnCt7M%U*{+npv& z32W7!Aokhm%x9aq&ayEJt19=dJzcb7^4@sK*%{k|dd+`%YJ2O?U4Qyx>e}O?UoOQ- z{XW?H(8c-lCLVR|u0;(OKeSBVe^0OO@S&Hd(>o>3Z+|b5*P)$z_aSd<{pv*NmFKG~ z*G;;*%dYKo?Fyfp3{PLWExV^F{VtGYz5F8g?xT<9ZsIFx5(=@ksF?fAxw&(Prt6uYJ zN$%qQk4LL)TRV?Rt&6q#r7pPmL0@&f&ZK&G``*5Ocl+bLHo?3TS#^>Pl(-|#CAf%f z;A|F*Jg|(%EroHmp~OViH3>kO8*>hJ=p^hnl9>4Lt=OHvYECSXffB(%exh0~6DGHE z2|g)V=)_`~xI)0uPZA{51{B%?5-MCF5N?ysC#rN}rgJODCV8VCOUZP;dMLl>S%6~G z9Ltan1-KHBP~D4SREauA!)H%0)xots`fi6}07T+VHjY>|QR#zyJV+D^76$ literal 6419 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 delta 3250 zcmb_fO>Y}T7X7r1KzKe zDfZZI)8RCfG5y0|75mY{iL=qKpkw{xucBSpd9!sGk~Pjk!X+i55lYGek;&BF0VeB? zIP`#Na)o$dCR6`FsY+;PT8w$Z5Lq5{F)|97v9rsYizD)-NkHvFIn6sZGKK z*vVwpuLFH5@nvd>`92B2;q{wf{XUR^C3D6dw3+nUE|xfxY5tPQocbx*no^E!aPV>K zK5%}j9C-9(;_KJWb%fhR`^1rqBN|BLW69~k+|h&S;?Z~0Z=9aZ&E_s0eLH;)R%fU4 zY6*YC_oJVuf1f{BDAX7WI6iDEltjBEnO`X6kAAFu@phrG$wK?t`*-TqsEPMUGsK*% zVeSi5SU|aXW2r}+JwS)>0DFp-pEnfas>6b0dHXI6mslVH2Q390=@Q@xIS~puQWgz_is!Rg)ap@zx=?Wlkd&APkw7kZ z7f@Z#h;@+?+$UldNhsV7=J16BSFeO+pj8PRtnaxfU=no*>cMW7xKt7s4SFO%R3b3a zA>a_|3!rumk?awK!_cD+R)#=Nok;>Vq8^q=4%oOCN?N*~vHIb*lPj;%M=vD=26wpXW zt4oc#sqg|tfJE3L2Xe7^etW50YL&Kkb{32Fko=TuW4)SesIQo=+^CVDuPf<5CLZlm zG9Wy$fKXIai2xgQB2}?2ZZ_76_82YJXOAg-u9<)UsC;i|CpFUuwH1v^t8}XxRobO` zxm_>SDnqjg&-1J*c+{h@ZuUEnqW)re3nhJC)V`*4ttjRnm!Q!umC)iPA&3+&Ee0*@ zZ$Ws%E_vR+kXl(Smn(H87%}gdn?<3|0u;X#Rtsi$D0?h0pH>0&L&hcAXQ4_-Us6vP z#^}o0B>~~oX~Fizy#eOC&_x$C=nClzmkfAxEk&^*-JlvYXkB}(cVS|y=M?n1vG6}X z(M#$xjCA@DKa|kWfQ(_3`hW~Cq`5`Dq_Pj8b_Upk;SFCdr*{e7W5TFnA<;V7r)n;P z$QCql4M!ZkmqYnn;qvuDZVtZl*HIRk+qHUY2j&8Z0vil{C!X3dTISGz@m~RX+4xVu zWPGm6+JyRTa}u()8aQSFnJ^q-7SpyLABpDdD4!2gPXO0;+7l5{8g9a`*Y8+3puXj* z>Q>DwEC~@Ta)tkk)U3pAjcbXt8tu(a;;Bnwlp#$jo-_a&2;3}NlLWgnj&nt7ZeIndFvl;4_42`sqN1w$89~hkAa8GmF8-z zGKxZ@RW*-A1D6_oi)aUMzH8|;POUV;x`fBn#&tZZH_gH*ZCKmKE%KzskL!%fCG8Xw zGOLa?GXf-EQ0#G9hLUL+Bv$~Hiu@HTXI;B`b;LPc5^-#b;~DO24iT|FcXZv_oOpJK zojtruM4G9zitRb;@)av@<D7{e{mv(0~Cb-y)MJ{RFVe#ZR zIXK4og^sN~qBKsFGIcL55(D4sNf{Pw+dp&%&+0$hr6Tn3p?$l#QYu&0oBA#*dNd$2 f*_mb!yD;Zw;0`nc{~b8Q?Q`sjnJ(iq$yxX}R~^_G diff --git a/houdini/otls/Vop::DW_MOONRAY::HairToonMaterial::1.hda b/houdini/otls/Vop::DW_MOONRAY::HairToonMaterial::1.hda index a74016f596adc47f3760489401aa20f41f724704..e39de417e2e4122bc255e60c7de3d665b31d1d5f 100644 GIT binary patch delta 1431 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 a>9-FrH}5~^=jXTReEqaf54TD&FaQ8HmQM!& literal 6933 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 diff --git a/houdini/otls/Vop::DW_MOONRAY::ImageDisplayFilter::1.hda b/houdini/otls/Vop::DW_MOONRAY::ImageDisplayFilter::1.hda index a6864164dc47fc8db322701cb46947d8686c2ea3..e79022a8f4118ee0082e708eb825c71189604364 100644 GIT binary patch delta 1366 zcmX?T@XlfEvPS`WAB(*3nF~==4 zC)K~8Br`v+7-(8M&wpcBF?lzW!sK4Q#>rxg%9Azued>WmGBNPv<)@@3=jY{>R2HNH zMIb%`ixwmnv>bJ)htK9y?BNDMa&$)3e zYtuhRLmoEei-v)nA{whY1HVlD)?;ncmzw_7a&N(e?yyG2F8lgg71i1)sn71eU*sY3 zLwsAvn{799)c)XO>?N6YqPLwd<Gma@3PQ~+P9A_-)1Arr?Kp{msR%P z2;1p*u3g#D0{MJ zR`fpKH(66n3hrj%Ha{a|l`_1&S)LHlS z>aMo)VsCtNQ(KSv?F*jzMW{UC$lBnAs?1MsSy}Mjyl(eqwX_9iXlqjLdhMr6@742d z2%P$Ec5~N->v`8z3N}u?EVTH>w|#GGzxyyvIsX1J|3))+?F~07UoM=WvNZT1*OH@q z1U}pNKM!CJ_gHV{96QZF^LnFSK+~%A{_{5d{MXRA-OKdx9-b1 z8R=E;{T6?DVyyq|vWC48Tb7&e!q@FH1Jh;%Jma3>Klyx;9dDYm@@D0*t(QzM{{C^d z%&xWZDBHSNtNLHof{P#cefLoL-?LAC?)?6`j_k^nSxVdy#}Zt`Hq1HLp_3rYro5@a zSF+~>lUcF>Q05>=#9IcQJ1$Aywr4uimS~-di z1t>PnF#-wk0);Z2fkKZ06wg(hlhJaSVBF3nm{Koq)MF``&Igp936g#W(qReIfg)u0 z#j<#XfFnZN{sj`nMR4wuGYg$qP*i-Zo)0n}O`>*Z;+dHRC|1}l42v!yv2*f!2$l&G3 zeqYU*VUb+0e^QkJQL%%R5<|sbG(h=#l7EM#o?zOzf(=y6mNsd5_Yqu-PZBleiR|+rn6jY=MGUw3 zj`P}KctSoFrMF{c=u-ts%d!kM;5`wP+^gf!bqrlBLSMvVuFpy~7z|ikA|pZ`P&A2{ z)l!M(Bf*ZAjP|nclw=r9l9Ep1Nk8%SCa+#iJ0h{r1Hu(Z5SArLdFMqu8I@e4I(v$D zH=~kaQu5QR^o$_a<|v~;%E=bx8U2r7M3IjS&k=Q=!MO+KgAq;6We_Nyl*aP1bR;j0 zg=&(lGRJB(Fm<9dS2e7_LBNOFn!Pa(n;Bf2L(G{uk1{GRuqha`Kn(o>(Q+8_WD<*# z+Y|#n2@+=fuicWLewSXe1;5cZHig0KODKXF2eF>^2kcz*6NEZJ5yP>(e8}FU5tRB& z!Pl|$h0dfIf4+7~p6B(%P=+N6f2UL`-QBpi68d1{!4;U5^fjW#pZxcpk!Y1d*@zgV zyKWI0@pudF~sT&O4Iz$!7q!z5a&LP*^TFk>4>)cwK?Y918k~4eL1j-dEY&5nph)53iJ zk3=$3K5e_7n@KiOy|k8Ej}*+V%#=eLn-t=hc)Phg`kH^-j@2dClkhIQ>y1<_U#T$R zfm>YT?g6(y!!0kQ(n_6dZW)-;LiFDhx4f)3_4FA1Pw2$+CG4O^jku&`Po`cc!!>i< zN*)1^hYKun9)}ip6^l@L8j2$umL9jIypF-;QfJxwg9IB@_Srt>L6)|qOrI>ce%Lyb zMH{JLvMnv#4_GYD1!iZ{2M~a@nSO6+GU;6)y{_O4V>O||oSB-J;DHJ-Xv{?Cu4(w^ zJnReK&MTR$0uKV^d+sAu9pxlH}Xk<-o;*^ z@1C-rNG^m3ZQbI4ry(^jFy+7jFr^C-h z2YVr&VwBLVzQs1aaCSzbe}%{j+wMo*1nllD@sT$V-zhSp2lJzFPk`sM#3k=A)Sw`tR-ZN2E$Yj!(=a3<7b16eDm?;IKV(`e7WV; zDkupe>?=BUZ@DMkz4B-7<85ctoL!r$KcQ3SHa2|o!*V$d5*m{j{FrbVYDzrZV3?CJ z)eKs9F7yM81}f33K5TR|Ijy42tF;92*?<5%vcv{Q3o=b6oK9kZw z25kaFv_wK-x{Vu@&FTUyWmjF`cde8Vl~KiKOJdrQkz%~kZ9F;L^%||F*J>Q?=29)m zbwbHG^cY8XCOz!WWV`vC**dXlRL$UqQA)qKLJlPcKi1Hwm-?+&p^lB8!#G`S1i}BY zYX6|w+-q6_rhvkTN~ zy$AV&9k zwy$iQ$YcUTdl#JUGV$hPuowJHY3GpZgdGbyq^b~0o+EpYc+7r-e!NltZR4DYOZJ`vH+b%cf@BC=)NM}bEq3gvWQXZwXTW7Al2lnhhle&3<}2y^@R3 z<<#nln-k+=Y!O+LsgL%66b;OU8NsU)9akgSuT@FaMYc=d)ciAG6}Ox^yL-N3;-Opg zO!OaQ%sn$TFL-XhbI{!_`k>uCOh>-V7@BM52*JC+HI3jR+iVMp zuso{g1>y)}qI;g_?3iJ;3foGZjNJGgVV>?umRxyg*_KZXYL6-#mCru?w4j@jk(x#n zE3`KhT211FG-#UmPI9uCp-(-~Bqj!)y!@2Zc@{4rpLUk&t5Fd_;{*Yc4$@d)?HspSxry7&9k22eQCz0;G}7%m$a_Fns9RU zw(KS06&qUiSw}lBfB53kDQ%rOv89(Rb;7nbKYN|Ex@4)2SoqhUs~W#cy(vvjX?0b% zU+q=Z$!_rY+^P$c+lrEP=Cr+$mhZc&I;Ulo(?&z_sh>8*`ELjfy}P~MS~PLZ*@b=& zlC-0}dy+2yUibaoRu+x^{YT;-N4;NrVA1DG&WfI1s}G5KbXO`qtDJXkA>X=yy?bt5 zOSQam^4|I$-!0KAk4gWn*7nw)yZ-b?*R{t*zg&uw_8r_4#cP+Z<-ADQc6^oJEwf)j^>OQ$8*Gd?yw%%XUdWK^ z-Hv*7rJoj67FKq0wq4Sd%cPXJBaS7wh;5j2utO(7m`!<8gRf-I2_~~-1E9=7kc?%s zVB`TgV~L3m--_M&tLDTK87L7P3#wG()e3L!-*c?qv^Zfr~ zcfpUZ58_wce(P-L`TdX6-*?Z>>(7+vE;RJb&t-Oda`c=_0rSJzwhC+ZzSUijdpJ?O zG@b2B^t@NGZyEmPRIhr}euMdzptbP*tgY$XFFv^1zFBcE;>vaBdpBqKwYS|&^X+eL zGCTF?p|jdOzqjB1Nir$tv0XXk-u`{hW>4LF^XzJWUjKY~@#4iV><{p)c(Fo?fdK$a CBt;7V delta 3316 zcmb_fO>f&a7U%^C4rhp|9dqECWd*n_Rpe`N+QEFMUXmuNsn`sOYuJ(=j# zCgB3?6bf?}fjpJ@GF4+?NFs25?qjh2Es%kwaLymPOa`uxuS#4f-1-qL{g&-bDbF@I zIC;+l)-ROBXf%xnk{Q#} z)7MM0@Hu(sL~2>_!)NsSqH4@uz34crj71zDx(Zq0RwWCcCH6NTIL;=E?GrXXDz%a} z-Y4xCbFzkcD3CLcO81RgpLlx!CE*bc6s>&UP>d@ci?ZdT$26|7NCIkF3OMp5fEjZl z6wb<%Okg7ln77x8(vrvwwG+@iTv;Z)iuXvJ?BYQnbA5u;+assJ z{1W3`>bC|`Q2$jlu(8I;EZ~(wpz3PDK&W!LSVWyZ6=)aA69JME z(Y}#7DzE zi4c_tjC2V&ga!hr-9se%1mQRisE3sy(9>j+fQ_V&C6Yrn>4g#y3J4Mq6#;?@(H3zK zupua=k%2H0U<86u5m~5MTrgCi%5fBd@Vt3txn6bai%ZpwM#t^6S`8Bg3jA!RQB58$ z0*wM18EK`~YMKf!Py|TC9daNSDwnrw^=hZOy|c4Wu}9=rTpR0+Y(u@Jbmhh>i3Ylo z4rJ!hJ|#oKGYbeM6_p6E(Iiq8>%wMhtzu8mQhoM>!q=LK2!P7>Ms{*Dtyo*pxOA!y z8_A+uZPwjpb#-xMHsg7nRRxcFG}i4w7g97>sBfXH$t&8|oURq6{F4$i=}`$SUKN5! z@z!E6)x#|aPuSHU_!m;kEA{$fQwb(4IO1kS=yL?6KMJdPGd`4k7MZWAfQB*S6792C zrDPy!APi%CW%WozIQ2TPeSL3;c@Mhing(4VeeH$;kFKR8HKZFjOqZ8;ZB}g6iO-w5Ndab0~p@$=5zX(;5{ac1{M;n zlYOe@GKg$J6R+ZgqfbhxTyk#Rb4oYiy?hT9k-5Fv?Cii?08wCrq3`K~JWGo?GGP2y zK;Aa~V=x(C>#{bXeqByt=Bj~XI>?0K2(y^FVR{&vv*UarOg#Zy+j&nUNNM;KzWqVh z!VwKEUsbniUSWAGbaE{13B?x3WXcu(Z&I_Ix;3dK(Q33eJDI0GNox|)q~gf~ppk%1 z4cr*ZzM|U$!R?rOWn1|=srT60#}em68!k1%hD(9tB=xP6?hTGpw)#HKZGS~McJ<&s z0v$sTjhMCnA^+=c200_&yD5xP3cYYxU@UtF~P-V zB63O74ofG;@xd|4FLZ3~n9?*+%G8szNDTa>FJsUq5Y`6T&*vz nxAjF<^l3z9iZks#_F>M=z#V7?{!4hoA8;IqnO(+bva|3XRW9Qg diff --git a/houdini/otls/Vop::DW_MOONRAY::ImageNormalMap::1.hda b/houdini/otls/Vop::DW_MOONRAY::ImageNormalMap::1.hda index 16dfa486a5e32f35b0ae01adf4c4edbfaa17bffd..2a50de98e3670af748bf670ed278752286f462e1 100644 GIT binary patch delta 1361 zcmbQ~x7&V#2J6eLmR)8ObtO4pG5`UXhkl9``Z%)lU-4>ZC6s)XA)AE-tsucTNny$UEdpMilz10=V(jfs_&y(~4kB)`aH z@*;LCHXQ>H+-$@lEj)3C^yC!jrpauK@{<{5eCmM)GBNPv<)@@3=jY{>R2HNHMIinG zixwmnq={`1e=&8^>bJ)htK9y?B$Bb4&$-czwQ1ea z01-CjiyH$vMLbq{27GD#HO1DZFLn7>%iRSNy00}dcG=h4Pnu+R%jok@N0CmZ|A(|i zXJ5}T6OP}Xcd2BS?|GSVcw@N-PwDoUibKSLSiRrQa?AYHL zJritv5_%?2UY;+eAGgoOw))TglP5Qa#jOZVj=s5P!i1%T+O<1_)&+TI==06Hm@?x+ z&aRn)Uu35)%boh|G~&~$w^A=f<#ZOlKX>gyrp2yJpQN~-U!PmT*B$zH!OvZ{v|=^8kA~K6%zChw zt@^G+Wa7n>{HrF#Jz_kwW3$$mB@6FJa4%Q`dsuf5jv(YaRe z_R_`MF7-W4*6$X2-0Q8AmX+_X>zA%vC#A$4aV)__Y{Q&`9XbiZY|5J&d?kBMFqtJA z0A&t>WGtHnBMGf?PJfa1D}b23^k6O7xr1XJu&BSF_HGU3l1CwR>?@cHn)U%KU7ryJlz1 zva4i7wgigh+owEA%qstWUO=MIctMz*)t={beX~Bkdh>Df^ZNO+va+u644i*o*RGRd GU;qH}kxPI8 delta 3297 zcmb_f&2Jk;6nE8DQMMdF6t%QcHC>9@D)p{S=$GrHb?u~yX{ozyqVo~9VcolU@gl#Z{Fwcea!fmyFWI5 zxN`CZ{rUOH$N3MZU*zD?i)Q{kSbY4GS^(`Bd`~?7{`WKKdbv^iO!20V@${QxXW}T` ze5c9@mZa6?G?cmA*$CvL~0_@~+7ybb9 zRO-uAmH9piz{LwM!TNVV2A13@cjz$bIWCqsmqXy(@n6%eDdpHY2OlrZ0_T^?fsas) zVvqIFv%io1b>d7%xIMH>x{`531BrYrIo+FmGF95RYD_zh(;K8flH+m_*QNFw9dyrjS zO><_^Dwv1_UFOoDKWDDD7xTBwyYog_S80uPBUN7W214bF`8;Y5s6aiaQUpj!OoLb; z7rYCoZUV%5ND1x|aSchR_73Loh67ixgk_**2^=i)Tof>gIs^@1H&0wDiHn8<5+EuO z80ipj2t@*@oqZ$+1mQ6BXcsF(pr^qk0UPlEOC*PE(hDUZ6cEHCDgp!*qAg<2V?$6% z0|Q|szz77RBC=3EKX0f&mE$M?;W_itQmx|D78Wb(^|sS)HtQzx6!_^*y%OJF02&1} zQqpp@*)SDepa_r%+hkA9moIKrYn66oYkPaXY>&vVxYpO|>4ths=*o>15=6R^_GIeO zE+s?4Qws>iWt9l9(I8S4>-xU?(x>+yn9 zY1EuXWo2PxHsyJpRRxcFG}f)C11XB;Ynv!-^0M|dqiaP8|D*(s`&2@USA-x^ytNn% zcYhPY6L!V({)N=ia;>(|P=Yb@4!Bts`p7`ZkHTus4EN=L1?HM7u0hDTyTY zgkg-YtUd_{r`ALhTH(2g4iQTuvVnyu*Z1$3mhtvP;!m z29Zr@;uRco^hp5~3#IF~ONCi@FWyFZWNxiA+S@P}Korby=HGzYZrMbJV~wOUQ)b2(y?vesUO^*T(sLn0f-Zwz8gxkNz2n z14XwZ!R?TCi?;H0QtzR)y2@lk8}2s3hD$-I6xTM7x;K5@odQyfRQuQ^1_BHqb{@(UfCGp002lrr@wDG~!e8b}$IY}?;=he!3F?NSkXc;9}|TB_6*)>`@^ kD+V+mGx?d;0J|{fX5bDq1Ai&H#Em%i#7vLzne;6D2a68lh5!Hn diff --git a/houdini/otls/Vop::DW_MOONRAY::LODMap::1.hda b/houdini/otls/Vop::DW_MOONRAY::LODMap::1.hda index 2c6c686da92f4825d0b7de82cf9e8002f78e81a7..a07b8b43a7e4f9e3de0e9c52b94f81e2930b5654 100644 GIT binary patch delta 1336 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 literal 6375 zcmc&&%WoUU8CT#G2GnC{s=~T^q8OqAk=Ybq*t}g-op0H93_C!VXdh@B* z>GitDjc@980IF?%DRhTprIz4-_@@;AJ$%29{~ul1x4h?8N2yTrOO}DL=TJouqF%kS zb%o`_w;_Pm2i?}-Y47+qeNQVD1CTw}usM5Ae@nk$vqYL~Ayo#ZE1J{6^3A5?ftvJ3 zT1F{Z=i3zh=7APG7TKEf?Z(D?$It)x`w8~_Y;YNg$67@~$5NPH6iXGFjg1?B22$l4 za~S~X{X-EzxSRhZIa1h-fl`5~n5hWH$TC`1AILd<@$k|%|r<4Z~X(z{{S#hHg5Rmo{9s{=P^fQJm1*3_SbajI>~jSA>z+J z0_Jat|8167f*ETHHdgv-tYpqboG?C*)r`k-#Dn0HO++X(jO9DdONZeJ`An3qIJQ8* zVkOK<8Q8)CJ`_R8T@5JLv8!5yzR)vnPD`niEm&N{LWevsQ;ua;OQ_qA7@jIw`Q*qc z$uOG7r86;#l}${#X&zJTCB? z@u-9}OVP&xpO{>R?KRN-(lXRCTmccgno}}z67qPiMagZ7F`ox9vq~Aa{$e$jpYuA7@bdhF`V3xX)fCHcymLXF_Y~3zHGF3chqop63n4M1~~_38z#l-Pyjo z7J6^{-fLFY;@1ct|MK6vmSZXu5-4Ke?z%;2#PtkNia>fO3hCFiZuj6|`l8218GaY8 zw_yCCc%k=^3Y5e(A6@x@JI^BD5wJqp4zpsWcgNypfYIU-}GEaE8psfSa>V zc3sHWp{hT2AYm6JmstkvPCD!+C#to=-E|<{MTE)`PUaj9ziikvowqF!tj~?mG_tdD z$Tl%qJxOMMylt}b8Qa`U*g1WECi-xOcnnt=R^MgYUpfaQwSCp9&0g{7fqb8BH`0Qn+^skuPcjPn)DJm zERjcA&7O=i^qq$nvj7vWJwNTbwF>e8g+)>G-gQp~kIJ9B5BHoMdn{|J(VPxcdvN&9 z$K`SoBx9V*Y!&A+Gz{5=bGAM7QJW>^fFwdHg&ZC9x-Joka zaFU{f0mDYo1quSR*>%sPILDZf;D84>$6(PFF@@>gliuT<>Iy6&S6!j^MlPX%N%iR! zHoeGlu~r#0_S-G5(QSI&MyHi?O;O&&G#h)Yp)sh?7`4}Y%F;TqV@1v2meBegaw20M zu!cdsG(UJ3>e%cllrz;v5d06j4v(76R(H+DowRx-KV+y~H@d|17`lrHkh4hXn4PJJ z{4tMZU>v9TRY_0h11#S;Jx9Gp{%l%{lbtv3I(TdxC49(_i7-gn>PpVyLW7=b$Z==) z-8_zy)jTnaVk9!`;yCDlQ>E*fU)d~{@f?Z{&v}4~jW=K8kjYP#aoU&^*|DGrL50}z z6xrM1n*EZFhxJdtsBhoLd+iHWX7002cklxB06T$<}p^N`bw|adZ04J2OXe9(NJC zo)(ev>|{}AZhBkkr6*hWo(=pIZ-!cD+&X)fX9F$#8vm#BVTFfsR`DsWDQQh*gzldi zvbsXIf;}m1GXC4h942?DYpGaSUZis3D#V%?E`pqHCO+B&QZ&FBJ)RQ0Iybr+$x*FJ zqOOv?@=eV@16FZ?XR`a#*GxQg*PF5aoz&d3L*$C(4*N%gR?!B%K|2{-Gi7Mg>`#Uzd1QAIA%ve5+se4;#(aalcAk%}iw|w#r+5dkJf{F!5~R!h9tBxyC*17A}~# H((d;k*NX?@ diff --git a/houdini/otls/Vop::DW_MOONRAY::LayerMap::2.hda b/houdini/otls/Vop::DW_MOONRAY::LayerMap::2.hda index 96bcf30b96a8a395f37e6b87750ef6a077ac6516..5dd98f5cb60ae2825d878ca5247a5e4ea43ef526 100644 GIT binary patch literal 4472 zcmc&%dsGzH8DB-CGk_RTi?8NpP(c9&<&e6G8ek!=x?lwXvAPVqv%4d^Gn<)N5a?=( z@sX;fIWaMaL5*0A@ARZbJt~bxW0j&NqzWn?d=;(HrV=%3wcnlD*#~ga{E?ns&hF0q zzTf@6-*;c%MW3O|)A(8tJcjBsbZL3UthCf@eP)Ko);Ryo14;1Q&&IpVEXR(qnQ1#) zD9}PFppBU2VW1q|snzOojfTw3jG4)^wORniPNz#5!9as$oWk!r!o%+d?>*r&v{S#p zK79>5&k1xXQeo&bg?EAo?buFTJA|D4-w5CPfmf^95>p6)L zINF}h+L=tJ#PXb|(F9Kim+>A-a4HWRP7=ph%fR$&jiyH=Hbo*OCKBbK$ifSqXGR@L zm=#33B;G+wtckYUOOch~7y)FNNwSBpGFH)(KA!LcHi6mIg>5_K&%Q8TL(zcV<)YEV7&x z(GHki$>;BXJD+&}`(k+~6Q2k^SWQWk1W?#jPI&uKerwH}mVuFMyczKpWtl>EpIZmR zx%@U5UQHBlu~7KIuThzRd4pmDrG)e20G5d*1kz};xs$VGzyevKt56bXljKLGvQ#XP z>VSiab=ph)sRk7bq(Zr17|xFf5}^=cERcwEvD5x8m0U2^B@=c&2ZBW`Sk4-l2$xD3 z3+!U1g`$osbP5(ow6j(l)LMVN)N~IP$du1AWaiCQMrBi}_W z1(I#FU`DbM)ia`|U`$rhfh_VCsUtZHV_lKWti{4WF*bQMBTDDP0%b4@Om>$D7ZR@u zM5TE#FW0w;f0C0Gs;w_W??wzj)qMy>kg+npg2HmetjIzg@M`0D*@O4p@A!%L-={z3 za1o)bS{7)v%4NmKik^xQ;K*+XI`FXt*G{N0P^$fd|8O6iEcB6&(eY|GH|dT<$z5OP zJl8?;S0W=Jj)yxuEux8Vxr!ts5t6T>FsDEI(#SjUEfLCgBuTOs6pg6iv|xquJaHnT zC^QO5HinZ2m@(OSlx<^0)i*rhDT1q?8G!~G!M=yteU3Zd;PiSGrQ@CGhwJr8$F56rGd?PJCjxqQpPNsAsmXlk0aKj;3tZ#Ktr zo5$v!oHd__J9bvAvfnFAy429~(eI{ywRh^{Ywd}5R&IAYB&y)xm$sc#`5igu4)5Av zX*w~jm#80{wQzd9Q1yxPPlIDizb;v*mN<0ooc+g-96Rt%1O4%~VTqTs z=WLE)KHj%&Y;NemmkM?diHwQWey^YP<+NAc7*vw8q$Y9o5L0WS`SL^Oj$N(8vj_Zk z)&6a(*L-KG*tzZ2;Y-_ln;c=T?mwH;lwa7tx~1e$$?g%amOh#AwBNZ$1w99Tu;%Ba zerEoFU9aZX2Pd4qC-reTm)yEumb>QqjHvRuaY<*n&4c;&cXHmFr!}s*x;?)#rfu_~ zarZY3Ir`Sp8_b}Loc?LuHnkE_iw@6y<%=WV-#y(gq2_K&!o|M1%?FMSA#;x=%{1Qs z*US;y4epRNkMpYj*zM$3JEtGYO1ikI_q?zV*AHBA>}6(HTaOW2AGNkESsNBQ@`|N# z*{-_t7k9P)?PT+;%k$E2p0&;kITbxQzSsOT1Ksv`_Akpm-OygLr)K2k&&!&tLO-bQ zllQg$Li+lvnbqI*A33mSU-8X0HH+QQ}hi_cz;wuAtrPX(wML%+yg9#b=Z8TtIR`i&_)n!*MhU$@fxIzimp zH@RWxXx;Avpvmol26Nqp2vO+F^LG8Ve0_ie#o*pY*H<}jU=Bp7bln+R(Epu`Ibdp3wR>5k8Qkkf8+bLy%uhKdiTcZ%BqMJuO}Gp+Jn-s9c$4! zgIc#wL^}@sBW}aoqjZ#uf3Cgemirrxn=jvXrTTnObNI{Q#v)fiaNEPQiMO}57eeBT(8EHuYK|0;HUbymYT``zIvVidsI}^ P*}B4y_GND!tkL`jY$A5X literal 4381 zcmc&%Pmde76_>LK+?gb8P@q5q^uUZ$thZ}vBs*~uMOs%YX}v=A$5?6Y1dcJGW+)B2 zqv3$$Xjd_eUVF}|AEmwZmRpgJ&~MT{a!6U$$}!qY##n3k{=diHd*t+nov%tSpFMbe zzc=i3zY50P_M|r&8s3leAOC&_-hUmlJfbPB#1T&Dlw-aE>W@mwNTA0otJgbEg28As zJZpVjuLHsF;}zip44k`#{IC9Htm-7}~oN#u8BxF-c|xYwz#h{`POb2Z;~5SCZosnvk`*U;IazF{(Eo6E46_ zspKdm+%%!wY_r9Jq!7IW8Qu6RkU^yMZgd$inFJA*xKwh#FO~NGX;?Q^T<07@{N))) zeyj4mg^Efbp-X{gj9A zICCsHSl-p-1W!rgc-xrrT+QVqjR;?0ap9PK)?{)e2~Tk%Vhn6lD;(&Bgw1kvh%|H^ znr69lmL!yn7mJ|fcs)f$EpI3P*z%9p{8_@VbaWI02*s+=6o@P$&H(x2 zflf2xvjoq@I)>^F>ap`GRXf}wDR(v35pI9#=P7nlBGN-AdP~kd`bGv%5lX|Cm z=QW(2@--z7|JJ_;+M@{ydMHES-SaH<#Vyp@jZ1@T_ZvYZN*RntEKn0ra?8DiknVJ7 ztsUsE*9{B<)$$@}0qpDb8d9x~0YPBEr89IJc^_jwuX(81M4pEZkc>&H<04_q&?Kh9 zT8B3%u|jc#APS5^HE3SCFSM?xbU}vBT!?T8dyKRLblY@QF}imKci=*FR~b)mI?wT( zpt3-*X>4r-__-il%?4CX(LU^-87}a)kIGB5zhAg>$9PG`8Rp~><_m%9O;r8TZO0_M zfN`Z8PSI*#YQbIzH7u47zoS{3sWhe50tvf>ft7J0)GSjqH45ix!orJDT1;KzNO^DL zFeXu3RiN!+ z#*guJjX8wDW_hY2C!8%F&#ZXk!PO#xKGK7_>D4M#50Nxva4OH6-udLD{JHnw$ZhEP z-(g{{Cif9+c;lmTxd6!w4gdsol$fRhLFdAOu1^=lW=QERiMWF#93xZA;SHyeUWtl} zdJ-g9oU&5Je#7avj=MmjPzpoowMRow6$|XB-k-q8KWcpRwB2bFS;s|)^WcZw1%Bv*cx=#UX934IaS3`k1q5$pThp+M;$t+5+|r7 zVET!M4%hOuu|j8C3#QWI34|*AR+9W5TBp5Er#sxC*f6uG_)%#$y=*08mU=JulP)sG zC0epfRX3M35w5$rs+bdf0_@utmoR;y8}@bmRMqwmT-Vj0DBS2S)2T!M`CAPL*C6%m zLBqPupXYI1JHW^ylhBn=7T1O2EM~lJHwY~xl{w@&y~GKOUwDf+{f^)ZCfq(25}lDH zRg)D|o98U?aDH!6iWI=^ECG@kjWJ^JxXAbWw>EtW^h! zN(e`}Eu_C?w*orGwkrOc%$ycqUOTPmSe}_U;r66U3|pkKvEjq4hYn4G49i&2{akQA zqhZZgp>CVKwpJ&(CHipf7xt^`HP;vQg=k&>nQ|QH$-7m#({XRo-K@cA(l4%BHW_t| zQFrbjh0|GUTaGpgw?P2!mem5mn`Z46Y|_@Ke$^p2=zi5^0TtUL9&D>RmQ)$v0P|u` z)`}Ja=KNL$YWFME%IBYbwh^0#Ly?-2*b%*!5G?1RMy$_C;%7L#fUB6WyJYd}->ZCj zzf!BzETe2)T7qv0!TnGE$Gu%=wwV#!Nw)Hqv}mo@4UBF1BDG+{Xt7Jm-HQV4?u%H; ztnT}ZRdl(l@%)I2EWs=P;rO)G>7I>!b(Iw{P03;TaIC-E#35W?4&gI9BvH=c)9w&H JOApPJ_rJe;8Rh^0 diff --git a/houdini/otls/Vop::DW_MOONRAY::ListMap::1.hda b/houdini/otls/Vop::DW_MOONRAY::ListMap::1.hda index 7b163a1e43a8842f9a2334ec7ca2cd1c8c36b78b..9e236a79d1d7a7aeccdf8bd5711307ec460080ad 100644 GIT binary patch delta 1369 zcmZn;>UW-?!FnO9WtZ7RT}jRh3_t+p_^Sy5ISP&-4p58{h*>AL?X3s#K^!3P^mB=T zu)rh>kmPa6Ow7qo4^A%1EGU7Waj4;GcZVJ0F5w!D&cm{2dWXuD=F4XuL8==U|?WT2FYzsW71@u9Kg;#c{#f! zi;jVg!DcfKM$yTQOrn$hWgA7~ef|CYf*d2QtitjO^nEgmOMDXxCclvNuLqjW#K4o6 zpOTuKpO;rsS&#}8fp`uqT98nV#|EDwW=iN3FX%GF9CU!ym#?(oxza3kw za=VCGBx1YR(T0DFP3xQkMc9-tZVc!Y@mS><@FnxxB5RvI-Sn@PdkZFXUu$ISvahdG zQLWvQ`s{xEVh@oY;&Cf)>`B`^^T+?!R=&$`s`!3h8DZ|ZdErr)*3!d2H>Mr(Qd~ zbQdnPsL-118+T^e?3E7p12b=hWzLt8KR&l`>-zd$KbD?wskNamd#}E_bY1j{j&$X_ z1U=8>Q~sTidXvTU!kSgr-&!{@?%_e9U+;2w=e8~O)?UA%pzNyW^9>PK`DU$Oz4p@7 zO%X9ypRZ=Sm%ZV7??h3txqsGZy;PMu&||&Y$zSSJ@5TbDP5CtzVbcqQR&gCY787#n zbd~MFu+Y-`@9INZHk!3tHFmGf(KYPyeZTwO?(0GeZ2k$=_h#?i&eVO*o4-{>b1hf6 zg6^}{8P6-N+O2jtef^XbJ^g8bdi8!Ivx|94rSiYLU#qjXWS`z~@vU;<7rd(z->93n z3G<#kZ8T?%Mi-OYVPU_2b-RBEb1&Eb=W(QBU+wV%=a|gbeEAynF}$}uYVVycp1S7R zSHqZh&Z(!^H2lqtzWUuP=vS(^+byRf)?I$e>H?=%K!A#I(SD>3mnZW*xdvzIoA?GRK$m6Ks9!I=*f(mA0DscH^qa+j{pM znScGYrjO3Gg1470w!8E+S--3A^swub>+9=x?|fcv zNeE_B-qdhbqUQutm;q2G=Ujq|*oNagZYdSJSC^Meva(?YVM5N1vfnJ&Scyhy}T;i+QI(zyj4FGzcrK{Id^1x)Z3d(RyBeA z)~n3LzJ8rhzHQm%g^AlDFF#(epm$Tnj|rXIgLm((Z#&R2n{n%>iw|wz=LB_cU+(|E W>gS&?FJ5T;;*Yai%CKCDfdK%&^GBut literal 10499 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 OGis(;lx&k?U;qFk!dATi literal 5919 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 C%SXZh delta 3305 zcmb_f&2Jk;6nE5?k}U@~K!vzW7o@gIy=zmNrmo}S+D;S6v7^{YfDkQX@7SJZcV{&- zj^m=Tq9-^YQF`RSjWZG_Bo6!yTo5;om5?}cg*UUiuH%HZ0@kv;^X7g2-p7ppy!XrJ zb6;LM^O*kd+Y1k~ug^cuz@rz<>?^RS+*J#p&B6Ed!!Le4pRCs!)%O%{@)(akoqH`> z%q6=oRXD+tw7Q&zGLu=%fr8Bszl!?6{%U(1k`2y6!X+i58A{3mk;zV9qgR}j+bkPlH+KFdSs%n__flL$e!IMT!5WS zruYqz&nCW{tuWsw0k~NF7OZ~;WMIjhb4L!7p5tPPGntZ=$(;Hr**dEn+v4D3`48ay zNICE(s#5H+{`Y^)jbA+95pEA1kgjAL(Lf>}OHL23KKjHcY+p9!9mnaAJ`LvaP%>kF ze*RMK3Vcr9Igy%I{P3Cle*dHKLH2y1u+CV(@z_xS3#TlZUnt}s<(D43Q7CM)&^~$p z=cRho!Uv=kVoo+N_XR2}qufoSG9cZ30G99ody1C7X(-0EE(?<7oqIH_us{NYS_(MQ zB_JDeA{6M#pG06Q@K|@h8N~IG7-~hJwSv0?;#QceS;2fA7*l15^g7-rRno&lPp0|= zskSCggZUN4JJf9srJ(MUXkcT5lO8>+LfwVLRT6dFAv&zw&FJ`U1N*5XTKx)V{&p|n zH;T6oeGihXYiildTR9Vvpvznu^q0-8_DXiiyj3!ax>l>KJ5)thG7u_W$YxP{Kn3bS zts+2DVj4sOx!_$ubt@p&LrU;~h$~1!&37<|HypTnB`gE2N#I~Z&qV=~s6)^IcC*B# zlDKFzAOWHhfsqaYhtN;}wKGO?KoAZ?k9MbP}w60i{sutajiX1!1XLIFWMq9Q<0 zA=)DLJT?NQG%yfG0*pW~Dk2MIvn4|XsvJiF2rrv&tyarUwYE~;s<)kXvspKhr@&8k z>gDKm4QLe5NJwjyX2Vo?fg(U6Y?DJ-Dqh&FRLkx1?%rOhXivybxVARy$%cB1>B^0D z5)5@E9m>R`14>4OCl(NjiYgIcqd}x9*3x!!qiE02Vtw|E!l#-E2!P7>Cw5XZ%}`s> zxU|c+>ru@qH>ysfyk47_O?aMWRl%bkjdg3-ffNl()g6@dc~SeC(zT+Pe^!D zF<|^xK%O`LV=x&X>#{bXejQFi=BR;V7LW6RpOrl)j|134Dv0JlRBCSSyvzK`4lDH-zO)8!= z02&DBRL=>q94NXy6xtyQ~<{fGlJeS_ACDoLhi9&;tCi=n{9xu_qRKj4vc-;oo!?=CJ?( diff --git a/houdini/otls/Vop::DW_MOONRAY::NoiseWorleyMap::3.hda b/houdini/otls/Vop::DW_MOONRAY::NoiseWorleyMap::3.hda index 83795a0a5bc9a27f1b56731641ba55eccfb469d1..5e5259ed66fb4e570f8fa186201ad5e270217d08 100644 GIT binary patch literal 15734 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 T`t((woblq(jaB!LEGYP2Djh(C literal 6076 zcmc&&OLH5?5r#{usCH$S@^s}mUOAx@3IHL>vJI0|K!6k(lYoi11mm`|fPjVt4bCUIX-aRKPJipo;_@+r^i_13fS zu+wQDHNLFZ0jRclEZH+I5_WM&fnPUV?{_TMJNUki|KJMuGS2r8IZp+>AVnnjdpv_# z_39NdOO1H+-;qJ?d+nXxv(C}y-B56z1K@twAi|C9+xr!n82cQ;P7;otceW4oyRDce zeAFF?IJ08CJxl&>Q!tt{hx7JIrFV|L`t$Eb;QLwcB4bYk&zQ(#COcUk^Hi2f{$D{< z`BGjaAiBQC5*T;$pUMskyV>JBkrg>+$S)Jl?BZ>%}=6pi)ctDfnf{a+o1Y8#R{wts0 zm(mII-Y!Pd8pU2wM|irfkqPay#0!?kUEpgP!P1C{36&?FU4IQ`=Q$H8P2`vYO=?D& z{>ZV2o;Erj_+Ff5(;Uy-lZ-`P7Y_#*7f#Jod1oNR@Q zVwux)z`_a3$2{_amIaVQ4VVcs^PI%#2|tr3ahOggeM~4gbP&?kkQsyaRz?TR>#Cf+(ubfSK21S~esF`S)i#Q#5y#Es338hvNbo3X|$`&aH z2sS~zrhYj~%#1P)Lqi#V!@S^$8j~)@GXd6I!6r2Gj?~k!tNBeO3nd~dAIqF&UT`cK z>CV0vh0IZ25;<|kntn{Bw~a>;Jfd;xJ;uXCJb1TgfSw!i2>P<0-fb1Cp_yewYb>)EZZ=l zBWW_-nP5PdS-w^vwaHxsUZ!;s?oxRfblWRJ=QFox%3|IYu~*WxDAr_5k>$+^S>!Dw zT~UP1vLbLUzlsQxQbpkl`BY?>OP?Z_PMRV}CrlA!)1@eLK2M6|CO3*O7x)XSD0&~O#LPHWyH+!*x|hRIcAHUqrcQK&tk?3*O$@IsaD@8CL%sxC$G)s zZjywf7>YQ;24W|v)BKh1g<;rdBh*jTkocbG-C4W46nby%-WxDW>1&D}f3x>ptPVm zbX@g%ji}y}qHTZxKOT}hB>0euQ7s^wnRzU99hR&QUmKt~0hjr(fNN75m(h(zNNyfIb)Ixwq z84#*DCFPW?VEt@&i_r=xpOTdoqt5TrQ-=LsuqRYZB&lzbwa@(Km<>+QFYC@u!D^pr z!uP&Nq2%bkg5o{Qrw{V)sSfmgKs@t`?t{~g! zZyZi}WLNOX)1f2ZcyvBVkVpEYuo=`UYXL#a%F%d@HiP5dZuyho(U!lV4DjH-ry~;yY#X9?5Zz=~ICbO(Xp!D?ZuJLBXd< zgb+tgGcpFY%%T{F0&<3cBr(d31P1mHgg`|47b;Q-&2VxY=qQAoHqRM!jA>5tGrnkq zqL<1IEMdxig6Pl+aSGvQkcl1&Q7xeZQ&ID&kaBrTRgw*5w?3C_1|ROV8ewZ^w{d*X z3wxc;K|u65!(t8^+dBZoaD|2JH#_Y>ISX=B?yL57YvY6G%~qq=c>dzW)<$&(zN9)n zIeGH_+ZAxoz^iq26GFq_TbG-hY$tqcuxs6~K^Hp^9*ZawWh*{CkSjJWE8yzkVK zGPqQnTv5}>v=;4^USs=UCv3D^VY_j-Gt+8GzDuccj{0dwcc*=<&vdI5kK&vrq#;rL z+i$gY+DjNWY%MY`HSNtHyTI8f4KCL+o@88L zJLH-2?lg}R>HG6v6?=5-0e$D>4AmFeu%i8^ytZ=J_kA4{MvYn&V+-=Hx{!c4hpXQ; zB&@&r{rr626)-l*a%3gk;``Xn#$43h0+C4`=TpqHe?}9OUyLGwvlKny(m$XwCr9iw zR+SYj&yb3TRFL~?q_$T7=+pYzI>xn6Ntp!C58J&LNN#X~3RPS0LC9-;{}9aN``?>8 z%oRp}$PER{c&KtTsFT26!QrT_FTsL)I)W|T1cgh2>iI0J72?)XJ7J35S#vv#7K&~V!Mh;UMDV;=w*>RBSyUGl3LD);nI=?Rjs#d%wJj+(z9r1f zn#>qo2-y8w38+1+tW`ew_~SX-bU2u)DT*c5YYNGyVxS|oDp*p*1o3+IHIRZ{9+n`rl6 zkMlgMSF4kY=xkZyRdKq`5_(a6+}&%mc8a>Nfsc<9}?;rTbroe7RQgaigw(J9F2| zU6Za!*sm*nyZD0hCzD1yvF`AC-TxJTf4%wh^M3cynH$&U#9dvNow71&>EEP@$JTy% z8nx4FZG)hDf0hwXmRS$itv;{IZE}J0VQ*f~nhh_WxQBY`7qYwEi4={x6p+``dU-)orIF*&K(oq;)3_rKno>)G(>NAMrZbzcv1=~(I8icDIvMJuLp z%M9_PdCyT~}5O#3Os{e1sEk0TX!HAy=Z*VS(+Z8sNL*Ot3v-uYNZR`ju|Tx!UVYKfV2w)dfzkfUkEi2AkcNH4xms*RJgE(Pw2# z%b(o{s4bUT>OQ}6<7~H|jfMfnSzNL9XL>FjZn<>-K+UWg(a)I%(o!>JH>{ext=I0T zy!mHM9-V6iZ!cZkUGLJiVQB7fLB{M;uFV5!*25V24hEFq`tG z24BgZ6HI2w20)pEAQ{VM!N>#i3?wE#d@FY6ubLA}WS~TFke{fQ%Y@0TT!K$Z7CNz5 zCaw^0^pgY$wE=~;fP@NH2&CJj^NA{*nCaZgv58-@{@9!z<949*8IW`_P{%nLpbiuv z`CoG^Lpl@?+TsIxEG^;OqGth$O(-gU>^%=M9!+B39fM~+7HC$~L#>Vfi!K9m&$pv9 z4AW0xnD^+mJ$4t=+5HlKwV_5s?PX*9ivPQRe6CeHmK5W2xjMQ*uyUihK#aqWBwmi} z_tl&k76scAC+#w4s`CB1FsxzUR@2arp=%i5cFyh8-)gmirR2|&duvzRn|Wn>tlf<{ ze&y_Gw=He?xNd25m-El8kht~tuQ5y2ow5~E`}^`M^Cw2_v8?}h`~Cho^XJTQ`OhTt LX4|JtQVa|L98gBP literal 6437 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 diff --git a/houdini/otls/Vop::DW_MOONRAY::NormalToRgbMap::1.hda b/houdini/otls/Vop::DW_MOONRAY::NormalToRgbMap::1.hda index f1881c6302f49eda899ee29ed20e5f1dc30f3a50..380da53abbd24c0278084f97e86371750fc55fe0 100644 GIT binary patch delta 1339 zcmdm}c0qiC2J4%wmR)8ObtO69FaQCV3raHc z^NNASHv)|@fGXj3&IhW=D=F4XuL4SK1e%}$lG@zKRL00wmYQ6WUo=^a#fnA8K*wP7 zGM4>J6K6MQ%*H4`S(3x29%vX715aLlN@{X`US3IMK`KxL;&QNPL1IxZvZ#DF z2iO}7|DVphpLg3#q}}vQn%D;M7gHy#etT@O%I!}~A`#!&4>y>x_N+NGaIX(}6Sw)M&!6w5 z^Os%DnY8R@NY3mfH}@TNneC0G&b%ypKHSy)wSekIlN z%E^2AJ-%CRuQ(?C*ICaPdRSm#-q4&z`xOJhMZeBZHu+x94=56Pn3(DV5;r*`B zbY1-7_0vy3^={%TX%Y<^8DU_B*fIqq-~aW9s+rjeXht)ilID#_i?F^td+bmN+rqJFk-@ShbF@M_6x6vzl}@~LYUL<86rk8N#|R|E3lz$91`0h2 zP+V7WPDaaRf^j>SV2XW8y+pAQod4v^LMIl>;uQjpC_;ZOJV%xI+mv+XB&IsJ)+6t0 zQ4D}ce0$htn0{y`$QjQ-F0%x>EWMr&=ro|%j~B<$WS|lpoA{6QSO#O7H~$}Y7koH; za(_VkTW3Sh{y$EC@1LE&-pEkwandZiTWmcix|=&6upM%*c8K_WBih0F@ZSW#R|k1s z*j`4Nv--cE7mz44Ul3+zwfA|mZ&u;fijTKX$BU(>r(fL9H^aeXofHED0M~g)umAu6 literal 4913 zcmc&&&2JmW6{lgh2GeMxC2)+*kUJ!&TJ9`n zhWdzM^cv*Y|E9Md`e*deV}PD}=&ipuJ4;a%ZKu6t1z~sI_q_M!y*J$Jw7x1`J~#3C z?p~+W{wnIVclvwXj>r8d|N75g;``SVHH&2`tCN@~a-g}s0Q5(q@)W;)rm{w(bsQaZ zyPd=4*Np}MwT{wLp7hn>cyPdhujgF9`n%`4f%Pr?hu64QalU_`RI2#}yNU#VUu7_> zQM)E)r4f&R8X4ri+iCZYyN7@5MOrBfK=Is!h~nG7%fDmO+`a`q^)#8k~hB%>U4^Iu-yd+l?p`4gFlxwzopB*wGeekQbm zno=qF55Tv*DYtjjbShF^jmg@x5J8 zeoOlAvfLBQI9ITd((GDvu7(>~#Q4mrDYtUSljMSpMJhC076-x0fZ<8`RFvN?#?j`A z%U5+cOu`2uDTk|*E({!v7HKSyc<>s`O8Pp{<8S`H?=*U&khvLy_Ap$8W?WAJrJ&P8fv0!q{F+nJ+J%zf&L@{} z3I^d-mT^0oi;?N6G;)xLImG*ry<}ksHxUm#&M3Tdxh!?%4(`mDRcxqIxX{uk$0AYs zQZdbRnS zH5$HjM1ANqQ4=+biWgOHj`I!yfgG`WEc}q`F=D>8McH+q*@;MaNIoG+g0chkXfQ20u3+5ECd%h&*y?Lc^_XAjWp6LVuoN>gkV%Wsj zW+w#rnGu@GJFBE@4aLCs2Yjuu$|+l0%hd%vekythhIool8P?ch8=nU|6EQqN$8qJ6 zVD--(;T}$lUw-+W%ytxQ(>g9t6if6R905b^h4n#Us7`w(>;Zgrd<_~CA=8MWF^nn(Nn zsNe1Ghk1qfnEmD#ZGa?P;URlF-A+i(f*h*ZeKhFp%@3aMw3_|q^A|6+H*0h7CDqa4 zzDLkk4ks%PL^^X>bdG|6-E4)YQk)6xH9!Xi0V+DeQkrf*>ptDAEx~eewIz9P)RGFg zRG(Z^)6JX~=aqi*i~V-g?6jgz^PoM~>PglTQ)?#4|G~Ap*J`ypD;PI@^~zu5sI4%&uoIPrml+_Z znL?*NRT;%&W@Tc6U~yIT6I&nXdnae8*Em0G&g10gwfg}cmq)oCcQBpDaAa#sXBNXR zJvVX2gRP(E34)^LiD_nWkl~jgKnI*C-6-P9rdHY+Haa-t2`Vd`N7ZT zj(mg+k-Cu?|_jFU#Iukb7^Z98Y#2@fKnGLEumD6fWc}<7b zREOyPg(GWAa;xC+vdQ^x6SJG&##c&lw!H9mVtRKjMu=c%SeTFYfFqh<+_V#d*Jei7 zGC8c*$kb)A*Vfeh3t$bGJyYDfUo-L0uLgzcKS|9aH$*OZZnwABZ!h|w+uzRz*J3j? z`Ou{*O3~0AcY$$2aT`JME=kQZcu{N-f<@RotFJ25KD)2Vyu59=P$8_;$;gdwN%K4= z#o?N#mT&nap#G@3QT_CjPZn%*I`XX%#R}^kg;6s-6fTyyBGfWIJi+v4iYOKNTYFgj z_))c9trv(&p|Swf3PAMeqyI6s^PMg32xH9BzOBU2j;*||U@X(;TZs N?!Jy6Bi4QQ`!D3VsxJTl diff --git a/houdini/otls/Vop::DW_MOONRAY::OpDisplayFilter::1.hda b/houdini/otls/Vop::DW_MOONRAY::OpDisplayFilter::1.hda index 2adc0462eb31951245dae60b734c0a2f15a28296..846cea51d433525a093c697e74cba2ff0e859ca9 100644 GIT binary patch delta 1363 zcmexuy-0V02J7dnmR)8ObtO4JGXMdY@L(e@sYyh$3i~!Kogl5c=Ga7Qj_!Z@=7WTQh_26 z4}nDs5{q(?MdiCWApZFObmqmp+h!tdrf<^3Hi+MtI%)OWV~bU8f8r5|*j{$HVI5=B zy2A!MY|0lm26T#etm+K>()nwWwM}1Y`d7={1rxf%8X3Fx*V|2+WOvHw^TXL1LahH< zbwzjQn$7O~pI4q~byh8NmjBUj6HIQ)8(v%%~aOg?4a z8M$_nm|j$~>iQ^&z2Q4HH*K?yc3zzL{@N*Cv2|v1OZd94eoNVyGj-jRqmOp&i!=Xl zvuST$&zcP{oKC%R-H8;9x)hMt(|UPA?c>AycC}6p2-Prqwk#;_+HJ=AZL3!O z{~E`p`}Ht{pGf=|5HT zwsYmK$t%lGwN;B8{O0=QYthb{wQHE?E?^0bpJx;Q`7fhz;q}+w*X_S`Z{3%BEYhpq z`!D|T#905^Wes~Hwk$W_g|Cm#46K?F@XL6H|78CpJKi*B<;}`rrI)r{-2LNinO$q+ zQK@yYR=?`41s6Z)t5%v+?{>fM+IoP3-U~eEX@!?ysJAc)jSRw-@f`j}-wOl4lZsihuQnJvA#WHb) zfTN!zNT>}cv;`zoxI!S^CY?`I>BLOuR*p^l^^(Wt^cc4TrO$w*i-9`M$pCer2+9AN zV;Rz+fY25n&|_%{=N3H+P;5d`@ni3Kknv~|`|cP#^RYm+q8?^#{9iN~n1tiEqcaTC zPhpt%=(as}7wohDDgJ6hjfUFGiSaA`@BZ;QRP9(&jL&8E=mx>cLIZ&qhaVZd9NF?! zoEa7ciTfv288B7(e%%<>V7J{g^rPn*M%j+Jo&8&_HnEiaT5@mwihHxKl*iiLn&bDK zJ#Dw8Eg#n{jqdOKGb0p#T5? literal 7675 zcmc&(UvC@75m(@#1}`a+76|gtK5WhbWY-ocI?X>uQp$)@tU?kEleQB$#&yYCky{;a zue(S6u@UsG=yN|nzeZ8?rRZ}%MBn?6uh8G@-W~6bl;aczvWCUG+2790&d$!x>>V8U zzFJ$fYk2(W!EtZzt6;FVJ3QzgXMNwvzyIeac>eiR%|jW><}~Dy9BHmELH&+U8DjmB zN;;k1@KYq~ty3+xn)lYiTBoV*dmr*Kor_*-Be)*?t*lT!y9sh4E4PQC*-6N%9 z%`aK47aYI+yd#?{ z3|uz4hwe9fl1FMX7;BlN4*u3*27hx`3!aL+@2$hNwbvee^OrwPfO}_nnTY#ZB|@iC zn0}H<6&tAfSAd#do688G*YAl4%Khx$#5kk9F;prtO*0kIiR-%d-%Q@ydl#wZSSV4j zd*^S&CL4PFkdN$F`W#ZjNm1vc%lFHMlvL($yF>(^~bgo6i?}-yWk5Xn$YWzm% z-W$&u48m&D`rdaMV{ODnCOlzhVw}RYi3+#X^5O&bt@9pdHU)EQ848n&wI+S;HG&`* ziHVFG$LN8yj_(AUA9rB}yB z!kD@&viKpxB|#PZRf005tc^;4{8dWDD$OTRf-?UY^i_BsV+SoazYBVGx@v_d zV4&aEHQ>c+r2iG@RhBO5F3Hc%ks3HwI65QwthOOAvz%UK&POZU5&CvPuOi1nV$GMD zzf1Hg6p?z>?EHO8uVNz+PtxfUWB7-qSHVWcwTW4M`~lIc(6L$x_IDk<3f5}AYK8p= zmR`kja9&cEEJpMy6mGTxY29prTm)u15K=y&key{dosKjCk+Ip@c?@?0t~x#30l#2h z93A!`ZZA6Wb3-KwPp5_A@HT1WC=vywbduyMkkyN0WM68NvIjP8>)Wj5Gp4Z{r52^# z@sg7x&LyZyw1|+yonhJiW-k6EEO2)*(W(VX9k0v+12I-{STljL)db>XVaU?FUbMci zzyy@LE#wvka49G8r}oOGUtW63BSOk2NClfsxQy%$T;fb1GQ|^@Uz9xY)!Su)4NV!B zn`kMwI#Cg-hZUyjhG#q;lfxE+NUahN;#K5mrA&Cij1Yyb56W3S_2ex#d#War(k`R! z(oWmVeLWvmY`2UtC2D6pnj>pFv39PmISu;(cC7}Xt7eTX|BBh7YN__*v$RQjVN%kn zG|3{Q5uI8w$uDp$gzO0t>ZfcZ(sLnV=Qa#SF>@|e6{vYUp*;9G+hpxhwo7b(upyAQ ze|v*bqawZG-C)dKH=yQRQG$0mS>+oHk+Ykii=vyVZ(lRGOSSo=^l)=nWaP;A~7;+(Nt?bs02IfsQe44Y=R3ziA`vE?;gP_T`dt)s%q zZaDC?&Nj~2`nnV64fvTDU@gRb>@34N+ideQZ+9xjr?@k*#XZs5pIP7mLTdK<$uC>Bb|IwbXe`6`#|?GTGN^ z_UI&sZ+(6-i%{v>+oEm1-9$(b@mSIQ*|z_1xWDm<|M`x$WiO$6YCNawqa7^x)_WTp z&Pi}fAQUy+xYZh`jB;f3MdKdVBlbhlj&p*zX_u zE)ZuuhutssK$0*;MmgB+ANyo1@S&hH#P!n7)_YHOd);C8$TCG7dFsXw>R-39!?9%(6JKWmV1TmXX8PN63jx zdBnN~@zT8XD8#YZV@%Gpx>59hjJkKw>+Kz{7`T;1FZV-++V+#nbgE*1;Q?}%D4nu1 zBym{Zc`760dF8iecHcNe_s!FD#B1!Ib!&05^ZG3h&H9m(L+j|2!Io{+_AIV%sa?Y! z_qKnW=6QL{6SE}6MuuHH4=3PM=}x|`Y?jJ&j){)WIem!0Q>amE@>6BJLvE`8svcB~ zA&;?pkGN)caUO4WKK!(^`2n8WpRx_+KRG%cK1DphNT3kt?XiVWV6UzHg1`5pnZxCd zK3q4@B2fWtYrn(%>-ZUNhFE8SdQ$8L>i7-*Pv@g1kL9cxl3&xNHO(j`>wQ-i`C_6rYEjMt%n_8tscbgG#t?vZY9+#cA^O6E2)p4<35h_Z05@#X0@ LKBwKzPQU*FUHnT! diff --git a/houdini/otls/Vop::DW_MOONRAY::OpMap::1.hda b/houdini/otls/Vop::DW_MOONRAY::OpMap::1.hda index 020e1947493e4cff41c48ae942e1dd284330d32d..54055d53384d067e1e5be657153c00f652fde4ba 100644 GIT binary patch delta 1340 zcmccUblrG@2J4BemR)8ObtO4ZFaQCVX6)B_D;V&KWkPf1PA&&w;REJy{4KwJ(M zEl4cNMHZFs<^X$x;s4W__w#O>iL{5lSthnY{KeEstKS}5ta7`EStMgO@8O1Rj7|R> z14Y=BFK!Iz6!BQ)8So|X+cImLb-K&HTJ9~F(0#3uvCF=`PDQnLOX{=z?13s=f4J9& zflA9Nj7Wpm}`?o9jV)o^u?cZ!<6*jI~VtTAUJNCCm z&jcHkr&z=qoy0Pip@K2 zYpn9#L(QsR?%tHL;&l%Xi%Wj^XV>I&i5pkRn#6}kFV#-nxMP)m81J6z3G1bmwRNn1 z28LepwrP+o4{M!gGDSN1p-Ia99|ddHJx~b|?dsjRX3F%hRZVMGz1nwoB}aX7E?+5= zc=XMvB$3(o%J-J*t2k8t(flWKy(*toZ0>Y9F3+GS(RB_{XSfZ|e=gxGEogo9^y@ag z(+mB+)urYvy6a_n@5S-8I(tj@=^dZGRWAI3cXj3)cJnr2-m|BT=B&}^Vsbky>=(B; z=1*tq=K6VRNjCTQCGSvNx23e*Tx4BaeeRNdFP^q~g}weIq4#~EQ7ZG4<BXd{h>n;BBz*xU6b;|ph z%v%>NGx&0MjmF;CfM4nn{*&dCY;(`H`K48_d9@^WvH!>8U#qx;yG>(umweF^T>PM~ zT4hrG_r>?!jvrrq|FPS=)omx3rWs01WYtMGP~yJPaHXB=FhPV=}<`L6ID6^R{|1}|Ai{CDL$ab(h^f0 zT&FaH;ZjN`Y1GYr#Dp*RR+(WA@u z*j-R(_e1*C#64%Ui&SFQFh;ocG;`a-M>yxDBrg1^1{Szk(VDY zSkSwv;>U!}?ZLbE*0&w#n9aEL)5V9j?{k8>r>Fb>tNr%<=EaMFU+l}p1KXBLF)#oC DAf-Cy literal 8529 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 diff --git a/houdini/otls/Vop::DW_MOONRAY::OpSqrtMap::1.hda b/houdini/otls/Vop::DW_MOONRAY::OpSqrtMap::1.hda index 3d698a2ea357cf787a0c92c41a3260bf0a370e59..b91d2c34bf77c5918bfc5a8be5f957bc0d1efb63 100644 GIT binary patch literal 2904 zcma)74_p)19Y;{>9b^nk)r#mdpg}l_m8z43~sKDnwL39SYOndIo%arzk$57X}8PvqItwHIL6@)&h4^`%d})W_jCfq;S7b5 z@dSyhEF3{oEUcJ6G#P9cagU*)48^f4O`9Q==HfDaDNp$U(I;R9r@%-vU`iRB)r749 zn3bdRFpkh;Bv}YdIE6DXE(3}dp#TmF%fpc$wIGOz?hvPC0VJ_(oJ6EknkYpDn!zap z&g5ZiE@CgM0OJK>@~jzyGzbyx3k$B$f+IqRgdRl*%3|e^d|c1bjD3;7LxKWrFi{w1WpG3qiyJX3$pOI*D@6?A8Yu#z8^^~cW*|DD^KphD z3^?l$7Xm0k5uHw#jhhGx;cJW{2oew+1b@o}-fqH-lNJDFrP7J01!M9c$~S-?d=vPu zR7hErPz0nQQs-lH@(f0qc$Fd$3_^mz zIKjuqVJ2SD-a5IQV0An!+7U&?_YWlln=&4KI8H z<5oM=Y^co-M1TJowI6a+%i0@}i#eYj)%P?Ru& z03h|p7!%wXk&!?u1~N&g_rP#9c+g(2aNv|?~mu3&-Le#Z$mAa7-H#(;4cSU~|9 zJbP-KVPOPtCIc(-flMZPL*X^*>f%8`_j;P5_^Lxhyu}4n=+XpqQN=7M0LSBjJ)7vh zFz;8^d}W+-TyZ>bNk(7g^R}x)uHKr_5^PkrcOw50-=Mj2Y5w(tl~l2J{Q9^2gFAbBRWAkY+qbX1wP0+px3}Lc$l!PS3U(|zlMCUwG7)r}pyGdA@n9{VP1hHdmziSqrADqnBWw7z${ zp4Bw@JoWeRZuNgQW(FOtX|%e3Es40<(>1?B`InUD;n|*9ou||5WRig%O@w6a$*2X5 zJ`qTIS$6Kx+yVT=o~(mk8gGs)Kd0%7*?Xo#eQMXd4&yhEKL6AmNnY4q+22tar74LU ztS@_Rcbd91aOWEp8-j*@xoMrRw$5m6Yy2D2@Y*(=PmQ@neI$JBp;G;8d4Jl+x8hZ~ zH|yKNMw)BRz52?H^kp$S$DLQY7(c(1==>V;yFVVK9 zEAaKE@cSX!J9_*=e1NJYRHE#)R7neLb8PQwSL&ACS|n)Tl{fcv zWk1=I`lhDo+9&m|wa*Sg?zGCJ4~mBFe=*DrCH?Ed3*ECb&xFqO`_q;Ik9fnhzVDv)k~Y+lRJSWqX=cU%gn|&|R`(|Mj`|TMuleQ~D(j z%(-%3A7kH|ND2B$K*f2_Jq6*-We-iWcC`8?2QKpMzxUbF=7Pez!&giSU2Sb`>|<9| M^ru;e=DWE35BZGtpa1{> literal 4226 zcmc&%-EJGl6{aHt@@`_Z4NxFA1;*`Q{>bGC23Er;{H$gbZovCZ`2W>4#SNujoG_MgyhJNHX#Jk$5J%I$ zro8F((OV_J+U-$)`gDByhe^O0lRzk+9ndb<_Sg9hN=-l|!)^%jx1LiM*zffyPS|1+ za++JS@9bIe_qv>5NlM;3dzH$K({KLrrv>Q!a=OgPW6pBIB_(2I+~&xR5Nxl7=`*mS{mT!XaCc>%MRiJQ+@j^F|9= z%(!z_mNhZKGm<#oHCTDBW^O>yo(b6A~uf)~PS)Llo=MTTX;iR1Oi92bd1+K%v?$hsuqTqg*E8ClTGQAu|l$GKPE-%7n- zzyBJ}R{4gKhriYDzV>K?0*vMeyn9|reR&skwwK-F#{EVRi82N=2n*DPBHVTFBBVPB zpt}WK&897Lpjt`<9YB?Wmuf8x1p)&uouhlm`w;U*!$a*h@;tPUWK1$07YSpArZE+z zbyz`)6-XikQD79RMt7>>x{>o%;{ARhGkA7#Tcsg zw!W@0M=&=^p32A(XX%r9Dc*W?l_t84l7$S8zD3(Rn;um^^&TC%Ej?d* zEG*PyJcNR`?o_J=By$+B2=XW~%>;r*g;P^cZ^Y(E>0J3BT!kRGg-GwgiP2NH!;SjwO~9(gKRU`O@-6ej9n>&~-ouQTmDd;a{e<*&%E zq|Q!(Kh2tz{yjd0qrIN}5_Bp%635;J@MVx+5@HrFi5DSS;$puxD z6;z%=E1qDEep^S4dh_GYn)L^;ZhVHS$a{7&nm&i-22GHHsjbf-=xcqw@>cfUpDZ2b zn&ts=15R=ls2=s2$g>|3fxTLJ_cem8Tnd9rfYh@UtQF&T@E;em8qR21ixjL?2Z~w< zM|qh@f5UDKbgXTa{I{7oHlH_Jt>{>u+c@F&q*DwfQoAX`hglCDngltPv7-Bh;C@cS zhOa{1G<)q`o#Z9ahikPcziVD|eNmrbrR(n~$AO-_8<{(v45t0{9E_(!bJZ$0qpmUP zN*iQwI&1Bcqm9CC5Wu@()gXA?Y*~VJ+6vV_cE~Nde{9o0rR)(8%BqefmBzQg+|*>H zSVF*_-^xJaVXa>K^pj84V$*OiTT>ESqSq3F6+G04^*KrW9Eay{6%%EZO8oi{Y9BwW zHENBLQ7v7T1ivH%4?p@JYrERn`i|gEvaxSTO>4bwU~I~ptp#gFO_h|pmj>HFz2y4==yendr{;HCfNR_a I4(yfpztZF9!vFvP diff --git a/houdini/otls/Vop::DW_MOONRAY::OpenVdbMap::1.hda b/houdini/otls/Vop::DW_MOONRAY::OpenVdbMap::1.hda index 8e9acc47ccd5db8d42cc37c3df232e48f70f2de9..7ea4c50c044569bddf2dea67a40aa156d48d6160 100644 GIT binary patch delta 1354 zcmZ4CvDhkl9``Z%)lVl0yM$^s)XA)AE-tsucTNny$UF|g@J)Z1thn*l*yfitt>UUB)@3# zWi~4o9RnSM&B^RP1tw2ml9*f~(Kzv&^ke}^pL(EaObk4E`6;Q%`FVLIl?ACl5r}8N zq6LXXxyYjO-5d}<{C_(0V%}{tkv7veX<{41Ure2}`t7mBDz`r|iDc~Nb#2_n*razj zK!i>C;>LhZ5sy`#0bfdg&9SxV(@pNt5hu8GZg4DALLF|B$xm z?CUvZ!vAaUE_-P*dr799=xeo1vn?|+f>*Zge;HDex9i7+dCQqiVnZ)UJwCp5U9E_l zhn%{>v6Cm~|JR9|J8z#|^{@9QPi8LvQd#=Z%c)js`=#mHPqntTYr;Tg7H zeO{NhdHsI!!{S}f>e~9;5~YMamonCR<*y05zHi-vw3{cq*^51;g7^8KDVn*ZV6T); z<<+v@FI@c7E|jNdzc7)Bjjn8N?Vjyt)qZqU*@c?e+^OrP9DTHEUySL8xaPfiJ!>|+ zc)}j)ssE87?M|d<)un*Ep4Q6~Y9AloxT|e)K&Xb~iH+Gh3U#(a?f6JyXmwxV&iN9JEc;nXCHzcG^iLOTTBN}x!Rv4F z^Y__D{5o@N>!)>mtohydux-bsYqIwO>UT(OoA_(f^yylWYhNetxYK@W3U9!?yp&gS zH$9Yd{qRfiSLMctIohus)HNKh_Ot6>t;sMD+`jnVvtQj`-+H}Yvo`nZ-P9>^HP4Q2 z==o$@yddm~NL$?u(WTqDz3SOtXMXZsvwZE%3nz2>L+5VE{bKlUL!5tN(#E#z>3#Rq zl0@zl*7v)9%KLKq#gB?F*>_HGUloWvV8o`pso^P)TMFZB1Br>OIj0g_#5PDa3q~H` z0?C|}>^Z^o&AM4o@?PG-yZK5k6GU4LRiB0|bYiiLTp{4-C$8l(LAZ@e@W~XAP$o!7 z8YI-tRd}@cS%6~G9Ltanh2M&YXG|`9RuAK+^NA{*nCaZgQ3O{46nfNdhbr+#TqN1= z9ELiC*1GoyJK$P3@tgNp3ZIh!I>Wdf=&~~)mlXqDcCKDV>xjEOHW`rOT7$GRGf^A_ zw&=%~^VnT5pYLDmuDf<3lS|I)U-^Ic&reO^WJA4WFZbpi=-6{(CP$t^%~tl7t>5>u zZppQHv*g{GhM0T7wJT&7ywCLytr4zvuue*Ul)d&_4x{Y8745QDt-F7fonVi?{PKdq z?KLk811`8l+SHsla(m_7`}WQWN6t1x{e1CZUb)%Iqq8?J*N^*GT2@jbQp>2@@$K3w HDFy}rSqe~! literal 9256 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 W2bzPw2wmb1IQGO`kMX(WEc_cAq12=R diff --git a/houdini/otls/Vop::DW_MOONRAY::OverDisplayFilter::1.hda b/houdini/otls/Vop::DW_MOONRAY::OverDisplayFilter::1.hda index 9712ce110d92b0446a5454ae61579ab7972399ca..7d73188120580dda655c256a73072289d891095e 100644 GIT binary patch delta 1346 zcmZ3bcU^vh2J7#vmR;r(btO4}GXMdY<8L4c@HiKxCYGcICl_TFlrS)G2m{SXfXWGb=9Q!t5ci^YijbDhpD9A`sVuMGF#( za*;*lyE(vKVfg=a=KZ|eW+LsTZwkKeB+xncIo1LMHjUU96m0u?_aW{f76*ipK}E|nEw9}>warC z`|OeW?Ym9RP1fnV9CJpXYw}&enPyX?c9bq}GGE5spKB@4udyjqb**7u)azTU``TYb zvece=uKzD;kBxnO>Bm2BYwGIOzUkieUTWvRt$A}ceXf+*c4?~i)$lCN4vVUQn-(p5XlW&%Rx)lLMyen>||=#}jtJ=%f zANs!a?p48r~#Hd-;cIa*TsW!+M#^e_Eub>_Z_jrGgVvR%7i>bGMzzW){RyCNSq?O%#( zpvVR3c?Dmdzdm|CV#klS%RPL~AM@v^H(#Qkd-ox4>*_@5mFw9mmoB=x%&z5h?HZqx zd|r>&`Z%v&v)`RDC!Y1bj##((sc#E}r!08&dU1NrE^7th^1c5q@K2w8TlD_yq~x!E zGezWUpB>GUTFQRR;p_^TU3GILmmcR_y1(J)lzOqxnI_UwGi5idn!JtIuI2jdpHJAu zvUZf!e|!?FqIPfYznLBX=GB;6+Rm+!H~SQ1>hf%3%fXH_$(qfAGmjgwDI4`a<#9`q zn{6mDv2sm+JHh^KthEp1k!EN`9zgY%ye$$sNcjdd2CLLaXV1@3`n{dsNT{I5Bd zAsq^EZJXi)dMq{J+@fazicKgge(XIDG9FE0-yMTzDJbgd5lYtAp~xU46n-b2nK8K- z(~fW0>;PIT-~X@GN>9E^$L<67*Lv~#c`8X-%UtE`Z!qTcJoy`Ht#pDsT8vZ6d; z)7;C!>lg4&D)>Hu^Y}vBJNC{Cj_0;V?R@ZK+IO*)M_+e8-~a#P>7yr4dVbK4`gt>L IqZ9)J051ww%m4rY literal 5930 zcmc&&Pj4H?6<6Q@&Tdj8D4IiWlXVJNmB|(B#7P)QE-gxt0Esk2%1+`K+aWn5r&{i8 zc4qa*hS6)!{TlrQy%p%!=pnZrdg>|H{@%&++8LA%{LYgAle)MAno#jrsYGjE%_Z^_rXb!JmtXZ{hoG{QuPz0oP3a<$+R3 z#?RT6aY*?_rLeCaUJ-VkH4omH6Vl&*+&^=GZqfDhD zGg9bwYNSf^(vtT#Fjc?S=P{Vx-W4&7^Z!MH3);I~rD9#xV-XMC(2ai<`rh9@Ga1K% ziK)0-eDKok-z-eIxuqr(k-+*}|A6v8f((|WcL%4DGI2EEh66&i zv~=UI#n4T%>nMYXzX-wkJJNrfIV702P_UuO*p)T9vh;{6#&e@4+{iwU<8w9=iO7K3 z!1rJH3{S!*!h0i0mfflMu4uA@G4F}k3$BgCz_)CfNCqOCaDD6*fndqv44IJdm?BAJ ztmgFD4};b8tm(4vdooFL<7t!SeG~2E&!3-ngmKi!sMHJgh=Fxg8oZjhrwp(u`5)S^ zYp3uy9doZie@m${A+<rjmxS;>MfEGw(p2S+7)X7P&BRHDPFLf_JGx z6e@=?AL$ua*A~zVuPzTc`!3TinO?gjiHrqB%TdBjo(V5#iXqQq!z{Ks@CNSNd%@-w z;lvMN^*ifaQblgO< zNkU^YQA%`rD9-6ur71V#sW>c@)Up?gDWyQ4y7D0&73j;EqjHr^lU~8;4Qy|_LfS0#fV{zk9 zbRhn>S{RlnG`=uk1Kag&|2AW`Cqtwy=u_(TqA`fND04b$VDF^{#YLyeAi$SHc83KY z@oWTyHa4ibtuQkdi3L&g$BK2wQkT;4hJAx--N3=nrpI<(g>6RiljhzLK@)NBk zspAGZ_N9~X*9`xfty#bApNaN765SIR0TAMj&Q?)6UpkrvI))MjYk zQCUw8u(@b#%d-QIGBK2AO|;#q7|_5zHH3w(D}ycCB%K{r$WEpvkB24u`h&AcjOM_$ z)Ehyqii8(QU(q3BBRJ~rR6YwHZ2IfAQ*Ww%PCfP}7JU7~O2q{U`Y6GGqv0~q4B3aH znmq?lWuSQ{Lf^&KsNx>a@J4AyU%KkEJp&Gv#{-18K}xbQMk`_<(K@qJ1SFG&A^duR z5)mPQygjE#Wjw`Mt8b$aa$3p==ooXu%&D3;g7`JTAYwuGGen0~h+bWtLZ(FEb4JMy zSID0#t5i0rJz6JAZKJUfe6-taM9uA;#?gK^>bBeaf$K7gk^RQQZIC3OC@6bd?N&fw zK@L@)E_(0H^$(wJH5=W=(`U~%*TX6Kg6rsTzZjr5M<*)|M3UPmIzvH#Hygo;6sIC9 zG(ZO}0#vkwp)lRVd2v0Qqd9TmoV-_RNl++Nc6>!mJGELYD&5Az{q3mHYDTTb!S+;Z z!SX7l1P(nG=uY0l`sAC(?Ej*ofo* zV%F|nv$@?`Fmb)8Uhap0+6dBfGe&c85dm_NDjZ`@R7&fS8yRcgpZ%&9hp{e(?;M|^ zUL${&E#idp@`{hg#*x!w6VoDwlnv){7H3>~ZXn0~ji2W6{j%nXNotVDz{U5m1CCWz zFV~e#j5IkM?VWPEwZYpUlg|Y|R@&d^+OR`Gjk-!OGt>jj1Q!au-L_B)?Abn;%J+XVINVVtK9n@J+TzExAzZ~4P zfnV@VQ0p|fo=&rY27ZhG)yBx7XaVkde&PjC!#A;==WAEJbDmtE3+@bcxAkT0uw~9N*)nfPiH}xgs%K!iX diff --git a/houdini/otls/Vop::DW_MOONRAY::ProjectCameraMap::1.hda b/houdini/otls/Vop::DW_MOONRAY::ProjectCameraMap::1.hda index aac960da37709f266fd6853920cd049175dbee43..eb261a04a35664b0608ee2921b69298d9210b544 100644 GIT binary patch delta 1362 zcmZ2&eMx762J4rsmR;r(btO5!FaQCVl19ps8_CIbqMdlGLKS#2mNG zoK*jUlFa%6Xw|0J8X z9X8-$Q@*${tW(5em1n@0-ft7EZTeD|f3@6QFrhoFk+I9ZzE(xGc1r5A`|N=#UVpfw zwajkU*on{2GtZ1l*=%x_+t6L(>^Ao^TUK5@6#reTD*M-u3)8wkHWV@MkU#_p$iQ7~4_0yY=^OrB*AN{$1)gR%Tn%eOm9+!7a-WR1AzFJk_(F4P? z#}v+i}d?O`Yl2>Yi%`D#=@See&fsJslQjA>n;#)~nd0 zX{VPoufCRaa`n3WrQtg^w`{Av?XWoU{i##gI&*4upe`qi+PQIR_9W_5>h z&o{MraqWaux8J_-tzU%76OQZ+U8u_Y^jd@kujLlIH>hOn}<)%zCJ3fGspI?s^I0xABF1=^A=9ct=hA&z%)nu>rn;$kWEq7j~DFZ zpQ?G=sdCrE%z{&G)glMK`F{DEw6S9K8s@nRSVHg1*(82`%V=D9`L%zZMg0ABU#{^; zug>>h{N;hM{`Sin_l?=I+(a*Y{d-2k)=%TF=$Yk@x@Y(=zIow9O@HX#EwNt|>-Nv{ zPfXa@mR&#H@1NHZl^u`eI-k5h$v^q=~v#cax(8m98Nr7&728Ypq!aAs3B+H<#Q_kEWR1#PZmuTv|XS~-d~1t>Pn(F^HN zQ0Eax=VY{8CZMR;{~csJn#9fN(#PgVB3n_9u=devd1M)c zgwlz962{L&FrByWZ!xkX;qHETyt#g1-|6uHDl*f&?r(T&Wcp-b$_pMA{wys^dEdGepg}xgzf5fb|^>%3YfAzNO z)mqQm%TM>7eOXeSux;k$%L^9tZmRe_q4W5{yLauK7aaF(kNWxI!?bd-l}BH1K7M}Q V|FW`@5|O{``8`38H%Kus0004VSvmj! literal 7595 zcmd5>&2JmW6_?=v1~(r_3pgl>9wuu8wri6V>%>VINiI!Fu~3OLEXp5njO~y+Bqv(# zEM}GxWy9#T=l(VAt$#}Iz2sQr)Zd$(<(Ej=X;rvu$Xven=6%nbH;=o`#E zr+XkOJvXNjh(35IA}IHZSEPr7eb`niG9@z*Q7=PX{-=}o>Gn9)d`CuN!tSadHg4&a zCqf&DfpiJ*6{pITx*85e4DGK%*rh)M43f1E!;?UzQ4sQ!udRLdueG(ye|M-Wq}QQ_ ziogCVDE~}0d=`U_d}4f*sv%Ehmq*bl>x&qvmWt5xUV98rjNB`{ z3nNRN2`?p1(yUCEXJwOF^|lE1I;R#H2Wn*Bnwt= z+4TxCPDW|Lq*})PLXzztrE`sx&M9P^=IB7hL5Fvbf*$V*Q}CVktQE5d0J9we`?Cu> z5s|A=YGfz^Ck2r$_zwufS{WwaWWdZV9~lv7(G#$>D*}^%f5AUAf<4ZG?0|r07IjAk z!3s`f9IBI`tCU7nLA0PWEw5WNduq|FK1EL$^&-X7f?Gchh7u|}@@H&cPSso_l8bdKZm)f_=M!x4nUkLF@Fo)l2_oa=iL@0&bmz*d&Q7lJuYvodb; zWXs}nmSS}<=4t1=y$S_yEJbA=U4_b48QDh?j5Ly{A$oiirEHgWf$PQQ zh)Ow8#`P^`%%}ZS?M0Ioi&~~GW4U>$>h~itv17)(^;{oXVqJ|-zisIaI~j;{fWq9h ztqPl#M8kNJ2(Fom85LP(i)?AC;XAtOd@rop*i$hRN35>U7wwB>PH+bUe8tv_6*f9% zn#X;?RF4sCNm5>jf0k6VC9YX|1pT*OfoL{4?3g|5rlK#*xRu3tDr=GfWac?XFUCC5@mg5ZNaGh1we}0`jfAddG&btV*Yl+FT=)B;qGorC5{jIK`fg`VtO86Qg{J2MA) ztZa5nC{`Wp@3K?r($gDPtJz&Fkf`alt(of(W{TMYJz=N|LyvO0$sW7O{OerzQ7ASysr|b}M|f;qEV={5+5>5F?s%gh;cgo;Xu(;RW)oBK z*{ZQjJ`E)3o3N2OcmIv*|iH^`tj5s=qqG1C!3$RRp$5E_loWP1P zyMZ3v%_H!3gB6e2jT@Ob?|>f*TtKyWgisk)-DK=3IE*9JJ!-|-pvDOz>2=;6h_Fr`$fWOqF6ZSI z@AD(kaQB@|J`VQA!9-_B-%+|FLw6gWMLa@BBF7EPe-aTAVvmLsPSzP@lkNLQ~oP6W{co^ZXWM?~@ex-zcfQ!At)x5vyAGUXjU;FpBybU`tYN+mrhCN#d_{QhO zVwNO5%#2V|YRh9Lapg0>Q0svd2wCUUHk;I-VC+MJz^AEF0T~0Hvh+kPDnZSuAvcIf zkp2wWVFhApq)xz7BJnvhkO5Q3o)Rk-x9GOGL7Lio*QS5{VWSo_ws&fWd+ngzYVG;i zIqfiewFlb(Nw~s6cI&OCPtF1#YCGB(1Z{16{-WNfwQDb4zTDaOt}_C|G}z+fxdZkf_jbpbHjR^{CwkoIKE^1`0Qu$7+6*yG;j z`*}PsuX$paq}a&ti|64494KAQH$`Q3WeStTPOu~$m~z}d+*I1*<{B@ z>SCmtsK9m>Rpz^2Tmm&y+E_m+Y!ESqd)(5TjUe>tg#!%-& z!}}n{fo@ml7|RqxLL~13*DQl)+2$dbg-x=0UZ8f_J-$R`Gsd!_Z#*I#`#qnnkHnMM>#w6_#SjWj0x6iW>M${70}p?foVl=A#7-z|N4 zuT&{jazrr~nFGo>Ah`F%&y4NFvRRAJ#w^&KN;K_IbXCDvq|ZzXW|&UzGue&)rT1o# zrb)G29-f9L%Qjv)#PuTLr{(Vs9@ZM$j}OXps+oa|#qHwl1N#Gzxs8tJ_9LyjA{=S_ NMsyp~mfP<1`!@pv(wqPQ diff --git a/houdini/otls/Vop::DW_MOONRAY::ProjectCameraMap::2.hda b/houdini/otls/Vop::DW_MOONRAY::ProjectCameraMap::2.hda index c8ce191d17caa534597045f295d1a2025f331c6c..5733171959b59e7aba889ecb835ebe765ffe6dd2 100644 GIT binary patch delta 1362 zcmdnz_|#~E2J4rsmR;r(btO5!FaQCVw5vc|Y&AnMk|on>4Wv;xDF7TK)FeVwKZg%pwujd0iX-Nj7ae zY{0{&d~st~r-;WY&wwwz-zHew^rbHUYPq{$LU&jrW0!q>t%_>xl+l zDW2^qUH@`!*^_M*;akqVR7R7Q>U_Z=EQ%$WT|tlxB2k(t6?vrB6Zfy>JH_e zZ))-4+6k#{zkT6bzX+8l9N8PXP?h)TwFnDd%Pn?qR%=^uhPEeV>t#Pp-CQr1u>4ip zi!v>z_}Q^@4;&5KHc{ee+K0an?t1T#E|shAus_y&FS^n7`O~J2mHISnOGK z=w#O>orUH$51*WUeN{+FZ$Ar&c<(aujU}P;8o`7t*1i z&LgUHLem*2bO|J61`^^Eebn>(%t9v?%i)sA2j~j1Ky)swuLiVcfTbaIWUAuBw{1K@OeK%(Qh*@px?a=Q3>TTDn zwVt(?pYA>TvZOj;+swo%m4rY literal 8382 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 diff --git a/houdini/otls/Vop::DW_MOONRAY::ProjectCameraNormalMap::1.hda b/houdini/otls/Vop::DW_MOONRAY::ProjectCameraNormalMap::1.hda index 6ce989f404a745868c37b2f99ed69c0071846dce..2910e873fdf1c8f1df247cff6de62f6e43cf41f9 100644 GIT binary patch delta 1375 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 Zx6$$3#%=CE3}+g@!Q95l{kE@u{{@SSxLW`K diff --git a/houdini/otls/Vop::DW_MOONRAY::ProjectCylindricalMap::1.hda b/houdini/otls/Vop::DW_MOONRAY::ProjectCylindricalMap::1.hda index e9de1bbd97a3458a3fee20d188013d8802df1fb3..0020777bb3eb277fa82e1e4b284436cb2d2f94fd 100644 GIT binary patch delta 1352 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 diff --git a/houdini/otls/Vop::DW_MOONRAY::ProjectPlanarMap::1.hda b/houdini/otls/Vop::DW_MOONRAY::ProjectPlanarMap::1.hda index ac3721e177c06b152eb803ae75e6e2d21c4c984d..96b1d5a84e6dbaca83128ca99ddcf73f798608fe 100644 GIT binary patch delta 1360 zcmX@_{l#X22J4rsmR;r(btO5!FaQCVS2p;F6)Wnihn4H*dps8_CIbqMdlGLKS#2mNG zoK*jUlFanMA}T>q={{?zo4xee!JJ*bJ|okjScUZT^s8ZUqta7 zPB0LX&7SJfxMUWK>;H>&Px$(iZ)Vn>)026!C^Vtr(dzp4B}>{jo%!=yq06PSKGFMV z+U)bsA6K ze{wO)FALkhZ{I%pd3w73Il2FpRliQnstI3YVSQXS9QzX+iX(2)!|`r$q)bRntm>EW1fu6zIEHYuAfROyc)A6>c^Uc zj@#X?MU;HnyK3q59n8w_)^h1)YHUAtDD%X^uZi)o2R&C_>e~8q^H;r0UA)|M%cWSU-{*WEx*UEOD(V+D zC6#mULr(SjJ#l}!S~sijS4pZes!Q5YueffLZ@;<7x;ECOdTf;oCtclT*LJ#gh0jf~ zQmEaupjzv#Vq_fhFo*%vITD}H@@z&Sgge@5r*xcZ{QKYx`i-JW(MqPALU zDf|4&oparO&NB=!Ue&PfeY)GrLZ_GO6YNCekJLz=ZF758z2?=@w~P2c{{C9S#oTQg zv%94JQ@E1aLD}yfD)s(#Gi2ob>w2Oq*F`CDM;uFV5!*25V24hEF`M$H22mcj6vo-c z5))b1q!=i1-{5Q(j65J`Br);fTd_NT)tp!&10{lk{6w`}CQNSS5`0p!(22z|afN`R zpCm}A4Jfn)BviOUAl)XNPgLo|Oy^dPP4)be$L91Hw*#fmfTW9oI?l-eb)X2z|C(bN z(xHIR79Y@KX$j{RJqu85LQ(N!?|G2%XcGJG7(6>;fnr5H+}ilRs4{Q~$8Sex7%qQ+ z;k=J;=c70h?rwXzKis7;b|RZg&g)E?A%IYx-B|T0_~9b4Q*>y^UnDstL*u56Sm^HCyj}uHW+8 z%$v{7na9SOJLTx@b{`wQx9|Q*GTG)?T{-36zJ1ST58b%=wspVWeBZoy@!}Wu0k5mB JY>;AL004L6JQM%` literal 9679 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 aUc-*(8X7YLKAa`^9mzG^TU;}%-+uw9<`)0} diff --git a/houdini/otls/Vop::DW_MOONRAY::ProjectPlanarNormalMap::1.hda b/houdini/otls/Vop::DW_MOONRAY::ProjectPlanarNormalMap::1.hda index 0cce378e3edd375c90015a561362311491ce331b..ef6c68d771a2d17b147c6c1332d2844a7db329ae 100644 GIT binary patch delta 1375 zcmbQ?f5Bmb1}kS)%P#YYx{{on3_t+p_?wCXIdZ!|9H1B@5VHcY)?`6ut%-+E)Pux9 zfWlln3JC#oLrPyPy&&Y$blNg<6M-QSdt2plgI&@o&}W?_RK3u zEy_#Gam&m}^)D#N%+D)kV3529G{OL?gxfhEs75HSq*yP#ih)6jje&th4lqyq|a5Or+iP%QCSG;y0#FTK)CdQkBzQ%px!5 z^B!(6)ot45Y{{CK`SB4^vr8oht}W0x0BJM+lm>=BuT7LxrlGJ{vO?#>GRaBj=PeY)w%a_hY^ zdkZgnh3kE=b@5kv@%YD&>-)v@c$%-?!ep;?Uc+Y3dOTlfBv1*XMdPT>4P_Lv_uUb6h%QepVVT zfr(T1GZofN>0WHoEAK2DvoNdD^opwSiphJUC8b~HEzL^*a@kGHuWX&xGV!VNrd{wV zPJDAbk4ya(zdl#}CZ+SmFL?bes(z<^Wa3`F-@gAy{g;d%Ed|cI4u$F73)mqgcEsxa z)16&muYU>XecxxKsyu~n*7v!a{>ia!_$y))p(FNw%3B9@4aci{_b$)1k~0v#zSr*6 zugzcIcIBVhyztjEldkV}pKIp0z3ej#FxF~b_dd<-Wuntd`2@Sv`$ub}&a}BbvtE<6 zG`H#e!{uLVJ~4CGo5t*}_*AZGKW2X2F@q<$(N$Z^iEXRdZsA43r2?@)Ol^nJ~GP zOYlj_LMIl>#1#ULev%-eHlWZJkWk?YfpnX6K2fC;GwYpOIX3Z29-Gr*+zymJ1ClNV z>NqC@)PW)-|7(tANQVMM8%S4tK#!#+oLlrPK(Pr$#gDz`X9CrsN$k60@a&8Q+=_Y> zJL3N$WKbj=za5=nsQwtkc^}`-M^y)N_x?A3xl1GLL^f9(*T0gl_wSDXkr1EHI{UV= zN=$qf&3urxW&O2=4d1qbypK0fuzTEPq1tID@BeObJA<+1xmr7ldn(fK24wXC

8$Qkn8&CJfs&dkp4&2YQjdbE&V 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 D=s1yD diff --git a/houdini/otls/Vop::DW_MOONRAY::ProjectSphericalMap::1.hda b/houdini/otls/Vop::DW_MOONRAY::ProjectSphericalMap::1.hda index 4995b8d8c98a95108497ce9fe32331d410c9b42f..ae7e4d425652095ef04acffa9bb9ffd1cd8aece3 100644 GIT binary patch delta 1367 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 L8jgY1%hM9fD90ab>gJA^&mb(9fPNz zO9W6D23UX$9+%9-oc#3QSMG&PAz-C8;pE&fh>&Q=oFfo_QsyMR|!i zZkai${skqO`FX_*4BhcSBMhKQxSjKXYJ~DiiuKZ~fO7o|3@kbzxy_51Ok^gXmt&v& zPR^1=$3VwmbFKW<+{t^H6enl(Hcot}GMTNI|6Wt1EWvO4if-D$%`WwKXp$c5igtdFRR{smITI^J+w@ zJm#rgIR5hG=lkLMaeJ#OzrE?dd^vvY&*;#9cg$+Fw{Fo_G4Xip_bY30%-U-Voz3lA zXSjvFX=6R!r**m1tN!C_@utATf67rp`*U~a}OuowaD1FcAMArQ%QxFWAdVY z`m*)*RnC~4RO!yZ9Jc%X_x4UvgsGrkrJAR)0QQ!HnZ3manA!)Ag!%accoA-pAOpBI3{M0UF zSx(cZ67|aurtp5(XnMQ(#p$bAU!x+~tsFU5+1Xc|dluZ>y5sHFX!Dqy{P3#uNxfIg zmj_mTm^uBj$*K2}%%+REUi>Odn?W?A5>%Mn1fBR=m z9-V6i^=~iToZmTvwfs)-#6PCLtIBF@eyim@ZO!V`Nsw$7j66`pro5>^SEA>2`*wACLQe1Nl@o;OJS@&l;F~~J-XogY!1N`*F+yr%g_}9j(%cVE)y=datS_Z zS?I)KnF@-1+9mP%pO4DV$JBf$v?yP3U zc@$N9LaIuU(nbPKT=)kNoH!sMZU}LME8@<-&;#Gh?z)Z>wH2_@$~)hD&)@f$$*?fu;!IGqV5ATBJg*#88b>MrgwG)zg&O*W^C87~Z z$^wzeeD*Cc+S>2W#Pg9Td z^zHtl^dzFgON0xslgaG<2IS$ym*FYq`y>GOcYg=#4}c6Tnd9!3&7^0$_-%P`5(}+EHqqyesEId8GsK+CW9|!7oIv>-##Dzm8vqjF0rnKFaKliHvknWAk4soZLt69N(4H#2piS!)a zAQiHPyPiz-2~uhHoCfpLjJK)V=t@D|XVJjMJSS^(y8=ZN5?4voaGU6`@;9P`yLIfR zj%fAMocT*@3BOUgx$S$9I9(tUW+9h15eXdT(qMhUTx?BeubDR|jgqdr3Uj)uVkQlQ zN@ufK)ap=y)}ZhZASp2oB7t1+E}*)u5nDq_aFd7&NJ9O#F^4Z4xOydW2AY+?!MdJ{ z0wz(LpbqS2iAyDM(N>29h)M)T+5{XzT>;eg4w4;$a2R^j!O9TmsWVByM%2L)$t^bM zg%S`72;vbH0fGwA7P05CEl^4W17Re<2n3@d%Ass_(olga$58;n6Xshpm9kx_PL~&J zExXld)J)_l@ROZdIl5H^8U-{G((F{DZYsP$5g-w^$hMp;on4u#lw0MM)z!(8)gwRS zT3o0l8|o{jD>vpy(AAZ+EfbG6DcK@Cv4BuiQi%W?bs|-* z0H}PUXD2n&2(=ZBORIdV7FF$Xy<*qPbJd>Ngy(ry6+G(ESU0 zx>gkP4@%Hzol0o&vJgaymllJ0?Jq-k!YX^-zmS@ltyHRYB^WVppPMD2PY4wMD6A&T za7T7nU_Pq?>W7R=w8=u1lCGqlFpU0HZk+^#Q>O*n=Qg%5UxzLl)1WJ)$Ict@=vs<zth z4~92_>y z08wCrq3`G;I!TM!GhqBzKwdWf127q%=(0AUer--dW~+f?7Lf_V5oR&9{rE66FZA>I zF!cm*t)x8>A*JCxcst#84hPiFxvIKV^NO6q{9=lwHJ~^LGKq49|BKYj#BL30iL@H+ z&1&MQOX8Y@G^u#f0B9hfQ$0JxvZLr$S8yw&PQg;X4(dIycCo}M(SqxWu;5ZqEJl^( z!|n~mVj zu&-R|%kPWQ8>Mk+clu+3i_JjflExhtPmY6wV~}6y*z7)~aiWx|`*D#N_pmF#w!69y!V^55)F+QH0 Gh5rBwRpR9U diff --git a/houdini/otls/Vop::DW_MOONRAY::ProjectTriplanarMap::2.hda b/houdini/otls/Vop::DW_MOONRAY::ProjectTriplanarMap::2.hda index 5326b6714ee021e5d2666da7a15c0e29a1a71b41..fec184451b0d85551161db7426265cef39830299 100644 GIT binary patch delta 1367 zcmbQbo$1gDrU~k7j0{;VyUZu*N^mhUfB=~1Zzu%fP1*tC0U00;>%>WK>p^^oItEWa zmk6LR46pzhJT94uIr-_q$wiq3B@l_8BB&8O&PAz-C8;pEo+6;BDNs3K&%BbiIeP38GSw<9;o8= zhdWxU>~_&kk^gt|E^j#@mN`p2sWV`fuddjwD_KwTt3>yj)z-Y2*uBwl=bbB;q#i%- z&8rcq@|dS~;rPp!pYMn3$L+1E{Pw2*^5yuoKchqc-7%}x-nvC!#pJ{zzh7C4W7b|{ z=xlD^I>RmWO&ja+KCR28UiH79{IGb}n_ZJ!qO@TDsSMu5Mq#V7?_UYnocDBT^G21m zEAOeK?e(+TQJ_0*&#QzFaSzW)_1(SA#wYb{-P%0|4;}T@pL;mzu0_VawcEU|pGqpc z9FrIIBj=#wcDHL0C7;%=S~`6Pv+}#OT<(_w@_Jh@PjG&Hc;BwJ$pNJr+n%ioi>o)g z%~-Z7uPtxA(wD8buX4uZq)K-N=CIx8zqfY^!_$wuf7IT2QLVk<#hxz#9+OV3Dqy|z zX^Dt>9_XLAUqxF-5|T86F=aP$+?a+z?s zl}qqR%R(m>%T$n%6iBEID0F0@)0~fUEJHdJ()mQ|l}^~DNE92LlL1N_w*#fmfOHfC zb)X2!r z%Abnz6?QayI4C7>&F+g(%7q&RQJ#0D8TT&x6`}1g|JJOmUx8~F-*(RJc4<`=fa5t7mhvfW_H(goX}RlT9$X-ywBhJnDL|U zCcgf0;)|)5Gf(JGzrFGx`-YKul7UCB>V?fx(u1;m%&dlbG?d*Q^?gP$Ko34O6< ze*on4G2rEdO|j294VTkU#v6AZC+sKYIKh&ndv_m$=9Q1Wj5@&gT5~rf%bbOTOG-pN zl#~S`lesqqOt}xmt`AH{7l2Hud%*g!a^Q!P6W_jdswKQO+9s}K9MM3c9+sT$T-f{mbaCyRG3hu? zi*#r(iTjcnlarHY^XK7n_|Bo!g5rnI@b`y5PyfzN6^l!Z1sv}>3R&TlCF>Q7g}uM- zefDOtxW+>3@coDPt5E}QlSYU+S;o94P;mz3uNiY);%)(;ga_DHw8Aw*F)q3+NS3#5 z({PRj60p-!z>zKi(vTCO&{qB=0;_?~+^u>L7e->J5rNh@>~@Ja$2`pn=BvP%Dodo7 z@D{O28~1&g>J!9n44nq^^NhEsSMN(fy{FN@#xf^ux?@AZg~U@5Roo&vto*g;;BF1~ zQb)AI?y>PmM_eHli+;NDkPz z7fL`VAc#*?1PCfbTg1N42B4G%2Es^y5eP;_ltbCqPzGZkK-2#^SyWJk`H&TP!t zuI#eFd|Cyx7cwrFh*Co4haaSZWFf8ZVfQ+Ko?DE&=t~C=L~psEk&^* z-JlvYXkBZpcVWn@=Lqz=G4nq^(F^J`jCA^uUMQiV0U5(6_W>DROmmBRlFB}W+8SUV zhBv%N_EpT}8M0f?FYV3zqVATzJ(zggFfb(5Tr*Uef5!{8KgvZpz zbv&v!&B7>cSljz8@}$Q1>x|1K?GzI-tBy4@0wkYP>~UI#l4%(vR{)iY!lhh3cjfZs z5$AMC#IY%kL)_OKB4T~+>bkW!@vRWMTew3+nyIvktqZw}mvV(%A>GKPHdBI?5}Zr# zjpX-v>5bC3v^%3Q!Nq1Qa!KP3izmmy!7h352 diff --git a/houdini/otls/Vop::DW_MOONRAY::ProjectTriplanarNormalMap::1.hda b/houdini/otls/Vop::DW_MOONRAY::ProjectTriplanarNormalMap::1.hda index 332a4da9c1169687f81d02134a1483808a1626a0..717bb4d12d56ec60688e525c47aecaefa3977e61 100644 GIT binary patch delta 1360 zcmeyno@wtwrU@FXqFF7w%qQwfa*8ql0hr@&AqwR5OMo~)F-9O}1!CRF7nyV?p1ddx z5(fzafv2BK1cU`9Stf5}6ieth1l7soT$Gwvk{X;`lvz;1z|e6BXjlPMPS`WAB(*3n zF~==4C)K~8Br`v+n1P|o2xyK0R0+3pK2S|wNwHpf6;LXPfq?}qwRta-rOf2_a%_wy zlX>N>*mMj)aPwUGDLIpGFsV=W>}i~A#Hcm-X^&4m&^RUrp1k~&)a3lUypqa-RGlUP4Jkc$8 zOvrRujrh!?N?8v-nMM??Y7H*nDi^y@mY$t)<$Y{qWpC@}*M8q@#a8cXKOBBF?4?(v zj^69;ROb1j7B7yS;OgF6vtH|^%DV#{)~jp0rB3y3ERZV7m~%foyg+Exr=!Q}W5Q0I ztTH_i7W(xOu=l{s`3ZWbfU~)V+5yA6H;V)YJ72 zF*2f$G<+Yo2e5~)h>OX8HHqidlLym|x$TNybxiVawYIl62_pzruT6X>ZuZK0I zyB|dd=LXkSOC7DAUuo#Kxa7FR3dyO?*S{Mt{*vbO@_mBc)B8tiZq4BBJyRBO)$=x+ z{Gsowe?F;a7t7jF_VG!sirT%o|0Z_)oBPMe(q_&dDYH*8rY_GmwjAs@ldRb+IP zo3c^=Qy#Yzx!Hyi6D!vw7$|+dAqbL@Gm@D2@U7ULziLh_k%1DyNq(YQE)yoVatS^u zS?I)KnYcp0(N7X2)CLsV0um}*A&_p9&L^r=e`2O{E5{~&$zyX`jN5_IXF$@$Kpp2~ zfI3iwP5sQ9t>Jjir3iG6nro~6Ll)kBPeD_LI$ zlR=YE_?>iS#^hp5JHBDF18A-M_kXRsBJD&X_dFJV6)s+1=W`^)r`u-VW>$%bV$sY8 zSzGk4HEhWEwr+ZZ8GE1h%4p>U*F)ZCv%aW~4({FGX}UmnqwvS2Vb;?czRkb#xa-wg z&)UmR_nv)OVPg<^{^iQ>3v8Yib}5I>UU>IzzT$<)yPVg?Y^XmS-F@ZJn=c>j{r_9p ST3B%WWB1>p=Dt&kfdK#qs8db= delta 3267 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 V|G$;3g$2hycGUvMqdTP-7yv0*Rf_-s delta 3324 zcmb_f%WoS+7&mEAlx>A5QdJ>9nXW)>mD+1l`f{BVH+Gsxjvd8LLKUKA>>b-fc6XMU z**GbxR^o(^`XZ`?xNzpo0l|qYNB#h$p5Z^>#5c3MuH%HZ0@kv;^Ue4CeUBOc{QbmV zKTbS4|LQ6F)6=QP**B+7W#G|^#tNFy-!uJr|gcFA_J%WFAJ}Da{G-M2j(3;ju)s)hWhru zQhE~6$#ud7*vVw}9{_nW@nv$Jc^>h>{rx9k{YxMNOXh?#u$gpi2frtACiCPSu=Go^ zH>o^ZleBp!nf4{QY5d`VV%dSX^ez=XlRn$O^kGnO7_p_S+A?c&k`k zXMuI}{%enFQ4{ZwW`H?a!Q2z5IE(T(jQKw4Yy+T#``A^q!VN<)E_IlnEN|bX!94RN zV5g;kBV7Wd0VhJCt^7#@)_j+Bwi|w27>S`~1X|~Dr%#-D=4e(hUjxQeSt7lRw@HO` zap=lapCFay&}lHgz<8TFjZg~eJc|Z4RygU>-3k<3KpZ7e!)>C&%HN0%@7A%GI-=Dt zaOSOd6Mmy~bJuer$-0Yxz<|9UNdjb86{n#71jw=b?EpGnjv zs1LhY;!sH(H0To_QHj7vn}9nC;_2> zATCi6AgB;+5xXuMfKuuk2qOVTAQ%-<4rQ}*h6+?Uj(iZFHQ!yVly$mgXCEQ{e@Q0EwVQcI8~@?B;x>+$wKwZOxUeA^92C+G;J? zP;W6^xv@8fOg!45WI%Xg0imd*5&<^qM5d^; zTGtxuT^RD}IR?FM%>K_$^pg4vBb|Q43nVl&AY&Ni5Rl=;G`Gl;RE7|0dw^XS-tgvd zdY9mBCX5;u60MRQs^&6?Y(Nt)d9!N1}Ogl+S~yCxB}+ z?TH8}4Ijd{AGUMYr(Vuc)vcOWwX0W0oYN%{ z$EG-ra9?wXh=shP>(=7LwF2DP#yuj^Or=$9UCLd)k}Kp2=|(oSnG&p&U|;!QB)>08 zZzj&XjWW3xw;#)(p3gQ8`5d(Pmf{<9n^ y0vGRDx0{RQN_DlV@3Nv#eKM1sY4))Lb8ZIiKr`@{8J|hc!oLBwH|kmd diff --git a/houdini/otls/Vop::DW_MOONRAY::ProjectTriplanarUdimMap::1.hda b/houdini/otls/Vop::DW_MOONRAY::ProjectTriplanarUdimMap::1.hda index 9f1eb70d82767275cc5ce104808823644824dd15..1dc9bfe71f139c095cc858629e1d3b489cab8c1e 100644 GIT binary patch delta 1362 zcmdm-{yJiU2CG0;%P#YYx{{m%3_t+p_?rm=Ia+5y9H1B@5VKC4_O~9y2XTPF)6XRW z!UB^lK$6ELGchMWJvg~2v!Dbbr&0qog2%ZiHL)ZWCZ|#ZG&Kh*C+wM5l3J9PnB$h2 zlj>hkl9``Z%)p@f0%(K*R0+3pK2VKNUP-ZDdKCkMngjy_i#|wh^ERdi_R0EO?34Yt zELn66bPP7%<>Hc^e340Y@_+TliBTGpXKVP>1C3&0;K|ERNlnhr%PXlYNCk>Od;%6N zNG!@l7M1VjfOz2l)0y}4Zkvg;o4!dC+aP{p>ZH|gk1bX??Zqq-@txhZajR_87H2~q zHsy;O!#YJgR(S?|S^2HW+NMu8{j25Pf(hMWZH!&^^|dOhwOdku-G9HxW6BS%Xf3nb zHFo0v@8@0Kaw08rmUvQMz^q>PGh0?(J#_zzR#on=9~Y)|8=eo_y5-o9%*E33t#Xr& zbABnT`t^E#_jCRDeHPW9o_+bkpZzazs{MA~`(CCU0V+E1O%pXUAE!AKg`0@MG64tyt~uqoKt+ zvmWkcW4|jEnSAkN`KoDgkNA3aY}eYdWZ@kt?&XT@*V=1KdDR!b3dlKIAG&r=&Nb#Y zA$NK1`nkTy-n?3P$Bk2FLW^(k?33S9t;l%l@%NAIJ1$mhZ+NliOMu6uQ>zMCFMV1f zqFy=AuE}bL)7ejH(bLZ^@Z+mX%~^EUYwNui^Q|H)U)BWsu9vc1yKw5eQ#ZEfaj8r3 ztzT8JX_1ci3toSV%F=y5Sh>^v>-~<@e@Xe>_pogTSI!}6uJFT6Vbh!Ugq+NZl|TH{ zE@W9w%cm0M%MYgTe%EMvyZXiLqe&m5BH67RIalqotGM^)|sRd*=rH;-2AuG~ICiwlrtu&$eM-FO^;V{o`(x zU29|gQK@yYRzI}`CqL+`)|s?l{l0%+zqDCFr36uJcxvIyxgo@d<7CHSQN%t9xYoBWc;=JbI1Ag*Qc3IWG+GFmPZ zP=xHiph~3dUm#IjgsBd$^<(vX6aydriyz{z%6EHLVY_Tnf@w_X^xOdsF0Bwi(TeGr$MXq6d+cCGZf9tKyEG0jd z$c2Zz_jz?&Pd>+Q`Qyf$X@36AO=hPaeRNj4$M^Q%KOVuy|4pKPzW6Y$Tx{jhpEoC` W@Bd#`R#GDJm%XJbeC>8A1_l7HLQnnx delta 3272 zcmb_fPj4GV6nAM+)snl4q+%C*;SY1+C@TGw`(AjghkCn*ZiGWL$`A-g-P znQ@#HReM6>NXeNmz=2Co9FVwh1-<|(N2GoU-pua0juW*Nu+hppZ{FYE`!kc5kDvFy zz54Ds`qN+OXW2{Xb18WAqB(y77B?=b1<+2xdj{Uj;mg^~vtNI^7}Hl8)yF_i9^>%G zQy0S*@#eV-Cs>kJm(xI|QdeGpp7qba3;V!+p?wgLHO>OUB_*O6NXmSXO3fC4DfgK; zaDnN}GI4`cYR*>rW7^p^W3I@F0dafL*6EkAz4vPSlH;Y2x@4>`^QqDk%g$^PF2D}N z(E##H?8{7rc^>h>#moj+{|3mwk~-^*Y$jdX!4juZ*Z)kVPX7{b%_zquaC&HubS2}6`Vx6qa=L%>@P~Bq)V0Ik(;puGkv>0r z%}Cp}-64JIr}0oSBb`oPEnLs*zwz($zthG?=ZnQv#(a(sY=xh&%aVDA@6UbxL9w{W z0_%j$pXZuk3-6IufH_&i+!Ls{fb#c@%7Aot0WrdT>?&H}o}n05y3CK4kDkz=!h8wX zXer=GmH=76iBM=NPhx=$-(}t1rXM9fHq;71YXx@)#Hlbxvx50LFeb`k=~cW-s-%a9 zu1xd^Qf-Z$2J=gdcc{}GNHf1xRI6s1R)tyDl4nQtBHBBLPMr7!^?tWwVQh3RF3cd=OqRuPj%~cD1%t-l(_jcC%SG zk*mOuck1QvVGU>$(1=MZm1e_Kc!457B50F+xmdcqU8$DaahzV0L?35T3BguKO>fmRG9PT0;qj%st{}N$3*+ML!Cw1v5C11Lm8r zs(^X{;}Y$$K&50TsVfX)a+T{7pK#i3!}itP5$1j9qB#w^LVE6+0gtYwFfybYRD%Ys zYfbeoOmX#`hF&)o{^uurOMQlsOh4iU5*iwiF^uvMkm1E7x5$%J4k6Ue2)i)6;mhIl z3BkKe7+QDsqICFp?Q6h&x5HafNMMH zi4Z9b58xdPJ2~uAFXyQ0R?RDNUFH=NEUhWUIgp8!EBxQ2W;t?eT1%+aXm566PaP7~ zB&12jlLSD00iEjF0hR+rw}ygS0qqtn*C>9I3 zfrAsHO1n0RLbF{rk3<7^8-0tgeK_B>bP}gl8p5pxN_a|bRL7Hg zlPpZq#bxjVOSPdKMb zB8p9MoZ!CZ5Fs1#uC7~)6W0oGcNh1GNHUdFv2`bnbo6S#HFLO=a#w0)ayg=i`7fO?}1%2v)1~M`5CF3ix6MS_P2VgN+aP{p>ZH|gk1hTexw4Vz^|f4y4ci(nmTGhz zOi-~B)0)WSYHHYJcj;bX`|*u$*4U+s^A%mxGI02~yuN?QlKxF+{(R0A=wSN)N38p< z+3d4N>bKuEIX79S?{dr;fv(Aa1!tN~joRhAyy^NfZvR|Md47#erK)QU^P*ngV%^vN z!jq-;%=7dAqU`E_emeT-6)H7Ng zdgV}R_J$`R+>6V(%EK;{rDtbcd4D%z=fOiymrbtiKblp&DPo&f_^G7A*!Z>5KXMK_ zn!ANXym?w3>ZxAH?sg~gY4oLlyq?y}6PzFa*|)24a==u5vuC@4{I1=uXWX`GRr|LE zhrVyUeN`|fCpEh>FoW$n@49+LMz6#C507uS=B~ZrhV{z@0Z+)B$)t{_ zw4n9X)wDI2b@Y_yaYk?7M%O%;N1m(-(2o^ER9Oq3^eUK4BNj z+EG^j@ky?V+P%5|Iy?T&t1-8f z+fZU+<(dQorO!85K{9g25)&W36}$6S&50#4P$D?VPgKig!sJ#i!6zjPomearR|q)z zNrHshfI?e9LWL^?(rwcDM3qj=bZ+IS-^4F@Y)*@DJ5c%zNV*uP z9SU%5o8kj{EH&ZWqGth$O(-gU>^%=M9!+B39fM~nDC+7FO4iq*$RH#XekYxoF}WDi zj&IoP09q^W|F6|bPrggX?i2UddhvQW)g-NDu5$NpGxd0MH#a_DI;5WM5K(>K+u?C? z*Am`sn5R|9_+wmX(S9;b!kmJhV}Y GfdK&S09X$I literal 7299 zcmc&(TW=f36;|K?1~&;B6zN0IK1|jrY}FPozU0D4N@!7v)k>5hQFc2(c{ z@9npmyWd17yF2auqgFolQ~ZyAm+<`Sp&a+(G%gQ&Jc&Dst1Cc%BCH%^{fW%#_2$#) z@aU*@-1xR$2cUAyM_Du0S;DXO;=~A5uh$&mZ{N-d-@^Ob`2YO^gB8Rd9!i-ie#I8X z!R5~~gMRhO0<%@xeEHg#;Qs!TqsNgRa+qR(DG3FbzpjCif6nivKd_P0)eq!zhN+9@ z4>0_0Gv-O#oFr%PI~=`P#R*^);{PyC|nw>A}NI{JuwU{ni6SGs1es^rQ8uLSX?3!Ql5|}3B_to zo_#S`&5~6;?gphe&Bg}5rlb%^ksS<4BSxzpdIW9MxND-l@rxH%CxQrwY@dEtp;(;` zp_oS?A#r*RFN*9~xNlz=;YI}@PH47>#Jj;M|1VqP!l$)^`j zaO~_^NB8>dTyzcmlA!Q76<^+C-@7Gu29YqNihDwPG1gcwgHjYl9WjX05;<#7DwS?k z*Ox-?RPU@9S&CmHeEd!B>sDf}6kKz@C_d;OlA#?Uy;@f%u=4~0 z(M7&UcbR3}3@1#mBC(D;iI_lgJF}N83}Gaqq06d-dw6VP=@C%XH9-W(O4t7ZQK=rY24 zp72v5yypnD#8DxFW_*ujlUm{poY`(ovu-=f)$Ld0NdEF}jm(R%Uggy1k&Tr(-<>26 zV#{P7u09`7C`87E81_;_&(H&K51&NG3-mM|j&tcnTY=t}V-Io zgnIk^Isl2cml@bWO%+@``u3)+UkEfw5 zT`^k})UzXgmbU6#l^$ox8`5~z(=<*i-tofd|r5_KKdYzuwRjo=1jw%J7`v7`a4*AHDk9Z}-fQ3DMh zb$--DRc{RAXa~f^0*xVcy$XCKyNAtEfF@ z8!5Yq79sDi@pO}IoU@xZow(qHpNkW$g?NnWRtgvU_%vx`T&Y5J}(R-J$61kOiFd1K@dH zIq@Ms6V1Haa_XFF(L9;x4C#APb>be1evKxnIPh4Betg+P4U&l-4IEIXoy%GnY*EYN z^sr3!lpHf)yP<$)rr(A6e-#WWMzDE4qv=%2j-&_xHSwC`eXdRt02-(V9%;NBn zu4{<#VC$E;g23lIG0F@A8FmQ*?0`e5>V93>$i!xhiFPhH9f#wor{WiapGh4YaBbMJ zpaT?{g5)Wp_mC@g7yEIw{^0X^^&XyUpR)}XK09o+pCccD5?Dy|cH2TKu!pAMgn#gh znZuo*gmB$RiA+Wm)?uB6`Im$!FQ~#h*70+^5ptad*0V`8(7;#tAC5a^p2nkckNlc~ zR+qcj{k^&vxORHh&MS;ILf#4;U*d9{LXBMgKKcJhD~uoaG*!?6-G|HaKb@xRTFL z#-3VG%bH?Cx72>bGQ}AsoOh0^^WY*|zXV0t#H(io;uz0*_bkupQJY;VEGz9~WX4yx zxmyz-Toc#Iw|rty`=negfA;C81>LL+H#NdoqP@k?Xkok7V=Fi+tYo}~yz#4fZ}C5(A|H?^q1blM5HKJa<) z{m_`KUa5?(dKb$AuaY0}SH3=Z)M)M=pHyg9)5ACww>NH|*pC_dHY%Rm_&9~OaIEmX N<2F9#+|GBu{{nX27e4?1 diff --git a/houdini/otls/Vop::DW_MOONRAY::RampMap::1.hda b/houdini/otls/Vop::DW_MOONRAY::RampMap::1.hda index 946946aac42f43507d433e0a0183ea2145c64951..2501a435fc8c43a9e16a9976600ee0e2cea81ff7 100644 GIT binary patch delta 1371 zcmcZ~@Y->L2J3~amR;r(btO43FaQCVrnU@9!7n7-?k{mS3PBl$cxKn^-W}Mb^I_Xg(7I zPhNgXYI1&FUP)y^Do_OCJ+Np&Vo@%#sC+jE#8>~H&b*j++f1a*^i7)B2JstHC#`;a zY_ZB|FJ_U5?P5n8wzBrDa}MNTQ@*${pi{(Sm1n@0%x{aVZTfW6zgq4tn9v>8$k?^N z-fq$)yHiG=&+`YWc>Upy*4lQv#!meI-Mq_NPNZed5>M(2nAPikX3NT}m+pVjs!IO# zs-{(V{hv^#u#oZh@Ww)XKS*3~O6H0rf}xq55S z)~JJxk6tW1v#runf17jTw#BDP=3cV1wC$~aEOlR^elEw0^+r*vPf4%7x-~y*Mda2` zmkvfux)$@49(4)p*6^=6LDZ8Qa6wn*W;a7ZzuAKjiXiH~;L6rMr#3 z?VWw7v+eL|tvPEnP775X7WVsBv-b}#clY!CYDrbwejh1tj!B&@m#vyxDU+Koa&VBKE)AOg4E)brw;MMKL&ok}h41~Au{r9G= z`|Mk<_daW4zuwK9B3JwDsYUN6=HvxwA&jy1XL>H}=3KhJ>1Rld;OESAGZQ2Ggi!rl z@!B5yoM*uj5o;daS~|JBa|TQKo%-a7e{6pi7FAjO)XaO@n$@Y3AlWP!d7y|*c~iq# ziJlWoVFnTtS#!=MxQK0-bg)AwA)Uu9g|Yfbf=k=>=z{OFIRsN&6MZ}_Lstkm`iW_| zOt{?2CHSOep%aT`Do98QB-92JI{29(jn2u`1Er1IfzoF{ zI*Nfh&dDGN)x0Qv7NFRK&{pSY`0NRSJJY$9qX=2WqwjWL<54Ak7ag8q{1}@R^$VS9 zzG9UDy62{N^07Hh7|uJgy&lDpaCiSH`J#X2?x%$_ma^9^{P+IR`SO`Fx-uh|eBZ{P z{HZ8kVMoJpm*`oqoYykc=4P*YDZY_yi+Y)w-St-ogf4uX zTon_z*LY?A?wSpjbNkrSZd=;&a^2GCKHl!LNBY*^zs4+8cgj{w?eEL4%%2#wC(h>Q W-~ROO$&)9)h!;)}C|WMXzyJUsLQ4k# delta 3259 zcmb_fO>Y}T7aG?#^mv z94AH9o~Ss|=ESey&=UtFen9^KR0!_<0UY6-*dGk#I}W99qH z$DYxj{+xcCJv;p@1CL(RFTM+lOQ+NVXcO>#>+z$XPbcf8TKO}@n>@z;mlLO>=gH>V z^PFHw8f{KPnaP}e4)UvCJc+u%eX6+^k`>NE!X+i59!kmrk;$CP0#ojDvF8EPTZ_aC zGnw<7N_|2*(PYdMIng6tC*GQTk=T2uvMV`Wh^R+~`p|;XlgLi36E46`CWAf!@>Jr> z)I9Tj5`c^7Q?ULWkbxz0!W}qFdX9@F&SWn9n#oN5l59;W$JRLb_`wgr`IU0uJyfRH zV_o$0_ldtIPq&2IK|7=^8Amjb$j6e?-D~^59kVB{?Eii2+>_%cFJ3XG9mi>rE)Aw} zUovBQdirwVYF>YazfaE`e{|}kZ7(wxaJ=Uz=!8>}%-{d<+_z_Jd!2>W5t~cr>rn&m zkVc3(S;5>F$eu;{JH~vEw6_5)!UOCnTH%hN7?;{CNS5~>&~Tmw5@69%z>zKit&kI; zfK;9&0&9WC+S~OY&Us>}5rNiu-0l%~p1GP8%vXUiRhCFE<84wV9o+Y1s!xz|W9T%P zUtqjN-FjaN>b{HyHdZ+4(A_fBQb=4SQN=By!^+=@4)4~mpE{z|FL36scM^W1cz4(L zAaA-(X3at_Zz2-3nM;H2thv@)$lfyV&KX5re`VJ0tHPNx5Gr2CW>K?81?oWkAwW`M z8bkuQ;9WpSivlK5i=ZCtW{FEBanYbh z0z@SOBP{|Bp}qiWYY)jDK{yOO+Q!Nd=&3PDz(&-=63GD@_d*E>1qAVkiU2`{Xp7kM z*Z`E$z(5!YFap7-h;k^KoikLR%5fBc@T~d%V!7m$D+{HyYSU@f>s1qZ3jAcJT8i#f zfJOn0gtRnYubB!jPy|SXO|mQJiWfHL%cW*%b8Bm^Xbs6Pxz<*z$%cB1>B@~|67+Q? z?aIWX9ZCj-Cl(NjiYgIcqei4E*17fiO3@ml#rmuY=uxacP$B zRilbis+FBuX}K~qoAA8Ks)9#78tX>C1u5#!l{Zk*L^~{0 zDd|h<3Bwp&<+>ywoVJ^=eR+F;c^A6qk_KHNed&q;kFKRCHl!O=g9fc@jrA@JaP>?= zuN$-f^Ao+HKEp_-AMry84GqW`MyU_Ta68Q{@+Fmh2(>l99t>}Ib2)uL@HP`h6$^=0 z$qrR>8ALXqiI;K2(T90d$lKR%+xctoUbv02$lP46HMd|cfGDuR&~NLLI!TK;G+_K! zK;AU|LogZN=(0AUejQFi=BR;V+Q@|A2(y?veta03S4a7Ln0f-ZHq)Mnkkarme0%*? z4hPiFxvIKV^NL)X`F4t>HKsTRGKq49|LfE&#%_&kiL@H+%~s;6OX8Y@G^u#f0B9hf zQ#~idvZv@)UvMj=?SiFz9oKtktu84k(Sloxu;5Z)+fjMrsC$EL7jiupr?$VQ96Ne& z9{>-Ti;bmbWfX;avuYlQ2Cg>x7U2YNzH8|;POUV8TMd-(nA*6GNA;#z7^Mws`=CXh z)c8T2ak-?OVnSxsv1UeqU ztk2uJZY@qcE5z+>+$AE-R9eN>wcPa^xk9dxZe&xNDZxq!&W(>o^832oG4}LVO%5ze%O;Tv@Ofua|cKDpXE{!dU(&e-&ib_ pE2|BCkrh1}keTdEqlaCXb2D%Unt?wHZQ}Mh_QXtw@tNc-{0F&U*v$X{ diff --git a/houdini/otls/Vop::DW_MOONRAY::RandomMap::1.hda b/houdini/otls/Vop::DW_MOONRAY::RandomMap::1.hda index 5ff678e895753773baff698d2da3537cf1902a20..af3b4b1cd739771a1ffd402e34a31b1f2b1df752 100644 GIT binary patch delta 1354 zcmX@Be@|h82J4NimR;r(btO4(FaQCVU>y)a0!^KJ`G;m>78S@>5ci^YijbDhpD9A`s7j zMGF#(a*;*lyE!0!`2Td~{k+Q_BJI69Zbm#}{dVfD=$)32`*(ymMTrSSWio0eMJl!| zT4|f9^F}h;X4zVS{>|@qru)sZh%Gu7x8xP;jxLjV^Y_=!-1xWmvCsdXrW`Jf^>y7x z(`KJdd$j*{snl~%vE!L~X&gsSR=6zlT`Kl&Rq(;;%dPF(=JW?_TeZaWm~VFM?gQTi zYMa)23vX6k zerw%CzlZ09ZoSLl?ftdaTYLS6g0ib8_Z?3P{a)~6*DbAB&F-V2wfnLjY-VG>D-oHv zae91+>f9r;5{2ng^F5t+8jATj^YwoI{YuEsDRkeB8Qor%k?YxStXd^^t9~xm{p)Gr z?gbmCu2pqgC>dkE<6kd}2Jim1`-h_5uRW0Teo3>F$kec(+5+P0trnh_e{fzoD7tET z`0ZUP%~qB>rf!`0E__v?+y85)E}gu0_34*I*DiBKW$O3*z2pDT=jkY;{=+D*n6KBlJu~)n^Vc(Y0_Ih)Xb#1vz?Bt*9>DaWK| zw#7x(_cPsi$I36(eY85Y`U0m{K;3+RxXf4MS3iDyvU{TP`4Hz6Id6%c6E@R~BqmnsBpWDwjyRX#@@%7Iv*66* zTx`ll{c{a~GH*DW1tst09lV>bENpk|kkBUmV?CCZs78TI z&;O6b4xrGFw-4f1+*&%!D?O$V-syihsrgHP;SEf&l+B4h!_v7=^KQCUq_(8njMS1y^ HQVa|LT?bA! literal 6093 zcmc&&O>Y~=8D`)B#;y~%DVp92jMo8VS0*Xejgv5vTt=iLwGwHFl%2pawnOfaoNBqV znAw%67)GzXwm+kX-g@Y%{So;Az4td1=rbR?q$t`>i?&`t((e2HHSfGL2i^8pmBn)n zukRmp+nuk%erIoR(Ca$fclwoeK>e5|k(eD(pc(_9UYjD{$V!O68s7Z~pMx3HUx7T%_!=6e*J#XR4QGTqLSe@qZ7Z+SlqL z2GP6wEQWD6{;KV8up0v*VpUU97LP6J+CQAWA9UuKq>p&aN^v*;sKq$e>ra?eP*bVg z{1d>}ohjG%#B9bASby`+Q2slBK~lL9orfZe!-!_IQu$z~Qn~gwhq|uqI*~B(NB;!n zueJW$#72TB6ACgGl3YnlnO_tOp?M}|G~**0#}{P65+)I?$oF6P1W!U|%zLc_LuS=^ zrDOw)>5#=f>*LQda3&Hlno0rBj>^}9U>pmYc_PmsDV*`d3wq|A9PuPr zPekVnB03L@!B#+F-HfIl7N=t$$8@5c#aowP#@xmw(2}v25lbenN5Cu~6rUtC%O&%I zHXGAC&WMSU3cSdEdoPF$B0FXK@wlF#pxmo|yk3US7yd>!m3OOvgRNW+Hx-_;P z)dkFxGp_h> zsg4t2BK5|cf1g#UuxX6v&8FS#L#|wFx>P(%1-?SBF}jbVnIWUgi|X|}+F9_J+Pz<} zz4Tw+Cav}3kejFcZxqW&A~2hyQSV?lx$WO3#7vmzVQZ$YX48#7;Q%^S*uu1>$1Xi` zQVcE-;PWxLLxPW}oS=wyc1RGAySfP^Cd6zs6=X2ws*sL1og@rTZo3%i0e7L^a?N?> zgNBcNSlAU2BSrzaIMo7?e}Vl%An=OdZ2X5{uDkFR|0UQ>3-;(b1GedpZJE`yuEGS&sRLp0c)^ zj;#I@#oGPSW@vvT9r4lfk3vr@_Nrf7_fp+G3RJ6T>bNzJ04&wM8<< z!2=sdl2M*0g4Km)Yfd#pjEUwuW9lB}3K0*f#2W?*^QCG&ImkdE@;E|?XJp6-_L`{5 zutB5L&QXwrV?b2Ez#coV3@^-fMN=FTN2UrPrz|CrGp?jj)-dN1E{RGuv z6k?MT=g`Da_>?Hp>U9cyl53?)B3?Yfu!rvtSUq!-y#B*CHr_$(DNBWEJj`N%UK zE8k!Ks=1@*0O&iX=jhj1KN}|EI?fw+eLSX)tRAy4O~kNd>nm#(CwBc@!y5N@-p=Fu zMbBfiG{ZthTznrp;8e(FkykRyc$UM_;W>@bvGEp39D3-fQ2rrR898QpLJ$d9o?`VL zQAvKL&mql^KWlE?$9v;5QYFE&qwe52`T;mWg+_0-Ewlo2QxTN%{kIkldo~PEx}jvL z2+d^CB!Rn=3*8YaxMvFA(aq57RL~^P%GIC|zrgP_AJ!-)-CCsUS}$5v8)5e^0$E>? zTLX`it%Lt2G5hwWaIF+$%X4QZj^!rAND=G|3iGi&V2Q>!3}#aeujfkEQ$A|cwW+IO zuYBvxzW~;8L#2uMrSN2i$HRFS2ke(U#ZA3vxyYK;O> zEmRhOdI1O@{QTd{ZRy#vM;K#P{LVOrcDVAYhOtU-T??0lF3vOdB>mifInA=PS+CD7 zqVshNuO8ue5z~wMm;L=#yK~&H>s?JvdBQfUn|*V`s5UY2Y~n_E#G+i{5^@t45SwoI F`xh2$_ErD@ diff --git a/houdini/otls/Vop::DW_MOONRAY::RandomNormalMap::1.hda b/houdini/otls/Vop::DW_MOONRAY::RandomNormalMap::1.hda index 39eb0d7f7fdb4b597bd87612ec5a3f0bec0aa91a..71db6d5b24a4eb79adb63f52507fb73e0bab4f2f 100644 GIT binary patch delta 1343 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 diff --git a/houdini/otls/Vop::DW_MOONRAY::RaySwitchMaterial::1.hda b/houdini/otls/Vop::DW_MOONRAY::RaySwitchMaterial::1.hda index 702fb5ed75744070744a95d5a9e54b5c3d24ea06..0045411da06e876a094c398ee4a88bb8ae29b8aa 100644 GIT binary patch delta 1357 zcmeD4+H5^RgY{=t%P#YYx{{nf8Gr!H@i!0za%7A^9H1B@5VKC4@T?xh2XTPF)6XRW z!UB^lK$6ELGchMWJvg~2v!DbbC;Aa;1dnr3YGO$$OiuJ8(9{H|oUmtJNorAEVvbv8 zPO5)FNoIatF$05mAkYW{s1k1He4rYkypm$Q^eUiSBLf4AHb`#sOr|zg_Tti_w8Z4p z$z~ijn@@052~6I?BtJPyvT@=IrODqUed>WGF){Gu<)@@3=jY{>R2HNHMIaslixwmn z9t*eNJR93*H$7&6AXl8 zxu<$GE}A9bT7T)^W4`|6n~}BW^kkka3QcHuw7R~1$&&U>Xa0PS73g64|3|F*uG#Ff zN9woVHaRz0r|)vi8G)|Je+6fnO^w>+yS(Z8GH(A|OL=~cO{J=94fCR2-(ua@{-Thj z_RRDB|F+ir`}DN?=w$QHKb`Xa?N}GPvrcdBrmZ>8K3n9dhOF2Zr0sCzWb>(GhG#$B zU9jNo0+Za;Te|Ddoj-i;%huJseJo$XrPhYN?78~t*j3RhYosc#9*$UaY|4A3%~7tp zG27U@{kFz3Hy@uXy5;UoDXFj3=3#jo3Ue#zKWj^w)fZ~T=bR~BI%iG&cIKSWQ2w`$ zt?#q9uU`D^+o9hYCe5$euJ50~u=HX3hvbOYi$x>e%qyh>+YdqQ|8R_Y`gD1DANmEiJhW6!~kGs%|Cf-{e& z@wlbPX-o8+uqitTl5q#}D|WM%@9z|F3==svWkzr-m*A6>g-$G%u`2`|{Uo$pCIq(u zg_eMXazR2eT1O<$&vb6(D0&v4*i`?r1B}WfB6fi!VY^tzk z?|an+ACnLK^?G%XNI=zl}A?}o!orCK6=jFxvc-0 N%v_TSHcBxt005g6U_1Z- literal 9486 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 diff --git a/houdini/otls/Vop::DW_MOONRAY::RemapDisplayFilter::1.hda b/houdini/otls/Vop::DW_MOONRAY::RemapDisplayFilter::1.hda index 86416434d5dabda0e09724fddd49a639a09e0199..1fd35e451ca603a2a8d3e728146ffbad8515e797 100644 GIT binary patch delta 1366 zcmbQ9b}W2?2J8Q+fY%b%vDl>UElfvX=^~T9!jLMV$tNYXgjbvir$;(ekP0r8DE2%6< z1&Tm?1QsnwEXqX|mG9<&c;x@nnX&n|%|zNv-z*c`V820IHT-t3x97B}QW_W5=W1Nw zKk&jz$J*Ox0WKn2B!=u&p?Ms%lZ#q-+)0D%d zufDGPXxVJP<&XB?E|p3@snU1Z$49Vh@?AmUT(7MKuftgLeWm4Y7n#XSNM9Wkm3(K% zrK#LC{1*>%{F-rg-rvm?KYx8){qu48=9@95n`*;Kb9JxRhiwfmGwVL=wkv7rt{~k; zLHGVFBc3d)9kob3diSbeOirqHXJAIv^>6E{RT;ew`#*fX;S#&{h8vbI7YMkvhW_I^@-tHJ z+$EDbhSGx8RZpu{c&i1dS8q2myL8v<>bV#0y*hK=#Dwzw&tCDi%x<_FG)^=&1sYoqooEHKT{{pzZ(AF}1vmG*+2 z{Zln>I%e*fy7K*$uirHq-Y$PI{b8?teAKyB|px z=d9Rg+52emd7Jybi@zL@SRpyp@p`%O;x7gZzwjH(-}FAojyKI&`7(3Z)=Opwmw$Mi zX7{tPRcc*qy-k&T=fv{m)f$WH-S_wU`Md9L-)a+XIN zVpBHi_m%89VKdEGVq)c+o`W4{lKCZiPJAfiepe@~*tABYN7HaQm#ET-lTNK1MY{qN zo8}mVbSNz60Sb9K1BGsZge*cjjOQ7*a|u2T4XEGX>7IEM6hth@#@pz2_j~Q6*C1^CXJZP^_p&Si8OsMFt_E z@H^?ujLC%<&inE0Jc=XX?w;TOuhmLNzRR=bf%vQcdjIZtABpJstg~+`tHi`-)yxN3 zTk@|pZ1}cqdP7?>bGi1)YUKsjL*8exzHpBY?%m&Qy1;g$@W-`b?9&?h=3m(@dR2Pz zuU)6DXJ7vK?m&w5^5b!i(kc(%DGKvB@7`PA=FoqeZ)?%PkGk)5gSyQ>A3q=e$I#x= Ql5-zZ?s<3HO;QXD0JZ^8EdT%j delta 3272 zcmb_f%WoS+7&o+4-}l(bFI(UDzP)

wBIjxpd#vAfI1Ob? zpM8{wpR00$B}sX+kHF&kXWvDAkbAFl5Rx^{Lc%2_q7_QY0+GpF`T>OUkHmooLZ_FB z7iKb-qd%18gm|{Ym?!dLK)fFCfOYDx#NpfZeaZ0>^~l)X^`DiUM0IA9Z~=ZYnd`p- zc_xWvrpkPu1Q7o9-@yAfKn9V_S$AYJ>Dey6BylD)zXhItN_aCWvJDPF7S4m{=PH0_ zZ@rnDIo}m-5A6|0GLC2L@B=ZkPm%o0$RN7>rbprFkl~&Zod!!v= zPS!B@1u89|!abupAkHqpM0kKbMJwJjl;DcPg5>z{F%7FMkbsER0*UkpK!uzLg`tWh zQP>DP=IpkDxZH`Ob_70p(?GQOCC>cKULtRl@9+B_luozE zf?3QLOhf{Qxisi6m>Zp?+#U1&qEXhJS7Xjl^~|DyQ2AmmhdKi)P!C!U0g@8aAQH%h z=mM%c8?hczihD%NBMBYc#Tk7$4;k|Q=9g;Ed-2;vcy0fG+E9r1YA+g>PUS%(s@s)j z&2Cm!>tnZx%*(tgc+{h@ZV$UqqTym~3nfEd*0H8^Z77zX)}T?JN*M8q5JZaCR)dZ0 zZ$Wy(s(9YN&{|%p)#^>97%}fim}Q~g5h(srSS^_0fgG^Fe9;Be4;hzekA@cFGaBc42j^=M>DkvG6}X z(QDc>jCA`EKa?=gfQ(^OhJXw&rL{%Aq;d$Uc1PHQ|$#B@ypPhpOo`q>j{wBPG=%Q%EHI+84SC598f>+ zs_s_9EAkHWODUGtl;J$+B*qo~uQIb7hc#^_(q?otJ4vK2iF*>tr1D7_lZa=m3FapBY*Q&zL+njj9lt7C0HrJzV*>WeP31HD9uZUGno@yY^E}o zG@h_{a~xkB)AB;+W=|N63#D8=iJQd0PXU diff --git a/houdini/otls/Vop::DW_MOONRAY::RemapMap::1.hda b/houdini/otls/Vop::DW_MOONRAY::RemapMap::1.hda index 3747662a1b0b34d12d321c2550c13a3deab6a2da..d534845783147f4ead60c2708778d9c12ad3f20b 100644 GIT binary patch delta 1340 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 VjV$hg7|tRj58p}| z1cAWQ&m{uF0+TG0*D{L7=Rq~{I2WZRmZSzJ7iAWdFfefD0nN&R$_absm82HsCFZzg z=A`-;lw{`T6*Dk!-2xh809C^6oDWo!S5mB(Ud6z`&BegLq7RbVypw4;6Mu0@QE75X zyjy8iRb_B$$>efYo6VeT=h!A+VN#v^o~LnQl*Z(4UY~lPflLfMdHE@+$@zJCC6xuK zKoN-R!J-9;MY+hL^4%O@uQ2?7I`d-QZ8MR!&^Kvf8^mu+owWMxvBfHjtpJ<>+L2jvb$yU_xyK9 zg`z*7*GIgGyZkcb&-c>V$0Ch7ADajVw>(O*NM7W-QY`QCss~#$4+lq|YqN=*eo5-_ zv8n4~9#nVCbGdLl=i8h2N9V7P+dId;)_C^W@bKx+TyvLHhn42)n(ME+rD;9;XrglL z#<19x(-^uYx0~I3`qSh#FYhhBdalbRUb|oXvB~ib-+AhVheLhq#VFBp5o_~eLY>ZT znzownn9$W_74kEm8f7JX%F?mCdf>&}L(QsN?%v{(`s!{Tmbal`Yi8>8#Ep02bf&Gn zv~*KMO!(?j-v7}Xt{dp9idp}3oO;RAra^Ff*w1MuQ?ipE8l}Wr*RRQYpcL}5d+W}6 zy{VJ0mNoQht=?z3;zR9QzEWTs$x$`r@_m2nUa7vSL*@^|KO$kjGFZi|)n!E%t=Mqt zyu+OMCy$hTA0H23HxAJ?|Gg`PsdQ6$cCzx_wV`i&{_ULDI(hEuu8*ZlkE?FE6eIn6 zpY-9@UzfWN#jiQ>S*GeRci+EVF@L&Rf9CIZNvf~e_@Dn_TS@EMs67h}q_<70x_WwQ z*R|Wf1eW~{nK_Bk>+xKl+U0BZyEE>QW4*5{)_wg{*#hAy3tr8hd_C7{j)CCzz5lL! z4ZnR`^nPT;srxa9wJUgb)y)uH`kmXWp7pinZ>4LO@8x8qR2^9r zc1!JtMBR;b>h|>;0uJ9fx_J9UiOTX_>Pl7SzYAX2F@qgV>af z`h6vOPS{K{l$cnVb1K2**~U2sJI*AF^SGtRRi8<4Y1WgXlFF5$lOag^!LKM_s0bc|M)GQ%I%l` fGhuR6%(?mh{vH4P^XARS5BmM--+H!7F)#oCCG%V> literal 6307 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 P`9*xn%lTGor5G3hU7AV^ literal 5413 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 CbW?Ev literal 4864 zcmc&&+ioMb8FsMSE;LDiv_Y@S%m($kUTLhl*(8ePtzyZsQCnJA@;brBm{J-_!+JCv zkQ^Uk7`^RvAE9s2UiBS%(VL*?Wr4m#KXN#dR`wp+n~Wig^Pf-re^UG1_SY-(=N^{t z?|0jsufu+4XRzPvI^6gCFaPqe{%I`oh^M?3M>OF>N#zxw-y14N@$k9G8jbczc-ZT8 zk6Pa}8UO@Gli@(@sq;e$WW8Yd$)6p|J9xj3&(CkM-eUXkP>590E3$wAXIEsfrV-o{ za9j7&x1fQ<_q(0JN$=>l{ZI;_0Vtn);4jziyYfpiEzBwr&M`!CF}fyz@3lEi#H2rx zJac02$Bz8H9m%L>CGLK_vhvQ+w}1M>1bjamTxIN;6d9A6Gu6v97pYoV`O#lNRQpC< zB_O)L#}XL#<9{1F9PHhJ5Q(a(m?h%^b?-k;-v^ybE$J>#*i4-FcO%BJK6uWgf|`{T z?;ij^aHc%i5z{G4VZHZHDE}kCAX#}gx(J0%!iZ`LKcVd2-yG_JvFljE#1DP}%HJ9N z4@nUTqHHM0SV(d!H49lr*$|p*F{PT1Xp&r!2}_woyduxL_6VMoPFdv*GAv=Cva%rE zf)hGqNyWdT#C*>ZNR~!SPN_PpxP)6UyVOjkG*K}Hn$!y&_C+IW6>BITc@>^!xvreE zkrvXu>>H3}5V>B!PH9%bW^p{@gie&>*zhWfPg1IL$tr%EjcJ}}V&y2m5*6>2Yf`8o zLluq7HBU7`{3O5JBsYaig;sISq~sA(CBL=k+N*?NIAjx^R!r!W9?4p2C$sBG{Veli7 z2sx9Y_;(h%IfJ+el567E{n_VchPTGe5 z@E0t98 z-Ce^q9`9SlG)V=<8C9f--TM%|iP%<*-gifPYBXGj2nW!q!WNp6=}x9MQ|xRA@c5WK zBL2rzPEbS5Ch>i;Ms&?6KjLv##F&3R7qkV^tVixU~2o%~6Kv&9g%!l-hwOw;8%sE!9-JjVE z?Ylw_dDP3bDZxd=Gs(vMvW;n*vB)3}%w%x7ZXvs-5fye=A-hscpN~uOt*4jM1P$0u z(xzXpVIQz`ByftFH2vejZuK+&>9)6J2XtGEax+@Dk?^gLs@0-M#+cBiy=cl)MXquE~&*7}zR{IOZm~KtU3&3CeHC zU=KkFL}YknDwWU-XR48{LdfX~&7dQun&=C$Y=og#CJZcL#(sk8unIA##RX(?6h0*i zI^c@&r$(yPZ8L(ljNP`GH~o+I+O4qN*=-#k48lRLcicE2!(^}@ASI9 z2^Qp-zC6Gv-roA?#ZJ35XuUW+-QEgj;5pUt(SbvlRRK3v9I`aGRdk7l0B@T9IcFD4 zIt|cak^mK5rcIe{Kkq%;3YK7nxL`@%Yqg{dA(dyh)bui|#YSb&`tqO?wz}=G+dAyb zv^tX4DK)_{j}3G`A0j{bcKd|5KCxv@E#X#BLBGtwCtTBnv=sWKdTTE9vFQn%Q$Z_9 z{tvFb{dT+4y@PSfb+6*f1ghz0S2`A{Kd%5j&4kqCTx2F6x#o%Tyv4VgJDUxFesp$$ zevSRJY9nsqyt?M$v2|4Fu^ZDy3|lr>+Os&?n&%$&xYzt)9?vU#9-C$w8yRu&JWRk? z$VQo0GSyt?aCCS<6Lf5>B8hVlJrl}1ph}Y?W=;qq1kX}BDdGyA9NOD&>I{S2iMXWbMi6Qr!d7px7;Ph3dPL>#k(Z6sNhAh zWeOHyv#Nesp>);#vdsC-!lnvoHIvMQ@eO5Or2vS--(%?UN_9daYg}s-?;j5R`!M$*=#%+|E2( z^a#h8CBHStp&hQgs$neC7p{d1Lg)9H;_7qi-NagFjUbp_MHhE%ydc8$BB58oSN*+K pyK~eJ%v4h`PuY5Py>GAJY8@w@b^LTPVo@$}OJB!N4eM_D{TCBrl}rEt diff --git a/houdini/otls/Vop::DW_MOONRAY::RgbToLabMap::1.hda b/houdini/otls/Vop::DW_MOONRAY::RgbToLabMap::1.hda index 618a8bfd268e6655a64d6a70f9a5d14281fb56c4..97b69699f67c716e68c5977c008b08bdb7dc721d 100644 GIT binary patch delta 1338 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 EUw7o6cmMzZ diff --git a/houdini/otls/Vop::DW_MOONRAY::RgbToNormalMap::1.hda b/houdini/otls/Vop::DW_MOONRAY::RgbToNormalMap::1.hda index b36e5864ea1d8ef271f3bb6413efa607f39c4963..10373102362d0198a72a979ce25a10bbff9068ca 100644 GIT binary patch delta 1362 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 F_g{Utth)dJ diff --git a/houdini/otls/Vop::DW_MOONRAY::ShadowDisplayFilter::1.hda b/houdini/otls/Vop::DW_MOONRAY::ShadowDisplayFilter::1.hda index 26c6c92d8b1192797ee124a36db7c22866d93022..a9adb3b96403564faa6ab5915b1d3dd5767f999c 100644 GIT binary patch delta 1378 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 ZZ38-<4frS-vM7`AeQN_g;%(UK_g~JJg6xxb z2wAe|80Z*mb{D>2HgSgZWIeB@$!v`BlTUm3)B}xTV&KWkPf1PA&&w;REJy{4Kzsrg zEl4cNMHZFs=74zM|I?ZG^KP4ow41(36WbtuW9p>U-;OO+Iqk(P@*&D#3m`rfX4v+eA@oH=@9flv6>EysRjE|!*W zm7Ao_`K7Sx*QfrYueaylpJV&`^OrB%Pag|kExye3+twDHUTaR#Q&+P%-yS`vJgb*^ zmiTPJgF6?WDw%u9&eE>FulljneTlgoFV-7Htv)5a`s&pDtQC>lJ{>w3G3i=}ywK(t zHQ6(f-Ky(%?VB3+@SxDSySLf=r25va*>mjB&rF) zdCQf)Y_+_?>9cK9?-32N=J)LH?|C$Q`VsucGVjYhE*&dhmA zc5TvGXujvclker+A*zh>-Lul=R~s{?XO1_^g}j9T|aJcxBb+V z+=Vq)stZoFRf`;az5B)Sqe&m*BH67RIalqouh{wQHk)zb<=4vQbJpjFS7q1sUfn)D zu9u_wpGk0O+a6u;eKv<+iff{er)B600Y^VEEtd(GTe$?Ev@CRD zu}lRCNr8mgfI>$WI>mgPV;Rz+kj^KnbfWHrLH)B71b?P;D@W0@0L3O0p&tv+qe}c{ zJvw7@F@`#X*89Iv41h?yIn0}UuE)3?=!`QUmlXqDc21@q=ro|%$BX^wG7t&D6!{*> zVy<&CP%d2W{C`jr&?G*5KDa;N_*-W~@9%${{@y=3U*5=2^ztT;_c_dNPoAE0C}4ir zZL6?m?`z!!8y}XbCzPhMe3|#E_ANtgcJ->4;TzevD3_`2yOMQY?83wDs@;pLvIFmz zROV+}-8DO7mR%(!vL#R~-#+D0VMh7)^8zmlFE0$Uv-)$!diIq^cW-Wvud6LBD=88A O%l&6{*w%GY3=9C}NLIoC delta 3278 zcmb_f&2Jk;6nE63C|e{-RVawdbU|vX)Lxs?wB0%>ZtNtM{1L@Y0t(eK_Kxi#yF06y zahw!YE0B=5fG9b0=Fl5GA#vbO;EK2)ajC?Azy;pS?z)Z>wH2_DWzU=U`Fp>4JNf*( znLi%Qd~^AwC-leP&pgb&Irk(3k6tvhufn3erxqZafzRoOU;TO^Syvn750q~57>A$D zydJFIl+>&x}1hGlUXf-gN={AjrySeTKga*>zsvzOG-pDl#~S`lUe&3lyV=6 z0}qr=uMscIWU4@xFx5p%W`=9RM-I>POtJ<^qoBN|BLW6A0MwZrr0?3pWvx6Zv~&pD3MA$=Om z;h|*4+}zyd{1xK_Y2j*K|Bb&NZ=CyO;k<3v84EZ*a1@lnDM{uZ+SM=Ku9y1Jd0E@CXmEr(}iOhEl9{S&%GO@6&LZ1rlJ=R-lnC z0lknDp@3DHBnF#-$GW@CAm%_4s1A_11$CcR0~_m{^yq#WxD^stS=4Zc=(6&+qvN{`?5Bxn_bZ(FTfIcz zDBjukJ!qun&7xVzcHjCN=Do_vj zhyY26X%GqILUsYwbVsa*l;Iu`SCIr>cQA)vIB@k!Yew903wxo9xS_;>Dfia;aU~xp!}=XpO~BwKg|u$%gtB%T*e6 z5)3ty_GOaM9wj5flL!b!Mb!w1(I8Thb!n@)UbLoUu|I3d;WNVo1VH7x<2Y%UW~ifR zT-v3(wW#8h8fB+Zs#nHg6P;&8Rq&`sW8E5dphd%_@-|8ic~R$@%C)0df7*gZeJbII zmxLfvys#OJaeo`i6IRLd{)N?AwOp<=lwriYBWV_eemS7{OJTKWh6i%M0`n;gs2?&e z(H;v`ONNqq!Z0RRxjqR9r`r?7{GcUoNNj3EpMG zs9_<|2HB%(E`!N79O62TIC?ja3VHkbEjxb=eiv?`EHZcMjrKj53t$RrF!a0n&7HKx z90xG|D_DJFDQz1GYKkbDl=@Ja+(rxZA#;W z^tFbF*pPQMZ!JzdE5zMh+$SRKRLWxOTJHKnu8=FF8`(5wDzH+4v+&+Tf1lUhD6LDU zGg%W{Y^ExgG(KVR{sZPR;I#k% diff --git a/houdini/otls/Vop::DW_MOONRAY::SwitchDisplacement::1.hda b/houdini/otls/Vop::DW_MOONRAY::SwitchDisplacement::1.hda index 842dbf8f422c6ca6633d68b18efe4399be098cd3..1c2b41c6f356f557c834e90ca99c46db10303680 100644 GIT binary patch delta 1363 zcmbRCit*@e#tG_dj7(WAyUZu*N^mhUF#rLW=Wiec;^kO@ctAl$AZDF7@qImr58?oU zr=Lp%gasy9fFzGgW@1i$dT?@4WO zyaE<2NG!@l7M1VjfcW75)0r3ZZkvg;nZ8LA+aUg8>ZH|gk1bX??Zqn+v7OJkaV_hn zbbMg{Nn zK9e=Iq~LCpPUY2u5B46KE4tg!?m5*|KUHvL@U#$&~IL!y^vr*7Plr*~bq z#_Yj@Xyt4jtDkXKFL~c-6#O36I?ZHCbn-)!Cl`KgSikO}N{DRN+MTPWPCuL0P(OFo z?1i^ibJXURmokY*-*ih7nSJnkbGg2XL**aEe-h@u5?ICNPM72I42l$8=MXh->LZ== zmyZXqhp&jd+f#az=hc%3*N>^)S{wSh_ut0JQ>ULZzxrj>#miDrFW2?dK3`U_=;4P| zTXLRS*00;-+ixzit}S=zKA9&=y{^svC876y zqfx50hW~aWUcZ|K{Yp3Xb?uAQo4$T(=>p*?3tqimygX;0b%I)6_1}ZM;{F-|#b}M(lH@iL}&A`3G5w~jk%@m+#31qpPaV3h;8UO*rAhP*(?}&AdSZ@g;86g z=LC~kx`7gR#K{Dpv@x6VrUu(I1Es^ab$9&sZQ|4 z3Q%mCV+0c71qx+41BD(1D4wf0C!^&u!ML4EFh#!JsK-(=oewBI6D0i%q{9-Z14YR0 zi)HZ&0Y`+k{R$=}os` zvfn{C7v{W2x9w3J33qp$%`fp+J8Cr2UN*+B_`mzdXJ55tNl{`i_v#+#*mFmkLr~RUt^Z4J7p`T_V?vi=1+{;V^#m_&-VCp{(gRo P>KQpEMNQfy#lQdn0ESES delta 3291 zcmb_fO>Y}T7Ch6cyz#U4cTC+H2GAt&`%~P7}$oqu5D6AzH@Xv3JPs&T3{H zCq>nskhnpq#9!bC^u(dGx_PaneYCb z`DXs*+!Ol4?`Iz5&l$NVIe7G{ReW8o#Mf#C#2NUVe(>P$I9;zcYac7-^fBOlwnnkf z2JIfFkxc0Q&6NFYl@lyUw%6YTjT@hS8xMf*tA6(INh67o^5h)lD`40 zpD70(z4p>C=icrLw~zKoPcn{ZC{chVrw5lG{_&1IbMfIT=g-@7j^lL6fQEB;D48)g zH}^sDqHzMXbg8KS#_vb-=dY~2Y1?azg&ZF`3Pa&kBnuvnyf4q$_7;n*6E@$at+GJM98dX^+0Us>|9N7|Ji#QPq zQRPW0uo?QSx7P}jO&zSKvH5F z#sazET}XAEBi2VsaG!`vNJ2e#F^4Z4x_TuF23nQC!G^wzLMBm{AP;u)#HEtBXylO) zQHj7vmw-cPD1h2MMA9P&N0Co^SQ!F6O(qH0h&?Qk9In`5TB?B5LAe^h<%@p zKq(CkgpmLv5R8hbfb#hzLj|fFM-KDZMCO_rc+-Rg5>MNluH`Yiv)RlA~ zQ;+s384;dZKqxM&M1YMZk*Zjiwp#0DYl@cWv!)b2(@aPJRK7R1lbLBn+KR@dQ@PWK z>rSOvbDEX4`q*sB^DL_h9`$If+ruuTXt-3{Mro6mwXYdnD@ypMC1^aL5?Z_>1d-x} z#bAC1+Yp|xD!%_Oq*hjIwR%$t#>_wBW?ASH10^qo)uI_4N{@x+(<-1r#JEKJEK(^M zO6m*4m|PVGBqW^nI65 zi~sWzzo0(D$fh3&A_)x*$QVXt2*_|d%Pk5dl|u-%JHkE;Z}@UKy+`mK6Gj6Ii8jbS zRdX3cwxNmFaLmz%MN}%YE}}rrnSUcjrL|Y_0%OvO+uPfJXruV6ws-@ z6JhBox-}HsifFH7DPO1c9$ULu;*4m)^+i~4DX{IhwtdpQ!L~~U&&8ST&nd@_9^6O3 zL*`0*wNsx&q19=aN1}ndj=n`WA)N18I*U^)jp42XB|N1zspCn#Sr#T~}}6I^Vj zB9}Djuw-%^9~{&CLdWJzC`}TjOx;h4#K8AGDI?pmfl6_Jk*t-I}&O0B-p m))!gf(U2_U7up_nVa_eU9cTgmYv>Vo$gwXL`iw86XW>5z>*Kos diff --git a/houdini/otls/Vop::DW_MOONRAY::SwitchFloatMap::1.hda b/houdini/otls/Vop::DW_MOONRAY::SwitchFloatMap::1.hda index 5b396e2ab6bb6af5158d6fbda1a99e47147a78e4..3202da63f39db445d3ea5cdd464e3c0af01fc990 100644 GIT binary patch delta 1361 zcmaDnm$A8@ae@Zxo2-^y<`Z=#Io~h<0hr^jD+uJc34u63F-9O}o!EP`9>fQ6fWXtw zB?7_%lPo}z$0ai{CqF$nxhS)s1R`gD6KVvHb5UwyNh(av{wC1WD5#vUXI@EaQC?z> zTV_tGe?duReqJ#HgQGFf2m`1RZs&ZU8lk+BV!iY#pj9T>)6PEiK+~8Qc=Ga7Qj_!Z@=7WTQh_26 z&wxb>5{q(?MdiCWAb$A&bY^V+Z8MQJ(>Ke+HrQ{_Rt>-1>+U&iDx1cJyt{2oe;F?I zCrYq2Pka%v!i7uas*1+1_HWwd6*8y&UKf`=R1jaw%q$XLZ>QvHyCwD6{r8JKru-0( zTX|#8v(Gz!d?}s0%+<{M@*aWWmPK4EF0`a-9jQMwEFT2#1f zE_C>uWUORS9x`)X@GbS@^~VeIV;)N{7H0e#>Xsc^nY?w^CtqIE(_wKI65f|)y^2km zc6v#(W%kA=q1U%x(zb~>w6ps50nfu1r%t^dVX^<+(&C6U((GriUk!U16{)jsR(B}( zdsB;y8NE{7e*40=ei7nNII=hNp^wz5wHpg0i!y30!omv#SMeRa7IW>?=``E=1AbS} zUU(bQvd^sDs_|slwuur)(?0xtaF?4iK(4;S{#ft5=tkG)OWU0$g@m zFM(GHZL^+!jhKFRfgfL8YR;m&UR&?Im~S0f`LZV1S6|w8?L(crOENU)B7qEohm)jHbIk$P{j+bB6&F8Go53kCu?Y+8v zdSKOusnc(#PI)iMymb-Ri(hqNQ{=>_{NuV7{LyvI@{2hZCu{mc_il;(qFA>-&Ob3> zW7|$|_4<1CB%wQn{Vt!*KWRVt@#B-@JElHgrMjshmB%fG@w8;m2_~~-110W=g9$ET z8!VdzBM*47DQ{|+YalU^^^Ib)pya*0gLm_lTqcON8mc}GS?I)K8M#8h(NA2krSETnOi<^NA{*nCaZgQG_h?sND`# z;*GdSvfnujbqK9>?-6#uwQk}!@3AyKCj)ebaXZjuXFx8iF9tddD0al%9!&-+;WDAt zAnlB%1)K}hTl4EV*aUQmL;dXkon*K3AJw`0nfq(KdA(dplGd`+iT7@@^_)08xA6hn zq4a8pi0bRn4#|h#Ci=ZP$MM4U>hD{OzixdCxvZbWpW*(-r)J&NdAbV@i+?S1|9WlF zzL%fwT`Sp@J0thn7ZZ()#X9%uP8@lB;oZCWiWeR)b6#6h@?&PX*~+7@Hy`((|F^8H Rq(tN|`*zmP5$mKF7y!XSP>TQn delta 3278 zcmb_f&2Jk;6nE63C|e|m1Qf(&x*)YxYOhV{*Vakv*l`o#*iq~xpb#x%@7Nx)yR(`Z z$4ODOLI{ZqloGC-IdG$=N*wqbxFIe`Tq^M&aDg|oyRPFzZ3S#(+4JUo{@!oiPCmOo z^~ZNpUtf6PF@5y=nFrZ7W*%qY(ThfQ78a{}Y5}q-_?&+5<*#Rx^-8_+zS2z|kZhtp7IGPjH1VEw~yq8_Nf+Byiy8fPKlk`mDfC1rugWJ+IwQtktB z;DOTVW#WaI%;HbVe>C*iQa4RIPvZ&!U(PiatM#p#S*iRGD?yH>no83g; zDBjxlJ!qun&AeI2ROF)$Dci)`C&ge5|m}KoM!dK&W^wn?8OpA-jNTx+B&_%5aZ}OGpB*+nB>I9JqQVat2zFpuq;7ivlK5o1i}IW{FEB zanZ0(0z@T(AZ-E(p@9Ht`vA#4K{yOO+QBLi_^C5VAV$>363HQ(%t9Fm1qAVkssI5) zbVTfVYzR(iU?7YH1c72yMLCqsE*Pp%l{gB(c;0+_xl(c}OV!dwt>v^Djhcx(1%9$q zD@BV-AftdrB3dao>ZZaA903wxi|osV;<@c|rPL~I@9ZoTt&#YN*2a1**-*b?xk_V| z1Ov^aeVJsmN6C=zBmzQFQ8fZ$)QMDNUD#}_6|D(b?9ZBT_|z}~0Z{qwC{7xt5$Y%! zmsV-97A-lYdc~=iR+mO$6P>3;Rq&`sW8ECIp+$p*$`(ovc~R$@%C)0df6{_RJu2ad zmxLfvJhvH)aeoWS6IRLd{)N@@N~N+?SB4Suj-*)>`sIM)FNM{-86L zM0+e$Eg4Aa3Bwp)<$5F_oOW8UePMTqc@Iv}c@4Tk`us%$9?hjF4x|sL1`Up`HF0)f zpsVK;oONUVe}1Cp^k*39^do*K;Xng2hEW;-GTcski+oAt07`8Su?NE&ez~09C3u$! zqlSe<>tv6rxeO*-aEMoN#L+u>RLI*`ZrJ(D@VjsWWs$kPT5s*ZTmVy0gQ4HiZ|0)HJ&LguJ}W7^1s;Rv&sI)3~zG%t2^A zOgVP+;64H#GMAext)+1k8m*dnq#C&E=v#yn!24ZWr*&$l5!`iv!V_*|9*_G?yD%;r zara}J@faEjC9=By=nbIJ+0;pCLuIBQ&>({Q0C8sG7*QPX1 zNMCD+hz)p0^VZ_TvqIe2#XTa@PNgiiF6XXX%@uNmbR(O_Oa)ddaIU^P*57BfH%jZ$ z>5SI|7n_O7C5=y5JUNaJj!Au?Yjeh&#*I>;?!_cA@V&m2p>0|Ifjd0u{8=s)p@$Ew uJI&=%Wof;sFS4Rf12UJLYxc1Vb8ZgqKy&cVLx;Enjy*BgWqdAq7ybkPS>d$+ diff --git a/houdini/otls/Vop::DW_MOONRAY::SwitchMaterial::1.hda b/houdini/otls/Vop::DW_MOONRAY::SwitchMaterial::1.hda index c285cf17aea24d917ed9a5a160d14530be552264..5f6732b38d6ddb24c73a6dcfff10d429231003ab 100644 GIT binary patch delta 1334 zcmca}oAJjP#t9m%Z?jrI|tRl<6M-QSdto?T$EW*!oU!B4roXeR8H74uOzi7FEPh0Gbh!* zpd>Rtub6=$K?7)x0aOXMb3RZ_UP-ZDdKFL#Xc3DBNNRHzQ;o=EIZ=+ua^lvT*NZ25 zO`IV;Sv{#~G8?1(|BJHMc(!@51-_dUM@TpV?8me|^_4y1uNx|Lsl*=_xOFO}i#xpIh>Hv4PVki$+7S?)d*v zcJ)6$9sN1ky!)tpc<=ga=a+_WoA@?q;<33cTu-yMHhp{aLh|e}&a>TbdltN3VHCT3 zi@#sJ|Koc*j+wiuGaXyqb8Xe9V_BtdXG>*;t=&^%Fnx*X)!j$dgn6=GUvqR)c?tFtXQL)(+G*JV9T-8{2CVfm}H7vHoFMcj6tTe4l; z&Sj%yjeW&;C#EUK@R*448S)6XvO z%ABAts*O5)&%>mm$F^EaQeGbH_G$4)TL&Hhgw7iPE+k^Q=jwaXVy<{ zv2*kP&FOe~^GDyqwjK4S%xv!k?2y_v^;gk^=~|KbuabA%Ieu!&+XXdOstZoFRf`;a zz52!Nr$s-bBH67RIalqotJ?W&H=A*x^{f889XIZ*`*QA=)av(oi@&@u)-OM;VQ;{m zD%^-40dajkrj%-#H9*2(5MR z5q7|}ZsIrZu{1s>19XOQJJ4lkKrSn;2RaQXcEsHtT?QiIGNINW?Tn^HF^mh-Tl4EV z!~`^nL;ddmon*K3AJwt_!2Pw}ynf%wBOyMgmG*Aum6$laTKFJui~qNV4d3={Z#dSr zdv3y&y^x8(F*a=6(L&$4s96GWEyr zQ(vAx{*?ao=ZVMJcV2&*fk!Wz*;BCa0<{3z6#R}o{^GYNSuZuJA1dDDG2nf&O0ma! zEr-)k#&r8i!hW*C36>*%}8Y@Ba;~ z_ml%qo=tsn`b|S$vC2cL_U_B?q1%1I8)mHcINc)i}{QB3;W;9oPpJwrwVEb zf1~%4A7`8oP8W;Ij0GI;*$O6MmnHM}^Z3)Zi^X*oT1RaDikndj?~qoAIa$Hn7pORg z^0$mipE%oq3*iCw6s>T}P>f3s3zFsC2Q;j(Kmr6>3OLdwAQN&T6lltmL|`rOn6ups z;`}CtS`lciV5d*q3Uf6pn6Cq4sw|OS#@nPyx_IEpRG%Q#*2rlvzrc8hy3K(U)O{We zY^-q7rMp$An~=ClqK-R6hn2q-9o}tVKXpW_U*ODN?GrPgL9TR7%$bE;-b5sD zm`j7+oVnIs$lfq-&l@FOYE|Y8RFTXZ2$jxev#8yt0(GI*5FjZr4I+VD@GhXblo9J9 zCAdSxMI@nQJD9^44qUwwIRh<8;9vvKMFEqjLr@=fv&5y6xMFj2uT5gv&x3=a>)`T2*CPSp z)M>-^`RyU*J?Nry8gzy9xeEq7x|X8YkZw>78nmu8(Yr9K)$~GYgW(NdE~gI&-e$t6V!aUXgQ{ zUre#ICKTsDCQ+{Nf0>%a*sVz|kyfL<*-AWhNnDeVCKXQ_01X6ms%M8-_7&Y42yTVc zDOk$aNxg^GE|xeYT5v-V7F-I7#i+V*)V-ltEadtwPHo?(9NT(u9{>-Ti>;-0Z5)MW zyKWwc2Cg&u7GVc)zH8|;POUV;x`Zdx#&tZdH_gI0ZB*L_E%Kzs59*A|CG8XwGOLa? zGXf-EQtWYBMv`e6Bv$~Hio&&AK6m5#^)cskNyM=!jw9UH93o-^?&!L;IPt6yJKMNN zM4G9ziml7JtJiXcTp``arZ!W8l@jc0SH|-Dvh+r2T-u%SnBZbF5xJyshsBfQ@Zgx_ z7dke3Olh1bW$IB}BnE!emoh9`mcQo?kLo|mr6Tn3o^`jiSgzJqTlyj^`ZOT3+1XYf byD;Zw;SMwl{}?#L9dPW4*)HR=$yxXhefZrs diff --git a/houdini/otls/Vop::DW_MOONRAY::SwitchNormalMap::1.hda b/houdini/otls/Vop::DW_MOONRAY::SwitchNormalMap::1.hda index ddedab1e6894c1a9af4e5e959445509ca07ff5e4..e07c36d7453da81b4f2df4111d00c6ab2675b770 100644 GIT binary patch delta 1347 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 diff --git a/houdini/otls/Vop::DW_MOONRAY::TangentSpaceDisplayFilter::1.hda b/houdini/otls/Vop::DW_MOONRAY::TangentSpaceDisplayFilter::1.hda index 60a502654a748034bf433a5ced3459268fc01028..979b441ce8be06ca2b950474811e5d6946174774 100644 GIT binary patch delta 1372 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 diff --git a/houdini/otls/Vop::DW_MOONRAY::TransformNormalMap::1.hda b/houdini/otls/Vop::DW_MOONRAY::TransformNormalMap::1.hda index c015823291ea97f238e0f6450e32f4c5b98b27e9..a51920b3f77eb16f7824f9d681613b3cd359b672 100644 GIT binary patch delta 1343 zcmeyYJ4b$k2J4@!mR;r(btO6fFaQCV<8LSk|*fXyrwJ0w!$1O7_)xV%5 zGe57Gfq@fbkpWZ*w{t#FONwK@yCp*8&@qgJ?1Zc_lL%p2{yh9 z`Y&I8UauRsx30GA-S&g#kCVs z-F|feTfYdECmh)ux=@w(>9q(8Udt_ZZ&piNaE7)gWv|PAnz~u8K4JN*v=?PsPVuv2 z=N>p3wr!%s(XH(MO z>DwFiW;@Q6`E%-q%kHUJdoS)U+4Sks&taqNYD|@0QpvhW|Fq^G{6J*p@xr zul}BDlF*$(f7egnpBz8=@#B-_JEl%wrMjshmB%fG@w8;m2_~~-110W=g9$ET8!Vdz zBM*47DQ{|+YalU^^$lmUpya*0gLm_lTqcON8mc}GS?I)K8M#8h(NA2gk5~IqWndD5De*m$#awVM z+<7LikYf36kTX$c1^ytsc_w{=$?5(W2{;^(Z Ly}E0Y6axbQSrS=# literal 5875 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 J4%c1x`#+UO!K?rP diff --git a/houdini/otls/Vop::DW_MOONRAY::TransformSpaceMap::1.hda b/houdini/otls/Vop::DW_MOONRAY::TransformSpaceMap::1.hda index bf645667e2a7530edc8d73aa7cc7b4694ff4aacf..b31a49050886e7bdf7f17e47dc19076171f45448 100644 GIT binary patch delta 1361 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 diff --git a/houdini/otls/Vop::DW_MOONRAY::TwoSidedMap::1.hda b/houdini/otls/Vop::DW_MOONRAY::TwoSidedMap::1.hda index 489a9fea91d8d3817e3cb39da404314de9450e7e..d91d6883babbd9f13ce913fb2c6f3168e72c48ea 100644 GIT binary patch literal 3376 zcmc&$dt6i39S;@6dwHmUNUdFtmsJo&!lMFN!Sb>NO8|+yT8NkACb^Q_8}GeA0y0}W zpbFMiKeO5))z$|J_JR13szAGav@42LH$_oUH$~^vR>ak!=+3=22?6ZZ{j;5Xl5@`Y z_dMUSwm9fT)hT2kcAA+ zSRi_t*RpE(XVE6PJTY69nwF+m6qhTPLm))CoX#XQgeDb-!cft~?S$3D3C>;MS31UY zjG1>TO;ZeR0S*#qsh~|T8+phW2V-N;{~0>aqlY3%nVq(1VWx_qX$}ImHV)d`#?~GQ z0!A?{n}A;!zbe=un~n@SL&!am#0|7AQ_YYjt814!D;Mqw41sfmP3BT3kvJ)>GVf%H zBNz%dEFcX;nu#N6ij_#l_d}O5tBP9!4Rt7vovSOANL(?A#Caw!@&{r}zzRWumS(^h zA{;n{MFO~)qm4L6s&RwC0(1mLFfcO>ik6`OHVQWq$bax5D2gEw2k!!GzzYcjf<2|6 z7%C_*1f?MuBhD5fR(b`PC=p3u^*9uRP%(xu;VdQs5fUZUC_+*uGlvutYK~?QEdz;B zsc8coV+;5RNZ=>fD7`{lU1U>>hhv)-zhc_VIe0YUCIoJ0tG(8M>(~)dWFsUFexZOR zbrjB-83Mr)2`z3ma3Gn_mchq{jLS8z8P+r0} zz8ZWlkZ$+LlBEI~Zbz&u24w&X#q8g5yIe>V`oWZXLUabitwCr2O#u#~LUw?KQ~+8F zw<>KUIL0!ZD1%cvK57||flwJ3_RTMs!*zUY>mHNKNmj+fVk)Al`1@1b4A*uzqMe%2 zn}}!Rf5;4<+y9LictoDU$OzO%1qrV$9l_X(PEy4rOBNakJ3`R{r}nwSwvk~DCH*LB&rA4|0k;S|h>pSky$!!uXrndII2Ud+D@V)yLEO{t zTI+R(|G2gx&l0?Le;=9#;fUX)wySta(Cpk$IX85uI+KNr9d7UU{u~_nG6W`$2>H z!IDcGtAq6!3yW%`kq7T)+?Zkc;AQF8U$+lMmpyzubZEo%mCs8*EZ8(Lb??msUaKPR zZ2#1^~nVQnUlT6DmNnm+is>CI+OMu zHf$VsOWEVzla+L%Xn%uu%ejtuULT)xZ<8J_3vlZA+oyLAw4D0Y?9Xl-9!P(6ea9Y? z%jy1lpI0n(v2V#+;yWKL&3`|2tHSfwxZ$Io`2D>%bXyt^b8WkiPF?$pu9GRt@mspc zN^g&_1s0^rmv`k*Mx?)3ih*xNA-paz38J{$zu8Z{fq|&$}R(kb|6yIZm zesh0l3nQKjOv?`QP@Ffd!_M7FYCoafx2{8e5=lwFf2@~%@zQkJDXXF>7A8?99X5a*i%Z^!=>%t9Rxs@gDEr^yU=z z1sbQ{hxxtd(x{PPZs#VyJvsNwI+@>lS8n@W9GV&LoSWg7xkxc3DDk%&D$vPSxoz>z z(Rlr&IK{I(R0*MG9$HpEN%xY@a|-sS%?T9~nkGJbw6-R^3QCXjQWhGVm<|m_K+?h5 zXyrR#*h-aN6CG`zGJWYYR*lej(E2U!eUzZ>qO9+=sHcZe4gG{5?w?0Ch3>jMCcC@0 zKOB*xJ?-|}LvH5Q6@fGV{;sP2$)N}Ad~bE=-0Fd|zDp7dC=chUliFS%_lNEa1<&M3 zTXK_ora86lEX|(%^85=QEFDZ}bTY2qviiII-Jd%*KiS^fSl_$pFJ1Y)=W7*_uG)s^ z7*Di2usU+$=8~A^3lDV@23l^W&z9c4)PEM+9~EPHJlOeNfUB$PsrJBy>tY+GNhJRQ D8&Pwv literal 4334 zcmc&%PjlPG6=$M!Y#>hCY1*0Ix`EP>RhfiXH%`Kca%qx^G^I$7NZH9a9%KnD$*n*v zW_O`K@pyV|Zk?X`QQBL3=&j$NIrO9Sw+n!#DLQU*2{alm-v52?_uej!`kl`zFP;r7 z-#O}cx}OEZZhLez=oh?i_}~6>3+tcEL>BRc*Jcro`B+kU1?o3Os*u=xB+^Es^Efyj z4EiUn&l?R8{LzIN@`y#p6wG?A@}oZ$DsSNZE&TuDn(8&RcaMcgB)uX_9BB4Mif9`C zH3Qdu-~S(EVDX)Pcl3C0^1ERmh0q|B&j$3%b@A)`ip=w{N=C6UWO6yXF4(s^oW^20 z3?)wsvu}P~h~H{UMl~yWZ+=~=ym9iypZ_q0-p@u?DSIeI%B1E@4N}cTqAHb*e?zGD zxw?uW^wuGZ5!??P6GuUNdn81xYHG&fNzU5%>z6*b+*B$z{|WMqB9t3#F`u&p(ckq_Fmatq zg!sdsLh?(q-%XNdf+(8`G7*woE6q}s0UJUyE#_47kjC*9nX-gQ1GEFW!pWn1*Mi*aNIfDYIjd=_QMEnmTB(LVps| zsd~xF?n|5{yI?3jO{mT!bG#0l&@9&E$V96=C(7TQXC#lj{28lgQm#3oM`a|xyi1Yd#?ui&heuN!&%Eq=GH$08_n zK}z7=^GfRTP10Hqs{)zs7m8_;2+TXGNE7AVbT^ zFGcBLz~vKin|SY2Ijwu7*(9Dvwuzpx#Ky(KnINMXSEY5VkYWSBh#(3|LNh8}xX-mN zxppDLCoUrFi--~HfZQ&cBA>-;gWGly-DN6cnoKh~Wu&UetY}SZ1pG`fX}X(K6S9T+ z72^S`EmA!vTU)t1cSz6KFr|_`q;jrEqe*r@aoaN%o?+nFPBFClCsyz%L=N-UPru@6 z8-0M;VznSqzGCF0k|{HdOil}h(^pqi04(;p-Z+kGWLxOh(Y`^GB0X zeDD6{JVqbcQQP$DwOx;}BosJir%ms4bWr`syT9-5*$LheVP8Zw=daLmbN-6GZ}pNeq*R_=b2CV-7n_w)>p`y@ zwECT(-#YFtycQzg=F}v|JT}q8Y>fJ3`yD>zn#QE1F#Xh?4Y%Z3W4X?%7N*ktF+x>- zD~`W|*5Og7)9tTO+$&~L{$sY?^wKLm6N&eto_wAPsmZxWO?ETQW97QbZ?)nm9)W%P z>;lsl-LPfzXR@}n?Ygc7MefFSncX`2&tGXkTx86%frfRP-_PT^*BSOXzMwJ2FIJJ{Uomg89hax>-{V=l`i259wU0jha49wm zhkR>BVomf`LWxX<7O}o$v7h3$kE@s}t5o9Gzgzp@UaelMmyBxZvLyH=A-MOO|FgD> zoh|POcaoKTYo52(s|LoZe7?0{$!K0B$Ktf^Q-7$UE}!?S7}VI{7;96 rtxor3=$oson(>6~RCk8zvOIs&WHv_m$$R*H>VbwaG4SN&r=%w5=jD}D7Ni12AbtUh z79fy5L*t$Lo(5=EppiUM$S`IMgjWv@&_?u8+RFrl-T=EN6IMn)RwSY1-)} z&DqzIPOe^;zcjpJL(9JE+YZYgzBqO&S|{e-w@a2f*Ls_uz0O))vQ|ed{Or|Lt>2|& zO0rXWUDfSZL{)XN8$7cZr*^YB%{+znuvU_UQ-i!N7HhsGEbJ?so^QtIk{kvN?zP~HtXJWE`Rl%l3 zI^Ghz{uY(R`+o3pr=PF)J@O@`=6Hc~eN5_XxqOWn-rHWarYE$guDSNrFy@_e>Zxr3 zcCTzLQV-j9J^1ST9)&z;_1o2B)xZ`a7rXGVyK491s{FwFygxIt zt?rtgG0U!!64??cmT#Z(s4$EF`*{J0LgNKtc2;|y&-KkJto!!n==}OQva+(S|C#pe L`}Sm=6axbQ)e23G literal 6868 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 dH;NlAdv|U&(D7{G|9|+4J+pyQS$msw8 diff --git a/houdini/otls/Vop::DW_MOONRAY::VdbVolume::1.hda b/houdini/otls/Vop::DW_MOONRAY::VdbVolume::1.hda new file mode 100644 index 0000000000000000000000000000000000000000..17b7c9eb2741c6f58ca3f9da034e6f1679648192 GIT binary patch literal 6772 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 Gi1;5RFGWiL literal 0 HcmV?d00001 diff --git a/houdini/otls/Vop::DW_MOONRAY::VectorDisplacement::1.hda b/houdini/otls/Vop::DW_MOONRAY::VectorDisplacement::1.hda index ad715f03ec896801906b19b3bb0fdcfbcce8b893..979834013874d2e613d72593ca10dab5187a3a7c 100644 GIT binary patch delta 1380 zcmca$`d4j&IvXQXR?9B)iMkS8j7$tb0Ot7{2!VKlpFljIAR`d7PMr9@9>fQ6fWXtw zB?7_%lPo}z$0ai{CqF$nxhS)s1R}@132Fq7b5UwyNh(Z^dlS&qB&eLQXI@EaQC?z> zTV_tGe?duReqJ#H1Fs0s2m`1RZs&ZU8mYXJV!iY#pqvW>1B(VoPFVqB>Ew@m!khOo ztzhCw$t*6&NlZ@7P0cHrT+3?3qGOoucWdd6(|DnA6T>?u_zZ=RKA-7;;sKrXI{*^Z6?xY`X)_mgZPc9lUBby zwpit~7q3XfcCo_^YgwE04jb^WDPPJMKZH_!fe^~N0mQ_a6sKK>OJwkr6R zzF6iR&-k@dS6}6lDEzV_?eT(Vk5?>syTT~;g`s7=ZEy8ssrwRhIbN(cih8_b%dU^U zyr!$e;w&Y+FU@-8n-sQsN%QM#NheqHvAq|4w`RfHduA6hZtULpNsN2?_Pr&1-KO(i zFT14`tKEIHw0LXY!_AEBccmheFP_}KYFgYQzMdW1wYDr-ct?tRxnldZ_S#Zr^@Xnj za?X~n-IHU+{3fLSF3;UK*B9BlR}1gBamq|+@eQ7R@_VW^8BaYf|M+{yMRx5CFZO&1 z@R)RJRRQazPisWdE9coYTJ3N;`>Jfs>9hcK_WfpN7xUIe<$v*?yJkT~}5toq3s5vIA)D@9IbN`{f2!tf$I4w(GYd|&Rf`<_7W(CF(at>q*Bbo-npUmvpSS7fyM~!N zUVn8rkIBmmugdT1z50E5VAYqI(|2c1k(XdLUCj03S7F)|IrS<3n4SfHj6AdaVopX% z-GNncxAdyS_uoCU++ah*;jP~4|5fUfgzgmjyMB8AZXQN9=8<6 z(~>+1vO%>MEzEEB8@xWcLgje@CUYK4z9>w_U(zTGw=aYCd{NMQ0th(B$ zy5O<;*F4v+_m=E?{psSfl3msYx6i%I47lJHxu^QXk;fP0-pyCM@OYc^+M1G@)79Nq b9)10}`F>q}VO>#?P%VqiF3FNjQVa|L@b6iK literal 6864 zcmc&(UymEN5qIDKhBkInq%Df}iCG7=FSevp-8hMIcdmRo$A{iY#!0pl*oI0;)QP#( zazRq}$A;Ud0(~pcZ_~GafqsX+_d5jr4ar^oIi2GcX|smBOU`g+IR7}q+if+!x-@$( z|6P_e_qA+2V*rI%2ZayL!QXK=K2h?-x5~9`1py+>hIwqCFKmA}{xE8oHRUHpD^p27vIf4Q$zs`(i^ zPabrhs|+I6tLMpGB+$LLM+N<#blQ)4$HV?et4XGkvqO~{Oy|#K5X-;AyYw-ec!_gB z*g8}`Z-xlqt4+xhb=VnbnOTp1_5FZ;bz2K=MGm|A{-sOr96bN)9}j`|v+h|Y9%+>c zZKW{n%t|NMH4dc8*XAq%(z_2u0^xr27a|urn2H&TWaL4Y{}uTCc<0n={y-+8 zAosybA`_Ngc_Op{8~Dc`FnuM6a%Edh$kdqr6PW)Q(?GfO-teTSY|d;?b4;o ze-EH5B-djN5r6&AbT!Xu|sEz+UT6K;-5!5Q4NIJH8jJTYSqFspfv zZeU^2l9OHzqLNIrsV$8X#ciptrs=Sk@gZXJuoT~?A$#P9agKWIbW;j1FMSU4WJa8# zv-H5da*#}I$*8Fwh@Qz1w57P?Myx}lf;ypDoVJcvsIcD&kzqm_cFdEhVBD|-RPf4_F|wZsHcb;@ zj9Yam)I?Z)#>|n-Fok)MB*-r+WqmQ=QzO_wrB_YcPSKNrC~ira2qwsj<@u z>tmJ#oev0RtQHn~2}=mBw1gM%gn8)~H+D1AqC8Jwt-?COTH1J_g+gUkDcD9s#1ol7 zSey`3SaPB?{u6keF;426-=UQgQJI-mQ+UG|uh=@PtrA2HA7oef63;T6 z9?KT0Fm_);M;y_dL5&uE7cw3Ws9++OIP=JNE(SLh`v0d#p8#j-D)i`c{S1)n@xn+f z47U)84MbdGB?>K^S)?c_;5N!>%NOTfdpl?K7Umt`|=*+6g`R-Vt*MmsK7U zESvi-Eh>@``HQ!+9djSasE~Cv5W?A!liN_$!{0TqfRj4J5#K_~X@8}Lw|!3a8UEnQ`xJ3V zzlsHZw^>V}ph|ALq;+4G{ctAWO7#*mQZ3$v$(<@~KlKp23&{7Z&-qL}V^Sz`H8|HG zN(gZ%bRnBekEJ`TikVb7QpI>N`OWt7Ho<66lZ;O5bzhkFP__9?zHl_pIoT3EL8weX zzQtKKZ{Ihsq0M5A%SU(eWv`>x*I8qARUi6;=(!P=r3&pSj`2+t($}NwjJb}968iZr zqFxU*d#?+grq@8zfbNu03&l|vgFqxl>?Vsp!jXwQxVg#Vn5|KgOPz|vU<_xZG9plS z;Y}3?vLU44Y(Nd$jJ;oVDs2QDIf@`*OAQ5c4A{-kllazorEqHzq&v-Yg2XVTQlpIM z2+SQ3z)_B9>akckWj9bnh9(VPH(2?Y-MHb|MIC-DP}6Ji2&OWuzRA|Vh_=UKaD=wc z^&~V``@$jaqE-mQFJH=xLKBt0TLp}Kh{g}~2r4L*l1{^d$7!MlNA1*iuYnP9-{ym{ z7;cjWJoi1|<+Q@$eSRdGq4@UVJT{`)DP#us2TJ$lu#LJLE;|o+q){TCHqjJkVn~2J z>eT|TbHElAwO$TKZ;Uk!QdMomdoBrMrfp6p~z)weEBL}mrlhYtveRxHu9TF`ds77m13?rkJzpS zhMFcrxHuXM!N!1=#ZaQJWhZb*Ced>kK&bMA3k+G`7ccH~9yl+oL~u7Nz{8zbCu&&; zDs~L1K_u?7hQT`=Lp0Lr1T-ZapECm<*b42Z!ph|>YG*b`Zr2!W#veUwHhRsS2aU&j z-Cnod-iv)l5FmSv`#YGDaH%k}yWMWZq%6>(1GbAgerw~yXWPw2xAE-7i>-}nF+Ib2 ze6SY)^yTMCihZ1_&Wlcw5U`ug_*jY)p#ul-0A~vpEn&$`x1O{gZB&=$Jh|!;y*F}6 zg*{RF=p37N=D0YmbQ|~gc6yCgv)5|u?-X1E%A1&ya_Di2?o9i1xNS9`vXCb>oT&M{ zBjoXySD=}&XeJtHVyt=VRmfwLr`VjSHj?DOSoLtX+1zQZShx|gmw%C>HskEfj#V1Z zJV4^2OpN^W>2sZSV;8l*g`6BH*ax4 zKl;Jc;jbQIxNc92O!Zu4QDr7l{&x&Xuz;E#zPx}>~%1LEN zeoaAZDg&JUxgx7ebSqdBXp{24i_AlRS-z5rljTK_6SqE2#V`@%jC1jEJRn39^v-rn z^VO-*)l3d*RT6cX?71-={`q7TH?AhX3csM@p-cUo^*2)Uo+~1kH21Kx+ufPhLA$%> zE7*K9RG!jJW-rBo?pEgzM-;bMaNZ@V-h=1K<|de*E4+G@%6jFqPd}ZL&GGPCBa9W&I}G2SI$LUyRB@AfgzC-YR?7Xi zdZ+Tq-Ab)e%K_z_Wj;~OCwg~(^B>x_*xCG!P{u6no9=r^(2EkrGJa^i=ZMZ48{cuf zh+dDa&FaE{vw zVSz~&Aj#vBnV6HG9-Lg1Sx^FzV|xKLg2%ZiHL)ZWCdc*yXlfW#PS`WAB(*3nF~==4 zC)K~8Br`v+n1O-A4rqh{R0+3pK2VKNUP-ZDdKFMEkAZUUB)@3# zc^0e5@~mu|6Ipk&OrFIgHQ9u#apFJO$rreM>VbwaG4SN&r=%w5=jD}D7Ni12AbtUh z79Ae5w65!`h}#HT|pQ?t%&3VQq|E_Vu+Ys|Y<}7h*wb^|U649%t?tdHdgdB-b0Hzav%U(8>DB!;6#TsTqwHbcm)gs%>-Q`yFpW_@dsSh5$flduju-6gpQ<@~fz92M zCSOjqR*M|`=KAGp*4C=EG5l7JoU8WPRBd{8nUTBj`s?q13wG{}eYy9hY1sYwZZ9vU z$N62>us2}KaudDq_3;@EV?T}0l4q7bnmogQ@y!b-J~f2SEy?|2SGRqxe`3PM#_Z|m z{&^kIso!zgUi9Ss&H3remv4Um$SrPF+X<#=h7uE5b=>f4eCIC#ctN}{hb1iVIs$-ObKq~5`2=f(22z|c7=eWpM;jngy1%y z&=QbPE=Wj5>xks}na-^oMb82ho8GkZB>UALgY)NDhIA;T^NA{*KoOGvg(|TrKA^|a z5>p*q>yNz%I}lp!?if7Nu_y*Qp{C04L;qnJS zg%B=G@5h((VJ4tT*vtIoE{(Ah>Hcy+|H}W^KR>mEiw*U=zZ?`xaEW`z%OWmd7sY(& zR(l+i6#tyCpzm>R4(nIiUE{j&eA}{Fbwb$=)k*1(lGpO-Fv{AmTrPUGdh)Mzr`=~? zep!-W_AgvWq$E(xU*71W#g_Kp#w=BLN;9VP_vKgSPmJ2LtK!@3_xoe!%$eizpXsTt KjPx2Q1_l7TdqsEv literal 5608 zcmc&&+in}j8CKu`>TYbbXw&=2+JNlJB*m(65=N5CkaQ$iA`OwU5;(?Y$Q_asEq4|( zLmeUry(-Y_-uE>Mv{&tQU&8l&iGDLXORgyTkf1?U5IFmvPc#2NyVq`hwK9KhVR>h- z-E4goc3X|!UZ?GFulPS+-NyRYV=;|*!pq}`#=I}7ya4o-p>h=Wo{O|rYaWLOolg6( z{&lSeK;@WAHk5S24k)nIjOW8YJD&IO{yzT64c?o4A07yiNP0nvDDXZLDGaJrZirZ- z{_(pILFS!yt9RTveA*4A5E_8|xdj3F+WmUJBa_Us9O0ZpIEx|nfxg}3G!~=oK=Ray zU481vZ#N{Pn&r6Frz^hP#@i!hQzcu>r zk}MKL*-((7kZ-L4LZ@0xsOAG2#}{P85+)I_$oDUOf+s(k7R=5ylL?L0m;z0l7W<-+InUb42foLXbgI2mHqb(P zF;7@H5HXg)KGvjR*1-bRkjHUOg>1zOR6Nn1qzd}IL;I7n4`V@frsIr9dhB!@n{{BV z7E@iYW(hr3#-=<1*5JboGI6V*3rxeAQT@ZR8J-If+ic%X{^bf35yE6 zD0}xVNfx5~2Tl^}59zCDScIY;BtPFIS6O~Cm&7TPl1EJC03ZOmeN-ZJ^p6D53ELK6gFQe(k&zpq zElh(fmWe@_$5fd4wUsoJr}+04x;cZm;F3!cYy`9as~KL>WMo(_$p)!zAfiU7d5oo+ zjtrwK`dW>v(10PQ8aUF7;dO4!D`tsX#k$UP{wTL#iZN$yl9Bb(x|P-Y5|^^gI7j4J z(qc4<*(|n&q|5?otp2~me7^7Ic3dx|!f9Z%=0@7R_EsBz+Q{NOT4MDzXl^c!2R34I zW-w1qx#Imom=j_Bo>3ISj=eB1^>=Ye;ba+}*J{~eA9Ce3!ZksK{4LNMjM?m{Q=C>s zAwsYo zI#pOl+ePanX8fRNToB;%A-PY2dsL24w%gkz2*?AX$1JfSW`nUHy)jq0bgWF0&^#jo zD<~P5VP~#B<2vWs2Mr(ku&^y6MyvvI-*xqDq+Dv;10U9%r!vMNHl;YnN{Wo#aAAc2 zKUGYc`Gk}bvW8aR1{|!`Na>WUt!3)`EoEXQuy1v1WH>GqgVuvd^OqS}RJnh9QB@*J`Eo4_*-@cZHmFv zOpiNA_|`|IQdT7B4Giro(Ud2OV0Yo7VJBQ7hQ#olGWC#XjIwH`P5O+Cfi1C!V=^RXC`iIJLHYF=>>((Di1aT^r4pLr;xMpP2sv$`8FY-PCi+Y) z8e!;_2?L9nv7ewitU`>U;tVo53ZD`M9dO0?QzoU-ju}d}jNP`qZwL2woAt2SdQv~y z?}fciXFteVyTk0)zi0u(5ef&{YjoOy2^Qp-F`|b_b7$+L7ma4USAX&H<<3@R2A)$L z9qv1XS!Hlz#Q{sEwu;ViAi$gL;FPm7CY=W8FiC)lHq)j|cb<2iZB-UvnYhY=yf!6j4Chp(9>+g|Yj>~NY_*p#Zn@Jd`!Rvq4$=!f7D+I# z06s~D)Z|p8CLdGHW99qBx3ar>^nkv9a)$F7`)AEY+{Ah9fse=5QKrXkOdBz5*~-G6 z#qG^Jx3I_k?VsoI{rt>hlT>3PBQCy=4mcLFmgkjBG}lu&+CQT)PHe0qiFufw2<7kN zmP8JjnGi$*mSgPR11iby&D2}___Nx^Cf3!@NQne54%)q!I1j)HDjf8-ZQ&@ex7J`L z-~ZXdkzF7Hlx`?lDndJ1)JWhy*Mx3h4<6dWcXSh+btF$SI9 zem1z~&X~!^d>sfAG<3_IW2{izMNzy9QnLy!ip^6{gw3k@xqSg2DqnVY>&@0-w_>`Q8slrxdTG6Dzc8tFOg!uO TIyhj_RN^DlI=-f@yYBZtmR@9J diff --git a/houdini/soho/parameters/HdMoonrayRendererPlugin_Aov.ds b/houdini/soho/parameters/HdMoonrayRendererPlugin_Aov.ds index c3311b7..4ebbeaf 100644 --- a/houdini/soho/parameters/HdMoonrayRendererPlugin_Aov.ds +++ b/houdini/soho/parameters/HdMoonrayRendererPlugin_Aov.ds @@ -200,6 +200,28 @@ disablewhen "{ xn__parametersmoonraymaterial_aov_control_g1bh == block } { xn__parametersmoonraymaterial_aov_control_g1bh == none }" parmtag { "usdvaluetype" "string" } } + parm { + name "xn__parametersmoonraymaterial_aov_secondary_rays_control_vqch" + label "parameters:moonray:material_aov_secondary_rays" + type string + default { "none" } + menujoin { + "set" "![BUTTONS_set_or_create]Set or Create" + "setexisting" "![BUTTONS_set_if_exists]Set if Exists" + "block" "![BUTTONS_set_block]Block" + "none" "![BUTTONS_set_nothing]Do Nothing" + } + parmtag { "sidefx::look" "icon" } + } + parm { + name "xn__parametersmoonraymaterial_aov_secondary_rays_udch" + label "Material Aov Secondary Rays" + type toggle + default { "0" } + help "When \"result\" is \"material aov\", this controls whether the material aov is evaluated on secondary (indirect) rays in addition to primary rays. Enabling this allows material aovs to appear behind refractive or reflective surfaces. Defaults to false for backward compatibility." + disablewhen "{ xn__parametersmoonraymaterial_aov_secondary_rays_control_vqch == block } { xn__parametersmoonraymaterial_aov_secondary_rays_control_vqch == none }" + parmtag { "usdvaluetype" "bool" } + } parm { name "xn__parametersmoonraylpe_control_smbh" label "parameters:moonray:lpe" diff --git a/houdini/soho/parameters/HdMoonrayRendererPlugin_Geometry.ds b/houdini/soho/parameters/HdMoonrayRendererPlugin_Geometry.ds index dbb1c41..89dc5cc 100644 --- a/houdini/soho/parameters/HdMoonrayRendererPlugin_Geometry.ds +++ b/houdini/soho/parameters/HdMoonrayRendererPlugin_Geometry.ds @@ -515,4 +515,1580 @@ } } + group { + name "folder2" + label "Box" + + parm { + name "xn__primvarsmoonraysize_control_3kbh" + label "primvars:moonray:size" + type string + default { "none" } + menujoin { + "set" "![BUTTONS_set_or_create]Set or Create" + "setexisting" "![BUTTONS_set_if_exists]Set if Exists" + "add" "![BUTTONS_set_add]Add if Exists" + "multiply" "![BUTTONS_set_multiply]Multiply if Exists" + "block" "![BUTTONS_set_block]Block" + "none" "![BUTTONS_set_nothing]Do Nothing" + } + parmtag { "sidefx::look" "icon" } + } + parm { + name "xn__primvarsmoonraysize_26ah" + label "Size" + type vector + size 3 + default { "1" "1" "1" } + help "The size of the box" + disablewhen "{ xn__primvarsmoonraysize_control_3kbh == block } { xn__primvarsmoonraysize_control_3kbh == none }" + range { 0 10 } + parmtag { "usdvaluetype" "vector3f" } + } + } + + group { + name "folder3" + label "RdlCurve" + + parm { + name "xn__primvarsmoonraycurves_vertex_count_control_j9bh" + label "primvars:moonray:curves_vertex_count" + type string + default { "none" } + menujoin { + "set" "![BUTTONS_set_or_create]Set or Create" + "setexisting" "![BUTTONS_set_if_exists]Set if Exists" + "add" "![BUTTONS_set_add]Add if Exists" + "multiply" "![BUTTONS_set_multiply]Multiply if Exists" + "block" "![BUTTONS_set_block]Block" + "none" "![BUTTONS_set_nothing]Do Nothing" + } + parmtag { "sidefx::look" "icon" } + } + multiparm { + name "curves_vertex_count" + label "Curves Vertex Count" + default 0 + disablewhen "{ xn__primvarsmoonraycurves_vertex_count_control_j9bh == block } { xn__primvarsmoonraycurves_vertex_count_control_j9bh == none }" + parmtag { "usdvaluetype" "int[]" } + + parm { + name "xn__primvarsmoonraycurves_vertex_count_iwbh#" + label "Curves Vertex Count" + type integer + default { "0" } + help "List of vertices per curve" + range { 0 10 } + parmtag { "moonray::is_parm" "1" } + } + } + + parm { + name "xn__primvarsmoonrayradius_list_control_iwbh" + label "primvars:moonray:radius_list" + type string + default { "none" } + menujoin { + "set" "![BUTTONS_set_or_create]Set or Create" + "setexisting" "![BUTTONS_set_if_exists]Set if Exists" + "add" "![BUTTONS_set_add]Add if Exists" + "multiply" "![BUTTONS_set_multiply]Multiply if Exists" + "block" "![BUTTONS_set_block]Block" + "none" "![BUTTONS_set_nothing]Do Nothing" + } + parmtag { "sidefx::look" "icon" } + } + multiparm { + name "radius_list" + label "Radius List" + default 0 + disablewhen "{ xn__primvarsmoonrayradius_list_control_iwbh == block } { xn__primvarsmoonrayradius_list_control_iwbh == none }" + parmtag { "usdvaluetype" "float[]" } + + parm { + name "xn__primvarsmoonrayradius_list_hjbh#" + label "Radius List" + type float + default { "0" } + help "List of radius values. The rate will be determined based on the number of values. A single value will be interpreted as constant. If the number of values matches the number of curves, the rate will be interpreted as uniform. If the number of values matches the number of vertices, the rate will be interpreted as vertex." + range { 0 10 } + parmtag { "moonray::is_parm" "1" } + } + } + + parm { + name "xn__primvarsmoonrayuse_screen_space_radius_control_1gch" + label "primvars:moonray:use_screen_space_radius" + type string + default { "none" } + menujoin { + "set" "![BUTTONS_set_or_create]Set or Create" + "setexisting" "![BUTTONS_set_if_exists]Set if Exists" + "block" "![BUTTONS_set_block]Block" + "none" "![BUTTONS_set_nothing]Do Nothing" + } + parmtag { "sidefx::look" "icon" } + } + parm { + name "xn__primvarsmoonrayuse_screen_space_radius_02bh" + label "Use Screen Space Radius" + type toggle + default { "0" } + help "Radius is applied in screen space" + disablewhen "{ xn__primvarsmoonrayuse_screen_space_radius_control_1gch == block } { xn__primvarsmoonrayuse_screen_space_radius_control_1gch == none }" + parmtag { "usdvaluetype" "bool" } + } + parm { + name "xn__primvarsmoonraypart_list_control_8sbh" + label "primvars:moonray:part_list" + type string + default { "none" } + menujoin { + "set" "![BUTTONS_set_or_create]Set or Create" + "setexisting" "![BUTTONS_set_if_exists]Set if Exists" + "block" "![BUTTONS_set_block]Block" + "none" "![BUTTONS_set_nothing]Do Nothing" + } + parmtag { "sidefx::look" "icon" } + } + multiparm { + name "part_list" + label "Part List" + default 0 + disablewhen "{ xn__primvarsmoonraypart_list_control_8sbh == block } { xn__primvarsmoonraypart_list_control_8sbh == none }" + parmtag { "usdvaluetype" "string[]" } + + parm { + name "xn__primvarsmoonraypart_list_7fbh#" + label "Part List" + type string + default { "" } + help "List of part names, used in conjunction with 'part_indices' to assign per-part materials" + parmtag { "moonray::is_parm" "1" } + } + } + + parm { + name "xn__primvarsmoonraypart_indices_control_4xbh" + label "primvars:moonray:part_indices" + type string + default { "none" } + menujoin { + "set" "![BUTTONS_set_or_create]Set or Create" + "setexisting" "![BUTTONS_set_if_exists]Set if Exists" + "add" "![BUTTONS_set_add]Add if Exists" + "multiply" "![BUTTONS_set_multiply]Multiply if Exists" + "block" "![BUTTONS_set_block]Block" + "none" "![BUTTONS_set_nothing]Do Nothing" + } + parmtag { "sidefx::look" "icon" } + } + multiparm { + name "part_indices" + label "Part Indices" + default 0 + disablewhen "{ xn__primvarsmoonraypart_indices_control_4xbh == block } { xn__primvarsmoonraypart_indices_control_4xbh == none }" + parmtag { "usdvaluetype" "int[]" } + + parm { + name "xn__primvarsmoonraypart_indices_3kbh#" + label "Part Indices" + type integer + default { "0" } + help "List of part indices. No index should have a value greater than the size of 'curves_vertex_count'" + range { 0 10 } + parmtag { "moonray::is_parm" "1" } + } + } + + parm { + name "xn__primvarsmoonrayvelocity_scale_control_e1bh" + label "primvars:moonray:velocity_scale" + type string + default { "none" } + menujoin { + "set" "![BUTTONS_set_or_create]Set or Create" + "setexisting" "![BUTTONS_set_if_exists]Set if Exists" + "add" "![BUTTONS_set_add]Add if Exists" + "multiply" "![BUTTONS_set_multiply]Multiply if Exists" + "block" "![BUTTONS_set_block]Block" + "none" "![BUTTONS_set_nothing]Do Nothing" + } + parmtag { "sidefx::look" "icon" } + } + parm { + name "xn__primvarsmoonrayvelocity_scale_dobh" + label "Velocity Scale" + type float + default { "1" } + help "Adjusts magnitude of velocity-based motion blur" + disablewhen "{ xn__primvarsmoonrayvelocity_scale_control_e1bh == block } { xn__primvarsmoonrayvelocity_scale_control_e1bh == none }" + range { 0 10 } + parmtag { "usdvaluetype" "float" } + } + parm { + name "xn__primvarsmoonraycurve_type_control_vubh" + label "primvars:moonray:curve_type" + type string + default { "none" } + menujoin { + "set" "![BUTTONS_set_or_create]Set or Create" + "setexisting" "![BUTTONS_set_if_exists]Set if Exists" + "add" "![BUTTONS_set_add]Add if Exists" + "multiply" "![BUTTONS_set_multiply]Multiply if Exists" + "block" "![BUTTONS_set_block]Block" + "none" "![BUTTONS_set_nothing]Do Nothing" + } + parmtag { "sidefx::look" "icon" } + } + parm { + name "xn__primvarsmoonraycurve_type_uhbh" + label "Curve Type" + type string + default { "bezier" } + help "Curve interpolation type is linear, bezier, or bspline" + disablewhen "{ xn__primvarsmoonraycurve_type_control_vubh == block } { xn__primvarsmoonraycurve_type_control_vubh == none }" + menu { + "linear" "Linear" + "bezier" "Bezier" + "bspline" "Bspline" + } + parmtag { "usdvaluetype" "token" } + } + parm { + name "xn__primvarsmoonrayprimitive_attributes_control_5bch" + label "primvars:moonray:primitive_attributes" + type string + default { "none" } + menujoin { + "set" "![BUTTONS_set_or_create]Set or Create" + "setexisting" "![BUTTONS_set_if_exists]Set if Exists" + "block" "![BUTTONS_set_block]Block" + "none" "![BUTTONS_set_nothing]Do Nothing" + } + parmtag { "sidefx::look" "icon" } + } + multiparm { + name "primitive_attributes" + label "Primitive Attributes" + default 0 + disablewhen "{ xn__primvarsmoonrayprimitive_attributes_control_5bch == block } { xn__primvarsmoonrayprimitive_attributes_control_5bch == none }" + parmtag { "usdvaluetype" "" } + + parm { + name "xn__primvarsmoonrayprimitive_attributes_4xbh#" + label "Primitive Attributes" + type oppath + default { "" } + help "Vector of UserData. Each key/value pair will be added as a primitive attribute of the curves." + parmtag { "moonray::is_parm" "1" } + parmtag { "oprelative" "." } + } + } + + parm { + name "xn__primvarsmoonraylocal_motion_blur_radius_list_control_tqch" + label "primvars:moonray:local_motion_blur_radius_list" + type string + default { "none" } + menujoin { + "set" "![BUTTONS_set_or_create]Set or Create" + "setexisting" "![BUTTONS_set_if_exists]Set if Exists" + "add" "![BUTTONS_set_add]Add if Exists" + "multiply" "![BUTTONS_set_multiply]Multiply if Exists" + "block" "![BUTTONS_set_block]Block" + "none" "![BUTTONS_set_nothing]Do Nothing" + } + parmtag { "sidefx::look" "icon" } + } + multiparm { + name "local_motion_blur_radius_list" + label "Local Motion Blur Radius List" + default 0 + disablewhen "{ xn__primvarsmoonraylocal_motion_blur_radius_list_control_tqch == block } { xn__primvarsmoonraylocal_motion_blur_radius_list_control_tqch == none }" + parmtag { "usdvaluetype" "float[]" } + + parm { + name "xn__primvarsmoonraylocal_motion_blur_radius_list_sdch#" + label "Local Motion Blur Radius List" + type float + default { "0" } + help "Per-point outer radius for each local motion blur region. If empty, defaults to 1.0. Must match the length of local_motion_blur_position_list." + disablewhen "{ use_local_motion_blur == 0 }" + range { 0 10 } + parmtag { "moonray::is_parm" "1" } + } + } + + parm { + name "xn__primvarsmoonraylocal_motion_blur_inner_radius_list_control_l0ch" + label "primvars:moonray:local_motion_blur_inner_radius_list" + type string + default { "none" } + menujoin { + "set" "![BUTTONS_set_or_create]Set or Create" + "setexisting" "![BUTTONS_set_if_exists]Set if Exists" + "add" "![BUTTONS_set_add]Add if Exists" + "multiply" "![BUTTONS_set_multiply]Multiply if Exists" + "block" "![BUTTONS_set_block]Block" + "none" "![BUTTONS_set_nothing]Do Nothing" + } + parmtag { "sidefx::look" "icon" } + } + multiparm { + name "local_motion_blur_inner_radius_list" + label "Local Motion Blur Inner Radius List" + default 0 + disablewhen "{ xn__primvarsmoonraylocal_motion_blur_inner_radius_list_control_l0ch == block } { xn__primvarsmoonraylocal_motion_blur_inner_radius_list_control_l0ch == none }" + parmtag { "usdvaluetype" "float[]" } + + parm { + name "xn__primvarsmoonraylocal_motion_blur_inner_radius_list_knch#" + label "Local Motion Blur Inner Radius List" + type float + default { "0" } + help "Per-point inner radius for each local motion blur region (full-strength core). If empty, defaults to 1.0. Must match the length of local_motion_blur_position_list." + disablewhen "{ use_local_motion_blur == 0 }" + range { 0 10 } + parmtag { "moonray::is_parm" "1" } + } + } + + parm { + name "xn__primvarsmoonraylocal_motion_blur_multiplier_list_control_cxch" + label "primvars:moonray:local_motion_blur_multiplier_list" + type string + default { "none" } + menujoin { + "set" "![BUTTONS_set_or_create]Set or Create" + "setexisting" "![BUTTONS_set_if_exists]Set if Exists" + "add" "![BUTTONS_set_add]Add if Exists" + "multiply" "![BUTTONS_set_multiply]Multiply if Exists" + "block" "![BUTTONS_set_block]Block" + "none" "![BUTTONS_set_nothing]Do Nothing" + } + parmtag { "sidefx::look" "icon" } + } + multiparm { + name "local_motion_blur_multiplier_list" + label "Local Motion Blur Multiplier List" + default 0 + disablewhen "{ xn__primvarsmoonraylocal_motion_blur_multiplier_list_control_cxch == block } { xn__primvarsmoonraylocal_motion_blur_multiplier_list_control_cxch == none }" + parmtag { "usdvaluetype" "float[]" } + + parm { + name "xn__primvarsmoonraylocal_motion_blur_multiplier_list_bkch#" + label "Local Motion Blur Multiplier List" + type float + default { "0" } + help "Per-point motion blur strength multiplier for each local motion blur region. If empty, defaults to 1.0. Must match the length of local_motion_blur_position_list." + disablewhen "{ use_local_motion_blur == 0 }" + range { 0 10 } + parmtag { "moonray::is_parm" "1" } + } + } + + parm { + name "xn__primvarsmoonraylocal_motion_blur_strength_multiplier_control_u3ch" + label "primvars:moonray:local_motion_blur_strength_multiplier" + type string + default { "none" } + menujoin { + "set" "![BUTTONS_set_or_create]Set or Create" + "setexisting" "![BUTTONS_set_if_exists]Set if Exists" + "add" "![BUTTONS_set_add]Add if Exists" + "multiply" "![BUTTONS_set_multiply]Multiply if Exists" + "block" "![BUTTONS_set_block]Block" + "none" "![BUTTONS_set_nothing]Do Nothing" + } + parmtag { "sidefx::look" "icon" } + } + parm { + name "xn__primvarsmoonraylocal_motion_blur_strength_multiplier_tqch" + label "Local Motion Blur Strength Multiplier" + type float + default { "1" } + help "Global strength multiplier for local motion blur application" + disablewhen "{ use_local_motion_blur == 0 } { xn__primvarsmoonraylocal_motion_blur_strength_multiplier_control_u3ch == block } { xn__primvarsmoonraylocal_motion_blur_strength_multiplier_control_u3ch == none }" + range { 0 10 } + parmtag { "usdvaluetype" "float" } + } + parm { + name "xn__primvarsmoonraylocal_motion_blur_radius_multiplier_control_l0ch" + label "primvars:moonray:local_motion_blur_radius_multiplier" + type string + default { "none" } + menujoin { + "set" "![BUTTONS_set_or_create]Set or Create" + "setexisting" "![BUTTONS_set_if_exists]Set if Exists" + "add" "![BUTTONS_set_add]Add if Exists" + "multiply" "![BUTTONS_set_multiply]Multiply if Exists" + "block" "![BUTTONS_set_block]Block" + "none" "![BUTTONS_set_nothing]Do Nothing" + } + parmtag { "sidefx::look" "icon" } + } + parm { + name "xn__primvarsmoonraylocal_motion_blur_radius_multiplier_knch" + label "Local Motion Blur Radius Multiplier" + type float + default { "1" } + help "Global radius multiplier applied to per-region radius values, whether supplied via the \"radius\"/\"inner_radius\" point attributes or the \"local_motion_blur_radius_list\"/\"local_motion_blur_inner_radius_list\" explicit list attributes" + disablewhen "{ use_local_motion_blur == 0 } { xn__primvarsmoonraylocal_motion_blur_radius_multiplier_control_l0ch == block } { xn__primvarsmoonraylocal_motion_blur_radius_multiplier_control_l0ch == none }" + range { 0 10 } + parmtag { "usdvaluetype" "float" } + } + parm { + name "xn__primvarsmoonraytessellation_rate_control_95bh" + label "primvars:moonray:tessellation_rate" + type string + default { "none" } + menujoin { + "set" "![BUTTONS_set_or_create]Set or Create" + "setexisting" "![BUTTONS_set_if_exists]Set if Exists" + "add" "![BUTTONS_set_add]Add if Exists" + "multiply" "![BUTTONS_set_multiply]Multiply if Exists" + "block" "![BUTTONS_set_block]Block" + "none" "![BUTTONS_set_nothing]Do Nothing" + } + parmtag { "sidefx::look" "icon" } + } + parm { + name "xn__primvarsmoonraytessellation_rate_8sbh" + label "Tessellation Rate" + type integer + default { "4" } + help "Number of segments to split curve spans into" + disablewhen "{ xn__primvarsmoonraytessellation_rate_control_95bh == block } { xn__primvarsmoonraytessellation_rate_control_95bh == none }" + range { 0 10 } + parmtag { "usdvaluetype" "int" } + } + parm { + name "xn__primvarsmoonraycurves_subtype_control_e1bh" + label "primvars:moonray:curves_subtype" + type string + default { "none" } + menujoin { + "set" "![BUTTONS_set_or_create]Set or Create" + "setexisting" "![BUTTONS_set_if_exists]Set if Exists" + "add" "![BUTTONS_set_add]Add if Exists" + "multiply" "![BUTTONS_set_multiply]Multiply if Exists" + "block" "![BUTTONS_set_block]Block" + "none" "![BUTTONS_set_nothing]Do Nothing" + } + parmtag { "sidefx::look" "icon" } + } + parm { + name "xn__primvarsmoonraycurves_subtype_dobh" + label "Curves Subtype" + type string + default { "ray_facing" } + help "Selects the style the curves are rendered" + disablewhen "{ xn__primvarsmoonraycurves_subtype_control_e1bh == block } { xn__primvarsmoonraycurves_subtype_control_e1bh == none }" + menu { + "ray_facing" "Ray_Facing" + "round" "Round" + "normal_oriented" "Normal_Oriented" + } + parmtag { "usdvaluetype" "token" } + } + parm { + name "xn__primvarsmoonrayuse_rotation_motion_blur_control_oich" + label "primvars:moonray:use_rotation_motion_blur" + type string + default { "none" } + menujoin { + "set" "![BUTTONS_set_or_create]Set or Create" + "setexisting" "![BUTTONS_set_if_exists]Set if Exists" + "block" "![BUTTONS_set_block]Block" + "none" "![BUTTONS_set_nothing]Do Nothing" + } + parmtag { "sidefx::look" "icon" } + } + parm { + name "xn__primvarsmoonrayuse_rotation_motion_blur_n4bh" + label "Use Rotation Motion Blur" + type toggle + default { "0" } + help "If \"xform\" is time varying and motion blur is enabled, enabling this feature can produce a curved rotation trail. Enabling this feature will disable adaptive tessellation for this mesh" + disablewhen "{ xn__primvarsmoonrayuse_rotation_motion_blur_control_oich == block } { xn__primvarsmoonrayuse_rotation_motion_blur_control_oich == none }" + parmtag { "usdvaluetype" "bool" } + } + parm { + name "xn__primvarsmoonraymotion_blur_type_control_n4bh" + label "primvars:moonray:motion_blur_type" + type string + default { "none" } + menujoin { + "set" "![BUTTONS_set_or_create]Set or Create" + "setexisting" "![BUTTONS_set_if_exists]Set if Exists" + "add" "![BUTTONS_set_add]Add if Exists" + "multiply" "![BUTTONS_set_multiply]Multiply if Exists" + "block" "![BUTTONS_set_block]Block" + "none" "![BUTTONS_set_nothing]Do Nothing" + } + parmtag { "sidefx::look" "icon" } + } + parm { + name "xn__primvarsmoonraymotion_blur_type_mrbh" + label "Motion Blur Type" + type string + default { "best" } + help "Motion blur type for PolygonMesh/Points/Curves.\n\"static\" will treat the mesh as static.\n\"velocity\" will blur using the supplied vertex positions and velocities.\n\"frame delta\" will interpolate between the two supplied vertex positions.\n\"acceleration\" will blur using the supplied vertex positions, velocities and accelerations.\n\"hermite\" will use supplied pair of positions and pair of velocities to interpolate along a cubic Hermite curve.\n\"best\" will use choose the method which provides the highest quality given the available data.\n" + disablewhen "{ xn__primvarsmoonraymotion_blur_type_control_n4bh == block } { xn__primvarsmoonraymotion_blur_type_control_n4bh == none }" + menu { + "best" "Best" + "static" "Static" + "velocity" "Velocity" + "frame delta" "Frame Delta" + "acceleration" "Acceleration" + "hermite" "Hermite" + } + parmtag { "usdvaluetype" "token" } + } + parm { + name "xn__primvarsmoonraycurved_motion_blur_sample_count_control_2tch" + label "primvars:moonray:curved_motion_blur_sample_count" + type string + default { "none" } + menujoin { + "set" "![BUTTONS_set_or_create]Set or Create" + "setexisting" "![BUTTONS_set_if_exists]Set if Exists" + "add" "![BUTTONS_set_add]Add if Exists" + "multiply" "![BUTTONS_set_multiply]Multiply if Exists" + "block" "![BUTTONS_set_block]Block" + "none" "![BUTTONS_set_nothing]Do Nothing" + } + parmtag { "sidefx::look" "icon" } + } + parm { + name "xn__primvarsmoonraycurved_motion_blur_sample_count_1gch" + label "Curved Motion Blur Sample Count" + type integer + default { "10" } + help "Number of time samples generated along each curve when using curved motion blur" + disablewhen "{ xn__primvarsmoonraycurved_motion_blur_sample_count_control_2tch == block } { xn__primvarsmoonraycurved_motion_blur_sample_count_control_2tch == none }" + range { 0 10 } + parmtag { "usdvaluetype" "int" } + } + parm { + name "xn__primvarsmoonrayprimitive_attribute_frame_control_bkch" + label "primvars:moonray:primitive_attribute_frame" + type string + default { "none" } + menujoin { + "set" "![BUTTONS_set_or_create]Set or Create" + "setexisting" "![BUTTONS_set_if_exists]Set if Exists" + "add" "![BUTTONS_set_add]Add if Exists" + "multiply" "![BUTTONS_set_multiply]Multiply if Exists" + "block" "![BUTTONS_set_block]Block" + "none" "![BUTTONS_set_nothing]Do Nothing" + } + parmtag { "sidefx::look" "icon" } + } + parm { + name "xn__primvarsmoonrayprimitive_attribute_frame_95bh" + label "Primitive Attribute Frame" + type string + default { "both motion steps" } + help "Which frame(s) do we take the primitive attributes from?\n O : first motion step\n 1 : second motion step\n 2 : both motion steps" + disablewhen "{ xn__primvarsmoonrayprimitive_attribute_frame_control_bkch == block } { xn__primvarsmoonrayprimitive_attribute_frame_control_bkch == none }" + menu { + "first motion step" "First Motion Step" + "second motion step" "Second Motion Step" + "both motion steps" "Both Motion Steps" + } + parmtag { "usdvaluetype" "token" } + } + parm { + name "xn__primvarsmoonrayuse_explicit_shading_attributes_control_2tch" + label "primvars:moonray:use_explicit_shading_attributes" + type string + default { "none" } + menujoin { + "set" "![BUTTONS_set_or_create]Set or Create" + "setexisting" "![BUTTONS_set_if_exists]Set if Exists" + "block" "![BUTTONS_set_block]Block" + "none" "![BUTTONS_set_nothing]Do Nothing" + } + parmtag { "sidefx::look" "icon" } + } + parm { + name "xn__primvarsmoonrayuse_explicit_shading_attributes_1gch" + label "Use Explicit Shading Attributes" + type toggle + default { "0" } + help "Enable the use of explicit shading attributes (N, dPds, dPdt) if they are present" + disablewhen "{ xn__primvarsmoonrayuse_explicit_shading_attributes_control_2tch == block } { xn__primvarsmoonrayuse_explicit_shading_attributes_control_2tch == none }" + parmtag { "usdvaluetype" "bool" } + } + } + + group { + name "folder4" + label "RdlInstancer" + + parm { + name "xn__primvarsmoonraymethod_control_dobh" + label "primvars:moonray:method" + type string + default { "none" } + menujoin { + "set" "![BUTTONS_set_or_create]Set or Create" + "setexisting" "![BUTTONS_set_if_exists]Set if Exists" + "add" "![BUTTONS_set_add]Add if Exists" + "multiply" "![BUTTONS_set_multiply]Multiply if Exists" + "block" "![BUTTONS_set_block]Block" + "none" "![BUTTONS_set_nothing]Do Nothing" + } + parmtag { "sidefx::look" "icon" } + } + parm { + name "xn__primvarsmoonraymethod_cbbh" + label "Method" + type string + default { "xform attributes" } + help "Specifies the source of the transform data for instancing. If set to \"xform attributes\", data is used from the \"positions\", \"orientations\", \"scales\" attributes.If set to \"xform list\", data is used from the \"xform list\"attribute." + disablewhen "{ xn__primvarsmoonraymethod_control_dobh == block } { xn__primvarsmoonraymethod_control_dobh == none }" + menu { + "xform attributes" "Xform Attributes" + "xform list" "Xform List" + } + parmtag { "usdvaluetype" "token" } + } + parm { + name "xn__primvarsmoonrayinstance_level_control_e1bh" + label "primvars:moonray:instance_level" + type string + default { "none" } + menujoin { + "set" "![BUTTONS_set_or_create]Set or Create" + "setexisting" "![BUTTONS_set_if_exists]Set if Exists" + "add" "![BUTTONS_set_add]Add if Exists" + "multiply" "![BUTTONS_set_multiply]Multiply if Exists" + "block" "![BUTTONS_set_block]Block" + "none" "![BUTTONS_set_nothing]Do Nothing" + } + parmtag { "sidefx::look" "icon" } + } + parm { + name "xn__primvarsmoonrayinstance_level_dobh" + label "Instance Level" + type string + default { "instance level 0" } + help "Sets the level/depth of this instance. This adds a Mat4f primitive attribute to the geometry which can be referenced during shading to use the local space of each instance. The name of the primitive attribute corresponds the the instance level that is set (i.e. \"instance_level_0\", \"instance_level_1\", etc)" + disablewhen "{ xn__primvarsmoonrayinstance_level_control_e1bh == block } { xn__primvarsmoonrayinstance_level_control_e1bh == none }" + menu { + "instance level 0" "Instance Level 0" + "instance level 1" "Instance Level 1" + "instance level 2" "Instance Level 2" + "instance level 3" "Instance Level 3" + "instance level 4" "Instance Level 4" + } + parmtag { "usdvaluetype" "token" } + } + parm { + name "xn__primvarsmoonrayref_indices_control_iwbh" + label "primvars:moonray:ref_indices" + type string + default { "none" } + menujoin { + "set" "![BUTTONS_set_or_create]Set or Create" + "setexisting" "![BUTTONS_set_if_exists]Set if Exists" + "add" "![BUTTONS_set_add]Add if Exists" + "multiply" "![BUTTONS_set_multiply]Multiply if Exists" + "block" "![BUTTONS_set_block]Block" + "none" "![BUTTONS_set_nothing]Do Nothing" + } + parmtag { "sidefx::look" "icon" } + } + multiparm { + name "ref_indices" + label "Ref Indices" + default 0 + disablewhen "{ xn__primvarsmoonrayref_indices_control_iwbh == block } { xn__primvarsmoonrayref_indices_control_iwbh == none }" + parmtag { "usdvaluetype" "int[]" } + + parm { + name "xn__primvarsmoonrayref_indices_hjbh#" + label "Ref Indices" + type integer + default { "0" } + help "A list of index values to specify which reference geometry to instance at each position. The list corresponds to entries in the \"references\" attribute. The length of the list should be either 0 or consistent with \"positions\"|\"xform_list\". The index entry falls back to 0 when this attribute is empty or the value of entry is out of index range" + range { 0 10 } + parmtag { "moonray::is_parm" "1" } + } + } + + parm { + name "xn__primvarsmoonraydisable_indices_control_02bh" + label "primvars:moonray:disable_indices" + type string + default { "none" } + menujoin { + "set" "![BUTTONS_set_or_create]Set or Create" + "setexisting" "![BUTTONS_set_if_exists]Set if Exists" + "add" "![BUTTONS_set_add]Add if Exists" + "multiply" "![BUTTONS_set_multiply]Multiply if Exists" + "block" "![BUTTONS_set_block]Block" + "none" "![BUTTONS_set_nothing]Do Nothing" + } + parmtag { "sidefx::look" "icon" } + } + multiparm { + name "disable_indices" + label "Disable Indices" + default 0 + disablewhen "{ xn__primvarsmoonraydisable_indices_control_02bh == block } { xn__primvarsmoonraydisable_indices_control_02bh == none }" + parmtag { "usdvaluetype" "int[]" } + + parm { + name "xn__primvarsmoonraydisable_indices_zpbh#" + label "Disable Indices" + type integer + default { "0" } + help "A list of index values to hide / disable. For example, with 4 instances you can supply a list of 0, 2 to disable those instances. If an index in this list is out of range, it is ignored." + range { 0 10 } + parmtag { "moonray::is_parm" "1" } + } + } + + parm { + name "xn__primvarsmoonrayevaluation_frame_control_n4bh" + label "primvars:moonray:evaluation_frame" + type string + default { "none" } + menujoin { + "set" "![BUTTONS_set_or_create]Set or Create" + "setexisting" "![BUTTONS_set_if_exists]Set if Exists" + "add" "![BUTTONS_set_add]Add if Exists" + "multiply" "![BUTTONS_set_multiply]Multiply if Exists" + "block" "![BUTTONS_set_block]Block" + "none" "![BUTTONS_set_nothing]Do Nothing" + } + parmtag { "sidefx::look" "icon" } + } + parm { + name "xn__primvarsmoonrayevaluation_frame_mrbh" + label "Evaluation Frame" + type float + default { "0" } + help "Evaluate geometry at specified frame (relative) instead of SceneVariables frame." + disablewhen "{ xn__primvarsmoonrayevaluation_frame_control_n4bh == block } { xn__primvarsmoonrayevaluation_frame_control_n4bh == none }" + range { 0 10 } + parmtag { "usdvaluetype" "float" } + } + parm { + name "xn__primvarsmoonrayuse_reference_xforms_control_5bch" + label "primvars:moonray:use_reference_xforms" + type string + default { "none" } + menujoin { + "set" "![BUTTONS_set_or_create]Set or Create" + "setexisting" "![BUTTONS_set_if_exists]Set if Exists" + "block" "![BUTTONS_set_block]Block" + "none" "![BUTTONS_set_nothing]Do Nothing" + } + parmtag { "sidefx::look" "icon" } + } + parm { + name "xn__primvarsmoonrayuse_reference_xforms_4xbh" + label "Use Reference Xforms" + type toggle + default { "0" } + help "Transform the reference (prototype) geometry by it's node_xform parameter before applying the instance transform" + disablewhen "{ xn__primvarsmoonrayuse_reference_xforms_control_5bch == block } { xn__primvarsmoonrayuse_reference_xforms_control_5bch == none }" + parmtag { "usdvaluetype" "bool" } + } + parm { + name "xn__primvarsmoonrayuse_reference_attributes_control_oich" + label "primvars:moonray:use_reference_attributes" + type string + default { "none" } + menujoin { + "set" "![BUTTONS_set_or_create]Set or Create" + "setexisting" "![BUTTONS_set_if_exists]Set if Exists" + "block" "![BUTTONS_set_block]Block" + "none" "![BUTTONS_set_nothing]Do Nothing" + } + parmtag { "sidefx::look" "icon" } + } + parm { + name "xn__primvarsmoonrayuse_reference_attributes_n4bh" + label "Use Reference Attributes" + type toggle + default { "1" } + help "Use the geometry attributes of the reference (prototype) instead of the ones on the InstanceGeometry. Currently only works for shadow_ray_epsilon" + disablewhen "{ xn__primvarsmoonrayuse_reference_attributes_control_oich == block } { xn__primvarsmoonrayuse_reference_attributes_control_oich == none }" + parmtag { "usdvaluetype" "bool" } + } + } + + group { + name "folder5" + label "RdlMesh" + + parm { + name "xn__primvarsmoonrayface_vertex_count_control_95bh" + label "primvars:moonray:face_vertex_count" + type string + default { "none" } + menujoin { + "set" "![BUTTONS_set_or_create]Set or Create" + "setexisting" "![BUTTONS_set_if_exists]Set if Exists" + "add" "![BUTTONS_set_add]Add if Exists" + "multiply" "![BUTTONS_set_multiply]Multiply if Exists" + "block" "![BUTTONS_set_block]Block" + "none" "![BUTTONS_set_nothing]Do Nothing" + } + parmtag { "sidefx::look" "icon" } + } + multiparm { + name "face_vertex_count" + label "Face Vertex Count" + default 0 + disablewhen "{ xn__primvarsmoonrayface_vertex_count_control_95bh == block } { xn__primvarsmoonrayface_vertex_count_control_95bh == none }" + parmtag { "usdvaluetype" "int[]" } + + parm { + name "xn__primvarsmoonrayface_vertex_count_8sbh#" + label "Face Vertex Count" + type integer + default { "0" } + help "List of vertices per face, used in conjunction with vertices_by_index to construct the mesh" + range { 0 10 } + parmtag { "moonray::is_parm" "1" } + } + } + + parm { + name "xn__primvarsmoonrayvertices_by_index_control_95bh" + label "primvars:moonray:vertices_by_index" + type string + default { "none" } + menujoin { + "set" "![BUTTONS_set_or_create]Set or Create" + "setexisting" "![BUTTONS_set_if_exists]Set if Exists" + "add" "![BUTTONS_set_add]Add if Exists" + "multiply" "![BUTTONS_set_multiply]Multiply if Exists" + "block" "![BUTTONS_set_block]Block" + "none" "![BUTTONS_set_nothing]Do Nothing" + } + parmtag { "sidefx::look" "icon" } + } + multiparm { + name "vertices_by_index" + label "Vertices By Index" + default 0 + disablewhen "{ xn__primvarsmoonrayvertices_by_index_control_95bh == block } { xn__primvarsmoonrayvertices_by_index_control_95bh == none }" + parmtag { "usdvaluetype" "int[]" } + + parm { + name "xn__primvarsmoonrayvertices_by_index_8sbh#" + label "Vertices By Index" + type integer + default { "0" } + help "List of vertex indices used to construct the mesh using the vertex list" + range { 0 10 } + parmtag { "moonray::is_parm" "1" } + } + } + + parm { + name "xn__primvarsmoonrayorientation_control_iwbh" + label "primvars:moonray:orientation" + type string + default { "none" } + menujoin { + "set" "![BUTTONS_set_or_create]Set or Create" + "setexisting" "![BUTTONS_set_if_exists]Set if Exists" + "add" "![BUTTONS_set_add]Add if Exists" + "multiply" "![BUTTONS_set_multiply]Multiply if Exists" + "block" "![BUTTONS_set_block]Block" + "none" "![BUTTONS_set_nothing]Do Nothing" + } + parmtag { "sidefx::look" "icon" } + } + parm { + name "xn__primvarsmoonrayorientation_hjbh" + label "Orientation" + type string + default { "right-handed" } + help "When set to \"left-handed\", normals are generated using the left-handed rule. This reverses the direction of generated normals, and which side of surfaces is considered the front, without affecting supplied normals." + disablewhen "{ xn__primvarsmoonrayorientation_control_iwbh == block } { xn__primvarsmoonrayorientation_control_iwbh == none }" + menu { + "right-handed" "Right-Handed" + "left-handed" "Left-Handed" + } + parmtag { "usdvaluetype" "token" } + } + parm { + name "xn__primvarsmoonraypart_face_count_list_control_5bch" + label "primvars:moonray:part_face_count_list" + type string + default { "none" } + menujoin { + "set" "![BUTTONS_set_or_create]Set or Create" + "setexisting" "![BUTTONS_set_if_exists]Set if Exists" + "add" "![BUTTONS_set_add]Add if Exists" + "multiply" "![BUTTONS_set_multiply]Multiply if Exists" + "block" "![BUTTONS_set_block]Block" + "none" "![BUTTONS_set_nothing]Do Nothing" + } + parmtag { "sidefx::look" "icon" } + } + multiparm { + name "part_face_count_list" + label "Part Face Count List" + default 0 + disablewhen "{ xn__primvarsmoonraypart_face_count_list_control_5bch == block } { xn__primvarsmoonraypart_face_count_list_control_5bch == none }" + parmtag { "usdvaluetype" "int[]" } + + parm { + name "xn__primvarsmoonraypart_face_count_list_4xbh#" + label "Part Face Count List" + type integer + default { "0" } + help "List of the number of faces belonging to the part with corresponding index in 'part list'." + range { 0 10 } + parmtag { "moonray::is_parm" "1" } + } + } + + parm { + name "xn__primvarsmoonraypart_face_indices_control_95bh" + label "primvars:moonray:part_face_indices" + type string + default { "none" } + menujoin { + "set" "![BUTTONS_set_or_create]Set or Create" + "setexisting" "![BUTTONS_set_if_exists]Set if Exists" + "add" "![BUTTONS_set_add]Add if Exists" + "multiply" "![BUTTONS_set_multiply]Multiply if Exists" + "block" "![BUTTONS_set_block]Block" + "none" "![BUTTONS_set_nothing]Do Nothing" + } + parmtag { "sidefx::look" "icon" } + } + multiparm { + name "part_face_indices" + label "Part Face Indices" + default 0 + disablewhen "{ xn__primvarsmoonraypart_face_indices_control_95bh == block } { xn__primvarsmoonraypart_face_indices_control_95bh == none }" + parmtag { "usdvaluetype" "int[]" } + + parm { + name "xn__primvarsmoonraypart_face_indices_8sbh#" + label "Part Face Indices" + type integer + default { "0" } + help "List of face indices. No index should have a value greater than the size of 'face_vertex_count'" + range { 0 10 } + parmtag { "moonray::is_parm" "1" } + } + } + + parm { + name "xn__primvarsmoonrayis_subd_control_zpbh" + label "primvars:moonray:is_subd" + type string + default { "none" } + menujoin { + "set" "![BUTTONS_set_or_create]Set or Create" + "setexisting" "![BUTTONS_set_if_exists]Set if Exists" + "block" "![BUTTONS_set_block]Block" + "none" "![BUTTONS_set_nothing]Do Nothing" + } + parmtag { "sidefx::look" "icon" } + } + parm { + name "xn__primvarsmoonrayis_subd_ycbh" + label "Is Subd" + type toggle + default { "1" } + help "If true, a SubdivisionMesh primitive will be created - PolygonMesh otherwise" + disablewhen "{ xn__primvarsmoonrayis_subd_control_zpbh == block } { xn__primvarsmoonrayis_subd_control_zpbh == none }" + parmtag { "usdvaluetype" "bool" } + } + parm { + name "xn__primvarsmoonraysubd_scheme_control_iwbh" + label "primvars:moonray:subd_scheme" + type string + default { "none" } + menujoin { + "set" "![BUTTONS_set_or_create]Set or Create" + "setexisting" "![BUTTONS_set_if_exists]Set if Exists" + "add" "![BUTTONS_set_add]Add if Exists" + "multiply" "![BUTTONS_set_multiply]Multiply if Exists" + "block" "![BUTTONS_set_block]Block" + "none" "![BUTTONS_set_nothing]Do Nothing" + } + parmtag { "sidefx::look" "icon" } + } + parm { + name "xn__primvarsmoonraysubd_scheme_hjbh" + label "Subd Scheme" + type string + default { "catclark" } + help "CatClark or Bilinear" + disablewhen "{ xn__primvarsmoonraysubd_scheme_control_iwbh == block } { xn__primvarsmoonraysubd_scheme_control_iwbh == none }" + menu { + "bilinear" "Bilinear" + "catclark" "Catclark" + } + parmtag { "usdvaluetype" "token" } + } + parm { + name "xn__primvarsmoonraysubd_boundary_control_rzbh" + label "primvars:moonray:subd_boundary" + type string + default { "none" } + menujoin { + "set" "![BUTTONS_set_or_create]Set or Create" + "setexisting" "![BUTTONS_set_if_exists]Set if Exists" + "add" "![BUTTONS_set_add]Add if Exists" + "multiply" "![BUTTONS_set_multiply]Multiply if Exists" + "block" "![BUTTONS_set_block]Block" + "none" "![BUTTONS_set_nothing]Do Nothing" + } + parmtag { "sidefx::look" "icon" } + } + parm { + name "xn__primvarsmoonraysubd_boundary_qmbh" + label "Subd Boundary" + type string + default { "edge and corner" } + help "Boundary interpolation: Corners, Edges or None" + disablewhen "{ xn__primvarsmoonraysubd_boundary_control_rzbh == block } { xn__primvarsmoonraysubd_boundary_control_rzbh == none }" + menu { + "none" "None" + "edge only" "Edge Only" + "edge and corner" "Edge And Corner" + } + parmtag { "usdvaluetype" "token" } + } + parm { + name "xn__primvarsmoonraysubd_fvar_linear_control_n4bh" + label "primvars:moonray:subd_fvar_linear" + type string + default { "none" } + menujoin { + "set" "![BUTTONS_set_or_create]Set or Create" + "setexisting" "![BUTTONS_set_if_exists]Set if Exists" + "add" "![BUTTONS_set_add]Add if Exists" + "multiply" "![BUTTONS_set_multiply]Multiply if Exists" + "block" "![BUTTONS_set_block]Block" + "none" "![BUTTONS_set_nothing]Do Nothing" + } + parmtag { "sidefx::look" "icon" } + } + parm { + name "xn__primvarsmoonraysubd_fvar_linear_mrbh" + label "Subd Fvar Linear" + type string + default { "corners only" } + help "Face-varying linear interpolation: None, Corners Only, Corners Plus 1 or Plus 2 (RenderMan), Boundaries, or All" + disablewhen "{ xn__primvarsmoonraysubd_fvar_linear_control_n4bh == block } { xn__primvarsmoonraysubd_fvar_linear_control_n4bh == none }" + menu { + "none" "None" + "corners only" "Corners Only" + "corners plus1" "Corners Plus1" + "corners plus2" "Corners Plus2" + "boundaries" "Boundaries" + "all" "All" + } + parmtag { "usdvaluetype" "token" } + } + parm { + name "xn__primvarsmoonraysubd_crease_indices_control_j9bh" + label "primvars:moonray:subd_crease_indices" + type string + default { "none" } + menujoin { + "set" "![BUTTONS_set_or_create]Set or Create" + "setexisting" "![BUTTONS_set_if_exists]Set if Exists" + "add" "![BUTTONS_set_add]Add if Exists" + "multiply" "![BUTTONS_set_multiply]Multiply if Exists" + "block" "![BUTTONS_set_block]Block" + "none" "![BUTTONS_set_nothing]Do Nothing" + } + parmtag { "sidefx::look" "icon" } + } + multiparm { + name "subd_crease_indices" + label "Subd Crease Indices" + default 0 + disablewhen "{ xn__primvarsmoonraysubd_crease_indices_control_j9bh == block } { xn__primvarsmoonraysubd_crease_indices_control_j9bh == none }" + parmtag { "usdvaluetype" "int[]" } + + parm { + name "xn__primvarsmoonraysubd_crease_indices_iwbh#" + label "Subd Crease Indices" + type integer + default { "0" } + help "List of vertex index pairs for each crease edge with an assigned sharpness." + range { 0 10 } + parmtag { "moonray::is_parm" "1" } + } + } + + parm { + name "xn__primvarsmoonraysubd_crease_sharpnesses_control_1gch" + label "primvars:moonray:subd_crease_sharpnesses" + type string + default { "none" } + menujoin { + "set" "![BUTTONS_set_or_create]Set or Create" + "setexisting" "![BUTTONS_set_if_exists]Set if Exists" + "add" "![BUTTONS_set_add]Add if Exists" + "multiply" "![BUTTONS_set_multiply]Multiply if Exists" + "block" "![BUTTONS_set_block]Block" + "none" "![BUTTONS_set_nothing]Do Nothing" + } + parmtag { "sidefx::look" "icon" } + } + multiparm { + name "subd_crease_sharpnesses" + label "Subd Crease Sharpnesses" + default 0 + disablewhen "{ xn__primvarsmoonraysubd_crease_sharpnesses_control_1gch == block } { xn__primvarsmoonraysubd_crease_sharpnesses_control_1gch == none }" + parmtag { "usdvaluetype" "float[]" } + + parm { + name "xn__primvarsmoonraysubd_crease_sharpnesses_02bh#" + label "Subd Crease Sharpnesses" + type float + default { "0" } + help "Sharpness value for each crease edge." + range { 0 10 } + parmtag { "moonray::is_parm" "1" } + } + } + + parm { + name "xn__primvarsmoonraysubd_corner_indices_control_j9bh" + label "primvars:moonray:subd_corner_indices" + type string + default { "none" } + menujoin { + "set" "![BUTTONS_set_or_create]Set or Create" + "setexisting" "![BUTTONS_set_if_exists]Set if Exists" + "add" "![BUTTONS_set_add]Add if Exists" + "multiply" "![BUTTONS_set_multiply]Multiply if Exists" + "block" "![BUTTONS_set_block]Block" + "none" "![BUTTONS_set_nothing]Do Nothing" + } + parmtag { "sidefx::look" "icon" } + } + multiparm { + name "subd_corner_indices" + label "Subd Corner Indices" + default 0 + disablewhen "{ xn__primvarsmoonraysubd_corner_indices_control_j9bh == block } { xn__primvarsmoonraysubd_corner_indices_control_j9bh == none }" + parmtag { "usdvaluetype" "int[]" } + + parm { + name "xn__primvarsmoonraysubd_corner_indices_iwbh#" + label "Subd Corner Indices" + type integer + default { "0" } + help "List of indices for each corner vertex with an assigned sharpness." + range { 0 10 } + parmtag { "moonray::is_parm" "1" } + } + } + + parm { + name "xn__primvarsmoonraysubd_corner_sharpnesses_control_1gch" + label "primvars:moonray:subd_corner_sharpnesses" + type string + default { "none" } + menujoin { + "set" "![BUTTONS_set_or_create]Set or Create" + "setexisting" "![BUTTONS_set_if_exists]Set if Exists" + "add" "![BUTTONS_set_add]Add if Exists" + "multiply" "![BUTTONS_set_multiply]Multiply if Exists" + "block" "![BUTTONS_set_block]Block" + "none" "![BUTTONS_set_nothing]Do Nothing" + } + parmtag { "sidefx::look" "icon" } + } + multiparm { + name "subd_corner_sharpnesses" + label "Subd Corner Sharpnesses" + default 0 + disablewhen "{ xn__primvarsmoonraysubd_corner_sharpnesses_control_1gch == block } { xn__primvarsmoonraysubd_corner_sharpnesses_control_1gch == none }" + parmtag { "usdvaluetype" "float[]" } + + parm { + name "xn__primvarsmoonraysubd_corner_sharpnesses_02bh#" + label "Subd Corner Sharpnesses" + type float + default { "0" } + help "Sharpness value for each corner vertex." + range { 0 10 } + parmtag { "moonray::is_parm" "1" } + } + } + + parm { + name "xn__primvarsmoonraymesh_resolution_control_02bh" + label "primvars:moonray:mesh_resolution" + type string + default { "none" } + menujoin { + "set" "![BUTTONS_set_or_create]Set or Create" + "setexisting" "![BUTTONS_set_if_exists]Set if Exists" + "add" "![BUTTONS_set_add]Add if Exists" + "multiply" "![BUTTONS_set_multiply]Multiply if Exists" + "block" "![BUTTONS_set_block]Block" + "none" "![BUTTONS_set_nothing]Do Nothing" + } + parmtag { "sidefx::look" "icon" } + } + parm { + name "xn__primvarsmoonraymesh_resolution_zpbh" + label "Mesh Resolution" + type float + default { "2" } + help "The maximum resolution to which a mesh will be tessellated. NOTE: to prevent t-junctions, only even values are supported. If \"mesh resolution\" is set to n, it will first be rounded up to N=n+1 for odd n, N=n for even n. An edge on an input face will then be tessellated to at most N segments. If \"adaptive error\" is set to 0, every edge on the input face will be uniformly tessellated to N segments. Otherwise the mesh will tessellated adaptively based on its relationship to the camera." + disablewhen "{ xn__primvarsmoonraymesh_resolution_control_02bh == block } { xn__primvarsmoonraymesh_resolution_control_02bh == none }" + range { 0 10 } + parmtag { "usdvaluetype" "float" } + } + parm { + name "xn__primvarsmoonrayadaptive_error_control_e1bh" + label "primvars:moonray:adaptive_error" + type string + default { "none" } + menujoin { + "set" "![BUTTONS_set_or_create]Set or Create" + "setexisting" "![BUTTONS_set_if_exists]Set if Exists" + "add" "![BUTTONS_set_add]Add if Exists" + "multiply" "![BUTTONS_set_multiply]Multiply if Exists" + "block" "![BUTTONS_set_block]Block" + "none" "![BUTTONS_set_nothing]Do Nothing" + } + parmtag { "sidefx::look" "icon" } + } + parm { + name "xn__primvarsmoonrayadaptive_error_dobh" + label "Adaptive Error" + type float + default { "0" } + help "The maximum allowable difference in pixels for subdivison mesh adaptive tessellation (each final tessellated edge won't be longer than n pixels if adaptive error is set to n). A value of 0 disables adaptive tessellation, reverting to uniform tessellation, which sometimes is more stable in animation. Adaptive tessellation is not supported for instances. The maximum tessellation won't exceed the value specified in mesh_resolution. This prevents excessive tessellation when the mesh is extremely close to the camera." + disablewhen "{ xn__primvarsmoonrayadaptive_error_control_e1bh == block } { xn__primvarsmoonrayadaptive_error_control_e1bh == none }" + range { 0 10 } + parmtag { "usdvaluetype" "float" } + } + parm { + name "xn__primvarsmoonraysmooth_normal_control_rzbh" + label "primvars:moonray:smooth_normal" + type string + default { "none" } + menujoin { + "set" "![BUTTONS_set_or_create]Set or Create" + "setexisting" "![BUTTONS_set_if_exists]Set if Exists" + "block" "![BUTTONS_set_block]Block" + "none" "![BUTTONS_set_nothing]Do Nothing" + } + parmtag { "sidefx::look" "icon" } + } + parm { + name "xn__primvarsmoonraysmooth_normal_qmbh" + label "Smooth Normal" + type toggle + default { "1" } + help "Generates smooth shading normals on a PolygonMesh when the mesh doesn't provide shading normals" + disablewhen "{ xn__primvarsmoonraysmooth_normal_control_rzbh == block } { xn__primvarsmoonraysmooth_normal_control_rzbh == none }" + parmtag { "usdvaluetype" "bool" } + } + } + + group { + name "folder6" + label "RdlPoint" + + } + + group { + name "folder7" + label "Sphere" + + parm { + name "xn__primvarsmoonrayradius_control_dobh" + label "primvars:moonray:radius" + type string + default { "none" } + menujoin { + "set" "![BUTTONS_set_or_create]Set or Create" + "setexisting" "![BUTTONS_set_if_exists]Set if Exists" + "add" "![BUTTONS_set_add]Add if Exists" + "multiply" "![BUTTONS_set_multiply]Multiply if Exists" + "block" "![BUTTONS_set_block]Block" + "none" "![BUTTONS_set_nothing]Do Nothing" + } + parmtag { "sidefx::look" "icon" } + } + parm { + name "xn__primvarsmoonrayradius_cbbh" + label "Radius" + type float + default { "1" } + help "The radius of the sphere. The sphere will clip if the radius exceeds the magnitude of either the zmin or zmax values." + disablewhen "{ xn__primvarsmoonrayradius_control_dobh == block } { xn__primvarsmoonrayradius_control_dobh == none }" + range { 0 10 } + parmtag { "usdvaluetype" "float" } + } + parm { + name "xn__primvarsmoonrayzmin_control_3kbh" + label "primvars:moonray:zmin" + type string + default { "none" } + menujoin { + "set" "![BUTTONS_set_or_create]Set or Create" + "setexisting" "![BUTTONS_set_if_exists]Set if Exists" + "add" "![BUTTONS_set_add]Add if Exists" + "multiply" "![BUTTONS_set_multiply]Multiply if Exists" + "block" "![BUTTONS_set_block]Block" + "none" "![BUTTONS_set_nothing]Do Nothing" + } + parmtag { "sidefx::look" "icon" } + } + parm { + name "xn__primvarsmoonrayzmin_26ah" + label "Zmin" + type float + default { "-1" } + help "The minimum extent of sphere on the z axis expressed in object space and independent of the radius. The sphere will clip if the radius exceeds the magnitude of this parameter." + disablewhen "{ xn__primvarsmoonrayzmin_control_3kbh == block } { xn__primvarsmoonrayzmin_control_3kbh == none }" + range { 0 10 } + parmtag { "usdvaluetype" "float" } + } + parm { + name "xn__primvarsmoonrayzmax_control_3kbh" + label "primvars:moonray:zmax" + type string + default { "none" } + menujoin { + "set" "![BUTTONS_set_or_create]Set or Create" + "setexisting" "![BUTTONS_set_if_exists]Set if Exists" + "add" "![BUTTONS_set_add]Add if Exists" + "multiply" "![BUTTONS_set_multiply]Multiply if Exists" + "block" "![BUTTONS_set_block]Block" + "none" "![BUTTONS_set_nothing]Do Nothing" + } + parmtag { "sidefx::look" "icon" } + } + parm { + name "xn__primvarsmoonrayzmax_26ah" + label "Zmax" + type float + default { "1" } + help "The maximum extent of sphere on the z axis expressed in object space and independent of the radius. The sphere will clip if the radius exceeds the magnitude of this parameter." + disablewhen "{ xn__primvarsmoonrayzmax_control_3kbh == block } { xn__primvarsmoonrayzmax_control_3kbh == none }" + range { 0 10 } + parmtag { "usdvaluetype" "float" } + } + parm { + name "xn__primvarsmoonrayphi_max_control_zpbh" + label "primvars:moonray:phi_max" + type string + default { "none" } + menujoin { + "set" "![BUTTONS_set_or_create]Set or Create" + "setexisting" "![BUTTONS_set_if_exists]Set if Exists" + "add" "![BUTTONS_set_add]Add if Exists" + "multiply" "![BUTTONS_set_multiply]Multiply if Exists" + "block" "![BUTTONS_set_block]Block" + "none" "![BUTTONS_set_nothing]Do Nothing" + } + parmtag { "sidefx::look" "icon" } + } + parm { + name "xn__primvarsmoonrayphi_max_ycbh" + label "Phi Max" + type float + default { "360" } + help "The arc of the sphere surface around the z axis expressed in degrees." + disablewhen "{ xn__primvarsmoonrayphi_max_control_zpbh == block } { xn__primvarsmoonrayphi_max_control_zpbh == none }" + range { 0 10 } + parmtag { "usdvaluetype" "float" } + } + } + + group { + name "folder8" + label "Vdb" + + parm { + name "xn__primvarsmoonraymodel_control_qmbh" + label "primvars:moonray:model" + type string + default { "none" } + menujoin { + "set" "![BUTTONS_set_or_create]Set or Create" + "setexisting" "![BUTTONS_set_if_exists]Set if Exists" + "block" "![BUTTONS_set_block]Block" + "none" "![BUTTONS_set_nothing]Do Nothing" + } + parmtag { "sidefx::look" "icon" } + } + parm { + name "xn__primvarsmoonraymodel_p8ah" + label "Model" + type file + default { "" } + help "The VDB file to load" + disablewhen "{ xn__primvarsmoonraymodel_control_qmbh == block } { xn__primvarsmoonraymodel_control_qmbh == none }" + parmtag { "usdvaluetype" "asset" } + } + parm { + name "xn__primvarsmoonrayinterpolation_control_rzbh" + label "primvars:moonray:interpolation" + type string + default { "none" } + menujoin { + "set" "![BUTTONS_set_or_create]Set or Create" + "setexisting" "![BUTTONS_set_if_exists]Set if Exists" + "add" "![BUTTONS_set_add]Add if Exists" + "multiply" "![BUTTONS_set_multiply]Multiply if Exists" + "block" "![BUTTONS_set_block]Block" + "none" "![BUTTONS_set_nothing]Do Nothing" + } + parmtag { "sidefx::look" "icon" } + } + parm { + name "xn__primvarsmoonrayinterpolation_qmbh" + label "Interpolation" + type string + default { "linear" } + help "Voxel interpolation to use when sampling the volume data" + disablewhen "{ xn__primvarsmoonrayinterpolation_control_rzbh == block } { xn__primvarsmoonrayinterpolation_control_rzbh == none }" + menu { + "nearest neighbor" "Nearest Neighbor" + "linear" "Linear" + "quadratic" "Quadratic" + } + parmtag { "usdvaluetype" "token" } + } + parm { + name "xn__primvarsmoonraydensity_grid_control_4xbh" + label "primvars:moonray:density_grid" + type string + default { "none" } + menujoin { + "set" "![BUTTONS_set_or_create]Set or Create" + "setexisting" "![BUTTONS_set_if_exists]Set if Exists" + "block" "![BUTTONS_set_block]Block" + "none" "![BUTTONS_set_nothing]Do Nothing" + } + parmtag { "sidefx::look" "icon" } + } + parm { + name "xn__primvarsmoonraydensity_grid_3kbh" + label "Density Grid" + type string + default { "density" } + help "The name of the density grid. If multiple grids have the same name, only the first grid with that name will be loaded. If a vdb file has multiple grids with the same name, you may use a suffix index to pick which grid to load, e.g. \"density[3]\". The index must be in [] brackets." + disablewhen "{ xn__primvarsmoonraydensity_grid_control_4xbh == block } { xn__primvarsmoonraydensity_grid_control_4xbh == none }" + parmtag { "usdvaluetype" "string" } + } + parm { + name "xn__primvarsmoonrayemission_grid_control_rzbh" + label "primvars:moonray:emission_grid" + type string + default { "none" } + menujoin { + "set" "![BUTTONS_set_or_create]Set or Create" + "setexisting" "![BUTTONS_set_if_exists]Set if Exists" + "block" "![BUTTONS_set_block]Block" + "none" "![BUTTONS_set_nothing]Do Nothing" + } + parmtag { "sidefx::look" "icon" } + } + parm { + name "xn__primvarsmoonrayemission_grid_qmbh" + label "Emission Grid" + type string + default { "" } + help "The name of the emission grid. If multiple grids have the same name, only the first grid with that name will be loaded. If a vdb file has multiple grids with the same name, you may use a suffix index to pick which grid to load, e.g. \"emission[3]\". The index must be in [] brackets." + disablewhen "{ xn__primvarsmoonrayemission_grid_control_rzbh == block } { xn__primvarsmoonrayemission_grid_control_rzbh == none }" + parmtag { "usdvaluetype" "string" } + } + parm { + name "xn__primvarsmoonrayvelocity_grid_control_rzbh" + label "primvars:moonray:velocity_grid" + type string + default { "none" } + menujoin { + "set" "![BUTTONS_set_or_create]Set or Create" + "setexisting" "![BUTTONS_set_if_exists]Set if Exists" + "block" "![BUTTONS_set_block]Block" + "none" "![BUTTONS_set_nothing]Do Nothing" + } + parmtag { "sidefx::look" "icon" } + } + parm { + name "xn__primvarsmoonrayvelocity_grid_qmbh" + label "Velocity Grid" + type string + default { "" } + help "the name of vector grid representing the velocity field. Usually named \"v\" or \"vel\" in simulation export. If multiple velocity grids have the same name, only the first grid with that name will be loaded. If a vdb file has multiple grids with the same name, you may use a suffix index to pick which grid to load, e.g. \"v[3]\". The index must be in [] brackets. The index can be different from the index on the \"density_grid\"." + disablewhen "{ xn__primvarsmoonrayvelocity_grid_control_rzbh == block } { xn__primvarsmoonrayvelocity_grid_control_rzbh == none }" + parmtag { "usdvaluetype" "string" } + } + parm { + name "xn__primvarsmoonrayvelocity_sample_rate_control_5bch" + label "primvars:moonray:velocity_sample_rate" + type string + default { "none" } + menujoin { + "set" "![BUTTONS_set_or_create]Set or Create" + "setexisting" "![BUTTONS_set_if_exists]Set if Exists" + "add" "![BUTTONS_set_add]Add if Exists" + "multiply" "![BUTTONS_set_multiply]Multiply if Exists" + "block" "![BUTTONS_set_block]Block" + "none" "![BUTTONS_set_nothing]Do Nothing" + } + parmtag { "sidefx::look" "icon" } + } + parm { + name "xn__primvarsmoonrayvelocity_sample_rate_4xbh" + label "Velocity Sample Rate" + type float + default { "0.2" } + help "the relative scale of input velocity grid resolution. Lower value has lower memory overhead and lower fidelity of motion blur effect, which is sometimes desired for artistic reasons" + disablewhen "{ xn__primvarsmoonrayvelocity_sample_rate_control_5bch == block } { xn__primvarsmoonrayvelocity_sample_rate_control_5bch == none }" + range { 0 10 } + parmtag { "usdvaluetype" "float" } + } + parm { + name "xn__primvarsmoonrayemission_sample_rate_control_5bch" + label "primvars:moonray:emission_sample_rate" + type string + default { "none" } + menujoin { + "set" "![BUTTONS_set_or_create]Set or Create" + "setexisting" "![BUTTONS_set_if_exists]Set if Exists" + "add" "![BUTTONS_set_add]Add if Exists" + "multiply" "![BUTTONS_set_multiply]Multiply if Exists" + "block" "![BUTTONS_set_block]Block" + "none" "![BUTTONS_set_nothing]Do Nothing" + } + parmtag { "sidefx::look" "icon" } + } + parm { + name "xn__primvarsmoonrayemission_sample_rate_4xbh" + label "Emission Sample Rate" + type float + default { "1" } + help "the relative scale of input emission grid resolution. Lower value has lower memory overhead and faster render time, with the cost of lower fidelity of emission shape and illumination" + disablewhen "{ xn__primvarsmoonrayemission_sample_rate_control_5bch == block } { xn__primvarsmoonrayemission_sample_rate_control_5bch == none }" + range { 0 10 } + parmtag { "usdvaluetype" "float" } + } + } + } diff --git a/houdini/soho/parameters/HdMoonrayRendererPlugin_Global.ds b/houdini/soho/parameters/HdMoonrayRendererPlugin_Global.ds index 3133669..74f156c 100644 --- a/houdini/soho/parameters/HdMoonrayRendererPlugin_Global.ds +++ b/houdini/soho/parameters/HdMoonrayRendererPlugin_Global.ds @@ -284,7 +284,7 @@ multiparm { name "aperture_window" label "Aperture Window" - default 4 + default 0 disablewhen "{ xn__moonraysceneVariableaperture_window_control_4bcn == block } { xn__moonraysceneVariableaperture_window_control_4bcn == none }" parmtag { "usdvaluetype" "int[]" } @@ -317,7 +317,7 @@ multiparm { name "region_window" label "Region Window" - default 4 + default 0 disablewhen "{ xn__moonraysceneVariableregion_window_control_v7bn == block } { xn__moonraysceneVariableregion_window_control_v7bn == none }" parmtag { "usdvaluetype" "int[]" } @@ -350,7 +350,7 @@ multiparm { name "sub_viewport" label "Sub Viewport" - default 4 + default 0 disablewhen "{ xn__moonraysceneVariablesub_viewport_control_85bn == block } { xn__moonraysceneVariablesub_viewport_control_85bn == none }" parmtag { "usdvaluetype" "int[]" } @@ -389,7 +389,7 @@ multiparm { name "motion_steps" label "Motion Steps" - default 2 + default 0 disablewhen "{ xn__moonraysceneVariablemotion_steps_control_85bn == block } { xn__moonraysceneVariablemotion_steps_control_85bn == none }" parmtag { "usdvaluetype" "float[]" } @@ -2507,7 +2507,7 @@ multiparm { name "debug_pixel" label "Debug Pixel" - default 2 + default 0 disablewhen "{ xn__moonraysceneVariabledebug_pixel_control_m4bn == block } { xn__moonraysceneVariabledebug_pixel_control_m4bn == none }" parmtag { "usdvaluetype" "int[]" } @@ -2901,4 +2901,51 @@ disablewhen "{ xn__moonraysceneVariabletwo_stage_output_control_rdcn == block } { xn__moonraysceneVariabletwo_stage_output_control_rdcn == none }" parmtag { "usdvaluetype" "bool" } } + parm { + name "xn__moonraysceneVariablefatal_bool_control_z2bn" + label "moonray:sceneVariable:fatal_bool" + type string + default { "none" } + menujoin { + "set" "![BUTTONS_set_or_create]Set or Create" + "setexisting" "![BUTTONS_set_if_exists]Set if Exists" + "block" "![BUTTONS_set_block]Block" + "none" "![BUTTONS_set_nothing]Do Nothing" + } + parmtag { "sidefx::look" "icon" } + } + parm { + name "xn__moonraysceneVariablefatal_bool_ypbn" + label "Fatal Bool" + type toggle + default { "0" } + help "The bool to use for materialx map shaders that are unable to execute shading, usually due to incomplete initialization." + disablewhen "{ xn__moonraysceneVariablefatal_bool_control_z2bn == block } { xn__moonraysceneVariablefatal_bool_control_z2bn == none }" + parmtag { "usdvaluetype" "bool" } + } + parm { + name "xn__moonraysceneVariablefatal_int_control_d1bn" + label "moonray:sceneVariable:fatal_int" + type string + default { "none" } + menujoin { + "set" "![BUTTONS_set_or_create]Set or Create" + "setexisting" "![BUTTONS_set_if_exists]Set if Exists" + "add" "![BUTTONS_set_add]Add if Exists" + "multiply" "![BUTTONS_set_multiply]Multiply if Exists" + "block" "![BUTTONS_set_block]Block" + "none" "![BUTTONS_set_nothing]Do Nothing" + } + parmtag { "sidefx::look" "icon" } + } + parm { + name "xn__moonraysceneVariablefatal_int_cobn" + label "Fatal Int" + type integer + default { "0" } + help "The int to use for materialx map shaders that are unable to execute shading, usually due to incomplete initialization." + disablewhen "{ xn__moonraysceneVariablefatal_int_control_d1bn == block } { xn__moonraysceneVariablefatal_int_control_d1bn == none }" + range { 0 10 } + parmtag { "usdvaluetype" "int" } + } } diff --git a/houdini/soho/parameters/HdMoonrayRendererPlugin_Light.ds b/houdini/soho/parameters/HdMoonrayRendererPlugin_Light.ds index f1582e1..0c0337c 100644 --- a/houdini/soho/parameters/HdMoonrayRendererPlugin_Light.ds +++ b/houdini/soho/parameters/HdMoonrayRendererPlugin_Light.ds @@ -109,6 +109,88 @@ } parmtag { "usdvaluetype" "token" } } + parm { + name "xn__moonraycolor_control_o8a" + label "moonray:color" + type string + default { "none" } + hidewhen "{ primtype != UsdLuxCylinderLight primtype != UsdLuxDiskLight primtype != UsdLuxDistantLight primtype != UsdLuxDomeLight primtype != UsdLuxGeometryLight primtype != UsdLuxPortalLight primtype != UsdLuxRectLight primtype != UsdLuxSphereLight primtype != UsdLuxDiskLight createprims == on }" + menujoin { + "set" "![BUTTONS_set_or_create]Set or Create" + "setexisting" "![BUTTONS_set_if_exists]Set if Exists" + "add" "![BUTTONS_set_add]Add if Exists" + "multiply" "![BUTTONS_set_multiply]Multiply if Exists" + "block" "![BUTTONS_set_block]Block" + "none" "![BUTTONS_set_nothing]Do Nothing" + } + parmtag { "sidefx::look" "icon" } + } + parm { + name "xn__moonraycolor_nva" + label "Color" + type color + size 3 + default { "1" "1" "1" } + help "The light's RGB values.\nThese are combined multiplicatively with the intensity and other attributes in determining the light's 3-channel radiance." + disablewhen "{ xn__moonraycolor_control_o8a == block } { xn__moonraycolor_control_o8a == none }" + hidewhen "{ primtype != UsdLuxCylinderLight primtype != UsdLuxDiskLight primtype != UsdLuxDistantLight primtype != UsdLuxDomeLight primtype != UsdLuxGeometryLight primtype != UsdLuxPortalLight primtype != UsdLuxRectLight primtype != UsdLuxSphereLight primtype != UsdLuxDiskLight createprims == on }" + range { 0 10 } + parmtag { "usdvaluetype" "color3f" } + } + parm { + name "xn__moonrayintensity_control_6fb" + label "moonray:intensity" + type string + default { "none" } + hidewhen "{ primtype != UsdLuxCylinderLight primtype != UsdLuxDiskLight primtype != UsdLuxDistantLight primtype != UsdLuxDomeLight primtype != UsdLuxGeometryLight primtype != UsdLuxPortalLight primtype != UsdLuxRectLight primtype != UsdLuxSphereLight primtype != UsdLuxDiskLight createprims == on }" + menujoin { + "set" "![BUTTONS_set_or_create]Set or Create" + "setexisting" "![BUTTONS_set_if_exists]Set if Exists" + "add" "![BUTTONS_set_add]Add if Exists" + "multiply" "![BUTTONS_set_multiply]Multiply if Exists" + "block" "![BUTTONS_set_block]Block" + "none" "![BUTTONS_set_nothing]Do Nothing" + } + parmtag { "sidefx::look" "icon" } + } + parm { + name "xn__moonrayintensity_51a" + label "Intensity" + type float + default { "1" } + help "The light's intensity.\nThis is combined multiplicatively with the color and other attributes in determining the light's 3-channel radiance." + disablewhen "{ xn__moonrayintensity_control_6fb == block } { xn__moonrayintensity_control_6fb == none }" + hidewhen "{ primtype != UsdLuxCylinderLight primtype != UsdLuxDiskLight primtype != UsdLuxDistantLight primtype != UsdLuxDomeLight primtype != UsdLuxGeometryLight primtype != UsdLuxPortalLight primtype != UsdLuxRectLight primtype != UsdLuxSphereLight primtype != UsdLuxDiskLight createprims == on }" + range { 0 10 } + parmtag { "usdvaluetype" "float" } + } + parm { + name "xn__moonrayexposure_control_keb" + label "moonray:exposure" + type string + default { "none" } + hidewhen "{ primtype != UsdLuxCylinderLight primtype != UsdLuxDiskLight primtype != UsdLuxDistantLight primtype != UsdLuxDomeLight primtype != UsdLuxGeometryLight primtype != UsdLuxPortalLight primtype != UsdLuxRectLight primtype != UsdLuxSphereLight primtype != UsdLuxDiskLight createprims == on }" + menujoin { + "set" "![BUTTONS_set_or_create]Set or Create" + "setexisting" "![BUTTONS_set_if_exists]Set if Exists" + "add" "![BUTTONS_set_add]Add if Exists" + "multiply" "![BUTTONS_set_multiply]Multiply if Exists" + "block" "![BUTTONS_set_block]Block" + "none" "![BUTTONS_set_nothing]Do Nothing" + } + parmtag { "sidefx::look" "icon" } + } + parm { + name "xn__moonrayexposure_j0a" + label "Exposure" + type float + default { "0" } + help "The light's exposure value.\nThis value provides an alternative to the intensity value as a mechanism for controlling the light's overall brightness, and is inspired by the corresponding photographic term but is generalised to apply independently to each light. To calculate its effect, pow(2, exposure) is combined multiplicatively with the color and other attributes in determining the light's 3-channel radiance." + disablewhen "{ xn__moonrayexposure_control_keb == block } { xn__moonrayexposure_control_keb == none }" + hidewhen "{ primtype != UsdLuxCylinderLight primtype != UsdLuxDiskLight primtype != UsdLuxDistantLight primtype != UsdLuxDomeLight primtype != UsdLuxGeometryLight primtype != UsdLuxPortalLight primtype != UsdLuxRectLight primtype != UsdLuxSphereLight primtype != UsdLuxDiskLight createprims == on }" + range { 0 10 } + parmtag { "usdvaluetype" "float" } + } parm { name "xn__moonraymax_shadow_distance_control_hwb" label "moonray:max_shadow_distance" @@ -274,6 +356,30 @@ hidewhen "{ primtype != UsdLuxCylinderLight primtype != UsdLuxDiskLight primtype != UsdLuxDistantLight primtype != UsdLuxDomeLight primtype != UsdLuxGeometryLight primtype != UsdLuxPortalLight primtype != UsdLuxRectLight primtype != UsdLuxSphereLight primtype != UsdLuxDiskLight createprims == on }" parmtag { "usdvaluetype" "string" } } + parm { + name "xn__moonraynormalized_control_thb" + label "moonray:normalized" + type string + default { "none" } + hidewhen "{ primtype != UsdLuxCylinderLight primtype != UsdLuxDiskLight primtype != UsdLuxDistantLight primtype != UsdLuxGeometryLight primtype != UsdLuxPortalLight primtype != UsdLuxRectLight primtype != UsdLuxSphereLight primtype != UsdLuxDiskLight createprims == on }" + menujoin { + "set" "![BUTTONS_set_or_create]Set or Create" + "setexisting" "![BUTTONS_set_if_exists]Set if Exists" + "block" "![BUTTONS_set_block]Block" + "none" "![BUTTONS_set_nothing]Do Nothing" + } + parmtag { "sidefx::look" "icon" } + } + parm { + name "xn__moonraynormalized_s3a" + label "Normalized" + type toggle + default { "1" } + help "When set to true, the size of the light can be changed without altering the amount of total energy cast into the scene. This is achieved via scaling the light's radiance by the reciprocal of its surface area. When set to false, the radiance is used as-is, regardless of surface area." + disablewhen "{ xn__moonraynormalized_control_thb == block } { xn__moonraynormalized_control_thb == none }" + hidewhen "{ primtype != UsdLuxCylinderLight primtype != UsdLuxDiskLight primtype != UsdLuxDistantLight primtype != UsdLuxGeometryLight primtype != UsdLuxPortalLight primtype != UsdLuxRectLight primtype != UsdLuxSphereLight primtype != UsdLuxDiskLight createprims == on }" + parmtag { "usdvaluetype" "bool" } + } parm { name "xn__moonrayapply_scene_scale_control_7sb" label "moonray:apply_scene_scale" @@ -298,6 +404,60 @@ hidewhen "{ primtype != UsdLuxCylinderLight primtype != UsdLuxDiskLight primtype != UsdLuxGeometryLight primtype != UsdLuxPortalLight primtype != UsdLuxRectLight primtype != UsdLuxSphereLight primtype != UsdLuxDiskLight createprims == on }" parmtag { "usdvaluetype" "bool" } } + parm { + name "xn__moonrayradius_control_bbb" + label "moonray:radius" + type string + default { "none" } + hidewhen "{ primtype != UsdLuxCylinderLight primtype != UsdLuxDiskLight primtype != UsdLuxSphereLight createprims == on }" + menujoin { + "set" "![BUTTONS_set_or_create]Set or Create" + "setexisting" "![BUTTONS_set_if_exists]Set if Exists" + "add" "![BUTTONS_set_add]Add if Exists" + "multiply" "![BUTTONS_set_multiply]Multiply if Exists" + "block" "![BUTTONS_set_block]Block" + "none" "![BUTTONS_set_nothing]Do Nothing" + } + parmtag { "sidefx::look" "icon" } + } + parm { + name "xn__moonrayradius_9wa" + label "Radius" + type float + default { "1" } + help "The radius of the cylinder." + disablewhen "{ xn__moonrayradius_control_bbb == block } { xn__moonrayradius_control_bbb == none }" + hidewhen "{ primtype != UsdLuxCylinderLight primtype != UsdLuxDiskLight primtype != UsdLuxSphereLight createprims == on }" + range { 0 10 } + parmtag { "usdvaluetype" "float" } + } + parm { + name "xn__moonrayheight_control_bbb" + label "moonray:height" + type string + default { "none" } + hidewhen "{ primtype != UsdLuxCylinderLight primtype != UsdLuxPortalLight primtype != UsdLuxRectLight createprims == on }" + menujoin { + "set" "![BUTTONS_set_or_create]Set or Create" + "setexisting" "![BUTTONS_set_if_exists]Set if Exists" + "add" "![BUTTONS_set_add]Add if Exists" + "multiply" "![BUTTONS_set_multiply]Multiply if Exists" + "block" "![BUTTONS_set_block]Block" + "none" "![BUTTONS_set_nothing]Do Nothing" + } + parmtag { "sidefx::look" "icon" } + } + parm { + name "xn__moonrayheight_9wa" + label "Height" + type float + default { "1" } + help "The height of the cylinder as measured along its axis." + disablewhen "{ xn__moonrayheight_control_bbb == block } { xn__moonrayheight_control_bbb == none }" + hidewhen "{ primtype != UsdLuxCylinderLight primtype != UsdLuxPortalLight primtype != UsdLuxRectLight createprims == on }" + range { 0 10 } + parmtag { "usdvaluetype" "float" } + } parm { name "xn__moonraysidedness_control_6fb" label "moonray:sidedness" @@ -442,28 +602,56 @@ parmtag { "usdvaluetype" "float" } } parm { - name "xn__moonraynormalized_control_thb" - label "moonray:normalized" + name "xn__moonrayangular_extent_control_cob" + label "moonray:angular_extent" type string default { "none" } - hidewhen "{ primtype != UsdLuxCylinderLight primtype != UsdLuxDiskLight primtype != UsdLuxDistantLight primtype != UsdLuxGeometryLight primtype != UsdLuxPortalLight primtype != UsdLuxRectLight primtype != UsdLuxSphereLight primtype != UsdLuxDiskLight createprims == on }" + hidewhen "{ primtype != UsdLuxDistantLight createprims == on }" menujoin { "set" "![BUTTONS_set_or_create]Set or Create" "setexisting" "![BUTTONS_set_if_exists]Set if Exists" + "add" "![BUTTONS_set_add]Add if Exists" + "multiply" "![BUTTONS_set_multiply]Multiply if Exists" "block" "![BUTTONS_set_block]Block" "none" "![BUTTONS_set_nothing]Do Nothing" } parmtag { "sidefx::look" "icon" } } parm { - name "xn__moonraynormalized_s3a" - label "Normalized" - type toggle - default { "1" } - help "When set to true, the size of the light can be changed without altering the amount of total energy cast into the scene. This is achieved via scaling the light's radiance by the reciprocal of its surface area. When set to false, the radiance is used as-is, regardless of surface area." - disablewhen "{ xn__moonraynormalized_control_thb == block } { xn__moonraynormalized_control_thb == none }" - hidewhen "{ primtype != UsdLuxCylinderLight primtype != UsdLuxDiskLight primtype != UsdLuxDistantLight primtype != UsdLuxGeometryLight primtype != UsdLuxPortalLight primtype != UsdLuxRectLight primtype != UsdLuxSphereLight primtype != UsdLuxDiskLight createprims == on }" - parmtag { "usdvaluetype" "bool" } + name "xn__moonrayangular_extent_bbb" + label "Angular Extent" + type float + default { "0.53" } + help "The angle in degrees subtended by the DistantLight's diameter." + disablewhen "{ xn__moonrayangular_extent_control_cob == block } { xn__moonrayangular_extent_control_cob == none }" + hidewhen "{ primtype != UsdLuxDistantLight createprims == on }" + range { 0 10 } + parmtag { "usdvaluetype" "float" } + } + parm { + name "xn__moonraygeometry_control_keb" + label "moonray:geometry" + type string + default { "none" } + hidewhen "{ primtype != UsdLuxGeometryLight createprims == on }" + menujoin { + "set" "![BUTTONS_set_or_create]Set or Create" + "setexisting" "![BUTTONS_set_if_exists]Set if Exists" + "block" "![BUTTONS_set_block]Block" + "none" "![BUTTONS_set_nothing]Do Nothing" + } + parmtag { "sidefx::look" "icon" } + } + parm { + name "xn__moonraygeometry_j0a" + label "Geometry" + type oppath + default { "" } + help "The SceneObject holding the mesh data to use as the MeshLight's surface." + disablewhen "{ xn__moonraygeometry_control_keb == block } { xn__moonraygeometry_control_keb == none }" + hidewhen "{ primtype != UsdLuxGeometryLight createprims == on }" + parmtag { "oprelative" "." } + parmtag { "usdvaluetype" "" } } parm { name "xn__moonrayparts_control_o8a" @@ -514,88 +702,6 @@ parmtag { "oprelative" "." } parmtag { "usdvaluetype" "" } } - parm { - name "xn__moonraycolor_control_o8a" - label "moonray:color" - type string - default { "none" } - hidewhen "{ primtype != UsdLuxCylinderLight primtype != UsdLuxDiskLight primtype != UsdLuxDistantLight primtype != UsdLuxDomeLight primtype != UsdLuxGeometryLight primtype != UsdLuxPortalLight primtype != UsdLuxRectLight primtype != UsdLuxSphereLight primtype != UsdLuxDiskLight createprims == on }" - menujoin { - "set" "![BUTTONS_set_or_create]Set or Create" - "setexisting" "![BUTTONS_set_if_exists]Set if Exists" - "add" "![BUTTONS_set_add]Add if Exists" - "multiply" "![BUTTONS_set_multiply]Multiply if Exists" - "block" "![BUTTONS_set_block]Block" - "none" "![BUTTONS_set_nothing]Do Nothing" - } - parmtag { "sidefx::look" "icon" } - } - parm { - name "xn__moonraycolor_nva" - label "Color" - type color - size 3 - default { "1" "1" "1" } - help "The light's RGB values.\nThese are combined multiplicatively with the intensity and other attributes in determining the light's 3-channel radiance." - disablewhen "{ xn__moonraycolor_control_o8a == block } { xn__moonraycolor_control_o8a == none }" - hidewhen "{ primtype != UsdLuxCylinderLight primtype != UsdLuxDiskLight primtype != UsdLuxDistantLight primtype != UsdLuxDomeLight primtype != UsdLuxGeometryLight primtype != UsdLuxPortalLight primtype != UsdLuxRectLight primtype != UsdLuxSphereLight primtype != UsdLuxDiskLight createprims == on }" - range { 0 10 } - parmtag { "usdvaluetype" "color3f" } - } - parm { - name "xn__moonrayintensity_control_6fb" - label "moonray:intensity" - type string - default { "none" } - hidewhen "{ primtype != UsdLuxCylinderLight primtype != UsdLuxDiskLight primtype != UsdLuxDistantLight primtype != UsdLuxDomeLight primtype != UsdLuxGeometryLight primtype != UsdLuxPortalLight primtype != UsdLuxRectLight primtype != UsdLuxSphereLight primtype != UsdLuxDiskLight createprims == on }" - menujoin { - "set" "![BUTTONS_set_or_create]Set or Create" - "setexisting" "![BUTTONS_set_if_exists]Set if Exists" - "add" "![BUTTONS_set_add]Add if Exists" - "multiply" "![BUTTONS_set_multiply]Multiply if Exists" - "block" "![BUTTONS_set_block]Block" - "none" "![BUTTONS_set_nothing]Do Nothing" - } - parmtag { "sidefx::look" "icon" } - } - parm { - name "xn__moonrayintensity_51a" - label "Intensity" - type float - default { "1" } - help "The light's intensity.\nThis is combined multiplicatively with the color and other attributes in determining the light's 3-channel radiance." - disablewhen "{ xn__moonrayintensity_control_6fb == block } { xn__moonrayintensity_control_6fb == none }" - hidewhen "{ primtype != UsdLuxCylinderLight primtype != UsdLuxDiskLight primtype != UsdLuxDistantLight primtype != UsdLuxDomeLight primtype != UsdLuxGeometryLight primtype != UsdLuxPortalLight primtype != UsdLuxRectLight primtype != UsdLuxSphereLight primtype != UsdLuxDiskLight createprims == on }" - range { 0 10 } - parmtag { "usdvaluetype" "float" } - } - parm { - name "xn__moonrayexposure_control_keb" - label "moonray:exposure" - type string - default { "none" } - hidewhen "{ primtype != UsdLuxCylinderLight primtype != UsdLuxDiskLight primtype != UsdLuxDistantLight primtype != UsdLuxDomeLight primtype != UsdLuxGeometryLight primtype != UsdLuxPortalLight primtype != UsdLuxRectLight primtype != UsdLuxSphereLight primtype != UsdLuxDiskLight createprims == on }" - menujoin { - "set" "![BUTTONS_set_or_create]Set or Create" - "setexisting" "![BUTTONS_set_if_exists]Set if Exists" - "add" "![BUTTONS_set_add]Add if Exists" - "multiply" "![BUTTONS_set_multiply]Multiply if Exists" - "block" "![BUTTONS_set_block]Block" - "none" "![BUTTONS_set_nothing]Do Nothing" - } - parmtag { "sidefx::look" "icon" } - } - parm { - name "xn__moonrayexposure_j0a" - label "Exposure" - type float - default { "0" } - help "The light's exposure value.\nThis value provides an alternative to the intensity value as a mechanism for controlling the light's overall brightness, and is inspired by the corresponding photographic term but is generalised to apply independently to each light. To calculate its effect, pow(2, exposure) is combined multiplicatively with the color and other attributes in determining the light's 3-channel radiance." - disablewhen "{ xn__moonrayexposure_control_keb == block } { xn__moonrayexposure_control_keb == none }" - hidewhen "{ primtype != UsdLuxCylinderLight primtype != UsdLuxDiskLight primtype != UsdLuxDistantLight primtype != UsdLuxDomeLight primtype != UsdLuxGeometryLight primtype != UsdLuxPortalLight primtype != UsdLuxRectLight primtype != UsdLuxSphereLight primtype != UsdLuxDiskLight createprims == on }" - range { 0 10 } - parmtag { "usdvaluetype" "float" } - } parm { name "xn__moonraylight_control_o8a" label "moonray:light" @@ -648,33 +754,6 @@ range { 0 10 } parmtag { "usdvaluetype" "float" } } - parm { - name "xn__moonrayheight_control_bbb" - label "moonray:height" - type string - default { "none" } - hidewhen "{ primtype != UsdLuxCylinderLight primtype != UsdLuxPortalLight primtype != UsdLuxRectLight createprims == on }" - menujoin { - "set" "![BUTTONS_set_or_create]Set or Create" - "setexisting" "![BUTTONS_set_if_exists]Set if Exists" - "add" "![BUTTONS_set_add]Add if Exists" - "multiply" "![BUTTONS_set_multiply]Multiply if Exists" - "block" "![BUTTONS_set_block]Block" - "none" "![BUTTONS_set_nothing]Do Nothing" - } - parmtag { "sidefx::look" "icon" } - } - parm { - name "xn__moonrayheight_9wa" - label "Height" - type float - default { "1" } - help "The height of the rectangle, i.e. the size measured in the light's local y-direction." - disablewhen "{ xn__moonrayheight_control_bbb == block } { xn__moonrayheight_control_bbb == none }" - hidewhen "{ primtype != UsdLuxCylinderLight primtype != UsdLuxPortalLight primtype != UsdLuxRectLight createprims == on }" - range { 0 10 } - parmtag { "usdvaluetype" "float" } - } } group { @@ -1302,6 +1381,33 @@ label "Cone" hidewhen "{ primtype != UsdLuxDiskLight createprims == on }" + parm { + name "xn__moonraylens_radius_control_gjb" + label "moonray:lens_radius" + type string + default { "none" } + hidewhen "{ primtype != UsdLuxDiskLight createprims == on }" + menujoin { + "set" "![BUTTONS_set_or_create]Set or Create" + "setexisting" "![BUTTONS_set_if_exists]Set if Exists" + "add" "![BUTTONS_set_add]Add if Exists" + "multiply" "![BUTTONS_set_multiply]Multiply if Exists" + "block" "![BUTTONS_set_block]Block" + "none" "![BUTTONS_set_nothing]Do Nothing" + } + parmtag { "sidefx::look" "icon" } + } + parm { + name "xn__moonraylens_radius_f5a" + label "Lens Radius" + type float + default { "1" } + help "The radius of the SpotLight's lens (when the aspect ratio is 1.0, so that the lens is circular)." + disablewhen "{ xn__moonraylens_radius_control_gjb == block } { xn__moonraylens_radius_control_gjb == none }" + hidewhen "{ primtype != UsdLuxDiskLight createprims == on }" + range { 0 10 } + parmtag { "usdvaluetype" "float" } + } parm { name "xn__moonrayaspect_ratio_control_2kb" label "moonray:aspect_ratio" @@ -1356,6 +1462,33 @@ range { 0 10 } parmtag { "usdvaluetype" "float" } } + parm { + name "xn__moonrayouter_cone_angle_control_lrb" + label "moonray:outer_cone_angle" + type string + default { "none" } + hidewhen "{ primtype != UsdLuxDiskLight createprims == on }" + menujoin { + "set" "![BUTTONS_set_or_create]Set or Create" + "setexisting" "![BUTTONS_set_if_exists]Set if Exists" + "add" "![BUTTONS_set_add]Add if Exists" + "multiply" "![BUTTONS_set_multiply]Multiply if Exists" + "block" "![BUTTONS_set_block]Block" + "none" "![BUTTONS_set_nothing]Do Nothing" + } + parmtag { "sidefx::look" "icon" } + } + parm { + name "xn__moonrayouter_cone_angle_keb" + label "Outer Cone Angle" + type float + default { "60" } + help "The apex angle of the bounding cone of the light emitted by the SpotLight. No illumination takes placeoutside this angle. This is a full angle, measured from one side to the other. There is a falloff function applied between the outer and inner cones - see the angle_falloff_type attribute." + disablewhen "{ xn__moonrayouter_cone_angle_control_lrb == block } { xn__moonrayouter_cone_angle_control_lrb == none }" + hidewhen "{ primtype != UsdLuxDiskLight createprims == on }" + range { 0 10 } + parmtag { "usdvaluetype" "float" } + } parm { name "xn__moonrayinner_cone_angle_control_lrb" label "moonray:inner_cone_angle" diff --git a/houdini/soho/parameters/moonray_AttributeMap.ds b/houdini/soho/parameters/moonray_AttributeMap.ds index 87812ab..7761511 100644 --- a/houdini/soho/parameters/moonray_AttributeMap.ds +++ b/houdini/soho/parameters/moonray_AttributeMap.ds @@ -20,7 +20,7 @@ } parm { name "xn__inputsprimitive_attribute_name_xpb" - label "Primitive Attribute Name" + label "Name" type string default { "Cd" } help "the name of primitive attribute to display when attribute 'map type' is set to 'primitive attribute'" @@ -44,7 +44,7 @@ } parm { name "xn__inputsprimitive_attribute_type_xpb" - label "Primitive Attribute Type" + label "Type" type string default { "rgb" } help "the type of primitive attribute to display when attribute 'map type' is set to 'primitive attribute'" diff --git a/houdini/soho/parameters/moonray_CombineNormalMap.ds b/houdini/soho/parameters/moonray_CombineNormalMap.ds index 43abb90..cec1fb3 100644 --- a/houdini/soho/parameters/moonray_CombineNormalMap.ds +++ b/houdini/soho/parameters/moonray_CombineNormalMap.ds @@ -46,7 +46,7 @@ } parm { name "xn__inputsnormal_map_1_dial_jeb" - label "Normal Map 1 Dial" + label "Map 1 Dial" type float default { "1" } help "Amount of normal map 1 to blend in" @@ -95,7 +95,7 @@ } parm { name "xn__inputsnormal_map_2_dial_jeb" - label "Normal Map 2 Dial" + label "Map 2 Dial" type float default { "1" } help "Amount of normal map 2 to blend in" diff --git a/houdini/soho/parameters/moonray_CylinderLight.ds b/houdini/soho/parameters/moonray_CylinderLight.ds index 7fa6c56..f036a63 100644 --- a/houdini/soho/parameters/moonray_CylinderLight.ds +++ b/houdini/soho/parameters/moonray_CylinderLight.ds @@ -79,8 +79,8 @@ parmtag { "usdvaluetype" "token" } } parm { - name "xn__inputscolor_control_06a" - label "inputs:color" + name "xn__moonraycolor_control_o8a" + label "moonray:color" type string default { "none" } menujoin { @@ -94,19 +94,19 @@ parmtag { "sidefx::look" "icon" } } parm { - name "xn__inputscolor_zta" + name "xn__moonraycolor_nva" label "Color" type color size 3 default { "1" "1" "1" } help "The light's RGB values.\nThese are combined multiplicatively with the intensity and other attributes in determining the light's 3-channel radiance." - disablewhen "{ xn__inputscolor_control_06a == block } { xn__inputscolor_control_06a == none }" + disablewhen "{ xn__moonraycolor_control_o8a == block } { xn__moonraycolor_control_o8a == none }" range { 0 10 } parmtag { "usdvaluetype" "color3f" } } parm { - name "xn__inputsintensity_control_jeb" - label "inputs:intensity" + name "xn__moonrayintensity_control_6fb" + label "moonray:intensity" type string default { "none" } menujoin { @@ -120,18 +120,18 @@ parmtag { "sidefx::look" "icon" } } parm { - name "xn__inputsintensity_i0a" + name "xn__moonrayintensity_51a" label "Intensity" type float default { "1" } help "The light's intensity.\nThis is combined multiplicatively with the color and other attributes in determining the light's 3-channel radiance." - disablewhen "{ xn__inputsintensity_control_jeb == block } { xn__inputsintensity_control_jeb == none }" + disablewhen "{ xn__moonrayintensity_control_6fb == block } { xn__moonrayintensity_control_6fb == none }" range { 0 10 } parmtag { "usdvaluetype" "float" } } parm { - name "xn__inputsexposure_control_wcb" - label "inputs:exposure" + name "xn__moonrayexposure_control_keb" + label "moonray:exposure" type string default { "none" } menujoin { @@ -145,12 +145,12 @@ parmtag { "sidefx::look" "icon" } } parm { - name "xn__inputsexposure_vya" + name "xn__moonrayexposure_j0a" label "Exposure" type float default { "0" } help "The light's exposure value.\nThis value provides an alternative to the intensity value as a mechanism for controlling the light's overall brightness, and is inspired by the corresponding photographic term but is generalised to apply independently to each light. To calculate its effect, pow(2, exposure) is combined multiplicatively with the color and other attributes in determining the light's 3-channel radiance." - disablewhen "{ xn__inputsexposure_control_wcb == block } { xn__inputsexposure_control_wcb == none }" + disablewhen "{ xn__moonrayexposure_control_keb == block } { xn__moonrayexposure_control_keb == none }" range { 0 10 } parmtag { "usdvaluetype" "float" } } @@ -308,8 +308,8 @@ parmtag { "usdvaluetype" "string" } } parm { - name "xn__inputsnormalize_control_jeb" - label "inputs:normalize" + name "xn__moonraynormalized_control_thb" + label "moonray:normalized" type string default { "none" } menujoin { @@ -321,12 +321,12 @@ parmtag { "sidefx::look" "icon" } } parm { - name "xn__inputsnormalize_i0a" + name "xn__moonraynormalized_s3a" label "Normalized" type toggle default { "1" } help "When set to true, the size of the light can be changed without altering the amount of total energy cast into the scene. This is achieved via scaling the light's radiance by the reciprocal of its surface area. When set to false, the radiance is used as-is, regardless of surface area." - disablewhen "{ xn__inputsnormalize_control_jeb == block } { xn__inputsnormalize_control_jeb == none }" + disablewhen "{ xn__moonraynormalized_control_thb == block } { xn__moonraynormalized_control_thb == none }" parmtag { "usdvaluetype" "bool" } } parm { @@ -352,8 +352,8 @@ parmtag { "usdvaluetype" "bool" } } parm { - name "xn__inputsradius_control_n8a" - label "inputs:radius" + name "xn__moonrayradius_control_bbb" + label "moonray:radius" type string default { "none" } menujoin { @@ -367,18 +367,18 @@ parmtag { "sidefx::look" "icon" } } parm { - name "xn__inputsradius_mva" + name "xn__moonrayradius_9wa" label "Radius" type float default { "1" } help "The radius of the cylinder." - disablewhen "{ xn__inputsradius_control_n8a == block } { xn__inputsradius_control_n8a == none }" + disablewhen "{ xn__moonrayradius_control_bbb == block } { xn__moonrayradius_control_bbb == none }" range { 0 10 } parmtag { "usdvaluetype" "float" } } parm { - name "xn__inputslength_control_n8a" - label "inputs:length" + name "xn__moonrayheight_control_bbb" + label "moonray:height" type string default { "none" } menujoin { @@ -392,12 +392,12 @@ parmtag { "sidefx::look" "icon" } } parm { - name "xn__inputslength_mva" + name "xn__moonrayheight_9wa" label "Height" type float default { "1" } help "The height of the cylinder as measured along its axis." - disablewhen "{ xn__inputslength_control_n8a == block } { xn__inputslength_control_n8a == none }" + disablewhen "{ xn__moonrayheight_control_bbb == block } { xn__moonrayheight_control_bbb == none }" range { 0 10 } parmtag { "usdvaluetype" "float" } } diff --git a/houdini/soho/parameters/moonray_DebugMap.ds b/houdini/soho/parameters/moonray_DebugMap.ds index 648ec93..8103c87 100644 --- a/houdini/soho/parameters/moonray_DebugMap.ds +++ b/houdini/soho/parameters/moonray_DebugMap.ds @@ -54,7 +54,7 @@ } parm { name "xn__inputsprimitive_attribute_name_xpb" - label "Primitive Attribute Name" + label "Name" type string default { "st" } help "the name of primitive attribute to displayed when attribute 'map type' is set to 'primitive attribute'" @@ -78,7 +78,7 @@ } parm { name "xn__inputsprimitive_attribute_type_xpb" - label "Primitive Attribute Type" + label "Type" type string default { "vec2f" } help "the type of primitive attribute to displayed when attribute 'map type' is set to 'primitive attribute'" diff --git a/houdini/soho/parameters/moonray_DiskLight.ds b/houdini/soho/parameters/moonray_DiskLight.ds index 3e6c896..50e6ca7 100644 --- a/houdini/soho/parameters/moonray_DiskLight.ds +++ b/houdini/soho/parameters/moonray_DiskLight.ds @@ -79,8 +79,8 @@ parmtag { "usdvaluetype" "token" } } parm { - name "xn__inputscolor_control_06a" - label "inputs:color" + name "xn__moonraycolor_control_o8a" + label "moonray:color" type string default { "none" } menujoin { @@ -94,19 +94,19 @@ parmtag { "sidefx::look" "icon" } } parm { - name "xn__inputscolor_zta" + name "xn__moonraycolor_nva" label "Color" type color size 3 default { "1" "1" "1" } help "The light's RGB values.\nThese are combined multiplicatively with the intensity and other attributes in determining the light's 3-channel radiance." - disablewhen "{ xn__inputscolor_control_06a == block } { xn__inputscolor_control_06a == none }" + disablewhen "{ xn__moonraycolor_control_o8a == block } { xn__moonraycolor_control_o8a == none }" range { 0 10 } parmtag { "usdvaluetype" "color3f" } } parm { - name "xn__inputsintensity_control_jeb" - label "inputs:intensity" + name "xn__moonrayintensity_control_6fb" + label "moonray:intensity" type string default { "none" } menujoin { @@ -120,18 +120,18 @@ parmtag { "sidefx::look" "icon" } } parm { - name "xn__inputsintensity_i0a" + name "xn__moonrayintensity_51a" label "Intensity" type float default { "1" } help "The light's intensity.\nThis is combined multiplicatively with the color and other attributes in determining the light's 3-channel radiance." - disablewhen "{ xn__inputsintensity_control_jeb == block } { xn__inputsintensity_control_jeb == none }" + disablewhen "{ xn__moonrayintensity_control_6fb == block } { xn__moonrayintensity_control_6fb == none }" range { 0 10 } parmtag { "usdvaluetype" "float" } } parm { - name "xn__inputsexposure_control_wcb" - label "inputs:exposure" + name "xn__moonrayexposure_control_keb" + label "moonray:exposure" type string default { "none" } menujoin { @@ -145,12 +145,12 @@ parmtag { "sidefx::look" "icon" } } parm { - name "xn__inputsexposure_vya" + name "xn__moonrayexposure_j0a" label "Exposure" type float default { "0" } help "The light's exposure value.\nThis value provides an alternative to the intensity value as a mechanism for controlling the light's overall brightness, and is inspired by the corresponding photographic term but is generalised to apply independently to each light. To calculate its effect, pow(2, exposure) is combined multiplicatively with the color and other attributes in determining the light's 3-channel radiance." - disablewhen "{ xn__inputsexposure_control_wcb == block } { xn__inputsexposure_control_wcb == none }" + disablewhen "{ xn__moonrayexposure_control_keb == block } { xn__moonrayexposure_control_keb == none }" range { 0 10 } parmtag { "usdvaluetype" "float" } } @@ -308,8 +308,8 @@ parmtag { "usdvaluetype" "string" } } parm { - name "xn__inputsnormalize_control_jeb" - label "inputs:normalize" + name "xn__moonraynormalized_control_thb" + label "moonray:normalized" type string default { "none" } menujoin { @@ -321,12 +321,12 @@ parmtag { "sidefx::look" "icon" } } parm { - name "xn__inputsnormalize_i0a" + name "xn__moonraynormalized_s3a" label "Normalized" type toggle default { "1" } help "When set to true, the size of the light can be changed without altering the amount of total energy cast into the scene. This is achieved via scaling the light's radiance by the reciprocal of its surface area. When set to false, the radiance is used as-is, regardless of surface area." - disablewhen "{ xn__inputsnormalize_control_jeb == block } { xn__inputsnormalize_control_jeb == none }" + disablewhen "{ xn__moonraynormalized_control_thb == block } { xn__moonraynormalized_control_thb == none }" parmtag { "usdvaluetype" "bool" } } parm { @@ -352,8 +352,8 @@ parmtag { "usdvaluetype" "bool" } } parm { - name "xn__inputsradius_control_n8a" - label "inputs:radius" + name "xn__moonrayradius_control_bbb" + label "moonray:radius" type string default { "none" } menujoin { @@ -367,12 +367,12 @@ parmtag { "sidefx::look" "icon" } } parm { - name "xn__inputsradius_mva" + name "xn__moonrayradius_9wa" label "Radius" type float default { "1" } help "The radius of the DiskLight." - disablewhen "{ xn__inputsradius_control_n8a == block } { xn__inputsradius_control_n8a == none }" + disablewhen "{ xn__moonrayradius_control_bbb == block } { xn__moonrayradius_control_bbb == none }" range { 0 10 } parmtag { "usdvaluetype" "float" } } diff --git a/houdini/soho/parameters/moonray_DistantLight.ds b/houdini/soho/parameters/moonray_DistantLight.ds index 2fa295a..21f9cbf 100644 --- a/houdini/soho/parameters/moonray_DistantLight.ds +++ b/houdini/soho/parameters/moonray_DistantLight.ds @@ -79,8 +79,8 @@ parmtag { "usdvaluetype" "token" } } parm { - name "xn__inputscolor_control_06a" - label "inputs:color" + name "xn__moonraycolor_control_o8a" + label "moonray:color" type string default { "none" } menujoin { @@ -94,19 +94,19 @@ parmtag { "sidefx::look" "icon" } } parm { - name "xn__inputscolor_zta" + name "xn__moonraycolor_nva" label "Color" type color size 3 default { "1" "1" "1" } help "The light's RGB values.\nThese are combined multiplicatively with the intensity and other attributes in determining the light's 3-channel radiance." - disablewhen "{ xn__inputscolor_control_06a == block } { xn__inputscolor_control_06a == none }" + disablewhen "{ xn__moonraycolor_control_o8a == block } { xn__moonraycolor_control_o8a == none }" range { 0 10 } parmtag { "usdvaluetype" "color3f" } } parm { - name "xn__inputsintensity_control_jeb" - label "inputs:intensity" + name "xn__moonrayintensity_control_6fb" + label "moonray:intensity" type string default { "none" } menujoin { @@ -120,18 +120,18 @@ parmtag { "sidefx::look" "icon" } } parm { - name "xn__inputsintensity_i0a" + name "xn__moonrayintensity_51a" label "Intensity" type float default { "1" } help "The light's intensity.\nThis is combined multiplicatively with the color and other attributes in determining the light's 3-channel radiance." - disablewhen "{ xn__inputsintensity_control_jeb == block } { xn__inputsintensity_control_jeb == none }" + disablewhen "{ xn__moonrayintensity_control_6fb == block } { xn__moonrayintensity_control_6fb == none }" range { 0 10 } parmtag { "usdvaluetype" "float" } } parm { - name "xn__inputsexposure_control_wcb" - label "inputs:exposure" + name "xn__moonrayexposure_control_keb" + label "moonray:exposure" type string default { "none" } menujoin { @@ -145,12 +145,12 @@ parmtag { "sidefx::look" "icon" } } parm { - name "xn__inputsexposure_vya" + name "xn__moonrayexposure_j0a" label "Exposure" type float default { "0" } help "The light's exposure value.\nThis value provides an alternative to the intensity value as a mechanism for controlling the light's overall brightness, and is inspired by the corresponding photographic term but is generalised to apply independently to each light. To calculate its effect, pow(2, exposure) is combined multiplicatively with the color and other attributes in determining the light's 3-channel radiance." - disablewhen "{ xn__inputsexposure_control_wcb == block } { xn__inputsexposure_control_wcb == none }" + disablewhen "{ xn__moonrayexposure_control_keb == block } { xn__moonrayexposure_control_keb == none }" range { 0 10 } parmtag { "usdvaluetype" "float" } } @@ -308,8 +308,8 @@ parmtag { "usdvaluetype" "string" } } parm { - name "xn__inputsnormalize_control_jeb" - label "inputs:normalize" + name "xn__moonraynormalized_control_thb" + label "moonray:normalized" type string default { "none" } menujoin { @@ -321,17 +321,17 @@ parmtag { "sidefx::look" "icon" } } parm { - name "xn__inputsnormalize_i0a" + name "xn__moonraynormalized_s3a" label "Normalized" type toggle default { "1" } help "If set to true, a normalisation factor is applied to the light's radiance. The normalisation factor used is such that if a distant light of radiance (1,1,1) is directly overhead a Lambertian surface of colour (1,1,1), the resulting outgoing radiance at the surface will be (1,1,1) regardless of the light's angular extent.\nIf set to false, the light's radiance is used as-is." - disablewhen "{ xn__inputsnormalize_control_jeb == block } { xn__inputsnormalize_control_jeb == none }" + disablewhen "{ xn__moonraynormalized_control_thb == block } { xn__moonraynormalized_control_thb == none }" parmtag { "usdvaluetype" "bool" } } parm { - name "xn__inputsangle_control_06a" - label "inputs:angle" + name "xn__moonrayangular_extent_control_cob" + label "moonray:angular_extent" type string default { "none" } menujoin { @@ -345,12 +345,12 @@ parmtag { "sidefx::look" "icon" } } parm { - name "xn__inputsangle_zta" + name "xn__moonrayangular_extent_bbb" label "Angular Extent" type float default { "0.53" } help "The angle in degrees subtended by the DistantLight's diameter." - disablewhen "{ xn__inputsangle_control_06a == block } { xn__inputsangle_control_06a == none }" + disablewhen "{ xn__moonrayangular_extent_control_cob == block } { xn__moonrayangular_extent_control_cob == none }" range { 0 10 } parmtag { "usdvaluetype" "float" } } diff --git a/houdini/soho/parameters/moonray_DwaBaseMaterial.ds b/houdini/soho/parameters/moonray_DwaBaseMaterial.ds index 15f1d21..e82ab8f 100644 --- a/houdini/soho/parameters/moonray_DwaBaseMaterial.ds +++ b/houdini/soho/parameters/moonray_DwaBaseMaterial.ds @@ -69,7 +69,7 @@ } parm { name "xn__inputsfuzz_roughness_n8a" - label "Fuzz Roughness" + label "Roughness" type float default { "0.25" } help "Lower values result in glancing angle highlights while higher values result in a broad, uniform coverage" @@ -94,7 +94,7 @@ } parm { name "xn__inputsfuzz_albedo_r3a" - label "Fuzz Albedo" + label "Albedo" type color size 3 default { "1" "1" "1" } @@ -140,7 +140,7 @@ } parm { name "xn__inputsfuzz_normal_r3a" - label "Fuzz Normal" + label "Normal" type oppath invisible default { "" } @@ -166,7 +166,7 @@ } parm { name "xn__inputsfuzz_normal_dial_wcb" - label "Fuzz Normal Dial" + label "Normal Dial" type float default { "1" } help "controls the amount of infuence of the alternate fuzz normal" @@ -244,7 +244,7 @@ } parm { name "xn__inputsclearcoat_model_99a" - label "Clearcoat Model" + label "Model" type string default { "GGX" } help "sets the normal distribution function for clearcoat. GGX is currently isotropic only" @@ -272,7 +272,7 @@ } parm { name "xn__inputsclearcoat_refractive_index_6sb" - label "Clearcoat Refractive Index" + label "Refractive Index" type float default { "1.5" } help "defines the Fresnel behavior" @@ -297,7 +297,7 @@ } parm { name "xn__inputsclearcoat_roughness_shb" - label "Clearcoat Roughness" + label "Roughness" type float default { "0.1" } help "the roughness of the clearcoat lobe" @@ -322,7 +322,7 @@ } parm { name "xn__inputsclearcoat_thickness_shb" - label "Clearcoat Thickness" + label "Thickness" type float default { "0" } help "the thickness of the virtual clearcoat layer. Values > 0 enable absorption" @@ -347,7 +347,7 @@ } parm { name "xn__inputsclearcoat_attenuation_color_tub" - label "Clearcoat Attenuation Color" + label "Attenuation Color" type color size 3 default { "0.5" "0.5" "0.5" } @@ -371,7 +371,7 @@ } parm { name "xn__inputsclearcoat_bending_jeb" - label "Clearcoat Bending" + label "Bending" type toggle default { "1" } help "(advanced, recommended ON) bends rays based on the clearcoat-refractive-index before evaluating the lobes under clearcoat" @@ -441,7 +441,7 @@ } parm { name "xn__inputsclearcoat_normal_dial_1kb" - label "Clearcoat Normal Dial" + label "Normal Dial" type float default { "1" } help "controls the amount of infuence of the alternate clearcoat normal" @@ -519,7 +519,7 @@ } parm { name "xn__inputsglitter_seed_e5a" - label "Glitter Seed" + label "Seed" type integer default { "0" } help "The seed for the glitter random number generator" @@ -544,7 +544,7 @@ } parm { name "xn__inputsglitter_space_06a" - label "Glitter Space" + label "Space" type string default { "reference" } help "The space to calculate the worley noise in, defaults to reference space" @@ -572,7 +572,7 @@ } parm { name "xn__inputsglitter_density_99a" - label "Glitter Density" + label "Density" type float default { "1" } help "controls the number of flakes per unit length; larger density packs more flakes into same space" @@ -597,7 +597,7 @@ } parm { name "xn__inputsglitter_randomness_5fb" - label "Glitter Randomness" + label "Randomness" type float default { "0.5" } help "randomness of flake orientation" @@ -622,7 +622,7 @@ } parm { name "xn__inputsglitter_layering_mode_1kb" - label "Glitter Layering Mode" + label "Layering Mode" type string default { "physical" } help "layering mode for glitter on top of the under material. physical: conserves energy and glitter attenuates under material, additive: breaks energy conservation but glitter is never darker than the under material (eg. use case: snow)" @@ -650,7 +650,7 @@ } parm { name "xn__inputsglitter_style_A_frequency_krb" - label "Glitter Style A Frequency" + label "Style A Frequency" type float default { "1" } help "0 implies none of this style, 1 implies all the flakes will get this style" @@ -675,7 +675,7 @@ } parm { name "xn__inputsglitter_size_A_n8a" - label "Glitter Size A" + label "Size A" type float default { "1" } help "size of the flakes. Apparent flake size may vary based on how much the flake spheres intersect the surface" @@ -700,7 +700,7 @@ } parm { name "xn__inputsglitter_roughness_A_shb" - label "Glitter Roughness A" + label "Roughness A" type float default { "0.14" } help "specular roughness of individual flakes (0 makes flakes mirror-like)" @@ -725,7 +725,7 @@ } parm { name "xn__inputsglitter_color_A_99a" - label "Glitter Color A" + label "Color A" type color size 3 default { "1" "1" "1" } @@ -749,7 +749,7 @@ } parm { name "xn__inputsglitter_texture_A_jeb" - label "Glitter Texture A" + label "Texture A" type file default { "" } help "filename that points to a texture .exr or .tx file (must be mip-mapped and tiled with maketx)." @@ -773,7 +773,7 @@ } parm { name "xn__inputsglitter_style_B_frequency_krb" - label "Glitter Style B Frequency" + label "Style B Frequency" type float default { "0" } help "0 implies none of this style, 1 implies all the flakes will get this style" @@ -798,7 +798,7 @@ } parm { name "xn__inputsglitter_size_B_n8a" - label "Glitter Size B" + label "Size B" type float default { "1" } help "size of the flakes. Apparent flake size may vary based on how much the flake spheres intersect the surface" @@ -823,7 +823,7 @@ } parm { name "xn__inputsglitter_roughness_B_shb" - label "Glitter Roughness B" + label "Roughness B" type float default { "0.14" } help "specular roughness of individual flakes (0 makes flakes mirror-like)" @@ -848,7 +848,7 @@ } parm { name "xn__inputsglitter_color_B_99a" - label "Glitter Color B" + label "Color B" type color size 3 default { "1" "1" "1" } @@ -872,7 +872,7 @@ } parm { name "xn__inputsglitter_texture_B_jeb" - label "Glitter Texture B" + label "Texture B" type file default { "" } help "filename that points to a texture .exr or .tx file (must be mip-mapped and tiled with maketx)." @@ -896,7 +896,7 @@ } parm { name "xn__inputsglitter_texture_orientation_randomness_qdc" - label "Glitter Texture Orientation Randomness" + label "Texture Orientation Randomness" type float default { "0.15" } help "randomly orient each texture" @@ -921,7 +921,7 @@ } parm { name "xn__inputsglitter_color_hue_variation_tub" - label "Glitter Color Hue Variation" + label "Color Hue Variation" type float default { "0" } help "introduce hue variation in flake color centered at the base flake color's hue on the hue wheel" @@ -946,7 +946,7 @@ } parm { name "xn__inputsglitter_color_saturation_variation_75b" - label "Glitter Color Saturation Variation" + label "Color Saturation Variation" type float default { "0" } help "introduce saturation variation in flake color centered at the base flake color's saturation" @@ -971,7 +971,7 @@ } parm { name "xn__inputsglitter_color_value_variation_2xb" - label "Glitter Color Value Variation" + label "Color Value Variation" type float default { "0" } help "introduce value variation in flake color centered at the base flake color's value" @@ -996,7 +996,7 @@ } parm { name "xn__inputsglitter_jitter_n8a" - label "Glitter Jitter" + label "Jitter" type float default { "1" } help "Controls how much the flakes are randomly offset from a regular grid" @@ -1019,7 +1019,7 @@ } parm { name "xn__inputsglitter_compensate_reference_space_deformation_rqc" - label "Glitter Compensate Reference Space Deformation" + label "Compensate Reference Space Deformation" type toggle default { "1" } help "(In ReferenceSpace) Compensates for stretch/compression/shear in glitter shapes resulting from animation etc" @@ -1041,7 +1041,7 @@ } parm { name "xn__inputsglitter_approximate_for_secondary_rays_qdc" - label "Glitter Approximate For Secondary Rays" + label "Approximate For Secondary Rays" type toggle default { "1" } help "use an approximation to shade glitter for non-mirror secondary rays" @@ -1065,7 +1065,7 @@ } parm { name "xn__inputsglitter_LOD_quality_shb" - label "Glitter LOD Quality" + label "LOD Quality" type float default { "0.5" } help "controls quality of glitter at distances where individual flakes cannot be perceived; at lower values, approximation kicks in earlier" @@ -1090,7 +1090,7 @@ } parm { name "xn__inputsglitter_debug_mode_5fb" - label "Glitter Debug Mode" + label "Debug Mode" type string default { "off" } help "developer debug visualization modes" @@ -1198,7 +1198,7 @@ } parm { name "xn__inputsspecular_model_n8a" - label "Specular Model" + label "Model" type string default { "GGX" } help "sets the normal distribution function for specular. GGX is currently isotropic only" @@ -1410,7 +1410,7 @@ } parm { name "xn__inputsiridescence_apply_to_fjb" - label "Iridescence Apply To" + label "Apply To" type string default { "primary specular" } help "Apply iridescence to primary specular lobe or clearcoat/moisture lobe" @@ -1438,7 +1438,7 @@ } parm { name "xn__inputsiridescence_color_control_krb" - label "Iridescence Color Control" + label "Color Control" type string default { "use hue interpolation" } help "use hue interpolation: automatically cycles through hue wheel, use ramp: user specified color ramp" @@ -1466,7 +1466,7 @@ } parm { name "xn__inputsiridescence_primary_color_krb" - label "Iridescence Primary Color" + label "Primary Color" type color size 3 default { "1" "0" "0" } @@ -1492,7 +1492,7 @@ } parm { name "xn__inputsiridescence_secondary_color_tub" - label "Iridescence Secondary Color" + label "Secondary Color" type color size 3 default { "1" "0" "0" } @@ -1516,7 +1516,7 @@ } parm { name "xn__inputsiridescence_flip_hue_direction_pzb" - label "Iridescence Flip Hue Direction" + label "Flip Hue Direction" type toggle default { "0" } help "flip interpolation around the hue wheel to counter-clockwise direction" @@ -1540,7 +1540,7 @@ } parm { name "xn__inputsiridescence_ramp_interpolation_mode_u7b" - label "Iridescence Ramp Interpolation Mode" + label "Ramp Interpolation Mode" type string default { "RGB" } help "RGB: lerp in RGB space which matches UI preview but can lose saturation, HSV: lerp in HSV space which preserves saturation" @@ -1568,7 +1568,7 @@ } parm { name "iridescence_ramp" - label "Iridescence Ramp" + label "Ramp" type ramp_rgb default { "7" } disablewhen "{ xn__inputsiridescence_colors_control_6sb == block } { xn__inputsiridescence_colors_control_6sb == none }" @@ -1592,7 +1592,7 @@ } parm { name "xn__inputsiridescence_thickness_1kb" - label "Iridescence Thickness" + label "Thickness" type float default { "1" } help "Controls how much the color spectrum is repeated" @@ -1617,7 +1617,7 @@ } parm { name "xn__inputsiridescence_exponent_fjb" - label "Iridescence Exponent" + label "Exponent" type float default { "1" } help "Tightens or broadens the distribution of colors" @@ -1642,7 +1642,7 @@ } parm { name "xn__inputsiridescence_at_0_incidence_6sb" - label "Iridescence At 0 Incidence" + label "At 0 Incidence" type float default { "1" } help "Iridescence effect at 0 degree viewing angle" @@ -1667,7 +1667,7 @@ } parm { name "xn__inputsiridescence_at_90_incidence_tub" - label "Iridescence At 90 Incidence" + label "At 90 Incidence" type float default { "1" } help "Iridescence effect at 90 degree viewing angle" @@ -1769,7 +1769,7 @@ } parm { name "xn__inputsdiffuse_roughness_jeb" - label "Diffuse Roughness" + label "Roughness" type float default { "0" } help "Roughness of the diffuse shading. If the value is zero a Lambertian model is used. If it's above zero the Oren Nayar model is used. Not compatible with subsurface scattering." @@ -1943,7 +1943,7 @@ } parm { name "xn__inputsdiffuse_transmission_fjb" - label "Diffuse Transmission" + label "Transmission" type float default { "1" } help "multiplier on the amount of light that is transmitted through the surface." @@ -1968,7 +1968,7 @@ } parm { name "xn__inputsdiffuse_transmission_color_6sb" - label "Diffuse Transmission Color" + label "Transmission Color" type color size 3 default { "0" "0" "0" } @@ -1994,7 +1994,7 @@ } parm { name "xn__inputsdiffuse_transmission_blending_behavior_qdc" - label "Diffuse Transmission Blending Behavior" + label "Transmission Blending Behavior" type string default { "Monochromatic" } help "Controls how diffuse transmission color attenuates diffuse reflection" @@ -2075,7 +2075,7 @@ } parm { name "xn__inputstransmission_color_5fb" - label "Transmission Color" + label "Color" type color size 3 default { "1" "1" "1" } diff --git a/houdini/soho/parameters/moonray_DwaColorCorrectMaterial.ds b/houdini/soho/parameters/moonray_DwaColorCorrectMaterial.ds index 843541b..d360691 100644 --- a/houdini/soho/parameters/moonray_DwaColorCorrectMaterial.ds +++ b/houdini/soho/parameters/moonray_DwaColorCorrectMaterial.ds @@ -101,7 +101,7 @@ } parm { name "xn__inputsTMI_enabled_r3a" - label "TMI Enabled" + label "Enabled" type toggle default { "0" } help "enables the TMI parameters" diff --git a/houdini/soho/parameters/moonray_DwaFabricMaterial.ds b/houdini/soho/parameters/moonray_DwaFabricMaterial.ds index 810df39..2435fb3 100644 --- a/houdini/soho/parameters/moonray_DwaFabricMaterial.ds +++ b/houdini/soho/parameters/moonray_DwaFabricMaterial.ds @@ -69,7 +69,7 @@ } parm { name "xn__inputsfuzz_roughness_n8a" - label "Fuzz Roughness" + label "Roughness" type float default { "0.25" } help "Lower values result in glancing angle highlights while higher values result in a broad, uniform coverage" @@ -94,7 +94,7 @@ } parm { name "xn__inputsfuzz_albedo_r3a" - label "Fuzz Albedo" + label "Albedo" type color size 3 default { "1" "1" "1" } @@ -140,7 +140,7 @@ } parm { name "xn__inputsfuzz_normal_r3a" - label "Fuzz Normal" + label "Normal" type oppath invisible default { "" } @@ -166,7 +166,7 @@ } parm { name "xn__inputsfuzz_normal_dial_wcb" - label "Fuzz Normal Dial" + label "Normal Dial" type float default { "1" } help "controls the amount of infuence of the alternate fuzz normal" @@ -244,7 +244,7 @@ } parm { name "xn__inputsglitter_seed_e5a" - label "Glitter Seed" + label "Seed" type integer default { "0" } help "The seed for the glitter random number generator" @@ -269,7 +269,7 @@ } parm { name "xn__inputsglitter_space_06a" - label "Glitter Space" + label "Space" type string default { "reference" } help "The space to calculate the worley noise in, defaults to reference space" @@ -297,7 +297,7 @@ } parm { name "xn__inputsglitter_density_99a" - label "Glitter Density" + label "Density" type float default { "1" } help "controls the number of flakes per unit length; larger density packs more flakes into same space" @@ -322,7 +322,7 @@ } parm { name "xn__inputsglitter_randomness_5fb" - label "Glitter Randomness" + label "Randomness" type float default { "0.5" } help "randomness of flake orientation" @@ -347,7 +347,7 @@ } parm { name "xn__inputsglitter_layering_mode_1kb" - label "Glitter Layering Mode" + label "Layering Mode" type string default { "physical" } help "layering mode for glitter on top of the under material. physical: conserves energy and glitter attenuates under material, additive: breaks energy conservation but glitter is never darker than the under material (eg. use case: snow)" @@ -375,7 +375,7 @@ } parm { name "xn__inputsglitter_style_A_frequency_krb" - label "Glitter Style A Frequency" + label "Style A Frequency" type float default { "1" } help "0 implies none of this style, 1 implies all the flakes will get this style" @@ -400,7 +400,7 @@ } parm { name "xn__inputsglitter_size_A_n8a" - label "Glitter Size A" + label "Size A" type float default { "1" } help "size of the flakes. Apparent flake size may vary based on how much the flake spheres intersect the surface" @@ -425,7 +425,7 @@ } parm { name "xn__inputsglitter_roughness_A_shb" - label "Glitter Roughness A" + label "Roughness A" type float default { "0.14" } help "specular roughness of individual flakes (0 makes flakes mirror-like)" @@ -450,7 +450,7 @@ } parm { name "xn__inputsglitter_color_A_99a" - label "Glitter Color A" + label "Color A" type color size 3 default { "1" "1" "1" } @@ -474,7 +474,7 @@ } parm { name "xn__inputsglitter_texture_A_jeb" - label "Glitter Texture A" + label "Texture A" type file default { "" } help "filename that points to a texture .exr or .tx file (must be mip-mapped and tiled with maketx)." @@ -498,7 +498,7 @@ } parm { name "xn__inputsglitter_style_B_frequency_krb" - label "Glitter Style B Frequency" + label "Style B Frequency" type float default { "0" } help "0 implies none of this style, 1 implies all the flakes will get this style" @@ -523,7 +523,7 @@ } parm { name "xn__inputsglitter_size_B_n8a" - label "Glitter Size B" + label "Size B" type float default { "1" } help "size of the flakes. Apparent flake size may vary based on how much the flake spheres intersect the surface" @@ -548,7 +548,7 @@ } parm { name "xn__inputsglitter_roughness_B_shb" - label "Glitter Roughness B" + label "Roughness B" type float default { "0.14" } help "specular roughness of individual flakes (0 makes flakes mirror-like)" @@ -573,7 +573,7 @@ } parm { name "xn__inputsglitter_color_B_99a" - label "Glitter Color B" + label "Color B" type color size 3 default { "1" "1" "1" } @@ -597,7 +597,7 @@ } parm { name "xn__inputsglitter_texture_B_jeb" - label "Glitter Texture B" + label "Texture B" type file default { "" } help "filename that points to a texture .exr or .tx file (must be mip-mapped and tiled with maketx)." @@ -621,7 +621,7 @@ } parm { name "xn__inputsglitter_texture_orientation_randomness_qdc" - label "Glitter Texture Orientation Randomness" + label "Texture Orientation Randomness" type float default { "0.15" } help "randomly orient each texture" @@ -646,7 +646,7 @@ } parm { name "xn__inputsglitter_color_hue_variation_tub" - label "Glitter Color Hue Variation" + label "Color Hue Variation" type float default { "0" } help "introduce hue variation in flake color centered at the base flake color's hue on the hue wheel" @@ -671,7 +671,7 @@ } parm { name "xn__inputsglitter_color_saturation_variation_75b" - label "Glitter Color Saturation Variation" + label "Color Saturation Variation" type float default { "0" } help "introduce saturation variation in flake color centered at the base flake color's saturation" @@ -696,7 +696,7 @@ } parm { name "xn__inputsglitter_color_value_variation_2xb" - label "Glitter Color Value Variation" + label "Color Value Variation" type float default { "0" } help "introduce value variation in flake color centered at the base flake color's value" @@ -721,7 +721,7 @@ } parm { name "xn__inputsglitter_jitter_n8a" - label "Glitter Jitter" + label "Jitter" type float default { "1" } help "Controls how much the flakes are randomly offset from a regular grid" @@ -744,7 +744,7 @@ } parm { name "xn__inputsglitter_compensate_reference_space_deformation_rqc" - label "Glitter Compensate Reference Space Deformation" + label "Compensate Reference Space Deformation" type toggle default { "1" } help "(In ReferenceSpace) Compensates for stretch/compression/shear in glitter shapes resulting from animation etc" @@ -766,7 +766,7 @@ } parm { name "xn__inputsglitter_approximate_for_secondary_rays_qdc" - label "Glitter Approximate For Secondary Rays" + label "Approximate For Secondary Rays" type toggle default { "1" } help "use an approximation to shade glitter for non-mirror secondary rays" @@ -790,7 +790,7 @@ } parm { name "xn__inputsglitter_LOD_quality_shb" - label "Glitter LOD Quality" + label "LOD Quality" type float default { "0.5" } help "controls quality of glitter at distances where individual flakes cannot be perceived; at lower values, approximation kicks in earlier" @@ -815,7 +815,7 @@ } parm { name "xn__inputsglitter_debug_mode_5fb" - label "Glitter Debug Mode" + label "Debug Mode" type string default { "off" } help "developer debug visualization modes" @@ -1100,7 +1100,7 @@ } parm { name "xn__inputsdiffuse_roughness_jeb" - label "Diffuse Roughness" + label "Roughness" type float default { "0" } help "Roughness of the diffuse shading. If the value is zero a Lambertian model is used. If it's above zero the Oren Nayar model is used. Not compatible with subsurface scattering." @@ -1125,7 +1125,7 @@ } parm { name "xn__inputsdiffuse_transmission_fjb" - label "Diffuse Transmission" + label "Transmission" type float default { "1" } help "multiplier on the amount of light that is transmitted through the surface." @@ -1150,7 +1150,7 @@ } parm { name "xn__inputsdiffuse_transmission_color_6sb" - label "Diffuse Transmission Color" + label "Transmission Color" type color size 3 default { "0" "0" "0" } @@ -1176,7 +1176,7 @@ } parm { name "xn__inputsdiffuse_transmission_blending_behavior_qdc" - label "Diffuse Transmission Blending Behavior" + label "Transmission Blending Behavior" type string default { "Monochromatic" } help "Controls how diffuse transmission color attenuates diffuse reflection" diff --git a/houdini/soho/parameters/moonray_DwaMetalMaterial.ds b/houdini/soho/parameters/moonray_DwaMetalMaterial.ds index 3e37b8a..6014e23 100644 --- a/houdini/soho/parameters/moonray_DwaMetalMaterial.ds +++ b/houdini/soho/parameters/moonray_DwaMetalMaterial.ds @@ -69,7 +69,7 @@ } parm { name "xn__inputsfuzz_roughness_n8a" - label "Fuzz Roughness" + label "Roughness" type float default { "0.25" } help "Lower values result in glancing angle highlights while higher values result in a broad, uniform coverage" @@ -94,7 +94,7 @@ } parm { name "xn__inputsfuzz_albedo_r3a" - label "Fuzz Albedo" + label "Albedo" type color size 3 default { "1" "1" "1" } @@ -140,7 +140,7 @@ } parm { name "xn__inputsfuzz_normal_r3a" - label "Fuzz Normal" + label "Normal" type oppath invisible default { "" } @@ -166,7 +166,7 @@ } parm { name "xn__inputsfuzz_normal_dial_wcb" - label "Fuzz Normal Dial" + label "Normal Dial" type float default { "1" } help "controls the amount of infuence of the alternate fuzz normal" @@ -244,7 +244,7 @@ } parm { name "xn__inputsclearcoat_model_99a" - label "Clearcoat Model" + label "Model" type string default { "GGX" } help "sets the normal distribution function for clearcoat. GGX is currently isotropic only" @@ -272,7 +272,7 @@ } parm { name "xn__inputsclearcoat_refractive_index_6sb" - label "Clearcoat Refractive Index" + label "Refractive Index" type float default { "1.5" } help "defines the Fresnel behavior" @@ -297,7 +297,7 @@ } parm { name "xn__inputsclearcoat_roughness_shb" - label "Clearcoat Roughness" + label "Roughness" type float default { "0.1" } help "the roughness of the clearcoat lobe" @@ -322,7 +322,7 @@ } parm { name "xn__inputsclearcoat_thickness_shb" - label "Clearcoat Thickness" + label "Thickness" type float default { "0" } help "the thickness of the virtual clearcoat layer. Values > 0 enable absorption" @@ -347,7 +347,7 @@ } parm { name "xn__inputsclearcoat_attenuation_color_tub" - label "Clearcoat Attenuation Color" + label "Attenuation Color" type color size 3 default { "0.5" "0.5" "0.5" } @@ -371,7 +371,7 @@ } parm { name "xn__inputsclearcoat_bending_jeb" - label "Clearcoat Bending" + label "Bending" type toggle default { "1" } help "(advanced, recommended ON) bends rays based on the clearcoat-refractive-index before evaluating the lobes under clearcoat" @@ -441,7 +441,7 @@ } parm { name "xn__inputsclearcoat_normal_dial_1kb" - label "Clearcoat Normal Dial" + label "Normal Dial" type float default { "1" } help "controls the amount of infuence of the alternate clearcoat normal" @@ -519,7 +519,7 @@ } parm { name "xn__inputsglitter_seed_e5a" - label "Glitter Seed" + label "Seed" type integer default { "0" } help "The seed for the glitter random number generator" @@ -544,7 +544,7 @@ } parm { name "xn__inputsglitter_space_06a" - label "Glitter Space" + label "Space" type string default { "reference" } help "The space to calculate the worley noise in, defaults to reference space" @@ -572,7 +572,7 @@ } parm { name "xn__inputsglitter_density_99a" - label "Glitter Density" + label "Density" type float default { "1" } help "controls the number of flakes per unit length; larger density packs more flakes into same space" @@ -597,7 +597,7 @@ } parm { name "xn__inputsglitter_randomness_5fb" - label "Glitter Randomness" + label "Randomness" type float default { "0.5" } help "randomness of flake orientation" @@ -622,7 +622,7 @@ } parm { name "xn__inputsglitter_layering_mode_1kb" - label "Glitter Layering Mode" + label "Layering Mode" type string default { "physical" } help "layering mode for glitter on top of the under material. physical: conserves energy and glitter attenuates under material, additive: breaks energy conservation but glitter is never darker than the under material (eg. use case: snow)" @@ -650,7 +650,7 @@ } parm { name "xn__inputsglitter_style_A_frequency_krb" - label "Glitter Style A Frequency" + label "Style A Frequency" type float default { "1" } help "0 implies none of this style, 1 implies all the flakes will get this style" @@ -675,7 +675,7 @@ } parm { name "xn__inputsglitter_size_A_n8a" - label "Glitter Size A" + label "Size A" type float default { "1" } help "size of the flakes. Apparent flake size may vary based on how much the flake spheres intersect the surface" @@ -700,7 +700,7 @@ } parm { name "xn__inputsglitter_roughness_A_shb" - label "Glitter Roughness A" + label "Roughness A" type float default { "0.14" } help "specular roughness of individual flakes (0 makes flakes mirror-like)" @@ -725,7 +725,7 @@ } parm { name "xn__inputsglitter_color_A_99a" - label "Glitter Color A" + label "Color A" type color size 3 default { "1" "1" "1" } @@ -749,7 +749,7 @@ } parm { name "xn__inputsglitter_texture_A_jeb" - label "Glitter Texture A" + label "Texture A" type file default { "" } help "filename that points to a texture .exr or .tx file (must be mip-mapped and tiled with maketx)." @@ -773,7 +773,7 @@ } parm { name "xn__inputsglitter_style_B_frequency_krb" - label "Glitter Style B Frequency" + label "Style B Frequency" type float default { "0" } help "0 implies none of this style, 1 implies all the flakes will get this style" @@ -798,7 +798,7 @@ } parm { name "xn__inputsglitter_size_B_n8a" - label "Glitter Size B" + label "Size B" type float default { "1" } help "size of the flakes. Apparent flake size may vary based on how much the flake spheres intersect the surface" @@ -823,7 +823,7 @@ } parm { name "xn__inputsglitter_roughness_B_shb" - label "Glitter Roughness B" + label "Roughness B" type float default { "0.14" } help "specular roughness of individual flakes (0 makes flakes mirror-like)" @@ -848,7 +848,7 @@ } parm { name "xn__inputsglitter_color_B_99a" - label "Glitter Color B" + label "Color B" type color size 3 default { "1" "1" "1" } @@ -872,7 +872,7 @@ } parm { name "xn__inputsglitter_texture_B_jeb" - label "Glitter Texture B" + label "Texture B" type file default { "" } help "filename that points to a texture .exr or .tx file (must be mip-mapped and tiled with maketx)." @@ -896,7 +896,7 @@ } parm { name "xn__inputsglitter_texture_orientation_randomness_qdc" - label "Glitter Texture Orientation Randomness" + label "Texture Orientation Randomness" type float default { "0.15" } help "randomly orient each texture" @@ -921,7 +921,7 @@ } parm { name "xn__inputsglitter_color_hue_variation_tub" - label "Glitter Color Hue Variation" + label "Color Hue Variation" type float default { "0" } help "introduce hue variation in flake color centered at the base flake color's hue on the hue wheel" @@ -946,7 +946,7 @@ } parm { name "xn__inputsglitter_color_saturation_variation_75b" - label "Glitter Color Saturation Variation" + label "Color Saturation Variation" type float default { "0" } help "introduce saturation variation in flake color centered at the base flake color's saturation" @@ -971,7 +971,7 @@ } parm { name "xn__inputsglitter_color_value_variation_2xb" - label "Glitter Color Value Variation" + label "Color Value Variation" type float default { "0" } help "introduce value variation in flake color centered at the base flake color's value" @@ -996,7 +996,7 @@ } parm { name "xn__inputsglitter_jitter_n8a" - label "Glitter Jitter" + label "Jitter" type float default { "1" } help "Controls how much the flakes are randomly offset from a regular grid" @@ -1019,7 +1019,7 @@ } parm { name "xn__inputsglitter_compensate_reference_space_deformation_rqc" - label "Glitter Compensate Reference Space Deformation" + label "Compensate Reference Space Deformation" type toggle default { "1" } help "(In ReferenceSpace) Compensates for stretch/compression/shear in glitter shapes resulting from animation etc" @@ -1041,7 +1041,7 @@ } parm { name "xn__inputsglitter_approximate_for_secondary_rays_qdc" - label "Glitter Approximate For Secondary Rays" + label "Approximate For Secondary Rays" type toggle default { "1" } help "use an approximation to shade glitter for non-mirror secondary rays" @@ -1065,7 +1065,7 @@ } parm { name "xn__inputsglitter_LOD_quality_shb" - label "Glitter LOD Quality" + label "LOD Quality" type float default { "0.5" } help "controls quality of glitter at distances where individual flakes cannot be perceived; at lower values, approximation kicks in earlier" @@ -1090,7 +1090,7 @@ } parm { name "xn__inputsglitter_debug_mode_5fb" - label "Glitter Debug Mode" + label "Debug Mode" type string default { "off" } help "developer debug visualization modes" @@ -1150,7 +1150,7 @@ } parm { name "xn__inputsspecular_model_n8a" - label "Specular Model" + label "Model" type string default { "GGX" } help "sets the normal distribution function for specular. GGX is currently isotropic only" @@ -1337,7 +1337,7 @@ } parm { name "xn__inputsiridescence_apply_to_fjb" - label "Iridescence Apply To" + label "Apply To" type string default { "primary specular" } help "Apply iridescence to primary specular lobe or clearcoat/moisture lobe" @@ -1365,7 +1365,7 @@ } parm { name "xn__inputsiridescence_color_control_krb" - label "Iridescence Color Control" + label "Color Control" type string default { "use hue interpolation" } help "use hue interpolation: automatically cycles through hue wheel, use ramp: user specified color ramp" @@ -1393,7 +1393,7 @@ } parm { name "xn__inputsiridescence_primary_color_krb" - label "Iridescence Primary Color" + label "Primary Color" type color size 3 default { "1" "0" "0" } @@ -1419,7 +1419,7 @@ } parm { name "xn__inputsiridescence_secondary_color_tub" - label "Iridescence Secondary Color" + label "Secondary Color" type color size 3 default { "1" "0" "0" } @@ -1443,7 +1443,7 @@ } parm { name "xn__inputsiridescence_flip_hue_direction_pzb" - label "Iridescence Flip Hue Direction" + label "Flip Hue Direction" type toggle default { "0" } help "flip interpolation around the hue wheel to counter-clockwise direction" @@ -1467,7 +1467,7 @@ } parm { name "xn__inputsiridescence_ramp_interpolation_mode_u7b" - label "Iridescence Ramp Interpolation Mode" + label "Ramp Interpolation Mode" type string default { "RGB" } help "RGB: lerp in RGB space which matches UI preview but can lose saturation, HSV: lerp in HSV space which preserves saturation" @@ -1495,7 +1495,7 @@ } parm { name "iridescence_ramp" - label "Iridescence Ramp" + label "Ramp" type ramp_rgb default { "7" } disablewhen "{ xn__inputsiridescence_colors_control_6sb == block } { xn__inputsiridescence_colors_control_6sb == none }" @@ -1519,7 +1519,7 @@ } parm { name "xn__inputsiridescence_thickness_1kb" - label "Iridescence Thickness" + label "Thickness" type float default { "1" } help "Controls how much the color spectrum is repeated" @@ -1544,7 +1544,7 @@ } parm { name "xn__inputsiridescence_exponent_fjb" - label "Iridescence Exponent" + label "Exponent" type float default { "1" } help "Tightens or broadens the distribution of colors" @@ -1569,7 +1569,7 @@ } parm { name "xn__inputsiridescence_at_0_incidence_6sb" - label "Iridescence At 0 Incidence" + label "At 0 Incidence" type float default { "1" } help "Iridescence effect at 0 degree viewing angle" @@ -1594,7 +1594,7 @@ } parm { name "xn__inputsiridescence_at_90_incidence_tub" - label "Iridescence At 90 Incidence" + label "At 90 Incidence" type float default { "1" } help "Iridescence effect at 90 degree viewing angle" diff --git a/houdini/soho/parameters/moonray_DwaRefractiveMaterial.ds b/houdini/soho/parameters/moonray_DwaRefractiveMaterial.ds index 1a00349..c8c80dc 100644 --- a/houdini/soho/parameters/moonray_DwaRefractiveMaterial.ds +++ b/houdini/soho/parameters/moonray_DwaRefractiveMaterial.ds @@ -69,7 +69,7 @@ } parm { name "xn__inputsfuzz_roughness_n8a" - label "Fuzz Roughness" + label "Roughness" type float default { "0.25" } help "Lower values result in glancing angle highlights while higher values result in a broad, uniform coverage" @@ -94,7 +94,7 @@ } parm { name "xn__inputsfuzz_albedo_r3a" - label "Fuzz Albedo" + label "Albedo" type color size 3 default { "1" "1" "1" } @@ -140,7 +140,7 @@ } parm { name "xn__inputsfuzz_normal_r3a" - label "Fuzz Normal" + label "Normal" type oppath invisible default { "" } @@ -166,7 +166,7 @@ } parm { name "xn__inputsfuzz_normal_dial_wcb" - label "Fuzz Normal Dial" + label "Normal Dial" type float default { "1" } help "controls the amount of infuence of the alternate fuzz normal" @@ -244,7 +244,7 @@ } parm { name "xn__inputsclearcoat_model_99a" - label "Clearcoat Model" + label "Model" type string default { "GGX" } help "sets the normal distribution function for clearcoat. GGX is currently isotropic only" @@ -272,7 +272,7 @@ } parm { name "xn__inputsclearcoat_refractive_index_6sb" - label "Clearcoat Refractive Index" + label "Refractive Index" type float default { "1.5" } help "defines the Fresnel behavior" @@ -297,7 +297,7 @@ } parm { name "xn__inputsclearcoat_roughness_shb" - label "Clearcoat Roughness" + label "Roughness" type float default { "0.1" } help "the roughness of the clearcoat lobe" @@ -322,7 +322,7 @@ } parm { name "xn__inputsclearcoat_thickness_shb" - label "Clearcoat Thickness" + label "Thickness" type float default { "0" } help "the thickness of the virtual clearcoat layer. Values > 0 enable absorption" @@ -347,7 +347,7 @@ } parm { name "xn__inputsclearcoat_attenuation_color_tub" - label "Clearcoat Attenuation Color" + label "Attenuation Color" type color size 3 default { "0.5" "0.5" "0.5" } @@ -371,7 +371,7 @@ } parm { name "xn__inputsclearcoat_bending_jeb" - label "Clearcoat Bending" + label "Bending" type toggle default { "1" } help "(advanced, recommended ON) bends rays based on the clearcoat-refractive-index before evaluating the lobes under clearcoat" @@ -441,7 +441,7 @@ } parm { name "xn__inputsclearcoat_normal_dial_1kb" - label "Clearcoat Normal Dial" + label "Normal Dial" type float default { "1" } help "controls the amount of infuence of the alternate clearcoat normal" @@ -517,7 +517,7 @@ } parm { name "xn__inputsspecular_model_n8a" - label "Specular Model" + label "Model" type string default { "GGX" } help "sets the normal distribution function for specular. GGX is currently isotropic only" @@ -677,7 +677,7 @@ } parm { name "xn__inputsiridescence_apply_to_fjb" - label "Iridescence Apply To" + label "Apply To" type string default { "primary specular" } help "Apply iridescence to primary specular lobe or clearcoat/moisture lobe" @@ -705,7 +705,7 @@ } parm { name "xn__inputsiridescence_color_control_krb" - label "Iridescence Color Control" + label "Color Control" type string default { "use hue interpolation" } help "use hue interpolation: automatically cycles through hue wheel, use ramp: user specified color ramp" @@ -733,7 +733,7 @@ } parm { name "xn__inputsiridescence_primary_color_krb" - label "Iridescence Primary Color" + label "Primary Color" type color size 3 default { "1" "0" "0" } @@ -759,7 +759,7 @@ } parm { name "xn__inputsiridescence_secondary_color_tub" - label "Iridescence Secondary Color" + label "Secondary Color" type color size 3 default { "1" "0" "0" } @@ -783,7 +783,7 @@ } parm { name "xn__inputsiridescence_flip_hue_direction_pzb" - label "Iridescence Flip Hue Direction" + label "Flip Hue Direction" type toggle default { "0" } help "flip interpolation around the hue wheel to counter-clockwise direction" @@ -807,7 +807,7 @@ } parm { name "xn__inputsiridescence_ramp_interpolation_mode_u7b" - label "Iridescence Ramp Interpolation Mode" + label "Ramp Interpolation Mode" type string default { "RGB" } help "RGB: lerp in RGB space which matches UI preview but can lose saturation, HSV: lerp in HSV space which preserves saturation" @@ -835,7 +835,7 @@ } parm { name "iridescence_ramp" - label "Iridescence Ramp" + label "Ramp" type ramp_rgb default { "7" } disablewhen "{ xn__inputsiridescence_colors_control_6sb == block } { xn__inputsiridescence_colors_control_6sb == none }" @@ -859,7 +859,7 @@ } parm { name "xn__inputsiridescence_thickness_1kb" - label "Iridescence Thickness" + label "Thickness" type float default { "1" } help "Controls how much the color spectrum is repeated" @@ -884,7 +884,7 @@ } parm { name "xn__inputsiridescence_exponent_fjb" - label "Iridescence Exponent" + label "Exponent" type float default { "1" } help "Tightens or broadens the distribution of colors" @@ -909,7 +909,7 @@ } parm { name "xn__inputsiridescence_at_0_incidence_6sb" - label "Iridescence At 0 Incidence" + label "At 0 Incidence" type float default { "1" } help "Iridescence effect at 0 degree viewing angle" @@ -934,7 +934,7 @@ } parm { name "xn__inputsiridescence_at_90_incidence_tub" - label "Iridescence At 90 Incidence" + label "At 90 Incidence" type float default { "1" } help "Iridescence effect at 90 degree viewing angle" @@ -987,7 +987,7 @@ } parm { name "xn__inputstransmission_color_5fb" - label "Transmission Color" + label "Color" type color size 3 default { "1" "1" "1" } diff --git a/houdini/soho/parameters/moonray_DwaSkinMaterial.ds b/houdini/soho/parameters/moonray_DwaSkinMaterial.ds index 3959efe..783bd69 100644 --- a/houdini/soho/parameters/moonray_DwaSkinMaterial.ds +++ b/houdini/soho/parameters/moonray_DwaSkinMaterial.ds @@ -69,7 +69,7 @@ } parm { name "xn__inputsfuzz_roughness_n8a" - label "Fuzz Roughness" + label "Roughness" type float default { "0.25" } help "Lower values result in glancing angle highlights while higher values result in a broad, uniform coverage" @@ -94,7 +94,7 @@ } parm { name "xn__inputsfuzz_albedo_r3a" - label "Fuzz Albedo" + label "Albedo" type color size 3 default { "1" "1" "1" } @@ -140,7 +140,7 @@ } parm { name "xn__inputsfuzz_normal_r3a" - label "Fuzz Normal" + label "Normal" type oppath invisible default { "" } @@ -166,7 +166,7 @@ } parm { name "xn__inputsfuzz_normal_dial_wcb" - label "Fuzz Normal Dial" + label "Normal Dial" type float default { "1" } help "controls the amount of infuence of the alternate fuzz normal" @@ -219,7 +219,7 @@ } parm { name "xn__inputsmoisture_model_n8a" - label "Moisture Model" + label "Model" type string default { "GGX" } help "sets the normal distribution function for the moisture specular. GGX is currently isotropic only" @@ -247,7 +247,7 @@ } parm { name "xn__inputsmoisture_mask_06a" - label "Moisture Mask" + label "Mask" type float default { "1" } help "bind map here, higher values for oily zones" @@ -272,7 +272,7 @@ } parm { name "xn__inputsmoisture_refractive_index_krb" - label "Moisture Refractive Index" + label "Refractive Index" type float default { "1.5" } help "defines the Fresnel behavior of moisture, and all underlying skin layers" @@ -297,7 +297,7 @@ } parm { name "xn__inputsmoisture_roughness_5fb" - label "Moisture Roughness" + label "Roughness" type float default { "0.25" } help "roughness of moisture; binding a map here should rarely be necessary" @@ -368,7 +368,7 @@ } parm { name "xn__inputsmoisture_normal_dial_fjb" - label "Moisture Normal Dial" + label "Normal Dial" type float default { "1" } help "controls the amount of influence of the alternate Moisture normal" @@ -446,7 +446,7 @@ } parm { name "xn__inputsglitter_seed_e5a" - label "Glitter Seed" + label "Seed" type integer default { "0" } help "The seed for the glitter random number generator" @@ -471,7 +471,7 @@ } parm { name "xn__inputsglitter_space_06a" - label "Glitter Space" + label "Space" type string default { "reference" } help "The space to calculate the worley noise in, defaults to reference space" @@ -499,7 +499,7 @@ } parm { name "xn__inputsglitter_density_99a" - label "Glitter Density" + label "Density" type float default { "1" } help "controls the number of flakes per unit length; larger density packs more flakes into same space" @@ -524,7 +524,7 @@ } parm { name "xn__inputsglitter_randomness_5fb" - label "Glitter Randomness" + label "Randomness" type float default { "0.5" } help "randomness of flake orientation" @@ -549,7 +549,7 @@ } parm { name "xn__inputsglitter_layering_mode_1kb" - label "Glitter Layering Mode" + label "Layering Mode" type string default { "physical" } help "layering mode for glitter on top of the under material. physical: conserves energy and glitter attenuates under material, additive: breaks energy conservation but glitter is never darker than the under material (eg. use case: snow)" @@ -577,7 +577,7 @@ } parm { name "xn__inputsglitter_style_A_frequency_krb" - label "Glitter Style A Frequency" + label "Style A Frequency" type float default { "1" } help "0 implies none of this style, 1 implies all the flakes will get this style" @@ -602,7 +602,7 @@ } parm { name "xn__inputsglitter_size_A_n8a" - label "Glitter Size A" + label "Size A" type float default { "1" } help "size of the flakes. Apparent flake size may vary based on how much the flake spheres intersect the surface" @@ -627,7 +627,7 @@ } parm { name "xn__inputsglitter_roughness_A_shb" - label "Glitter Roughness A" + label "Roughness A" type float default { "0.14" } help "specular roughness of individual flakes (0 makes flakes mirror-like)" @@ -652,7 +652,7 @@ } parm { name "xn__inputsglitter_color_A_99a" - label "Glitter Color A" + label "Color A" type color size 3 default { "1" "1" "1" } @@ -676,7 +676,7 @@ } parm { name "xn__inputsglitter_texture_A_jeb" - label "Glitter Texture A" + label "Texture A" type file default { "" } help "filename that points to a texture .exr or .tx file (must be mip-mapped and tiled with maketx)." @@ -700,7 +700,7 @@ } parm { name "xn__inputsglitter_style_B_frequency_krb" - label "Glitter Style B Frequency" + label "Style B Frequency" type float default { "0" } help "0 implies none of this style, 1 implies all the flakes will get this style" @@ -725,7 +725,7 @@ } parm { name "xn__inputsglitter_size_B_n8a" - label "Glitter Size B" + label "Size B" type float default { "1" } help "size of the flakes. Apparent flake size may vary based on how much the flake spheres intersect the surface" @@ -750,7 +750,7 @@ } parm { name "xn__inputsglitter_roughness_B_shb" - label "Glitter Roughness B" + label "Roughness B" type float default { "0.14" } help "specular roughness of individual flakes (0 makes flakes mirror-like)" @@ -775,7 +775,7 @@ } parm { name "xn__inputsglitter_color_B_99a" - label "Glitter Color B" + label "Color B" type color size 3 default { "1" "1" "1" } @@ -799,7 +799,7 @@ } parm { name "xn__inputsglitter_texture_B_jeb" - label "Glitter Texture B" + label "Texture B" type file default { "" } help "filename that points to a texture .exr or .tx file (must be mip-mapped and tiled with maketx)." @@ -823,7 +823,7 @@ } parm { name "xn__inputsglitter_texture_orientation_randomness_qdc" - label "Glitter Texture Orientation Randomness" + label "Texture Orientation Randomness" type float default { "0.15" } help "randomly orient each texture" @@ -848,7 +848,7 @@ } parm { name "xn__inputsglitter_color_hue_variation_tub" - label "Glitter Color Hue Variation" + label "Color Hue Variation" type float default { "0" } help "introduce hue variation in flake color centered at the base flake color's hue on the hue wheel" @@ -873,7 +873,7 @@ } parm { name "xn__inputsglitter_color_saturation_variation_75b" - label "Glitter Color Saturation Variation" + label "Color Saturation Variation" type float default { "0" } help "introduce saturation variation in flake color centered at the base flake color's saturation" @@ -898,7 +898,7 @@ } parm { name "xn__inputsglitter_color_value_variation_2xb" - label "Glitter Color Value Variation" + label "Color Value Variation" type float default { "0" } help "introduce value variation in flake color centered at the base flake color's value" @@ -923,7 +923,7 @@ } parm { name "xn__inputsglitter_jitter_n8a" - label "Glitter Jitter" + label "Jitter" type float default { "1" } help "Controls how much the flakes are randomly offset from a regular grid" @@ -946,7 +946,7 @@ } parm { name "xn__inputsglitter_compensate_reference_space_deformation_rqc" - label "Glitter Compensate Reference Space Deformation" + label "Compensate Reference Space Deformation" type toggle default { "1" } help "(In ReferenceSpace) Compensates for stretch/compression/shear in glitter shapes resulting from animation etc" @@ -968,7 +968,7 @@ } parm { name "xn__inputsglitter_approximate_for_secondary_rays_qdc" - label "Glitter Approximate For Secondary Rays" + label "Approximate For Secondary Rays" type toggle default { "1" } help "use an approximation to shade glitter for non-mirror secondary rays" @@ -992,7 +992,7 @@ } parm { name "xn__inputsglitter_LOD_quality_shb" - label "Glitter LOD Quality" + label "LOD Quality" type float default { "0.5" } help "controls quality of glitter at distances where individual flakes cannot be perceived; at lower values, approximation kicks in earlier" @@ -1017,7 +1017,7 @@ } parm { name "xn__inputsglitter_debug_mode_5fb" - label "Glitter Debug Mode" + label "Debug Mode" type string default { "off" } help "developer debug visualization modes" @@ -1100,7 +1100,7 @@ } parm { name "xn__inputsspecular_model_n8a" - label "Specular Model" + label "Model" type string default { "GGX" } help "sets the normal distribution function for specular. GGX is currently isotropic only" @@ -1260,7 +1260,7 @@ } parm { name "xn__inputsiridescence_apply_to_fjb" - label "Iridescence Apply To" + label "Apply To" type string default { "primary specular" } help "Apply iridescence to primary specular lobe or clearcoat/moisture lobe" @@ -1288,7 +1288,7 @@ } parm { name "xn__inputsiridescence_color_control_krb" - label "Iridescence Color Control" + label "Color Control" type string default { "use hue interpolation" } help "use hue interpolation: automatically cycles through hue wheel, use ramp: user specified color ramp" @@ -1316,7 +1316,7 @@ } parm { name "xn__inputsiridescence_primary_color_krb" - label "Iridescence Primary Color" + label "Primary Color" type color size 3 default { "1" "0" "0" } @@ -1342,7 +1342,7 @@ } parm { name "xn__inputsiridescence_secondary_color_tub" - label "Iridescence Secondary Color" + label "Secondary Color" type color size 3 default { "1" "0" "0" } @@ -1366,7 +1366,7 @@ } parm { name "xn__inputsiridescence_flip_hue_direction_pzb" - label "Iridescence Flip Hue Direction" + label "Flip Hue Direction" type toggle default { "0" } help "flip interpolation around the hue wheel to counter-clockwise direction" @@ -1390,7 +1390,7 @@ } parm { name "xn__inputsiridescence_ramp_interpolation_mode_u7b" - label "Iridescence Ramp Interpolation Mode" + label "Ramp Interpolation Mode" type string default { "RGB" } help "RGB: lerp in RGB space which matches UI preview but can lose saturation, HSV: lerp in HSV space which preserves saturation" @@ -1418,7 +1418,7 @@ } parm { name "iridescence_ramp" - label "Iridescence Ramp" + label "Ramp" type ramp_rgb default { "7" } disablewhen "{ xn__inputsiridescence_colors_control_6sb == block } { xn__inputsiridescence_colors_control_6sb == none }" @@ -1442,7 +1442,7 @@ } parm { name "xn__inputsiridescence_thickness_1kb" - label "Iridescence Thickness" + label "Thickness" type float default { "1" } help "Controls how much the color spectrum is repeated" @@ -1467,7 +1467,7 @@ } parm { name "xn__inputsiridescence_exponent_fjb" - label "Iridescence Exponent" + label "Exponent" type float default { "1" } help "Tightens or broadens the distribution of colors" @@ -1492,7 +1492,7 @@ } parm { name "xn__inputsiridescence_at_0_incidence_6sb" - label "Iridescence At 0 Incidence" + label "At 0 Incidence" type float default { "1" } help "Iridescence effect at 0 degree viewing angle" @@ -1517,7 +1517,7 @@ } parm { name "xn__inputsiridescence_at_90_incidence_tub" - label "Iridescence At 90 Incidence" + label "At 90 Incidence" type float default { "1" } help "Iridescence effect at 90 degree viewing angle" @@ -1619,7 +1619,7 @@ } parm { name "xn__inputsdiffuse_roughness_jeb" - label "Diffuse Roughness" + label "Roughness" type float default { "0" } help "Roughness of the diffuse shading. If the value is zero a Lambertian model is used. If it's above zero the Oren Nayar model is used. Not compatible with subsurface scattering." @@ -1793,7 +1793,7 @@ } parm { name "xn__inputsdiffuse_transmission_fjb" - label "Diffuse Transmission" + label "Transmission" type float default { "1" } help "multiplier on the amount of light that is transmitted through the surface." @@ -1818,7 +1818,7 @@ } parm { name "xn__inputsdiffuse_transmission_color_6sb" - label "Diffuse Transmission Color" + label "Transmission Color" type color size 3 default { "0" "0" "0" } @@ -1844,7 +1844,7 @@ } parm { name "xn__inputsdiffuse_transmission_blending_behavior_qdc" - label "Diffuse Transmission Blending Behavior" + label "Transmission Blending Behavior" type string default { "Monochromatic" } help "Controls how diffuse transmission color attenuates diffuse reflection" diff --git a/houdini/soho/parameters/moonray_DwaSolidDielectricMaterial.ds b/houdini/soho/parameters/moonray_DwaSolidDielectricMaterial.ds index cc0ab78..c9beef2 100644 --- a/houdini/soho/parameters/moonray_DwaSolidDielectricMaterial.ds +++ b/houdini/soho/parameters/moonray_DwaSolidDielectricMaterial.ds @@ -69,7 +69,7 @@ } parm { name "xn__inputsfuzz_roughness_n8a" - label "Fuzz Roughness" + label "Roughness" type float default { "0.25" } help "Lower values result in glancing angle highlights while higher values result in a broad, uniform coverage" @@ -94,7 +94,7 @@ } parm { name "xn__inputsfuzz_albedo_r3a" - label "Fuzz Albedo" + label "Albedo" type color size 3 default { "1" "1" "1" } @@ -140,7 +140,7 @@ } parm { name "xn__inputsfuzz_normal_r3a" - label "Fuzz Normal" + label "Normal" type oppath invisible default { "" } @@ -166,7 +166,7 @@ } parm { name "xn__inputsfuzz_normal_dial_wcb" - label "Fuzz Normal Dial" + label "Normal Dial" type float default { "1" } help "controls the amount of infuence of the alternate fuzz normal" @@ -244,7 +244,7 @@ } parm { name "xn__inputsclearcoat_model_99a" - label "Clearcoat Model" + label "Model" type string default { "GGX" } help "sets the normal distribution function for clearcoat. GGX is currently isotropic only" @@ -272,7 +272,7 @@ } parm { name "xn__inputsclearcoat_refractive_index_6sb" - label "Clearcoat Refractive Index" + label "Refractive Index" type float default { "1.5" } help "defines the Fresnel behavior" @@ -297,7 +297,7 @@ } parm { name "xn__inputsclearcoat_roughness_shb" - label "Clearcoat Roughness" + label "Roughness" type float default { "0.1" } help "the roughness of the clearcoat lobe" @@ -322,7 +322,7 @@ } parm { name "xn__inputsclearcoat_thickness_shb" - label "Clearcoat Thickness" + label "Thickness" type float default { "0" } help "the thickness of the virtual clearcoat layer. Values > 0 enable absorption" @@ -347,7 +347,7 @@ } parm { name "xn__inputsclearcoat_attenuation_color_tub" - label "Clearcoat Attenuation Color" + label "Attenuation Color" type color size 3 default { "0.5" "0.5" "0.5" } @@ -371,7 +371,7 @@ } parm { name "xn__inputsclearcoat_bending_jeb" - label "Clearcoat Bending" + label "Bending" type toggle default { "1" } help "(advanced, recommended ON) bends rays based on the clearcoat-refractive-index before evaluating the lobes under clearcoat" @@ -441,7 +441,7 @@ } parm { name "xn__inputsclearcoat_normal_dial_1kb" - label "Clearcoat Normal Dial" + label "Normal Dial" type float default { "1" } help "controls the amount of infuence of the alternate clearcoat normal" @@ -519,7 +519,7 @@ } parm { name "xn__inputsglitter_seed_e5a" - label "Glitter Seed" + label "Seed" type integer default { "0" } help "The seed for the glitter random number generator" @@ -544,7 +544,7 @@ } parm { name "xn__inputsglitter_space_06a" - label "Glitter Space" + label "Space" type string default { "reference" } help "The space to calculate the worley noise in, defaults to reference space" @@ -572,7 +572,7 @@ } parm { name "xn__inputsglitter_density_99a" - label "Glitter Density" + label "Density" type float default { "1" } help "controls the number of flakes per unit length; larger density packs more flakes into same space" @@ -597,7 +597,7 @@ } parm { name "xn__inputsglitter_randomness_5fb" - label "Glitter Randomness" + label "Randomness" type float default { "0.5" } help "randomness of flake orientation" @@ -622,7 +622,7 @@ } parm { name "xn__inputsglitter_layering_mode_1kb" - label "Glitter Layering Mode" + label "Layering Mode" type string default { "physical" } help "layering mode for glitter on top of the under material. physical: conserves energy and glitter attenuates under material, additive: breaks energy conservation but glitter is never darker than the under material (eg. use case: snow)" @@ -650,7 +650,7 @@ } parm { name "xn__inputsglitter_style_A_frequency_krb" - label "Glitter Style A Frequency" + label "Style A Frequency" type float default { "1" } help "0 implies none of this style, 1 implies all the flakes will get this style" @@ -675,7 +675,7 @@ } parm { name "xn__inputsglitter_size_A_n8a" - label "Glitter Size A" + label "Size A" type float default { "1" } help "size of the flakes. Apparent flake size may vary based on how much the flake spheres intersect the surface" @@ -700,7 +700,7 @@ } parm { name "xn__inputsglitter_roughness_A_shb" - label "Glitter Roughness A" + label "Roughness A" type float default { "0.14" } help "specular roughness of individual flakes (0 makes flakes mirror-like)" @@ -725,7 +725,7 @@ } parm { name "xn__inputsglitter_color_A_99a" - label "Glitter Color A" + label "Color A" type color size 3 default { "1" "1" "1" } @@ -749,7 +749,7 @@ } parm { name "xn__inputsglitter_texture_A_jeb" - label "Glitter Texture A" + label "Texture A" type file default { "" } help "filename that points to a texture .exr or .tx file (must be mip-mapped and tiled with maketx)." @@ -773,7 +773,7 @@ } parm { name "xn__inputsglitter_style_B_frequency_krb" - label "Glitter Style B Frequency" + label "Style B Frequency" type float default { "0" } help "0 implies none of this style, 1 implies all the flakes will get this style" @@ -798,7 +798,7 @@ } parm { name "xn__inputsglitter_size_B_n8a" - label "Glitter Size B" + label "Size B" type float default { "1" } help "size of the flakes. Apparent flake size may vary based on how much the flake spheres intersect the surface" @@ -823,7 +823,7 @@ } parm { name "xn__inputsglitter_roughness_B_shb" - label "Glitter Roughness B" + label "Roughness B" type float default { "0.14" } help "specular roughness of individual flakes (0 makes flakes mirror-like)" @@ -848,7 +848,7 @@ } parm { name "xn__inputsglitter_color_B_99a" - label "Glitter Color B" + label "Color B" type color size 3 default { "1" "1" "1" } @@ -872,7 +872,7 @@ } parm { name "xn__inputsglitter_texture_B_jeb" - label "Glitter Texture B" + label "Texture B" type file default { "" } help "filename that points to a texture .exr or .tx file (must be mip-mapped and tiled with maketx)." @@ -896,7 +896,7 @@ } parm { name "xn__inputsglitter_texture_orientation_randomness_qdc" - label "Glitter Texture Orientation Randomness" + label "Texture Orientation Randomness" type float default { "0.15" } help "randomly orient each texture" @@ -921,7 +921,7 @@ } parm { name "xn__inputsglitter_color_hue_variation_tub" - label "Glitter Color Hue Variation" + label "Color Hue Variation" type float default { "0" } help "introduce hue variation in flake color centered at the base flake color's hue on the hue wheel" @@ -946,7 +946,7 @@ } parm { name "xn__inputsglitter_color_saturation_variation_75b" - label "Glitter Color Saturation Variation" + label "Color Saturation Variation" type float default { "0" } help "introduce saturation variation in flake color centered at the base flake color's saturation" @@ -971,7 +971,7 @@ } parm { name "xn__inputsglitter_color_value_variation_2xb" - label "Glitter Color Value Variation" + label "Color Value Variation" type float default { "0" } help "introduce value variation in flake color centered at the base flake color's value" @@ -996,7 +996,7 @@ } parm { name "xn__inputsglitter_jitter_n8a" - label "Glitter Jitter" + label "Jitter" type float default { "1" } help "Controls how much the flakes are randomly offset from a regular grid" @@ -1019,7 +1019,7 @@ } parm { name "xn__inputsglitter_compensate_reference_space_deformation_rqc" - label "Glitter Compensate Reference Space Deformation" + label "Compensate Reference Space Deformation" type toggle default { "1" } help "(In ReferenceSpace) Compensates for stretch/compression/shear in glitter shapes resulting from animation etc" @@ -1041,7 +1041,7 @@ } parm { name "xn__inputsglitter_approximate_for_secondary_rays_qdc" - label "Glitter Approximate For Secondary Rays" + label "Approximate For Secondary Rays" type toggle default { "1" } help "use an approximation to shade glitter for non-mirror secondary rays" @@ -1065,7 +1065,7 @@ } parm { name "xn__inputsglitter_LOD_quality_shb" - label "Glitter LOD Quality" + label "LOD Quality" type float default { "0.5" } help "controls quality of glitter at distances where individual flakes cannot be perceived; at lower values, approximation kicks in earlier" @@ -1090,7 +1090,7 @@ } parm { name "xn__inputsglitter_debug_mode_5fb" - label "Glitter Debug Mode" + label "Debug Mode" type string default { "off" } help "developer debug visualization modes" @@ -1150,7 +1150,7 @@ } parm { name "xn__inputsspecular_model_n8a" - label "Specular Model" + label "Model" type string default { "GGX" } help "sets the normal distribution function for specular. GGX is currently isotropic only" @@ -1310,7 +1310,7 @@ } parm { name "xn__inputsiridescence_apply_to_fjb" - label "Iridescence Apply To" + label "Apply To" type string default { "primary specular" } help "Apply iridescence to primary specular lobe or clearcoat/moisture lobe" @@ -1338,7 +1338,7 @@ } parm { name "xn__inputsiridescence_color_control_krb" - label "Iridescence Color Control" + label "Color Control" type string default { "use hue interpolation" } help "use hue interpolation: automatically cycles through hue wheel, use ramp: user specified color ramp" @@ -1366,7 +1366,7 @@ } parm { name "xn__inputsiridescence_primary_color_krb" - label "Iridescence Primary Color" + label "Primary Color" type color size 3 default { "1" "0" "0" } @@ -1392,7 +1392,7 @@ } parm { name "xn__inputsiridescence_secondary_color_tub" - label "Iridescence Secondary Color" + label "Secondary Color" type color size 3 default { "1" "0" "0" } @@ -1416,7 +1416,7 @@ } parm { name "xn__inputsiridescence_flip_hue_direction_pzb" - label "Iridescence Flip Hue Direction" + label "Flip Hue Direction" type toggle default { "0" } help "flip interpolation around the hue wheel to counter-clockwise direction" @@ -1440,7 +1440,7 @@ } parm { name "xn__inputsiridescence_ramp_interpolation_mode_u7b" - label "Iridescence Ramp Interpolation Mode" + label "Ramp Interpolation Mode" type string default { "RGB" } help "RGB: lerp in RGB space which matches UI preview but can lose saturation, HSV: lerp in HSV space which preserves saturation" @@ -1468,7 +1468,7 @@ } parm { name "iridescence_ramp" - label "Iridescence Ramp" + label "Ramp" type ramp_rgb default { "7" } disablewhen "{ xn__inputsiridescence_colors_control_6sb == block } { xn__inputsiridescence_colors_control_6sb == none }" @@ -1492,7 +1492,7 @@ } parm { name "xn__inputsiridescence_thickness_1kb" - label "Iridescence Thickness" + label "Thickness" type float default { "1" } help "Controls how much the color spectrum is repeated" @@ -1517,7 +1517,7 @@ } parm { name "xn__inputsiridescence_exponent_fjb" - label "Iridescence Exponent" + label "Exponent" type float default { "1" } help "Tightens or broadens the distribution of colors" @@ -1542,7 +1542,7 @@ } parm { name "xn__inputsiridescence_at_0_incidence_6sb" - label "Iridescence At 0 Incidence" + label "At 0 Incidence" type float default { "1" } help "Iridescence effect at 0 degree viewing angle" @@ -1567,7 +1567,7 @@ } parm { name "xn__inputsiridescence_at_90_incidence_tub" - label "Iridescence At 90 Incidence" + label "At 90 Incidence" type float default { "1" } help "Iridescence effect at 90 degree viewing angle" @@ -1646,7 +1646,7 @@ } parm { name "xn__inputsdiffuse_roughness_jeb" - label "Diffuse Roughness" + label "Roughness" type float default { "0" } help "Roughness of the diffuse shading. If the value is zero a Lambertian model is used. If it's above zero the Oren Nayar model is used. Not compatible with subsurface scattering." @@ -1820,7 +1820,7 @@ } parm { name "xn__inputsdiffuse_transmission_fjb" - label "Diffuse Transmission" + label "Transmission" type float default { "1" } help "multiplier on the amount of light that is transmitted through the surface." @@ -1845,7 +1845,7 @@ } parm { name "xn__inputsdiffuse_transmission_color_6sb" - label "Diffuse Transmission Color" + label "Transmission Color" type color size 3 default { "0" "0" "0" } @@ -1871,7 +1871,7 @@ } parm { name "xn__inputsdiffuse_transmission_blending_behavior_qdc" - label "Diffuse Transmission Blending Behavior" + label "Transmission Blending Behavior" type string default { "Monochromatic" } help "Controls how diffuse transmission color attenuates diffuse reflection" diff --git a/houdini/soho/parameters/moonray_DwaToonMaterial.ds b/houdini/soho/parameters/moonray_DwaToonMaterial.ds index 959b7a5..1339363 100644 --- a/houdini/soho/parameters/moonray_DwaToonMaterial.ds +++ b/houdini/soho/parameters/moonray_DwaToonMaterial.ds @@ -69,7 +69,7 @@ } parm { name "xn__inputsfuzz_roughness_n8a" - label "Fuzz Roughness" + label "Roughness" type float default { "0.25" } help "Lower values result in glancing angle highlights while higher values result in a broad, uniform coverage" @@ -94,7 +94,7 @@ } parm { name "xn__inputsfuzz_albedo_r3a" - label "Fuzz Albedo" + label "Albedo" type color size 3 default { "1" "1" "1" } @@ -140,7 +140,7 @@ } parm { name "xn__inputsfuzz_normal_r3a" - label "Fuzz Normal" + label "Normal" type oppath invisible default { "" } @@ -166,7 +166,7 @@ } parm { name "xn__inputsfuzz_normal_dial_wcb" - label "Fuzz Normal Dial" + label "Normal Dial" type float default { "1" } help "controls the amount of infuence of the alternate fuzz normal" @@ -244,7 +244,7 @@ } parm { name "xn__inputsclearcoat_model_99a" - label "Clearcoat Model" + label "Model" type string default { "GGX" } help "sets the normal distribution function for clearcoat. GGX is currently isotropic only" @@ -272,7 +272,7 @@ } parm { name "xn__inputsclearcoat_refractive_index_6sb" - label "Clearcoat Refractive Index" + label "Refractive Index" type float default { "1.5" } help "defines the Fresnel behavior" @@ -297,7 +297,7 @@ } parm { name "xn__inputsclearcoat_roughness_shb" - label "Clearcoat Roughness" + label "Roughness" type float default { "0.1" } help "the roughness of the clearcoat lobe" @@ -322,7 +322,7 @@ } parm { name "xn__inputsclearcoat_thickness_shb" - label "Clearcoat Thickness" + label "Thickness" type float default { "0" } help "the thickness of the virtual clearcoat layer. Values > 0 enable absorption" @@ -347,7 +347,7 @@ } parm { name "xn__inputsclearcoat_attenuation_color_tub" - label "Clearcoat Attenuation Color" + label "Attenuation Color" type color size 3 default { "0.5" "0.5" "0.5" } @@ -371,7 +371,7 @@ } parm { name "xn__inputsclearcoat_bending_jeb" - label "Clearcoat Bending" + label "Bending" type toggle default { "1" } help "(advanced, recommended ON) bends rays based on the clearcoat-refractive-index before evaluating the lobes under clearcoat" @@ -441,7 +441,7 @@ } parm { name "xn__inputsclearcoat_normal_dial_1kb" - label "Clearcoat Normal Dial" + label "Normal Dial" type float default { "1" } help "controls the amount of infuence of the alternate clearcoat normal" @@ -519,7 +519,7 @@ } parm { name "xn__inputsglitter_seed_e5a" - label "Glitter Seed" + label "Seed" type integer default { "0" } help "The seed for the glitter random number generator" @@ -544,7 +544,7 @@ } parm { name "xn__inputsglitter_space_06a" - label "Glitter Space" + label "Space" type string default { "reference" } help "The space to calculate the worley noise in, defaults to reference space" @@ -572,7 +572,7 @@ } parm { name "xn__inputsglitter_density_99a" - label "Glitter Density" + label "Density" type float default { "1" } help "controls the number of flakes per unit length; larger density packs more flakes into same space" @@ -597,7 +597,7 @@ } parm { name "xn__inputsglitter_randomness_5fb" - label "Glitter Randomness" + label "Randomness" type float default { "0.5" } help "randomness of flake orientation" @@ -622,7 +622,7 @@ } parm { name "xn__inputsglitter_layering_mode_1kb" - label "Glitter Layering Mode" + label "Layering Mode" type string default { "physical" } help "layering mode for glitter on top of the under material. physical: conserves energy and glitter attenuates under material, additive: breaks energy conservation but glitter is never darker than the under material (eg. use case: snow)" @@ -650,7 +650,7 @@ } parm { name "xn__inputsglitter_style_A_frequency_krb" - label "Glitter Style A Frequency" + label "Style A Frequency" type float default { "1" } help "0 implies none of this style, 1 implies all the flakes will get this style" @@ -675,7 +675,7 @@ } parm { name "xn__inputsglitter_size_A_n8a" - label "Glitter Size A" + label "Size A" type float default { "1" } help "size of the flakes. Apparent flake size may vary based on how much the flake spheres intersect the surface" @@ -700,7 +700,7 @@ } parm { name "xn__inputsglitter_roughness_A_shb" - label "Glitter Roughness A" + label "Roughness A" type float default { "0.14" } help "specular roughness of individual flakes (0 makes flakes mirror-like)" @@ -725,7 +725,7 @@ } parm { name "xn__inputsglitter_color_A_99a" - label "Glitter Color A" + label "Color A" type color size 3 default { "1" "1" "1" } @@ -749,7 +749,7 @@ } parm { name "xn__inputsglitter_texture_A_jeb" - label "Glitter Texture A" + label "Texture A" type file default { "" } help "filename that points to a texture .exr or .tx file (must be mip-mapped and tiled with maketx)." @@ -773,7 +773,7 @@ } parm { name "xn__inputsglitter_style_B_frequency_krb" - label "Glitter Style B Frequency" + label "Style B Frequency" type float default { "0" } help "0 implies none of this style, 1 implies all the flakes will get this style" @@ -798,7 +798,7 @@ } parm { name "xn__inputsglitter_size_B_n8a" - label "Glitter Size B" + label "Size B" type float default { "1" } help "size of the flakes. Apparent flake size may vary based on how much the flake spheres intersect the surface" @@ -823,7 +823,7 @@ } parm { name "xn__inputsglitter_roughness_B_shb" - label "Glitter Roughness B" + label "Roughness B" type float default { "0.14" } help "specular roughness of individual flakes (0 makes flakes mirror-like)" @@ -848,7 +848,7 @@ } parm { name "xn__inputsglitter_color_B_99a" - label "Glitter Color B" + label "Color B" type color size 3 default { "1" "1" "1" } @@ -872,7 +872,7 @@ } parm { name "xn__inputsglitter_texture_B_jeb" - label "Glitter Texture B" + label "Texture B" type file default { "" } help "filename that points to a texture .exr or .tx file (must be mip-mapped and tiled with maketx)." @@ -896,7 +896,7 @@ } parm { name "xn__inputsglitter_texture_orientation_randomness_qdc" - label "Glitter Texture Orientation Randomness" + label "Texture Orientation Randomness" type float default { "0.15" } help "randomly orient each texture" @@ -921,7 +921,7 @@ } parm { name "xn__inputsglitter_color_hue_variation_tub" - label "Glitter Color Hue Variation" + label "Color Hue Variation" type float default { "0" } help "introduce hue variation in flake color centered at the base flake color's hue on the hue wheel" @@ -946,7 +946,7 @@ } parm { name "xn__inputsglitter_color_saturation_variation_75b" - label "Glitter Color Saturation Variation" + label "Color Saturation Variation" type float default { "0" } help "introduce saturation variation in flake color centered at the base flake color's saturation" @@ -971,7 +971,7 @@ } parm { name "xn__inputsglitter_color_value_variation_2xb" - label "Glitter Color Value Variation" + label "Color Value Variation" type float default { "0" } help "introduce value variation in flake color centered at the base flake color's value" @@ -996,7 +996,7 @@ } parm { name "xn__inputsglitter_jitter_n8a" - label "Glitter Jitter" + label "Jitter" type float default { "1" } help "Controls how much the flakes are randomly offset from a regular grid" @@ -1019,7 +1019,7 @@ } parm { name "xn__inputsglitter_compensate_reference_space_deformation_rqc" - label "Glitter Compensate Reference Space Deformation" + label "Compensate Reference Space Deformation" type toggle default { "1" } help "(In ReferenceSpace) Compensates for stretch/compression/shear in glitter shapes resulting from animation etc" @@ -1041,7 +1041,7 @@ } parm { name "xn__inputsglitter_approximate_for_secondary_rays_qdc" - label "Glitter Approximate For Secondary Rays" + label "Approximate For Secondary Rays" type toggle default { "1" } help "use an approximation to shade glitter for non-mirror secondary rays" @@ -1065,7 +1065,7 @@ } parm { name "xn__inputsglitter_LOD_quality_shb" - label "Glitter LOD Quality" + label "LOD Quality" type float default { "0.5" } help "controls quality of glitter at distances where individual flakes cannot be perceived; at lower values, approximation kicks in earlier" @@ -1090,7 +1090,7 @@ } parm { name "xn__inputsglitter_debug_mode_5fb" - label "Glitter Debug Mode" + label "Debug Mode" type string default { "off" } help "developer debug visualization modes" @@ -1150,7 +1150,7 @@ } parm { name "xn__inputsspecular_model_n8a" - label "Specular Model" + label "Model" type string default { "GGX" } help "sets the normal distribution function for specular. GGX is currently isotropic only" @@ -2302,7 +2302,7 @@ } parm { name "xn__inputsiridescence_apply_to_fjb" - label "Iridescence Apply To" + label "Apply To" type string default { "primary specular" } help "Apply iridescence to primary specular lobe or clearcoat/moisture lobe" @@ -2330,7 +2330,7 @@ } parm { name "xn__inputsiridescence_color_control_krb" - label "Iridescence Color Control" + label "Color Control" type string default { "use hue interpolation" } help "use hue interpolation: automatically cycles through hue wheel, use ramp: user specified color ramp" @@ -2358,7 +2358,7 @@ } parm { name "xn__inputsiridescence_primary_color_krb" - label "Iridescence Primary Color" + label "Primary Color" type color size 3 default { "1" "0" "0" } @@ -2384,7 +2384,7 @@ } parm { name "xn__inputsiridescence_secondary_color_tub" - label "Iridescence Secondary Color" + label "Secondary Color" type color size 3 default { "1" "0" "0" } @@ -2408,7 +2408,7 @@ } parm { name "xn__inputsiridescence_flip_hue_direction_pzb" - label "Iridescence Flip Hue Direction" + label "Flip Hue Direction" type toggle default { "0" } help "flip interpolation around the hue wheel to counter-clockwise direction" @@ -2432,7 +2432,7 @@ } parm { name "xn__inputsiridescence_ramp_interpolation_mode_u7b" - label "Iridescence Ramp Interpolation Mode" + label "Ramp Interpolation Mode" type string default { "RGB" } help "RGB: lerp in RGB space which matches UI preview but can lose saturation, HSV: lerp in HSV space which preserves saturation" @@ -2460,7 +2460,7 @@ } parm { name "iridescence_ramp" - label "Iridescence Ramp" + label "Ramp" type ramp_rgb default { "7" } disablewhen "{ xn__inputsiridescence_colors_control_6sb == block } { xn__inputsiridescence_colors_control_6sb == none }" @@ -2484,7 +2484,7 @@ } parm { name "xn__inputsiridescence_thickness_1kb" - label "Iridescence Thickness" + label "Thickness" type float default { "1" } help "Controls how much the color spectrum is repeated" @@ -2509,7 +2509,7 @@ } parm { name "xn__inputsiridescence_exponent_fjb" - label "Iridescence Exponent" + label "Exponent" type float default { "1" } help "Tightens or broadens the distribution of colors" @@ -2534,7 +2534,7 @@ } parm { name "xn__inputsiridescence_at_0_incidence_6sb" - label "Iridescence At 0 Incidence" + label "At 0 Incidence" type float default { "1" } help "Iridescence effect at 0 degree viewing angle" @@ -2559,7 +2559,7 @@ } parm { name "xn__inputsiridescence_at_90_incidence_tub" - label "Iridescence At 90 Incidence" + label "At 90 Incidence" type float default { "1" } help "Iridescence effect at 90 degree viewing angle" @@ -2635,7 +2635,7 @@ } parm { name "xn__inputsdiffuse_model_06a" - label "Diffuse Model" + label "Model" type string default { "oren-nayar" } help "The method used to render the diffuse response." @@ -2689,7 +2689,7 @@ } parm { name "xn__inputsdiffuse_roughness_jeb" - label "Diffuse Roughness" + label "Roughness" type float default { "0" } help "Roughness of the diffuse shading. If the value is zero a Lambertian model is used. If it's above zero the Oren Nayar model is used. Not compatible with subsurface scattering." @@ -2739,7 +2739,7 @@ } parm { name "xn__inputsdiffuse_flatness_wcb" - label "Diffuse Flatness" + label "Flatness" type float default { "0" } help "Flattens out the diffuse response by bending the normal towards the light direction" @@ -2764,7 +2764,7 @@ } parm { name "xn__inputsdiffuse_flatness_falloff_xpb" - label "Diffuse Flatness Falloff" + label "Flatness Falloff" type float default { "0" } help "Fades out flatness with respect to light direction" @@ -3519,7 +3519,7 @@ } parm { name "xn__inputsdiffuse_transmission_fjb" - label "Diffuse Transmission" + label "Transmission" type float default { "1" } help "multiplier on the amount of light that is transmitted through the surface." @@ -3544,7 +3544,7 @@ } parm { name "xn__inputsdiffuse_transmission_color_6sb" - label "Diffuse Transmission Color" + label "Transmission Color" type color size 3 default { "0" "0" "0" } @@ -3570,7 +3570,7 @@ } parm { name "xn__inputsdiffuse_transmission_blending_behavior_qdc" - label "Diffuse Transmission Blending Behavior" + label "Transmission Blending Behavior" type string default { "Monochromatic" } help "Controls how diffuse transmission color attenuates diffuse reflection" @@ -3651,7 +3651,7 @@ } parm { name "xn__inputstransmission_color_5fb" - label "Transmission Color" + label "Color" type color size 3 default { "1" "1" "1" } diff --git a/houdini/soho/parameters/moonray_DwaVelvetMaterial_v2.ds b/houdini/soho/parameters/moonray_DwaVelvetMaterial_v2.ds index cf4404c..6f4949e 100644 --- a/houdini/soho/parameters/moonray_DwaVelvetMaterial_v2.ds +++ b/houdini/soho/parameters/moonray_DwaVelvetMaterial_v2.ds @@ -69,7 +69,7 @@ } parm { name "xn__inputsfuzz_coverage_06a" - label "Fuzz Coverage" + label "Coverage" type float default { "0.25" } help "Lower values result in glancing angle highlights while higher values result in a broad, uniform coverage" @@ -94,7 +94,7 @@ } parm { name "xn__inputsfuzz_albedo_r3a" - label "Fuzz Albedo" + label "Albedo" type color size 3 default { "1" "1" "1" } @@ -140,7 +140,7 @@ } parm { name "xn__inputsfuzz_normal_r3a" - label "Fuzz Normal" + label "Normal" type oppath invisible default { "" } @@ -166,7 +166,7 @@ } parm { name "xn__inputsfuzz_normal_dial_wcb" - label "Fuzz Normal Dial" + label "Normal Dial" type float default { "1" } help "controls the amount of infuence of the alternate fuzz normal" @@ -244,7 +244,7 @@ } parm { name "xn__inputsglitter_seed_e5a" - label "Glitter Seed" + label "Seed" type integer default { "0" } help "The seed for the glitter random number generator" @@ -269,7 +269,7 @@ } parm { name "xn__inputsglitter_space_06a" - label "Glitter Space" + label "Space" type string default { "reference" } help "The space to calculate the worley noise in, defaults to reference space" @@ -297,7 +297,7 @@ } parm { name "xn__inputsglitter_density_99a" - label "Glitter Density" + label "Density" type float default { "1" } help "controls the number of flakes per unit length; larger density packs more flakes into same space" @@ -322,7 +322,7 @@ } parm { name "xn__inputsglitter_randomness_5fb" - label "Glitter Randomness" + label "Randomness" type float default { "0.5" } help "randomness of flake orientation" @@ -347,7 +347,7 @@ } parm { name "xn__inputsglitter_layering_mode_1kb" - label "Glitter Layering Mode" + label "Layering Mode" type string default { "physical" } help "layering mode for glitter on top of the under material. physical: conserves energy and glitter attenuates under material, additive: breaks energy conservation but glitter is never darker than the under material (eg. use case: snow)" @@ -375,7 +375,7 @@ } parm { name "xn__inputsglitter_style_A_frequency_krb" - label "Glitter Style A Frequency" + label "Style A Frequency" type float default { "1" } help "0 implies none of this style, 1 implies all the flakes will get this style" @@ -400,7 +400,7 @@ } parm { name "xn__inputsglitter_size_A_n8a" - label "Glitter Size A" + label "Size A" type float default { "1" } help "size of the flakes. Apparent flake size may vary based on how much the flake spheres intersect the surface" @@ -425,7 +425,7 @@ } parm { name "xn__inputsglitter_roughness_A_shb" - label "Glitter Roughness A" + label "Roughness A" type float default { "0.14" } help "specular roughness of individual flakes (0 makes flakes mirror-like)" @@ -450,7 +450,7 @@ } parm { name "xn__inputsglitter_color_A_99a" - label "Glitter Color A" + label "Color A" type color size 3 default { "1" "1" "1" } @@ -474,7 +474,7 @@ } parm { name "xn__inputsglitter_texture_A_jeb" - label "Glitter Texture A" + label "Texture A" type file default { "" } help "filename that points to a texture .exr or .tx file (must be mip-mapped and tiled with maketx)." @@ -498,7 +498,7 @@ } parm { name "xn__inputsglitter_style_B_frequency_krb" - label "Glitter Style B Frequency" + label "Style B Frequency" type float default { "0" } help "0 implies none of this style, 1 implies all the flakes will get this style" @@ -523,7 +523,7 @@ } parm { name "xn__inputsglitter_size_B_n8a" - label "Glitter Size B" + label "Size B" type float default { "1" } help "size of the flakes. Apparent flake size may vary based on how much the flake spheres intersect the surface" @@ -548,7 +548,7 @@ } parm { name "xn__inputsglitter_roughness_B_shb" - label "Glitter Roughness B" + label "Roughness B" type float default { "0.14" } help "specular roughness of individual flakes (0 makes flakes mirror-like)" @@ -573,7 +573,7 @@ } parm { name "xn__inputsglitter_color_B_99a" - label "Glitter Color B" + label "Color B" type color size 3 default { "1" "1" "1" } @@ -597,7 +597,7 @@ } parm { name "xn__inputsglitter_texture_B_jeb" - label "Glitter Texture B" + label "Texture B" type file default { "" } help "filename that points to a texture .exr or .tx file (must be mip-mapped and tiled with maketx)." @@ -621,7 +621,7 @@ } parm { name "xn__inputsglitter_texture_orientation_randomness_qdc" - label "Glitter Texture Orientation Randomness" + label "Texture Orientation Randomness" type float default { "0.15" } help "randomly orient each texture" @@ -646,7 +646,7 @@ } parm { name "xn__inputsglitter_color_hue_variation_tub" - label "Glitter Color Hue Variation" + label "Color Hue Variation" type float default { "0" } help "introduce hue variation in flake color centered at the base flake color's hue on the hue wheel" @@ -671,7 +671,7 @@ } parm { name "xn__inputsglitter_color_saturation_variation_75b" - label "Glitter Color Saturation Variation" + label "Color Saturation Variation" type float default { "0" } help "introduce saturation variation in flake color centered at the base flake color's saturation" @@ -696,7 +696,7 @@ } parm { name "xn__inputsglitter_color_value_variation_2xb" - label "Glitter Color Value Variation" + label "Color Value Variation" type float default { "0" } help "introduce value variation in flake color centered at the base flake color's value" @@ -721,7 +721,7 @@ } parm { name "xn__inputsglitter_jitter_n8a" - label "Glitter Jitter" + label "Jitter" type float default { "1" } help "Controls how much the flakes are randomly offset from a regular grid" @@ -744,7 +744,7 @@ } parm { name "xn__inputsglitter_compensate_reference_space_deformation_rqc" - label "Glitter Compensate Reference Space Deformation" + label "Compensate Reference Space Deformation" type toggle default { "1" } help "(In ReferenceSpace) Compensates for stretch/compression/shear in glitter shapes resulting from animation etc" @@ -766,7 +766,7 @@ } parm { name "xn__inputsglitter_approximate_for_secondary_rays_qdc" - label "Glitter Approximate For Secondary Rays" + label "Approximate For Secondary Rays" type toggle default { "1" } help "use an approximation to shade glitter for non-mirror secondary rays" @@ -790,7 +790,7 @@ } parm { name "xn__inputsglitter_LOD_quality_shb" - label "Glitter LOD Quality" + label "LOD Quality" type float default { "0.5" } help "controls quality of glitter at distances where individual flakes cannot be perceived; at lower values, approximation kicks in earlier" @@ -815,7 +815,7 @@ } parm { name "xn__inputsglitter_debug_mode_5fb" - label "Glitter Debug Mode" + label "Debug Mode" type string default { "off" } help "developer debug visualization modes" @@ -901,7 +901,7 @@ } parm { name "xn__inputsdiffuse_roughness_jeb" - label "Diffuse Roughness" + label "Roughness" type float default { "0" } help "Roughness of the diffuse shading. If the value is zero a Lambertian model is used. If it's above zero the Oren Nayar model is used. Not compatible with subsurface scattering." @@ -926,7 +926,7 @@ } parm { name "xn__inputsdiffuse_transmission_fjb" - label "Diffuse Transmission" + label "Transmission" type float default { "1" } help "multiplier on the amount of light that is transmitted through the surface." @@ -951,7 +951,7 @@ } parm { name "xn__inputsdiffuse_transmission_color_6sb" - label "Diffuse Transmission Color" + label "Transmission Color" type color size 3 default { "0" "0" "0" } @@ -977,7 +977,7 @@ } parm { name "xn__inputsdiffuse_transmission_blending_behavior_qdc" - label "Diffuse Transmission Blending Behavior" + label "Transmission Blending Behavior" type string default { "Monochromatic" } help "Controls how diffuse transmission color attenuates diffuse reflection" diff --git a/houdini/soho/parameters/moonray_EnvLight.ds b/houdini/soho/parameters/moonray_EnvLight.ds index 36b0213..f5af20f 100644 --- a/houdini/soho/parameters/moonray_EnvLight.ds +++ b/houdini/soho/parameters/moonray_EnvLight.ds @@ -79,8 +79,8 @@ parmtag { "usdvaluetype" "token" } } parm { - name "xn__inputscolor_control_06a" - label "inputs:color" + name "xn__moonraycolor_control_o8a" + label "moonray:color" type string default { "none" } menujoin { @@ -94,19 +94,19 @@ parmtag { "sidefx::look" "icon" } } parm { - name "xn__inputscolor_zta" + name "xn__moonraycolor_nva" label "Color" type color size 3 default { "1" "1" "1" } help "The light's RGB values.\nThese are combined multiplicatively with the intensity and other attributes in determining the light's 3-channel radiance." - disablewhen "{ xn__inputscolor_control_06a == block } { xn__inputscolor_control_06a == none }" + disablewhen "{ xn__moonraycolor_control_o8a == block } { xn__moonraycolor_control_o8a == none }" range { 0 10 } parmtag { "usdvaluetype" "color3f" } } parm { - name "xn__inputsintensity_control_jeb" - label "inputs:intensity" + name "xn__moonrayintensity_control_6fb" + label "moonray:intensity" type string default { "none" } menujoin { @@ -120,18 +120,18 @@ parmtag { "sidefx::look" "icon" } } parm { - name "xn__inputsintensity_i0a" + name "xn__moonrayintensity_51a" label "Intensity" type float default { "1" } help "The light's intensity.\nThis is combined multiplicatively with the color and other attributes in determining the light's 3-channel radiance." - disablewhen "{ xn__inputsintensity_control_jeb == block } { xn__inputsintensity_control_jeb == none }" + disablewhen "{ xn__moonrayintensity_control_6fb == block } { xn__moonrayintensity_control_6fb == none }" range { 0 10 } parmtag { "usdvaluetype" "float" } } parm { - name "xn__inputsexposure_control_wcb" - label "inputs:exposure" + name "xn__moonrayexposure_control_keb" + label "moonray:exposure" type string default { "none" } menujoin { @@ -145,12 +145,12 @@ parmtag { "sidefx::look" "icon" } } parm { - name "xn__inputsexposure_vya" + name "xn__moonrayexposure_j0a" label "Exposure" type float default { "0" } help "The light's exposure value.\nThis value provides an alternative to the intensity value as a mechanism for controlling the light's overall brightness, and is inspired by the corresponding photographic term but is generalised to apply independently to each light. To calculate its effect, pow(2, exposure) is combined multiplicatively with the color and other attributes in determining the light's 3-channel radiance." - disablewhen "{ xn__inputsexposure_control_wcb == block } { xn__inputsexposure_control_wcb == none }" + disablewhen "{ xn__moonrayexposure_control_keb == block } { xn__moonrayexposure_control_keb == none }" range { 0 10 } parmtag { "usdvaluetype" "float" } } @@ -314,8 +314,8 @@ label "Map" parm { - name "xn__inputstexturefile_control_shbh" - label "inputs:texture:file" + name "xn__moonraytexture_control_xcb" + label "moonray:texture" type string default { "none" } menujoin { @@ -327,12 +327,12 @@ parmtag { "sidefx::look" "icon" } } parm { - name "xn__inputstexturefile_r3ah" + name "xn__moonraytexture_wya" label "Texture" type file default { "" } help "File name of the texture applied to the light. If set to the empty string, no texture is applied. Any file format supported by OpenImageIO can be used. The texture is used in 2 ways - for looking up the texture value at the intersection point when a ray hits the light, and for building a lookup-table-based auxilliary data structure used for distributing light samples over the texture." - disablewhen "{ xn__inputstexturefile_control_shbh == block } { xn__inputstexturefile_control_shbh == none }" + disablewhen "{ xn__moonraytexture_control_xcb == block } { xn__moonraytexture_control_xcb == none }" parmtag { "usdvaluetype" "asset" } } parm { diff --git a/houdini/soho/parameters/moonray_HairColorCorrectMaterial.ds b/houdini/soho/parameters/moonray_HairColorCorrectMaterial.ds index 868dc09..95a5bbf 100644 --- a/houdini/soho/parameters/moonray_HairColorCorrectMaterial.ds +++ b/houdini/soho/parameters/moonray_HairColorCorrectMaterial.ds @@ -101,7 +101,7 @@ } parm { name "xn__inputsTMI_enabled_r3a" - label "TMI Enabled" + label "Enabled" type toggle default { "0" } help "enables the TMI parameters" diff --git a/houdini/soho/parameters/moonray_HairDiffuseMaterial.ds b/houdini/soho/parameters/moonray_HairDiffuseMaterial.ds index 7b1d6b4..0a70856 100644 --- a/houdini/soho/parameters/moonray_HairDiffuseMaterial.ds +++ b/houdini/soho/parameters/moonray_HairDiffuseMaterial.ds @@ -178,7 +178,7 @@ } parm { name "xn__inputssubsurface_blend_wcb" - label "Subsurface Blend" + label "Blend" type float default { "1" } help "0 is fully hair diffuse, 1 is fully SSS. No effect if scattering radius is 0." diff --git a/houdini/soho/parameters/moonray_HairMaterial_v3.ds b/houdini/soho/parameters/moonray_HairMaterial_v3.ds index 2470e73..0684028 100644 --- a/houdini/soho/parameters/moonray_HairMaterial_v3.ds +++ b/houdini/soho/parameters/moonray_HairMaterial_v3.ds @@ -158,7 +158,7 @@ } parm { name "xn__inputsfresnel_type_e5a" - label "Fresnel Type" + label "Type" type string default { "dielectric cylinder" } disablewhen "{ xn__inputsfresnel_type_control_fjb == block } { xn__inputsfresnel_type_control_fjb == none }" @@ -238,7 +238,7 @@ } parm { name "xn__inputsprimary_specular_offset_bob" - label "Primary Specular Offset" + label "Offset" type float default { "-3" } help "offset specular highlight along hair direction (in degrees) [-10,+10], around -3 for human hair" @@ -263,7 +263,7 @@ } parm { name "xn__inputsprimary_specular_roughness_6sb" - label "Primary Specular Roughness" + label "Roughness" type float default { "0.5" } help "roughness of the primary specular highlight, also sets the transmission roughness to 0.5x and secondary specular roughness to 2x by default unless independent roughnesses are being used for both" @@ -288,7 +288,7 @@ } parm { name "xn__inputsprimary_specular_tint_1kb" - label "Primary Specular Tint" + label "Tint" type color size 3 default { "1" "1" "1" } @@ -342,7 +342,7 @@ } parm { name "xn__inputssecondary_specular_offset_krb" - label "Secondary Specular Offset" + label "Offset" type float default { "-4.5" } help "offset secondary specular highlight along hair direction (in degrees) [-10,+10], around -4.5 for human hair" @@ -414,7 +414,7 @@ } parm { name "xn__inputssecondary_specular_tint_bob" - label "Secondary Specular Tint" + label "Tint" type color size 3 default { "1" "1" "1" } @@ -615,7 +615,7 @@ } parm { name "xn__inputstransmission_offset_shb" - label "Transmission Offset" + label "Offset" type float default { "-1.5" } help "offset transmission highlight along hair direction (in degrees) [-10,+10], around -1.5 for human hair" @@ -687,7 +687,7 @@ } parm { name "xn__inputstransmission_azimuthal_roughness_y2b" - label "Transmission Azimuthal Roughness" + label "Azimuthal Roughness" type float default { "1" } help "higher values create a softer look" @@ -712,7 +712,7 @@ } parm { name "xn__inputstransmission_tint_jeb" - label "Transmission Tint" + label "Tint" type color size 3 default { "1" "1" "1" } diff --git a/houdini/soho/parameters/moonray_HairToonMaterial.ds b/houdini/soho/parameters/moonray_HairToonMaterial.ds index e316d2c..8218b91 100644 --- a/houdini/soho/parameters/moonray_HairToonMaterial.ds +++ b/houdini/soho/parameters/moonray_HairToonMaterial.ds @@ -121,7 +121,7 @@ } parm { name "xn__inputsspecular_1_show_99a" - label "Specular 1 Show" + label "Show" type toggle default { "1" } help "Show first toon specular lobe" @@ -145,7 +145,7 @@ } parm { name "xn__inputsspecular_1_model_wcb" - label "Specular 1 Model" + label "Model" type string default { "Toon_Surface" } help "sets the normal distribution function for specular" @@ -173,7 +173,7 @@ } parm { name "xn__inputsspecular_1_intensity_fjb" - label "Specular 1 Intensity" + label "Intensity" type float default { "1" } help "The overall intensity of the specular response" @@ -198,7 +198,7 @@ } parm { name "xn__inputsspecular_1_tint_99a" - label "Specular 1 Tint" + label "Tint" type color size 3 default { "1" "1" "1" } @@ -223,7 +223,7 @@ } parm { name "xn__inputsspecular_1_roughness_fjb" - label "Specular 1 Roughness" + label "Roughness" type float default { "0.9" } help "The roughness of the toon specular. Smaller values produce tighter highlights" @@ -248,7 +248,7 @@ } parm { name "xn__inputsspecular_1_stretch_u_fjb" - label "Specular 1 Stretch U" + label "Stretch U" type float default { "0" } help "Amount to stretch or compress the specular in the u direction " @@ -273,7 +273,7 @@ } parm { name "xn__inputsspecular_1_stretch_v_fjb" - label "Specular 1 Stretch V" + label "Stretch V" type float default { "0" } help "Amount to stretch or compress the specular in the v direction " @@ -296,7 +296,7 @@ } parm { name "xn__inputsspecular_1_use_input_vectors_for_stretch_zgc" - label "Specular 1 Use Input Vectors For Stretch" + label "Use Input Vectors For Stretch" type toggle default { "0" } help "when checked, use input_U and V. otherwise use geometry dPds/t" @@ -320,7 +320,7 @@ } parm { name "xn__inputsspecular_1_input_U_5fb" - label "Specular 1 Input U" + label "Input U" type vector size 3 default { "0" "0" "0" } @@ -346,7 +346,7 @@ } parm { name "xn__inputsspecular_1_input_V_5fb" - label "Specular 1 Input V" + label "Input V" type vector size 3 default { "0" "0" "0" } @@ -372,7 +372,7 @@ } parm { name "specular_1_ramp" - label "Specular 1 Ramp" + label "Ramp" type ramp_flt default { "4" } disablewhen "{ xn__inputsspecular_1_values_control_krb == block } { xn__inputsspecular_1_values_control_krb == none }" @@ -396,7 +396,7 @@ } parm { name "xn__inputsspecular_1_mult0_wcb" - label "Specular 1 Mult0" + label "Mult0" type float default { "1" } help "Bindable multiplier on the toon specular ramp value" @@ -421,7 +421,7 @@ } parm { name "xn__inputsspecular_1_mult1_wcb" - label "Specular 1 Mult1" + label "Mult1" type float default { "1" } help "Bindable multiplier on the toon specular ramp value" @@ -446,7 +446,7 @@ } parm { name "xn__inputsspecular_1_mult2_wcb" - label "Specular 1 Mult2" + label "Mult2" type float default { "1" } help "Bindable multiplier on the toon specular ramp value" @@ -471,7 +471,7 @@ } parm { name "xn__inputsspecular_1_mult3_wcb" - label "Specular 1 Mult3" + label "Mult3" type float default { "1" } help "Bindable multiplier on the toon specular ramp value" @@ -496,7 +496,7 @@ } parm { name "xn__inputsspecular_1_mult4_wcb" - label "Specular 1 Mult4" + label "Mult4" type float default { "1" } help "Bindable multiplier on the toon specular ramp value" @@ -521,7 +521,7 @@ } parm { name "xn__inputsspecular_1_mult5_wcb" - label "Specular 1 Mult5" + label "Mult5" type float default { "1" } help "Bindable multiplier on the toon specular ramp value" @@ -546,7 +546,7 @@ } parm { name "xn__inputsspecular_1_mult6_wcb" - label "Specular 1 Mult6" + label "Mult6" type float default { "1" } help "Bindable multiplier on the toon specular ramp value" @@ -571,7 +571,7 @@ } parm { name "xn__inputsspecular_1_mult7_wcb" - label "Specular 1 Mult7" + label "Mult7" type float default { "1" } help "Bindable multiplier on the toon specular ramp value" @@ -596,7 +596,7 @@ } parm { name "xn__inputsspecular_1_mult8_wcb" - label "Specular 1 Mult8" + label "Mult8" type float default { "1" } help "Bindable multiplier on the toon specular ramp value" @@ -621,7 +621,7 @@ } parm { name "xn__inputsspecular_1_mult9_wcb" - label "Specular 1 Mult9" + label "Mult9" type float default { "1" } help "Bindable multiplier on the toon specular ramp value" @@ -646,7 +646,7 @@ } parm { name "xn__inputsspecular_1_offset0_5fb" - label "Specular 1 Offset0" + label "Offset0" type float default { "0" } help "Bindable offset to the toon specular ramp-position, add a small variation using noise etc for art-directable ramp thresholds" @@ -671,7 +671,7 @@ } parm { name "xn__inputsspecular_1_offset1_5fb" - label "Specular 1 Offset1" + label "Offset1" type float default { "0" } help "Bindable offset to the toon specular ramp-position, add a small variation using noise etc for art-directable ramp thresholds" @@ -696,7 +696,7 @@ } parm { name "xn__inputsspecular_1_offset2_5fb" - label "Specular 1 Offset2" + label "Offset2" type float default { "0" } help "Bindable offset to the toon specular ramp-position, add a small variation using noise etc for art-directable ramp thresholds" @@ -721,7 +721,7 @@ } parm { name "xn__inputsspecular_1_offset3_5fb" - label "Specular 1 Offset3" + label "Offset3" type float default { "0" } help "Bindable offset to the toon specular ramp-position, add a small variation using noise etc for art-directable ramp thresholds" @@ -746,7 +746,7 @@ } parm { name "xn__inputsspecular_1_offset4_5fb" - label "Specular 1 Offset4" + label "Offset4" type float default { "0" } help "Bindable offset to the toon specular ramp-position, add a small variation using noise etc for art-directable ramp thresholds" @@ -771,7 +771,7 @@ } parm { name "xn__inputsspecular_1_offset5_5fb" - label "Specular 1 Offset5" + label "Offset5" type float default { "0" } help "Bindable offset to the toon specular ramp-position, add a small variation using noise etc for art-directable ramp thresholds" @@ -796,7 +796,7 @@ } parm { name "xn__inputsspecular_1_offset6_5fb" - label "Specular 1 Offset6" + label "Offset6" type float default { "0" } help "Bindable offset to the toon specular ramp-position, add a small variation using noise etc for art-directable ramp thresholds" @@ -821,7 +821,7 @@ } parm { name "xn__inputsspecular_1_offset7_5fb" - label "Specular 1 Offset7" + label "Offset7" type float default { "0" } help "Bindable offset to the toon specular ramp-position, add a small variation using noise etc for art-directable ramp thresholds" @@ -846,7 +846,7 @@ } parm { name "xn__inputsspecular_1_offset8_5fb" - label "Specular 1 Offset8" + label "Offset8" type float default { "0" } help "Bindable offset to the toon specular ramp-position, add a small variation using noise etc for art-directable ramp thresholds" @@ -871,7 +871,7 @@ } parm { name "xn__inputsspecular_1_offset9_5fb" - label "Specular 1 Offset9" + label "Offset9" type float default { "0" } help "Bindable offset to the toon specular ramp-position, add a small variation using noise etc for art-directable ramp thresholds" @@ -894,7 +894,7 @@ } parm { name "xn__inputsspecular_1_enable_input_normal_pzb" - label "Specular 1 Enable Input Normal" + label "Enable Input Normal" type toggle default { "0" } help "enables sampling the normal map for toon specular 1" @@ -916,7 +916,7 @@ } parm { name "xn__inputsspecular_1_input_normal_bob" - label "Specular 1 Input Normal" + label "Input Normal" type oppath invisible default { "" } @@ -942,7 +942,7 @@ } parm { name "xn__inputsspecular_1_input_normal_dial_gwb" - label "Specular 1 Input Normal Dial" + label "Input Normal Dial" type float default { "1" } help "controls influence of input normal versus hair normal for toon specular 1" @@ -965,7 +965,7 @@ } parm { name "xn__inputsspecular_1_enable_indirect_reflections_qdc" - label "Specular 1 Enable Indirect Reflections" + label "Enable Indirect Reflections" type toggle default { "0" } help "enables indirect GGX reflections for toon specular model" @@ -989,7 +989,7 @@ } parm { name "xn__inputsspecular_1_indirect_reflections_intensity_mic" - label "Specular 1 Indirect Reflections Intensity" + label "Indirect Reflections Intensity" type float default { "1" } help "the intensity for the indirect reflections of the toon specular model" @@ -1014,7 +1014,7 @@ } parm { name "xn__inputsspecular_1_indirect_reflections_roughness_mic" - label "Specular 1 Indirect Reflections Roughness" + label "Indirect Reflections Roughness" type float default { "0.5" } help "the roughness for the indirect reflections of the toon specular model" @@ -1045,7 +1045,7 @@ } parm { name "xn__inputsspecular_1_fresnel_blend_xpb" - label "Specular 1 Fresnel Blend" + label "1 Fresnel Blend" type float default { "1" } help "The amount of fresnel to use for the toon specular response" @@ -1070,7 +1070,7 @@ } parm { name "xn__inputsspecular_1_ramp_input_scale_tub" - label "Specular 1 Ramp Input Scale" + label "1 Ramp Input Scale" type float default { "1" } help "Scales the input value x to the ramp lookup y, where x is based on the angle between the sample direction and normal. This has the effect of squashing or stretching the ramp point positions towards/away from 0." @@ -1095,7 +1095,7 @@ } parm { name "xn__inputsspecular_2_fresnel_blend_xpb" - label "Specular 2 Fresnel Blend" + label "2 Fresnel Blend" type float default { "1" } help "The amount of fresnel to use for the toon specular response" @@ -1120,7 +1120,7 @@ } parm { name "xn__inputsspecular_2_ramp_input_scale_tub" - label "Specular 2 Ramp Input Scale" + label "2 Ramp Input Scale" type float default { "1" } help "Scales the input value x to the ramp lookup y, where x is based on the angle between the sample direction and normal. This has the effect of squashing or stretching the ramp point positions towards/away from 0." @@ -1145,7 +1145,7 @@ } parm { name "xn__inputsspecular_3_fresnel_blend_xpb" - label "Specular 3 Fresnel Blend" + label "3 Fresnel Blend" type float default { "1" } help "The amount of fresnel to use for the toon specular response" @@ -1170,7 +1170,7 @@ } parm { name "xn__inputsspecular_3_ramp_input_scale_tub" - label "Specular 3 Ramp Input Scale" + label "3 Ramp Input Scale" type float default { "1" } help "Scales the input value x to the ramp lookup y, where x is based on the angle between the sample direction and normal. This has the effect of squashing or stretching the ramp point positions towards/away from 0." @@ -1222,7 +1222,7 @@ } parm { name "xn__inputsspecular_2_show_99a" - label "Specular 2 Show" + label "Show" type toggle default { "0" } help "Show second toon specular lobe" @@ -1246,7 +1246,7 @@ } parm { name "xn__inputsspecular_2_model_wcb" - label "Specular 2 Model" + label "Model" type string default { "Toon_Surface" } help "sets the normal distribution function for specular" @@ -1274,7 +1274,7 @@ } parm { name "xn__inputsspecular_2_intensity_fjb" - label "Specular 2 Intensity" + label "Intensity" type float default { "1" } help "The overall intensity of the specular response" @@ -1299,7 +1299,7 @@ } parm { name "xn__inputsspecular_2_tint_99a" - label "Specular 2 Tint" + label "Tint" type color size 3 default { "1" "1" "1" } @@ -1324,7 +1324,7 @@ } parm { name "xn__inputsspecular_2_roughness_fjb" - label "Specular 2 Roughness" + label "Roughness" type float default { "0.9" } help "The roughness of the toon specular. Smaller values produce tighter highlights" @@ -1349,7 +1349,7 @@ } parm { name "xn__inputsspecular_2_stretch_u_fjb" - label "Specular 2 Stretch U" + label "Stretch U" type float default { "0" } help "Amount to stretch or compress the specular in the u direction " @@ -1374,7 +1374,7 @@ } parm { name "xn__inputsspecular_2_stretch_v_fjb" - label "Specular 2 Stretch V" + label "Stretch V" type float default { "0" } help "Amount to stretch or compress the specular in the v direction " @@ -1397,7 +1397,7 @@ } parm { name "xn__inputsspecular_2_use_input_vectors_for_stretch_zgc" - label "Specular 2 Use Input Vectors For Stretch" + label "Use Input Vectors For Stretch" type toggle default { "0" } help "when checked, use input_U and V. otherwise use geometry dPds/t" @@ -1421,7 +1421,7 @@ } parm { name "xn__inputsspecular_2_input_U_5fb" - label "Specular 2 Input U" + label "Input U" type vector size 3 default { "0" "0" "0" } @@ -1447,7 +1447,7 @@ } parm { name "xn__inputsspecular_2_input_V_5fb" - label "Specular 2 Input V" + label "Input V" type vector size 3 default { "0" "0" "0" } @@ -1473,7 +1473,7 @@ } parm { name "specular_2_ramp" - label "Specular 2 Ramp" + label "Ramp" type ramp_flt default { "4" } disablewhen "{ xn__inputsspecular_2_values_control_krb == block } { xn__inputsspecular_2_values_control_krb == none }" @@ -1497,7 +1497,7 @@ } parm { name "xn__inputsspecular_2_mult0_wcb" - label "Specular 2 Mult0" + label "Mult0" type float default { "1" } help "Bindable multiplier on the toon specular ramp value" @@ -1522,7 +1522,7 @@ } parm { name "xn__inputsspecular_2_mult1_wcb" - label "Specular 2 Mult1" + label "Mult1" type float default { "1" } help "Bindable multiplier on the toon specular ramp value" @@ -1547,7 +1547,7 @@ } parm { name "xn__inputsspecular_2_mult2_wcb" - label "Specular 2 Mult2" + label "Mult2" type float default { "1" } help "Bindable multiplier on the toon specular ramp value" @@ -1572,7 +1572,7 @@ } parm { name "xn__inputsspecular_2_mult3_wcb" - label "Specular 2 Mult3" + label "Mult3" type float default { "1" } help "Bindable multiplier on the toon specular ramp value" @@ -1597,7 +1597,7 @@ } parm { name "xn__inputsspecular_2_mult4_wcb" - label "Specular 2 Mult4" + label "Mult4" type float default { "1" } help "Bindable multiplier on the toon specular ramp value" @@ -1622,7 +1622,7 @@ } parm { name "xn__inputsspecular_2_mult5_wcb" - label "Specular 2 Mult5" + label "Mult5" type float default { "1" } help "Bindable multiplier on the toon specular ramp value" @@ -1647,7 +1647,7 @@ } parm { name "xn__inputsspecular_2_mult6_wcb" - label "Specular 2 Mult6" + label "Mult6" type float default { "1" } help "Bindable multiplier on the toon specular ramp value" @@ -1672,7 +1672,7 @@ } parm { name "xn__inputsspecular_2_mult7_wcb" - label "Specular 2 Mult7" + label "Mult7" type float default { "1" } help "Bindable multiplier on the toon specular ramp value" @@ -1697,7 +1697,7 @@ } parm { name "xn__inputsspecular_2_mult8_wcb" - label "Specular 2 Mult8" + label "Mult8" type float default { "1" } help "Bindable multiplier on the toon specular ramp value" @@ -1722,7 +1722,7 @@ } parm { name "xn__inputsspecular_2_mult9_wcb" - label "Specular 2 Mult9" + label "Mult9" type float default { "1" } help "Bindable multiplier on the toon specular ramp value" @@ -1747,7 +1747,7 @@ } parm { name "xn__inputsspecular_2_offset0_5fb" - label "Specular 2 Offset0" + label "Offset0" type float default { "0" } help "Bindable offset to the toon specular ramp-position, add a small variation using noise etc for art-directable ramp thresholds" @@ -1772,7 +1772,7 @@ } parm { name "xn__inputsspecular_2_offset1_5fb" - label "Specular 2 Offset1" + label "Offset1" type float default { "0" } help "Bindable offset to the toon specular ramp-position, add a small variation using noise etc for art-directable ramp thresholds" @@ -1797,7 +1797,7 @@ } parm { name "xn__inputsspecular_2_offset2_5fb" - label "Specular 2 Offset2" + label "Offset2" type float default { "0" } help "Bindable offset to the toon specular ramp-position, add a small variation using noise etc for art-directable ramp thresholds" @@ -1822,7 +1822,7 @@ } parm { name "xn__inputsspecular_2_offset3_5fb" - label "Specular 2 Offset3" + label "Offset3" type float default { "0" } help "Bindable offset to the toon specular ramp-position, add a small variation using noise etc for art-directable ramp thresholds" @@ -1847,7 +1847,7 @@ } parm { name "xn__inputsspecular_2_offset4_5fb" - label "Specular 2 Offset4" + label "Offset4" type float default { "0" } help "Bindable offset to the toon specular ramp-position, add a small variation using noise etc for art-directable ramp thresholds" @@ -1872,7 +1872,7 @@ } parm { name "xn__inputsspecular_2_offset5_5fb" - label "Specular 2 Offset5" + label "Offset5" type float default { "0" } help "Bindable offset to the toon specular ramp-position, add a small variation using noise etc for art-directable ramp thresholds" @@ -1897,7 +1897,7 @@ } parm { name "xn__inputsspecular_2_offset6_5fb" - label "Specular 2 Offset6" + label "Offset6" type float default { "0" } help "Bindable offset to the toon specular ramp-position, add a small variation using noise etc for art-directable ramp thresholds" @@ -1922,7 +1922,7 @@ } parm { name "xn__inputsspecular_2_offset7_5fb" - label "Specular 2 Offset7" + label "Offset7" type float default { "0" } help "Bindable offset to the toon specular ramp-position, add a small variation using noise etc for art-directable ramp thresholds" @@ -1947,7 +1947,7 @@ } parm { name "xn__inputsspecular_2_offset8_5fb" - label "Specular 2 Offset8" + label "Offset8" type float default { "0" } help "Bindable offset to the toon specular ramp-position, add a small variation using noise etc for art-directable ramp thresholds" @@ -1972,7 +1972,7 @@ } parm { name "xn__inputsspecular_2_offset9_5fb" - label "Specular 2 Offset9" + label "Offset9" type float default { "0" } help "Bindable offset to the toon specular ramp-position, add a small variation using noise etc for art-directable ramp thresholds" @@ -1995,7 +1995,7 @@ } parm { name "xn__inputsspecular_2_enable_input_normal_pzb" - label "Specular 2 Enable Input Normal" + label "Enable Input Normal" type toggle default { "0" } help "enables sampling the normal map for toon specular 2" @@ -2017,7 +2017,7 @@ } parm { name "xn__inputsspecular_2_input_normal_bob" - label "Specular 2 Input Normal" + label "Input Normal" type oppath invisible default { "" } @@ -2043,7 +2043,7 @@ } parm { name "xn__inputsspecular_2_input_normal_dial_gwb" - label "Specular 2 Input Normal Dial" + label "Input Normal Dial" type float default { "1" } help "controls influence of input normal versus hair normal for toon specular 2" @@ -2066,7 +2066,7 @@ } parm { name "xn__inputsspecular_2_enable_indirect_reflections_qdc" - label "Specular 2 Enable Indirect Reflections" + label "Enable Indirect Reflections" type toggle default { "0" } help "enables indirect GGX reflections for toon specular model" @@ -2090,7 +2090,7 @@ } parm { name "xn__inputsspecular_2_indirect_reflections_intensity_mic" - label "Specular 2 Indirect Reflections Intensity" + label "Indirect Reflections Intensity" type float default { "1" } help "the intensity for the indirect reflections of the toon specular model" @@ -2115,7 +2115,7 @@ } parm { name "xn__inputsspecular_2_indirect_reflections_roughness_mic" - label "Specular 2 Indirect Reflections Roughness" + label "Indirect Reflections Roughness" type float default { "0.5" } help "the roughness for the indirect reflections of the toon specular model" @@ -2144,7 +2144,7 @@ } parm { name "xn__inputsspecular_3_show_99a" - label "Specular 3 Show" + label "Show" type toggle default { "0" } help "Show third toon specular lobe" @@ -2168,7 +2168,7 @@ } parm { name "xn__inputsspecular_3_model_wcb" - label "Specular 3 Model" + label "Model" type string default { "Toon_Surface" } help "sets the normal distribution function for specular" @@ -2196,7 +2196,7 @@ } parm { name "xn__inputsspecular_3_intensity_fjb" - label "Specular 3 Intensity" + label "Intensity" type float default { "1" } help "The overall intensity of the specular response" @@ -2221,7 +2221,7 @@ } parm { name "xn__inputsspecular_3_tint_99a" - label "Specular 3 Tint" + label "Tint" type color size 3 default { "1" "1" "1" } @@ -2246,7 +2246,7 @@ } parm { name "xn__inputsspecular_3_roughness_fjb" - label "Specular 3 Roughness" + label "Roughness" type float default { "0.9" } help "The roughness of the toon specular. Smaller values produce tighter highlights" @@ -2271,7 +2271,7 @@ } parm { name "xn__inputsspecular_3_stretch_u_fjb" - label "Specular 3 Stretch U" + label "Stretch U" type float default { "0" } help "Amount to stretch or compress the specular in the u direction " @@ -2296,7 +2296,7 @@ } parm { name "xn__inputsspecular_3_stretch_v_fjb" - label "Specular 3 Stretch V" + label "Stretch V" type float default { "0" } help "Amount to stretch or compress the specular in the v direction " @@ -2319,7 +2319,7 @@ } parm { name "xn__inputsspecular_3_use_input_vectors_for_stretch_zgc" - label "Specular 3 Use Input Vectors For Stretch" + label "Use Input Vectors For Stretch" type toggle default { "0" } help "when checked, use input_U and V. otherwise use geometry dPds/t" @@ -2343,7 +2343,7 @@ } parm { name "xn__inputsspecular_3_input_U_5fb" - label "Specular 3 Input U" + label "Input U" type vector size 3 default { "0" "0" "0" } @@ -2369,7 +2369,7 @@ } parm { name "xn__inputsspecular_3_input_V_5fb" - label "Specular 3 Input V" + label "Input V" type vector size 3 default { "0" "0" "0" } @@ -2395,7 +2395,7 @@ } parm { name "specular_3_ramp" - label "Specular 3 Ramp" + label "Ramp" type ramp_flt default { "4" } disablewhen "{ xn__inputsspecular_3_values_control_krb == block } { xn__inputsspecular_3_values_control_krb == none }" @@ -2419,7 +2419,7 @@ } parm { name "xn__inputsspecular_3_mult0_wcb" - label "Specular 3 Mult0" + label "Mult0" type float default { "1" } help "Bindable multiplier on the toon specular ramp value" @@ -2444,7 +2444,7 @@ } parm { name "xn__inputsspecular_3_mult1_wcb" - label "Specular 3 Mult1" + label "Mult1" type float default { "1" } help "Bindable multiplier on the toon specular ramp value" @@ -2469,7 +2469,7 @@ } parm { name "xn__inputsspecular_3_mult2_wcb" - label "Specular 3 Mult2" + label "Mult2" type float default { "1" } help "Bindable multiplier on the toon specular ramp value" @@ -2494,7 +2494,7 @@ } parm { name "xn__inputsspecular_3_mult3_wcb" - label "Specular 3 Mult3" + label "Mult3" type float default { "1" } help "Bindable multiplier on the toon specular ramp value" @@ -2519,7 +2519,7 @@ } parm { name "xn__inputsspecular_3_mult4_wcb" - label "Specular 3 Mult4" + label "Mult4" type float default { "1" } help "Bindable multiplier on the toon specular ramp value" @@ -2544,7 +2544,7 @@ } parm { name "xn__inputsspecular_3_mult5_wcb" - label "Specular 3 Mult5" + label "Mult5" type float default { "1" } help "Bindable multiplier on the toon specular ramp value" @@ -2569,7 +2569,7 @@ } parm { name "xn__inputsspecular_3_mult6_wcb" - label "Specular 3 Mult6" + label "Mult6" type float default { "1" } help "Bindable multiplier on the toon specular ramp value" @@ -2594,7 +2594,7 @@ } parm { name "xn__inputsspecular_3_mult7_wcb" - label "Specular 3 Mult7" + label "Mult7" type float default { "1" } help "Bindable multiplier on the toon specular ramp value" @@ -2619,7 +2619,7 @@ } parm { name "xn__inputsspecular_3_mult8_wcb" - label "Specular 3 Mult8" + label "Mult8" type float default { "1" } help "Bindable multiplier on the toon specular ramp value" @@ -2644,7 +2644,7 @@ } parm { name "xn__inputsspecular_3_mult9_wcb" - label "Specular 3 Mult9" + label "Mult9" type float default { "1" } help "Bindable multiplier on the toon specular ramp value" @@ -2669,7 +2669,7 @@ } parm { name "xn__inputsspecular_3_offset0_5fb" - label "Specular 3 Offset0" + label "Offset0" type float default { "0" } help "Bindable offset to the toon specular ramp-position, add a small variation using noise etc for art-directable ramp thresholds" @@ -2694,7 +2694,7 @@ } parm { name "xn__inputsspecular_3_offset1_5fb" - label "Specular 3 Offset1" + label "Offset1" type float default { "0" } help "Bindable offset to the toon specular ramp-position, add a small variation using noise etc for art-directable ramp thresholds" @@ -2719,7 +2719,7 @@ } parm { name "xn__inputsspecular_3_offset2_5fb" - label "Specular 3 Offset2" + label "Offset2" type float default { "0" } help "Bindable offset to the toon specular ramp-position, add a small variation using noise etc for art-directable ramp thresholds" @@ -2744,7 +2744,7 @@ } parm { name "xn__inputsspecular_3_offset3_5fb" - label "Specular 3 Offset3" + label "Offset3" type float default { "0" } help "Bindable offset to the toon specular ramp-position, add a small variation using noise etc for art-directable ramp thresholds" @@ -2769,7 +2769,7 @@ } parm { name "xn__inputsspecular_3_offset4_5fb" - label "Specular 3 Offset4" + label "Offset4" type float default { "0" } help "Bindable offset to the toon specular ramp-position, add a small variation using noise etc for art-directable ramp thresholds" @@ -2794,7 +2794,7 @@ } parm { name "xn__inputsspecular_3_offset5_5fb" - label "Specular 3 Offset5" + label "Offset5" type float default { "0" } help "Bindable offset to the toon specular ramp-position, add a small variation using noise etc for art-directable ramp thresholds" @@ -2819,7 +2819,7 @@ } parm { name "xn__inputsspecular_3_offset6_5fb" - label "Specular 3 Offset6" + label "Offset6" type float default { "0" } help "Bindable offset to the toon specular ramp-position, add a small variation using noise etc for art-directable ramp thresholds" @@ -2844,7 +2844,7 @@ } parm { name "xn__inputsspecular_3_offset7_5fb" - label "Specular 3 Offset7" + label "Offset7" type float default { "0" } help "Bindable offset to the toon specular ramp-position, add a small variation using noise etc for art-directable ramp thresholds" @@ -2869,7 +2869,7 @@ } parm { name "xn__inputsspecular_3_offset8_5fb" - label "Specular 3 Offset8" + label "Offset8" type float default { "0" } help "Bindable offset to the toon specular ramp-position, add a small variation using noise etc for art-directable ramp thresholds" @@ -2894,7 +2894,7 @@ } parm { name "xn__inputsspecular_3_offset9_5fb" - label "Specular 3 Offset9" + label "Offset9" type float default { "0" } help "Bindable offset to the toon specular ramp-position, add a small variation using noise etc for art-directable ramp thresholds" @@ -2917,7 +2917,7 @@ } parm { name "xn__inputsspecular_3_enable_input_normal_pzb" - label "Specular 3 Enable Input Normal" + label "Enable Input Normal" type toggle default { "0" } help "enables sampling the normal map for toon specular 3" @@ -2939,7 +2939,7 @@ } parm { name "xn__inputsspecular_3_input_normal_bob" - label "Specular 3 Input Normal" + label "Input Normal" type oppath invisible default { "" } @@ -2965,7 +2965,7 @@ } parm { name "xn__inputsspecular_3_input_normal_dial_gwb" - label "Specular 3 Input Normal Dial" + label "Input Normal Dial" type float default { "1" } help "controls influence of input normal versus hair normal for toon specular 3" @@ -2988,7 +2988,7 @@ } parm { name "xn__inputsspecular_3_enable_indirect_reflections_qdc" - label "Specular 3 Enable Indirect Reflections" + label "Enable Indirect Reflections" type toggle default { "0" } help "enables indirect GGX reflections for toon specular model" @@ -3012,7 +3012,7 @@ } parm { name "xn__inputsspecular_3_indirect_reflections_intensity_mic" - label "Specular 3 Indirect Reflections Intensity" + label "Indirect Reflections Intensity" type float default { "1" } help "the intensity for the indirect reflections of the toon specular model" @@ -3037,7 +3037,7 @@ } parm { name "xn__inputsspecular_3_indirect_reflections_roughness_mic" - label "Specular 3 Indirect Reflections Roughness" + label "Indirect Reflections Roughness" type float default { "0.5" } help "the roughness for the indirect reflections of the toon specular model" @@ -3171,7 +3171,7 @@ } parm { name "xn__inputssubsurface_blend_wcb" - label "Subsurface Blend" + label "Blend" type float default { "1" } help "0 is fully hair diffuse, 1 is fully SSS. No effect if scattering radius is 0." diff --git a/houdini/soho/parameters/moonray_MeshLight.ds b/houdini/soho/parameters/moonray_MeshLight.ds index 05694a1..f1facda 100644 --- a/houdini/soho/parameters/moonray_MeshLight.ds +++ b/houdini/soho/parameters/moonray_MeshLight.ds @@ -79,8 +79,8 @@ parmtag { "usdvaluetype" "token" } } parm { - name "xn__inputscolor_control_06a" - label "inputs:color" + name "xn__moonraycolor_control_o8a" + label "moonray:color" type string default { "none" } menujoin { @@ -94,19 +94,19 @@ parmtag { "sidefx::look" "icon" } } parm { - name "xn__inputscolor_zta" + name "xn__moonraycolor_nva" label "Color" type color size 3 default { "1" "1" "1" } help "The light's RGB values.\nThese are combined multiplicatively with the intensity and other attributes in determining the light's 3-channel radiance." - disablewhen "{ xn__inputscolor_control_06a == block } { xn__inputscolor_control_06a == none }" + disablewhen "{ xn__moonraycolor_control_o8a == block } { xn__moonraycolor_control_o8a == none }" range { 0 10 } parmtag { "usdvaluetype" "color3f" } } parm { - name "xn__inputsintensity_control_jeb" - label "inputs:intensity" + name "xn__moonrayintensity_control_6fb" + label "moonray:intensity" type string default { "none" } menujoin { @@ -120,18 +120,18 @@ parmtag { "sidefx::look" "icon" } } parm { - name "xn__inputsintensity_i0a" + name "xn__moonrayintensity_51a" label "Intensity" type float default { "1" } help "The light's intensity.\nThis is combined multiplicatively with the color and other attributes in determining the light's 3-channel radiance." - disablewhen "{ xn__inputsintensity_control_jeb == block } { xn__inputsintensity_control_jeb == none }" + disablewhen "{ xn__moonrayintensity_control_6fb == block } { xn__moonrayintensity_control_6fb == none }" range { 0 10 } parmtag { "usdvaluetype" "float" } } parm { - name "xn__inputsexposure_control_wcb" - label "inputs:exposure" + name "xn__moonrayexposure_control_keb" + label "moonray:exposure" type string default { "none" } menujoin { @@ -145,12 +145,12 @@ parmtag { "sidefx::look" "icon" } } parm { - name "xn__inputsexposure_vya" + name "xn__moonrayexposure_j0a" label "Exposure" type float default { "0" } help "The light's exposure value.\nThis value provides an alternative to the intensity value as a mechanism for controlling the light's overall brightness, and is inspired by the corresponding photographic term but is generalised to apply independently to each light. To calculate its effect, pow(2, exposure) is combined multiplicatively with the color and other attributes in determining the light's 3-channel radiance." - disablewhen "{ xn__inputsexposure_control_wcb == block } { xn__inputsexposure_control_wcb == none }" + disablewhen "{ xn__moonrayexposure_control_keb == block } { xn__moonrayexposure_control_keb == none }" range { 0 10 } parmtag { "usdvaluetype" "float" } } @@ -352,8 +352,8 @@ parmtag { "usdvaluetype" "bool" } } parm { - name "xn__inputsgeometry_control_wcb" - label "inputs:geometry" + name "xn__moonraygeometry_control_keb" + label "moonray:geometry" type string default { "none" } menujoin { @@ -365,12 +365,12 @@ parmtag { "sidefx::look" "icon" } } parm { - name "xn__inputsgeometry_vya" + name "xn__moonraygeometry_j0a" label "Geometry" type oppath default { "" } help "The SceneObject holding the mesh data to use as the MeshLight's surface." - disablewhen "{ xn__inputsgeometry_control_wcb == block } { xn__inputsgeometry_control_wcb == none }" + disablewhen "{ xn__moonraygeometry_control_keb == block } { xn__moonraygeometry_control_keb == none }" parmtag { "oprelative" "." } parmtag { "usdvaluetype" "" } } diff --git a/houdini/soho/parameters/moonray_NoiseWorleyMap_v2.ds b/houdini/soho/parameters/moonray_NoiseWorleyMap_v2.ds index cddc982..2a71da4 100644 --- a/houdini/soho/parameters/moonray_NoiseWorleyMap_v2.ds +++ b/houdini/soho/parameters/moonray_NoiseWorleyMap_v2.ds @@ -22,7 +22,7 @@ } parm { name "xn__inputsoutput_mode_r3a" - label "Output Mode" + label "Mode" type string default { "distance" } help "Method by which the shader outputs a color. Distance uses F1..F4 interpolated between color A and color B, gradient outputs the gradient of the noise, and cell ID outputs a random color for each cell" diff --git a/houdini/soho/parameters/moonray_NoiseWorleyMap_v3.ds b/houdini/soho/parameters/moonray_NoiseWorleyMap_v3.ds index cddc982..2a71da4 100644 --- a/houdini/soho/parameters/moonray_NoiseWorleyMap_v3.ds +++ b/houdini/soho/parameters/moonray_NoiseWorleyMap_v3.ds @@ -22,7 +22,7 @@ } parm { name "xn__inputsoutput_mode_r3a" - label "Output Mode" + label "Mode" type string default { "distance" } help "Method by which the shader outputs a color. Distance uses F1..F4 interpolated between color A and color B, gradient outputs the gradient of the noise, and cell ID outputs a random color for each cell" diff --git a/houdini/soho/parameters/moonray_OrthographicCamera.ds b/houdini/soho/parameters/moonray_OrthographicCamera.ds index f0ea722..c9f275d 100644 --- a/houdini/soho/parameters/moonray_OrthographicCamera.ds +++ b/houdini/soho/parameters/moonray_OrthographicCamera.ds @@ -106,8 +106,8 @@ parmtag { "usdvaluetype" "float" } } parm { - name "horizontalAperture_control" - label "horizontalAperture" + name "xn__moonrayfilm_width_aperture_control_hwb" + label "moonray:film_width_aperture" type string default { "none" } menujoin { @@ -121,12 +121,12 @@ parmtag { "sidefx::look" "icon" } } parm { - name "horizontalAperture" + name "film_width_aperture" label "Film Width Aperture" type float default { "24" } help "Scale the aperture of the camera (i.e., the orthographic frustum) by this value." - disablewhen "{ horizontalAperture_control == block } { horizontalAperture_control == none }" + disablewhen "{ xn__moonrayfilm_width_aperture_control_hwb == block } { xn__moonrayfilm_width_aperture_control_hwb == none }" range { 0 10 } parmtag { "usdvaluetype" "float" } } @@ -162,8 +162,8 @@ label "Motion Blur" parm { - name "xn__shutteropen_control_16a" - label "shutter:open" + name "xn__moonraymb_shutter_open_control_ypb" + label "moonray:mb_shutter_open" type string default { "none" } menujoin { @@ -177,18 +177,18 @@ parmtag { "sidefx::look" "icon" } } parm { - name "xn__shutteropen_0ta" + name "mb_shutter_open" label "Mb Shutter Open" type float default { "-0.25" } help "Frame at which the shutter opens, i.e., the beginning of the motion blur interval." - disablewhen "{ xn__shutteropen_control_16a == block } { xn__shutteropen_control_16a == none }" + disablewhen "{ xn__moonraymb_shutter_open_control_ypb == block } { xn__moonraymb_shutter_open_control_ypb == none }" range { 0 10 } parmtag { "usdvaluetype" "float" } } parm { - name "xn__shutterclose_control_o8a" - label "shutter:close" + name "xn__moonraymb_shutter_close_control_lrb" + label "moonray:mb_shutter_close" type string default { "none" } menujoin { @@ -202,12 +202,12 @@ parmtag { "sidefx::look" "icon" } } parm { - name "xn__shutterclose_nva" + name "mb_shutter_close" label "Mb Shutter Close" type float default { "0.25" } help "Frame at which the shutter closes, i.e., the end of the motion blur interval." - disablewhen "{ xn__shutterclose_control_o8a == block } { xn__shutterclose_control_o8a == none }" + disablewhen "{ xn__moonraymb_shutter_close_control_lrb == block } { xn__moonraymb_shutter_close_control_lrb == none }" range { 0 10 } parmtag { "usdvaluetype" "float" } } @@ -345,8 +345,8 @@ parmtag { "usdvaluetype" "bool" } } parm { - name "fStop_control" - label "fStop" + name "xn__moonraydof_aperture_control_2kb" + label "moonray:dof_aperture" type string default { "none" } menujoin { @@ -360,18 +360,18 @@ parmtag { "sidefx::look" "icon" } } parm { - name "fStop" + name "dof_aperture" label "Dof Aperture" type float default { "8" } help "Depth of field focus distance" - disablewhen "{ fStop_control == block } { fStop_control == none }" + disablewhen "{ xn__moonraydof_aperture_control_2kb == block } { xn__moonraydof_aperture_control_2kb == none }" range { 0 10 } parmtag { "usdvaluetype" "float" } } parm { - name "focusDistance_control" - label "focusDistance" + name "xn__moonraydof_focus_distance_control_uub" + label "moonray:dof_focus_distance" type string default { "none" } menujoin { @@ -385,11 +385,11 @@ parmtag { "sidefx::look" "icon" } } parm { - name "focusDistance" + name "dof_focus_distance" label "Dof Focus Distance" type float default { "0" } - disablewhen "{ focusDistance_control == block } { focusDistance_control == none }" + disablewhen "{ xn__moonraydof_focus_distance_control_uub == block } { xn__moonraydof_focus_distance_control_uub == none }" range { 0 10 } parmtag { "usdvaluetype" "float" } } diff --git a/houdini/soho/parameters/moonray_Override.ds b/houdini/soho/parameters/moonray_Override.ds index 467d73c..47bd686 100644 --- a/houdini/soho/parameters/moonray_Override.ds +++ b/houdini/soho/parameters/moonray_Override.ds @@ -27,15 +27,15 @@ [ " menulist = []" ] [ " token = tokens[selected]" ] [ " if token == \"Shader\":" ] - [ " menulist = ['AttributeMap', 'AttributeMap', 'AxisAngleMap', 'AxisAngleMap', 'BaseVolume', 'BaseVolume', 'BlendMap', 'BlendMap', 'CheckerboardMap', 'CheckerboardMap', 'ClampMap', 'ClampMap', 'ColorCorrectContrastMap', 'ColorCorrectContrastMap', 'ColorCorrectGainOffsetMap', 'ColorCorrectGainOffsetMap', 'ColorCorrectGammaMap', 'ColorCorrectGammaMap', 'ColorCorrectHsvMap', 'ColorCorrectHsvMap', 'ColorCorrectHueShiftMap', 'ColorCorrectHueShiftMap', 'ColorCorrectLegacyMap', 'ColorCorrectLegacyMap', 'ColorCorrectMap', 'ColorCorrectMap', 'ColorCorrectSaturationMap', 'ColorCorrectSaturationMap', 'ColorCorrectTMIMap', 'ColorCorrectTMIMap', 'CombineDisplacement', 'CombineDisplacement', 'CombineNormalMap', 'CombineNormalMap', 'ConstantColorMap', 'ConstantColorMap', 'ConstantScalarMap', 'ConstantScalarMap', 'CurvatureMap', 'CurvatureMap', 'CutoutVolume', 'CutoutVolume', 'DebugMap', 'DebugMap', 'DeformationMap', 'DeformationMap', 'DirectionalMap', 'DirectionalMap', 'DistortNormalMap', 'DistortNormalMap', 'DwaAdjustMaterial', 'DwaAdjustMaterial', 'DwaBaseMaterial', 'DwaBaseMaterial', 'DwaColorCorrectMaterial', 'DwaColorCorrectMaterial', 'DwaEmissiveMaterial', 'DwaEmissiveMaterial', 'DwaFabricMaterial', 'DwaFabricMaterial', 'DwaLayerMaterial', 'DwaLayerMaterial', 'DwaMetalMaterial', 'DwaMetalMaterial', 'DwaMixMaterial', 'DwaMixMaterial', 'DwaRefractiveMaterial', 'DwaRefractiveMaterial', 'DwaSkinMaterial', 'DwaSkinMaterial', 'DwaSolidDielectricMaterial', 'DwaSolidDielectricMaterial', 'DwaSwitchMaterial', 'DwaSwitchMaterial', 'DwaToonMaterial', 'DwaToonMaterial', 'DwaTwoSidedMaterial', 'DwaTwoSidedMaterial', 'DwaVelvetMaterial_v2', 'DwaVelvetMaterial_v2', 'ExtraAovMap', 'ExtraAovMap', 'FloatToRgbMap', 'FloatToRgbMap', 'GradientMap', 'GradientMap', 'HairColorCorrectMaterial', 'HairColorCorrectMaterial', 'HairColorPresetsMap', 'HairColorPresetsMap', 'HairColumnMap', 'HairColumnMap', 'HairDiffuseMaterial', 'HairDiffuseMaterial', 'HairLayerMaterial', 'HairLayerMaterial', 'HairMap', 'HairMap', 'HairMaterial_v3', 'HairMaterial_v3', 'HairToonMaterial', 'HairToonMaterial', 'HsvToRgbMap', 'HsvToRgbMap', 'ImageMap', 'ImageMap', 'ImageNormalMap', 'ImageNormalMap', 'LODMap', 'LODMap', 'LayerMap', 'LayerMap', 'LayerMap_v2', 'LayerMap_v2', 'ListMap', 'ListMap', 'MultiChannelToFloatMap', 'MultiChannelToFloatMap', 'NoiseMap_v2', 'NoiseMap_v2', 'NoiseWorleyMap_v2', 'NoiseWorleyMap_v2', 'NoiseWorleyMap_v3', 'NoiseWorleyMap_v3', 'NormalDisplacement', 'NormalDisplacement', 'NormalToRgbMap', 'NormalToRgbMap', 'OpMap', 'OpMap', 'OpSqrtMap', 'OpSqrtMap', 'OpenVdbMap', 'OpenVdbMap', 'OpenVdbMap_v2', 'OpenVdbMap_v2', 'ProjectCameraMap', 'ProjectCameraMap', 'ProjectCameraMap_v2', 'ProjectCameraMap_v2', 'ProjectCameraNormalMap', 'ProjectCameraNormalMap', 'ProjectCylindricalMap', 'ProjectCylindricalMap', 'ProjectPlanarMap', 'ProjectPlanarMap', 'ProjectPlanarNormalMap', 'ProjectPlanarNormalMap', 'ProjectSphericalMap', 'ProjectSphericalMap', 'ProjectTriplanarMap', 'ProjectTriplanarMap', 'ProjectTriplanarMap_v2', 'ProjectTriplanarMap_v2', 'ProjectTriplanarNormalMap', 'ProjectTriplanarNormalMap', 'ProjectTriplanarNormalMap_v2', 'ProjectTriplanarNormalMap_v2', 'ProjectTriplanarUdimMap', 'ProjectTriplanarUdimMap', 'RampMap', 'RampMap', 'RandomMap', 'RandomMap', 'RandomNormalMap', 'RandomNormalMap', 'RaySwitchMaterial', 'RaySwitchMaterial', 'RemapMap', 'RemapMap', 'RgbToFloatMap', 'RgbToFloatMap', 'RgbToHsvMap', 'RgbToHsvMap', 'RgbToLabMap', 'RgbToLabMap', 'RgbToNormalMap', 'RgbToNormalMap', 'SwitchColorMap', 'SwitchColorMap', 'SwitchDisplacement', 'SwitchDisplacement', 'SwitchFloatMap', 'SwitchFloatMap', 'SwitchMaterial', 'SwitchMaterial', 'SwitchNormalMap', 'SwitchNormalMap', 'ToonMap', 'ToonMap', 'TransformNormalMap', 'TransformNormalMap', 'TransformSpaceMap', 'TransformSpaceMap', 'TwoSidedMap', 'TwoSidedMap', 'UVTransformMap', 'UVTransformMap', 'VectorDisplacement', 'VectorDisplacement', 'WireframeMap', 'WireframeMap']" ] + [ " menulist = ['AttributeMap', 'AxisAngleMap', 'BaseVolume', 'BlendMap', 'CheckerboardMap', 'ClampMap', 'ColorCorrectContrastMap', 'ColorCorrectGainOffsetMap', 'ColorCorrectGammaMap', 'ColorCorrectHsvMap', 'ColorCorrectHueShiftMap', 'ColorCorrectLegacyMap', 'ColorCorrectMap', 'ColorCorrectSaturationMap', 'ColorCorrectTMIMap', 'CombineDisplacement', 'CombineNormalMap', 'ConstantColorMap', 'ConstantScalarMap', 'CurvatureMap', 'CutoutVolume', 'DebugMap', 'DeformationMap', 'DirectionalMap', 'DistortNormalMap', 'DwaAdjustMaterial', 'DwaBaseMaterial', 'DwaColorCorrectMaterial', 'DwaEmissiveMaterial', 'DwaFabricMaterial', 'DwaLayerMaterial', 'DwaMetalMaterial', 'DwaMixMaterial', 'DwaRefractiveMaterial', 'DwaSkinMaterial', 'DwaSolidDielectricMaterial', 'DwaSwitchMaterial', 'DwaToonMaterial', 'DwaTwoSidedMaterial', 'DwaVelvetMaterial_v2', 'ExtraAovMap', 'FloatToRgbMap', 'GradientMap', 'HairColorCorrectMaterial', 'HairColorPresetsMap', 'HairColumnMap', 'HairDiffuseMaterial', 'HairLayerMaterial', 'HairMap', 'HairMaterial_v3', 'HairToonMaterial', 'HsvToRgbMap', 'ImageMap', 'ImageNormalMap', 'LODMap', 'LayerMap', 'LayerMap_v2', 'ListMap', 'MultiChannelToFloatMap', 'NoiseMap_v2', 'NoiseWorleyMap_v2', 'NoiseWorleyMap_v3', 'NormalDisplacement', 'NormalToRgbMap', 'OpMap', 'OpSqrtMap', 'OpenVdbMap', 'OpenVdbMap_v2', 'ProjectCameraMap', 'ProjectCameraMap_v2', 'ProjectCameraNormalMap', 'ProjectCylindricalMap', 'ProjectPlanarMap', 'ProjectPlanarNormalMap', 'ProjectSphericalMap', 'ProjectTriplanarMap', 'ProjectTriplanarMap_v2', 'ProjectTriplanarNormalMap', 'ProjectTriplanarNormalMap_v2', 'ProjectTriplanarUdimMap', 'RampMap', 'RandomMap', 'RandomNormalMap', 'RaySwitchMaterial', 'RemapMap', 'RgbToFloatMap', 'RgbToHsvMap', 'RgbToLabMap', 'RgbToNormalMap', 'SwitchColorMap', 'SwitchDisplacement', 'SwitchFloatMap', 'SwitchMaterial', 'SwitchNormalMap', 'ToonMap', 'TransformNormalMap', 'TransformSpaceMap', 'TwoSidedMap', 'UVTransformMap', 'VdbVolume', 'VectorDisplacement', 'WireframeMap']" ] [ " elif token == \"Light\":" ] - [ " menulist = ['CylinderLight', 'CylinderLight', 'DiskLight', 'DiskLight', 'DistantLight', 'DistantLight', 'EnvLight', 'EnvLight', 'MeshLight', 'MeshLight', 'PortalLight', 'PortalLight', 'RectLight', 'RectLight', 'SphereLight', 'SphereLight', 'SpotLight', 'SpotLight']" ] + [ " menulist = ['CylinderLight', 'DiskLight', 'DistantLight', 'EnvLight', 'MeshLight', 'PortalLight', 'RectLight', 'SphereLight', 'SpotLight']" ] [ " elif token == \"Camera\":" ] - [ " menulist = ['BakeCamera', 'BakeCamera', 'DomeMaster3DCamera', 'DomeMaster3DCamera', 'FisheyeCamera', 'FisheyeCamera', 'OrthographicCamera', 'OrthographicCamera', 'PerspectiveCamera', 'PerspectiveCamera', 'SphericalCamera', 'SphericalCamera']" ] + [ " menulist = ['BakeCamera', 'DomeMaster3DCamera', 'FisheyeCamera', 'OrthographicCamera', 'PerspectiveCamera', 'SphericalCamera']" ] [ " elif token == \"Light Filter\":" ] - [ " menulist = ['BarnDoorLightFilter', 'BarnDoorLightFilter', 'ColorRampLightFilter', 'ColorRampLightFilter', 'CombineLightFilter', 'CombineLightFilter', 'CookieLightFilter', 'CookieLightFilter', 'CookieLightFilter_v2', 'CookieLightFilter_v2', 'DecayLightFilter', 'DecayLightFilter', 'IntensityLightFilter', 'IntensityLightFilter', 'RodLightFilter', 'RodLightFilter', 'VdbLightFilter', 'VdbLightFilter']" ] + [ " menulist = ['BarnDoorLightFilter', 'ColorRampLightFilter', 'CombineLightFilter', 'CookieLightFilter', 'CookieLightFilter_v2', 'DecayLightFilter', 'IntensityLightFilter', 'RodLightFilter', 'VdbLightFilter']" ] [ " elif token == \"Geometry\":" ] - [ " menulist = ['BoxGeometry', 'BoxGeometry', 'RdlCurveGeometry', 'RdlCurveGeometry', 'RdlInstancerGeometry', 'RdlInstancerGeometry', 'RdlMeshGeometry', 'RdlMeshGeometry', 'RdlPointGeometry', 'RdlPointGeometry', 'SphereGeometry', 'SphereGeometry', 'UsdGeometry', 'UsdGeometry', 'UsdInstanceGeometry', 'UsdInstanceGeometry', 'VdbGeometry', 'VdbGeometry']" ] + [ " menulist = ['BoxGeometry', 'RdlCurveGeometry', 'RdlInstancerGeometry', 'RdlMeshGeometry', 'RdlPointGeometry', 'SphereGeometry', 'UsdGeometry', 'UsdInstanceGeometry', 'VdbGeometry']" ] [ " return menulist" ] [ " " ] language python diff --git a/houdini/soho/parameters/moonray_PerspectiveCamera.ds b/houdini/soho/parameters/moonray_PerspectiveCamera.ds index 4b653ee..c75a1de 100644 --- a/houdini/soho/parameters/moonray_PerspectiveCamera.ds +++ b/houdini/soho/parameters/moonray_PerspectiveCamera.ds @@ -56,8 +56,8 @@ parmtag { "usdvaluetype" "float" } } parm { - name "focalLength_control" - label "focalLength" + name "xn__moonrayfocal_control_o8a" + label "moonray:focal" type string default { "none" } menujoin { @@ -71,12 +71,12 @@ parmtag { "sidefx::look" "icon" } } parm { - name "focalLength" + name "focal" label "Focal" type float default { "30" } help "Focal length" - disablewhen "{ focalLength_control == block } { focalLength_control == none }" + disablewhen "{ xn__moonrayfocal_control_o8a == block } { xn__moonrayfocal_control_o8a == none }" range { 0 10 } parmtag { "usdvaluetype" "float" } } @@ -131,8 +131,8 @@ parmtag { "usdvaluetype" "float" } } parm { - name "horizontalAperture_control" - label "horizontalAperture" + name "xn__moonrayfilm_width_aperture_control_hwb" + label "moonray:film_width_aperture" type string default { "none" } menujoin { @@ -146,12 +146,12 @@ parmtag { "sidefx::look" "icon" } } parm { - name "horizontalAperture" + name "film_width_aperture" label "Film Width Aperture" type float default { "24" } help "Scale the aperture of the camera (i.e., the frustum) by this value." - disablewhen "{ horizontalAperture_control == block } { horizontalAperture_control == none }" + disablewhen "{ xn__moonrayfilm_width_aperture_control_hwb == block } { xn__moonrayfilm_width_aperture_control_hwb == none }" range { 0 10 } parmtag { "usdvaluetype" "float" } } @@ -187,8 +187,8 @@ label "Motion Blur" parm { - name "xn__shutteropen_control_16a" - label "shutter:open" + name "xn__moonraymb_shutter_open_control_ypb" + label "moonray:mb_shutter_open" type string default { "none" } menujoin { @@ -202,18 +202,18 @@ parmtag { "sidefx::look" "icon" } } parm { - name "xn__shutteropen_0ta" + name "mb_shutter_open" label "Mb Shutter Open" type float default { "-0.25" } help "Frame at which the shutter opens, i.e., the beginning of the motion blur interval." - disablewhen "{ xn__shutteropen_control_16a == block } { xn__shutteropen_control_16a == none }" + disablewhen "{ xn__moonraymb_shutter_open_control_ypb == block } { xn__moonraymb_shutter_open_control_ypb == none }" range { 0 10 } parmtag { "usdvaluetype" "float" } } parm { - name "xn__shutterclose_control_o8a" - label "shutter:close" + name "xn__moonraymb_shutter_close_control_lrb" + label "moonray:mb_shutter_close" type string default { "none" } menujoin { @@ -227,12 +227,12 @@ parmtag { "sidefx::look" "icon" } } parm { - name "xn__shutterclose_nva" + name "mb_shutter_close" label "Mb Shutter Close" type float default { "0.25" } help "Frame at which the shutter closes, i.e., the end of the motion blur interval." - disablewhen "{ xn__shutterclose_control_o8a == block } { xn__shutterclose_control_o8a == none }" + disablewhen "{ xn__moonraymb_shutter_close_control_lrb == block } { xn__moonraymb_shutter_close_control_lrb == none }" range { 0 10 } parmtag { "usdvaluetype" "float" } } @@ -455,8 +455,8 @@ parmtag { "usdvaluetype" "bool" } } parm { - name "fStop_control" - label "fStop" + name "xn__moonraydof_aperture_control_2kb" + label "moonray:dof_aperture" type string default { "none" } menujoin { @@ -470,18 +470,18 @@ parmtag { "sidefx::look" "icon" } } parm { - name "fStop" + name "dof_aperture" label "Dof Aperture" type float default { "8" } help "Depth of field focus distance" - disablewhen "{ fStop_control == block } { fStop_control == none }" + disablewhen "{ xn__moonraydof_aperture_control_2kb == block } { xn__moonraydof_aperture_control_2kb == none }" range { 0 10 } parmtag { "usdvaluetype" "float" } } parm { - name "focusDistance_control" - label "focusDistance" + name "xn__moonraydof_focus_distance_control_uub" + label "moonray:dof_focus_distance" type string default { "none" } menujoin { @@ -495,11 +495,11 @@ parmtag { "sidefx::look" "icon" } } parm { - name "focusDistance" + name "dof_focus_distance" label "Dof Focus Distance" type float default { "0" } - disablewhen "{ focusDistance_control == block } { focusDistance_control == none }" + disablewhen "{ xn__moonraydof_focus_distance_control_uub == block } { xn__moonraydof_focus_distance_control_uub == none }" range { 0 10 } parmtag { "usdvaluetype" "float" } } diff --git a/houdini/soho/parameters/moonray_RdlCurveGeometry.ds b/houdini/soho/parameters/moonray_RdlCurveGeometry.ds index 7f9568d..603991c 100644 --- a/houdini/soho/parameters/moonray_RdlCurveGeometry.ds +++ b/houdini/soho/parameters/moonray_RdlCurveGeometry.ds @@ -553,6 +553,158 @@ range { 0 10 } parmtag { "usdvaluetype" "float" } } + parm { + name "xn__primvarsmoonraylocal_motion_blur_radius_list_control_tqch" + label "primvars:moonray:local_motion_blur_radius_list" + type string + default { "none" } + menujoin { + "set" "![BUTTONS_set_or_create]Set or Create" + "setexisting" "![BUTTONS_set_if_exists]Set if Exists" + "add" "![BUTTONS_set_add]Add if Exists" + "multiply" "![BUTTONS_set_multiply]Multiply if Exists" + "block" "![BUTTONS_set_block]Block" + "none" "![BUTTONS_set_nothing]Do Nothing" + } + parmtag { "sidefx::look" "icon" } + } + multiparm { + name "local_motion_blur_radius_list" + label "Local Motion Blur Radius List" + default 0 + disablewhen "{ xn__primvarsmoonraylocal_motion_blur_radius_list_control_tqch == block } { xn__primvarsmoonraylocal_motion_blur_radius_list_control_tqch == none }" + parmtag { "usdvaluetype" "float[]" } + + parm { + name "xn__primvarsmoonraylocal_motion_blur_radius_list_sdch#" + label "Local Motion Blur Radius List" + type float + default { "0" } + help "Per-point outer radius for each local motion blur region. If empty, defaults to 1.0. Must match the length of local_motion_blur_position_list." + disablewhen "{ use_local_motion_blur == 0 }" + range { 0 10 } + parmtag { "moonray::is_parm" "1" } + } + } + + parm { + name "xn__primvarsmoonraylocal_motion_blur_inner_radius_list_control_l0ch" + label "primvars:moonray:local_motion_blur_inner_radius_list" + type string + default { "none" } + menujoin { + "set" "![BUTTONS_set_or_create]Set or Create" + "setexisting" "![BUTTONS_set_if_exists]Set if Exists" + "add" "![BUTTONS_set_add]Add if Exists" + "multiply" "![BUTTONS_set_multiply]Multiply if Exists" + "block" "![BUTTONS_set_block]Block" + "none" "![BUTTONS_set_nothing]Do Nothing" + } + parmtag { "sidefx::look" "icon" } + } + multiparm { + name "local_motion_blur_inner_radius_list" + label "Local Motion Blur Inner Radius List" + default 0 + disablewhen "{ xn__primvarsmoonraylocal_motion_blur_inner_radius_list_control_l0ch == block } { xn__primvarsmoonraylocal_motion_blur_inner_radius_list_control_l0ch == none }" + parmtag { "usdvaluetype" "float[]" } + + parm { + name "xn__primvarsmoonraylocal_motion_blur_inner_radius_list_knch#" + label "Local Motion Blur Inner Radius List" + type float + default { "0" } + help "Per-point inner radius for each local motion blur region (full-strength core). If empty, defaults to 1.0. Must match the length of local_motion_blur_position_list." + disablewhen "{ use_local_motion_blur == 0 }" + range { 0 10 } + parmtag { "moonray::is_parm" "1" } + } + } + + parm { + name "xn__primvarsmoonraylocal_motion_blur_multiplier_list_control_cxch" + label "primvars:moonray:local_motion_blur_multiplier_list" + type string + default { "none" } + menujoin { + "set" "![BUTTONS_set_or_create]Set or Create" + "setexisting" "![BUTTONS_set_if_exists]Set if Exists" + "add" "![BUTTONS_set_add]Add if Exists" + "multiply" "![BUTTONS_set_multiply]Multiply if Exists" + "block" "![BUTTONS_set_block]Block" + "none" "![BUTTONS_set_nothing]Do Nothing" + } + parmtag { "sidefx::look" "icon" } + } + multiparm { + name "local_motion_blur_multiplier_list" + label "Local Motion Blur Multiplier List" + default 0 + disablewhen "{ xn__primvarsmoonraylocal_motion_blur_multiplier_list_control_cxch == block } { xn__primvarsmoonraylocal_motion_blur_multiplier_list_control_cxch == none }" + parmtag { "usdvaluetype" "float[]" } + + parm { + name "xn__primvarsmoonraylocal_motion_blur_multiplier_list_bkch#" + label "Local Motion Blur Multiplier List" + type float + default { "0" } + help "Per-point motion blur strength multiplier for each local motion blur region. If empty, defaults to 1.0. Must match the length of local_motion_blur_position_list." + disablewhen "{ use_local_motion_blur == 0 }" + range { 0 10 } + parmtag { "moonray::is_parm" "1" } + } + } + + parm { + name "xn__primvarsmoonraylocal_motion_blur_strength_multiplier_control_u3ch" + label "primvars:moonray:local_motion_blur_strength_multiplier" + type string + default { "none" } + menujoin { + "set" "![BUTTONS_set_or_create]Set or Create" + "setexisting" "![BUTTONS_set_if_exists]Set if Exists" + "add" "![BUTTONS_set_add]Add if Exists" + "multiply" "![BUTTONS_set_multiply]Multiply if Exists" + "block" "![BUTTONS_set_block]Block" + "none" "![BUTTONS_set_nothing]Do Nothing" + } + parmtag { "sidefx::look" "icon" } + } + parm { + name "xn__primvarsmoonraylocal_motion_blur_strength_multiplier_tqch" + label "Local Motion Blur Strength Multiplier" + type float + default { "1" } + help "Global strength multiplier for local motion blur application" + disablewhen "{ xn__primvarsmoonraylocal_motion_blur_strength_multiplier_control_u3ch == block } { xn__primvarsmoonraylocal_motion_blur_strength_multiplier_control_u3ch == none }" + range { 0 10 } + parmtag { "usdvaluetype" "float" } + } + parm { + name "xn__primvarsmoonraylocal_motion_blur_radius_multiplier_control_l0ch" + label "primvars:moonray:local_motion_blur_radius_multiplier" + type string + default { "none" } + menujoin { + "set" "![BUTTONS_set_or_create]Set or Create" + "setexisting" "![BUTTONS_set_if_exists]Set if Exists" + "add" "![BUTTONS_set_add]Add if Exists" + "multiply" "![BUTTONS_set_multiply]Multiply if Exists" + "block" "![BUTTONS_set_block]Block" + "none" "![BUTTONS_set_nothing]Do Nothing" + } + parmtag { "sidefx::look" "icon" } + } + parm { + name "xn__primvarsmoonraylocal_motion_blur_radius_multiplier_knch" + label "Local Motion Blur Radius Multiplier" + type float + default { "1" } + help "Global radius multiplier applied to per-region radius values, whether supplied via the \"radius\"/\"inner_radius\" point attributes or the \"local_motion_blur_radius_list\"/\"local_motion_blur_inner_radius_list\" explicit list attributes" + disablewhen "{ xn__primvarsmoonraylocal_motion_blur_radius_multiplier_control_l0ch == block } { xn__primvarsmoonraylocal_motion_blur_radius_multiplier_control_l0ch == none }" + range { 0 10 } + parmtag { "usdvaluetype" "float" } + } parm { name "xn__primvarsmoonrayuse_rotation_motion_blur_control_oich" label "primvars:moonray:use_rotation_motion_blur" diff --git a/houdini/soho/parameters/moonray_RdlMeshGeometry.ds b/houdini/soho/parameters/moonray_RdlMeshGeometry.ds index 5aa28d5..5ee938b 100644 --- a/houdini/soho/parameters/moonray_RdlMeshGeometry.ds +++ b/houdini/soho/parameters/moonray_RdlMeshGeometry.ds @@ -900,6 +900,158 @@ range { 0 10 } parmtag { "usdvaluetype" "float" } } + parm { + name "xn__primvarsmoonraylocal_motion_blur_radius_list_control_tqch" + label "primvars:moonray:local_motion_blur_radius_list" + type string + default { "none" } + menujoin { + "set" "![BUTTONS_set_or_create]Set or Create" + "setexisting" "![BUTTONS_set_if_exists]Set if Exists" + "add" "![BUTTONS_set_add]Add if Exists" + "multiply" "![BUTTONS_set_multiply]Multiply if Exists" + "block" "![BUTTONS_set_block]Block" + "none" "![BUTTONS_set_nothing]Do Nothing" + } + parmtag { "sidefx::look" "icon" } + } + multiparm { + name "local_motion_blur_radius_list" + label "Local Motion Blur Radius List" + default 0 + disablewhen "{ xn__primvarsmoonraylocal_motion_blur_radius_list_control_tqch == block } { xn__primvarsmoonraylocal_motion_blur_radius_list_control_tqch == none }" + parmtag { "usdvaluetype" "float[]" } + + parm { + name "xn__primvarsmoonraylocal_motion_blur_radius_list_sdch#" + label "Local Motion Blur Radius List" + type float + default { "0" } + help "Per-point outer radius for each local motion blur region. If empty, defaults to 1.0. Must match the length of local_motion_blur_position_list." + disablewhen "{ use_local_motion_blur == 0 }" + range { 0 10 } + parmtag { "moonray::is_parm" "1" } + } + } + + parm { + name "xn__primvarsmoonraylocal_motion_blur_inner_radius_list_control_l0ch" + label "primvars:moonray:local_motion_blur_inner_radius_list" + type string + default { "none" } + menujoin { + "set" "![BUTTONS_set_or_create]Set or Create" + "setexisting" "![BUTTONS_set_if_exists]Set if Exists" + "add" "![BUTTONS_set_add]Add if Exists" + "multiply" "![BUTTONS_set_multiply]Multiply if Exists" + "block" "![BUTTONS_set_block]Block" + "none" "![BUTTONS_set_nothing]Do Nothing" + } + parmtag { "sidefx::look" "icon" } + } + multiparm { + name "local_motion_blur_inner_radius_list" + label "Local Motion Blur Inner Radius List" + default 0 + disablewhen "{ xn__primvarsmoonraylocal_motion_blur_inner_radius_list_control_l0ch == block } { xn__primvarsmoonraylocal_motion_blur_inner_radius_list_control_l0ch == none }" + parmtag { "usdvaluetype" "float[]" } + + parm { + name "xn__primvarsmoonraylocal_motion_blur_inner_radius_list_knch#" + label "Local Motion Blur Inner Radius List" + type float + default { "0" } + help "Per-point inner radius for each local motion blur region (full-strength core). If empty, defaults to 1.0. Must match the length of local_motion_blur_position_list." + disablewhen "{ use_local_motion_blur == 0 }" + range { 0 10 } + parmtag { "moonray::is_parm" "1" } + } + } + + parm { + name "xn__primvarsmoonraylocal_motion_blur_multiplier_list_control_cxch" + label "primvars:moonray:local_motion_blur_multiplier_list" + type string + default { "none" } + menujoin { + "set" "![BUTTONS_set_or_create]Set or Create" + "setexisting" "![BUTTONS_set_if_exists]Set if Exists" + "add" "![BUTTONS_set_add]Add if Exists" + "multiply" "![BUTTONS_set_multiply]Multiply if Exists" + "block" "![BUTTONS_set_block]Block" + "none" "![BUTTONS_set_nothing]Do Nothing" + } + parmtag { "sidefx::look" "icon" } + } + multiparm { + name "local_motion_blur_multiplier_list" + label "Local Motion Blur Multiplier List" + default 0 + disablewhen "{ xn__primvarsmoonraylocal_motion_blur_multiplier_list_control_cxch == block } { xn__primvarsmoonraylocal_motion_blur_multiplier_list_control_cxch == none }" + parmtag { "usdvaluetype" "float[]" } + + parm { + name "xn__primvarsmoonraylocal_motion_blur_multiplier_list_bkch#" + label "Local Motion Blur Multiplier List" + type float + default { "0" } + help "Per-point motion blur strength multiplier for each local motion blur region. If empty, defaults to 1.0. Must match the length of local_motion_blur_position_list." + disablewhen "{ use_local_motion_blur == 0 }" + range { 0 10 } + parmtag { "moonray::is_parm" "1" } + } + } + + parm { + name "xn__primvarsmoonraylocal_motion_blur_strength_multiplier_control_u3ch" + label "primvars:moonray:local_motion_blur_strength_multiplier" + type string + default { "none" } + menujoin { + "set" "![BUTTONS_set_or_create]Set or Create" + "setexisting" "![BUTTONS_set_if_exists]Set if Exists" + "add" "![BUTTONS_set_add]Add if Exists" + "multiply" "![BUTTONS_set_multiply]Multiply if Exists" + "block" "![BUTTONS_set_block]Block" + "none" "![BUTTONS_set_nothing]Do Nothing" + } + parmtag { "sidefx::look" "icon" } + } + parm { + name "xn__primvarsmoonraylocal_motion_blur_strength_multiplier_tqch" + label "Local Motion Blur Strength Multiplier" + type float + default { "1" } + help "Global strength multiplier for local motion blur application" + disablewhen "{ xn__primvarsmoonraylocal_motion_blur_strength_multiplier_control_u3ch == block } { xn__primvarsmoonraylocal_motion_blur_strength_multiplier_control_u3ch == none }" + range { 0 10 } + parmtag { "usdvaluetype" "float" } + } + parm { + name "xn__primvarsmoonraylocal_motion_blur_radius_multiplier_control_l0ch" + label "primvars:moonray:local_motion_blur_radius_multiplier" + type string + default { "none" } + menujoin { + "set" "![BUTTONS_set_or_create]Set or Create" + "setexisting" "![BUTTONS_set_if_exists]Set if Exists" + "add" "![BUTTONS_set_add]Add if Exists" + "multiply" "![BUTTONS_set_multiply]Multiply if Exists" + "block" "![BUTTONS_set_block]Block" + "none" "![BUTTONS_set_nothing]Do Nothing" + } + parmtag { "sidefx::look" "icon" } + } + parm { + name "xn__primvarsmoonraylocal_motion_blur_radius_multiplier_knch" + label "Local Motion Blur Radius Multiplier" + type float + default { "1" } + help "Global radius multiplier applied to per-region radius values, whether supplied via the \"radius\"/\"inner_radius\" point attributes or the \"local_motion_blur_radius_list\"/\"local_motion_blur_inner_radius_list\" explicit list attributes" + disablewhen "{ xn__primvarsmoonraylocal_motion_blur_radius_multiplier_control_l0ch == block } { xn__primvarsmoonraylocal_motion_blur_radius_multiplier_control_l0ch == none }" + range { 0 10 } + parmtag { "usdvaluetype" "float" } + } parm { name "xn__primvarsmoonrayuse_rotation_motion_blur_control_oich" label "primvars:moonray:use_rotation_motion_blur" diff --git a/houdini/soho/parameters/moonray_RdlPointGeometry.ds b/houdini/soho/parameters/moonray_RdlPointGeometry.ds index 6cd7793..f3d3c89 100644 --- a/houdini/soho/parameters/moonray_RdlPointGeometry.ds +++ b/houdini/soho/parameters/moonray_RdlPointGeometry.ds @@ -513,6 +513,158 @@ range { 0 10 } parmtag { "usdvaluetype" "float" } } + parm { + name "xn__primvarsmoonraylocal_motion_blur_radius_list_control_tqch" + label "primvars:moonray:local_motion_blur_radius_list" + type string + default { "none" } + menujoin { + "set" "![BUTTONS_set_or_create]Set or Create" + "setexisting" "![BUTTONS_set_if_exists]Set if Exists" + "add" "![BUTTONS_set_add]Add if Exists" + "multiply" "![BUTTONS_set_multiply]Multiply if Exists" + "block" "![BUTTONS_set_block]Block" + "none" "![BUTTONS_set_nothing]Do Nothing" + } + parmtag { "sidefx::look" "icon" } + } + multiparm { + name "local_motion_blur_radius_list" + label "Local Motion Blur Radius List" + default 0 + disablewhen "{ xn__primvarsmoonraylocal_motion_blur_radius_list_control_tqch == block } { xn__primvarsmoonraylocal_motion_blur_radius_list_control_tqch == none }" + parmtag { "usdvaluetype" "float[]" } + + parm { + name "xn__primvarsmoonraylocal_motion_blur_radius_list_sdch#" + label "Local Motion Blur Radius List" + type float + default { "0" } + help "Per-point outer radius for each local motion blur region. If empty, defaults to 1.0. Must match the length of local_motion_blur_position_list." + disablewhen "{ use_local_motion_blur == 0 }" + range { 0 10 } + parmtag { "moonray::is_parm" "1" } + } + } + + parm { + name "xn__primvarsmoonraylocal_motion_blur_inner_radius_list_control_l0ch" + label "primvars:moonray:local_motion_blur_inner_radius_list" + type string + default { "none" } + menujoin { + "set" "![BUTTONS_set_or_create]Set or Create" + "setexisting" "![BUTTONS_set_if_exists]Set if Exists" + "add" "![BUTTONS_set_add]Add if Exists" + "multiply" "![BUTTONS_set_multiply]Multiply if Exists" + "block" "![BUTTONS_set_block]Block" + "none" "![BUTTONS_set_nothing]Do Nothing" + } + parmtag { "sidefx::look" "icon" } + } + multiparm { + name "local_motion_blur_inner_radius_list" + label "Local Motion Blur Inner Radius List" + default 0 + disablewhen "{ xn__primvarsmoonraylocal_motion_blur_inner_radius_list_control_l0ch == block } { xn__primvarsmoonraylocal_motion_blur_inner_radius_list_control_l0ch == none }" + parmtag { "usdvaluetype" "float[]" } + + parm { + name "xn__primvarsmoonraylocal_motion_blur_inner_radius_list_knch#" + label "Local Motion Blur Inner Radius List" + type float + default { "0" } + help "Per-point inner radius for each local motion blur region (full-strength core). If empty, defaults to 1.0. Must match the length of local_motion_blur_position_list." + disablewhen "{ use_local_motion_blur == 0 }" + range { 0 10 } + parmtag { "moonray::is_parm" "1" } + } + } + + parm { + name "xn__primvarsmoonraylocal_motion_blur_multiplier_list_control_cxch" + label "primvars:moonray:local_motion_blur_multiplier_list" + type string + default { "none" } + menujoin { + "set" "![BUTTONS_set_or_create]Set or Create" + "setexisting" "![BUTTONS_set_if_exists]Set if Exists" + "add" "![BUTTONS_set_add]Add if Exists" + "multiply" "![BUTTONS_set_multiply]Multiply if Exists" + "block" "![BUTTONS_set_block]Block" + "none" "![BUTTONS_set_nothing]Do Nothing" + } + parmtag { "sidefx::look" "icon" } + } + multiparm { + name "local_motion_blur_multiplier_list" + label "Local Motion Blur Multiplier List" + default 0 + disablewhen "{ xn__primvarsmoonraylocal_motion_blur_multiplier_list_control_cxch == block } { xn__primvarsmoonraylocal_motion_blur_multiplier_list_control_cxch == none }" + parmtag { "usdvaluetype" "float[]" } + + parm { + name "xn__primvarsmoonraylocal_motion_blur_multiplier_list_bkch#" + label "Local Motion Blur Multiplier List" + type float + default { "0" } + help "Per-point motion blur strength multiplier for each local motion blur region. If empty, defaults to 1.0. Must match the length of local_motion_blur_position_list." + disablewhen "{ use_local_motion_blur == 0 }" + range { 0 10 } + parmtag { "moonray::is_parm" "1" } + } + } + + parm { + name "xn__primvarsmoonraylocal_motion_blur_strength_multiplier_control_u3ch" + label "primvars:moonray:local_motion_blur_strength_multiplier" + type string + default { "none" } + menujoin { + "set" "![BUTTONS_set_or_create]Set or Create" + "setexisting" "![BUTTONS_set_if_exists]Set if Exists" + "add" "![BUTTONS_set_add]Add if Exists" + "multiply" "![BUTTONS_set_multiply]Multiply if Exists" + "block" "![BUTTONS_set_block]Block" + "none" "![BUTTONS_set_nothing]Do Nothing" + } + parmtag { "sidefx::look" "icon" } + } + parm { + name "xn__primvarsmoonraylocal_motion_blur_strength_multiplier_tqch" + label "Local Motion Blur Strength Multiplier" + type float + default { "1" } + help "Global strength multiplier for local motion blur application" + disablewhen "{ xn__primvarsmoonraylocal_motion_blur_strength_multiplier_control_u3ch == block } { xn__primvarsmoonraylocal_motion_blur_strength_multiplier_control_u3ch == none }" + range { 0 10 } + parmtag { "usdvaluetype" "float" } + } + parm { + name "xn__primvarsmoonraylocal_motion_blur_radius_multiplier_control_l0ch" + label "primvars:moonray:local_motion_blur_radius_multiplier" + type string + default { "none" } + menujoin { + "set" "![BUTTONS_set_or_create]Set or Create" + "setexisting" "![BUTTONS_set_if_exists]Set if Exists" + "add" "![BUTTONS_set_add]Add if Exists" + "multiply" "![BUTTONS_set_multiply]Multiply if Exists" + "block" "![BUTTONS_set_block]Block" + "none" "![BUTTONS_set_nothing]Do Nothing" + } + parmtag { "sidefx::look" "icon" } + } + parm { + name "xn__primvarsmoonraylocal_motion_blur_radius_multiplier_knch" + label "Local Motion Blur Radius Multiplier" + type float + default { "1" } + help "Global radius multiplier applied to per-region radius values, whether supplied via the \"radius\"/\"inner_radius\" point attributes or the \"local_motion_blur_radius_list\"/\"local_motion_blur_inner_radius_list\" explicit list attributes" + disablewhen "{ xn__primvarsmoonraylocal_motion_blur_radius_multiplier_control_l0ch == block } { xn__primvarsmoonraylocal_motion_blur_radius_multiplier_control_l0ch == none }" + range { 0 10 } + parmtag { "usdvaluetype" "float" } + } parm { name "xn__primvarsmoonrayuse_rotation_motion_blur_control_oich" label "primvars:moonray:use_rotation_motion_blur" diff --git a/houdini/soho/parameters/moonray_RectLight.ds b/houdini/soho/parameters/moonray_RectLight.ds index b902976..8563666 100644 --- a/houdini/soho/parameters/moonray_RectLight.ds +++ b/houdini/soho/parameters/moonray_RectLight.ds @@ -79,8 +79,8 @@ parmtag { "usdvaluetype" "token" } } parm { - name "xn__inputscolor_control_06a" - label "inputs:color" + name "xn__moonraycolor_control_o8a" + label "moonray:color" type string default { "none" } menujoin { @@ -94,19 +94,19 @@ parmtag { "sidefx::look" "icon" } } parm { - name "xn__inputscolor_zta" + name "xn__moonraycolor_nva" label "Color" type color size 3 default { "1" "1" "1" } help "The light's RGB values.\nThese are combined multiplicatively with the intensity and other attributes in determining the light's 3-channel radiance." - disablewhen "{ xn__inputscolor_control_06a == block } { xn__inputscolor_control_06a == none }" + disablewhen "{ xn__moonraycolor_control_o8a == block } { xn__moonraycolor_control_o8a == none }" range { 0 10 } parmtag { "usdvaluetype" "color3f" } } parm { - name "xn__inputsintensity_control_jeb" - label "inputs:intensity" + name "xn__moonrayintensity_control_6fb" + label "moonray:intensity" type string default { "none" } menujoin { @@ -120,18 +120,18 @@ parmtag { "sidefx::look" "icon" } } parm { - name "xn__inputsintensity_i0a" + name "xn__moonrayintensity_51a" label "Intensity" type float default { "1" } help "The light's intensity.\nThis is combined multiplicatively with the color and other attributes in determining the light's 3-channel radiance." - disablewhen "{ xn__inputsintensity_control_jeb == block } { xn__inputsintensity_control_jeb == none }" + disablewhen "{ xn__moonrayintensity_control_6fb == block } { xn__moonrayintensity_control_6fb == none }" range { 0 10 } parmtag { "usdvaluetype" "float" } } parm { - name "xn__inputsexposure_control_wcb" - label "inputs:exposure" + name "xn__moonrayexposure_control_keb" + label "moonray:exposure" type string default { "none" } menujoin { @@ -145,12 +145,12 @@ parmtag { "sidefx::look" "icon" } } parm { - name "xn__inputsexposure_vya" + name "xn__moonrayexposure_j0a" label "Exposure" type float default { "0" } help "The light's exposure value.\nThis value provides an alternative to the intensity value as a mechanism for controlling the light's overall brightness, and is inspired by the corresponding photographic term but is generalised to apply independently to each light. To calculate its effect, pow(2, exposure) is combined multiplicatively with the color and other attributes in determining the light's 3-channel radiance." - disablewhen "{ xn__inputsexposure_control_wcb == block } { xn__inputsexposure_control_wcb == none }" + disablewhen "{ xn__moonrayexposure_control_keb == block } { xn__moonrayexposure_control_keb == none }" range { 0 10 } parmtag { "usdvaluetype" "float" } } @@ -308,8 +308,8 @@ parmtag { "usdvaluetype" "string" } } parm { - name "xn__inputsnormalize_control_jeb" - label "inputs:normalize" + name "xn__moonraynormalized_control_thb" + label "moonray:normalized" type string default { "none" } menujoin { @@ -321,12 +321,12 @@ parmtag { "sidefx::look" "icon" } } parm { - name "xn__inputsnormalize_i0a" + name "xn__moonraynormalized_s3a" label "Normalized" type toggle default { "1" } help "When set to true, the size of the light can be changed without altering the amount of total energy cast into the scene. This is achieved via scaling the light's radiance by the reciprocal of its surface area. When set to false, the radiance is used as-is, regardless of surface area." - disablewhen "{ xn__inputsnormalize_control_jeb == block } { xn__inputsnormalize_control_jeb == none }" + disablewhen "{ xn__moonraynormalized_control_thb == block } { xn__moonraynormalized_control_thb == none }" parmtag { "usdvaluetype" "bool" } } parm { @@ -352,8 +352,8 @@ parmtag { "usdvaluetype" "bool" } } parm { - name "xn__inputswidth_control_06a" - label "inputs:width" + name "xn__moonraywidth_control_o8a" + label "moonray:width" type string default { "none" } menujoin { @@ -367,18 +367,18 @@ parmtag { "sidefx::look" "icon" } } parm { - name "xn__inputswidth_zta" + name "xn__moonraywidth_nva" label "Width" type float default { "1" } help "The width of the rectangle, i.e. the size measured in the light's local x-direction." - disablewhen "{ xn__inputswidth_control_06a == block } { xn__inputswidth_control_06a == none }" + disablewhen "{ xn__moonraywidth_control_o8a == block } { xn__moonraywidth_control_o8a == none }" range { 0 10 } parmtag { "usdvaluetype" "float" } } parm { - name "xn__inputsheight_control_n8a" - label "inputs:height" + name "xn__moonrayheight_control_bbb" + label "moonray:height" type string default { "none" } menujoin { @@ -392,12 +392,12 @@ parmtag { "sidefx::look" "icon" } } parm { - name "xn__inputsheight_mva" + name "xn__moonrayheight_9wa" label "Height" type float default { "1" } help "The height of the rectangle, i.e. the size measured in the light's local y-direction." - disablewhen "{ xn__inputsheight_control_n8a == block } { xn__inputsheight_control_n8a == none }" + disablewhen "{ xn__moonrayheight_control_bbb == block } { xn__moonrayheight_control_bbb == none }" range { 0 10 } parmtag { "usdvaluetype" "float" } } @@ -513,8 +513,8 @@ label "Map" parm { - name "xn__inputstexturefile_control_shbh" - label "inputs:texture:file" + name "xn__moonraytexture_control_xcb" + label "moonray:texture" type string default { "none" } menujoin { @@ -526,12 +526,12 @@ parmtag { "sidefx::look" "icon" } } parm { - name "xn__inputstexturefile_r3ah" + name "xn__moonraytexture_wya" label "Texture" type file default { "" } help "File name of the texture applied to the light. If set to the empty string, no texture is applied. Any file format supported by OpenImageIO can be used. The texture is used in 2 ways - for looking up the texture value at the intersection point when a ray hits the light, and for building a lookup-table-based auxilliary data structure used for distributing light samples over the texture." - disablewhen "{ xn__inputstexturefile_control_shbh == block } { xn__inputstexturefile_control_shbh == none }" + disablewhen "{ xn__moonraytexture_control_xcb == block } { xn__moonraytexture_control_xcb == none }" parmtag { "usdvaluetype" "asset" } } parm { diff --git a/houdini/soho/parameters/moonray_SphereLight.ds b/houdini/soho/parameters/moonray_SphereLight.ds index 66d863a..9e92be5 100644 --- a/houdini/soho/parameters/moonray_SphereLight.ds +++ b/houdini/soho/parameters/moonray_SphereLight.ds @@ -79,8 +79,8 @@ parmtag { "usdvaluetype" "token" } } parm { - name "xn__inputscolor_control_06a" - label "inputs:color" + name "xn__moonraycolor_control_o8a" + label "moonray:color" type string default { "none" } menujoin { @@ -94,19 +94,19 @@ parmtag { "sidefx::look" "icon" } } parm { - name "xn__inputscolor_zta" + name "xn__moonraycolor_nva" label "Color" type color size 3 default { "1" "1" "1" } help "The light's RGB values.\nThese are combined multiplicatively with the intensity and other attributes in determining the light's 3-channel radiance." - disablewhen "{ xn__inputscolor_control_06a == block } { xn__inputscolor_control_06a == none }" + disablewhen "{ xn__moonraycolor_control_o8a == block } { xn__moonraycolor_control_o8a == none }" range { 0 10 } parmtag { "usdvaluetype" "color3f" } } parm { - name "xn__inputsintensity_control_jeb" - label "inputs:intensity" + name "xn__moonrayintensity_control_6fb" + label "moonray:intensity" type string default { "none" } menujoin { @@ -120,18 +120,18 @@ parmtag { "sidefx::look" "icon" } } parm { - name "xn__inputsintensity_i0a" + name "xn__moonrayintensity_51a" label "Intensity" type float default { "1" } help "The light's intensity.\nThis is combined multiplicatively with the color and other attributes in determining the light's 3-channel radiance." - disablewhen "{ xn__inputsintensity_control_jeb == block } { xn__inputsintensity_control_jeb == none }" + disablewhen "{ xn__moonrayintensity_control_6fb == block } { xn__moonrayintensity_control_6fb == none }" range { 0 10 } parmtag { "usdvaluetype" "float" } } parm { - name "xn__inputsexposure_control_wcb" - label "inputs:exposure" + name "xn__moonrayexposure_control_keb" + label "moonray:exposure" type string default { "none" } menujoin { @@ -145,12 +145,12 @@ parmtag { "sidefx::look" "icon" } } parm { - name "xn__inputsexposure_vya" + name "xn__moonrayexposure_j0a" label "Exposure" type float default { "0" } help "The light's exposure value.\nThis value provides an alternative to the intensity value as a mechanism for controlling the light's overall brightness, and is inspired by the corresponding photographic term but is generalised to apply independently to each light. To calculate its effect, pow(2, exposure) is combined multiplicatively with the color and other attributes in determining the light's 3-channel radiance." - disablewhen "{ xn__inputsexposure_control_wcb == block } { xn__inputsexposure_control_wcb == none }" + disablewhen "{ xn__moonrayexposure_control_keb == block } { xn__moonrayexposure_control_keb == none }" range { 0 10 } parmtag { "usdvaluetype" "float" } } @@ -308,8 +308,8 @@ parmtag { "usdvaluetype" "string" } } parm { - name "xn__inputsnormalize_control_jeb" - label "inputs:normalize" + name "xn__moonraynormalized_control_thb" + label "moonray:normalized" type string default { "none" } menujoin { @@ -321,12 +321,12 @@ parmtag { "sidefx::look" "icon" } } parm { - name "xn__inputsnormalize_i0a" + name "xn__moonraynormalized_s3a" label "Normalized" type toggle default { "1" } help "When set to true, the size of the light can be changed without altering the amount of total energy cast into the scene. This is achieved via scaling the light's radiance by the reciprocal of its surface area. When set to false, the radiance is used as-is, regardless of surface area." - disablewhen "{ xn__inputsnormalize_control_jeb == block } { xn__inputsnormalize_control_jeb == none }" + disablewhen "{ xn__moonraynormalized_control_thb == block } { xn__moonraynormalized_control_thb == none }" parmtag { "usdvaluetype" "bool" } } parm { @@ -352,8 +352,8 @@ parmtag { "usdvaluetype" "bool" } } parm { - name "xn__inputsradius_control_n8a" - label "inputs:radius" + name "xn__moonrayradius_control_bbb" + label "moonray:radius" type string default { "none" } menujoin { @@ -367,12 +367,12 @@ parmtag { "sidefx::look" "icon" } } parm { - name "xn__inputsradius_mva" + name "xn__moonrayradius_9wa" label "Radius" type float default { "1" } help "Radius of the sphere." - disablewhen "{ xn__inputsradius_control_n8a == block } { xn__inputsradius_control_n8a == none }" + disablewhen "{ xn__moonrayradius_control_bbb == block } { xn__moonrayradius_control_bbb == none }" range { 0 10 } parmtag { "usdvaluetype" "float" } } diff --git a/houdini/soho/parameters/moonray_SphericalCamera.ds b/houdini/soho/parameters/moonray_SphericalCamera.ds index e2b6bb6..f84cf77 100644 --- a/houdini/soho/parameters/moonray_SphericalCamera.ds +++ b/houdini/soho/parameters/moonray_SphericalCamera.ds @@ -62,8 +62,8 @@ label "Motion Blur" parm { - name "xn__shutteropen_control_16a" - label "shutter:open" + name "xn__moonraymb_shutter_open_control_ypb" + label "moonray:mb_shutter_open" type string default { "none" } menujoin { @@ -77,18 +77,18 @@ parmtag { "sidefx::look" "icon" } } parm { - name "xn__shutteropen_0ta" + name "mb_shutter_open" label "Mb Shutter Open" type float default { "-0.25" } help "Frame at which the shutter opens, i.e., the beginning of the motion blur interval." - disablewhen "{ xn__shutteropen_control_16a == block } { xn__shutteropen_control_16a == none }" + disablewhen "{ xn__moonraymb_shutter_open_control_ypb == block } { xn__moonraymb_shutter_open_control_ypb == none }" range { 0 10 } parmtag { "usdvaluetype" "float" } } parm { - name "xn__shutterclose_control_o8a" - label "shutter:close" + name "xn__moonraymb_shutter_close_control_lrb" + label "moonray:mb_shutter_close" type string default { "none" } menujoin { @@ -102,12 +102,12 @@ parmtag { "sidefx::look" "icon" } } parm { - name "xn__shutterclose_nva" + name "mb_shutter_close" label "Mb Shutter Close" type float default { "0.25" } help "Frame at which the shutter closes, i.e., the end of the motion blur interval." - disablewhen "{ xn__shutterclose_control_o8a == block } { xn__shutterclose_control_o8a == none }" + disablewhen "{ xn__moonraymb_shutter_close_control_lrb == block } { xn__moonraymb_shutter_close_control_lrb == none }" range { 0 10 } parmtag { "usdvaluetype" "float" } } @@ -369,8 +369,8 @@ parmtag { "usdvaluetype" "float" } } parm { - name "focalLength_control" - label "focalLength" + name "xn__moonrayfocal_control_o8a" + label "moonray:focal" type string default { "none" } menujoin { @@ -384,12 +384,12 @@ parmtag { "sidefx::look" "icon" } } parm { - name "focalLength" + name "focal" label "Focal" type float default { "30" } help "Focal length" - disablewhen "{ focalLength_control == block } { focalLength_control == none }" + disablewhen "{ xn__moonrayfocal_control_o8a == block } { xn__moonrayfocal_control_o8a == none }" range { 0 10 } parmtag { "usdvaluetype" "float" } } diff --git a/houdini/soho/parameters/moonray_SpotLight.ds b/houdini/soho/parameters/moonray_SpotLight.ds index 0345da3..954ee43 100644 --- a/houdini/soho/parameters/moonray_SpotLight.ds +++ b/houdini/soho/parameters/moonray_SpotLight.ds @@ -79,8 +79,8 @@ parmtag { "usdvaluetype" "token" } } parm { - name "xn__inputscolor_control_06a" - label "inputs:color" + name "xn__moonraycolor_control_o8a" + label "moonray:color" type string default { "none" } menujoin { @@ -94,19 +94,19 @@ parmtag { "sidefx::look" "icon" } } parm { - name "xn__inputscolor_zta" + name "xn__moonraycolor_nva" label "Color" type color size 3 default { "1" "1" "1" } help "The light's RGB values.\nThese are combined multiplicatively with the intensity and other attributes in determining the light's 3-channel radiance." - disablewhen "{ xn__inputscolor_control_06a == block } { xn__inputscolor_control_06a == none }" + disablewhen "{ xn__moonraycolor_control_o8a == block } { xn__moonraycolor_control_o8a == none }" range { 0 10 } parmtag { "usdvaluetype" "color3f" } } parm { - name "xn__inputsintensity_control_jeb" - label "inputs:intensity" + name "xn__moonrayintensity_control_6fb" + label "moonray:intensity" type string default { "none" } menujoin { @@ -120,18 +120,18 @@ parmtag { "sidefx::look" "icon" } } parm { - name "xn__inputsintensity_i0a" + name "xn__moonrayintensity_51a" label "Intensity" type float default { "1" } help "The light's intensity.\nThis is combined multiplicatively with the color and other attributes in determining the light's 3-channel radiance." - disablewhen "{ xn__inputsintensity_control_jeb == block } { xn__inputsintensity_control_jeb == none }" + disablewhen "{ xn__moonrayintensity_control_6fb == block } { xn__moonrayintensity_control_6fb == none }" range { 0 10 } parmtag { "usdvaluetype" "float" } } parm { - name "xn__inputsexposure_control_wcb" - label "inputs:exposure" + name "xn__moonrayexposure_control_keb" + label "moonray:exposure" type string default { "none" } menujoin { @@ -145,12 +145,12 @@ parmtag { "sidefx::look" "icon" } } parm { - name "xn__inputsexposure_vya" + name "xn__moonrayexposure_j0a" label "Exposure" type float default { "0" } help "The light's exposure value.\nThis value provides an alternative to the intensity value as a mechanism for controlling the light's overall brightness, and is inspired by the corresponding photographic term but is generalised to apply independently to each light. To calculate its effect, pow(2, exposure) is combined multiplicatively with the color and other attributes in determining the light's 3-channel radiance." - disablewhen "{ xn__inputsexposure_control_wcb == block } { xn__inputsexposure_control_wcb == none }" + disablewhen "{ xn__moonrayexposure_control_keb == block } { xn__moonrayexposure_control_keb == none }" range { 0 10 } parmtag { "usdvaluetype" "float" } } @@ -308,8 +308,8 @@ parmtag { "usdvaluetype" "string" } } parm { - name "xn__inputsnormalize_control_jeb" - label "inputs:normalize" + name "xn__moonraynormalized_control_thb" + label "moonray:normalized" type string default { "none" } menujoin { @@ -321,12 +321,12 @@ parmtag { "sidefx::look" "icon" } } parm { - name "xn__inputsnormalize_i0a" + name "xn__moonraynormalized_s3a" label "Normalized" type toggle default { "1" } help "When set to true, the size of the light can be changed without altering the amount of total energy cast into the scene. This is achieved via scaling the light's radiance by the reciprocal of its surface area. When set to false, the radiance is used as-is, regardless of surface area." - disablewhen "{ xn__inputsnormalize_control_jeb == block } { xn__inputsnormalize_control_jeb == none }" + disablewhen "{ xn__moonraynormalized_control_thb == block } { xn__moonraynormalized_control_thb == none }" parmtag { "usdvaluetype" "bool" } } parm { @@ -957,8 +957,8 @@ label "Cone" parm { - name "xn__inputsradius_control_n8a" - label "inputs:radius" + name "xn__moonraylens_radius_control_gjb" + label "moonray:lens_radius" type string default { "none" } menujoin { @@ -972,12 +972,12 @@ parmtag { "sidefx::look" "icon" } } parm { - name "xn__inputsradius_mva" + name "xn__moonraylens_radius_f5a" label "Lens Radius" type float default { "1" } help "The radius of the SpotLight's lens (when the aspect ratio is 1.0, so that the lens is circular)." - disablewhen "{ xn__inputsradius_control_n8a == block } { xn__inputsradius_control_n8a == none }" + disablewhen "{ xn__moonraylens_radius_control_gjb == block } { xn__moonraylens_radius_control_gjb == none }" range { 0 10 } parmtag { "usdvaluetype" "float" } } @@ -1032,8 +1032,8 @@ parmtag { "usdvaluetype" "float" } } parm { - name "xn__inputsangle_control_06a" - label "inputs:angle" + name "xn__moonrayouter_cone_angle_control_lrb" + label "moonray:outer_cone_angle" type string default { "none" } menujoin { @@ -1047,12 +1047,12 @@ parmtag { "sidefx::look" "icon" } } parm { - name "xn__inputsangle_zta" + name "xn__moonrayouter_cone_angle_keb" label "Outer Cone Angle" type float default { "60" } help "The apex angle of the bounding cone of the light emitted by the SpotLight. No illumination takes placeoutside this angle. This is a full angle, measured from one side to the other. There is a falloff function applied between the outer and inner cones - see the angle_falloff_type attribute." - disablewhen "{ xn__inputsangle_control_06a == block } { xn__inputsangle_control_06a == none }" + disablewhen "{ xn__moonrayouter_cone_angle_control_lrb == block } { xn__moonrayouter_cone_angle_control_lrb == none }" range { 0 10 } parmtag { "usdvaluetype" "float" } } diff --git a/houdini/soho/parameters/moonray_VdbVolume.ds b/houdini/soho/parameters/moonray_VdbVolume.ds new file mode 100644 index 0000000..2a49351 --- /dev/null +++ b/houdini/soho/parameters/moonray_VdbVolume.ds @@ -0,0 +1,245 @@ +#include "$HFS/houdini/soho/parameters/CommonMacros.ds" +{ + name parameters + group { + name "folder" + label "Volume Baking" + + parm { + name "xn__inputsbake_resolution_mode_control_gwb" + label "inputs:bake_resolution_mode" + type string + default { "none" } + menujoin { + "set" "![BUTTONS_set_or_create]Set or Create" + "setexisting" "![BUTTONS_set_if_exists]Set if Exists" + "add" "![BUTTONS_set_add]Add if Exists" + "multiply" "![BUTTONS_set_multiply]Multiply if Exists" + "block" "![BUTTONS_set_block]Block" + "none" "![BUTTONS_set_nothing]Do Nothing" + } + parmtag { "sidefx::look" "icon" } + } + parm { + name "xn__inputsbake_resolution_mode_fjb" + label "Bake Resolution Mode" + type string + default { "default" } + help "Method to specify grid resolution of baked density grid. Choices are:\n \"default\": For shaders that are bound to vdb volumes, use vdb resolution.\n For shaders that are bounds to mesh geometries use 100 divisions\n \"divisions\": Specify number of divisions.\n \"voxel size\": Specify voxel size." + disablewhen "{ xn__inputsbake_resolution_mode_control_gwb == block } { xn__inputsbake_resolution_mode_control_gwb == none }" + menu { + "default" "Default" + "divisions" "Divisions" + "voxel size" "Voxel Size" + } + parmtag { "usdvaluetype" "token" } + } + parm { + name "xn__inputsbake_divisions_control_omb" + label "inputs:bake_divisions" + type string + default { "none" } + menujoin { + "set" "![BUTTONS_set_or_create]Set or Create" + "setexisting" "![BUTTONS_set_if_exists]Set if Exists" + "add" "![BUTTONS_set_add]Add if Exists" + "multiply" "![BUTTONS_set_multiply]Multiply if Exists" + "block" "![BUTTONS_set_block]Block" + "none" "![BUTTONS_set_nothing]Do Nothing" + } + parmtag { "sidefx::look" "icon" } + } + parm { + name "xn__inputsbake_divisions_n8a" + label "Bake Divisions" + type integer + default { "100" } + help "Divide widest axis by this many divisions" + disablewhen "{ xn__inputsbake_divisions_control_omb == block } { xn__inputsbake_divisions_control_omb == none }" + range { 0 10 } + parmtag { "usdvaluetype" "int" } + } + parm { + name "xn__inputsbake_voxel_size_control_bob" + label "inputs:bake_voxel_size" + type string + default { "none" } + menujoin { + "set" "![BUTTONS_set_or_create]Set or Create" + "setexisting" "![BUTTONS_set_if_exists]Set if Exists" + "add" "![BUTTONS_set_add]Add if Exists" + "multiply" "![BUTTONS_set_multiply]Multiply if Exists" + "block" "![BUTTONS_set_block]Block" + "none" "![BUTTONS_set_nothing]Do Nothing" + } + parmtag { "sidefx::look" "icon" } + } + parm { + name "xn__inputsbake_voxel_size_99a" + label "Bake Voxel Size" + type float + default { "10" } + help "Size of voxel in world space" + disablewhen "{ xn__inputsbake_voxel_size_control_bob == block } { xn__inputsbake_voxel_size_control_bob == none }" + range { 0 10 } + parmtag { "usdvaluetype" "float" } + } + } + + group { + name "folder2" + label "Volume" + + parm { + name "xn__inputssurface_opacity_threshold_control_l4b" + label "inputs:surface_opacity_threshold" + type string + default { "none" } + menujoin { + "set" "![BUTTONS_set_or_create]Set or Create" + "setexisting" "![BUTTONS_set_if_exists]Set if Exists" + "add" "![BUTTONS_set_add]Add if Exists" + "multiply" "![BUTTONS_set_multiply]Multiply if Exists" + "block" "![BUTTONS_set_block]Block" + "none" "![BUTTONS_set_nothing]Do Nothing" + } + parmtag { "sidefx::look" "icon" } + } + parm { + name "xn__inputssurface_opacity_threshold_krb" + label "Surface Opacity Threshold" + type float + default { "0.5" } + help "Accumulated opacity that's considered the 'surface' for computing surface position and Z" + disablewhen "{ xn__inputssurface_opacity_threshold_control_l4b == block } { xn__inputssurface_opacity_threshold_control_l4b == none }" + range { 0 10 } + parmtag { "usdvaluetype" "float" } + } + parm { + name "xn__inputsopacity_gain_mult_control_krb" + label "inputs:opacity_gain_mult" + type string + default { "none" } + menujoin { + "set" "![BUTTONS_set_or_create]Set or Create" + "setexisting" "![BUTTONS_set_if_exists]Set if Exists" + "add" "![BUTTONS_set_add]Add if Exists" + "multiply" "![BUTTONS_set_multiply]Multiply if Exists" + "block" "![BUTTONS_set_block]Block" + "none" "![BUTTONS_set_nothing]Do Nothing" + } + parmtag { "sidefx::look" "icon" } + } + parm { + name "xn__inputsopacity_gain_mult_jeb" + label "Opacity Gain Mult" + type color + size 3 + default { "1" "1" "1" } + help "A multiplier applied to the volume density" + disablewhen "{ xn__inputsopacity_gain_mult_control_krb == block } { xn__inputsopacity_gain_mult_control_krb == none }" + range { 0 10 } + parmtag { "usdvaluetype" "color3f" } + } + parm { + name "xn__inputscolor_mult_control_5fb" + label "inputs:color_mult" + type string + default { "none" } + menujoin { + "set" "![BUTTONS_set_or_create]Set or Create" + "setexisting" "![BUTTONS_set_if_exists]Set if Exists" + "add" "![BUTTONS_set_add]Add if Exists" + "multiply" "![BUTTONS_set_multiply]Multiply if Exists" + "block" "![BUTTONS_set_block]Block" + "none" "![BUTTONS_set_nothing]Do Nothing" + } + parmtag { "sidefx::look" "icon" } + } + parm { + name "xn__inputscolor_mult_41a" + label "Color Mult" + type color + size 3 + default { "1" "1" "1" } + help "The albedo of the volume" + disablewhen "{ xn__inputscolor_mult_control_5fb == block } { xn__inputscolor_mult_control_5fb == none }" + range { 0 10 } + parmtag { "usdvaluetype" "color3f" } + } + parm { + name "xn__inputsincandescence_gain_mult_control_c1b" + label "inputs:incandescence_gain_mult" + type string + default { "none" } + menujoin { + "set" "![BUTTONS_set_or_create]Set or Create" + "setexisting" "![BUTTONS_set_if_exists]Set if Exists" + "add" "![BUTTONS_set_add]Add if Exists" + "multiply" "![BUTTONS_set_multiply]Multiply if Exists" + "block" "![BUTTONS_set_block]Block" + "none" "![BUTTONS_set_nothing]Do Nothing" + } + parmtag { "sidefx::look" "icon" } + } + parm { + name "xn__inputsincandescence_gain_mult_bob" + label "Incandescence Gain Mult" + type color + size 3 + default { "1" "1" "1" } + help "A multiplier applied to the volume emission" + disablewhen "{ xn__inputsincandescence_gain_mult_control_c1b == block } { xn__inputsincandescence_gain_mult_control_c1b == none }" + range { 0 10 } + parmtag { "usdvaluetype" "color3f" } + } + parm { + name "xn__inputsanisotropy_control_5fb" + label "inputs:anisotropy" + type string + default { "none" } + menujoin { + "set" "![BUTTONS_set_or_create]Set or Create" + "setexisting" "![BUTTONS_set_if_exists]Set if Exists" + "add" "![BUTTONS_set_add]Add if Exists" + "multiply" "![BUTTONS_set_multiply]Multiply if Exists" + "block" "![BUTTONS_set_block]Block" + "none" "![BUTTONS_set_nothing]Do Nothing" + } + parmtag { "sidefx::look" "icon" } + } + parm { + name "xn__inputsanisotropy_41a" + label "Anisotropy" + type float + default { "0" } + help "Value in the interval [-1,1] that defines how foward (1) or backward (-1) scattering the volume is. A value of 0.0 indicates an isotropic volume." + disablewhen "{ xn__inputsanisotropy_control_5fb == block } { xn__inputsanisotropy_control_5fb == none }" + range { 0 10 } + parmtag { "usdvaluetype" "float" } + } + } + + parm { + name "xn__inputslabel_control_06a" + label "inputs:label" + type string + default { "none" } + menujoin { + "set" "![BUTTONS_set_or_create]Set or Create" + "setexisting" "![BUTTONS_set_if_exists]Set if Exists" + "block" "![BUTTONS_set_block]Block" + "none" "![BUTTONS_set_nothing]Do Nothing" + } + parmtag { "sidefx::look" "icon" } + } + parm { + name "xn__inputslabel_zta" + label "Label" + type string + default { "" } + help "label used in light aovs" + disablewhen "{ xn__inputslabel_control_06a == block } { xn__inputslabel_control_06a == none }" + parmtag { "usdvaluetype" "string" } + } +} diff --git a/scripts/update_hdas.py b/scripts/update_hdas.py new file mode 100644 index 0000000..0f8ab4e --- /dev/null +++ b/scripts/update_hdas.py @@ -0,0 +1,2525 @@ +# Copyright 2026 DreamWorks Animation LLC +# SPDX-License-Identifier: Apache-2.0 +""" +Generate the Houdini plugin artifacts in moonray_dcc_plugins from RDL2 metadata. + +Every file this writes is derived data: the shader/light/geometry attribute +descriptions come from rdl2_json_exporter, which reads the proxy DSOs on +RDL2_DSO_PATH. Outputs, relative to --output-dir: + + otls/Vop::DW_MOONRAY::::.hda one VOP HDA per shading class + moonray_nodes.json serialized class/parm metadata + soho/parameters/HdMoonrayRendererPlugin_{Light,Geometry,Global,Aov}.ds + soho/parameters/moonray_Override.ds + soho/parameters/moonray_.ds + +Runtime dependencies: + - hython / hou (Houdini writes the .hda and .ds files itself) + - rdl2_json_exporter on $PATH, with $RDL2_DSO_PATH set to the proxy DSOs + - pxr Python modules (optional; falls back to static output tags) + +To run this script: + source /scripts/setup.sh + hython update_houdini_hdas.py --output-dir /houdini +""" +from __future__ import absolute_import, print_function + +import argparse +import json +import logging +import os +import re +import shutil +import subprocess + +import hou +from pxr import Sdf, Sdr, Usd, UsdLux + + +logger = logging.getLogger(__name__) + +MOONRAY_DATA_JSON_FILE = os.path.join(os.path.dirname(__file__), "usd_attribute_map.json") +# The default output directory is the "houdini" subdirectory of the current +# working directory, which is expected to be the root of the moonray_dcc_plugins repo. +# This is where the script will write moonray_nodes.json and all generated HDAs and .ds files. +DEFAULT_OUTPUT_DIR = os.path.join(os.getcwd(), 'houdini') +MOONSHINE_DATA_FILE = "moonray_nodes.json" + +MR_TYPE_CAMERA = 'Camera' +MR_TYPE_DISPLACEMENT = 'Displacement' +MR_TYPE_DISPLAY_FILTER = 'DisplayFilter' +MR_TYPE_GEOMETRY = 'Geometry' +MR_TYPE_HAIR_LAYERABLE = 'DwaBaseHairLayerable' +MR_TYPE_LAYERABLE = 'DwaBaseLayerable' +MR_TYPE_LIGHT = 'Light' +MR_TYPE_LIGHT_FILTER = 'LightFilter' +MR_TYPE_LIGHT_SET = 'LightSet' +MR_TYPE_MAP = 'Map' +MR_TYPE_MATERIAL = 'Material' +MR_TYPE_DWA_BASE = 'DwaBase' +MR_TYPE_NORMALMAP = 'NormalMap' +MR_TYPE_RENDER_OUTPUT = 'RenderOutput' +MR_TYPE_TRACESET = 'TraceSet' +MR_TYPE_VOLUME = 'Volume' + +BOOL = 'Bool' +BOOLVECTOR = 'BoolVector' +INT = 'Int' +INTVECTOR = 'IntVector' +FLOAT = 'Float' +FLOATVECTOR = 'FloatVector' +DOUBLE = 'Double' +DOUBLEVECTOR = 'DoubleVector' +VEC2F = 'Vec2f' +VEC2FVECTOR = 'Vec2fVector' +VEC3D = 'Vec3d' +VEC3F = 'Vec3f' +VEC3FVECTOR = 'Vec3fVector' +VEC4F = 'Vec4f' +VEC4FVECTOR = 'Vec4fVector' +MAT4F = 'Mat4f' +MAT4FVECTOR = 'Mat4fVector' +MAT4D = 'Mat4d' +MAT4DVECTOR = 'Mat4dVector' +MAT3F = 'Mat3f' +MAT3FVECTOR = 'Mat3fVector' +RGB = 'Rgb' +RGBVECTOR = 'RgbVector' +RGBA = 'Rgba' +RGBAVECTOR = 'RgbaVector' +SCENEOBJECT = 'SceneObject*' +SCENEOBJECTVECTOR = 'SceneObjectVector' +SCENEOBJECTINDEXABLE = 'SceneObjectIndexable' +STRING = 'String' +STRINGVECTOR = 'StringVector' + +BIND_SUFFIX = "_bind" +HANDLED_PARM_TYPES = [ + hou.parmTemplateType.Float, + hou.parmTemplateType.Int, + hou.parmTemplateType.String, + hou.parmTemplateType.Toggle, +] + +ARRAY_TYPE_MAP = { + 'FloatVector': (float, 1), + 'IntVector': (int, 1), + 'RgbVector': (float, 3), + 'SceneObjectVector': (str, 1), + 'StringVector': (str, 1), + 'Vec2fVector': (float, 2), + 'Vec3fVector': (float, 3), + 'Vec4fVector': (float, 4), +} + +RAMP_COMPONENT_INTERPOLATIONS = 'interpolation_types' +RAMP_COMPONENT_VALUES = 'values' +RAMP_COMPONENT_POSITIONS = 'positions' + +RAMP_MOONRAY_NONE = 0 +RAMP_MOONRAY_LINEAR = 1 +RAMP_MOONRAY_CATMULL_ROM = 5 +RAMP_MOONRAY_MONOTONE_CUBIC = 6 +RAMP_MOONRAY_SMOOTH = 4 + +RAMP_INTERP_LOOKUP = { + hou.rampBasis.Constant: RAMP_MOONRAY_NONE, + hou.rampBasis.Linear: RAMP_MOONRAY_LINEAR, + hou.rampBasis.CatmullRom: RAMP_MOONRAY_CATMULL_ROM, + hou.rampBasis.MonotoneCubic: RAMP_MOONRAY_MONOTONE_CUBIC, + hou.rampBasis.Bezier: RAMP_MOONRAY_SMOOTH, + hou.rampBasis.BSpline: RAMP_MOONRAY_SMOOTH, + hou.rampBasis.Hermite: RAMP_MOONRAY_SMOOTH, +} + +TAG_IS_MOONRAY_PARM = "moonray::is_parm" +TAG_SHADER_IS_PARM = "sidefx::shader_isparm" +DEFAULT_MOONRAY_PARM_TAGS = {TAG_IS_MOONRAY_PARM: "1"} +DISPLAY_LOGARITHMIC = 'logarithmic' + +IGNORE_CODE_MISMATCHES = ( + 'AttributeMap', + 'ImageMap', + 'MeshLight', + 'SpotLight', + 'StampMap', +) + +VAR_SKIP_MOONRAY_BUGS = 'DWA_SKIP_MOONRAY_BUILD_BUGS' +VAR_CLASSES_JSON = 'MOONRAY_CLASSES_JSON' + +VOP_TYPES = ( + MR_TYPE_DISPLACEMENT, + MR_TYPE_DISPLAY_FILTER, + MR_TYPE_HAIR_LAYERABLE, + MR_TYPE_LAYERABLE, + MR_TYPE_MAP, + MR_TYPE_MATERIAL, + MR_TYPE_NORMALMAP, + MR_TYPE_VOLUME, + MR_TYPE_DWA_BASE, +) + +VOPS_WITH_CUSTOM_UIS = set(( + "AttributeMap", + "DwaSwitchMaterial", + "ImageMap", + "ImageNormalMap", + "SwitchColorMap", + "SwitchFloatMap", + "SwitchMaterial", +)) + +RENDER_PROPERTIES = ( + 'label', + 'static', + 'side_type', + 'reverse_normals', + 'visible_in_camera', + 'visible_shadow', + 'visible_diffuse_reflection', + 'visible_diffuse_transmission', + 'visible_glossy_reflection', + 'visible_glossy_transmission', + 'visible_mirror_reflection', + 'visible_mirror_transmission', + 'visible_volume', + 'ray_epsilon', + 'shadow_ray_epsilon', +) + +DEPRECATED_PREFIX = "_deprecated_" + +# Documentation URL embedded in each HDA's HelpUrl section. Empty means no +# HelpUrl section is written; set it with --help-url. +HELP_URL = os.environ.get('MOONRAY_HDA_HELP_URL', '') + +MOONRAY_TO_USD_TYPE = { + "Int": "int", + "Bool": "bool", + "Float": "float", + "Double": "double", + "String": "string", + "Rgb": "color3f", + "RgbVector": "color3f[]", + "Vec2f": "float2", + "Vec3f": "float3", + "FloatVector": "float[]", +} + +try: + with open(MOONRAY_DATA_JSON_FILE, 'r') as file: + USD_ATTRIBUTE_MAP = json.load(file) +except Exception: + USD_ATTRIBUTE_MAP = {} + +def _decode(value): + if value is None: + return '' + if hasattr(value, 'decode'): + return value.decode() + return value + + +def ensure_directory(path): + if not os.path.isdir(path): + os.makedirs(path) + + +def validate_public_packages(package_string): + """Refuse a package set that would put proprietary shaders in a public repo. + + moonshine_dwa and friends carry DreamWorks' closed source shaders. The + generator itself is package agnostic: it builds a node for every scene + class it is given, so the package set is the only thing keeping those + shaders out of the public artifacts. + """ + for pkg in package_string.split(): + if 'dwa' in pkg.lower(): + raise ValueError( + "DWA package detected: '{0}'. Public builds must not use DWA " + "packages. Pass --internal to build the internal plugin set.".format(pkg) + ) + + +def get_major_moonshine_version(package_string): + try: + return package_string.partition("moonshine-")[2].split()[0].split(".")[0] + except Exception: + raise ValueError( + "Couldn't determine major moonshine version from arg: {0}".format( + package_string) + ) + + +def rdla_to_usd_type(type_name): + type_map = { + BOOL: Sdf.ValueTypeNames.Bool, + BOOLVECTOR: Sdf.ValueTypeNames.BoolArray, + INT: Sdf.ValueTypeNames.Int, + INTVECTOR: Sdf.ValueTypeNames.IntArray, + FLOAT: Sdf.ValueTypeNames.Float, + FLOATVECTOR: Sdf.ValueTypeNames.FloatArray, + DOUBLE: Sdf.ValueTypeNames.Double, + DOUBLEVECTOR: Sdf.ValueTypeNames.DoubleArray, + VEC2F: Sdf.ValueTypeNames.Float2, + VEC2FVECTOR: Sdf.ValueTypeNames.Float2Array, + VEC3D: Sdf.ValueTypeNames.Vector3d, + VEC3F: Sdf.ValueTypeNames.Vector3f, + VEC3FVECTOR: Sdf.ValueTypeNames.Vector3fArray, + VEC4F: Sdf.ValueTypeNames.Float4, + VEC4FVECTOR: Sdf.ValueTypeNames.Float4Array, + MAT4F: Sdf.ValueTypeNames.FloatArray, + MAT4FVECTOR: Sdf.ValueTypeNames.FloatArray, + MAT4D: Sdf.ValueTypeNames.DoubleArray, + MAT4DVECTOR: Sdf.ValueTypeNames.DoubleArray, + MAT3F: Sdf.ValueTypeNames.FloatArray, + MAT3FVECTOR: Sdf.ValueTypeNames.FloatArray, + RGB: Sdf.ValueTypeNames.Color3f, + RGBVECTOR: Sdf.ValueTypeNames.Color3fArray, + RGBA: Sdf.ValueTypeNames.Color4f, + RGBAVECTOR: Sdf.ValueTypeNames.Color4fArray, + SCENEOBJECT: Usd.Relationship, + SCENEOBJECTVECTOR: Usd.Relationship, + SCENEOBJECTINDEXABLE: Usd.Relationship, + STRING: Sdf.ValueTypeNames.String, + STRINGVECTOR: Sdf.ValueTypeNames.StringArray, + } + usd_type = type_map.get(type_name) + if usd_type is None: + raise ValueError( + "Unknown type name for USD class '{0}'. A new rdl2 attribute type has " + "appeared; add it to rdla_to_usd_type.".format(type_name)) + return usd_type + + +class MoonrayBuildError(Exception): + pass + + +def build_error(message): + print(message) + if os.environ.get(VAR_SKIP_MOONRAY_BUGS, '0') == '1': + return + logger.error(message) + message += "\n\n (To bypass build errors and force a build, set: {} = 1)".format( + VAR_SKIP_MOONRAY_BUGS) + raise MoonrayBuildError(message) + + +class MoonrayParm(object): + + __slots__ = [ + '_aliases', + '_houdini_label', + '_is_filepath', + '_order', + 'bindable', + 'cast', + 'default_value', + 'disable_when', + 'display', + 'enable_if', + 'enclosing_folder_name', + 'fake_bind', + 'interface', + 'is_multiparm', + 'help', + 'houdini_name', + 'max', + 'menu', + 'menu_values', + 'min', + 'moonray_class', + 'moonray_name', + 'moonray_type', + 'ramp_is_color', + 'ramp_parm_name', + 'ramp_component', + 'subgroup', + 'tuple_size', + 'unrepresentableDefault', + ] + + def __init__(self, moonray_class): + self._aliases = [] + self._houdini_label = '' + self._is_filepath = False + self._order = -1 + self.bindable = False + self.cast = str + self.default_value = [] + self.disable_when = '' + self.display = '' + self.enable_if = '' + self.enclosing_folder_name = '' + self.fake_bind = False + self.houdini_name = '' + self.interface = None + self.is_multiparm = False + self.help = '' + self.max = None + self.menu = [] + self.menu_values = [] + self.min = None + self.moonray_class = moonray_class + self.moonray_name = '' + self.moonray_type = '' + self.ramp_is_color = False + self.ramp_parm_name = None + self.ramp_component = None + self.subgroup = '' + self.tuple_size = 0 + self.unrepresentableDefault = None + + @property + def aliases(self): + return self._aliases + + @aliases.setter + def aliases(self, new_aliases): + self._aliases = list(new_aliases) + + @property + def bind_name(self): + return self.houdini_name + BIND_SUFFIX + + @property + def houdini_label(self): + if self._houdini_label: + return self._houdini_label + if self.houdini_name == "auto_bump": + return "Auto Bump (BROKEN: MOONRAY-3339)" + return self._moonray_name_to_label(self.moonray_name) + + @property + def is_filepath(self): + return self._is_filepath + + @property + def menu_default(self): + idx = self.menu_values.index(str(self.default_value[0])) + return self.menu[idx] + + @property + def order(self): + return self._order + + def _moonray_name_to_label(self, name): + label = [word.title() if word and word[0].islower() else word + for word in name.split("_") if word] + label = " ".join(label) + if self.enclosing_folder_name and label.startswith(self.enclosing_folder_name + " "): + label = label.replace(self.enclosing_folder_name + " ", "") + return label + + def _multiparm_template(self, parm_template): + parm_template.setName(parm_template.name() + "#") + default_count = len(self.default_value) + if self.unrepresentableDefault is not None: + default_count = 0 + folder = hou.FolderParmTemplate( + self.houdini_name, + self.houdini_label, + folder_type=hou.folderType.MultiparmBlock, + default_value=default_count, + ) + folder.setParmTemplates((parm_template,)) + return folder + + def _ramp_default_tag(self): + lines = [] + ramp = self.get_ramp_default_value() + if ramp is None: + return '' + if self.ramp_is_color: + line = "{idx}pos ( {pos} ) {idx}c ( {r} {g} {b} ) {idx}interp ( {basis} )" + for i in range(len(list(ramp.keys()))): + pos = list(ramp.keys())[i] + value = list(ramp.values())[i] + basis = ramp.basis()[i].name().lower() + lines.append(line.format( + idx=i + 1, + pos=pos, + r=value[0], + g=value[1], + b=value[2], + basis=basis, + )) + else: + line = "{idx}pos ( {pos} ) {idx}value ( {val} ) {idx}interp ( {basis} )" + for i in range(len(list(ramp.keys()))): + pos = list(ramp.keys())[i] + value = list(ramp.values())[i] + basis = ramp.basis()[i].name().lower() + lines.append(line.format( + idx=i + 1, + pos=pos, + val=value, + basis=basis, + )) + return " ".join(lines) + + def enable_if_to_disable_when(self, moonray_class): + from collections import OrderedDict + + if not self.enable_if: + return + + prefix = "OrderedDict(" + if not (self.enable_if.startswith(prefix) and self.enable_if.endswith(")")): + raise ValueError("Bad Enable If: {0}".format(self.enable_if)) + + import ast + try: + enable_if_items = ast.literal_eval(self.enable_if[len(prefix):-1]) + enable_if_dict = OrderedDict(enable_if_items) + except Exception: + raise ValueError("Bad Enable If: {0}".format(self.enable_if)) + if not isinstance(enable_if_dict, OrderedDict): + raise ValueError("Bad Enable If: {0}".format(self.enable_if)) + + disable_when = [] + for parm_name in enable_if_dict: + value = enable_if_dict[parm_name] + if value == 'true': + value = 1 + elif value == 'false': + value = 0 + target_parm = moonray_class.find_parameter(parm_name) + if not target_parm: + build_error( + "{0}'s attribute '{1}' references an invalid attribute '{2}' " + "in its enable if expression!".format( + moonray_class.moonray_name, + self.houdini_name, + parm_name, + ) + ) + return + + if target_parm.menu: + value = str(value) + if value in target_parm.menu: + pass + elif value in target_parm.menu_values: + idx = target_parm.menu_values.index(str(value)) + value = target_parm.menu[idx] + else: + raise ValueError( + "{0} parm '{1}' should be disabled when '{2} != {3}' - " + "however, {2} is a menu and that is not a valid menu option!" + .format( + moonray_class.moonray_name, + self.houdini_name, + parm_name, + value, + ) + ) + if " " in value: + value = '"{0}"'.format(value) + + disable_when.append("{{ {0} != {1} }}".format(parm_name, value)) + self.disable_when = " ".join(disable_when) + + @staticmethod + def from_rdl2_json_exporter(name, data, moonray_class): + parm = MoonrayParm(moonray_class) + parm.moonray_name = name + if " " in name: + raise ValueError("SPACE IN NAME: {0}".format(name)) + + parm._order = data['order'] + parm.moonray_type = str(data['attrType']) + parm.cast, parm.tuple_size = ARRAY_TYPE_MAP.get(parm.moonray_type, (str, 0)) + parm.is_multiparm = parm.moonray_type in [ + FLOATVECTOR, + INTVECTOR, + RGBVECTOR, + SCENEOBJECTVECTOR, + STRINGVECTOR, + VEC2FVECTOR, + VEC3FVECTOR, + VEC4FVECTOR, + ] + + default = data['default'] + if default is None or parm.moonray_type in [SCENEOBJECT]: + default = [] + elif parm.moonray_type in [INT, FLOAT, DOUBLE, BOOL, STRING]: + default = [default] + elif parm.is_multiparm: + if any(default): + parm.unrepresentableDefault = default + elif parm.moonray_type == MAT4D: + default = [item for sublist in default for item in sublist] + + if default and isinstance(default[0], float): + for i in range(len(default)): + default[i] = float("{0:.5f}".format(default[i])) + parm.default_value = default + parm.aliases = data.get("aliases", []) + parm.bindable = data.get("bindable", False) + parm.interface = data.get("interface") + + if moonray_class.houdini_context == 'Vop' and \ + parm.moonray_type == SCENEOBJECT and \ + parm.interface in ( + MR_TYPE_LAYERABLE, + MR_TYPE_DISPLACEMENT, + MR_TYPE_HAIR_LAYERABLE, + MR_TYPE_MATERIAL, + MR_TYPE_DWA_BASE, + MR_TYPE_MAP, + MR_TYPE_NORMALMAP, + MR_TYPE_RENDER_OUTPUT, + MR_TYPE_VOLUME, + ): + parm.fake_bind = True + + parm._is_filepath = data.get("filename", False) + + if 'enum' in data: + enum_dict = data['enum'] + labels = list(enum_dict.keys()) + labels.sort(key=lambda a: enum_dict[a]) + parm.menu = [str(label) for label in labels] + parm.menu_values = [str(enum_dict[label]) for label in labels] + + meta = data.get("metadata", {}) + parm.houdini_name = data.get('houdini_name', parm.moonray_name) + parm.help = meta.get("comment", "") + enable_if = meta.get("enable if", '') + parm.disable_when = meta.get('disable when', '').replace("'", '"') + parm.subgroup = meta.get('subgroup', '') + parm.display = meta.get("display") + parm.ramp_is_color = meta.get('structure_type') == "ramp_color" + parm.ramp_parm_name = meta.get('structure_name') + parm.ramp_component = meta.get('structure_path') + + if parm.disable_when and enable_if: + print("WARNING: '{0}' has an 'enable if' and a 'disable_when'! " + "Preferring the 'disable_when' field.".format(name)) + elif not parm.disable_when: + parm.enable_if = enable_if + + if "min" in meta: + value = str(meta["min"]) + if value[-1] == "f": + value = float(value[:-1]) + elif "." in value: + value = float(value) + else: + value = int(value) + parm.min = value + if "max" in meta: + value = str(meta["max"]) + if value[-1] == "f": + value = float(value[:-1]) + elif "." in value: + value = float(value) + else: + value = int(value) + parm.max = value + + label = meta.get("display name") + if label and label[0].isupper(): + parm._houdini_label = label + + return parm + + def get_usd_type(self): + if self.is_filepath: + return Sdf.ValueTypeNames.Asset + if self.menu or self.fake_bind: + return Sdf.ValueTypeNames.Token + if self.is_reference() and self.moonray_class.houdini_context == 'Vop': + return Sdf.ValueTypeNames.Token + return rdla_to_usd_type(self.moonray_type) + + def get_ramp_default_value(self): + return self.get_ramp_default_value_from_name(self.moonray_class, self.ramp_parm_name) + + @staticmethod + def get_ramp_default_value_from_name(moonray_class, ramp_parm_name): + if not moonray_class or not ramp_parm_name: + return None + ramp_components = {} + for parm in moonray_class.parms: + name = parm.ramp_parm_name + if name and name == ramp_parm_name: + ramp_components[parm.ramp_component] = parm.default_value + + ramp_interps = dict([(value, key) for key, value in RAMP_INTERP_LOOKUP.items()]) + values = ramp_components[RAMP_COMPONENT_VALUES] + pos = ramp_components[RAMP_COMPONENT_POSITIONS] + interps = ramp_components[RAMP_COMPONENT_INTERPOLATIONS] + interps = [ramp_interps[i] for i in interps] + return hou.Ramp(interps, pos, values) + + def houdini_bind_type(self): + if self.interface is None: + interface = '' + else: + interface = str(self.interface) + if interface == MR_TYPE_NORMALMAP: + return "vector4" + elif interface == MR_TYPE_VOLUME: + return "volume" + elif interface in ( + MR_TYPE_LAYERABLE, + MR_TYPE_HAIR_LAYERABLE, + MR_TYPE_MATERIAL, + MR_TYPE_DWA_BASE): + return "surface" + elif interface == MR_TYPE_DISPLACEMENT: + return "displacement" + elif interface == MR_TYPE_RENDER_OUTPUT: + return "struct_FuzzySet" + elif interface == MR_TYPE_MAP: + return "vector" + if self.moonray_type in [VEC3F, VEC3D, VEC2F, RGB, MR_TYPE_NORMALMAP]: + return "vector" + if self.moonray_type in [VEC4F]: + return "vector4" + elif self.moonray_type in [FLOAT, DOUBLE]: + return "float" + elif self.moonray_type in [INT, BOOL]: + return "int" + elif self.moonray_type in [STRING, SCENEOBJECT]: + return "string" + elif self.moonray_type in [MAT4F, MAT4D]: + return "matrix" + return None + + def houdini_parm_template(self, int_menus=False, name_prefix="", + moonray_type=None, use_moonray_name=False, + alt_name=None, skip_multiparm=False): + name = name_prefix + self.houdini_name + if use_moonray_name: + name = name_prefix + self.moonray_name + elif alt_name: + name = alt_name + if not moonray_type: + moonray_type = self.moonray_type + + if self.menu: + if not int_menus: + pt = hou.StringParmTemplate( + name, + self.houdini_label, + 1, + default_value=(self.menu_default,), + help=self.help, + disable_when=self.disable_when, + tags=DEFAULT_MOONRAY_PARM_TAGS, + ) + menu_labels = [label.title() if label.islower() else label + for label in self.menu] + pt.setMenuItems(self.menu) + pt.setMenuLabels(menu_labels) + return pt + else: + def_value = str(self.default_value[0]) + default_idx = self.menu_values.index(def_value) + pt = hou.IntParmTemplate( + name, self.houdini_label, 1, + default_value=[default_idx], + join_with_next=self.bindable, + help=self.help, + disable_when=self.disable_when, + min=self.min if self.min is not None else 0, + max=self.max if self.max is not None else 10, + tags=DEFAULT_MOONRAY_PARM_TAGS, + ) + pt.setMenuItems(self.menu_values) + pt.setMenuLabels(self.menu) + return pt + + elif self.ramp_parm_name: + if self.ramp_component and self.ramp_component != RAMP_COMPONENT_VALUES: + return None + label = self._moonray_name_to_label(self.ramp_parm_name) + ramp_type = hou.rampParmType.Color if self.ramp_is_color else hou.rampParmType.Float + pt = hou.RampParmTemplate( + self.ramp_parm_name, + label, + ramp_type, + default_value=len(self.default_value), + disable_when=self.disable_when, + ) + key = "rampcolordefault" if self.ramp_is_color else "rampfloatdefault" + pt.setTags({ + key: self._ramp_default_tag(), + TAG_IS_MOONRAY_PARM: "1", + }) + return pt + + elif moonray_type in [INT, INTVECTOR]: + pt = hou.IntParmTemplate( + name, self.houdini_label, 1, + default_value=self.default_value, + help=self.help, + disable_when=self.disable_when, + min=self.min if self.min is not None else 0, + max=self.max if self.max is not None else 10, + tags=DEFAULT_MOONRAY_PARM_TAGS, + ) + if self.display == DISPLAY_LOGARITHMIC: + pt.setLook(hou.parmLook.Logarithmic) + if self.is_multiparm: + return self._multiparm_template(pt) + return pt + + elif moonray_type in [FLOAT, DOUBLE, FLOATVECTOR]: + look = hou.parmLook.Logarithmic if self.display == DISPLAY_LOGARITHMIC else hou.parmLook.Regular + pt = hou.FloatParmTemplate( + name, + self.houdini_label, + 1, + default_value=self.default_value[:1], + help=self.help, + disable_when=self.disable_when, + min=self.min if self.min is not None else 0.0, + max=self.max if self.max is not None else 10.0, + tags=DEFAULT_MOONRAY_PARM_TAGS, + look=look, + ) + if self.is_multiparm: + return self._multiparm_template(pt) + return pt + + elif moonray_type in [VEC2F, VEC3F, VEC3D, MAT4D]: + return hou.FloatParmTemplate( + name, + self.houdini_label, + len(self.default_value), + default_value=self.default_value, + help=self.help, + disable_when=self.disable_when, + tags=DEFAULT_MOONRAY_PARM_TAGS, + ) + + elif moonray_type == BOOL: + return hou.ToggleParmTemplate( + name, + self.houdini_label, + bool(self.default_value[0]), + help=self.help, + disable_when=self.disable_when, + tags=DEFAULT_MOONRAY_PARM_TAGS, + ) + + elif moonray_type in [RGB, RGBVECTOR]: + if moonray_type == RGBVECTOR and self.default_value and isinstance(self.default_value[0], list): + def_value = self.default_value[0] + else: + def_value = self.default_value + if self.display == "tmi": + parm_look = hou.parmLook.Regular + naming_scheme = hou.parmNamingScheme.XYZW + else: + parm_look = hou.parmLook.ColorSquare + naming_scheme = hou.parmNamingScheme.RGBA + pt = hou.FloatParmTemplate( + name, + self.houdini_label, + 3, + default_value=def_value, + look=parm_look, + naming_scheme=naming_scheme, + help=self.help, + disable_when=self.disable_when, + tags=DEFAULT_MOONRAY_PARM_TAGS, + ) + if self.is_multiparm: + return self._multiparm_template(pt) + return pt + + elif moonray_type in [STRING, STRINGVECTOR, SCENEOBJECT, SCENEOBJECTVECTOR]: + if moonray_type in [SCENEOBJECT, SCENEOBJECTVECTOR]: + str_type = hou.stringParmType.NodeReference + elif self.is_filepath: + str_type = hou.stringParmType.FileReference + else: + str_type = hou.stringParmType.Regular + + pt = hou.StringParmTemplate( + name, + self.houdini_label, + 1, + string_type=str_type, + default_value=self.default_value, + help=self.help, + disable_when=self.disable_when, + is_hidden=self.fake_bind, + tags=DEFAULT_MOONRAY_PARM_TAGS, + ) + if self.is_multiparm and not skip_multiparm: + return self._multiparm_template(pt) + return pt + + print("\tWARNING: Unable to make Houdini Parm for {0} ({1})".format( + self.houdini_name, moonray_type)) + return None + + def is_reference(self): + is_scene_object = self.moonray_type in ( + SCENEOBJECT, SCENEOBJECTVECTOR, SCENEOBJECTINDEXABLE) + return is_scene_object and not self.fake_bind + + def serialize(self): + data = { + 'moonray_name': self.moonray_name, + 'moonray_type': self.moonray_type, + 'default_value': self.default_value, + 'houdini_name': self.houdini_name, + 'houdini_label': self.houdini_label, + 'order': self.order, + } + if self.interface: + data['interface'] = self.interface + if self.aliases: + data['aliases'] = self.aliases + if self.display: + data['display'] = self.display + if self.bindable: + data['bindable'] = self.bindable + if self.is_filepath: + data['is_filepath'] = self.is_filepath + if self.help: + data['help'] = self.help + if self.menu: + data['menu'] = self.menu + data['menu_values'] = self.menu_values + if self.fake_bind: + data['fake_bind'] = self.fake_bind + if self.ramp_is_color: + data['ramp_is_color'] = self.ramp_is_color + if self.ramp_parm_name: + data['ramp_parm_name'] = self.ramp_parm_name + if self.ramp_component: + data['ramp_parm_type'] = self.ramp_component + return data + + +class MoonrayClass(object): + + __slots__ = [ + 'parms', 'parms_dict', 'moonray_name', 'versionless_moonray_name', + 'version', 'moonray_type', 'folders_with_parms', 'folders_sorted', + 'houdini_context', 'houdini_name', '_hda', + ] + + def __init__(self, name, mr_type): + self._hda = None + self.parms = [] + self.parms_dict = {} + self.moonray_name = name + self.versionless_moonray_name = re.sub(r'_v[0-9]*$', '', name) + x = name.rfind('_v') + self.version = int(name[x + 2:]) if x >= 0 else 1 + self.moonray_type = mr_type + self.folders_with_parms = {} + self.folders_sorted = [] + self.houdini_context = 'Vop' if mr_type in VOP_TYPES else 'Object' + self.houdini_name = self.houdini_context + '::DW_MOONRAY::' + self.versionless_moonray_name + '::' + str(self.version) + + @property + def hda(self): + if self._hda: + return self._hda + category = hou.nodeTypeCategories()[self.houdini_context] + nt = category.nodeType(self.houdini_name) + if nt: + return nt.definition() + return None + + @hda.setter + def hda(self, hda): + self._hda = hda + + @property + def icon_name(self): + if self.versionless_moonray_name == 'AbcGeometry': + return 'SOP_alembic' + icons = { + MR_TYPE_DISPLACEMENT: 'SOP_vdbfrompolygons', + MR_TYPE_DISPLAY_FILTER: 'VOP_shadinglayer', + MR_TYPE_MATERIAL: 'VIEW_materials', + MR_TYPE_LIGHT_FILTER: 'SOP_cloudlight', + MR_TYPE_LAYERABLE: 'VOP_raytrace', + MR_TYPE_HAIR_LAYERABLE: 'VOP_pbrhair', + MR_TYPE_MAP: 'NETWORKS_root', + MR_TYPE_VOLUME: 'VOP_texture3d', + MR_TYPE_NORMALMAP: 'SOP_normal', + MR_TYPE_DWA_BASE: 'VIEW_materials', + } + return icons.get(self.moonray_type, 'DIALOG_question') + + @property + def lop_hda(self): + name = 'Lop::' + self.houdini_name.partition('::')[2] + nt = hou.lopNodeTypeCategory().nodeType(name) + if nt: + return nt.definition() + return None + + def add_parms_to_hda(self, verbose=True, hda=None): + if not hda: + hda = self.hda + if not hda: + return + + # Start with empty parm template group for fresh builds + ptg = hou.ParmTemplateGroup() + node_cat = hda.nodeTypeCategory() + tab_categories = (hou.vopNodeTypeCategory(), hou.lopNodeTypeCategory()) + folder_type = hou.folderType.Tabs if node_cat in tab_categories else hou.folderType.Collapsible + + for folder_name in self.folders_sorted: + if not ptg.findFolder(folder_name): + folder = hou.FolderParmTemplate('folder', folder_name, folder_type=folder_type) + ptg.append(folder) + + last_ungrouped_parm = None + for parm in self.parms: + name = parm.ramp_parm_name if parm.ramp_parm_name else parm.houdini_name + if name in self.ignore_parm_names() or name == 'shadow_exclusion_mappings': + continue + folder_name = self.folder_name_for_parameter(parm) + if node_cat == hou.vopNodeTypeCategory(): + parm.enclosing_folder_name = folder_name + pt = parm.houdini_parm_template() + if not pt: + continue + + if verbose: + print("\tADDING PARM: {0}".format(pt.name())) + if pt.help(): + print("\t\t{0}".format(pt.help())) + + if node_cat == hou.objNodeTypeCategory(): + if pt.name() in RENDER_PROPERTIES: + folder_name = 'Render Properties' + elif not folder_name: + folder_name = self.versionless_moonray_name + folder = ptg.findFolder(folder_name) + if not folder: + folder = hou.FolderParmTemplate('folder', folder_name, folder_type=folder_type) + ptg.append(folder) + ptg.appendToFolder(folder, pt) + elif node_cat == hou.vopNodeTypeCategory(): + if folder_name: + if not parm.subgroup: + ptg.appendToFolder(folder_name, pt) + else: + subfolder_pt = None + subfolder_name = '_folder_' + parm.subgroup.replace(' ', '_') + for a_pt in ptg.findFolder(folder_name).parmTemplates(): + if a_pt.name() == subfolder_name: + subfolder_pt = a_pt + break + if not subfolder_pt: + subfolder_pt = hou.FolderParmTemplate( + subfolder_name, + parm.subgroup, + folder_type=hou.folderType.Collapsible, + ) + ptg.appendToFolder(folder_name, subfolder_pt) + ptg.appendToFolder(subfolder_pt, pt) + else: + if last_ungrouped_parm: + ptg.insertAfter(last_ungrouped_parm, pt) + elif ptg.parmTemplates(): + ptg.insertBefore(ptg.parmTemplates()[0].name(), pt) + else: + ptg.append(pt) + last_ungrouped_parm = pt.name() + else: + if not folder_name and self.folders_sorted and node_cat == hou.lopNodeTypeCategory(): + folder_name = 'Other Settings' + if folder_name: + folder = ptg.findFolder(folder_name) + if not folder: + folder = hou.FolderParmTemplate('folder', folder_name, folder_type=folder_type) + ptg.append(folder) + ptg.appendToFolder(folder, pt) + else: + ptg.append(pt) + + hda.setParmTemplateGroup(ptg) + self.configure_output_tag(hda) + self.tag_ramp_parms(hda, verbose=verbose) + if node_cat == hou.vopNodeTypeCategory() and hda.extraInfo() != '* moonray': + hda.setExtraInfo('* moonray') + + def configure_output_tag(self, hda): + if self.houdini_context != 'Vop': + return + outputs = HDAVopBuilder.OUTPUT_CONNECTIONS.get(self.moonray_type) + ptg = hda.parmTemplateGroup() + if not outputs: + return + name = outputs.split("\t")[2] + if self.find_parameter(name): + raise ValueError( + "ERROR! {}: attribute name {} is same as the output name.".format( + self.moonray_name, name)) + output_tags = self.get_output_tag() + if not output_tags: + return + + pt = ptg.find(name) + if pt: + cur_tags = pt.tags() + invalid_name = 'sidefx:shader_isparm' + if invalid_name in cur_tags: + del cur_tags[invalid_name] + cur_tags.update(output_tags) + if cur_tags != pt.tags(): + print(" Updating Output Tags! {} -> {}".format(pt.tags(), cur_tags)) + pt.setTags(cur_tags) + ptg.replace(name, pt) + hda.setParmTemplateGroup(ptg) + else: + pt = hou.IntParmTemplate( + name, name, 1, + is_hidden=True, + is_label_hidden=True, + tags=output_tags, + ) + ptg.addParmTemplate(pt) + hda.setParmTemplateGroup(ptg) + + def find_parameter(self, parm_name): + return self.parms_dict.get(parm_name) + + def folder_name_for_parameter(self, parm): + for folder_name, parm_names in self.folders_with_parms.items(): + if parm.moonray_name in parm_names or ( + parm.ramp_parm_name and parm.ramp_parm_name in parm_names): + return folder_name + return None + + @staticmethod + def from_rdl2_json_exporter(name, data): + node = MoonrayClass(name, data['type']) + attributes = data.get('attributes') + if attributes: + for parm_name, parm_data in attributes.items(): + parm = MoonrayParm.from_rdl2_json_exporter(parm_name, parm_data, node) + if parm.houdini_name == 'node_xform' and parm.moonray_type == MAT4D: + continue + node.parms.append(parm) + node.parms.sort(key=lambda a: a.order) + node.rebuild_parm_dict() + for parm in node.parms: + parm.enable_if_to_disable_when(node) + for parm in node.parms: + if parm.ramp_parm_name: + parm.get_ramp_default_value() + + grouping = data.get('grouping') + if grouping: + node.folders_sorted = grouping['order'] + node.folders_with_parms = grouping['groups'] + return node + + def get_output_tag(self): + shader = Sdr.Registry().GetShaderNodeByName(self.moonray_name) + if shader and shader.GetOutputNames(): + outputname = shader.GetOutputNames()[0] + output = shader.GetShaderOutput(outputname) + outputtype = str(output.GetTypeAsSdfType()[0]) + elif self.moonray_type in HDAVopBuilder.OUTPUT_TAG_TYPE: + outputname, outputtype = HDAVopBuilder.OUTPUT_TAG_TYPE[self.moonray_type] + else: + return {} + return { + 'sidefx::shader_parmname': outputname, + 'sidefx::shader_parmtype': outputtype, + TAG_SHADER_IS_PARM: '0', + } + + def ignore_parm_names(self): + black_list = { + 'Object::DW_MOONRAY::InstanceGeometry::1': + ['positions', 'orientations', 'scales', 'velocities', 'xform_list'], + } + result = black_list.get(self.houdini_name, []) + if self.moonray_type == MR_TYPE_GEOMETRY: + result = list(result) + ['primitive_attributes', 'part_list', 'static'] + if self.moonray_name != 'InstanceGeometry': + result.append('references') + if self.versionless_moonray_name.endswith('Geometry'): + result.extend(['shadow_group', 'shadow_group_mode']) + if self.versionless_moonray_name.endswith('Material'): + result.extend(['diffuse_lightset', 'specular_lightset']) + return result + + def rebuild_parm_dict(self): + self.parms_dict.clear() + for parm in self.parms: + self.parms_dict[parm.houdini_name] = parm + self.parms_dict[parm.moonray_name] = parm + for alias in parm.aliases: + self.parms_dict[alias] = parm + + def serialize(self): + parms = {} + for parm in self.parms: + parms[parm.moonray_name] = parm.serialize() + return { + 'moonray_name': self.moonray_name, + 'moonray_type': self.moonray_type, + 'parms': parms, + 'folders_sorted': self.folders_sorted, + 'folders_with_parms': self.folders_with_parms, + } + + def set_tab_menu(self, menu='DW Moonray'): + return None + + def tag_ramp_parms(self, hda, verbose): + if self.houdini_context != 'Vop': + return + ramp_parms = [p for p in self.parms if p.ramp_parm_name] + if not ramp_parms: + return + ptg = hda.parmTemplateGroup() + tag_map = { + 'interpolation_types': 'rampbasis_var', + 'positions': 'rampkeys_var', + 'values': 'rampvalues_var', + } + for ramp_parm in ramp_parms: + pt_name = ramp_parm.ramp_parm_name + pt = ptg.find(pt_name) + if not pt: + continue + cur_tags = pt.tags() + tag_name = tag_map.get(ramp_parm.ramp_component) + cur_tags.update({tag_name: ramp_parm.moonray_name}) + if cur_tags != pt.tags(): + if verbose: + print(" Updating Ramp Tags! {} -> {}".format(pt.tags(), cur_tags)) + pt.setTags(cur_tags) + ptg.replace(pt_name, pt) + hda.setParmTemplateGroup(ptg) + + +class HDABuilder(object): + + _houdini_create_bindings = { + MR_TYPE_DISPLACEMENT: ("/mat", "subnet"), + MR_TYPE_DISPLAY_FILTER: ("/mat", "subnet"), + MR_TYPE_LIGHT_FILTER: ("/obj", "subnet"), + MR_TYPE_MAP: ("/mat", "subnet"), + MR_TYPE_LAYERABLE: ("/mat", "subnet"), + MR_TYPE_HAIR_LAYERABLE: ("/mat", "subnet"), + MR_TYPE_MATERIAL: ("/mat", "subnet"), + MR_TYPE_DWA_BASE: ("/mat", "subnet"), + MR_TYPE_NORMALMAP: ("/mat", "subnet"), + MR_TYPE_VOLUME: ("/mat", "subnet"), + } + + def __init__(self, hda, moonray_class): + self._hda = hda + self._moonray_class = moonray_class + + @property + def hda(self): + return self._hda + + @property + def moonray_class(self): + return self._moonray_class + + def _add_houdini_event_script(self, script_name, method_name, pass_kwargs=False): + code = "kwargs['node'].hm().wrapper(kwargs['node']).{}({})".format( + method_name, 'kwargs' if pass_kwargs else '') + section = self.hda.sections().get(script_name) + if not section: + print(" Adding {0} Script".format(script_name)) + self.hda.addSection(script_name, code) + self.hda.setExtraFileOption('{0}/IsPython'.format(script_name), True) + elif section.contents() != code and self.moonray_class.moonray_name not in IGNORE_CODE_MISMATCHES: + print(" Script code mis-match! {0}".format(script_name)) + + def _add_python_module(self): + if self.moonray_class.moonray_name in IGNORE_CODE_MISMATCHES: + return + if not self.hda.sections().get('PythonModule'): + code = self._default_python_module() + if not code: + return + self.hda.addSection('PythonModule', code) + self.hda.setExtraFileOption('PythonModule/IsPython', True) + else: + cur_code = self.hda.sections().get('PythonModule').contents() + code = self._default_python_module() + if cur_code != code: + print(' PythonModule != default script!!') + + def _default_python_module(self): + # The internal build gave each node category a python module providing a + # wrapper object that implemented on_create/on_input_changed/etc. None of + # those modules were open sourced, so every branch here collapsed to the + # same stub whose wrapper() returns None. Installing the event handlers + # against that stub makes every node raise + # AttributeError: 'NoneType' object has no attribute 'on_create' + # as soon as it is created. All 125 HDAs shipped in moonray_dcc_plugins + # carry no PythonModule, OnCreated or OnInputChanged section at all, so + # emit nothing and match them. An internal fork that restores a real + # module here gets every event handler back automatically. + return None + + @classmethod + def can_create_hda(cls, moonray_class): + return moonray_class.moonray_type in cls._houdini_create_bindings + + def add_python_scripts(self): + if not self._default_python_module(): + return + self._add_python_module() + self._add_houdini_event_script('OnCreated', 'on_create') + + def cleanup_hda(self): + self.update_url() + + @classmethod + def create_hda(cls, moonray_class, directory): + if not cls.can_create_hda(moonray_class): + print("WARNING: Cannot create HDA for Node Type '{0}'".format( + moonray_class.moonray_type)) + return None + + ensure_directory(directory) + file_path = os.path.join(directory, moonray_class.houdini_name + '.hda') + label = 'Moonray {0}'.format(moonray_class.versionless_moonray_name) + parent_path, base = cls._houdini_create_bindings[moonray_class.moonray_type] + parent_node = hou.node(parent_path) + if parent_node is None: + raise MoonrayBuildError( + "Houdini network '{0}' does not exist in this session, so the HDA for " + "'{1}' cannot be built. Run under hython with a default scene.".format( + parent_path, moonray_class.moonray_name)) + hda_source = parent_node.createNode(base) + node = None + try: + node = hda_source.createDigitalAsset( + name=moonray_class.houdini_name, + description=label, + hda_file_name=file_path, + ) + hda = node.type().definition() + hda.updateFromNode(node) + if moonray_class.houdini_context == 'Object': + hda.setMaxNumInputs(1) + node.matchCurrentDefinition() + except Exception: + logger.exception("Failed to create HDA %s", moonray_class.houdini_name) + raise MoonrayBuildError( + "Failed to create HDA for '{0}'".format(moonray_class.moonray_name) + ) + finally: + # createDigitalAsset replaces hda_source with an instance of the new + # asset type, so node and hda_source can name the same underlying + # node. Destroying one then the other would raise from inside the + # finally and mask the real result, so guard both. + for leftover in (node, hda_source): + if leftover is None: + continue + try: + leftover.destroy() + except Exception: + pass + + moonray_class.hda = hda + hda.setIcon(moonray_class.icon_name) + moonray_class.set_tab_menu() + moonray_class.add_parms_to_hda() + return hda + + def set_houdini_parm_names(self): + """Set houdini_name to moonray_name for all parms (fresh build).""" + for parm in self.moonray_class.parms: + parm.houdini_name = parm.moonray_name + self.moonray_class.rebuild_parm_dict() + self.validate_disable_when() + + def update_url(self): + if not HELP_URL: + return + section_name = 'HelpUrl' + if not self.hda.sections().get(section_name): + self.hda.addSection(section_name, HELP_URL) + + def validate_disable_when(self): + no_changes = True + for parm in self.moonray_class.parms: + exp = parm.disable_when + if not exp: + continue + conditions = [] + for condition in exp.split('}'): + if not condition: + continue + bits = condition.split() + if len(bits) < 4: + continue + var = bits[1] + conditional = bits[2] + value = ' '.join(bits[3:]) + conditional_parm = None + for moonray_parm in self.moonray_class.parms: + if moonray_parm.moonray_name == var: + conditional_parm = moonray_parm + break + if not conditional_parm: + raise ValueError( + "{0} -- Invalid variable '{1}' in 'disable when' expression: {2}".format( + self.moonray_class.moonray_name, var, exp)) + conditions.append("{{ {0} {1} {2} }}".format(var, conditional, value)) + new_exp = ' '.join(conditions) + if conditions: + parm.disable_when = new_exp + if exp != new_exp: + no_changes = False + parm.disable_when = new_exp + return no_changes + + +class HDAVopBuilder(HDABuilder): + + OUTPUT_CONNECTIONS = { + MR_TYPE_MATERIAL: " output\tsurface\tsurface\tMaterial", + MR_TYPE_DWA_BASE: " output\tsurface\tsurface\tDwaBase", + MR_TYPE_LAYERABLE: " output\tsurface\tsurface\tDwaBaseLayerable", + MR_TYPE_HAIR_LAYERABLE: " output\tsurface\tsurface\tDwaBaseHairLayerable", + MR_TYPE_NORMALMAP: " output\tvector4\tnormalmap\tNormalMap", + MR_TYPE_MAP: " output\tvector\tmap\tMap", + MR_TYPE_DISPLACEMENT: " output\tdisplacement\tdisplacement\tDisplacement", + MR_TYPE_VOLUME: " output\tvolume\tvolume\tVolume", + MR_TYPE_DISPLAY_FILTER: " output\tstruct_FuzzySet\tdisplayfilter\tDisplayFilter", + } + + OUTPUT_TAG_TYPE = { + MR_TYPE_DISPLACEMENT: ('out', 'float3'), + MR_TYPE_MAP: ('out', 'float3'), + MR_TYPE_NORMALMAP: ('out', 'float3'), + MR_TYPE_MATERIAL: ('out', 'token'), + MR_TYPE_VOLUME: ('out', 'token'), + MR_TYPE_DWA_BASE: ('out', 'token'), + } + + def _does_parm_need_input(self, mr_parm): + return not mr_parm.is_multiparm + + def _generate_header(self): + return [ + '# Dialog script for {0} automatically generated'.format(self.hda.nodeTypeName()), + '', + '{', + ' name\t' + self.hda.nodeTypeName(), + ' script\t' + self.moonray_class.moonray_name, + ' label\t"{0}"'.format(self.hda.description()), + '', + ' rendermask\tmoonray', + ' externalshader 1', + ' shadertype\tgeneric', + ] + + def add_python_scripts(self): + super(HDAVopBuilder, self).add_python_scripts() + # Same guard as the base class: without a python module to call into, + # these handlers would only raise on every node. + if not self._default_python_module(): + return + self._add_houdini_event_script('OnInputChanged', 'on_input_changed', pass_kwargs=True) + if self.moonray_class.moonray_type == MR_TYPE_DISPLAY_FILTER: + self._add_houdini_event_script('OnLoaded', 'on_loaded') + self._add_houdini_event_script('OnDeleted', 'on_deleted') + self._add_houdini_event_script('OnNameChanged', 'on_name_changed') + + def cleanup_hda(self): + super(HDAVopBuilder, self).cleanup_hda() + self.fix_disable_when() + self.update_parameter_inputs() + self.update_output_connections() + + def deprecate_unused_inputs(self, dialog_script): + header, inputs, outputs, inputflags, signature, tail = self.parse_dialog_script(dialog_script) + new_inputs = [] + mr_parm_names = [p.houdini_name for p in self.moonray_class.parms if self._does_parm_need_input(p)] + for i, input_line in enumerate(inputs): + line_name = input_line.split()[2] + if line_name not in mr_parm_names and not line_name.startswith(DEPRECATED_PREFIX): + input_type = input_line.split()[1] + new_name = '{0}{1}'.format(DEPRECATED_PREFIX, line_name) + input_line = '\tinput\t{type}\t{name}\t"{label}"'.format( + type=input_type, + name=new_name, + label=new_name, + ) + inputflags[i] = '\tinputflags\t{0}\t0'.format(new_name) + new_inputs.append(input_line) + return '\n'.join(header + new_inputs + outputs + inputflags + signature + tail) + + def fix_disable_when(self): + broken_parms = [] + for parm in self.moonray_class.parms: + if parm.disable_when and '"' in parm.disable_when: + broken_parms.append(parm) + if not broken_parms: + return + + dialog_script = self.hda.sections()['DialogScript'] + dialog_contents = dialog_script.contents() + header, inputs, outputs, inputflags, signature, tail = self.parse_dialog_script(dialog_contents) + new_tail = tail[:] + for parm in broken_parms: + start_line = 'name "{0}"'.format(parm.houdini_name) + found_start = False + for i, line in enumerate(tail): + if not found_start: + if line.strip() == start_line: + found_start = True + else: + if line.strip() == '}': + raise ValueError('Missing disablewhen!!') + elif line.strip().startswith('disablewhen'): + prefix = line.split('disablewhen', 1)[0] + new_tail[i] = '{0}disablewhen "{1}"'.format( + prefix, parm.disable_when.replace('"', '\\"')) + break + dialog_contents = '\n'.join(header + inputs + outputs + inputflags + signature + new_tail) + if dialog_script.contents().strip() != dialog_contents.strip(): + dialog_script.setContents(dialog_contents) + + def parse_dialog_script(self, contents): + header = [] + inputs = [] + outputs = [] + inputflags = [] + signature = [] + tail = [] + + lines = contents.splitlines() + finish = False + is_header = True + for line in lines: + first = line.split()[0] if line else '' + if is_header: + if first in ('input', 'output', 'inputflags', 'signature'): + is_header = False + else: + header.append(line) + continue + if finish: + tail.append(line) + continue + if first == 'input': + inputs.append(line) + elif first == 'output': + outputs.append(line) + elif first == 'inputflags': + inputflags.append(line) + elif first == 'signature': + signature.append(line) + finish = True + + clean_inputs = [] + stripped_inputs = [] + for line in inputs: + if line.split()[:3] in stripped_inputs: + continue + stripped_inputs.append(line.split()[:3]) + line = line.replace('\tbsdf', '\tsurface').replace('\tint ', '\tdisplacement ') + line = line.replace('_bind', '') + clean_inputs.append(line) + + clean_inputflags = [] + stripped_inputs = [] + for line in inputflags: + if line.split()[:3] in stripped_inputs: + continue + stripped_inputs.append(line.split()[:3]) + clean_inputflags.append(line) + + header = self._generate_header() + return header, clean_inputs, outputs, clean_inputflags, signature, tail + + def update_parameter_inputs(self): + dialog_script = self.hda.sections()['DialogScript'] + dialog_contents = dialog_script.contents() + dialog_contents = self.deprecate_unused_inputs(dialog_contents) + for parm in self.moonray_class.parms: + dialog_contents = self.update_dialog_script(parm, dialog_contents) + if dialog_contents.strip().split() != dialog_script.contents().strip().split(): + dialog_script.setContents(dialog_contents) + if not self.validate_parameter_inputs(): + raise OSError('Something went wrong with the vop inputs!') + + def update_output_connections(self): + dialog_script = self.hda.sections()['DialogScript'] + dialog_contents = self.deprecate_unused_inputs(dialog_script.contents()) + if not dialog_contents: + return + header, inputs, outputs, inputflags, signature, tail = self.parse_dialog_script(dialog_contents) + outputs = [self.OUTPUT_CONNECTIONS[self.moonray_class.moonray_type]] + # The signature has to cover the outputs as well as the inputs, and + # every type past the input count needs a matching default in the + # outputoverrides block, or Houdini rejects the whole DialogScript with + # "Expected more data for signature" and the node loads with no + # parameters at all. update_dialog_script built the signature before + # the outputs existed, so finish it here. + signature = [self.build_signature_line(inputs, outputs)] + tail = self.set_output_overrides(tail, outputs) + dialog_contents = '\n'.join(header + inputs + outputs + inputflags + signature + tail) + if dialog_script.contents().strip().split() != dialog_contents.strip().split(): + dialog_script.setContents(dialog_contents) + + @staticmethod + def build_signature_line(inputs, outputs): + types = ''.join(entry.split()[1] + ' ' for entry in (inputs + outputs)) + return '\tsignature\t"Default Inputs"\tdefault\t{ ' + types + '}' + + # Placeholder defaults for an output connector, by its VEX type. The value + # is not meaningful (the entry is declared "auto"), but the shape has to + # look like the type. + OUTPUT_OVERRIDE_DEFAULTS = { + 'vector': '(0,0,0)', + 'vector4': '(0,0,0,0)', + 'displacement': '(0,0,0)', + } + + @classmethod + def set_output_overrides(cls, tail, outputs): + entries = [] + for entry in outputs: + default = cls.OUTPUT_OVERRIDE_DEFAULTS.get(entry.split()[1], '(0)') + entries.append('\t___begin\tauto') + entries.append('\t\t\t{0}'.format(default)) + + new_tail = [] + i = 0 + while i < len(tail): + line = tail[i] + new_tail.append(line) + if line.split()[:1] != ['outputoverrides']: + i += 1 + continue + # Copy the opening brace, replace the body, keep the closing brace. + i += 1 + while i < len(tail) and tail[i].strip() != '{': + new_tail.append(tail[i]) + i += 1 + if i >= len(tail): + break + new_tail.append(tail[i]) + i += 1 + depth = 1 + while i < len(tail) and depth: + if tail[i].strip() == '}': + depth -= 1 + if not depth: + new_tail.extend(entries) + new_tail.append(tail[i]) + i += 1 + return new_tail + + def update_dialog_script(self, parm, dialog_script): + if not self._does_parm_need_input(parm): + return dialog_script + header, inputs, outputs, inputflags, signature, tail = self.parse_dialog_script(dialog_script) + bind_type = parm.houdini_bind_type() + if not bind_type: + raise ValueError( + "Unbindable Parameter Type: {0} {1} on {2}. This rdl2 type has no " + "Houdini VOP equivalent to bind an input to. Either give the shader " + "a representable type, or exclude the shader by adding it to " + "UpdateHDAs.BLOCK_TYPES.".format( + parm.houdini_name, parm.moonray_type, + self.moonray_class.moonray_name)) + label_more_than_one_word = ' ' in parm.houdini_label + line = '\tinput\t{type}\t{name}\t{quote}{label}{quote}'.format( + type=bind_type, + name=parm.houdini_name, + label=parm.houdini_label, + quote='"' if label_more_than_one_word else '', + ) + is_invisible = '0' + if not parm.bindable and not parm.fake_bind: + is_invisible = '1' + flag_line = '\tinputflags\t{0}\t{1}'.format(parm.houdini_name, is_invisible) + + new_inputs = [] + added_line = False + for input_line in inputs: + line_name = input_line.split()[2] + if line_name == parm.houdini_name: + added_line = True + input_line = line + new_inputs.append(input_line) + + if not added_line: + for i, input_line in enumerate(inputs): + line_name = input_line.split()[2] + if line_name.startswith(DEPRECATED_PREFIX): + inputflag_name = inputflags[i].split()[1] + if inputflag_name != line_name: + raise IndexError('Corrupt Dialog Script -- Index mismatch for {0}'.format(line_name)) + inputflags[i] = flag_line + new_inputs[i] = line + added_line = True + break + + if not added_line: + new_inputs.append(line) + inputs = new_inputs + + stripped_inputs = [l.split()[:3] for l in inputflags] + if flag_line.split()[:3] not in stripped_inputs: + inputflags.append(flag_line) + + signature = [self.build_signature_line(inputs, outputs)] + return '\n'.join(header + inputs + outputs + inputflags + signature + tail) + + def validate_parameter_inputs(self): + dialog_script = self.hda.sections()['DialogScript'] + dialog_contents = self.deprecate_unused_inputs(dialog_script.contents()) + parm_lines = self.parse_dialog_script(dialog_contents)[1] + input_names = [line.split()[2] for line in parm_lines] + valid = True + for mr_parm in self.moonray_class.parms: + if not self._does_parm_need_input(mr_parm): + continue + name = mr_parm.houdini_name + if name not in input_names: + valid = False + print('Missing Input: {0}'.format(name)) + continue + input_names.remove(name) + if input_names: + for name in input_names: + if name.startswith(DEPRECATED_PREFIX) or not name.endswith(BIND_SUFFIX): + continue + valid = False + print('Unused Input: {0}'.format(name)) + return valid + + +def get_hda_builder(moonray_class, hda=None): + if not hda: + hda = moonray_class.hda + if moonray_class.houdini_context == 'Vop': + return HDAVopBuilder(hda, moonray_class) + return HDABuilder(hda, moonray_class) + + +class UpdateHDAs(object): + + export_metadata = {} + + # Classes deliberately excluded from every output. These are MoonRay's + # implementations of shaders that USD already defines, so Houdini/Solaris + # supplies the authoring node natively; generating DW_MOONRAY duplicates + # would give artists two nodes for the same UsdShade prim. Filtering + # happens at ingest, so a name listed here is absent from the HDAs, + # moonray_nodes.json and the .ds files alike. + BLOCK_TYPES = [ + 'UsdPreviewSurface', + 'UsdPrimvarReader_float', + 'UsdPrimvarReader_float2', + 'UsdPrimvarReader_float3', + 'UsdPrimvarReader_int', + 'UsdPrimvarReader_normal', + 'UsdPrimvarReader_point', + 'UsdPrimvarReader_vector', + 'UsdUVTexture', + 'UsdTransform2d', + ] + + # Unit test DSOs. These ship in moonray's rdl2dso directory but are + # fixtures for the shader test suite, not shaders anyone renders with. + # TestInputs* in particular declare a parameter of every rdl2 type, + # including Mat3f and Mat4f, which have no Houdini equivalent to bind to. + BLOCK_PREFIXES = ('Test',) + + @classmethod + def is_blocked(cls, class_name): + return (class_name in cls.BLOCK_TYPES + or class_name.startswith(cls.BLOCK_PREFIXES)) + + SKIP_TYPES = [ + 'ShadowSet', + 'LightFilterSet', + 'GeometrySet', + 'LayerSet', + 'LightSet', + 'Layer', + 'Metadata', + 'RenderOutput', + 'UserData', + 'TraceSet', + 'Joint', + 'SceneVariables', + 'UsdGeometry', + 'UsdInstanceGeometry', + ] + BLOCK_TYPES + + def __init__(self, moonshine_packages, destination_directory): + self.destination_directory = destination_directory + self.destination_hda_directory = os.path.join(destination_directory, 'otls') + self.destination_json = os.path.join(destination_directory, MOONSHINE_DATA_FILE) + ensure_directory(self.destination_hda_directory) + self.moonray_classes = self.moonray_classes_from_rdl(moonshine_packages) + self.node_dict = self.get_moonshine_package_versions() + + def get_moonshine_package_versions(self): + """Build the 'packages' block of moonray_nodes.json. + + The exporter embeds its own version strings (--rdl2_version / + --moonray_version), so use those when present. + """ + pkg_versions = {} + exported = getattr(type(self), 'export_metadata', {}) or {} + for key, pkg in (('moonray version', 'moonray'), + ('scene_rdl2_version', 'scene_rdl2')): + version = exported.get(key) + if version and version != 'unspecified': + pkg_versions['{0}_folio'.format(pkg)] = '{0}-{1}'.format(pkg, version) + + return {'packages': pkg_versions} + + @classmethod + def moonray_classes_from_rdl(cls, moonshine_packages): + result = [] + data = cls._export_scene_classes() + cls.export_metadata = { + key: value for key, value in data.items() if key != 'scene_classes' + } + for node_name, node_data in data['scene_classes'].items(): + if cls.is_blocked(node_name): + continue + result.append(MoonrayClass.from_rdl2_json_exporter(node_name, node_data)) + result.sort(key=lambda a: a.moonray_name) + return result + + @classmethod + def _export_scene_classes(cls): + """Return the rdl2_json_exporter document describing every scene class. + + Reading a previously exported file is preferred when running inside a + DCC. Moonshine's USD build and Houdini's own USD cannot be loaded into + one process, so exporting up front in a plain shell and passing the + result in keeps the two apart. See --classes-json. + """ + classes_json = os.environ.get(VAR_CLASSES_JSON) + if classes_json: + print('Reading scene classes from {0}'.format(classes_json)) + with open(classes_json) as file_pointer: + return json.load(file_pointer) + + env = os.environ.copy() + # rdl2_json_exporter with no --out streams every scene class (built-ins + # plus everything on RDL2_DSO_PATH) to stdout as a single JSON doc. + exporter = os.environ.get('RDL2_JSON_EXPORTER', 'rdl2_json_exporter') + command = [exporter] + if not env.get('RDL2_DSO_PATH'): + raise ValueError( + 'RDL2_DSO_PATH is not set. Source /scripts/setup.sh, or point ' + 'it at /rdl2dso.proxy before running. Alternatively export the ' + 'scene classes separately and pass them with --classes-json.') + print('=' * 80) + print(' '.join(command)) + print(' RDL2_DSO_PATH={0}'.format(env['RDL2_DSO_PATH'])) + print('=' * 80) + process = subprocess.Popen( + command, + stdout=subprocess.PIPE, + stderr=subprocess.PIPE, + env=env, + ) + output, err = process.communicate() + output = _decode(output) + err = _decode(err) + if process.returncode != 0: + raise ValueError('Something went wrong finding the moonshine package: {0}'.format(err)) + return json.loads(output) + + def main(self): + self.update_hdas() + self.save_node_dict() + self.remove_hda_backups() + + def remove_hda_backups(self): + # Houdini drops a numbered copy into /backup every time an HDA is + # saved, and each asset is saved several times while it is built. That + # leaves close to a thousand files nobody wants, and they would be + # copied straight into moonray_dcc_plugins along with the assets. + backup_dir = os.path.join(self.destination_hda_directory, 'backup') + if os.path.isdir(backup_dir): + shutil.rmtree(backup_dir, ignore_errors=True) + print('Removed intermediate HDA backups: {0}'.format(backup_dir)) + + def update_hdas(self): + for moonray_class in self.moonray_classes: + if moonray_class.houdini_context != 'Vop': + continue + if moonray_class.moonray_name in self.SKIP_TYPES: + continue + if not HDABuilder.can_create_hda(moonray_class): + print('{0}\n\tUnable to create operator type {1}'.format( + moonray_class.houdini_name, moonray_class.moonray_type)) + continue + + print('{0}\n\tNew Operator!'.format(moonray_class.houdini_name)) + HDABuilder.create_hda(moonray_class, self.destination_hda_directory) + builder = get_hda_builder(moonray_class) + builder.add_python_scripts() + builder.set_houdini_parm_names() + if not builder.validate_disable_when(): + moonray_class.add_parms_to_hda(verbose=False) + builder.cleanup_hda() + + def save_node_dict(self): + for moonray_class in self.moonray_classes: + self.node_dict[moonray_class.moonray_name] = moonray_class.serialize() + print('Writing JSON: {0}'.format(self.destination_json)) + with open(self.destination_json, 'w') as file_pointer: + json.dump(self.node_dict, file_pointer, indent=4) + + +def is_numerical_type(moonray_type): + prefixes = ['Float', 'Double', 'Int', 'Mat', 'Rgb', 'Vec'] + for prefix in prefixes: + if moonray_type.startswith(prefix): + return True + return False + + +def create_control_menu(moonray_type): + menu = ['set', 'setexisting'] + labels = [ + '![BUTTONS_set_or_create]Set or Create', + '![BUTTONS_set_if_exists]Set if Exists', + ] + if is_numerical_type(moonray_type): + menu.extend(['add', 'multiply']) + labels.extend([ + '![BUTTONS_set_add]Add if Exists', + '![BUTTONS_set_multiply]Multiply if Exists', + ]) + menu.extend(['block', 'none']) + labels.extend(['![BUTTONS_set_block]Block', '![BUTTONS_set_nothing]Do Nothing']) + return menu, labels + + +class LopDialogScriptBuilder(object): + _usd_prim_type_attr = None + + def __init__(self, dest_dir, moonray_classes): + self.dest_dir = dest_dir + self.moonraylights = [] + self.moonray_classes = moonray_classes + self.shader_class = {} + self.light_class = {} + self.lf_class = {} + self.geometry_class = {} + self.cam_class = {} + for moonray_class in self.moonray_classes: + name = moonray_class.moonray_name + moonray_type = moonray_class.moonray_type + if moonray_type == 'Light': + self.light_class[name] = moonray_class + elif moonray_type == 'LightFilter': + self.lf_class[name] = moonray_class + elif moonray_type == 'Geometry': + self.geometry_class[name] = moonray_class + elif moonray_type.endswith('Map'): + self.shader_class[name] = moonray_class + elif moonray_type.endswith('Layerable'): + self.shader_class[name] = moonray_class + elif moonray_type in ['Displacement', 'Material', 'Volume']: + self.shader_class[name] = moonray_class + elif moonray_type == 'Camera': + self.cam_class[name] = moonray_class + + @property + def usd_prim_type_attr(self): + if LopDialogScriptBuilder._usd_prim_type_attr is None: + LopDialogScriptBuilder._usd_prim_type_attr = { + 'CylinderLight': UsdLux.CylinderLight.GetSchemaAttributeNames(), + 'DiskLight': UsdLux.DiskLight.GetSchemaAttributeNames(), + 'DistantLight': UsdLux.DistantLight.GetSchemaAttributeNames(), + 'EnvLight': UsdLux.DomeLight.GetSchemaAttributeNames(), + 'RectLight': UsdLux.RectLight.GetSchemaAttributeNames(), + 'SphereLight': UsdLux.SphereLight.GetSchemaAttributeNames(), + 'MeshLight': UsdLux.GeometryLight.GetSchemaAttributeNames(), + 'SpotLight': UsdLux.DiskLight.GetSchemaAttributeNames(), + } + return LopDialogScriptBuilder._usd_prim_type_attr + + def __add_light_type_parm(self, group): + parm_name = 'class' + hide_when = '' + prefix = 'moonray:' + moonray_type = 'String' + control_pt = self.__create_control_parm(parm_name, prefix, hide_when, moonray_type, + default_value='set', is_hidden=True) + control_pt_name = control_pt.name() + pt = hou.StringParmTemplate('moonray:' + parm_name, parm_name, 1, is_hidden=True) + extra_disable_when = '{{ {} == block }} {{ {} == none }}'.format(control_pt_name, control_pt_name) + pt.setDisableWhen(pt.disableWhen() + extra_disable_when) + expression = """ + parm = hou.parm("lighttype") + if parm: + value = parm.eval() + label = parm.menuLabels()[value] + if label == "Geometry": + label = "Mesh" + elif label == "Rectangle": + label = "Rect" + return label + "Light" + else: + parm = hou.parm("primtype") + value = parm.eval() + if value == "UsdLuxDomeLight": + return "EnvLight" + """ + pt.setDefaultExpression([expression]) + pt.setDefaultExpressionLanguage([hou.scriptLanguage.Python]) + pt.setTags({'usdvaluetype': 'token'}) + group.append(control_pt) + group.append(pt) + + def __build_parms_for_class(self, group, moonray_class, prefix, + folder_hidewhen_dict, parm_hidewhen_dict, + parm_name_dict, skip_usd_attr, + ft=hou.folderType.Tabs): + for folder_name in moonray_class.folders_sorted: + if not group.findFolder(folder_name): + folder = hou.FolderParmTemplate('folder', folder_name, folder_type=ft) + folder.setConditional(hou.parmCondType.HideWhen, folder_hidewhen_dict.get(folder_name)) + group.append(folder) + group.hideFolder(folder_name, True) + + usd_attr_list = USD_ATTRIBUTE_MAP.get(moonray_class.moonray_name) + for parm in moonray_class.parms: + usdvaluetype = str(parm.get_usd_type()) + if not usdvaluetype: + continue + attr_name = parm.moonray_name + attr_prefix = prefix + skip_multiparm = usdvaluetype in ['string[]'] + if usd_attr_list and attr_name in usd_attr_list and attr_name not in ['inner_cone_angle']: + if skip_usd_attr: + continue + attr_prefix = '' + attr_name = usd_attr_list[attr_name] + + pt_name, control_pt_name = parm_name_dict.get(attr_name, ('', '')) + pt = group.find(pt_name) + if not pt: + hide_when = parm_hidewhen_dict.get(attr_name) + control_pt = self.__create_control_parm(attr_name, attr_prefix, hide_when, parm.moonray_type) + if moonray_class.moonray_type == 'Camera': + pt = parm.houdini_parm_template( + int_menus=False, + name_prefix=attr_prefix, + moonray_type=parm.moonray_type, + use_moonray_name=False, + alt_name=attr_name, + ) + else: + if attr_name != parm.moonray_name: + pt = parm.houdini_parm_template( + int_menus=False, + name_prefix=attr_prefix, + moonray_type=parm.moonray_type, + use_moonray_name=False, + alt_name=attr_name, + skip_multiparm=skip_multiparm, + ) + else: + pt = parm.houdini_parm_template( + int_menus=False, + name_prefix=attr_prefix, + moonray_type=parm.moonray_type, + use_moonray_name=True, + alt_name=None, + skip_multiparm=skip_multiparm, + ) + if not pt: + continue + pt.setConditional(hou.parmCondType.HideWhen, hide_when) + control_pt_name = control_pt.name() + disable_when = '{{ {} == block }} {{ {} == none }}'.format(control_pt_name, control_pt_name) + pt.setDisableWhen(disable_when) + if usdvaluetype: + pt.setTags({'usdvaluetype': usdvaluetype}) + folder_name = moonray_class.folder_name_for_parameter(parm) + if folder_name and group.findFolder(folder_name): + group.appendToFolder(folder_name, control_pt) + group.appendToFolder(folder_name, pt) + group.hideFolder(folder_name, False) + else: + group.append(control_pt) + group.append(pt) + parm_name_dict[attr_name] = (pt.name(), control_pt_name) + + def __build_parms_for_class_list(self, moonray_class_list, prefix, group, + parm_name_dict, is_usd_primtype, + skip_usd_attr, create_hide_when=True, + ft=hou.folderType.Tabs): + folder_hidewhen_dict = {} + parm_hidewhen_dict = {} + if create_hide_when: + folder_hidewhen_dict, parm_hidewhen_dict = self.__create_hidewhen_dict( + moonray_class_list, is_usd_primtype, skip_usd_attr) + self.__update_light_hidewhen( + folder_hidewhen_dict, + parm_hidewhen_dict, + moonray_class_list, + skip_usd_attr, + ) + for moonray_class in moonray_class_list: + self.__build_parms_for_class( + group, + moonray_class, + prefix, + folder_hidewhen_dict, + parm_hidewhen_dict, + parm_name_dict, + skip_usd_attr, + ft, + ) + + def __build_settings(self, folder_name, parm_list, group, attr_prefix='moonray:', + added_parm_names=None): + if added_parm_names is None: + added_parm_names = set() + folder = hou.FolderParmTemplate('folder', folder_name, folder_type=hou.folderType.Tabs) + group.append(folder) + for parm in parm_list: + attr_name = parm.moonray_name + pt = parm.houdini_parm_template(int_menus=False, name_prefix=attr_prefix, use_moonray_name=True) + if not pt: + # logger.warning( + # "Skipping unsupported parm template for %s.%s (%s)", + # folder_name, + # attr_name, + # parm.moonray_type, + # ) + continue + + control_pt = self.__create_control_parm(attr_name, attr_prefix, '', parm.moonray_type) + duplicate_names = [ + parm_name for parm_name in (control_pt.name(), pt.name()) + if parm_name in added_parm_names + ] + if duplicate_names: + # logger.warning( + # "Skipping duplicate parm(s) for %s.%s: %s", + # folder_name, + # attr_name, + # ', '.join(duplicate_names), + # ) + continue + + control_pt_name = control_pt.name() + extra = '{{ {} == block }} {{ {} == none }}'.format(control_pt_name, control_pt_name) + pt.setDisableWhen(pt.disableWhen() + extra) + usdvaluetype = str(parm.get_usd_type()) + if usdvaluetype: + pt.setTags({'usdvaluetype': usdvaluetype}) + group.appendToFolder(folder_name, control_pt) + group.appendToFolder(folder_name, pt) + added_parm_names.update((control_pt.name(), pt.name())) + + def __create_hidewhen_dict(self, moonray_class_list, is_usd_type, skip_usd_attr): + folder_hide_dict = {} + parm_hide_dict = {} + for moonray_class in moonray_class_list: + class_name = moonray_class.moonray_name + hide_when = self.__get_hide_when_string(class_name, is_usd_type) + for folder_name in moonray_class.folders_sorted: + cur_hide_when = folder_hide_dict.get(folder_name) + if cur_hide_when: + folder_hide_dict[folder_name] = '{{ {} {} }}'.format( + cur_hide_when[2:-2], hide_when[2:-2]) + else: + folder_hide_dict[folder_name] = hide_when + + usd_attr_list = self.usd_prim_type_attr.get(class_name) + for parm in moonray_class.parms: + attr_name = parm.moonray_name + if skip_usd_attr and usd_attr_list and attr_name in usd_attr_list: + continue + cur_hide_when = parm_hide_dict.get(attr_name) + if cur_hide_when: + parm_hide_dict[attr_name] = '{{ {} {} }}'.format( + cur_hide_when[2:-2], hide_when[2:-2]) + else: + parm_hide_dict[attr_name] = hide_when + return folder_hide_dict, parm_hide_dict + + def __update_light_hidewhen(self, folder_hide_dict, parm_hide_dict, + moonray_class_list, skip_usd_attr): + hide_when = '{{ createprims == on }}' + updated = [] + for moonray_class in moonray_class_list: + if moonray_class.moonray_type != 'Light': + continue + class_name = moonray_class.moonray_name + for folder_name in moonray_class.folders_sorted: + if folder_name in updated: + continue + cur_hide_when = folder_hide_dict.get(folder_name) + if cur_hide_when: + folder_hide_dict[folder_name] = '{{ {} {} }}'.format( + cur_hide_when[2:-2], hide_when[2:-2]) + updated.append(folder_name) + + usd_attr_list = self.usd_prim_type_attr.get(class_name) + for parm in moonray_class.parms: + attr_name = parm.moonray_name + if attr_name in updated: + continue + if skip_usd_attr and usd_attr_list and attr_name in usd_attr_list: + continue + cur_hide_when = parm_hide_dict.get(attr_name) + if cur_hide_when: + parm_hide_dict[attr_name] = '{{ {} {} }}'.format( + cur_hide_when[2:-2], hide_when[2:-2]) + updated.append(attr_name) + + def __create_control_parm(self, parm_name, prefix, hide_when, moonray_type, + default_value='none', is_hidden=False): + name = '{}{}_control'.format(prefix, parm_name) + label = '{}{}'.format(prefix, parm_name) + pt = hou.StringParmTemplate( + name, + label, + 1, + default_value=[default_value], + is_hidden=is_hidden, + ) + menu, labels = create_control_menu(moonray_type) + pt.setMenuItems(menu) + pt.setMenuLabels(labels) + pt.setMenuType(hou.menuType.ControlNextParameter) + pt.setConditional(hou.parmCondType.HideWhen, hide_when) + pt.setTags({'sidefx::look': 'icon'}) + return pt + + def __get_hide_when_string(self, class_name, is_usd_type): + if is_usd_type: + return '{{ primtype != UsdLux{} }}'.format(self.__get_usdclass_name(class_name)) + return '{{ primtype != {} }}'.format(class_name) + + def __get_usdclass_name(self, moonray_class_name): + if moonray_class_name == 'SpotLight': + return 'DiskLight' + elif moonray_class_name == 'EnvLight': + return 'DomeLight' + elif moonray_class_name == 'MeshLight': + return 'GeometryLight' + return moonray_class_name + + def __get_shared_parms(self, geometry_class_list): + common_settings = {} + count = {} + number = 0 + for moonray_class in self.geometry_class.values(): + if moonray_class.moonray_name in geometry_class_list: + number += 1 + for parm in moonray_class.parms: + attr_name = parm.moonray_name + if number == 1: + common_settings[attr_name] = parm + count[attr_name] = 1 + elif attr_name in common_settings: + count[attr_name] = count[attr_name] + 1 + for attr_name, attr_count in list(count.items()): + if attr_count != number and attr_name in common_settings: + del common_settings[attr_name] + return list(common_settings.keys()), list(common_settings.values()) + + def __get_moonrayclass_parms(self, moonray_class_name, attr_name_list=None): + parm_list = [] + for moonray_class in self.moonray_classes: + if moonray_class.moonray_name == moonray_class_name: + if not attr_name_list: + return moonray_class.parms + for parm in moonray_class.parms: + if parm.moonray_name in attr_name_list: + parm_list.append(parm) + return parm_list + + def __save_ds_file(self, group, filename): + script = '#include "$HFS/houdini/soho/parameters/CommonMacros.ds"\n' + group.asDialogScript() + soho_dir = os.path.join(self.dest_dir, 'soho', 'parameters') + ensure_directory(soho_dir) + dest_file = os.path.join(soho_dir, filename) + with open(dest_file, 'w') as file_pointer: + file_pointer.write(script) + + def build_moonray_class(self, prefix, moonray_class): + group = hou.ParmTemplateGroup() + self.__build_parms_for_class( + group, + moonray_class, + prefix, + {}, + {}, + {}, + False, + ) + self.__save_ds_file(group, 'moonray_{0}.ds'.format(moonray_class.moonray_name)) + + def build_moonray_override(self): + shaders = sorted(list(self.shader_class.keys())) + lights = sorted(list(self.light_class.keys())) + lfs = sorted(list(self.lf_class.keys())) + cams = sorted(list(self.cam_class.keys())) + geos = sorted(list(self.geometry_class.keys())) + + group = hou.ParmTemplateGroup() + category = hou.MenuParmTemplate( + 'category', + 'Category', + menu_items=['Shader', 'Light', 'Camera', 'Light Filter', 'Geometry'], + is_button_strip=True, + ) + script = """ + parm = hou.pwd().parm("category") + selected = parm.eval() + tokens = parm.parmTemplate().menuItems() + menulist = [] + token = tokens[selected] + if token == "Shader": + menulist = %s + elif token == "Light": + menulist = %s + elif token == "Camera": + menulist = %s + elif token == "Light Filter": + menulist = %s + elif token == "Geometry": + menulist = %s + return menulist + """ % (shaders, lights, cams, lfs, geos) + primtype = hou.StringParmTemplate( + 'primtype', + 'Primitive Type', + 1, + item_generator_script=script, + menu_type=hou.menuType.StringReplace, + script_callback='hou.phm().wrapper(hou.pwd()).load_ds()', + script_callback_language=hou.scriptLanguage.Python, + ) + group.append(category) + group.append(primtype) + self.__save_ds_file(group, 'moonray_Override.ds') + + for a_class in self.shader_class.values(): + self.build_moonray_class('inputs:', a_class) + + others = list(self.light_class.values()) + list(self.lf_class.values()) + \ + list(self.geometry_class.values()) + list(self.cam_class.values()) + for a_class in others: + if a_class.moonray_name.find('Deform') != -1 or a_class.moonray_name.startswith('Willow'): + self.build_moonray_class('procedural:', a_class) + elif a_class in self.geometry_class.values(): + self.build_moonray_class('primvars:moonray:', a_class) + else: + self.build_moonray_class('moonray:', a_class) + + def build_moonray_geometry(self): + geo_dict = { + 'BoxGeometry': [], + 'RdlCurveGeometry': [], + 'RdlInstancerGeometry': [], + 'RdlMeshGeometry': [], + 'RdlPointGeometry': [], + 'SphereGeometry': [], + 'VdbGeometry': [], + } + geo_label_dict = { + 'BoxGeometry': 'Box', + 'RdlCurveGeometry': 'RdlCurve', + 'RdlInstancerGeometry': 'RdlInstancer', + 'RdlMeshGeometry': 'RdlMesh', + 'RdlPointGeometry': 'RdlPoint', + 'SphereGeometry': 'Sphere', + 'VdbGeometry': 'Vdb', + } + _parm_name_list, parm_list = self.__get_shared_parms(list(geo_dict.keys())) + group = hou.ParmTemplateGroup() + group.setLabel('Moonray') + added_parm_names = set() + self.__build_settings('Common Properties', parm_list, group, 'primvars:moonray:', added_parm_names) + for class_name, attr_list in geo_dict.items(): + parm_list = self.__get_moonrayclass_parms(class_name, attr_list) + if parm_list: + self.__build_settings( + geo_label_dict.get(class_name, class_name), + parm_list, + group, + 'primvars:moonray:', + added_parm_names, + ) + self.__save_ds_file(group, 'HdMoonrayRendererPlugin_Geometry.ds') + + def build_moonray_lights(self): + group = hou.ParmTemplateGroup() + group.setLabel('Moonray') + parm_name_dict = {} + moonray_class_list = [] + for moonray_class in self.moonray_classes: + if moonray_class.moonray_type == 'Light': + moonray_class_list.append(moonray_class) + self.__add_light_type_parm(group) + self.__build_parms_for_class_list( + moonray_class_list, + 'moonray:', + group, + parm_name_dict, + True, + True, + ) + self.__save_ds_file(group, 'HdMoonrayRendererPlugin_Light.ds') + + def build_moonray_global(self): + group = hou.ParmTemplateGroup() + group.setLabel('Moonray') + parm_name_dict = {} + moonray_class_list = [] + for moonray_class in self.moonray_classes: + if moonray_class.moonray_name == 'SceneVariables': + moonray_class_list.append(moonray_class) + break + self.__build_parms_for_class_list( + moonray_class_list, + 'moonray:sceneVariable:', + group, + parm_name_dict, + False, + True, + False, + hou.folderType.Tabs, + ) + self.__save_ds_file(group, 'HdMoonrayRendererPlugin_Global.ds') + + def build_moonray_renderVar(self): + group = hou.ParmTemplateGroup() + group.setLabel('Moonray') + parm_name_dict = {} + moonray_class_list = [] + for moonray_class in self.moonray_classes: + if moonray_class.moonray_name == 'RenderOutput': + moonray_class_list.append(moonray_class) + break + self.__build_parms_for_class_list( + moonray_class_list, + 'parameters:moonray:', + group, + parm_name_dict, + True, + True, + False, + hou.folderType.Tabs, + ) + self.__save_ds_file(group, 'HdMoonrayRendererPlugin_Aov.ds') + + +def main(): + global HELP_URL + parser = argparse.ArgumentParser( + description='Build public Moonray HDAs and LOP .ds files against Moonshine.') + parser.add_argument( + 'moonshine_packages', + help="Optional package label(s) recorded in moonray_nodes.json, e.g. 'moonshine-15.0'. " + "Shader data always comes from rdl2_json_exporter on RDL2_DSO_PATH.", + type=str, + nargs='*', + default=[], + ) + parser.add_argument( + '--output-dir', + default=DEFAULT_OUTPUT_DIR, + help='Destination directory for HDAs, metadata JSON, and LOP .ds files (default: {}).'.format( + DEFAULT_OUTPUT_DIR), + ) + parser.add_argument( + '--classes-json', + default=os.environ.get(VAR_CLASSES_JSON), + help='Read the scene class definitions from this file, as produced by ' + '"rdl2_json_exporter --out ", instead of running the exporter. ' + 'Use this when running under hython: Moonshine is built against its own ' + 'USD, which cannot share a process with the USD inside Houdini, so the ' + 'export has to happen in a separate shell. Defaults to ${}.'.format( + VAR_CLASSES_JSON), + ) + parser.add_argument( + '--internal', + action='store_true', + help='Build the internal plugin set. Public builds refuse a package set ' + 'containing DWA packages, because moonshine_dwa shaders must not end ' + 'up in the public moonray_dcc_plugins repo. Pass this only when the ' + 'output is going somewhere internal.', + ) + parser.add_argument( + '--help-url', + default=HELP_URL, + help='Documentation URL to embed in each HDA as its HelpUrl section. ' + 'Defaults to $MOONRAY_HDA_HELP_URL; when empty no HelpUrl is written.', + ) + + args = parser.parse_args() + HELP_URL = args.help_url + if args.classes_json: + os.environ[VAR_CLASSES_JSON] = args.classes_json + pkgs = ' '.join(args.moonshine_packages) + if args.internal: + print('Building the INTERNAL plugin set; proprietary shaders are allowed.') + else: + validate_public_packages(pkgs) + + ensure_directory(args.output_dir) + ensure_directory(os.path.join(args.output_dir, 'otls')) + ensure_directory(os.path.join(args.output_dir, 'soho', 'parameters')) + + print('=' * 80) + print('Public Moonshine build') + print(' Packages : {0}'.format(pkgs)) + print(' Output dir : {0}'.format(args.output_dir)) + print('=' * 80) + + updater = UpdateHDAs( + moonshine_packages=pkgs, + destination_directory=args.output_dir, + ) + updater.main() + + builder = LopDialogScriptBuilder(args.output_dir, updater.moonray_classes) + builder.build_moonray_lights() + builder.build_moonray_geometry() + builder.build_moonray_override() + builder.build_moonray_global() + builder.build_moonray_renderVar() + + print('=' * 80) + print('Public Moonshine build complete.') + print(' HDAs -> {0}'.format(os.path.join(args.output_dir, 'otls'))) + print(' Metadata -> {0}'.format(os.path.join(args.output_dir, MOONSHINE_DATA_FILE))) + print(' DS files -> {0}'.format(os.path.join(args.output_dir, 'soho', 'parameters'))) + print('=' * 80) + + +if __name__ == '__main__': + main() \ No newline at end of file From 2521e87860b25d8a16dd8d629d8674b745919dfd Mon Sep 17 00:00:00 2001 From: Nick Shelton Date: Tue, 18 Aug 2026 14:11:54 -0700 Subject: [PATCH 2/3] update readme Signed-off-by: Nick Shelton --- README.md | 63 +++++++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 52 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index 6e53e11..9421a32 100644 --- a/README.md +++ b/README.md @@ -1,21 +1,62 @@ # moonray_dcc_plugins - part of the [MoonRay](https://github.com/OpenMoonRay/openmoonray) project -Policies concerning [Governance](https://github.com/OpenMoonRay/openmoonray/blob/main/GOVERNANCE.md), [Code of Conduct](https://github.com/OpenMoonRay/openmoonray/blob/main/CODE_OF_CONDUCT.md), and [Contribution](https://github.com/OpenMoonRay/openmoonray/blob/main/CONTRIBUTING.md) are available in the overarching MoonRay project, defined in the [`OpenMoonRay/openmoonray` GitHub repository superproject](https://github.com/OpenMoonRay/openmoonray). + +Policies concerning [Governance](https://github.com/OpenMoonRay/openmoonray/blob/main/GOVERNANCE.md), [Code of Conduct](https://github.com/OpenMoonRay/openmoonray/blob/main/CODE_OF_CONDUCT.md), and [Contribution](https://github.com/OpenMoonRay/openmoonray/blob/main/CONTRIBUTING.md) are available in the overarching MoonRay project, defined in the [OpenMoonRay/openmoonray GitHub repository superproject](https://github.com/OpenMoonRay/openmoonray). This repository contains plugins for DCC apps to support MoonRay. -## houdini +# Houdini +## Installation + Include the folders inside of the houdini folder into your HOUDINI_PATH by copying them into a folder already sourced or adding them to the HOUDINI_PATH environment variable see https://www.sidefx.com/docs/houdini/basics/config.html - Add to Variable: - add the openmoonray/plugin/houdini/ folder to your HOUDINI_PATH - ``` - HOUDINI_PATH = $HOUDINI_PATH:/plugin/houdini - ``` - -- copy the folders inside into your local houdini: - ``` - cp -r /plugin/houdini/* ~/houdini19.5/ - ``` + add the openmoonray/plugin/houdini/ folder to your HOUDINI_PATH + ``` + HOUDINI_PATH = $HOUDINI_PATH:/plugin/houdini + ``` + +- or copy the folders inside into your local houdini: + ``` + cp -r /plugin/houdini/* ~/houdini19.5/ + ``` + +Note : if you folow the cmake build and install instructions in the root repo, this happens as an installation step. +the supplied `/scripts/{macOS, Rocky9}/setupHoudini.sh` will set up the correct paths. + + +## Updating + +We provide a script `moonray_dcc_plugins/scripts/update_hdas.py` to update the existing hdas and ds files from new moonray modifications. + +Runtime dependencies: + - hython / hou (Houdini writes the .hda and .ds files itself) + - `rdl2_json_exporter` on $PATH, with $RDL2_DSO_PATH set to the proxy DSOs + - pxr Python modules (optional; falls back to static output tags) + +1. Set up environment: +Use houdini shell, or source their setup.sh, for example: +``` +source /Houdini20.0.751/Frameworks/Houdini.framework/Versions/Current/Resources/houdini_setup +``` + +Add the moonray environment: +``` +source /scripts/{macOS, Rocky9}/setupHoudini.sh +``` + +2. run script + +``` +cd +hython scripts/update_hdas.py --output-dir ./houdini +``` + +3. install +``` +cp houdini/moonray_nodes.json /plugin/houdini +cp -r houdini/{otls,soho,python*} /plugin/houdini +``` + From 1c49d8abfb973aa0e0f440d33841af4e98b72068 Mon Sep 17 00:00:00 2001 From: nick Date: Tue, 18 Aug 2026 14:46:29 -0700 Subject: [PATCH 3/3] update README Signed-off-by: nick --- README.md | 30 +++++++++++------------------- 1 file changed, 11 insertions(+), 19 deletions(-) diff --git a/README.md b/README.md index 9421a32..4492515 100644 --- a/README.md +++ b/README.md @@ -1,37 +1,29 @@ # moonray_dcc_plugins - part of the [MoonRay](https://github.com/OpenMoonRay/openmoonray) project -Policies concerning [Governance](https://github.com/OpenMoonRay/openmoonray/blob/main/GOVERNANCE.md), [Code of Conduct](https://github.com/OpenMoonRay/openmoonray/blob/main/CODE_OF_CONDUCT.md), and [Contribution](https://github.com/OpenMoonRay/openmoonray/blob/main/CONTRIBUTING.md) are available in the overarching MoonRay project, defined in the [OpenMoonRay/openmoonray GitHub repository superproject](https://github.com/OpenMoonRay/openmoonray). +Policies concerning [Governance](https://github.com/OpenMoonRay/openmoonray/blob/main/GOVERNANCE.md), [Code of Conduct](https://github.com/OpenMoonRay/openmoonray/blob/main/CODE_OF_CONDUCT.md), and [Contribution](https://github.com/OpenMoonRay/openmoonray/blob/main/CONTRIBUTING.md) are available in the overarching MoonRay project, defined in the [`OpenMoonRay/openmoonray` GitHub repository superproject](https://github.com/OpenMoonRay/openmoonray). This repository contains plugins for DCC apps to support MoonRay. # Houdini ## Installation -Include the folders inside of the houdini folder into your HOUDINI_PATH by copying them into a folder already sourced or adding them to the HOUDINI_PATH environment variable +If you folow the cmake build and install instructions in the root repo, this plugin is copied as an installation step and you should not need to do anything if you source the `setupHoudini.sh` script. -see https://www.sidefx.com/docs/houdini/basics/config.html +If you want to make changes or develop the plugin, note that +1. The plugin is copied to `/plugin/houdini` +2. This path is added to the `HOUDINI_PATH` in `/scripts/{macOS, Rocky9}/setupHoudini.sh` -- Add to Variable: - add the openmoonray/plugin/houdini/ folder to your HOUDINI_PATH - ``` - HOUDINI_PATH = $HOUDINI_PATH:/plugin/houdini - ``` +It is also possible to copy the plugin to your `~/Houdini20.0/` directory, or another location in `HOUINI_PATH`. Just be careful to not include two different versions of these folders. -- or copy the folders inside into your local houdini: - ``` - cp -r /plugin/houdini/* ~/houdini19.5/ - ``` - -Note : if you folow the cmake build and install instructions in the root repo, this happens as an installation step. -the supplied `/scripts/{macOS, Rocky9}/setupHoudini.sh` will set up the correct paths. +> see https://www.sidefx.com/docs/houdini/basics/config.html ## Updating -We provide a script `moonray_dcc_plugins/scripts/update_hdas.py` to update the existing hdas and ds files from new moonray modifications. +We provide a script `moonray_dcc_plugins/scripts/update_hdas.py` to update the existing `.hda` and `.ds` files from local Moonray modifications. We encourage developers to update relevant nodes with modifications to the underlying renderer. Runtime dependencies: - - hython / hou (Houdini writes the .hda and .ds files itself) + - hython / hou (Houdini writes the `.hda` and `.ds` files itself) - `rdl2_json_exporter` on $PATH, with $RDL2_DSO_PATH set to the proxy DSOs - pxr Python modules (optional; falls back to static output tags) @@ -46,14 +38,14 @@ Add the moonray environment: source /scripts/{macOS, Rocky9}/setupHoudini.sh ``` -2. run script +2. Run script ``` cd hython scripts/update_hdas.py --output-dir ./houdini ``` -3. install +3. Install ``` cp houdini/moonray_nodes.json /plugin/houdini cp -r houdini/{otls,soho,python*} /plugin/houdini