PhysX Source Guide

From Epic Wiki
Jump to: navigation, search

UE4 uses Nvidia PhysX and APEX as its underlying physics engine. PhysX takes care of core functionality like rigid body simulation, while APEX takes care of destruction and clothing. The source code is fully available for both which makes debugging and modifying behavior easy.

Compiling

This command generates the project files and compiles:

 call RunUAT.bat BuildPhysX -TargetPlatforms=Win64 -TargetConfigs=profile -TargetWindowsCompilers=VisualStudio2015 -SkipSubmit

You may need to edit BuildPhysX.Automation.cs and remove the "[RequireP4]" attribute line.

If you only want the project files add -SkipBuild to the above command. The visual studio solution will be available here:

Engine\Source\ThirdParty\PhysX3\PhysX_3.4\Source\compiler\Win64\VS2015\PhysX.sln

Connecting to UE4

UE4 will automatically find the appropriate binaries when it compiles the engine module. You can either do a full recompile, or simply make a trivial modification (enter a few new lines) to this file:

Engine\Source\Runtime\Engine\Private\PhysicsEngine\PhysXLibs.cpp

Disabling Optimizations

Turning off optimizations on an arbitrary build can be helpful. To do this on windows edit the CMake file found here: Engine\Source\ThirdParty\PhysX3\PhysX_3.4\Source\compiler\cmake\windows\CMakeLists.txt

In this file you'll see the following:

SET(CMAKE_CXX_FLAGS_DEBUG "/Od ${WINCRT_DEBUG} /RTCu /Zi")
SET(CMAKE_CXX_FLAGS_CHECKED "/Ox ${WINCRT_NDEBUG} /Zi")
SET(CMAKE_CXX_FLAGS_PROFILE "/Ox ${WINCRT_NDEBUG} /Zi")
SET(CMAKE_CXX_FLAGS_RELEASE "/Ox ${WINCRT_NDEBUG} /Zi")

You can turn off optimization on any config by changing /Ox to /Od. Then recompile PhysX using the above guide

Using a Debug Build

The PhysX debug build relies on the debug CRT. To make this work you will need to edit BuildConfiguration.xml to have:

<bDebugBuildsActuallyUseDebugCRT>true</bDebugBuildsActuallyUseDebugCRT>

In general it's easier to use a checked build which will still fire asserts without requiring the full debug CRT.