Плавное движение персонажа по дисплейсменту

Все здравствуйте.

Движек SourceEngine c++(HL2).

Есть у меня такой вопрос ко всем - как, в общем, реализуется процесс

плавного движения

персонажа по карте.

Само понятие персонаж - это может быть что угодно, игрок, npc, транспорт и т.д. пусть понятие персонаж будет объект.

Сам объект имеет физические свойства, масса, трение и т.д.

Суть вопроса - я двигаю объект по вектору направления с заданной скоростью(вектор скорости) к конечной точке. Учёт неровностей я делаю просчетом отражений от земли(нормалей), т.е. выравниваю углы объекта по нормалям дисплейсмента.

Если убрать трение - получится какой-то полёт над землёй - нереально, зато дерганий не будет.

При движении, объект явно цепляется за "землю"

Вот мне и интересен, вернее мне интересна реализация движения по земле.

В самом движке я не могу понять, здесь наворочено так, что мозги поломаешь, но явно одно - движение идёт на физ.объекте.

Сколько смотрел похожего, всё не то, все api у которых есть описание это только юнити(с#), в лучшем случае унриал(c++), но везде свои API.

Для Source описаний API нет, что-то там сами накопали - выкладывают на вики, но очень мало и нужного мне сейчас, там нет.

Конечно в движке валом всевозможных API, но копать все подряд - бред.

Поэтому я хочу понять принцип - как и на чём основывается движение.