Skip to main content

ovnewton

ovnewton connects the Newton physics engine with the Omniverse library ecosystem.

Experimental: ovnewton is currently experimental. Its API and packaging may change before version 1.0.

Overview

ovnewton builds Newton models from scenes populated in ovstage. The application owns the Newton solver and simulation loop. A binding publishes simulation state to the stage, applies sealed stage updates to Newton, or exposes selected Newton outputs without publishing.

Use add_ovstage() to populate an application-owned builder, or attach_ovstage(stage) to create and finalize the model automatically.

USD ──ovpopulation──▶ ovstage ──ovnewton──▶ Newton
                          ▲                    │
                          └── simulation state ┘

Newton does not parse the USD file in this workflow.

Requirements

  • Python 3.11 through 3.14
  • Linux on x86-64 and aarch64 for non-rendering workflows
  • CPU or NVIDIA CUDA GPU for supported non-rendering workflows
  • A compatible NVIDIA RTX-capable GPU and supported driver for OVRTX rendering, even when physics runs on the CPU

Package installation resolves the required dependencies. Detailed version requirements are in the support guide.

Installation

Install the current public release of ovnewton and its runtime dependencies from PyPI:

pip install ovnewton

Run the installed example without rendering:

python -m ovnewton.examples.example_ovnewton_basic --device cpu --no-render

The example loads the scene_rigid_bodies.usda scene included in the ovnewton wheel. Install the examples extra for ovrtx rendering and MuJoCo-Warp:

pip install "ovnewton[examples]"
python -m ovnewton.examples.example_ovnewton_basic

The same example can build the scene through ovnewton and advance it with the MuJoCo-Warp or VBD backend on CUDA or CPU:

python -m ovnewton.examples.example_ovnewton_basic --solver mujoco
python -m ovnewton.examples.example_ovnewton_basic --solver vbd

The simulation runs on cuda:0 by default. Pass --device cpu to simulate on the CPU. The wheel also includes a complete cartpole scene:

python -m ovnewton.examples.example_ovnewton_basic --stage scene_cartpole

To watch several Ant robots from Newton's installed assets fall onto a ground plane:

python -m ovnewton.examples.example_ovnewton_robot

Quickstart

The USD scene in this example is supplied by the application.

import newton
import ovnewton
import ovstage
from ovstage import PopulationDomain, population

scene_path = "/path/to/scene.usd"

ovnewton.register_usd_schemas()
stage = ovstage.Stage()
population.open_usd(
    stage,
    scene_path,
    ordinal=1,
    domains=PopulationDomain.ALL,
)
stage.advance_write_floor(1).wait()

builder = newton.ModelBuilder()
import_result = ovnewton.add_ovstage(builder, stage)
model = builder.finalize(skip_validation_joints=import_result.has_orphan_joints)
solver = newton.solvers.SolverXPBD(model)
binding = ovnewton.attach_ovstage(stage, model=model)
state_0 = model.state()
state_1 = model.state()
newton.eval_fk(model, model.joint_q, model.joint_qd, state_0)
control = model.control()
collision_pipeline = newton.CollisionPipeline(model)
contacts = collision_pipeline.contacts()

dt = 1.0 / 60.0
state_0.clear_forces()
collision_pipeline.collide(state_0, contacts)
solver.step(state_0, state_1, control, contacts, dt)

binding.update_to_ovstage(state_1, ordinal=2)
stage.advance_write_floor(2).wait()

Call binding.update_from_ovstage(state, control) before a simulation step to apply supported state and drive-target changes from the stage. Use binding.query() and binding.read() to expose selected read-only Newton state without publishing it.

See the getting-started guide for the full simulation loop and MuJoCo/VBD model preparation.

Supported features and limits

ovnewton supports rigid bodies, articulations, primitive and mesh colliders, physics materials, collision filtering, and a limited subset of surface-cloth inputs. Applications can synchronize state with ovstage and read selected Newton outputs on CPU or CUDA.

Physics instancing, Newton actuators, cables and volume deformables are not supported. Joint-state updates, material bindings and cloth inputs have additional restrictions; see the support guide for the full list.

Malformed data and unsupported physics that would materially change the model raise an error. Recoverable import decisions use the standard ovnewton Python logger; see the concepts guide for details.

License

ovnewton is licensed under the Apache License 2.0. The complete license text is included in the distribution.

Contributing

This project is currently not accepting contributions.

Metadata

Release files for ovnewton 0.2.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Built distribution (wheel)

Table of built distributions (wheels) for ovnewton 0.2.0
File Interpreter ABI Platform
ovnewton-0.2.0-py3-none-any.whl Python 3 none any Details

Release files / ovnewton-0.2.0-py3-none-any.whl

Download URL ovnewton-0.2.0-py3-none-any.whl
Size 101.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
bf42080240322e1c7036d932f60383078a2f7f72beb3f2f6847812ee1ae4d13b
BLAKE2b-256 checksum
How to use checksums
6ae701f55d50ac7d5b25c7765d90380e019783d711f7f2db5b0eeff38c1e8412
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.14.8

Release history Release notifications | RSS feed

This release

0.2.0 This release

1 release file

0.1.1

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page