Debug Visualization

NVIDIA APEX

Debug Visualization

Introduction

Debug visualization features can be controlled using parameters which are stored using separate NvParameterized classes - one for general debug rendering parameters, and one for each loaded module which stores parameters specific to that module. Specific details on parameters can be found in their respective module’s programmers guides.

To get the NvParameterized object for debug rendering parameters, the following must be done:

//Get APEX framework debug rendering parameters
NvParameterized::Interface &dbgRenderParams = *m_apexScene->getDebugRenderParams();
//Get clothing debug rendering parameters
NvParameterized::Interface &dbgRenderParamsClothing = *m_apexScene->getModuleDebugRenderParams("Clothing");
//Get emitter debug rendering parameters
NvParameterized::Interface &dbgRenderParamsEmitter = *m_apexScene->getModuleDebugRenderParams("Emitter");

Framework Parameters

The APEX Framework has a set of parameters to control debug visualization for items at the framework level:

Module List

Module names must be selected from this list (with links to the parameter descriptions):

Examples

After getting the NvParameterized object, parameters can be modified. Sample code which modifies debug rendering parameters are as follows:

// It is important to enable the global debug visualization
NvParameterized::setParamBool(dbgRenderParams, "Enable", true);
// The scale of the debug visualization may be altered globally
NvParameterized::setParamF32(dbgRenderParams, "Scale", 1.0f);
// Draw the simulation mesh for clothing actors, scaled to 90%
NvParameterized::setParamF32(dbgRenderParamsClothing, "PhysicsMeshWire", 0.9f);
// The APEX emitters feature some hierarchy, so the dot notation gets you to the individual parameters
NvParameterized::setParamBool(dbgRenderParamsEmitter, "apexEmitterParameters.VISUALIZE_APEX_EMITTER_ACTOR", true);
NvParameterized::setParamBool(dbgRenderParamsEmitter, "groundEmitterParameters.VISUALIZE_GROUND_EMITTER_RAYCAST", true);

Note

Debug rendering parameters for emitters are further subclassed into apex, ground and impact emitter parameters. Refer to the emitter programmers guide for more details.

The APEX debug rendering is output through the APEX scene’s render resources interface:

// render debug-render scene
m_apexScene->lockRenderResources();
m_apexScene->updateRenderResources();
m_apexScene->dispatchRenderResources(*m_apexRenderer);
m_apexScene->unlockRenderResources();

The application may also tunnel the PhysX debug rendering (DebugRenderable or PxRenderBuffer) through the APEX rendering interface:

nvidia::apex::RenderDebug* m_apexRenderDebug = m_apexSDK->createApexRenderDebug();
#if PX_PHYSICS_VERSION_MAJOR == 2
    const DebugRenderable* debugRenderable = m_apexScene->getPhysXScene()->getDebugRenderable();
    if (debugRenderable)
    {
        m_apexRenderDebug->addDebugRenderable(*debugRenderable);
    }
#elif PX_PHYSICS_VERSION_MAJOR == 3
    const physx::PxRenderBuffer& renderBuffer = m_apexScene->getPhysXScene()->getRenderBuffer();
    if (m_apexRenderDebug != NULL)
    {
        m_apexRenderDebug->addDebugRenderable(renderBuffer);
    }
#endif

Debug Rendering Colors

Debug rendering uses the following table of colors:

Color Parameter Default (ARGB) Description
Default 0x00000000 Currently unused
PoseArrows 0x00000000 Currently unused
MeshStatic 0x00000000 Currently unused
MeshDynamic 0x00000000 Currently unused
Shape 0x00000000 Currently unused
Text0 0x00000000 Currently unused
Text1 0x00000000 Currently unused
ForceArrowsLow 0xFFFFFF00 Forcefield arrows in wind/explosion
ForceArrowsNorm 0xFF00FF00 Forcefield arrows in wind/explosion
ForceArrowsHigh 0xFFFF0000 Forcefield arrows in wind/explosion
Color0 0x00000000 Currently unused
Color1 0x00000000 Currently unused
Color2 0x00000000 Currently unused
Color3 0x00000000 Currently unused
Color4 0x00000000 Currently unused
Color5 0x00000000 Currently unused
Red 0xFFFF0000 Standard colors
Green 0xFF00FF00 Standard colors
Blue 0xFF0000FF Standard colors
DarkRed 0xFF800000 Standard colors
DarkGreen 0xFF008000 Standard colors
DarkBlue 0xFF000080 Standard colors
LightRed 0xFFFF8080 Standard colors
LightGreen 0xFF80FF00 Standard colors
LightBlue 0xFF00FFFF Standard colors
Purple 0xFFFF00FF Standard colors
DarkPurple 0xFF800080 Standard colors
Yellow 0xFFFFFF00 Standard colors
Orange 0xFFFF8000 Standard colors
Gold 0xFF808000 Standard colors
Emerald 0xFF008080 Standard colors
White 0xFFFFFFFF Standard colors
Black 0x00000000 Standard colors
Gray 0xFF808080 Standard colors
LightGray 0xFFC0C0C0 Standard colors
DarkGray 0xFF404040 Standard colors

Debug rendering colors are stored using NvParameterized, and can be customized by first getting the NvParameterized object, then modifying the parameters as follows:

//Initialize debug colors parameters
NvParameterized::Interface &dbgColorParams = *GetApexSDK()->getDebugColorParams();
NvParameterized::setParamU32(dbgColorParams, "Red", 0xFFFFFF00);
NvParameterized::setParamU32(dbgColorParams, "ForceArrowsNorm", 0xFFFF0000);

The above code will replace any existing red draw code with yellow, and replacing green with red for normal forcefield arrows in wind and explosion modules.