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.

ovnewton.population_desc() selects physics data and preserves composed schema names. Combine it with a rendering descriptor as shown below.

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_with_desc(
    stage,
    scene_path,
    ordinal=1,
    time=population.DEFAULT_TIME,
    descs=(population.Desc(domains=PopulationDomain.RENDERING), ovnewton.population_desc()),
)
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) when you intend to resynchronize all supported state and drive targets from the sealed stage. This can overwrite live simulation state with older stage values. To update only joint targets while preserving live simulation state, pass attributes=("jointPositionTarget", "jointVelocityTarget"). The same selector supports body pose/velocity and single-DOF joint state; see the getting-started guide for the field list and synchronization semantics. 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.1

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.1
File Interpreter ABI Platform Actions
ovnewton-0.2.1-py3-none-any.whl Python 3 none any Details for ovnewton-0.2.1-py3-none-any.whl

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

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

Security for ovnewton 0.2.1

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

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