Tokamak Game Physics SDK (далее — Tokamak) — физический движок, работающий в режиме реального времени, который распространяется на основе свободнойлицензии BSD с открытыми исходными кодами.
В начале Tokamak был свободным только для некоммерческого использования, однако с мая 2007 года движок перешёл на открытые исходные коды под лицензией BSD.
Физический движок Tokamak обладает уникальным итерационным методом для обработки ограничений (Шаблон:Lang-en). Этот метод необходим для того, чтобы позволять разработчикам делать выбор между точностью и скоростью и обеспечивать более предсказуемое потребление ресурсов процессора и системной памяти физическим движком. Обработчик ограничений Tokamak’а не вовлекает в обработку большие матрицы, избегая таким образом ограничение на полосу пропускания памяти на некоторых игровых консолях.
Tokamak поддерживает множество типов связей (Шаблон:Lang-en), ограничений (Шаблон:Lang-en) и реалистическую модель трения. Tokamak оптимизирован для наложения (Шаблон:Lang-en) большого количества объектов, что является часто требуемым многими разработчиками игр. Tokamak обеспечивает обнаружение столкновений (Шаблон:Lang-en) для примитивов (параллелепипед, сфера, капсула), комбинаций примитивов и произвольных статических полигональных сеток (Шаблон:Lang-en). Лёгкие «твёрдые частицы» обеспечивают эффекты частиц (Шаблон:Lang-en) в играх с минимальными затратами.
Tokamak также поддерживает «Разламываемую конструкторскую модель» (Шаблон:Lang-en), которая разламывается в результате столкновений. Фрагменты (обломки, осколки) первоначальной модели будут созданы автоматически встроенными функциональными возможностями движка.
Tokamak API содержит два разных типа классов. Классы интерфейса являются классами объектов, создаваемыми и управляемыми непосредственно основными функциями Tokamak или методами его класса. Другая группа — классы периферии, которые представляют собой обычные классы C++, определённые и управляемые пользователем.
Tokamak API написан на языке программирования C++ и представляет собой объектно-ориентированный интерфейс, хотя объявление виртуальных функций сведено к минимуму. Вообще-то, как таковых их нет. Причиной данной реализации является то, что на некоторых платформах вызовы виртуальных функций слишком «расточительны» вследствие ограниченного размера кэша.