Как убрать дублирующий код?
Создать класс Animation перенести туда похожий функционал. Унаследовать 2d\3d от этого класса.
ну.. в принципе можно расширения с дженериком нарисовать
на первый взгляд (не сверяю код, именно на глазок) мне кажется это было бы даже уместнее - если методов всего три, городить иерархию классов явно не стоит
ps и уж точно не стоит, когда они совпадают до символа
совет - если это дочерние классы от какого то необходимого "бай-дизайн-среды-исполнения" (как Form к примеру), и если вы не переопределяете обязательные виртуальные методы, то есть код где вызываются дополнительные методы полностью вами контролируется - расширения позволяют писать более чистый и читаемый код
в смысле создается экземпляр базового типа, где надо, через точку применяем расширения как родные