понедельник, июня 11, 2012

Обзор исходников Doom3

Некоторое время назад исходники Doom3 были выложены в открытый доступ. Но в исходниках без доков разбираться довольно тяжело. Так вот, Фабьен Санглар написал по ним обзор со схемами, картинками, видео. Также он позадавал вопросы Кармаку по исходникам. Если вы мечтаете писать игры, но не знаете с чего начать, то Фабьен сделал вам прекрасный подарок.

Несколько фактов оттуда:

  • Впервые в истории id Software код написан на С++, а не на С
  • В коде широко используются абстракция данных и полиморфизм
  • Темплейты используются только для низкоуровневого кода
  • По мнению Фабьена это вторая по качеству кодобаза от id Software после Doom iPhone
  • Благодаря инкапсуляции код легко читать
  • Дни оптимизации ассемблерного кода на низком уровне прошли
Бонус: Кармак рассказывает о своих экспериментах с очками виртуальной реальности и о проблемах с задержкой отрисовки. Carmack Being Carmack: A Dozen Minutes With One of Video Game’s Smartest People

9 коммент.:

Сергей комментирует...

Хм... Неужели и ассемблерный код можно оптимизировать?

Tema комментирует...

Ну, здесь, видимо, имелось ввиду не совсем это. А так, на сколько я знаю, компилятор Visual Studio умеет оптимизировать ассемблерные вставки )

nick комментирует...

To Сергей:

Конечно можно оптимизировать ассемблерный код. Например,
xor edx, edx
делает то же самое, что и
mov edx, 0
(если не считать флагов) только быстрее и меньше места занимает. Данный пример почти не актуален на сегодня, правда (за один так обе инструкции отрабатывают). Но суть в том, что одно и то же можно написать разными способами, выравнивать участки кода для ускорения условных переходов, использовать SSEx. Но на сегодня людей, которые знают эти тонкости лучше компиляторов очень мало.

Илья Весенний комментирует...

Алёна, тут небольшая опечатка: "низкоуровневого года" вместо "... кода"

Alena комментирует...

Илья Весенний

Алёна, тут небольшая опечатка: "низкоуровневого года" вместо "... кода"

Поправила, спасибо

Andrey S комментирует...

Конечно в большинстве случаев никого уже давно не интересует оптимизация кода на низком уровне. Да и людей мало, которые даже не просто знают, а вобще хотят знать, а как же это все работает мало.

Дешевле купить еще и еще один компьютер. Хотя сразу было понятно, что этому тоже (по историческим меркам) скоро придет конец. Не в том смысле. что совсем, но надо будет решать очень сложные алгоритмические задачи (параллелизации).

Но и без понимания как работает С++ компилятор, смотреть им сгенерированный код или даже самому что-то дописать надо. Все еще есть такие задачи и я надеюсь, что их будет больше. Нам некуда будет деваться от невозможности запускать все больше серверов и нашей неудержимой жадности еще заработать.

masterspammer комментирует...

В случае игры сложно прикупить ещё один компьютер каждому игроку, так что если узких мест мало (а их обычно мало), то низкоуровневая оптимизация окупится.

Maxim комментирует...

Низкоуровневая оптимизация никуда не денется, но это уже сейчас очень узкая область и количество специалистов здесь нужно совсем не большое. И никакой проблемы в этом нет, будет потребность на рынке, будут и специалисты. Какой смысл всем учить асм, а чтобы в нём хорошо разбираться нужно много опыта, а где его взять?

Да что там говорить про асм, когда повально с С/С++ переходят на Node.js, Erlang, PHP, при этом тратится памяти значительно больше, но это никого не заботит, потому что в итоге выходит дешевле (программисты сейчас стоят не дёшево).

SeregaRS комментирует...

В настоящее время низкоуровневая оптимизация окупается только в ПО для узкоспециализированного железа(процессорные системы ЦОС, ПЛИС и т.д.). Там без ассемблеров и вхдэлей никуда так как апгрейд железа может потребовать разработки железа практически с нуля))) В персоналке такие задачи возникают крайне редко так как улучшить производительность системы зачастую проще чем допиливать ПО. Ярчайший тому пример это пресловутый Андроид...