Elite Games - Свобода среди звезд!
.
ВНИМАНИЕ!
Наша конференция посвящена космической тематике и компьютерным играм.
Политические вопросы и происходящие в мире события в данный момент на нашем сайте не обсуждаются!

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

Поиск | Правила конференции | Фотоальбом | Регистрация | Список пилотов | Профиль | Войти и проверить личные сообщения | Вход

   Страница 2 из 3
На страницу: Пред.  1, 2, 3  След. | Все страницы
Поиск в этой теме:
Канал Игры Мечты: «HLSL»
Jurec
 348 EGP


Ведущий раздела
Рейтинг канала: 4(76)
Репутация: 102
Сообщения: 1441 Заблокирован
Откуда: Seattle
Зарегистрирован: 25.02.2006
Анимация есть? Типа что волной расходиться и затухает постепенно?

+ для каждого попадания - надо рисовать свою сферу?
_________________
MOV topka, C++
    Добавлено: 23:28 15-06-2010   
~DJ~
 640 EGP


Рейтинг канала: 5(115)
Репутация: 143
Сообщения: 1218
Откуда: Тёмный город на Неве
Зарегистрирован: 25.01.2006
Зачем свою? Все на одной.
_________________
Весна пришла откуда не ждали
    Добавлено: 23:40 15-06-2010   
DIMOSUS.X
 996 EGP


Рейтинг канала: 4(67)
Репутация: 188
Сообщения: 3252
Откуда: Vilnius/Minsk
Зарегистрирован: 06.08.2008
Анимация есть - в шейдер передаются переменные, указывающие на текущее состояние каждого поподания. Сначала появляется небольшое пятно, набирает яркость и начинает переходить в кольца, после чего плавно затухает. Также скролится текстура преломлений.

Сфера одна, делал на третьих шейдерах - число команд для обработки пяти поподаний ~150. В Rendermonkey фпс больше 2к.

Шейдер разбит на два - один отрисовывает цвет, второй карту нормалей, для расчета преломлений.
_________________
Даже ежики ежиков могут с трудом,
Иначе бы ежики были кругом.

Последний раз редактировалось: DIMOSUS.X (23:43 15-06-2010), всего редактировалось 1 раз
    Добавлено: 23:42 15-06-2010   
Jurec
 348 EGP


Ведущий раздела
Рейтинг канала: 4(76)
Репутация: 102
Сообщения: 1441 Заблокирован
Откуда: Seattle
Зарегистрирован: 25.02.2006
понял
на каждые 5 попаданий - своя сфера?
_________________
MOV topka, C++
    Добавлено: 23:44 15-06-2010   
DIMOSUS.X
 996 EGP


Рейтинг канала: 4(67)
Репутация: 188
Сообщения: 3252
Откуда: Vilnius/Minsk
Зарегистрирован: 06.08.2008
Повторяю - сфера одна и отрисовывается в один проход
_________________
Даже ежики ежиков могут с трудом,
Иначе бы ежики были кругом.
    Добавлено: 23:49 15-06-2010   
Jurec
 348 EGP


Ведущий раздела
Рейтинг канала: 4(76)
Репутация: 102
Сообщения: 1441 Заблокирован
Откуда: Seattle
Зарегистрирован: 25.02.2006
т.е. там передача массива uniform`ов (или как там оно называется в HLSL) а потом просто циклом обрабатывается? такой себе 3.0 шейдер?
_________________
MOV topka, C++
    Добавлено: 23:51 15-06-2010   
DIMOSUS.X
 996 EGP


Рейтинг канала: 4(67)
Репутация: 188
Сообщения: 3252
Откуда: Vilnius/Minsk
Зарегистрирован: 06.08.2008
какие массивы? какие циклы? Подозрение.
Зачем городить огород? Шейдер почти линейный (только оптимизации if 'ами)

добавлено спустя 6 минут:
http://ipicture.ru/uploads/100616/iYO3LaLQ5V.jpg
это на фоне
_________________
Даже ежики ежиков могут с трудом,
Иначе бы ежики были кругом.

Последний раз редактировалось: DIMOSUS.X (00:01 16-06-2010), всего редактировалось 1 раз
    Добавлено: 00:01 16-06-2010   
Варсик
 545 EGP


Рейтинг канала: 4(81)
Репутация: 117
Сообщения: 4039
Откуда: Москва
Зарегистрирован: 22.12.2002
Стоп... У мебя максимум 5 попаданий одновременно может отрисоваться, так?
_________________
WARNING: By reading this post you accept that this post is genius.
    Добавлено: 01:34 16-06-2010   
DIMOSUS.X
 996 EGP


Рейтинг канала: 4(67)
Репутация: 188
Сообщения: 3252
Откуда: Vilnius/Minsk
Зарегистрирован: 06.08.2008
Да, решил остановиться на пяти. Так как щит немонолитный, а разбит на секции, у больших кораблей количество одновременно отрисовываемых поподаний будет от 20 и выше.
_________________
Даже ежики ежиков могут с трудом,
Иначе бы ежики были кругом.
    Добавлено: 06:17 16-06-2010   
Jurec
 348 EGP


Ведущий раздела
Рейтинг канала: 4(76)
Репутация: 102
Сообщения: 1441 Заблокирован
Откуда: Seattle
Зарегистрирован: 25.02.2006
DIMOSUS.X :
Да, решил остановиться на пяти.

Вот теперь всё стало ясно. Улыбка Надо мне научиться правильно вопросы задавать Улыбка

DIMOSUS.X :
у больших кораблей количество одновременно отрисовываемых поподаний будет от 20 и выше

Если сделаешь это опять же этими if`ами - убъешь производительность. Тут надо похитрее как-то.
_________________
MOV topka, C++
    Добавлено: 09:17 16-06-2010   
DIMOSUS.X
 996 EGP


Рейтинг канала: 4(67)
Репутация: 188
Сообщения: 3252
Откуда: Vilnius/Minsk
Зарегистрирован: 06.08.2008
Не понял, почему убъю? Ифы просто отсекают лишние вычисленя, в случае отсутствия поподаний. Пяток ифов в одном шейдере фпс не снизят - проверено.

добавлено спустя 6 минут:
Я вот сейчас задумался о SSAO - реализовать его вполне по силам, но вот нужен ли он в комосе?
_________________
Даже ежики ежиков могут с трудом,
Иначе бы ежики были кругом.

Последний раз редактировалось: DIMOSUS.X (09:42 16-06-2010), всего редактировалось 1 раз
    Добавлено: 09:42 16-06-2010   
Guest
 2075 EGP


Модератор
Рейтинг канала: 5(167)
Репутация: 376
Сообщения: 27975
Откуда: Моск.
Зарегистрирован: 12.10.2004
A почему не сделать мультипроходный вариант, со сложением результата? Никаких ветвлений, количество попаданий не ограничено...
_________________
Трещит земля как пустой орех
Как щепка трещит броня
    Добавлено: 20:35 16-06-2010   
DIMOSUS.X
 996 EGP


Рейтинг канала: 4(67)
Репутация: 188
Сообщения: 3252
Откуда: Vilnius/Minsk
Зарегистрирован: 06.08.2008
не хотел заморачиваться - сделал в лоб

Немного переделал

_________________
Даже ежики ежиков могут с трудом,
Иначе бы ежики были кругом.
    Добавлено: 21:10 16-06-2010   
Magistr_AVSH
 605 EGP


Модератор
Рейтинг канала: 2(16)
Репутация: 119
Сообщения: 2705
Откуда: Росс 154 - планета Мерлин.
Зарегистрирован: 26.12.2009
Надо что бы много разных было, для разных щитов, так что...
_________________
Добрый и сытый кот.
    Добавлено: 00:13 17-06-2010   
Guest
 2075 EGP


Модератор
Рейтинг канала: 5(167)
Репутация: 376
Сообщения: 27975
Откуда: Моск.
Зарегистрирован: 12.10.2004
DIMOSUS.X :
Еще немного выноса мозга, и добавил преломление

для реализации пришлось задействовать 7 отдельных шейдеров...

А я с преломлением один раз заморочился, понял принцип действия, но до реализации тогда руки не дошли Расстроен Предполагалось делать рендер всего непрозрачного в один проход, плюс маска дальности, затем во втором проходе рендерить искажение в нормалмапу для преломляющей геометрии с отрезкой лишних частей по маске из первого шага, ну и потом уже по сути пост-эффектом (потому что screen-space, чистое 2d на одном кваде) давать искажение. Т.е. 3-4 шейдера, 2 техники.
Сейчас я те выкладки не могу уже вспомнить полностью.Расстроен

Расскажи, как ты сделал?
_________________
Трещит земля как пустой орех
Как щепка трещит броня
    Добавлено: 21:41 18-06-2010   
DIMOSUS.X
 996 EGP


Рейтинг канала: 4(67)
Репутация: 188
Сообщения: 3252
Откуда: Vilnius/Minsk
Зарегистрирован: 06.08.2008
Подозрение.
Как обычно в лоб.
Первый рендер общий диффуз (преломляющие объекты не рендерятся) в буффер R8G8B8
Второй - диффус в HDR16 текстуру, в два раза меньшего разрешения (блюму больше и не нужно)
Третий проход - в R8G8B8 рендерятся преломляющие оъекты, при этом на них натягивается текстура нормалей, а фон устанавливается цветом 0.5f, 0.5f, 1.0f. Разрешение также в два раза меньше разрешения экрана - получается приятная легкая замыленность преломлений.
Далее идет трех этапная обработка блюма (отсечение, размытие по х, размытие по y)
И на конец на квад финальный шейдер выводит картинку, полученную искажением первого буфера по полученной карте нормалей с последующим наложением блюма.

добавлено спустя 11 минут:
Кстати - решил заюзать Z-buffer для отсечения по дальности видимости.
Принцип таков - рендерим бэкграунд и планеты.
Рендерим все остальные объекты с маской в альфа канале.
Далее по данным из буффера глубины и учетом маски накладываем второй проход на первый.
Я ничего не упустил?

добавлено спустя 12 минут:
Или не заморачиваться и добавить в шейдеры станций и кораблей параметр прозрачность?
_________________
Даже ежики ежиков могут с трудом,
Иначе бы ежики были кругом.

Последний раз редактировалось: DIMOSUS.X (22:56 18-06-2010), всего редактировалось 2 раз(а)
    Добавлено: 22:56 18-06-2010   
Guest
 2075 EGP


Модератор
Рейтинг канала: 5(167)
Репутация: 376
Сообщения: 27975
Откуда: Моск.
Зарегистрирован: 12.10.2004
DIMOSUS.X :
Кстати - решил заюзать Z-buffer для отсечения по дальности видимости.
Принцип таков - рендерим бэкграунд и планеты.
Рендерим все остальные объекты с маской в альфа канале.
Далее по данным из буффера глубины и учетом маски накладываем второй проход на первый.
Я ничего не упустил?

Эм... А зачем, никак не догоняю?
Вырубил Z-буферизацию.
Отрендерил фон. Гут.
Врубил буферизацию (или не врубил - смотря какая геометрия у планет).
Отрендерил планеты суммой по альфе
SrcBlend = One;
DestBlend = Zero; Гут.

Отрендерил геометрию в том же режиме. Что заслонено - будет вынуто из рендера ранним z-отсечением на аппаратном уровне. Что сверху - будет сверху нарисовано. Где ничего нет - будет просвечивать буфер.

Зачем дополнительная операция тестирования по маске, если всё это аппаратно можно сделать?
DIMOSUS.X :
Как обычно в лоб.
Первый рендер общий диффуз (преломляющие объекты не рендерятся) в буффер R8G8B8
Второй - диффус в HDR16 текстуру, в два раза меньшего разрешения (блюму больше и не нужно)
Третий проход - в R8G8B8 рендерятся преломляющие оъекты, при этом на них натягивается текстура нормалей, а фон устанавливается цветом 0.5f, 0.5f, 1.0f. Разрешение также в два раза меньше разрешения экрана - получается приятная легкая замыленность преломлений.

А что дешевле - делать два раза просчёт геометрии или ещё один шаг понижения разрешения 2x2?
Я в паре с Калемом делал сразу рендер картинки в полноразмерную текстуру HDR16, оттуда уже отсечение и даунсэмплинг под блюм, т.е. геометрический проход только один, потом работа с квадом. Проблема была только с FSAA, да и то - если невнимательно читать директиксовый мануал (надо менять формат буфера глубины вовремя).

Во, а нормалку преломления интересно, у меня по-другому было, спасибо за полезный типс Улыбка

добавлено спустя 1 минуту:
DIMOSUS.X :
Или не заморачиваться и добавить в шейдеры станций и кораблей параметр прозрачность?

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

Последний раз редактировалось: Guest (23:47 18-06-2010), всего редактировалось 1 раз
    Добавлено: 23:47 18-06-2010   
DIMOSUS.X
 996 EGP


Рейтинг канала: 4(67)
Репутация: 188
Сообщения: 3252
Откуда: Vilnius/Minsk
Зарегистрирован: 06.08.2008
Guest :
Эм... А зачем, никак не догоняю?
Вырубил Z-буферизацию.
Отрендерил фон. Гут.
Врубил буферизацию (или не врубил - смотря какая геометрия у планет).
Отрендерил планеты суммой по альфе
SrcBlend = One;
DestBlend = Zero; Гут.

Видимо я тот еще ламер - так как ни фига не понял...
Guest :
А что дешевле - делать два раза просчёт геометрии или ещё один шаг понижения разрешения 2x2?

в соответствии с моими замерами, рендер R8G8B8 + HDR16/2х2 обходится дешевле полноэкранного HDR16
_________________
Даже ежики ежиков могут с трудом,
Иначе бы ежики были кругом.
    Добавлено: 00:24 19-06-2010   
Guest
 2075 EGP


Модератор
Рейтинг канала: 5(167)
Репутация: 376
Сообщения: 27975
Откуда: Моск.
Зарегистрирован: 12.10.2004
DIMOSUS.X :
Видимо я тот еще ламер - так как ни фига не понял...

Нет, это я так объяснил. Сорри, быль пъян. Перебрал...

В общем, есть такая штука - альфаблендинг.
Почитать можно примерно отсюда: http://msdn.microsoft.com/en-us/library/bb172255(v=VS.85).aspx
Хотя в доках самого DirectX SDK более вменяемые статьи.

Принцип - сложение по формуле (для каждого пикселя):
Код:
Color = TexelColor x SourceBlend + CurrentPixelColor x DestBlend
т.е.
Цвет_после_прохода = цвет_рендера*формула_source + цвет_буфера_кадра*формула_destination

По умолчанию SourceBlend = one, DestBlend = zero, то есть цвет буфера полностью замещается тем, что нафигачит шейдер пайплайн, в тех местах, где он что-то нафигачит, т.е. где есть геометрия. В случае экранного квада, понятное дело, геометрия будет по всему экрану.
Но там есть гораздо более интересные формулы, ставящие смешивание в зависимость от альфы и/или цвета исходных пикселей и текселей. Правда, нужно не забывать, что главным действием всё же является сложение, так что при наложении по альфе (как раз полупрозрачность поверх фона) нужно для DestBlend ставить не zero, а invsrcalpha.
Впрочем, в статье написано абсолютно то же самое.

Этот же механизм доступен и в техниках эффектов шейдеров, каждому проходу (pass) можно ставить флаги, аналогичные таковым в интерфейсе устройства на С++.
На сях все эти флаги описаны тут: http://msdn.microsoft.com/en-us/library/bb172599(VS.85).aspx для каждого есть таблицы присваеваемых значений.

Для шейдера же хрен этих флагов в документации найдёшь, только в примерах.
Но тем не менее, их можно вписывать, отпилив предварительно префикс D3DRS_

То есть получается, например, так:

Код:
technique back_shader {
    pass one {
        ZENABLE = True;
        ZWriteEnable = False;
        alphatestenable = True;
        SrcBlend = one;
        DestBlend = Zero;
        CULLMODE = ccw;
        ZFUNC = LESS;
        ALPHABLENDenable = TRUE;
        PixelShader = ps;
        VertexShader = vs;
    }
}

Регистр пофиг, хотя лучше писать в одном стиле Улыбка.

добавлено спустя 2 минуты:
DIMOSUS.X :
в соответствии с моими замерами, рендер R8G8B8 + HDR16/2х2 обходится дешевле полноэкранного HDR16

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

Последний раз редактировалось: Guest (13:38 19-06-2010), всего редактировалось 4 раз(а)
    Добавлено: 13:36 19-06-2010   
DIMOSUS.X
 996 EGP


Рейтинг канала: 4(67)
Репутация: 188
Сообщения: 3252
Откуда: Vilnius/Minsk
Зарегистрирован: 06.08.2008
А получится сделать так, что бы большие обьекты с ростом расстояния исчезали не сразу, а постепенно? В смысле дальняя половина объекта уже полностью прозрачна, а ближняя еще нет?
_________________
Даже ежики ежиков могут с трудом,
Иначе бы ежики были кругом.

Последний раз редактировалось: DIMOSUS.X (15:29 19-06-2010), всего редактировалось 1 раз
    Добавлено: 15:28 19-06-2010   
Канал Игры Мечты: «HLSL»
На страницу: Пред.  1, 2, 3  След. | Все страницы
  
Показать: 
Предыдущая тема | Следующая тема |
К списку каналов | Наверх страницы
Цитата не в тему: Посадка разрешена. Стыкуйтесь после появления зеленых чертей.

  » HLSL | страница 2
Каналы: Новости | Elite | Elite: Dangerous | Freelancer | Star Citizen | X-Tension/X-BTF | X2: The Threat | X3: Reunion | X3: Terran Conflict | X Rebirth | X4: Foundations | EVE Online | Orbiter | Kerbal Space Program | Evochron | VoidExpanse | Космические Миры | Онлайновые игры | Другие игры | Цифровая дистрибуция | play.elite-games.ru | ЗВ 2: Гражданская война | Творчество | Железо | Игра Мечты | Сайт
   Дизайн Elite Games V5 beta.18