• Stars
    star
    331
  • Rank 127,323 (Top 3 %)
  • Language
    C++
  • License
    Other
  • Created almost 8 years ago
  • Updated about 3 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

A modular destruction SDK designed for performance and flexibility, replacing APEX destruction

Blast 1.1.7

Alt text

Introduction

Blast is a new NVIDIA GameWorks destruction library. It consists of three layers: the low-level (NvBlast), a high-level "toolkit" wrapper (NvBlastTk), and extensions (prefixed with NvBlastExt). This layered API is designed to allow short ramp-up time for first usage (through the Ext and Tk APIs) while also allowing for customization and optimization by experienced users through the low-level API.

This library is intended to replace APEX Destruction. It is being developed with the goal of addressing shortcomings in performance, stability, and customizability of the APEX Destruction module.

Some notable features of NvBlast:

  • C-style API consisting of stateless functions, with no global framework or context.
  • Functions do not spawn tasks, allocate, or deallocate memory.
  • A support structure may be defined that includes chunks from different hierarchical depths.
  • Multiple chunk hierarchies may exist in a single asset.
  • Damage behavior is completely defined by user-supplied "shader" functions.
  • Has a portable memory layout for assets and actor families, which allows for memcopy cloning and direct binary serialization (on platforms with the same endianness).

Features of NvBlastTk:

  • C++ API which includes a global framework.
  • Manages objects, allocating and deallocating using a user-supplied callback.
  • Generates "worker" objects to process damage, which the user may call from multiple threads.
  • Uses an event system to inform the user of actor splitting and chunk fracturing.
  • Introduces a joint representation which uses the event system to allow the user to update physical joints between actors.

Notably absent from NvBlast and NvBlastTk:

  • There is no physics or collision representation.
  • There is no graphics representation.

Blast, at the low-level and toolkit layer are physics and graphics agnostic. It is entirely up to the user to create such representations when blast objects are created. Updates to those objects (such as actor splitting) are passed to the user as the output of a split function in the low-level API, or through a split event in the toolkit API. This allows Blast to be used with any physics SDK and any rendering library.

In order to help the user get started quickly, however, there is a PhysX-specific Blast extension which uses BlastTk and manages PhysX actors and joints. The source code for this extension, like all Blast extensions, is intended to be a reference implementation.

Current blast extensions:

  • ExtAssetUtils - NvBlastAsset utility functions. Add world bonds, merge assets, and transform geometric data.
  • ExtAuthoring - a set of geometric tools which can split a mesh hierarchically and create a Blast asset, along with collision geometry and chunk graphics meshes in a separate files.
  • ExtImport - provides functions to import an APEX Destructible Asset to create a Blast asset.
  • ExtExporter - standard mesh and collision writer tools in fbx, obj, and json formats.
  • ExtPhysX - a physics manager using PhysX which keeps PxActors and PxJoints updated in a user-supplied PxScene. It handles impact damage (through the contact callback), includes a stress solver wrapper, and provides a listener that enables multiple clients to keep their state synchronized.
  • ExtSerialization, ExtTkSerialization, ExtPxSerialization - serialization extensions for low-level, Tk and Px layers. Uses Cap'n Proto to provide robust serialization across different platforms.
  • ExtShaders - sample damage shaders to pass to both the low-level and Tk actor damage functions.
  • ExtStress - a toolkit for performing stress calculations on low-evel Blast actors, using a minimal API to assign masses and apply forces. Does not use any external physics library.

Documentation

See docs/api_docs/index.html for api documentation.

See docs/source_docs/index.html for full source doxygen pages.

See docs/release_notes.txt for changes.

Compiling

For windows (VS2017):

  • Run generate_projects_vc15win64.bat'. This step will download all necessary dependencies that are not already downloaded into a folder NVIDIA/packman-repo` at the root of your hard drive, so this might take some time the first time one of these scripts is run (or when a dependency version changes).
  • Open compiler/vc15winBB-cmake/BlastAll.sln. This contains all Blast windows projects, including the low-level, toolkit, extensions, tools, tests, and sample.
  • If you run the sample, you should first run download_sample_resources.bat. This will load complex asset files with nontrivial graphics meshes. Without these assets, only procedurally-generated box assets are available in the sample.

For linux:

  • Run generate_projects_linux.sh. This step will download all necessary dependencies that are not already downloaded into a folder NVIDIA/packman-repo at the root of your hard drive, so this might take some time the first time the script is run (or when a dependency version changes).
  • Makefiles will be generated in compiler/linux64-CONFIG-gcc, where CONFIG = debug or release. These will build all Blast linux projects, including the low-level, toolkit, extensions, and tests.

For PS4 and XBoxOne:

Tools and Samples Binaries (Windows only)

Blast tools and sample executables, along with all necessary supporting libraries, are packaged in the blast_tools_and_samples-windows.zip file. This allows someone without a development environment to use these applications.

BlastTool-1.1 (Windows 64-bit only)

BlastTool is a standalone GUI application for authoring Blast assets. It imports fbx graphics files and exports Blast assets in the low-level, high-level (Tk), and ExtPx formats, along with fractured meshes and (optionally) collision geometry in a separate file or embedded in an fbx along with the graphics meshes. It is now included in blast_tools_and_samples-windows.zip (see above). Run BlastTool.Profile.win64.exe in the bin/vc15win64-cmake folder.

Documentation may be found here: https://docs.nvidia.com/gameworks/content/gameworkslibrary/blast/1.1/authoring_docs/index.html

Unreal Engine 4 Plugin

UE4.19.2: https://github.com/NvPhysX/UnrealEngine/tree/Blast-4.19

UE4.20.3: https://github.com/NvPhysX/UnrealEngine/tree/Blast-4.20

UE4 github access is required to access this repo, more info: https://developer.nvidia.com/nvidia-gameworks-and-ue4

Includes authoring in UnrealEd and sample maps.

Gallery

Tower explosion

Alt text

Bunny impact damage

Alt text

Layered cube explosion

Alt text

Table impact damage

Alt text

Tower slice

Alt text

Wall impact damage

Alt text

Stress solver

Alt text

Joints

Alt text

More Repositories

1

kaolin

A PyTorch Library for Accelerating 3D Deep Learning Research
Python
4,452
star
2

PhysX

NVIDIA PhysX SDK
C++
2,893
star
3

Falcor

Real-Time Rendering Framework
C++
2,615
star
4

PhysX-3.4

NVIDIA PhysX SDK 3.4
C++
2,307
star
5

kaolin-wisp

NVIDIA Kaolin Wisp is a PyTorch library powered by NVIDIA Kaolin Core to work with neural fields (including NeRFs, NGLOD, instant-ngp and VQAD).
Python
1,450
star
6

rtx-remix

Combined repo for the RTX-Remix runtime
1,369
star
7

DxrTutorials

C++
834
star
8

RTXGI-DDGI

RTX Global Illumination (RTXGI)
C++
689
star
9

RTX-Path-Tracing

Real-time path tracing library and sample
C++
624
star
10

GettingStartedWithRTXRayTracing

Getting Started with RTX Ray Tracing
C++
613
star
11

FleX

C++
579
star
12

nvrhi

C++
525
star
13

RayTracingDenoiser

NVIDIA Ray Tracing Denoiser
HLSL
512
star
14

FaceWorks

A middleware library and sample application for high-quality skin and eye rendering
C++
450
star
15

NVIDIAImageScaling

NVIDIA Image Scaling SDK
C
426
star
16

Streamline

Streamline Integration Framework
C
400
star
17

RTXDI

C++
356
star
18

dxvk-remix

C++
307
star
19

NvCloth

C
296
star
20

KickstartRT

KickstartRT SDK
C++
185
star
21

Flow

Flow is a sparse grid-based fluid simulation library for real-time applications.
C
168
star
22

donut

C++
164
star
23

HBAOPlus

HBAO+
C++
160
star
24

bridge-remix

This is the NVIDIA RTX Remix Runtime Bridge repository
C++
146
star
25

Displacement-MicroMap-Toolkit

C++
130
star
26

SpatiotemporalBlueNoiseSDK

C
127
star
27

UnityPhysXPlugin

Experimental Unity package to enable access to NVIDIA PhysX SDK 4 from within Unity.
C#
122
star
28

NRI

C++
90
star
29

RTXMU

C++
89
star
30

ShaderMake

Shader Compilation Tool
C++
78
star
31

donut_examples

C++
72
star
32

NRDSample

C++
69
star
33

GeForceNOW-SDK

This is the home of the SDK for GeForce NOW
C
65
star
34

KickstartRT_demo

Repo for KickstartRT demo application
C++
50
star
35

Opacity-MicroMap-SDK

Opacity Micro-Map SDK Source Repository
C++
36
star
36

MathLib

C++
28
star
37

Displacement-MicroMap-SDK

C++
19
star
38

Streamline_Sample

C++
17
star
39

nas-sample

C++
16
star
40

ComfyUI-RTX-Remix

ComfyUI RTX Remix
Python
14
star
41

Opacity-MicroMap-Samples

Samples repository for the Opacity MicroMap SDK
C++
11
star
42

Displacement-MicroMap-BaryFile

C++
11
star
43

NRIFramework

C
8
star
44

NRISamples

C++
7
star
45

rtxdi-runtime

HLSL
2
star