суббота, 30 октября 2010 г.

DirectGL

Первый для меня проект по портированию Direct3D-тайтла на платформу MacOS X близится к концу, а тем временем моя голова уже полна мыслей, как оптимизировать этот процесс для будущих проектов.

Наш render team набил достаточно шишек, пытаясь запустить D3D-flow через трубопровод GlukoGL, но, как известно, на ошибках учатся! Вообще всё очень зависит от специфики проекта (скажем, гоночки с динамическим стримингом мира vs статическая загрузка, ARB-шейдеры vs GLSL), но тем не менее, можно выделить несколько задач, реализация которых облегчит портирование Direct3D игр на Маc:

1) Исходный код рендера неприкосновенен настолько, насколько это возможно. По сути, я подумываю написать статическую библиотеку, которая будет внешне мимикрировать Direct3D, а внутри транслировать все вызовы в команды GlukoGL. Нам необходимы по сути лишь несколько основых классов: Vertex/IndexBuffer, Query, VertexDeclaration и Device, чтобы получить картинку в wireframe, а дальше уже отлаживать шейдинг и остальные прибамбасы. По сути весь Device в нынешнем проекте писал и оптимизировал я, так что его Direct3D-like реализация уже имеется. Идея состоит в том, чтобы не просто сделать like-реализацию, а написать полную Direct3D-оболочку, внутри которой либо портировать функционал, либо делать stub-овые методы, в зависимости от условий проекта. Тогда код рендера практически не придётся трогать.

2) Жёсткий контроль за render states. Необходимо написать render state dumper, который будет опрашивать API на предмет всех мыслимых стэйтов и выводить их в файл/консоль. Тогда можно будет легко контролировать весь поток рендеринга, делая дампы стэйтов:

void SomePass::Render()
{
DumpRenderStates("begin.txt");

// a lot of render code here...

DumpRenderStates("end.txt");
}

Cравнивая дампы в Direct3D и GlukoGL рендерах, можно легко отлавливать закравшиеся баги. Если какой-то стэйт потерян - останавливаемся и ищем ошибку. Полное соответствие всех стэйтов на всём протяжении отрисовки кадра здорово уменьшит нашу головную боль с отладкой.

3) Viewport Y-Axis Inversion.

Решать единообразно. Скажем, домножать .y компоненту вершины на -1 в вершинном шейдере после преобразования MVP матрицей. Тогда проблема инверсии оси Y нивелируется и при сэмплировании получившейся текстуры можно не возиться с текстурными координатами. Или, как вариант, подправить саму матрицу, чтобы не тратить команду шейдера.

Clear: D3D vs GL

На днях наткнулся на интересную разницу в работе Direct3D 9 и OpenGL: в первом очистка depth буфера не зависит от того, разрешена маска записи в depth или нет, а вот в OpenGL - зависит. Это стало причиной бага в рендере, когда маска отключалась и после этого шла очистка буфера глубины. Скорее всего, с render target ситуация аналогичная.

четверг, 21 октября 2010 г.

Минеральный секретарь

Кстати, не многие как-то задумываются, что в новом 2011 году исполняется 20 лет со времени распада ЭСэСэСэР.

Но за истёкшие годы пациент работать так и не научился. Вместо этого он сдаёт кровь (нефть) и получает деньги. Патология какая-то, не лечится.

Он как-то сам собой развалился :-(








И ещё в догонку:

понедельник, 18 октября 2010 г.

Hello, DirectX 11!

Давно клянчил DX11-систему, но пока что такая была только за моей спиной. Я уже перекинул туда некоторые свои проекты, но вот теперь... Я заполучил новый iMac с видеокартой Radeon HD 5750!


Правда, на предыдущем компьютере был процессор Core i7 и 8 ГБ памяти, а на новом - только Core i5 и 4 ГБ 8 ГБ, но ничего, более продвинутый GPU для меня важнее. Уже всё настроил, поставил Xcode и последние апдейты, осталось только поставить Windows 7 через Bootcamp и здравствуй, DirectX 11!

Update

Оказалось, что всё не так просто. Windows 7 я поставил (boot menu доступно при зажатии alt/option при старте), но вот драйверы для видеокарты не хотят распознавать железку. Я ставил каталист и для десктопной серии, и для мобильной, и драйверы из Apple Bootcamp - всё бестолку, определяется стандартный VGA адаптер да ещё пишется, что для него установлены самые подходящие драйверы. Погуглил: оказывается, некоторые тоже столкнулись с аналогичной проблемой - mid-2010 iMac-и имеют проблемы с видео драйвером из-под Windows (из-под Mac OS X понятно, что всё в порядке).

Update

Ура, драйверы установились! Нужны специальные, для late-2009 и mid-2010 iMac-ов, качать следует отсюда:

http://support.apple.com/kb/HT3983

Windows Seven в таком разрешении выглядит просто потрясающе.


:)

четверг, 14 октября 2010 г.

Сдали альфу

Теперь надо бету :)

воскресенье, 10 октября 2010 г.

GPU, raytracing и транзисторы

С некоторых пор мне в глаза бросилась одна вещь: hi-end видеокарты NVIDIA и AMD стали похожи на маленькие "гробики". Да.

Если мысленно вернуться в конец 90-х и начало двухтысячных, то можно увидеть, что видеокарты внешне представляли собой простую зелёную или красную однослотовую плату, иногда увенчанную небольшим кулером системы охлаждения. В таком виде они не очень отличались, скажем, от звуковых плат или других плат расширения. Легкость тех решений объясняется просто: кол-во транзисторов в чипах исчислялось всего несколькими десятками миллионов, и в hi-end решениях требовалось минимальное активное охлаждение, а в low-end часто применялось пассивное. Размеры транзисторов измерялись десятыми долями микрон.

Первым тревожным звоночком стала GeForce FX, которая несла первый по-настоящему программируемый GPU. Но какой ценой? Больше ста миллионов транзисторов при техпроцессе в 0.13 микрон и система охлаждения, которая выла, как пылесос:


Эта видеокарта по габаритам, энергопотреблению, тепловыделению и производимому шуму значительно отличалась от GeForce 3/4. Позже NVIDIA удалось оптимизировать техпроцесс и low-end видеокарты NV4x даже выходили с пассивной системой охлаждения.

И всё же, чем дальше, тем более ясно прослеживается такая тенденция: кол-во транзисторов постоянно увеличивается, причём быстрее, чем мельчает техпроцесс, или другими словами, размеры этих самых транзисторов. Последняя GeForce ПЕЧ 480 - наглядный пример того, к какому энергопотреблению и тепловыделению можно прийти, если впихнуть в кристалл 512 скалярных процессоров, всякие КУДЫ и double-precision. Поэтому неудивительно, что даже middle-end решения вроде GTX 460 приходится одевать в СО в виде чёрного "гробика".

Понятно, что бесконечно этот увлекательный процесс усложнения чипов продолжаться не может. Сейчас техпроцесс имеет размер 40 нм, и планируется переход на 28 нм. Это позволит либо уменьшить размеры кристалла (и тепловыделение), либо увеличить кол-во транзисторов при неизменном размере. А скорее всего, учитывая постоянную гонку производительности, площади чипов и кол-во GPU-ядер вырастут ещё больше, несмотря на истончение техпроцесса. Я читал, что пределом для иммерсионного литографического процесса являются 15-16 нм, после которого наступит или застой, или будут разработаны новые методы производства транзисторов. В любом случае, количество GPU-ядер можно будет увеличить всего в несколько раз (ну, на порядок), а значит, увлекательная гонка производительности близка к финишу. Конечно, можно ещё оптимизировать архитектуру чипа, расположение транзисторов, наращивать память, сменить воздушную СО на водяную, утончить техпроцесс, поставить два GPU на одну плату, использовать SLI и т. д., но глядя на гробик 480 ПЕЧИ (да и Radeon HD тоже хорош), становится страшно от осознания простой вещи - видеокарты близко подошли к тому пределу, за которым их уже нельзя использовать в персональном компьютере пользователя. И становится ясно, что при существующих технологиях производства чипов увидеть рейтрейсинг в коробке PC - нереально. Нам нужна в 100 раз большая производительность, но достичь её при современных тенденциях к тепловыделению - невозможно.

Финита ля комедия :-|

Apple Magic Mouse

После длительного юзания на работе дропнул дальнейшее использование этого девайса.

Гламурная мышь, но неудобная и непрактичная: тяжела из-за батареек, плохо скользит по коврику (а по голому столу - тем более), неудобно прижимать "виртуальную" правую клавишу и листать код в Xcode сенсором. Это всё равно как  пытаться использовать сенсорную клавиатуру на экране вместо привычной физической - все подобные потуги обречены на провал, как и попытка заменить бумажную книгу её электронным суррогатом... Одним словом, когда я после длительного использования яблочного "тараканчика" подключил к маку стандартную двухкнопочную PC-мышь с колёсиком, то вздохнул с облегчением :)

Fail, Apple.

четверг, 7 октября 2010 г.

Fashion Week

Я получил от дизайнера одежды приглашение на Ukrainian Fashion Week:


Никогда не был на таких фэшинах.
Надо сходить интереса ради :)

Update

Сходил на это мероприятие. Всё было замечательно! Коллекция называлась "Весна-лето 2011", поэтому многие девушки были в прозрачных "туниках", через которые всё проглядывало. Понятно что внимания на то, что они там на себя надели, я уже не обращал.

суббота, 2 октября 2010 г.

Пальто

 Шьёмся по-тихоньку :)


Это пока что только наброски из кусков материи, платье будет ушиваться на талии, подол станет короче. Белая выглядывающая полоска - это тыльная сторона подкладки.

А вот вблизи материал, из которого оно шьётся - итальянский зелёный вельвет:


По моей задумке, к платью будет прилагаться капюшон из чёрного бархата, который будет крепиться с тыльной стороны к подкладке пуговичками, он будет укрывать голову вместо шапки в холодное время и во время дождя. Сочетание зелёного и чёрного цветов кажется мне весьма эффектным, особенное если это вельвет и бархат :) Также в мою задачу входит сейчас поиск подходящих пуговиц, всего их необходимо 12 штук. Хочется достать пуговицы каплевидной формы, но не знаю, есть ли такие сейчас в продаже. Впрочем, это момент уже второстепенный.