Joe's CGЖурнал

Журнал

18 авг 2008

Пока я [censored] с изучением Direct3D 10, на подходе уже следующая версия API от Microsoft - 11. Напомню, что DirectX 10 получил путёвку в жизнь в конце 2006 года, когда стали доступны G80 от NVIDIA. 11 версия планируется в конце года, значит, период между двумя версиями составляет всего два года, что намного меньше периода разработки различных версий Direct3D 9 (около 5, кажется).

Впрочем, не нужно пугаться. Просто Microsoft похоже единственная, кто может держать различных вендоров в одной упряжке и двигать графику в правильном направлении. И делает это. Новый API будет неким гибридом, который будет способен работать с различным железом, начиная по крайней мере с SM 3.0 и заканчивая SM 5.0. Он будет чем-то вроде надмножества Direct3D 10, т. е. не будет кардинально отличаться в интерфейсах, что облегчит его изучение и возможно переход на него (в отличие от перехода с Direct3D 9 на 10).

Немного подробнее можно прочитать здесь: Preliminary view of DirectX 11

ATI, у которой уже есть в каком-то виде тесселятор, похоже, готовится успеть первой выпустить Direct3D 11 совместимый чип:

ATI разрабатывает видеоадаптер для DirectX 11
ATI работает над картой с поддержкой DirectX 11

Ссылка

22 июля 2008

Пытаясь в целях изучения перенести некоторые OpenGL-программы на Direct3D 10, я обнаружил, что одна из них работает неправильно. Долго описывать все злоключения, которые я испытал за последние три дня, отлаживая и выверяя код между GL- и D3D-версией, поэтому не буду. Как человек отчаявшийся, я предположил последний вариант - неправильно работает геометрический шейдер (расcчитавающий penumbra wedges). Код шейдера был скопипастен из Cg-шейдера, за исключением простых правок для HLSL10. Компилировался он без ошибок, что подсказывало мне, что всё должно быть правильно. Шейдер работал, но выдывал, к моему большому сожалению, неправильный результат.

В конце-концов, не найдя больше очевидных причин для неправильной работы, я полез в справку по D3DX10CreateEffectFromFile() и стал изучать флаги, с которыми шейдер можно комплировать (типично - D3D10_SHADER_DEBUG для отладки). В моём коде было много if-oв, и я решил попробовать флаг D3D10_SHADER_PREFER_FLOW_CONTROL. И мои надежды оправдались - шейдер заработал правильно! Правда, в описании флага написано "Tell compiler to use flow-control (when possible)". Почему компилятор сам не догадался использовать везде где нужно динамические переходы - для меня загадка.

И уже после этого нашёл ещё один подводный камень. Вот такой код работает неправильно:

for (int i = 0; i < 10; ++i)
{
   float Array[10] = {0.0, 1.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0};
   // Тут читаем элемент Array[i];
}

А такой - правильно:

float Array[10] = {0.0, 1.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0};
for (int i = 0; i < 10; ++i)
{   
   // Тут читаем элемент Array[i];
}

В чём разница, я так и не понял. Компилятор должен расположить такой массив в константных регистрах, независимо от того, где я собственно его объявил, и разницы в работе быть не должно. И даже если бы asm-код от этого поменялся и стал бы менее оптимальным, он всё равно обязан был работать правильно. Можно было бы посмотреть asm-листинг, но я в нём пока не разбираюсь. По крайней мере для ARB-кода, что генерирует Cg, разницы нет никакой.

Ссылка

19 июля 2008

Хотите узнать, как можно с помощью троих человек и современных компьютерных технологий устроить небольшую кровавую бойню?
Тогда смотрите:

Запустить видео по клику - Как делать игрыЗапустить видео по клику - Как делать игры

Ссылка

17 июля 2008

Чем дальше в изучении DirectX 10 я продвигаюсь, тем больше удивляюсь, насколько Direct3D 10 плохо документирован.

После чтения спеков расширений OpenGL, где всё разжёвано по самое не могу, есть issues и история изменений в документации, чтение DX SDK оставляет какой-то неприятный осадок очень сжатого изложения материала. Информации явно не хватает, и приходится лазить по коду и шейдерам демок из SDK, чтобы понять, как реализовать тот или иной функционал. В спеках расширений OpenGL всё наоборот - обычно всё разжёвано, а для сложных расширений в конце приводится краткий пример их использования.

Кроме того, чем дальше в лес, тем больше я нахожу неточностей в документации.
Вот например раздел Configuring Depth-Stencil Functionality (Direct3D 10), Bind Depth-Stencil Data to the OM Stage:

Bind the depth-stencil resource using a view.

D3D10_DEPTH_STENCIL_VIEW_DESC descDSV;
descDSV.Format = DXGI_FORMAT_D32_FLOAT;
descDSV.ResourceType = D3D10_RESOURCE_TEXTURE2D;
descDSV.Texture2D.FirstArraySlice = 0;
descDSV.Texture2D.ArraySize = 1;
descDSV.Texture2D.MipSlice = 0;

Если попытаться вставить этот код в проект, то он не скомпилируется, т. к. структура D3D10_DEPTH_STENCIL_VIEW_DESC вместо поля ResourceType теперь содержит ViewDimension, а структура D3D10_TEX2D_DSV больше не содержит полей FirstArraySlice и ArraySize. Похоже, документация писалась параллельно с рефакторингом API, а не после того, как он был утверждён окончательно.

Есть и другие неточности, но все их сейчас вспоминать и приводить не хочется.

Ссылка

27 июня 2008

Мультфильмы с двойным дном

Привет! Я нашёл ещё один фан-сайт анимационной студии Pixar:

Захабренные

Хотя много материала почерпнуто из уже найденного мною http://ipixar.ru/, есть и отдельные интересные вещи.
Например, Пасхальные яйца в мультиках Pixar.
Хотя я самостоятельно уже давно заметил, что мультфильмы Pixar так или иначе пересекаются между собой, всех "яиц" я конечно не знал.
Больше всего мне понравились камео с фургончиком Pizza Planet (который появляется практически во всех полнометражках, снятых после "Истории игрушек"), и комиксом "Суперсемейка", который маленький мальчик читает в приёмной стоматолога в мультфильме «В поисках Немо».

Также интересно прочитать, как создавались персонажи для мультфильма "Рататуй":

История одного дизайнера, или как они нарисовали Рататуй...
Продолжаем создавать персонажей мультфильма Рататуй вместе с Джейсоном Димером

Удивительно, насколько талантливые, изобретательные, увлечённые и трудолюбивые люди работают в Pixar - недаром их мультфильмы отличаются от продукции других анимационных студий. К слову - некоторые персонажи рисовались в карандашных набросках несколько тысяч раз, прежде чем были переведены в цифровую форму!

untitled | Мультфильмы с двойным дном

Конечно я неспроста сделал эту запись в блоге. Дело в том, что завтра состоится выход на экраны мультфильма "WALLE" студии Pixar! К сожалению, только в США, Колумбии и Бразилии. В России и Украине премьера состоится 3 июля, так что придётся немножечко подождать. А пока можно пересмотреть любимые DVD с "Суперсемейкой" и "Рататуем" :)

Ссылка

7 июня 2008

Нашёл в Сети страницу Дмитрия 'AND' Андреева - программиста, композитора музыки, дизайнера и демомейкера.

http://and.intercon.ru/

Между прочим, автор 3D-рендера движка X-Tend, который использовался в проектах Burut CT, таких как Kreed и Ubersoldier.
На сайте можно скачать демки Zoom3 (нечто вроде пародии на Doom3) и Squish.

Ссылка

24 янв 2008

Насмотревшись мультфильмов от Disney/Pixar я заинтересовался историей этой компании.

Немного поискав в Гугле, я нашёл описание становления компании - от лаборатории компьютерной графики на заре её становления, где несколько человек экспериментировали и закладывали её основы, до наших дней, где над фильмом работают сотни людей в десятках направлений, так или иначе необходимых, чтобы фильм появился на экране.

http://www.3dnews.ru/editorial/cinema-3/
http://www.atlant.ru/comar/stati_19175.htm

Фан сайт Анимационной Студии Pixar

Забавно провести параллель с миром разработки компьютерных игр. Меня впечатляет качество и артистичность последних творений Pixar - Суперсемейка, и особенно Рататуй (а также ждём Wall E и Игрушечную историю 3), я испытаваю наслаждение при их просмотре (отчасти потому что осознаю, сколько труда и технологий вложено в их производство, и что не понимают многие другие обыватели, любящие ходить в кинотеатр). В то же время как-то не очень впечатляют современные игры, тот же Unreal Tournament 3 и другие - как в плане графики, так и игрового процесса, нет того наслаждения.

Отчасти, конечно, потому, что в игровой индустрии меньше денег. Одна игра не в состоянии собрать ту кассу, которую может собрать полнометражный мультфильм (Рататуй - около 500 млн $). Поэтому и сил на разработку и шлифовку привлекается меньше. Во-вторых, игры должны выполнятся в реальном времени на достаточно ограниченном в скорости железе пользователя - отсюда и качество графики. В третьих, многие игры - именно игры, а не визуализаторы (скажем, всякие футболы и теннисы). И не смотря на все факторы, на рынке PC много откровенного трэша, который не может доставить игроку удовольствия ни графикой, ни геймплеем, ни звуком. Такие игры разрабатываются "одним программистом, одним художником, одним сценаристом и двумя моделлерами". В результате получается г., в которое нам предлагают играть. Жаль только, что "пипл хавает", а издатели издают, раз есть спрос.

Ссылка

31 дек 2007

C Новым 2008 годом!

Вот и год прошёл, немало воды утекло!
В этом году мне удалось проработать краеугольный камень современного 3D-движка - наложение на сцену мягких теней. В следующем году они подвергнутся оптимизации и всяческой доводке, сглаживанию разных "углов". Но вечно заниматься одними тенями неинтересно, и я собираюсь постепенно переключиться на другие вещи.

Во-первых, у меня появились планы по переделке графического движка в мультирендер. Скоро выйдет OpenGL 3.0, а старый наработанный код выбрасывать не хочется, да и рано - не везде будет новый API, и не сразу он станет стабильным. В конце-концов, нельзя закрывать глаза и на Direct3D 10 - наиболее эффективный API на сегодняшний день. Скорее всего, к концу года и он будет внедрён третьим рендером :)

Во-вторых, графические эффекты. Меня интересуют:
1) Полупрозрачные объекты, стёкла, эффекты преломления.
2) Более сложные алгоритмы по-пиксельного освещения.
3) Эффект Depth-of-Field, посмотрим насколько быстрым/качественным его можно сделать.
4) Объёмный свет.

Это планы, если ничего серьёзно им не помешает - постараюсь реализовать.

Ссылка

30 дек 2007

Z-Trek Demo 2007 завершено!

Ну наконец-то, СВЕРШИЛОСЬ!

Я завершил работу над первой демкой движка Z-Trek, как и обещал два месяца назад. Очень важное для меня событие.
Важное во-первых, потому что я в конце-концов реализовал реалистичные мягие тени с приемлемой производительностью. Отныне и навсегда это будет ключевой особенностью моего движка. Важное во-вторых, потому что это - Z-Trek. Первая демонстрация будущего амбициозного движка. Он ещё в пелёнках, но это он.
Важное в третьих, потому что это превращает меня в серьёзного человека. У меня есть любимое дело - компьютерная графика, и я добился на этом поприще первого серьёзного успеха. Есть резон продолжать заниматься этим и дальше, в надежде с годами освоить эту область в совершенстве. В следующем году дело пойдёт веселее и быстрее, и надеюсь, вы увидете множество кульных спецэффектов. Впереди маячат супербыстрые ускорители и им нужны сложные и интересные задачи, а не миллионы полигонов на Tranform n Light :).

Адрес архива: http://joescg.narod.ru/archives/ZTrek_Demo_2007.zip

Ну вот и всё. Да! Скриншоты из демо:

CPLS01 | Z-Trek Demo 2007 завершено!

CPLS02 | Z-Trek Demo 2007 завершено!

CPLS03 | Z-Trek Demo 2007 завершено!

CPLS04 | Z-Trek Demo 2007 завершено!

FZWT01 | Z-Trek Demo 2007 завершено!

FZWT02 | Z-Trek Demo 2007 завершено!

FZWT03 | Z-Trek Demo 2007 завершено!

FZWT04 | Z-Trek Demo 2007 завершено!

Ну всё, теперь отдыхать и встречать Новый Год!

Ссылка

27 дек 2007

Crayon Physics Deluxe

Случайно наткнулся на вот такую интересную игрушку одного студента:

http://www.kloonigames.com/crayon/

Kloonie | Crayon Physics Deluxe

Очень забавно и необычно... Можно поиграть в прототип с более упрощённой физикой: http://www.kloonigames.com/blog/games/crayon/
Я попробовал, получилось пройти :) Правда игра коротенькая, но позволяет почувствовать идею.

Ссылка

25 дек 2007

Ну вот, приехали!

Значит, попытался я отладить работу программы на видеокарте ATI Radeon X1300.

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

Работал я на Microsoft Windows Vista, Catalyst 7.9.  Началось всё с того, что мягкие тени съедали производительность, но их попросту не было видно.
Немного повозившись, обнаружил пренеприятное обстоятельство - при рендеринге с блендингом в FP буфер кадра видеокарта обрезала результаты расчётов в промежуток [0..1]. Хотя по документации такое делать нельзя! Более того, подняв доки по расширению WGL_ATI_pixel_format_float, я вставил в код запрос вида

GLint FloatMode;
glGetIntegerv(GL_RGBA_FLOAT_MODE_ATI, &FloatMode);

Этот простой вызов генерировал ошибку OpenGL. Выходит, ATI не в состоянии правильно реализовать в драйвере даже свои собственные немногочисленные расширения. Формально железо поддерживает рендеринг в FP формат с блендингом, но кривой драйвер не даёт это сделать. Ладно, вернулся в Windows XP и решил протестировать Catalyst 7.9 для XP, а заодно скачал новейший драйвер Catalyst 7.12. И тут началось такое, что ни в сказке сказать, ни пером написать. Вот, полюбуйтесь на разнообразие багов:

XP, Catalyst 7.9. Как выяснилось, возникает из-за блендинга в fixed буфер кадра, блендинг между проходами. Этакие забавные сине-чёрные кольца аттенюации, которым неоткуда взяться в шейдере (шейдер пока вообще считает intensity и не имеет дела с цветом).
ATI_Bug01_Cat7_9 | Ну вот, приехали!
Тот же драйвер, но строчка glEnable(GL_BLEND) закомментирована. Конечно картинка рисуется неправильная, но зато видно, что сине-чёрные кольца пропали. Ну хоть обнаружил в чём баг :)
ATI_Bug01_Cat7_9(2) | Ну вот, приехали!
Тот же драйвер, попытка нарисовать мягкие тени. Глючит очень страшно, скриншот этого не передаёт, скорость в районе 1 fps. Похоже, что игнорируется тест трафарета при рисовании wedges. Ошибки с GL_RGBA_FLOAT_MODE_ATI под XP нет, хотя версия драйвера та же. Красным я обвёл области, где "видюха" всё-таки умудрилась рассчитать пенумбру! Мать её (видюхи то есть).
ATI_Bug01_Cat7_9(3) | Ну вот, приехали!
Ну и последний скриншот, надежда на Catalyst 7.12. Вот такая картинка получается при рисовании чётких стенсельных теней:
ATI_Bug_Cat7_12 | Ну вот, приехали!

Код не менялся. Я просто удалил Калеку 7.9, перезагрузил компьютер, поставил Калеку 7.12 и снова перезагрузил компьютер, потом запустил программу. Вот такое вот освещение с новейшими драйверами получается, м-да. Имеет ли смысл вообще что-то переписывать и искать (возможные) баги в своём коде, если каждый раз старая песня, да на новый лад?

Поэтому, скорее всего, варианта мягких теней под ATI никто не увидит. Только чёткие, и то - под Windows Vista. Сначала я очень сильно расстроился, но обнаружив такую карусель багов, отдуши повеселился над этими картинками. Какие же кривые ручонки надо иметь, чтобы писать ТАКИЕ драйверы...

Ссылка

21 дек 2007

Z-Trek Progress

Ну что же,  Demo 2007 движется к финишу, как собственно и сам год :)
Сейчас занимаюсь отладкой OpenGL-кода для ATI - отловил пару простых багов, заставил работать чёткие тени.

Зомби ходит по кругу замкнутого помещения, а камера двигается перед ним.

FZWT_ATI | Z-Trek Progress

Впереди наиболее ответственная задача - работа мягких теней на ATI, т. к. используются не только шейдеры, но и особенности OpenGL API - например, расширение GL_NV_copy_depth_to_color, которого нет на Radeon.

Думаю подготовить две демосцены, называться они будут Fat Zombie Walking-Tour и Crazy Point Light Source.
Необходимо будет продумать расположение моделей в помещении и затекстурировать их подобающим образом.
Закончить всё планирую к 27-28 января.

До встречи!

Ссылка

10 дек 2007

Z-Trek Progress

Занимался отладкой сплайнов из математической библиотеки - Безье, Кочанека, Catmull-Rom, Би-сплайнов. Их я туда внедрил ещё года два назад, но до сих пор не использовал. Отрефакторил код и проверил былую работоспобоность сплайнов - теперь они будут задавать движение камеры во время облёта и ходьбу монстров по определённому пути.

Z-TrekCurve01 | Z-Trek ProgressZ-TrekCurve02 | Z-Trek ProgressZ-TrekCurve03 | Z-Trek Progress

Кстати, помните кадры из фильма Doom, где Reaper отбрыкивался с бензопилой от Pinky Demon-а? Это всё - сгенерированные на компьютере кадры. Universal Pictures решил "модернизировать" монстра из игры, и вместо механических ног ему приделали инвалидную коляску, которая осталась от калеки Маркуса Пинзеровски.

doom_monster | Z-Trek Progress

doom_pinky2 | Z-Trek Progress

В этой моей самой любимой сцене из фильма Pinky выглядет конечно круче, чем в самой игре - художники из Universal постарались на славу.
Кстати многие фанаты рисуют и даже делают реальные модели этого монстра!

http://planetdoom.gamespy.com/View.php?view=POTD.Detail&id=122
http://www.geocities.com/leedlebeetle/pinkydemon.html

Ссылка

5 дек 2007

Z-Trek Progress

На этой неделе по некоторыми причинам не получилось сделать столько, сколько хотелось бы.
В добавок какой-то червь залез в XP и поломал Explorer.exe. Загружаюсь пока в Windows Vista, а дальше буду решать что делать - переустанавливать XP (у меня GRUB загрузчик от SUSE, боюсь XP его поломает), или как-то чинить. 

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

ZTrek01 | Z-Trek Progress

ZTrek02 | Z-Trek Progress

И последний скриншот - показывает как сильно тени могут смягчаться, если источник света рядом с отбрасывающими тени предметами.
Для алгоритма Penumbra Wedges не надо привлекать разные заумные "хаки", чтобы сделать подобие мягкой тени - всё получается автоматически, вытекая из идеологически правильной концепции отображения теней. Это я загнул конечно :)

ZTrek03 | Z-Trek Progress

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

Пока всё.

Ссылка

27 ноя 2007

Z-Trek Progress

Ну вот и первые скриншоты с мягкими стенсельными тенями, которые будут демонстрироваться в демке.
Конечно над артистичностью ещё нужно работать, но общее впечатление, думаю, они вам, анонимные читатели, предоставят вполне.
Все скриншоты показывают fps, который получается от выигрыша в использовании Early-Z и Early Stencil.

Мягкие тени от двух источников света большого радиуса, минимально вменяемое разрешение 640x480.
Используется 2X-downsampling тени для более быстрого рендеринга на моей старушке GF 6600 GT.

01 | Z-Trek Progress

02 | Z-Trek Progress

Тени от двух источников света меньшего радиуса, но без downsampling-а.
Как видим, можно создавать компромисс между качеством/скоростью за счёт уменьшения кол-ва фрагментов в пенумбре тем или иным способом.

03 | Z-Trek Progress

04 | Z-Trek Progress

(Небольшая тёмная линия от гаечного ключа в руках зомби - это погрешности расчёта adjacency для MD5-модели.
Не могу спросить Кармака, как он правильно считает её в Doom III :). Думаю что как-то устраню это позже.)

Ну и наконец тени в разрешении 800х600, но только один источник света.
Со вторым источников fps, к сожалению, падает до 13-15 кадров, наблюдать это пока неинтересно.
05 | Z-Trek Progress
(Ну и опять - не обращайте внимание на полоску-артефакт).

Ну что сказать? Я возродил из пепла идею Ульфа Ассарсона, Томаса Акенин-Мюллера, Ульфа Боргенштама и др., т. к. похоже все о ней прочно забыли.

Если получится разжиться мощным видеоускорителем, появится повод для более смелых попыток. Пока что приходится только приблизительно оценивать, насколько быстрее будет обрабатываться сцена, если её прорисовывать на чём-то вроде GF 8800 GTX или SLI-варианте этой видеокарты... Конечно в более сложных сценах даже такие видеоускорители будут подтормаживать, но рассчитываю что что-то вроде демосцены-концепта с производительностью в 30 и более fps они смогут показать. А дальше - не за горами G92, G100 и т. д. :) Поживём - увидим.

Лишь бы Early-Stencil на них работал всегда, тьфу-тьфу-тьфу.

Ссылка

Архив 

Следующие записи