// // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions // are met: // * Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // * Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in the // documentation and/or other materials provided with the distribution. // * Neither the name of NVIDIA CORPORATION nor the names of its // contributors may be used to endorse or promote products derived // from this software without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY // EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR // PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY // OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // // Copyright (c) 2018 NVIDIA Corporation. All rights reserved. // This file was generated by NvParameterized/scripts/GenParameterized.pl #include "ClothingActorParam.h" #include #include using namespace NvParameterized; namespace nvidia { namespace clothing { using namespace ClothingActorParamNS; const char* const ClothingActorParamFactory::vptr = NvParameterized::getVptr(); const uint32_t NumParamDefs = 76; static NvParameterized::DefinitionImpl* ParamDefTable; // now allocated in buildTree [NumParamDefs]; static const size_t ParamLookupChildrenTable[] = { 1, 2, 3, 11, 12, 13, 14, 15, 16, 17, 18, 21, 24, 25, 27, 38, 54, 57, 58, 59, 61, 63, 65, 66, 67, 68, 69, 70, 72, 73, 74, 75, 4, 5, 6, 7, 8, 9, 10, 19, 20, 22, 23, 26, 28, 29, 30, 35, 36, 37, 31, 32, 33, 34, 39, 45, 46, 51, 52, 53, 40, 41, 42, 43, 44, 47, 48, 49, 50, 55, 56, 60, 62, 64, 71, }; #define TENUM(type) nvidia::##type #define CHILDREN(index) &ParamLookupChildrenTable[index] static const NvParameterized::ParamLookupNode ParamLookupTable[NumParamDefs] = { { TYPE_STRUCT, false, 0, CHILDREN(0), 32 }, { TYPE_MAT44, false, (size_t)(&((ParametersStruct*)0)->globalPose), NULL, 0 }, // globalPose { TYPE_BOOL, false, (size_t)(&((ParametersStruct*)0)->useHardwareCloth), NULL, 0 }, // useHardwareCloth { TYPE_STRUCT, false, (size_t)(&((ParametersStruct*)0)->flags), CHILDREN(32), 7 }, // flags { TYPE_BOOL, false, (size_t)(&((ClothingActorFlags_Type*)0)->ParallelCpuSkinning), NULL, 0 }, // flags.ParallelCpuSkinning { TYPE_BOOL, false, (size_t)(&((ClothingActorFlags_Type*)0)->RecomputeNormals), NULL, 0 }, // flags.RecomputeNormals { TYPE_BOOL, false, (size_t)(&((ClothingActorFlags_Type*)0)->RecomputeTangents), NULL, 0 }, // flags.RecomputeTangents { TYPE_BOOL, false, (size_t)(&((ClothingActorFlags_Type*)0)->Visualize), NULL, 0 }, // flags.Visualize { TYPE_BOOL, false, (size_t)(&((ClothingActorFlags_Type*)0)->CorrectSimulationNormals), NULL, 0 }, // flags.CorrectSimulationNormals { TYPE_BOOL, false, (size_t)(&((ClothingActorFlags_Type*)0)->ComputeRenderData), NULL, 0 }, // flags.ComputeRenderData { TYPE_BOOL, false, (size_t)(&((ClothingActorFlags_Type*)0)->ComputePhysicsMeshNormals), NULL, 0 }, // flags.ComputePhysicsMeshNormals { TYPE_BOOL, false, (size_t)(&((ParametersStruct*)0)->fallbackSkinning), NULL, 0 }, // fallbackSkinning { TYPE_BOOL, false, (size_t)(&((ParametersStruct*)0)->slowStart), NULL, 0 }, // slowStart { TYPE_BOOL, false, (size_t)(&((ParametersStruct*)0)->useInternalBoneOrder), NULL, 0 }, // useInternalBoneOrder { TYPE_BOOL, false, (size_t)(&((ParametersStruct*)0)->updateStateWithGlobalMatrices), NULL, 0 }, // updateStateWithGlobalMatrices { TYPE_U32, false, (size_t)(&((ParametersStruct*)0)->uvChannelForTangentUpdate), NULL, 0 }, // uvChannelForTangentUpdate { TYPE_F32, false, (size_t)(&((ParametersStruct*)0)->maxDistanceBlendTime), NULL, 0 }, // maxDistanceBlendTime { TYPE_U32, false, (size_t)(&((ParametersStruct*)0)->clothingMaterialIndex), NULL, 0 }, // clothingMaterialIndex { TYPE_STRUCT, false, (size_t)(&((ParametersStruct*)0)->windParams), CHILDREN(39), 2 }, // windParams { TYPE_VEC3, false, (size_t)(&((WindParameters_Type*)0)->Velocity), NULL, 0 }, // windParams.Velocity { TYPE_F32, false, (size_t)(&((WindParameters_Type*)0)->Adaption), NULL, 0 }, // windParams.Adaption { TYPE_STRUCT, false, (size_t)(&((ParametersStruct*)0)->maxDistanceScale), CHILDREN(41), 2 }, // maxDistanceScale { TYPE_F32, false, (size_t)(&((MaxDistanceScale_Type*)0)->Scale), NULL, 0 }, // maxDistanceScale.Scale { TYPE_BOOL, false, (size_t)(&((MaxDistanceScale_Type*)0)->Multipliable), NULL, 0 }, // maxDistanceScale.Multipliable { TYPE_U64, false, (size_t)(&((ParametersStruct*)0)->userData), NULL, 0 }, // userData { TYPE_ARRAY, true, (size_t)(&((ParametersStruct*)0)->boneMatrices), CHILDREN(43), 1 }, // boneMatrices { TYPE_MAT44, false, 1 * sizeof(physx::PxMat44), NULL, 0 }, // boneMatrices[] { TYPE_STRUCT, false, (size_t)(&((ParametersStruct*)0)->clothDescTemplate), CHILDREN(44), 6 }, // clothDescTemplate { TYPE_F32, false, (size_t)(&((ClothDescTemplate_Type*)0)->collisionResponseCoefficient), NULL, 0 }, // clothDescTemplate.collisionResponseCoefficient { TYPE_U16, false, (size_t)(&((ClothDescTemplate_Type*)0)->collisionGroup), NULL, 0 }, // clothDescTemplate.collisionGroup { TYPE_STRUCT, false, (size_t)(&((ClothDescTemplate_Type*)0)->groupsMask), CHILDREN(50), 4 }, // clothDescTemplate.groupsMask { TYPE_U32, false, (size_t)(&((GroupsMask_Type*)0)->bits0), NULL, 0 }, // clothDescTemplate.groupsMask.bits0 { TYPE_U32, false, (size_t)(&((GroupsMask_Type*)0)->bits1), NULL, 0 }, // clothDescTemplate.groupsMask.bits1 { TYPE_U32, false, (size_t)(&((GroupsMask_Type*)0)->bits2), NULL, 0 }, // clothDescTemplate.groupsMask.bits2 { TYPE_U32, false, (size_t)(&((GroupsMask_Type*)0)->bits3), NULL, 0 }, // clothDescTemplate.groupsMask.bits3 { TYPE_BOUNDS3, false, (size_t)(&((ClothDescTemplate_Type*)0)->validBounds), NULL, 0 }, // clothDescTemplate.validBounds { TYPE_U64, false, (size_t)(&((ClothDescTemplate_Type*)0)->compartment), NULL, 0 }, // clothDescTemplate.compartment { TYPE_U64, false, (size_t)(&((ClothDescTemplate_Type*)0)->userData), NULL, 0 }, // clothDescTemplate.userData { TYPE_STRUCT, false, (size_t)(&((ParametersStruct*)0)->shapeDescTemplate), CHILDREN(54), 6 }, // shapeDescTemplate { TYPE_STRUCT, false, (size_t)(&((ShapeDescTemplate_Type*)0)->flags), CHILDREN(60), 5 }, // shapeDescTemplate.flags { TYPE_BOOL, false, (size_t)(&((ShapeDescFlags_Type*)0)->NX_SF_VISUALIZATION), NULL, 0 }, // shapeDescTemplate.flags.NX_SF_VISUALIZATION { TYPE_BOOL, false, (size_t)(&((ShapeDescFlags_Type*)0)->NX_SF_DISABLE_COLLISION), NULL, 0 }, // shapeDescTemplate.flags.NX_SF_DISABLE_COLLISION { TYPE_BOOL, false, (size_t)(&((ShapeDescFlags_Type*)0)->NX_SF_DISABLE_RAYCASTING), NULL, 0 }, // shapeDescTemplate.flags.NX_SF_DISABLE_RAYCASTING { TYPE_BOOL, false, (size_t)(&((ShapeDescFlags_Type*)0)->NX_SF_DYNAMIC_DYNAMIC_CCD), NULL, 0 }, // shapeDescTemplate.flags.NX_SF_DYNAMIC_DYNAMIC_CCD { TYPE_BOOL, false, (size_t)(&((ShapeDescFlags_Type*)0)->NX_SF_DISABLE_SCENE_QUERIES), NULL, 0 }, // shapeDescTemplate.flags.NX_SF_DISABLE_SCENE_QUERIES { TYPE_U16, false, (size_t)(&((ShapeDescTemplate_Type*)0)->collisionGroup), NULL, 0 }, // shapeDescTemplate.collisionGroup { TYPE_STRUCT, false, (size_t)(&((ShapeDescTemplate_Type*)0)->groupsMask), CHILDREN(65), 4 }, // shapeDescTemplate.groupsMask { TYPE_U32, false, (size_t)(&((GroupsMask_Type*)0)->bits0), NULL, 0 }, // shapeDescTemplate.groupsMask.bits0 { TYPE_U32, false, (size_t)(&((GroupsMask_Type*)0)->bits1), NULL, 0 }, // shapeDescTemplate.groupsMask.bits1 { TYPE_U32, false, (size_t)(&((GroupsMask_Type*)0)->bits2), NULL, 0 }, // shapeDescTemplate.groupsMask.bits2 { TYPE_U32, false, (size_t)(&((GroupsMask_Type*)0)->bits3), NULL, 0 }, // shapeDescTemplate.groupsMask.bits3 { TYPE_U16, false, (size_t)(&((ShapeDescTemplate_Type*)0)->materialIndex), NULL, 0 }, // shapeDescTemplate.materialIndex { TYPE_U64, false, (size_t)(&((ShapeDescTemplate_Type*)0)->userData), NULL, 0 }, // shapeDescTemplate.userData { TYPE_U64, false, (size_t)(&((ShapeDescTemplate_Type*)0)->name), NULL, 0 }, // shapeDescTemplate.name { TYPE_STRUCT, false, (size_t)(&((ParametersStruct*)0)->actorDescTemplate), CHILDREN(69), 2 }, // actorDescTemplate { TYPE_U64, false, (size_t)(&((ActorDescTemplate_Type*)0)->userData), NULL, 0 }, // actorDescTemplate.userData { TYPE_U64, false, (size_t)(&((ActorDescTemplate_Type*)0)->name), NULL, 0 }, // actorDescTemplate.name { TYPE_F32, false, (size_t)(&((ParametersStruct*)0)->actorScale), NULL, 0 }, // actorScale { TYPE_REF, false, (size_t)(&((ParametersStruct*)0)->runtimeCooked), NULL, 0 }, // runtimeCooked { TYPE_ARRAY, true, (size_t)(&((ParametersStruct*)0)->morphDisplacements), CHILDREN(71), 1 }, // morphDisplacements { TYPE_VEC3, false, 1 * sizeof(physx::PxVec3), NULL, 0 }, // morphDisplacements[] { TYPE_ARRAY, true, (size_t)(&((ParametersStruct*)0)->morphPhysicalMeshNewPositions), CHILDREN(72), 1 }, // morphPhysicalMeshNewPositions { TYPE_VEC3, false, 1 * sizeof(physx::PxVec3), NULL, 0 }, // morphPhysicalMeshNewPositions[] { TYPE_ARRAY, true, (size_t)(&((ParametersStruct*)0)->morphGraphicalMeshNewPositions), CHILDREN(73), 1 }, // morphGraphicalMeshNewPositions { TYPE_VEC3, false, 1 * sizeof(physx::PxVec3), NULL, 0 }, // morphGraphicalMeshNewPositions[] { TYPE_BOOL, false, (size_t)(&((ParametersStruct*)0)->allowAdaptiveTargetFrequency), NULL, 0 }, // allowAdaptiveTargetFrequency { TYPE_BOOL, false, (size_t)(&((ParametersStruct*)0)->useVelocityClamping), NULL, 0 }, // useVelocityClamping { TYPE_BOUNDS3, false, (size_t)(&((ParametersStruct*)0)->vertexVelocityClamp), NULL, 0 }, // vertexVelocityClamp { TYPE_F32, false, (size_t)(&((ParametersStruct*)0)->pressure), NULL, 0 }, // pressure { TYPE_BOOL, false, (size_t)(&((ParametersStruct*)0)->multiplyGlobalPoseIntoBones), NULL, 0 }, // multiplyGlobalPoseIntoBones { TYPE_ARRAY, true, (size_t)(&((ParametersStruct*)0)->overrideMaterialNames), CHILDREN(74), 1 }, // overrideMaterialNames { TYPE_STRING, false, 1 * sizeof(NvParameterized::DummyStringStruct), NULL, 0 }, // overrideMaterialNames[] { TYPE_ENUM, false, (size_t)(&((ParametersStruct*)0)->simulationBackend), NULL, 0 }, // simulationBackend { TYPE_BOOL, false, (size_t)(&((ParametersStruct*)0)->freezeByLOD), NULL, 0 }, // freezeByLOD { TYPE_BOOL, false, (size_t)(&((ParametersStruct*)0)->localSpaceSim), NULL, 0 }, // localSpaceSim { TYPE_I32, false, (size_t)(&((ParametersStruct*)0)->teleportMode), NULL, 0 }, // teleportMode }; bool ClothingActorParam::mBuiltFlag = false; NvParameterized::MutexType ClothingActorParam::mBuiltFlagMutex; ClothingActorParam::ClothingActorParam(NvParameterized::Traits* traits, void* buf, int32_t* refCount) : NvParameters(traits, buf, refCount) { //mParameterizedTraits->registerFactory(className(), &ClothingActorParamFactoryInst); if (!buf) //Do not init data if it is inplace-deserialized { initDynamicArrays(); initStrings(); initReferences(); initDefaults(); } } ClothingActorParam::~ClothingActorParam() { freeStrings(); freeReferences(); freeDynamicArrays(); } void ClothingActorParam::destroy() { // We cache these fields here to avoid overwrite in destructor bool doDeallocateSelf = mDoDeallocateSelf; NvParameterized::Traits* traits = mParameterizedTraits; int32_t* refCount = mRefCount; void* buf = mBuffer; this->~ClothingActorParam(); NvParameters::destroy(this, traits, doDeallocateSelf, refCount, buf); } const NvParameterized::DefinitionImpl* ClothingActorParam::getParameterDefinitionTree(void) { if (!mBuiltFlag) // Double-checked lock { NvParameterized::MutexType::ScopedLock lock(mBuiltFlagMutex); if (!mBuiltFlag) { buildTree(); } } return(&ParamDefTable[0]); } const NvParameterized::DefinitionImpl* ClothingActorParam::getParameterDefinitionTree(void) const { ClothingActorParam* tmpParam = const_cast(this); if (!mBuiltFlag) // Double-checked lock { NvParameterized::MutexType::ScopedLock lock(mBuiltFlagMutex); if (!mBuiltFlag) { tmpParam->buildTree(); } } return(&ParamDefTable[0]); } NvParameterized::ErrorType ClothingActorParam::getParameterHandle(const char* long_name, Handle& handle) const { ErrorType Ret = NvParameters::getParameterHandle(long_name, handle); if (Ret != ERROR_NONE) { return(Ret); } size_t offset; void* ptr; getVarPtr(handle, ptr, offset); if (ptr == NULL) { return(ERROR_INDEX_OUT_OF_RANGE); } return(ERROR_NONE); } NvParameterized::ErrorType ClothingActorParam::getParameterHandle(const char* long_name, Handle& handle) { ErrorType Ret = NvParameters::getParameterHandle(long_name, handle); if (Ret != ERROR_NONE) { return(Ret); } size_t offset; void* ptr; getVarPtr(handle, ptr, offset); if (ptr == NULL) { return(ERROR_INDEX_OUT_OF_RANGE); } return(ERROR_NONE); } void ClothingActorParam::getVarPtr(const Handle& handle, void*& ptr, size_t& offset) const { ptr = getVarPtrHelper(&ParamLookupTable[0], const_cast(¶meters()), handle, offset); } /* Dynamic Handle Indices */ /* [0] - overrideMaterialNames (not an array of structs) */ void ClothingActorParam::freeParameterDefinitionTable(NvParameterized::Traits* traits) { if (!traits) { return; } if (!mBuiltFlag) // Double-checked lock { return; } NvParameterized::MutexType::ScopedLock lock(mBuiltFlagMutex); if (!mBuiltFlag) { return; } for (uint32_t i = 0; i < NumParamDefs; ++i) { ParamDefTable[i].~DefinitionImpl(); } traits->free(ParamDefTable); mBuiltFlag = false; } #define PDEF_PTR(index) (&ParamDefTable[index]) void ClothingActorParam::buildTree(void) { uint32_t allocSize = sizeof(NvParameterized::DefinitionImpl) * NumParamDefs; ParamDefTable = (NvParameterized::DefinitionImpl*)(mParameterizedTraits->alloc(allocSize)); memset(ParamDefTable, 0, allocSize); for (uint32_t i = 0; i < NumParamDefs; ++i) { NV_PARAM_PLACEMENT_NEW(ParamDefTable + i, NvParameterized::DefinitionImpl)(*mParameterizedTraits); } // Initialize DefinitionImpl node: nodeIndex=0, longName="" { NvParameterized::DefinitionImpl* ParamDef = &ParamDefTable[0]; ParamDef->init("", TYPE_STRUCT, "STRUCT", true); } // Initialize DefinitionImpl node: nodeIndex=1, longName="globalPose" { NvParameterized::DefinitionImpl* ParamDef = &ParamDefTable[1]; ParamDef->init("globalPose", TYPE_MAT44, NULL, true); #ifdef NV_PARAMETERIZED_HIDE_DESCRIPTIONS static HintImpl HintTable[1]; static Hint* HintPtrTable[1] = { &HintTable[0], }; HintTable[0].init("editorDisplay", "false", true); ParamDefTable[1].setHints((const NvParameterized::Hint**)HintPtrTable, 1); #else static HintImpl HintTable[2]; static Hint* HintPtrTable[2] = { &HintTable[0], &HintTable[1], }; HintTable[0].init("editorDisplay", "false", true); HintTable[1].init("shortDescription", "The pose where the clothing asset will be put into the scene", true); ParamDefTable[1].setHints((const NvParameterized::Hint**)HintPtrTable, 2); #endif /* NV_PARAMETERIZED_HIDE_DESCRIPTIONS */ } // Initialize DefinitionImpl node: nodeIndex=2, longName="useHardwareCloth" { NvParameterized::DefinitionImpl* ParamDef = &ParamDefTable[2]; ParamDef->init("useHardwareCloth", TYPE_BOOL, NULL, true); #ifdef NV_PARAMETERIZED_HIDE_DESCRIPTIONS #else static HintImpl HintTable[1]; static Hint* HintPtrTable[1] = { &HintTable[0], }; HintTable[0].init("shortDescription", "Turns on hardware acceleration for the cloth simulation", true); ParamDefTable[2].setHints((const NvParameterized::Hint**)HintPtrTable, 1); #endif /* NV_PARAMETERIZED_HIDE_DESCRIPTIONS */ } // Initialize DefinitionImpl node: nodeIndex=3, longName="flags" { NvParameterized::DefinitionImpl* ParamDef = &ParamDefTable[3]; ParamDef->init("flags", TYPE_STRUCT, "ClothingActorFlags", true); #ifdef NV_PARAMETERIZED_HIDE_DESCRIPTIONS #else static HintImpl HintTable[1]; static Hint* HintPtrTable[1] = { &HintTable[0], }; HintTable[0].init("shortDescription", "A selection of flags, can be updated at runtime.", true); ParamDefTable[3].setHints((const NvParameterized::Hint**)HintPtrTable, 1); #endif /* NV_PARAMETERIZED_HIDE_DESCRIPTIONS */ } // Initialize DefinitionImpl node: nodeIndex=4, longName="flags.ParallelCpuSkinning" { NvParameterized::DefinitionImpl* ParamDef = &ParamDefTable[4]; ParamDef->init("ParallelCpuSkinning", TYPE_BOOL, NULL, true); #ifdef NV_PARAMETERIZED_HIDE_DESCRIPTIONS #else static HintImpl HintTable[2]; static Hint* HintPtrTable[2] = { &HintTable[0], &HintTable[1], }; HintTable[0].init("longDescription", "All graphical vertices without correspondence to physical vertices or\ntriangles are skinned normally. This flag specifies whether this happens\nduring Physics scene simulation, or after.\nNote: If this flag is set, an inconsistency can arise when calling\nNxClothingActor::updateRenderResource in between NxApexScene::simulate\nand NxApexScene::fetchResults. As a workaround, you should only call\nNxClothingActor::updateRenderResources _after_ NxApexScene::fetchResults\nhas terminated.\n", true); HintTable[1].init("shortDescription", "Determines whether or not to perform CPU skinning in parallel", true); ParamDefTable[4].setHints((const NvParameterized::Hint**)HintPtrTable, 2); #endif /* NV_PARAMETERIZED_HIDE_DESCRIPTIONS */ } // Initialize DefinitionImpl node: nodeIndex=5, longName="flags.RecomputeNormals" { NvParameterized::DefinitionImpl* ParamDef = &ParamDefTable[5]; ParamDef->init("RecomputeNormals", TYPE_BOOL, NULL, true); #ifdef NV_PARAMETERIZED_HIDE_DESCRIPTIONS #else static HintImpl HintTable[2]; static Hint* HintPtrTable[2] = { &HintTable[0], &HintTable[1], }; HintTable[0].init("longDescription", "This usually leads to better looking results, but is more expensive to\ncompute. Default is off.\n", true); HintTable[1].init("shortDescription", "Fully recomputes the normals on the final mesh.", true); ParamDefTable[5].setHints((const NvParameterized::Hint**)HintPtrTable, 2); #endif /* NV_PARAMETERIZED_HIDE_DESCRIPTIONS */ } // Initialize DefinitionImpl node: nodeIndex=6, longName="flags.RecomputeTangents" { NvParameterized::DefinitionImpl* ParamDef = &ParamDefTable[6]; ParamDef->init("RecomputeTangents", TYPE_BOOL, NULL, true); #ifdef NV_PARAMETERIZED_HIDE_DESCRIPTIONS #else static HintImpl HintTable[2]; static Hint* HintPtrTable[2] = { &HintTable[0], &HintTable[1], }; HintTable[0].init("longDescription", "RecomputeTangents can only be set to false if less than half of the graphics mesh vertices have an exact\nmatch in the physics mesh. Otherwise it's always on.\n", true); HintTable[1].init("shortDescription", "Fully recomputes the tangents on the final mesh.", true); ParamDefTable[6].setHints((const NvParameterized::Hint**)HintPtrTable, 2); #endif /* NV_PARAMETERIZED_HIDE_DESCRIPTIONS */ } // Initialize DefinitionImpl node: nodeIndex=7, longName="flags.Visualize" { NvParameterized::DefinitionImpl* ParamDef = &ParamDefTable[7]; ParamDef->init("Visualize", TYPE_BOOL, NULL, true); #ifdef NV_PARAMETERIZED_HIDE_DESCRIPTIONS #else static HintImpl HintTable[1]; static Hint* HintPtrTable[1] = { &HintTable[0], }; HintTable[0].init("shortDescription", "Determines whether or not to display debug visualization for this clothing actor", true); ParamDefTable[7].setHints((const NvParameterized::Hint**)HintPtrTable, 1); #endif /* NV_PARAMETERIZED_HIDE_DESCRIPTIONS */ } // Initialize DefinitionImpl node: nodeIndex=8, longName="flags.CorrectSimulationNormals" { NvParameterized::DefinitionImpl* ParamDef = &ParamDefTable[8]; ParamDef->init("CorrectSimulationNormals", TYPE_BOOL, NULL, true); #ifdef NV_PARAMETERIZED_HIDE_DESCRIPTIONS #else static HintImpl HintTable[2]; static Hint* HintPtrTable[2] = { &HintTable[0], &HintTable[1], }; HintTable[0].init("longDescription", "The MaxDistance=0 vertices can have a perturbed simulation normal. This usually\nhappens only for meshes where the MaxDistance=0 vertices are somewhere in the\nmiddle separating a simulated and non-simulated region. The normal for those\nvertices will be computed only by the simulated triangles which can lead to\nwrong results.\nThis solution will use the normals from the original simulation mesh and skin\nthem with respect to the local pose.\n", true); HintTable[1].init("shortDescription", "", true); ParamDefTable[8].setHints((const NvParameterized::Hint**)HintPtrTable, 2); #endif /* NV_PARAMETERIZED_HIDE_DESCRIPTIONS */ } // Initialize DefinitionImpl node: nodeIndex=9, longName="flags.ComputeRenderData" { NvParameterized::DefinitionImpl* ParamDef = &ParamDefTable[9]; ParamDef->init("ComputeRenderData", TYPE_BOOL, NULL, true); #ifdef NV_PARAMETERIZED_HIDE_DESCRIPTIONS #else static HintImpl HintTable[1]; static Hint* HintPtrTable[1] = { &HintTable[0], }; HintTable[0].init("shortDescription", "If set to false no skinning is done for this actor. Disable if all skinning is done outside of APEX.", true); ParamDefTable[9].setHints((const NvParameterized::Hint**)HintPtrTable, 1); #endif /* NV_PARAMETERIZED_HIDE_DESCRIPTIONS */ } // Initialize DefinitionImpl node: nodeIndex=10, longName="flags.ComputePhysicsMeshNormals" { NvParameterized::DefinitionImpl* ParamDef = &ParamDefTable[10]; ParamDef->init("ComputePhysicsMeshNormals", TYPE_BOOL, NULL, true); #ifdef NV_PARAMETERIZED_HIDE_DESCRIPTIONS #else static HintImpl HintTable[1]; static Hint* HintPtrTable[1] = { &HintTable[0], }; HintTable[0].init("shortDescription", "If set to false the normals on the physics mesh are not computed. Disable skinning and normal calculation is done outside of APEX.", true); ParamDefTable[10].setHints((const NvParameterized::Hint**)HintPtrTable, 1); #endif /* NV_PARAMETERIZED_HIDE_DESCRIPTIONS */ } // Initialize DefinitionImpl node: nodeIndex=11, longName="fallbackSkinning" { NvParameterized::DefinitionImpl* ParamDef = &ParamDefTable[11]; ParamDef->init("fallbackSkinning", TYPE_BOOL, NULL, true); #ifdef NV_PARAMETERIZED_HIDE_DESCRIPTIONS #else static HintImpl HintTable[2]; static Hint* HintPtrTable[2] = { &HintTable[0], &HintTable[1], }; HintTable[0].init("longDescription", "Performs the regular boneweighted skinning on the CPU before giving the\ndata out through the rendering API.\n", true); HintTable[1].init("shortDescription", "Performs skinning in software", true); ParamDefTable[11].setHints((const NvParameterized::Hint**)HintPtrTable, 2); #endif /* NV_PARAMETERIZED_HIDE_DESCRIPTIONS */ } // Initialize DefinitionImpl node: nodeIndex=12, longName="slowStart" { NvParameterized::DefinitionImpl* ParamDef = &ParamDefTable[12]; ParamDef->init("slowStart", TYPE_BOOL, NULL, true); #ifdef NV_PARAMETERIZED_HIDE_DESCRIPTIONS #else static HintImpl HintTable[2]; static Hint* HintPtrTable[2] = { &HintTable[0], &HintTable[1], }; HintTable[0].init("longDescription", "The first time a NxClothingActor starts to be simulated is with full max\ndistance. This prevents starting with full max distance and instead blending\nin as it will do the second time.\n", true); HintTable[1].init("shortDescription", "Prevents from having full max distance right from the start", true); ParamDefTable[12].setHints((const NvParameterized::Hint**)HintPtrTable, 2); #endif /* NV_PARAMETERIZED_HIDE_DESCRIPTIONS */ } // Initialize DefinitionImpl node: nodeIndex=13, longName="useInternalBoneOrder" { NvParameterized::DefinitionImpl* ParamDef = &ParamDefTable[13]; ParamDef->init("useInternalBoneOrder", TYPE_BOOL, NULL, true); #ifdef NV_PARAMETERIZED_HIDE_DESCRIPTIONS static HintImpl HintTable[1]; static Hint* HintPtrTable[1] = { &HintTable[0], }; HintTable[0].init("editorDisplay", "false", true); ParamDefTable[13].setHints((const NvParameterized::Hint**)HintPtrTable, 1); #else static HintImpl HintTable[3]; static Hint* HintPtrTable[3] = { &HintTable[0], &HintTable[1], &HintTable[2], }; HintTable[0].init("editorDisplay", "false", true); HintTable[1].init("longDescription", "If this is set to true the bone buffers in updateState and the actor\ndescriptor have to be given in the same order as the bones are stored\ninternally in the asset. This can be queried using\nNxClothingAsset::getNumUsedBones and NxClothingAsset::getBoneName or\nNxClothingAsset::getBoneMapping.\n\nIf this is set to false, the bone buffers can be provided in the order as\nthey are stored in the application. This is either the bone order at\nauthoring time, or NxClothingAsset::remapBoneIndex can be called for each\nbone to let APEX know about the current ordering in the game. Note that\nthis is only recommended if the application already uses physx::PxMat44\n(or something binary equivalent) and does not have to convert the matrices.\n", true); HintTable[2].init("shortDescription", "Expect internally ordered bone arrays in updateState call.", true); ParamDefTable[13].setHints((const NvParameterized::Hint**)HintPtrTable, 3); #endif /* NV_PARAMETERIZED_HIDE_DESCRIPTIONS */ } // Initialize DefinitionImpl node: nodeIndex=14, longName="updateStateWithGlobalMatrices" { NvParameterized::DefinitionImpl* ParamDef = &ParamDefTable[14]; ParamDef->init("updateStateWithGlobalMatrices", TYPE_BOOL, NULL, true); #ifdef NV_PARAMETERIZED_HIDE_DESCRIPTIONS #else static HintImpl HintTable[2]; static Hint* HintPtrTable[2] = { &HintTable[0], &HintTable[1], }; HintTable[0].init("longDescription", "Depending on what matrices are present, the state can be updated using\nglobal world or object space bone matrices or composite matrices. The\ncomposite matrix can be generated by multiplying the world or object space\nmatrix by the inverse bone bine pose.\n\nNote: If there are problems which might be caused by bind poses being\ndifferent in the ClothingAsset and in the game's animation system, changing\nthis to true (and thus providing global pose matrices) might fix the problem.\n", true); HintTable[1].init("shortDescription", "Use world space matrices instead of composite (relative to bind pose) in NxClothingActor::updateState().", true); ParamDefTable[14].setHints((const NvParameterized::Hint**)HintPtrTable, 2); #endif /* NV_PARAMETERIZED_HIDE_DESCRIPTIONS */ } // Initialize DefinitionImpl node: nodeIndex=15, longName="uvChannelForTangentUpdate" { NvParameterized::DefinitionImpl* ParamDef = &ParamDefTable[15]; ParamDef->init("uvChannelForTangentUpdate", TYPE_U32, NULL, true); #ifdef NV_PARAMETERIZED_HIDE_DESCRIPTIONS #else static HintImpl HintTable[2]; static Hint* HintPtrTable[2] = { &HintTable[0], &HintTable[1], }; HintTable[0].init("longDescription", "Tangent update is done based on one UV channel. This allows selection of what\nUV channel is being used.\n", true); HintTable[1].init("shortDescription", "This UV channel is used for updating tangent space", true); ParamDefTable[15].setHints((const NvParameterized::Hint**)HintPtrTable, 2); #endif /* NV_PARAMETERIZED_HIDE_DESCRIPTIONS */ } // Initialize DefinitionImpl node: nodeIndex=16, longName="maxDistanceBlendTime" { NvParameterized::DefinitionImpl* ParamDef = &ParamDefTable[16]; ParamDef->init("maxDistanceBlendTime", TYPE_F32, NULL, true); #ifdef NV_PARAMETERIZED_HIDE_DESCRIPTIONS #else static HintImpl HintTable[2]; static Hint* HintPtrTable[2] = { &HintTable[0], &HintTable[1], }; HintTable[0].init("longDescription", "Note: This also influences how quickly different physical LoDs can be switched", true); HintTable[1].init("shortDescription", "Time in seconds how long it takes to go from zero maxDistance to full maxDistance", true); ParamDefTable[16].setHints((const NvParameterized::Hint**)HintPtrTable, 2); #endif /* NV_PARAMETERIZED_HIDE_DESCRIPTIONS */ } // Initialize DefinitionImpl node: nodeIndex=17, longName="clothingMaterialIndex" { NvParameterized::DefinitionImpl* ParamDef = &ParamDefTable[17]; ParamDef->init("clothingMaterialIndex", TYPE_U32, NULL, true); #ifdef NV_PARAMETERIZED_HIDE_DESCRIPTIONS #else static HintImpl HintTable[1]; static Hint* HintPtrTable[1] = { &HintTable[0], }; HintTable[0].init("shortDescription", "Use this material from the assets material library", true); ParamDefTable[17].setHints((const NvParameterized::Hint**)HintPtrTable, 1); #endif /* NV_PARAMETERIZED_HIDE_DESCRIPTIONS */ } // Initialize DefinitionImpl node: nodeIndex=18, longName="windParams" { NvParameterized::DefinitionImpl* ParamDef = &ParamDefTable[18]; ParamDef->init("windParams", TYPE_STRUCT, "WindParameters", true); #ifdef NV_PARAMETERIZED_HIDE_DESCRIPTIONS #else static HintImpl HintTable[1]; static Hint* HintPtrTable[1] = { &HintTable[0], }; HintTable[0].init("shortDescription", "The per-actor wind parameters", true); ParamDefTable[18].setHints((const NvParameterized::Hint**)HintPtrTable, 1); #endif /* NV_PARAMETERIZED_HIDE_DESCRIPTIONS */ } // Initialize DefinitionImpl node: nodeIndex=19, longName="windParams.Velocity" { NvParameterized::DefinitionImpl* ParamDef = &ParamDefTable[19]; ParamDef->init("Velocity", TYPE_VEC3, NULL, true); #ifdef NV_PARAMETERIZED_HIDE_DESCRIPTIONS #else static HintImpl HintTable[1]; static Hint* HintPtrTable[1] = { &HintTable[0], }; HintTable[0].init("shortDescription", "The target velocity each vertex tries to achieve.", true); ParamDefTable[19].setHints((const NvParameterized::Hint**)HintPtrTable, 1); #endif /* NV_PARAMETERIZED_HIDE_DESCRIPTIONS */ } // Initialize DefinitionImpl node: nodeIndex=20, longName="windParams.Adaption" { NvParameterized::DefinitionImpl* ParamDef = &ParamDefTable[20]; ParamDef->init("Adaption", TYPE_F32, NULL, true); #ifdef NV_PARAMETERIZED_HIDE_DESCRIPTIONS #else static HintImpl HintTable[2]; static Hint* HintPtrTable[2] = { &HintTable[0], &HintTable[1], }; HintTable[0].init("longDescription", "This is roughly the inverse of the time in seconds it takes to adapt to the wind velocity.", true); HintTable[1].init("shortDescription", "The rate of adaption. The higher this value, the faster the cloth reaches the wind velocity. Set to 0 to turn off wind.", true); ParamDefTable[20].setHints((const NvParameterized::Hint**)HintPtrTable, 2); #endif /* NV_PARAMETERIZED_HIDE_DESCRIPTIONS */ } // Initialize DefinitionImpl node: nodeIndex=21, longName="maxDistanceScale" { NvParameterized::DefinitionImpl* ParamDef = &ParamDefTable[21]; ParamDef->init("maxDistanceScale", TYPE_STRUCT, "MaxDistanceScale", true); #ifdef NV_PARAMETERIZED_HIDE_DESCRIPTIONS #else static HintImpl HintTable[1]; static Hint* HintPtrTable[1] = { &HintTable[0], }; HintTable[0].init("shortDescription", "Maximum distance scale", true); ParamDefTable[21].setHints((const NvParameterized::Hint**)HintPtrTable, 1); #endif /* NV_PARAMETERIZED_HIDE_DESCRIPTIONS */ } // Initialize DefinitionImpl node: nodeIndex=22, longName="maxDistanceScale.Scale" { NvParameterized::DefinitionImpl* ParamDef = &ParamDefTable[22]; ParamDef->init("Scale", TYPE_F32, NULL, true); #ifdef NV_PARAMETERIZED_HIDE_DESCRIPTIONS #else static HintImpl HintTable[1]; static Hint* HintPtrTable[1] = { &HintTable[0], }; HintTable[0].init("shortDescription", "Scale", true); ParamDefTable[22].setHints((const NvParameterized::Hint**)HintPtrTable, 1); #endif /* NV_PARAMETERIZED_HIDE_DESCRIPTIONS */ } // Initialize DefinitionImpl node: nodeIndex=23, longName="maxDistanceScale.Multipliable" { NvParameterized::DefinitionImpl* ParamDef = &ParamDefTable[23]; ParamDef->init("Multipliable", TYPE_BOOL, NULL, true); #ifdef NV_PARAMETERIZED_HIDE_DESCRIPTIONS #else static HintImpl HintTable[1]; static Hint* HintPtrTable[1] = { &HintTable[0], }; HintTable[0].init("shortDescription", "Multipliable", true); ParamDefTable[23].setHints((const NvParameterized::Hint**)HintPtrTable, 1); #endif /* NV_PARAMETERIZED_HIDE_DESCRIPTIONS */ } // Initialize DefinitionImpl node: nodeIndex=24, longName="userData" { NvParameterized::DefinitionImpl* ParamDef = &ParamDefTable[24]; ParamDef->init("userData", TYPE_U64, NULL, true); #ifdef NV_PARAMETERIZED_HIDE_DESCRIPTIONS static HintImpl HintTable[1]; static Hint* HintPtrTable[1] = { &HintTable[0], }; HintTable[0].init("editorDisplay", "false", true); ParamDefTable[24].setHints((const NvParameterized::Hint**)HintPtrTable, 1); #else static HintImpl HintTable[2]; static Hint* HintPtrTable[2] = { &HintTable[0], &HintTable[1], }; HintTable[0].init("editorDisplay", "false", true); HintTable[1].init("shortDescription", "Optional user data pointer associated with the clothing actor", true); ParamDefTable[24].setHints((const NvParameterized::Hint**)HintPtrTable, 2); #endif /* NV_PARAMETERIZED_HIDE_DESCRIPTIONS */ } // Initialize DefinitionImpl node: nodeIndex=25, longName="boneMatrices" { NvParameterized::DefinitionImpl* ParamDef = &ParamDefTable[25]; ParamDef->init("boneMatrices", TYPE_ARRAY, NULL, true); #ifdef NV_PARAMETERIZED_HIDE_DESCRIPTIONS static HintImpl HintTable[1]; static Hint* HintPtrTable[1] = { &HintTable[0], }; HintTable[0].init("editorDisplay", "false", true); ParamDefTable[25].setHints((const NvParameterized::Hint**)HintPtrTable, 1); #else static HintImpl HintTable[3]; static Hint* HintPtrTable[3] = { &HintTable[0], &HintTable[1], &HintTable[2], }; HintTable[0].init("editorDisplay", "false", true); HintTable[1].init("longDescription", "These matrices are sometimes referred to as composite matrices. They are the\nmultiplication of the current world space bone pose with the inverse bind\npose in world space.\nNote: If \'updateStateWithGlobalMatrices\' is set to true, these must be\nglobal poses instead.\n", true); HintTable[2].init("shortDescription", "An Array of matrices with the full transform for each bone", true); ParamDefTable[25].setHints((const NvParameterized::Hint**)HintPtrTable, 3); #endif /* NV_PARAMETERIZED_HIDE_DESCRIPTIONS */ ParamDef->setArraySize(-1); } // Initialize DefinitionImpl node: nodeIndex=26, longName="boneMatrices[]" { NvParameterized::DefinitionImpl* ParamDef = &ParamDefTable[26]; ParamDef->init("boneMatrices", TYPE_MAT44, NULL, true); #ifdef NV_PARAMETERIZED_HIDE_DESCRIPTIONS static HintImpl HintTable[1]; static Hint* HintPtrTable[1] = { &HintTable[0], }; HintTable[0].init("editorDisplay", "false", true); ParamDefTable[26].setHints((const NvParameterized::Hint**)HintPtrTable, 1); #else static HintImpl HintTable[3]; static Hint* HintPtrTable[3] = { &HintTable[0], &HintTable[1], &HintTable[2], }; HintTable[0].init("editorDisplay", "false", true); HintTable[1].init("longDescription", "These matrices are sometimes referred to as composite matrices. They are the\nmultiplication of the current world space bone pose with the inverse bind\npose in world space.\nNote: If \'updateStateWithGlobalMatrices\' is set to true, these must be\nglobal poses instead.\n", true); HintTable[2].init("shortDescription", "An Array of matrices with the full transform for each bone", true); ParamDefTable[26].setHints((const NvParameterized::Hint**)HintPtrTable, 3); #endif /* NV_PARAMETERIZED_HIDE_DESCRIPTIONS */ } // Initialize DefinitionImpl node: nodeIndex=27, longName="clothDescTemplate" { NvParameterized::DefinitionImpl* ParamDef = &ParamDefTable[27]; ParamDef->init("clothDescTemplate", TYPE_STRUCT, "ClothDescTemplate", true); #ifdef NV_PARAMETERIZED_HIDE_DESCRIPTIONS #else static HintImpl HintTable[1]; static Hint* HintPtrTable[1] = { &HintTable[0], }; HintTable[0].init("shortDescription", "Contains the parameters the application can override on the NxClothDesc when created", true); ParamDefTable[27].setHints((const NvParameterized::Hint**)HintPtrTable, 1); #endif /* NV_PARAMETERIZED_HIDE_DESCRIPTIONS */ } // Initialize DefinitionImpl node: nodeIndex=28, longName="clothDescTemplate.collisionResponseCoefficient" { NvParameterized::DefinitionImpl* ParamDef = &ParamDefTable[28]; ParamDef->init("collisionResponseCoefficient", TYPE_F32, NULL, true); #ifdef NV_PARAMETERIZED_HIDE_DESCRIPTIONS #else static HintImpl HintTable[2]; static Hint* HintPtrTable[2] = { &HintTable[0], &HintTable[1], }; HintTable[0].init("longDescription", "This is only needed if the twoway interaction flag is set in the clothing asset.", true); HintTable[1].init("shortDescription", "Defines a factor for the impulse transfer from cloth to colliding rigid bodies.", true); ParamDefTable[28].setHints((const NvParameterized::Hint**)HintPtrTable, 2); #endif /* NV_PARAMETERIZED_HIDE_DESCRIPTIONS */ } // Initialize DefinitionImpl node: nodeIndex=29, longName="clothDescTemplate.collisionGroup" { NvParameterized::DefinitionImpl* ParamDef = &ParamDefTable[29]; ParamDef->init("collisionGroup", TYPE_U16, NULL, true); #ifdef NV_PARAMETERIZED_HIDE_DESCRIPTIONS #else static HintImpl HintTable[1]; static Hint* HintPtrTable[1] = { &HintTable[0], }; HintTable[0].init("shortDescription", "Sets which collision group this cloth is part of.", true); ParamDefTable[29].setHints((const NvParameterized::Hint**)HintPtrTable, 1); #endif /* NV_PARAMETERIZED_HIDE_DESCRIPTIONS */ } // Initialize DefinitionImpl node: nodeIndex=30, longName="clothDescTemplate.groupsMask" { NvParameterized::DefinitionImpl* ParamDef = &ParamDefTable[30]; ParamDef->init("groupsMask", TYPE_STRUCT, "GroupsMask", true); #ifdef NV_PARAMETERIZED_HIDE_DESCRIPTIONS #else static HintImpl HintTable[1]; static Hint* HintPtrTable[1] = { &HintTable[0], }; HintTable[0].init("shortDescription", "Sets the 128-bit mask used for collision filtering.", true); ParamDefTable[30].setHints((const NvParameterized::Hint**)HintPtrTable, 1); #endif /* NV_PARAMETERIZED_HIDE_DESCRIPTIONS */ } // Initialize DefinitionImpl node: nodeIndex=31, longName="clothDescTemplate.groupsMask.bits0" { NvParameterized::DefinitionImpl* ParamDef = &ParamDefTable[31]; ParamDef->init("bits0", TYPE_U32, NULL, true); #ifdef NV_PARAMETERIZED_HIDE_DESCRIPTIONS #else static HintImpl HintTable[1]; static Hint* HintPtrTable[1] = { &HintTable[0], }; HintTable[0].init("shortDescription", "First part of 128-bit group mask", true); ParamDefTable[31].setHints((const NvParameterized::Hint**)HintPtrTable, 1); #endif /* NV_PARAMETERIZED_HIDE_DESCRIPTIONS */ } // Initialize DefinitionImpl node: nodeIndex=32, longName="clothDescTemplate.groupsMask.bits1" { NvParameterized::DefinitionImpl* ParamDef = &ParamDefTable[32]; ParamDef->init("bits1", TYPE_U32, NULL, true); #ifdef NV_PARAMETERIZED_HIDE_DESCRIPTIONS #else static HintImpl HintTable[1]; static Hint* HintPtrTable[1] = { &HintTable[0], }; HintTable[0].init("shortDescription", "Second part of 128-bit group mask", true); ParamDefTable[32].setHints((const NvParameterized::Hint**)HintPtrTable, 1); #endif /* NV_PARAMETERIZED_HIDE_DESCRIPTIONS */ } // Initialize DefinitionImpl node: nodeIndex=33, longName="clothDescTemplate.groupsMask.bits2" { NvParameterized::DefinitionImpl* ParamDef = &ParamDefTable[33]; ParamDef->init("bits2", TYPE_U32, NULL, true); #ifdef NV_PARAMETERIZED_HIDE_DESCRIPTIONS #else static HintImpl HintTable[1]; static Hint* HintPtrTable[1] = { &HintTable[0], }; HintTable[0].init("shortDescription", "Third part of 128-bit group mask", true); ParamDefTable[33].setHints((const NvParameterized::Hint**)HintPtrTable, 1); #endif /* NV_PARAMETERIZED_HIDE_DESCRIPTIONS */ } // Initialize DefinitionImpl node: nodeIndex=34, longName="clothDescTemplate.groupsMask.bits3" { NvParameterized::DefinitionImpl* ParamDef = &ParamDefTable[34]; ParamDef->init("bits3", TYPE_U32, NULL, true); #ifdef NV_PARAMETERIZED_HIDE_DESCRIPTIONS #else static HintImpl HintTable[1]; static Hint* HintPtrTable[1] = { &HintTable[0], }; HintTable[0].init("shortDescription", "Fourth part of 128-bit group mask", true); ParamDefTable[34].setHints((const NvParameterized::Hint**)HintPtrTable, 1); #endif /* NV_PARAMETERIZED_HIDE_DESCRIPTIONS */ } // Initialize DefinitionImpl node: nodeIndex=35, longName="clothDescTemplate.validBounds" { NvParameterized::DefinitionImpl* ParamDef = &ParamDefTable[35]; ParamDef->init("validBounds", TYPE_BOUNDS3, NULL, true); #ifdef NV_PARAMETERIZED_HIDE_DESCRIPTIONS #else static HintImpl HintTable[2]; static Hint* HintPtrTable[2] = { &HintTable[0], &HintTable[1], }; HintTable[0].init("longDescription", "Only works if the flag NX_CLF_VALIDBOUNDS is set.", true); HintTable[1].init("shortDescription", "Defines the volume outside of which cloth particle are automatically removed from the simulation. ", true); ParamDefTable[35].setHints((const NvParameterized::Hint**)HintPtrTable, 2); #endif /* NV_PARAMETERIZED_HIDE_DESCRIPTIONS */ } // Initialize DefinitionImpl node: nodeIndex=36, longName="clothDescTemplate.compartment" { NvParameterized::DefinitionImpl* ParamDef = &ParamDefTable[36]; ParamDef->init("compartment", TYPE_U64, NULL, true); #ifdef NV_PARAMETERIZED_HIDE_DESCRIPTIONS static HintImpl HintTable[1]; static Hint* HintPtrTable[1] = { &HintTable[0], }; HintTable[0].init("editorDisplay", "false", true); ParamDefTable[36].setHints((const NvParameterized::Hint**)HintPtrTable, 1); #else static HintImpl HintTable[3]; static Hint* HintPtrTable[3] = { &HintTable[0], &HintTable[1], &HintTable[2], }; HintTable[0].init("editorDisplay", "false", true); HintTable[1].init("longDescription", "Must be either a pointer to an NxCompartment of type NX_SCT_CLOTH or\nNX_SCT_SOFTBODY, or NULL. A NULL compartment means creating NX_CLF_HARDWARE\ncloth in the first available cloth compartment (a default cloth compartment\nis created if none exists). Software cloth with a NULL compartment is\ncreated in the scene proper.\n", true); HintTable[2].init("shortDescription", "The compartment to place the cloth in.", true); ParamDefTable[36].setHints((const NvParameterized::Hint**)HintPtrTable, 3); #endif /* NV_PARAMETERIZED_HIDE_DESCRIPTIONS */ } // Initialize DefinitionImpl node: nodeIndex=37, longName="clothDescTemplate.userData" { NvParameterized::DefinitionImpl* ParamDef = &ParamDefTable[37]; ParamDef->init("userData", TYPE_U64, NULL, true); #ifdef NV_PARAMETERIZED_HIDE_DESCRIPTIONS static HintImpl HintTable[1]; static Hint* HintPtrTable[1] = { &HintTable[0], }; HintTable[0].init("editorDisplay", "false", true); ParamDefTable[37].setHints((const NvParameterized::Hint**)HintPtrTable, 1); #else static HintImpl HintTable[2]; static Hint* HintPtrTable[2] = { &HintTable[0], &HintTable[1], }; HintTable[0].init("editorDisplay", "false", true); HintTable[1].init("shortDescription", "Optional user data pointer.", true); ParamDefTable[37].setHints((const NvParameterized::Hint**)HintPtrTable, 2); #endif /* NV_PARAMETERIZED_HIDE_DESCRIPTIONS */ } // Initialize DefinitionImpl node: nodeIndex=38, longName="shapeDescTemplate" { NvParameterized::DefinitionImpl* ParamDef = &ParamDefTable[38]; ParamDef->init("shapeDescTemplate", TYPE_STRUCT, "ShapeDescTemplate", true); #ifdef NV_PARAMETERIZED_HIDE_DESCRIPTIONS #else static HintImpl HintTable[1]; static Hint* HintPtrTable[1] = { &HintTable[0], }; HintTable[0].init("shortDescription", "Contains the parameters the application can override on any actor shapes created", true); ParamDefTable[38].setHints((const NvParameterized::Hint**)HintPtrTable, 1); #endif /* NV_PARAMETERIZED_HIDE_DESCRIPTIONS */ } // Initialize DefinitionImpl node: nodeIndex=39, longName="shapeDescTemplate.flags" { NvParameterized::DefinitionImpl* ParamDef = &ParamDefTable[39]; ParamDef->init("flags", TYPE_STRUCT, "ShapeDescFlags", true); #ifdef NV_PARAMETERIZED_HIDE_DESCRIPTIONS #else static HintImpl HintTable[1]; static Hint* HintPtrTable[1] = { &HintTable[0], }; HintTable[0].init("shortDescription", "Shape description flags", true); ParamDefTable[39].setHints((const NvParameterized::Hint**)HintPtrTable, 1); #endif /* NV_PARAMETERIZED_HIDE_DESCRIPTIONS */ } // Initialize DefinitionImpl node: nodeIndex=40, longName="shapeDescTemplate.flags.NX_SF_VISUALIZATION" { NvParameterized::DefinitionImpl* ParamDef = &ParamDefTable[40]; ParamDef->init("NX_SF_VISUALIZATION", TYPE_BOOL, NULL, true); #ifdef NV_PARAMETERIZED_HIDE_DESCRIPTIONS #else static HintImpl HintTable[1]; static Hint* HintPtrTable[1] = { &HintTable[0], }; HintTable[0].init("shortDescription", "Enable debug renderer for this shape", true); ParamDefTable[40].setHints((const NvParameterized::Hint**)HintPtrTable, 1); #endif /* NV_PARAMETERIZED_HIDE_DESCRIPTIONS */ } // Initialize DefinitionImpl node: nodeIndex=41, longName="shapeDescTemplate.flags.NX_SF_DISABLE_COLLISION" { NvParameterized::DefinitionImpl* ParamDef = &ParamDefTable[41]; ParamDef->init("NX_SF_DISABLE_COLLISION", TYPE_BOOL, NULL, true); #ifdef NV_PARAMETERIZED_HIDE_DESCRIPTIONS #else static HintImpl HintTable[1]; static Hint* HintPtrTable[1] = { &HintTable[0], }; HintTable[0].init("shortDescription", "Disable collision detection for this shape (counterpart of NX_AF_DISABLE_COLLISION)", true); ParamDefTable[41].setHints((const NvParameterized::Hint**)HintPtrTable, 1); #endif /* NV_PARAMETERIZED_HIDE_DESCRIPTIONS */ } // Initialize DefinitionImpl node: nodeIndex=42, longName="shapeDescTemplate.flags.NX_SF_DISABLE_RAYCASTING" { NvParameterized::DefinitionImpl* ParamDef = &ParamDefTable[42]; ParamDef->init("NX_SF_DISABLE_RAYCASTING", TYPE_BOOL, NULL, true); #ifdef NV_PARAMETERIZED_HIDE_DESCRIPTIONS #else static HintImpl HintTable[1]; static Hint* HintPtrTable[1] = { &HintTable[0], }; HintTable[0].init("shortDescription", "Disable raycasting for this shape", true); ParamDefTable[42].setHints((const NvParameterized::Hint**)HintPtrTable, 1); #endif /* NV_PARAMETERIZED_HIDE_DESCRIPTIONS */ } // Initialize DefinitionImpl node: nodeIndex=43, longName="shapeDescTemplate.flags.NX_SF_DYNAMIC_DYNAMIC_CCD" { NvParameterized::DefinitionImpl* ParamDef = &ParamDefTable[43]; ParamDef->init("NX_SF_DYNAMIC_DYNAMIC_CCD", TYPE_BOOL, NULL, true); #ifdef NV_PARAMETERIZED_HIDE_DESCRIPTIONS #else static HintImpl HintTable[1]; static Hint* HintPtrTable[1] = { &HintTable[0], }; HintTable[0].init("shortDescription", "Enable dynamic-dynamic CCD for this shape. Used only when CCD is globally enabled and shape have a CCD skeleton.", true); ParamDefTable[43].setHints((const NvParameterized::Hint**)HintPtrTable, 1); #endif /* NV_PARAMETERIZED_HIDE_DESCRIPTIONS */ } // Initialize DefinitionImpl node: nodeIndex=44, longName="shapeDescTemplate.flags.NX_SF_DISABLE_SCENE_QUERIES" { NvParameterized::DefinitionImpl* ParamDef = &ParamDefTable[44]; ParamDef->init("NX_SF_DISABLE_SCENE_QUERIES", TYPE_BOOL, NULL, true); #ifdef NV_PARAMETERIZED_HIDE_DESCRIPTIONS #else static HintImpl HintTable[2]; static Hint* HintPtrTable[2] = { &HintTable[0], &HintTable[1], }; HintTable[0].init("longDescription", "Setting this to true will make the non-compartment CPU cloth not work.", true); HintTable[1].init("shortDescription", "Disable participation in ray casts, overlap tests and sweeps.", true); ParamDefTable[44].setHints((const NvParameterized::Hint**)HintPtrTable, 2); #endif /* NV_PARAMETERIZED_HIDE_DESCRIPTIONS */ } // Initialize DefinitionImpl node: nodeIndex=45, longName="shapeDescTemplate.collisionGroup" { NvParameterized::DefinitionImpl* ParamDef = &ParamDefTable[45]; ParamDef->init("collisionGroup", TYPE_U16, NULL, true); #ifdef NV_PARAMETERIZED_HIDE_DESCRIPTIONS #else static HintImpl HintTable[2]; static Hint* HintPtrTable[2] = { &HintTable[0], &HintTable[1], }; HintTable[0].init("longDescription", "Default group is 0. Maximum possible group is 31. Collision groups are sets\nof shapes which may or may not be set to collision detect with each other;\nthis can be set using NxScene::setGroupCollisionFlag()\nSleeping: Does NOT wake the associated actor up automatically.\n", true); HintTable[1].init("shortDescription", "Sets which collision group this shape is part of.", true); ParamDefTable[45].setHints((const NvParameterized::Hint**)HintPtrTable, 2); #endif /* NV_PARAMETERIZED_HIDE_DESCRIPTIONS */ } // Initialize DefinitionImpl node: nodeIndex=46, longName="shapeDescTemplate.groupsMask" { NvParameterized::DefinitionImpl* ParamDef = &ParamDefTable[46]; ParamDef->init("groupsMask", TYPE_STRUCT, "GroupsMask", true); #ifdef NV_PARAMETERIZED_HIDE_DESCRIPTIONS #else static HintImpl HintTable[1]; static Hint* HintPtrTable[1] = { &HintTable[0], }; HintTable[0].init("shortDescription", "Sets the 128-bit mask used for collision filtering.", true); ParamDefTable[46].setHints((const NvParameterized::Hint**)HintPtrTable, 1); #endif /* NV_PARAMETERIZED_HIDE_DESCRIPTIONS */ } // Initialize DefinitionImpl node: nodeIndex=47, longName="shapeDescTemplate.groupsMask.bits0" { NvParameterized::DefinitionImpl* ParamDef = &ParamDefTable[47]; ParamDef->init("bits0", TYPE_U32, NULL, true); #ifdef NV_PARAMETERIZED_HIDE_DESCRIPTIONS #else static HintImpl HintTable[1]; static Hint* HintPtrTable[1] = { &HintTable[0], }; HintTable[0].init("shortDescription", "First part of 128-bit group mask", true); ParamDefTable[47].setHints((const NvParameterized::Hint**)HintPtrTable, 1); #endif /* NV_PARAMETERIZED_HIDE_DESCRIPTIONS */ } // Initialize DefinitionImpl node: nodeIndex=48, longName="shapeDescTemplate.groupsMask.bits1" { NvParameterized::DefinitionImpl* ParamDef = &ParamDefTable[48]; ParamDef->init("bits1", TYPE_U32, NULL, true); #ifdef NV_PARAMETERIZED_HIDE_DESCRIPTIONS #else static HintImpl HintTable[1]; static Hint* HintPtrTable[1] = { &HintTable[0], }; HintTable[0].init("shortDescription", "Second part of 128-bit group mask", true); ParamDefTable[48].setHints((const NvParameterized::Hint**)HintPtrTable, 1); #endif /* NV_PARAMETERIZED_HIDE_DESCRIPTIONS */ } // Initialize DefinitionImpl node: nodeIndex=49, longName="shapeDescTemplate.groupsMask.bits2" { NvParameterized::DefinitionImpl* ParamDef = &ParamDefTable[49]; ParamDef->init("bits2", TYPE_U32, NULL, true); #ifdef NV_PARAMETERIZED_HIDE_DESCRIPTIONS #else static HintImpl HintTable[1]; static Hint* HintPtrTable[1] = { &HintTable[0], }; HintTable[0].init("shortDescription", "Third part of 128-bit group mask", true); ParamDefTable[49].setHints((const NvParameterized::Hint**)HintPtrTable, 1); #endif /* NV_PARAMETERIZED_HIDE_DESCRIPTIONS */ } // Initialize DefinitionImpl node: nodeIndex=50, longName="shapeDescTemplate.groupsMask.bits3" { NvParameterized::DefinitionImpl* ParamDef = &ParamDefTable[50]; ParamDef->init("bits3", TYPE_U32, NULL, true); #ifdef NV_PARAMETERIZED_HIDE_DESCRIPTIONS #else static HintImpl HintTable[1]; static Hint* HintPtrTable[1] = { &HintTable[0], }; HintTable[0].init("shortDescription", "Fourth part of 128-bit group mask", true); ParamDefTable[50].setHints((const NvParameterized::Hint**)HintPtrTable, 1); #endif /* NV_PARAMETERIZED_HIDE_DESCRIPTIONS */ } // Initialize DefinitionImpl node: nodeIndex=51, longName="shapeDescTemplate.materialIndex" { NvParameterized::DefinitionImpl* ParamDef = &ParamDefTable[51]; ParamDef->init("materialIndex", TYPE_U16, NULL, true); #ifdef NV_PARAMETERIZED_HIDE_DESCRIPTIONS #else static HintImpl HintTable[1]; static Hint* HintPtrTable[1] = { &HintTable[0], }; HintTable[0].init("shortDescription", "The material index of the shape.", true); ParamDefTable[51].setHints((const NvParameterized::Hint**)HintPtrTable, 1); #endif /* NV_PARAMETERIZED_HIDE_DESCRIPTIONS */ } // Initialize DefinitionImpl node: nodeIndex=52, longName="shapeDescTemplate.userData" { NvParameterized::DefinitionImpl* ParamDef = &ParamDefTable[52]; ParamDef->init("userData", TYPE_U64, NULL, true); #ifdef NV_PARAMETERIZED_HIDE_DESCRIPTIONS static HintImpl HintTable[1]; static Hint* HintPtrTable[1] = { &HintTable[0], }; HintTable[0].init("editorDisplay", "false", true); ParamDefTable[52].setHints((const NvParameterized::Hint**)HintPtrTable, 1); #else static HintImpl HintTable[2]; static Hint* HintPtrTable[2] = { &HintTable[0], &HintTable[1], }; HintTable[0].init("editorDisplay", "false", true); HintTable[1].init("shortDescription", "Optional user data pointer", true); ParamDefTable[52].setHints((const NvParameterized::Hint**)HintPtrTable, 2); #endif /* NV_PARAMETERIZED_HIDE_DESCRIPTIONS */ } // Initialize DefinitionImpl node: nodeIndex=53, longName="shapeDescTemplate.name" { NvParameterized::DefinitionImpl* ParamDef = &ParamDefTable[53]; ParamDef->init("name", TYPE_U64, NULL, true); #ifdef NV_PARAMETERIZED_HIDE_DESCRIPTIONS static HintImpl HintTable[1]; static Hint* HintPtrTable[1] = { &HintTable[0], }; HintTable[0].init("editorDisplay", "false", true); ParamDefTable[53].setHints((const NvParameterized::Hint**)HintPtrTable, 1); #else static HintImpl HintTable[2]; static Hint* HintPtrTable[2] = { &HintTable[0], &HintTable[1], }; HintTable[0].init("editorDisplay", "false", true); HintTable[1].init("shortDescription", "Name of the shapes; must be set by the application and must be a persistent pointer.", true); ParamDefTable[53].setHints((const NvParameterized::Hint**)HintPtrTable, 2); #endif /* NV_PARAMETERIZED_HIDE_DESCRIPTIONS */ } // Initialize DefinitionImpl node: nodeIndex=54, longName="actorDescTemplate" { NvParameterized::DefinitionImpl* ParamDef = &ParamDefTable[54]; ParamDef->init("actorDescTemplate", TYPE_STRUCT, "ActorDescTemplate", true); #ifdef NV_PARAMETERIZED_HIDE_DESCRIPTIONS #else static HintImpl HintTable[1]; static Hint* HintPtrTable[1] = { &HintTable[0], }; HintTable[0].init("shortDescription", "Contains the parameters the application can override on any actors created", true); ParamDefTable[54].setHints((const NvParameterized::Hint**)HintPtrTable, 1); #endif /* NV_PARAMETERIZED_HIDE_DESCRIPTIONS */ } // Initialize DefinitionImpl node: nodeIndex=55, longName="actorDescTemplate.userData" { NvParameterized::DefinitionImpl* ParamDef = &ParamDefTable[55]; ParamDef->init("userData", TYPE_U64, NULL, true); #ifdef NV_PARAMETERIZED_HIDE_DESCRIPTIONS static HintImpl HintTable[1]; static Hint* HintPtrTable[1] = { &HintTable[0], }; HintTable[0].init("editorDisplay", "false", true); ParamDefTable[55].setHints((const NvParameterized::Hint**)HintPtrTable, 1); #else static HintImpl HintTable[2]; static Hint* HintPtrTable[2] = { &HintTable[0], &HintTable[1], }; HintTable[0].init("editorDisplay", "false", true); HintTable[1].init("shortDescription", "Optional user data pointer", true); ParamDefTable[55].setHints((const NvParameterized::Hint**)HintPtrTable, 2); #endif /* NV_PARAMETERIZED_HIDE_DESCRIPTIONS */ } // Initialize DefinitionImpl node: nodeIndex=56, longName="actorDescTemplate.name" { NvParameterized::DefinitionImpl* ParamDef = &ParamDefTable[56]; ParamDef->init("name", TYPE_U64, NULL, true); #ifdef NV_PARAMETERIZED_HIDE_DESCRIPTIONS static HintImpl HintTable[1]; static Hint* HintPtrTable[1] = { &HintTable[0], }; HintTable[0].init("editorDisplay", "false", true); ParamDefTable[56].setHints((const NvParameterized::Hint**)HintPtrTable, 1); #else static HintImpl HintTable[2]; static Hint* HintPtrTable[2] = { &HintTable[0], &HintTable[1], }; HintTable[0].init("editorDisplay", "false", true); HintTable[1].init("shortDescription", "Optional name string for the shape; must be set by the application and must be a persistent pointer.", true); ParamDefTable[56].setHints((const NvParameterized::Hint**)HintPtrTable, 2); #endif /* NV_PARAMETERIZED_HIDE_DESCRIPTIONS */ } // Initialize DefinitionImpl node: nodeIndex=57, longName="actorScale" { NvParameterized::DefinitionImpl* ParamDef = &ParamDefTable[57]; ParamDef->init("actorScale", TYPE_F32, NULL, true); #ifdef NV_PARAMETERIZED_HIDE_DESCRIPTIONS #else static HintImpl HintTable[2]; static Hint* HintPtrTable[2] = { &HintTable[0], &HintTable[1], }; HintTable[0].init("longDescription", "Setting globalPose doesn't change the actor scale, actorScale should be set separately.\n", true); HintTable[1].init("shortDescription", "Scales the actor relative to the asset.", true); ParamDefTable[57].setHints((const NvParameterized::Hint**)HintPtrTable, 2); #endif /* NV_PARAMETERIZED_HIDE_DESCRIPTIONS */ } // Initialize DefinitionImpl node: nodeIndex=58, longName="runtimeCooked" { NvParameterized::DefinitionImpl* ParamDef = &ParamDefTable[58]; ParamDef->init("runtimeCooked", TYPE_REF, NULL, true); #ifdef NV_PARAMETERIZED_HIDE_DESCRIPTIONS static HintImpl HintTable[1]; static Hint* HintPtrTable[1] = { &HintTable[0], }; HintTable[0].init("INCLUDED", uint64_t(1), true); ParamDefTable[58].setHints((const NvParameterized::Hint**)HintPtrTable, 1); #else static HintImpl HintTable[2]; static Hint* HintPtrTable[2] = { &HintTable[0], &HintTable[1], }; HintTable[0].init("INCLUDED", uint64_t(1), true); HintTable[1].init("shortDescription", "Data cooked at runtime", true); ParamDefTable[58].setHints((const NvParameterized::Hint**)HintPtrTable, 2); #endif /* NV_PARAMETERIZED_HIDE_DESCRIPTIONS */ static const char* const RefVariantVals[] = { "ClothingCookedParam" }; ParamDefTable[58].setRefVariantVals((const char**)RefVariantVals, 1); } // Initialize DefinitionImpl node: nodeIndex=59, longName="morphDisplacements" { NvParameterized::DefinitionImpl* ParamDef = &ParamDefTable[59]; ParamDef->init("morphDisplacements", TYPE_ARRAY, NULL, true); #ifdef NV_PARAMETERIZED_HIDE_DESCRIPTIONS #else static HintImpl HintTable[1]; static Hint* HintPtrTable[1] = { &HintTable[0], }; HintTable[0].init("shortDescription", "Displacements according to the current morph target.", true); ParamDefTable[59].setHints((const NvParameterized::Hint**)HintPtrTable, 1); #endif /* NV_PARAMETERIZED_HIDE_DESCRIPTIONS */ ParamDef->setArraySize(-1); } // Initialize DefinitionImpl node: nodeIndex=60, longName="morphDisplacements[]" { NvParameterized::DefinitionImpl* ParamDef = &ParamDefTable[60]; ParamDef->init("morphDisplacements", TYPE_VEC3, NULL, true); #ifdef NV_PARAMETERIZED_HIDE_DESCRIPTIONS #else static HintImpl HintTable[1]; static Hint* HintPtrTable[1] = { &HintTable[0], }; HintTable[0].init("shortDescription", "Displacements according to the current morph target.", true); ParamDefTable[60].setHints((const NvParameterized::Hint**)HintPtrTable, 1); #endif /* NV_PARAMETERIZED_HIDE_DESCRIPTIONS */ } // Initialize DefinitionImpl node: nodeIndex=61, longName="morphPhysicalMeshNewPositions" { NvParameterized::DefinitionImpl* ParamDef = &ParamDefTable[61]; ParamDef->init("morphPhysicalMeshNewPositions", TYPE_ARRAY, NULL, true); #ifdef NV_PARAMETERIZED_HIDE_DESCRIPTIONS #else static HintImpl HintTable[1]; static Hint* HintPtrTable[1] = { &HintTable[0], }; HintTable[0].init("shortDescription", "New positions for the physical meshes and convex collision volumes.", true); ParamDefTable[61].setHints((const NvParameterized::Hint**)HintPtrTable, 1); #endif /* NV_PARAMETERIZED_HIDE_DESCRIPTIONS */ ParamDef->setArraySize(-1); } // Initialize DefinitionImpl node: nodeIndex=62, longName="morphPhysicalMeshNewPositions[]" { NvParameterized::DefinitionImpl* ParamDef = &ParamDefTable[62]; ParamDef->init("morphPhysicalMeshNewPositions", TYPE_VEC3, NULL, true); #ifdef NV_PARAMETERIZED_HIDE_DESCRIPTIONS #else static HintImpl HintTable[1]; static Hint* HintPtrTable[1] = { &HintTable[0], }; HintTable[0].init("shortDescription", "New positions for the physical meshes and convex collision volumes.", true); ParamDefTable[62].setHints((const NvParameterized::Hint**)HintPtrTable, 1); #endif /* NV_PARAMETERIZED_HIDE_DESCRIPTIONS */ } // Initialize DefinitionImpl node: nodeIndex=63, longName="morphGraphicalMeshNewPositions" { NvParameterized::DefinitionImpl* ParamDef = &ParamDefTable[63]; ParamDef->init("morphGraphicalMeshNewPositions", TYPE_ARRAY, NULL, true); #ifdef NV_PARAMETERIZED_HIDE_DESCRIPTIONS #else static HintImpl HintTable[1]; static Hint* HintPtrTable[1] = { &HintTable[0], }; HintTable[0].init("shortDescription", "New positions of all submeshes of all graphical meshes.", true); ParamDefTable[63].setHints((const NvParameterized::Hint**)HintPtrTable, 1); #endif /* NV_PARAMETERIZED_HIDE_DESCRIPTIONS */ ParamDef->setArraySize(-1); } // Initialize DefinitionImpl node: nodeIndex=64, longName="morphGraphicalMeshNewPositions[]" { NvParameterized::DefinitionImpl* ParamDef = &ParamDefTable[64]; ParamDef->init("morphGraphicalMeshNewPositions", TYPE_VEC3, NULL, true); #ifdef NV_PARAMETERIZED_HIDE_DESCRIPTIONS #else static HintImpl HintTable[1]; static Hint* HintPtrTable[1] = { &HintTable[0], }; HintTable[0].init("shortDescription", "New positions of all submeshes of all graphical meshes.", true); ParamDefTable[64].setHints((const NvParameterized::Hint**)HintPtrTable, 1); #endif /* NV_PARAMETERIZED_HIDE_DESCRIPTIONS */ } // Initialize DefinitionImpl node: nodeIndex=65, longName="allowAdaptiveTargetFrequency" { NvParameterized::DefinitionImpl* ParamDef = &ParamDefTable[65]; ParamDef->init("allowAdaptiveTargetFrequency", TYPE_BOOL, NULL, true); #ifdef NV_PARAMETERIZED_HIDE_DESCRIPTIONS #else static HintImpl HintTable[1]; static Hint* HintPtrTable[1] = { &HintTable[0], }; HintTable[0].init("shortDescription", "Slightly modifies gravity to avoid high frequency jittering due to variable time steps.", true); ParamDefTable[65].setHints((const NvParameterized::Hint**)HintPtrTable, 1); #endif /* NV_PARAMETERIZED_HIDE_DESCRIPTIONS */ } // Initialize DefinitionImpl node: nodeIndex=66, longName="useVelocityClamping" { NvParameterized::DefinitionImpl* ParamDef = &ParamDefTable[66]; ParamDef->init("useVelocityClamping", TYPE_BOOL, NULL, true); #ifdef NV_PARAMETERIZED_HIDE_DESCRIPTIONS #else static HintImpl HintTable[1]; static Hint* HintPtrTable[1] = { &HintTable[0], }; HintTable[0].init("shortDescription", "Enable/disable velocity clamping", true); ParamDefTable[66].setHints((const NvParameterized::Hint**)HintPtrTable, 1); #endif /* NV_PARAMETERIZED_HIDE_DESCRIPTIONS */ } // Initialize DefinitionImpl node: nodeIndex=67, longName="vertexVelocityClamp" { NvParameterized::DefinitionImpl* ParamDef = &ParamDefTable[67]; ParamDef->init("vertexVelocityClamp", TYPE_BOUNDS3, NULL, true); #ifdef NV_PARAMETERIZED_HIDE_DESCRIPTIONS #else static HintImpl HintTable[1]; static Hint* HintPtrTable[1] = { &HintTable[0], }; HintTable[0].init("shortDescription", "Vertex velocity clamping values", true); ParamDefTable[67].setHints((const NvParameterized::Hint**)HintPtrTable, 1); #endif /* NV_PARAMETERIZED_HIDE_DESCRIPTIONS */ } // Initialize DefinitionImpl node: nodeIndex=68, longName="pressure" { NvParameterized::DefinitionImpl* ParamDef = &ParamDefTable[68]; ParamDef->init("pressure", TYPE_F32, NULL, true); #ifdef NV_PARAMETERIZED_HIDE_DESCRIPTIONS #else static HintImpl HintTable[1]; static Hint* HintPtrTable[1] = { &HintTable[0], }; HintTable[0].init("shortDescription", "Set pressure of cloth, only works on closed meshes.", true); ParamDefTable[68].setHints((const NvParameterized::Hint**)HintPtrTable, 1); #endif /* NV_PARAMETERIZED_HIDE_DESCRIPTIONS */ } // Initialize DefinitionImpl node: nodeIndex=69, longName="multiplyGlobalPoseIntoBones" { NvParameterized::DefinitionImpl* ParamDef = &ParamDefTable[69]; ParamDef->init("multiplyGlobalPoseIntoBones", TYPE_BOOL, NULL, true); #ifdef NV_PARAMETERIZED_HIDE_DESCRIPTIONS #else static HintImpl HintTable[1]; static Hint* HintPtrTable[1] = { &HintTable[0], }; HintTable[0].init("shortDescription", "Enable/disable multiplying global pose into bones", true); ParamDefTable[69].setHints((const NvParameterized::Hint**)HintPtrTable, 1); #endif /* NV_PARAMETERIZED_HIDE_DESCRIPTIONS */ } // Initialize DefinitionImpl node: nodeIndex=70, longName="overrideMaterialNames" { NvParameterized::DefinitionImpl* ParamDef = &ParamDefTable[70]; ParamDef->init("overrideMaterialNames", TYPE_ARRAY, NULL, true); #ifdef NV_PARAMETERIZED_HIDE_DESCRIPTIONS #else static HintImpl HintTable[1]; static Hint* HintPtrTable[1] = { &HintTable[0], }; HintTable[0].init("shortDescription", "Replacement material names for the ones provided by the render mesh asset inside the clothing asset.", true); ParamDefTable[70].setHints((const NvParameterized::Hint**)HintPtrTable, 1); #endif /* NV_PARAMETERIZED_HIDE_DESCRIPTIONS */ ParamDef->setArraySize(-1); static const uint8_t dynHandleIndices[1] = { 0, }; ParamDef->setDynamicHandleIndicesMap(dynHandleIndices, 1); } // Initialize DefinitionImpl node: nodeIndex=71, longName="overrideMaterialNames[]" { NvParameterized::DefinitionImpl* ParamDef = &ParamDefTable[71]; ParamDef->init("overrideMaterialNames", TYPE_STRING, NULL, true); #ifdef NV_PARAMETERIZED_HIDE_DESCRIPTIONS #else static HintImpl HintTable[1]; static Hint* HintPtrTable[1] = { &HintTable[0], }; HintTable[0].init("shortDescription", "Replacement material names for the ones provided by the render mesh asset inside the clothing asset.", true); ParamDefTable[71].setHints((const NvParameterized::Hint**)HintPtrTable, 1); #endif /* NV_PARAMETERIZED_HIDE_DESCRIPTIONS */ } // Initialize DefinitionImpl node: nodeIndex=72, longName="simulationBackend" { NvParameterized::DefinitionImpl* ParamDef = &ParamDefTable[72]; ParamDef->init("simulationBackend", TYPE_ENUM, NULL, true); #ifdef NV_PARAMETERIZED_HIDE_DESCRIPTIONS #else static HintImpl HintTable[1]; static Hint* HintPtrTable[1] = { &HintTable[0], }; HintTable[0].init("shortDescription", "Select which backend should be used. 'ForceNative' will only work when running with the 2.8.x PhysX SDK", true); ParamDefTable[72].setHints((const NvParameterized::Hint**)HintPtrTable, 1); #endif /* NV_PARAMETERIZED_HIDE_DESCRIPTIONS */ static const char* const EnumVals[] = { "Default", "ForceNative", "ForceEmbedded" }; ParamDefTable[72].setEnumVals((const char**)EnumVals, 3); } // Initialize DefinitionImpl node: nodeIndex=73, longName="freezeByLOD" { NvParameterized::DefinitionImpl* ParamDef = &ParamDefTable[73]; ParamDef->init("freezeByLOD", TYPE_BOOL, NULL, true); #ifdef NV_PARAMETERIZED_HIDE_DESCRIPTIONS #else static HintImpl HintTable[1]; static Hint* HintPtrTable[1] = { &HintTable[0], }; HintTable[0].init("shortDescription", "Cloth state frozen when LoD turns off simulation of the actor, instead of returning to the animated state.", true); ParamDefTable[73].setHints((const NvParameterized::Hint**)HintPtrTable, 1); #endif /* NV_PARAMETERIZED_HIDE_DESCRIPTIONS */ } // Initialize DefinitionImpl node: nodeIndex=74, longName="localSpaceSim" { NvParameterized::DefinitionImpl* ParamDef = &ParamDefTable[74]; ParamDef->init("localSpaceSim", TYPE_BOOL, NULL, true); #ifdef NV_PARAMETERIZED_HIDE_DESCRIPTIONS #else static HintImpl HintTable[2]; static Hint* HintPtrTable[2] = { &HintTable[0], &HintTable[1], }; HintTable[0].init("longDescription", "If this flag is enabled the simulation is done at origin, however the cloth is rendered at its global position.\nThe simulation of the actor is transformed such that the root bone ends up at origin. The scale of the actor is maintained during the simulation.\nIf a 3.x physX simulation backend is used, it is possible to add the inertia effects to the simulation, through\nthe inertiaScale parameter of the clothing material. So with an inertiaScale of 1.0 there should be no visible\ndifference between local space and global space simulation.\nKnown issues:\n- PhysX 2.8.4 does not support inertiaScale (it corresponds to inertiaScale=0.0f). So if localSpaceSim is enabled there's no inertia effect when the global pose of the clothing actor changes.\n- With 2.8.4 this only works for clothing on 1 character, without world collision. This is because collision volumes would interfere with the cloth that is simulated at origin.\nThis is not a problem in 3.x because there collision only happens with the collision volumes specifically defined for the clothing actor.\n", true); HintTable[1].init("shortDescription", "Do simulation in local space.", true); ParamDefTable[74].setHints((const NvParameterized::Hint**)HintPtrTable, 2); #endif /* NV_PARAMETERIZED_HIDE_DESCRIPTIONS */ } // Initialize DefinitionImpl node: nodeIndex=75, longName="teleportMode" { NvParameterized::DefinitionImpl* ParamDef = &ParamDefTable[75]; ParamDef->init("teleportMode", TYPE_I32, NULL, true); #ifdef NV_PARAMETERIZED_HIDE_DESCRIPTIONS #else static HintImpl HintTable[2]; static Hint* HintPtrTable[2] = { &HintTable[0], &HintTable[1], }; HintTable[0].init("longDescription", "0 = ClothingTeleportMode::Continuous\n1 = ClothingTeleportMode::Teleport\n2 = ClothingTeleportMode::TeleportAndReset\n", true); HintTable[1].init("shortDescription", "Buffered teleport state for the next simulate call, gets set in updateState, is reset to Continuous during simulate().", true); ParamDefTable[75].setHints((const NvParameterized::Hint**)HintPtrTable, 2); #endif /* NV_PARAMETERIZED_HIDE_DESCRIPTIONS */ } // SetChildren for: nodeIndex=0, longName="" { static Definition* Children[32]; Children[0] = PDEF_PTR(1); Children[1] = PDEF_PTR(2); Children[2] = PDEF_PTR(3); Children[3] = PDEF_PTR(11); Children[4] = PDEF_PTR(12); Children[5] = PDEF_PTR(13); Children[6] = PDEF_PTR(14); Children[7] = PDEF_PTR(15); Children[8] = PDEF_PTR(16); Children[9] = PDEF_PTR(17); Children[10] = PDEF_PTR(18); Children[11] = PDEF_PTR(21); Children[12] = PDEF_PTR(24); Children[13] = PDEF_PTR(25); Children[14] = PDEF_PTR(27); Children[15] = PDEF_PTR(38); Children[16] = PDEF_PTR(54); Children[17] = PDEF_PTR(57); Children[18] = PDEF_PTR(58); Children[19] = PDEF_PTR(59); Children[20] = PDEF_PTR(61); Children[21] = PDEF_PTR(63); Children[22] = PDEF_PTR(65); Children[23] = PDEF_PTR(66); Children[24] = PDEF_PTR(67); Children[25] = PDEF_PTR(68); Children[26] = PDEF_PTR(69); Children[27] = PDEF_PTR(70); Children[28] = PDEF_PTR(72); Children[29] = PDEF_PTR(73); Children[30] = PDEF_PTR(74); Children[31] = PDEF_PTR(75); ParamDefTable[0].setChildren(Children, 32); } // SetChildren for: nodeIndex=3, longName="flags" { static Definition* Children[7]; Children[0] = PDEF_PTR(4); Children[1] = PDEF_PTR(5); Children[2] = PDEF_PTR(6); Children[3] = PDEF_PTR(7); Children[4] = PDEF_PTR(8); Children[5] = PDEF_PTR(9); Children[6] = PDEF_PTR(10); ParamDefTable[3].setChildren(Children, 7); } // SetChildren for: nodeIndex=18, longName="windParams" { static Definition* Children[2]; Children[0] = PDEF_PTR(19); Children[1] = PDEF_PTR(20); ParamDefTable[18].setChildren(Children, 2); } // SetChildren for: nodeIndex=21, longName="maxDistanceScale" { static Definition* Children[2]; Children[0] = PDEF_PTR(22); Children[1] = PDEF_PTR(23); ParamDefTable[21].setChildren(Children, 2); } // SetChildren for: nodeIndex=25, longName="boneMatrices" { static Definition* Children[1]; Children[0] = PDEF_PTR(26); ParamDefTable[25].setChildren(Children, 1); } // SetChildren for: nodeIndex=27, longName="clothDescTemplate" { static Definition* Children[6]; Children[0] = PDEF_PTR(28); Children[1] = PDEF_PTR(29); Children[2] = PDEF_PTR(30); Children[3] = PDEF_PTR(35); Children[4] = PDEF_PTR(36); Children[5] = PDEF_PTR(37); ParamDefTable[27].setChildren(Children, 6); } // SetChildren for: nodeIndex=30, longName="clothDescTemplate.groupsMask" { static Definition* Children[4]; Children[0] = PDEF_PTR(31); Children[1] = PDEF_PTR(32); Children[2] = PDEF_PTR(33); Children[3] = PDEF_PTR(34); ParamDefTable[30].setChildren(Children, 4); } // SetChildren for: nodeIndex=38, longName="shapeDescTemplate" { static Definition* Children[6]; Children[0] = PDEF_PTR(39); Children[1] = PDEF_PTR(45); Children[2] = PDEF_PTR(46); Children[3] = PDEF_PTR(51); Children[4] = PDEF_PTR(52); Children[5] = PDEF_PTR(53); ParamDefTable[38].setChildren(Children, 6); } // SetChildren for: nodeIndex=39, longName="shapeDescTemplate.flags" { static Definition* Children[5]; Children[0] = PDEF_PTR(40); Children[1] = PDEF_PTR(41); Children[2] = PDEF_PTR(42); Children[3] = PDEF_PTR(43); Children[4] = PDEF_PTR(44); ParamDefTable[39].setChildren(Children, 5); } // SetChildren for: nodeIndex=46, longName="shapeDescTemplate.groupsMask" { static Definition* Children[4]; Children[0] = PDEF_PTR(47); Children[1] = PDEF_PTR(48); Children[2] = PDEF_PTR(49); Children[3] = PDEF_PTR(50); ParamDefTable[46].setChildren(Children, 4); } // SetChildren for: nodeIndex=54, longName="actorDescTemplate" { static Definition* Children[2]; Children[0] = PDEF_PTR(55); Children[1] = PDEF_PTR(56); ParamDefTable[54].setChildren(Children, 2); } // SetChildren for: nodeIndex=59, longName="morphDisplacements" { static Definition* Children[1]; Children[0] = PDEF_PTR(60); ParamDefTable[59].setChildren(Children, 1); } // SetChildren for: nodeIndex=61, longName="morphPhysicalMeshNewPositions" { static Definition* Children[1]; Children[0] = PDEF_PTR(62); ParamDefTable[61].setChildren(Children, 1); } // SetChildren for: nodeIndex=63, longName="morphGraphicalMeshNewPositions" { static Definition* Children[1]; Children[0] = PDEF_PTR(64); ParamDefTable[63].setChildren(Children, 1); } // SetChildren for: nodeIndex=70, longName="overrideMaterialNames" { static Definition* Children[1]; Children[0] = PDEF_PTR(71); ParamDefTable[70].setChildren(Children, 1); } mBuiltFlag = true; } void ClothingActorParam::initStrings(void) { } void ClothingActorParam::initDynamicArrays(void) { boneMatrices.buf = NULL; boneMatrices.isAllocated = true; boneMatrices.elementSize = sizeof(physx::PxMat44); boneMatrices.arraySizes[0] = 0; morphDisplacements.buf = NULL; morphDisplacements.isAllocated = true; morphDisplacements.elementSize = sizeof(physx::PxVec3); morphDisplacements.arraySizes[0] = 0; morphPhysicalMeshNewPositions.buf = NULL; morphPhysicalMeshNewPositions.isAllocated = true; morphPhysicalMeshNewPositions.elementSize = sizeof(physx::PxVec3); morphPhysicalMeshNewPositions.arraySizes[0] = 0; morphGraphicalMeshNewPositions.buf = NULL; morphGraphicalMeshNewPositions.isAllocated = true; morphGraphicalMeshNewPositions.elementSize = sizeof(physx::PxVec3); morphGraphicalMeshNewPositions.arraySizes[0] = 0; overrideMaterialNames.buf = NULL; overrideMaterialNames.isAllocated = true; overrideMaterialNames.elementSize = sizeof(NvParameterized::DummyStringStruct); overrideMaterialNames.arraySizes[0] = 0; } void ClothingActorParam::initDefaults(void) { freeStrings(); freeReferences(); freeDynamicArrays(); globalPose = physx::PxMat44(physx::PxVec4(1.0f)); useHardwareCloth = bool(true); flags.ParallelCpuSkinning = bool(true); flags.RecomputeNormals = bool(false); flags.RecomputeTangents = bool(false); flags.Visualize = bool(true); flags.CorrectSimulationNormals = bool(true); flags.ComputeRenderData = bool(true); flags.ComputePhysicsMeshNormals = bool(true); fallbackSkinning = bool(false); slowStart = bool(true); useInternalBoneOrder = bool(false); updateStateWithGlobalMatrices = bool(false); uvChannelForTangentUpdate = uint32_t(0); maxDistanceBlendTime = float(1.0); clothingMaterialIndex = uint32_t(0); windParams.Velocity = physx::PxVec3(0.0f); windParams.Adaption = float(0.0f); maxDistanceScale.Scale = float(1.0f); maxDistanceScale.Multipliable = bool(false); userData = uint64_t(0); clothDescTemplate.collisionResponseCoefficient = float(0.2); clothDescTemplate.collisionGroup = uint16_t(0); clothDescTemplate.groupsMask.bits0 = uint32_t(0); clothDescTemplate.groupsMask.bits1 = uint32_t(0); clothDescTemplate.groupsMask.bits2 = uint32_t(0); clothDescTemplate.groupsMask.bits3 = uint32_t(0); clothDescTemplate.validBounds = physx::PxBounds3(physx::PxVec3(PX_MAX_F32), physx::PxVec3(-PX_MAX_F32)); clothDescTemplate.compartment = uint64_t(0); shapeDescTemplate.flags.NX_SF_VISUALIZATION = bool(true); shapeDescTemplate.flags.NX_SF_DISABLE_COLLISION = bool(false); shapeDescTemplate.flags.NX_SF_DISABLE_RAYCASTING = bool(true); shapeDescTemplate.flags.NX_SF_DYNAMIC_DYNAMIC_CCD = bool(false); shapeDescTemplate.flags.NX_SF_DISABLE_SCENE_QUERIES = bool(false); shapeDescTemplate.collisionGroup = uint16_t(0); shapeDescTemplate.groupsMask.bits0 = uint32_t(0); shapeDescTemplate.groupsMask.bits1 = uint32_t(0); shapeDescTemplate.groupsMask.bits2 = uint32_t(0); shapeDescTemplate.groupsMask.bits3 = uint32_t(0); shapeDescTemplate.materialIndex = uint16_t(0); shapeDescTemplate.userData = uint64_t(0); shapeDescTemplate.name = uint64_t(0); actorDescTemplate.userData = uint64_t(0); actorDescTemplate.name = uint64_t(0); actorScale = float(1.0); allowAdaptiveTargetFrequency = bool(true); useVelocityClamping = bool(false); vertexVelocityClamp = physx::PxBounds3(physx::PxVec3(-PX_MAX_F32), physx::PxVec3(PX_MAX_F32)); pressure = float(-1.0); multiplyGlobalPoseIntoBones = bool(true); simulationBackend = (const char*)"Default"; freezeByLOD = bool(false); localSpaceSim = bool(false); teleportMode = int32_t(0); initDynamicArrays(); initStrings(); initReferences(); } void ClothingActorParam::initReferences(void) { runtimeCooked = NULL; } void ClothingActorParam::freeDynamicArrays(void) { if (boneMatrices.isAllocated && boneMatrices.buf) { mParameterizedTraits->free(boneMatrices.buf); } if (morphDisplacements.isAllocated && morphDisplacements.buf) { mParameterizedTraits->free(morphDisplacements.buf); } if (morphPhysicalMeshNewPositions.isAllocated && morphPhysicalMeshNewPositions.buf) { mParameterizedTraits->free(morphPhysicalMeshNewPositions.buf); } if (morphGraphicalMeshNewPositions.isAllocated && morphGraphicalMeshNewPositions.buf) { mParameterizedTraits->free(morphGraphicalMeshNewPositions.buf); } if (overrideMaterialNames.isAllocated && overrideMaterialNames.buf) { mParameterizedTraits->free(overrideMaterialNames.buf); } } void ClothingActorParam::freeStrings(void) { for (int i = 0; i < overrideMaterialNames.arraySizes[0]; ++i) { if (overrideMaterialNames.buf[i].isAllocated && overrideMaterialNames.buf[i].buf) { mParameterizedTraits->strfree((char*)overrideMaterialNames.buf[i].buf); } } } void ClothingActorParam::freeReferences(void) { if (runtimeCooked) { runtimeCooked->destroy(); } } } // namespace clothing } // namespace nvidia