On behalf of the Pulse Physiology Community, we are pleased to announce that version 1.0 of the Pulse Unity Asset is now available for free download on the Unity Asset Store and the release page of the open-source project on Gitlab.

Pulse Physiology Engine Overview

The Pulse Physiology Engine is an open-source library for accurate, consistent, dynamic simulation of the whole-body response to injury, disease, and treatment. Pulse has been used to enhance the realism of serious games and medical simulation through real-time dynamic interaction and physiologic feedback with simulated patients. Through our physics-based models, we provide important capabilities, including:

Variable patients with chronic conditions, comorbidities, and different vital statistics

Accurate, real-time, in-game physiologic responses to injuries and treatments

Ability to combine injuries and severities for versatile scenarios and outcomes that reflect the user’s interactions with the patient

For more information about all that Pulse can do, please see our full documentation and our Introducing Pulse Physiology blog post.

Pulse Unity Asset Overview

The Pulse Unity Asset enables the integration of the Pulse Physiology Engine into Unity applications targeting Windows, Linux and MacOS platforms. The asset provides the following features:



Initializing the simulation using an initial patient state file. A number of state files representing different patients are included to get started.

using an initial patient state file. A number of state files representing different patients are included to get started. Automatically advancing the simulation time to keep it synced with the Unity game clock.

to keep it synced with the Unity game clock. Retrieving vitals data , including simulation time, ECG signal, heart rate, arterial, systolic, and diastolic blood pressures, oxygen saturation, end-tidal carbon dioxide, respiration rate, temperature, airway carbon dioxide partial pressure, and blood volume.

, including simulation time, ECG signal, heart rate, arterial, systolic, and diastolic blood pressures, oxygen saturation, end-tidal carbon dioxide, respiration rate, temperature, airway carbon dioxide partial pressure, and blood volume. Displaying vitals data with customizable & reusable Unity components to draw a vital graph or number on a canvas which can be placed in the 3D world or overlaid on the camera screen.

with customizable & reusable Unity components to draw a vital graph or number on a canvas which can be placed in the 3D world or overlaid on the camera screen. Interacting with the patient by applying actions to the physiology engine through a public API, including injuries and treatments such as hemorrhage, airway obstruction, intubation, tension pneumothorax, needle decompression, substance injection/infusion, and anesthesia machine configuration.

by applying actions to the physiology engine through a public API, including injuries and treatments such as hemorrhage, airway obstruction, intubation, tension pneumothorax, needle decompression, substance injection/infusion, and anesthesia machine configuration. Example scenes and scripts demonstrating how to leverage all the Pulse asset components in Unity.

Our user manual offers in-depth details of all the Pulse asset functionality. It is included in the unity package and can be found on our release page.

Vital Signs Monitor Example

The VitalsMonitor scene showcases a full vitals monitor screen. The vital signs data is generated by executing Pulse through the PulseEngineDriver component. PulseDataLineRenderer and PulseDataNumberRenderer are two customizable Unity components in charge of displaying the data on the canvas.

VitalsMonitor scene based on the design of the Pulse Explorer vital sign monitor

From top to bottom: E ditors of the PulseEngineDriver, PulseDataLineRenderer, and PulseDataNumberRenderer Unity components.

Patient Interaction With Pulse In Unity

The CreateActionOnClick scene example is an easy way to interact with Pulse and discover how actions affect patients in real-time. It showcases the PulseActionOnClick component which provides an easy-to-use list of predefined actions that can be triggered in the Unity Editor:

Top: List of preset actions exposed through the PulseActionOnClick component. Bottom: PulseActionOnClick component editor to run action during the game from the Unity Editor.



Left: Healthy patient respiration. Right: The respiration waveform loses shape and the end-tidal carbon dioxide (CO2 at the end of expiration) begins to drop after applying an airway obstruction in the CreateActionOnClick scene.

The PulseActionOnClick component source code illustrates how to use the API to apply actions on the engine. To interact with a patient in your Unity project, you can trigger actions when required by your scenario by first defining them, then processing them through the PulseEngine exposed in your PulseEngineDriver instance.

An example of the hemorrhage action is shown below: an external hemorrhage in the right leg of 50 mL/min. The common femoral artery blood flow is approximately 150 mL/min.

SEHemorrhage h = new SEHemorrhage(); h.SetCompartment("RightLeg"); h.SetType(SEHemorrhage.eType.External); h.GetRate().SetValue(50, VolumePerTimeUnit.mL_Per_min); driver.engine.ProcessAction(h); 1 2 3 4 5 SEHemorrhage h = new SEHemorrhage ( ) ; h . SetCompartment ( "RightLeg" ) ; h . SetType ( SEHemorrhage . eType . External ) ; h . GetRate ( ) . SetValue ( 50 , VolumePerTimeUnit . mL_Per_min ) ; driver . engine . ProcessAction ( h ) ;

An example of a drug injection is shown below: an intravenous administration of 10mg of morphine. For more information on available substances, see the Pulse documentation.

SESubstanceBolus bo = new SESubstanceBolus(); bo.SetSubstance("Morphine"); bo.SetAdminRoute(SESubstanceBolus.eAdministration.Intravenous); bo.GetConcentration().SetValue(10, MassPerVolumeUnit.mg_Per_mL); bo.GetDose().SetValue(1, VolumeUnit.mL); driver.engine.ProcessAction(bo); 1 2 3 4 5 6 SESubstanceBolus bo = new SESubstanceBolus ( ) ; bo . SetSubstance ( "Morphine" ) ; bo . SetAdminRoute ( SESubstanceBolus . eAdministration . Intravenous ) ; bo . GetConcentration ( ) . SetValue ( 10 , MassPerVolumeUnit . mg_Per_mL ) ; bo . GetDose ( ) . SetValue ( 1 , VolumeUnit . mL ) ; driver . engine . ProcessAction ( bo ) ;

All the available actions currently exposed in the Pulse Unity Asset, as well as their inputs, are documented in the user manual which is included in the Unity package and available on our release page.

Contact

Let us know how Pulse can better support your modeling and simulation needs at kitware@kitware.com. In addition, visit us at BMES Frontiers in Medical Devices 2019, March 19-21 to see our poster titled “Simulation of Asthma Attack and Inhaler Actuation using the Pulse Physiology Engine” or at the MTEC Annual Meeting, March 20-21.