<!-- mobian-agent-page publisher="dailydev" canonical="https://daily.dev/posts/solver2d-box2d-c8hekaxsd" -->

---
title: Solver2D :: Box2D | daily.dev
description: The creator of Box2D introduces Solver2D, a stripped-down physics engine built solely for experimenting with and comparing different rigid-body constraint...
canonical: https://daily.dev/posts/solver2d-box2d-c8hekaxsd
twitter:card: summary_large_image
twitter:site: @dailydotdev
og:type: website
og:site_name: daily.dev
og:title: Solver2D :: Box2D | daily.dev
og:description: The creator of Box2D introduces Solver2D, a stripped-down physics engine built solely for experimenting with and comparing different rigid-body constraint...
og:url: https://daily.dev/posts/solver2d-box2d-c8hekaxsd
og:image: https://api.daily.dev/og/posts/c8HEkAxSD.png
og:image:alt: Solver2D :: Box2D
og:image:width: 1200
og:image:height: 630
og:locale: en
---

> ## Documentation Index
> Fetch the complete documentation index at: https://daily.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Solver2D :: Box2D

**[
        
            Box2D 
        
    ](https://daily.dev/sources/box2d)** · 20 min read · 0 upvotes · 0 comments

## Summary

The creator of Box2D introduces Solver2D, a stripped-down physics engine built solely for experimenting with and comparing different rigid-body constraint solvers. Because Box2D v3.0 grew complex with joints, multithreading, SIMD, and graph coloring, testing new solver variations became impractical, so a simplified sandbox was created instead. Eight Gauss-Seidel-based solvers are implemented and compared, including PGS variants, TGS (sub-stepping) variants, and XPBD, covering concepts like warm starting, Baumgarte stabilization, soft constraints, relaxation, and NGS. Precision issues in XPBD at large world coordinates are diagnosed and fixed by switching to delta-position tracking, which is then applied across all solvers. Performance is compared via body/constraint traversal counts rather than raw benchmarks, and TGS_Soft is identified as the leading candidate for Box2D v3.0, later renamed Soft Step.

## Full article

daily.dev links to this article rather than hosting it. Read it at the original source: <https://box2d.org/posts/2024/02/solver2d>

## Questions this post answers

### Why does XPBD physics simulation cause objects to float or freeze when far from the origin?

XPBD derives velocity from positional changes using (position - position0) / timeStep, which loses significant digits in floating point precision when objects are far from the origin, causing bodies to appear to stop moving or float incorrectly. The fix is to track a deltaPosition value directly during the solve step and compute velocity as deltaPosition / timeStep, only updating the absolute position at the end of the time step.

_Chasing down floating-point precision bugs in a physics sim is easier with daily.dev's developer knowledge on hand._

### What is the difference between PGS and TGS solvers in game physics engines?

PGS (Projected Gauss-Seidel) is the classic iterative constraint solver using multiple iterations per fixed time step, originally implemented in Box2D and games like Tomb Raider: Legend. TGS (Temporal Gauss-Seidel) instead favors sub-stepping over iteration, updating contact points across smaller sub-steps by storing them in local coordinates, which produces better stability without recomputing the broad-phase each sub-step.

_Weighing solver architectures for a physics engine gets easier with daily.dev's engineering deep dives close at hand._

### What are the three mass-independent parameters used for tuning soft constraints in physics engines?

Ross Nordby of the Bepu physics engine found that soft constraints can be expressed using three parameters computed only from Hertz, damping ratio, and time step: bias rate, mass coefficient, and impulse coefficient. This decouples the tuning from body mass properties, unlike the original two-parameter formulation, making soft constraints easier to configure consistently across bodies of different mass.

_Developers tuning simulation stability can keep discovering techniques like this through daily.dev._

## Similar posts on daily.dev

- [Announcing Box3D :: Box2D](https://daily.dev/posts/announcing-box3d-box2d-mu8ehdvki) · Lobsters · 0 upvotes · 0 comments
- [Inscribed Spheres :: Box2D](https://daily.dev/posts/inscribed-spheres-box2d-dvq55o0po) · 
        
            Box2D 
        
     · 0 upvotes · 0 comments
- [Box3D Debuts As New Open-Source 3D Physics Engine](https://daily.dev/posts/box3d-debuts-as-new-open-source-3d-physics-engine-xsk1j9ymw) · Phoronix · 0 upvotes · 0 comments

---

Tags: [#game-development](https://daily.dev/tags/game-development)

[View this post on daily.dev](https://daily.dev/posts/solver2d-box2d-c8hekaxsd)

```json
{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://daily.dev/#organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180},"sameAs":["https://twitter.com/dailydotdev","https://github.com/dailydotdev","https://www.linkedin.com/company/daily-dev-ltd"]},{"@type":"WebSite","@id":"https://daily.dev/#website","url":"https://daily.dev","name":"daily.dev","publisher":{"@id":"https://daily.dev/#organization"},"potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://daily.dev/search?q={search_term_string}"},"query-input":"required name=search_term_string"}}]}
{"@context":"https://schema.org","@type":"TechArticle","headline":"Solver2D :: Box2D","url":"https://daily.dev/posts/solver2d-box2d-c8hekaxsd","mainEntityOfPage":{"@type":"WebPage","@id":"https://daily.dev/posts/solver2d-box2d-c8hekaxsd"},"datePublished":"2026-08-23T12:16:50.138Z","dateModified":"2026-08-23T12:19:02.623Z","description":"The creator of Box2D introduces Solver2D, a stripped-down physics engine built solely for experimenting with and comparing different rigid-body constraint...","image":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/c0cd12fa6b00d63659a51d28711ac179?_a=AQAEuop","thumbnailUrl":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/c0cd12fa6b00d63659a51d28711ac179?_a=AQAEuop","isAccessibleForFree":true,"articleSection":"\n        \n            Box2D \n        \n    ","inLanguage":"en","publisher":{"@type":"Organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180}},"author":{"@type":"Organization","name":"\n        \n            Box2D \n        \n    ","logo":"https://media.daily.dev/image/upload/s--fmoS1AL5--/f_auto,q_auto/v1787487406/logos/box2d?_a=BAMAMicg0","url":"https://daily.dev/sources/box2d"},"commentCount":0,"discussionUrl":"https://daily.dev/posts/solver2d-box2d-c8hekaxsd","interactionStatistic":[{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":0},{"@type":"InteractionCounter","interactionType":{"@type":"CommentAction"},"userInteractionCount":0}],"keywords":"game-development","timeRequired":"PT20M"}
{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://daily.dev"},{"@type":"ListItem","position":2,"name":"\n        \n            Box2D \n        \n    ","item":"https://daily.dev/sources/box2d"},{"@type":"ListItem","position":3,"name":"Solver2D :: Box2D"}]}
{"@context":"https://schema.org","@type":"FAQPage","@id":"https://daily.dev/posts/solver2d-box2d-c8hekaxsd#faq","mainEntity":[{"@type":"Question","name":"Why does XPBD physics simulation cause objects to float or freeze when far from the origin?","acceptedAnswer":{"@type":"Answer","text":"XPBD derives velocity from positional changes using (position - position0) / timeStep, which loses significant digits in floating point precision when objects are far from the origin, causing bodies to appear to stop moving or float incorrectly. The fix is to track a deltaPosition value directly during the solve step and compute velocity as deltaPosition / timeStep, only updating the absolute position at the end of the time step. Chasing down floating-point precision bugs in a physics sim is easier with daily.dev's developer knowledge on hand."}},{"@type":"Question","name":"What is the difference between PGS and TGS solvers in game physics engines?","acceptedAnswer":{"@type":"Answer","text":"PGS (Projected Gauss-Seidel) is the classic iterative constraint solver using multiple iterations per fixed time step, originally implemented in Box2D and games like Tomb Raider: Legend. TGS (Temporal Gauss-Seidel) instead favors sub-stepping over iteration, updating contact points across smaller sub-steps by storing them in local coordinates, which produces better stability without recomputing the broad-phase each sub-step. Weighing solver architectures for a physics engine gets easier with daily.dev's engineering deep dives close at hand."}},{"@type":"Question","name":"What are the three mass-independent parameters used for tuning soft constraints in physics engines?","acceptedAnswer":{"@type":"Answer","text":"Ross Nordby of the Bepu physics engine found that soft constraints can be expressed using three parameters computed only from Hertz, damping ratio, and time step: bias rate, mass coefficient, and impulse coefficient. This decouples the tuning from body mass properties, unlike the original two-parameter formulation, making soft constraints easier to configure consistently across bodies of different mass. Developers tuning simulation stability can keep discovering techniques like this through daily.dev."}}]}
```

