![]() |
|
Модераторы: Rickert |
![]()
|
|
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 7 Всего: 232 |
Скажите, какие именно скриншоты нужны - диаграммы, схемы, графики или скрины из RenderMonkey ? -------------------- ![]() |
|||
|
||||
| Sardar |
|
|||
![]() Бегун ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6986 Регистрация: 19.4.2002 Где: Нидерланды, Groni ngen Репутация: нет Всего: 317 |
Скрины, т.к. RenderMonkey ставить не хочеться, всё равно в плотную не занимаюсь, но интересно как это выглядит на практике. Интересен эффект "горячего воздуха", когда картинка "плывёт"/искривляеться.
Статья ясная, читаеться легко. Есть моменты не до конца понятные, например, обьявляя входную структуру для вертексного шейдера обьявляем требуемую инфу, а какие вообще параметры возможны (обобщённые по функционалу)? Также вертексный шейдер как я понял получает на вход одну вершину за один "выполняемый цикл", вершины на шейдер идут потоком в не известном порядке, механизмов запомнить выполнение прошлого цикла (глобальные переменные и т.д.) нет, тогда как узнать с какой вершиной сейчас работаем? Иначе просто мало чего можно сделать с ней... а может я думаю "не в том направлении". Вообщем одной статьи явно не достаточно -------------------- Опыт - сын ошибок трудных © А. С. Пушкин Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik Оценить мои качества можно тут. |
|||
|
||||
| mr.DUDA |
|
||||||||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 7 Всего: 232 |
Возможны параметры следующих типов (каждый определяется своей семантикой): POSITION - координаты вершины NORMAL - нормаль к вершине TEXCOORD - текстурные координаты TANGENT и BINORMAL - используются для bump mapping, определяют тангенциальное пространство COLOR - цвет вершины, на самом деле может содержать любые пользовательские данные FOG - коэффициент затуманивания, может также рассматриваться как цвет и интенсивность тумана DEPTH - значение z-буфера для вершины BLENDWEIGHT, BLENDINDICES - слабо представляю себе их назначение, что-то вроде сглаженных координат вершины, или похоже на это SAMPLE, PSIZE, TESSFACTOR, POSITIONT - мне неизвестны Кроме этих параметров, определённых для каждой вершины, можно определить параметры для шейдерной программы в целом. Количество и формат этих параметров определяются возможностями видеокарты.
На самом деле, шейдерной программе должно быть "пофигу", что это за вершина, т.к. по идее ты не знаешь заранее, сколько всего вершин и в каком порядке вершины располагаются в модели. Ведь модель делается заранее в 3D-studio, и всем заправляет моделлер, а ему всё равно, кто и как будет эту модель использовать, не так ли ? С другой стороны, если модель формируется программно, то ничего не мешает добавить в описание вершин свои собственные (пользовательские) данные, например в VertexColor, которые попадут в шейдер через COLOR-переменную. Помимо всего прочего, обычно допускается не один а несколько наборов данных одной семантики, т.е. ты можешь передать шейдеру 3-4 дополнительных вектора, что эквивалентно 12-16 float-значениям. Согласись, этого более чем достаточно. Тем более, что твоё 3D-приложение самостоятельно определяет формат вершин и заполняет их данными, т.е. у тебя есть возможность передать шейдеру всё что угодно в каком угодно количестве.
Согласен, это всего лишь вершина айсберга. Но ведь надо с чего-то начать, правда ? Я изложил всё, о чём мне известно на текущий момент, в чём я, имхо, разобрался. Недостающие главы требуют только времени на написание, проблем не будет. Единственно, придётся попросить кого-нибудь сведущего в OpenGL и D3D сделать примеры с описанием, как прикручивать шейдер к реальной программе, т.к. пока что я работаю с движком OGRE, который абстрагируется от реализации 3D, т.е. выстраивает фасад над OpenGL и Direct3D.
На практике всё выглядит, как в реальной игре. Различий нет. Например, эффект "горячего воздуха" выглядит точно так же как в GTA:San Andreas, точно говорю. Шейдеры ведь везде одинаковые, просто тот кто их использует первым, может гнуть пальцы, а остальные типа за ним "повторяют"... Увидеть работу шейдера по скриншоту - это то же самое что снять скрин с GTA, где над асфальтом горячий воздух, и искать в полученном скрине "шейдер". Нереально. К сожалению, GIF я сделать пока не могу, а видео займёт слишком много места, уж проще скачать RenderMonkey и посмотреть там -------------------- ![]() |
||||||||
|
|||||||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 7 Всего: 232 |
P.S.
добавил скриншоты в статью. -------------------- ![]() |
|||
|
||||
| Sardar |
|
|||
![]() Бегун ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6986 Регистрация: 19.4.2002 Где: Нидерланды, Groni ngen Репутация: нет Всего: 317 |
Так для ясности, как рисуем кадр с одним проходом:
P.S. хорошо бы обсуждение вынести в отдельный топ. -------------------- Опыт - сын ошибок трудных © А. С. Пушкин Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik Оценить мои качества можно тут. |
|||
|
||||
| mr.DUDA |
|
||||||||||||||||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 7 Всего: 232 |
Ну, всё не так уж и плохо Вертексный считает для трёх точек полигона позицию и что-то ещё. Это "что-то ещё" интерполируется достаточно быстрым алгоритмом, а позиция после вертексного шейдера уже показывает, куда на экране ляжет точка. То есть, по сути вертексный проецирует полигон на экран и показывает, чем этот полигон надо "заливать". Пиксельный заливает. Точек получается ровно столько, сколько их внутри треугольника на экране, не так уж и много, правда ?
Скорее, для модели или группы моделей. Полазив в samples для DX SDK, нашёл пример:
Внешние данные передаются через отдельные переменные, без семантики. Пример параметра для ps_main: uniform float diffuseLight
Всё правильно.
Да, всё так и есть, если я врубаюсь. Отсечение делает не шейдер, хотя он может повлиять на z-буфер. Точнее пока не скажу, т.к. самому надо разобраться Захлебнуться шейдеры не могут, по причине описанной в начале поста. Добавлено @ 08:50 Вот, что написано в документации D3D по рендерингу с шейдерами:
И пример кода (C#):
-------------------- ![]() |
||||||||||||||||
|
|||||||||||||||||
| Змий |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 6.12.2005 Репутация: нет Всего: нет |
Я так понял, векторные шейдеры базируются на информации с векторов объектов, а пиксельные шейдеры прямо воздействуют на картинку?
Так ли работает шейдер эффекта "горячего воздуха": сдвигает пиксели изображения в хаотичном порядке или это тоже distortion текстура? Я хотел спросить - в игре Knights of The Old Republic эффект от "толчков силы" сделан шейдером? А сам шейдер, если им было это сделано воздействует на куб изображения тем же distortion? |
|||
|
||||
| mr.DUDA |
|
||||||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 7 Всего: 232 |
Неточная формулировка. Не с векторов, а с вершин полигонов объекта. Вершина (вертекс) содержит набор информации: там, к примеру, может быть или не быть текстурная координата, нормаль к вершине, цвет вершины и др. Пиксельные шейдеры как бы "заливают" треугольник, лежащий в экранной плоскости, пикселами.
Этот шейдер берёт пиксел из специальной текстуры, содержащей монохромный шум. Затем по цвету этого пиксела определяется сдвиг для текстурных координат, по которым выбирается пиксел из обычной текстуры. В качестве "обычной текстуры" в том шейдере используется всё, что было отрисовано на первом проходе рендеринга, т.е. "нормальное" содержимое кадра рассматривается в свою очередь как текстура, которую мы будем искажать на втором проходе рендеринга.
Что за куб имеется ввиду ? -------------------- ![]() |
||||||
|
|||||||
| Змий |
|
||||||
|
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 6.12.2005 Репутация: нет Всего: нет |
Спасибо
Возможно ли редактировать эту текстуру, например для другогго типа искажений?
Энтити, символизирующее экран и подвергающееся наложению distortion текстуры, как вы сказали, когда описывали шэйдер haze. |
||||||
|
|||||||
| mr.DUDA |
|
||||||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 7 Всего: 232 |
Можно в принципе сделать 3D-текстуру, в разных слоях которой будут маски для пиксельного шейдера. В зависимости от времени выбирать слой и использовать его как маску.
Конечно! Берём DirectX Texture Tool, открываем нашу 3D-текстуру с шумом, сохраняем под другим именем, и добавляем в неё свои собственные слои, нарисованные в фотошопе
Вообще-то, не куб, а плоскость из двух полигонов, сложенных вместе - т.е. прямоугольник. Модель называется screenAlignedQuad. Quad - потому что квадрат, screenAligned - потому что координаты модели подобраны так, чтобы углы квадрата совпадали с углами экрана. -------------------- ![]() |
||||||
|
|||||||
| Змий |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 6.12.2005 Репутация: нет Всего: нет |
Вот ещё вопрос. Если например есть анимированная текстура *.gif или кадры *.jpg их можно натянуть на screenAlignedQuad чтобы она прощёлкивалась с возвратом на первый кадр после последнего до какого то момента?
А можно как нибудь обойтись без Dx Texture Tool? Мне не закачать SDK - слишком много для моего старого модема |
|||
|
||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 7 Всего: 232 |
Вроде бы, для таких случаев используют динамически обновляемую текстуру, а не шейдер. З.Ы. в приаттаченном архиве - Texture Tool для 9го DX SDK. Насчёт "не могу выложить" я имел ввиду что не могу выложить SDK Присоединённый файл ( Кол-во скачиваний: 15 )
DxTex.zip 212,86 Kb-------------------- ![]() |
|||
|
||||
| Змий |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 6.12.2005 Репутация: нет Всего: нет |
Спасибо, но когда пытаюсь открыть файл, мне пишет, что не может найти d3dref.dll
А также про глубину цвета. |
|||
|
||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 7 Всего: 232 |
Нужен установленный DirectX 9.0c, без него не запустится.
-------------------- ![]() |
|||
|
||||
| Змий |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 6.12.2005 Репутация: нет Всего: нет |
У меня сейчас стоит DirectX 9.0c. По крайней мере, он так пишет в dxdiag.
Но всё равно, ошибка выскакивает. |
|||
|
||||
![]()
|
| Правила форума "Программирование игр, графики и искуственного интеллекта" | |
|
|
НА ЗЛОБУ ДНЯ: Дорогие посетители, прошу обратить внимание что новые темы касающиеся новых вопросов создаются кнопкой "Новая тема" а не "Ответить"! Любые оффтопиковые вопросы, заданные в текущих тематических темах будут удалены а их авторы, при рецедиве, забанены.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rickert. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Программирование игр, графики и искусственного интеллекта | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |