forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Xors3D (http://forum.boolean.name/forumdisplay.php?f=126)
-   -   Шейдеры освещение (http://forum.boolean.name/showthread.php?t=17174)

FREE MAN 10.08.2012 22:32

Шейдеры освещение
 
Изучаю шейдеры, сделал пять источников освещение,только камнями не бросать :)
Ссылка: http://rghost.ru/39704766

Mhyhr 10.08.2012 23:09

Ответ: Шейдеры освещение
 
Код:

...
Color+=cD*nLight0*LightClr0*LightInt0+cD*nLight1*LightClr1*LightInt1+cD*nLight2*LightClr2*LightInt2+cD*nLight3*LightClr3*LightInt3+cD*nLight4*LightClr4*LightInt4-AmbientClr;
...

Жестоко :D

FREE MAN 10.08.2012 23:23

Ответ: Шейдеры освещение
 
Цитата:

Сообщение от Mhyhr (Сообщение 235970)
Код:

...
Color+=cD*nLight0*LightClr0*LightInt0+cD*nLight1*LightClr1*LightInt1+cD*nLight2*LightClr2*LightInt2+cD*nLight3*LightClr3*LightInt3+cD*nLight4*LightClr4*LightInt4-AmbientClr;
...

Жестоко :D

У тебя есть другие предложения, как это реализовать?
Жаль, что в Ксорсе не да делали Deferred render, да и вообще убрали из функционала, пока знаний мало что бы такое реализовывать.

dsd 10.08.2012 23:42

Ответ: Шейдеры освещение
 
Цитата:

Сообщение от Phyton (Сообщение 235972)
У тебя есть другие предложения, как это реализовать?
Жаль, что в Ксорсе не да делали Deferred render, да и вообще убрали из функционала, пока знаний мало что бы такое реализовывать.

Можно же массивом передавать, а потом в цикле внутри шейдера посчитать. И тогда можно одним и тем же шейдером иметь хоть один хоть десять источников света.

Цитата:

BBDECL void BBCALL xSetEffectFloatArray ( Entity * entity,
const char * name,
float * value,
int count,
int layer = -1
)

Sets a floating array constant for entity shaders.

Parameters:
entity Entity handle
name Constant name
value Pointer to floating array
count Number of elements in array
layer Index of the effect layer in range [0; 7]. If -1 is passed - active layer will be used (see xSetShaderLayer())
и т.д.

FREE MAN 11.08.2012 00:05

Ответ: Шейдеры освещение
 
Цитата:

Сообщение от dsd (Сообщение 235975)
Можно же массивом передавать, а потом в цикле внутри шейдера посчитать. И тогда можно одним и тем же шейдером иметь хоть один хоть десять источников света.
и т.д.

Ты сам пробовал так реализовывать? А если допустим с бампом, такой метод покатит?

dsd 11.08.2012 00:18

Ответ: Шейдеры освещение
 
Цитата:

Сообщение от Phyton (Сообщение 235979)
Ты сам пробовал так реализовывать? А если допустим с бампом, такой метод покатит?

Сам не пробовал, но помоему это пофигу.
Я бы сделал отдельно функцию которая бы считала в текущей точке сумму цвет_света*интенсивность_света_в_этой_точке. И вставлял бы её везде.
Бамп же просто отклоняет нормаль, за счет чего и создается впечатление рельефа. Количество света не должно же изменится из-за этого в той точке.
А тот бамп который во много слоев рендрит полигон для почти натурального рельефа тоже пофигу, так как один хрен он смещает плоскость полигона, а значит и точка для которой посчитается количество света тоже будет в нужном месте.

FREE MAN 12.08.2012 20:44

Ответ: Шейдеры освещение
 
экспериментирую...

FREE MAN 13.08.2012 02:44

Ответ: Шейдеры освещение
 
Продолжение эксперимента, мене это уже нравится! :cool:
еще бы полностью разобраться с массивами и можно будет без проблем использовать куча света...

pax 13.08.2012 14:34

Ответ: Шейдеры освещение
 
Цитата:

Сообщение от Phyton (Сообщение 236086)
и можно будет без проблем использовать куча света...

Как бэ шейдеры не резиновые) точнее резиновые но не на столько)

Amatsu 13.08.2012 14:48

Ответ: Шейдеры освещение
 
Цитата:

Сообщение от Phyton (Сообщение 236086)
Продолжение эксперимента, мене это уже нравится! :cool:
еще бы полностью разобраться с массивами и можно будет без проблем использовать куча света...

А ты не мог бы поделиться нормал-мапом с последнего скриншота? Заранее спасибо

moka 13.08.2012 15:00

Ответ: Шейдеры освещение
 
Прикольно, только да, шейдеры не резиновые. И "динамичные" циклы - очень дорогое удовольствие в шейдерах.
Деферред не такой и сложный на самом деле, главное понять фишку.
Реализовать его можно не затрудняясь сильно, ты главное попробуй.

dsd 13.08.2012 16:30

Ответ: Шейдеры освещение
 
Цитата:

Сообщение от MoKa (Сообщение 236119)
только да, шейдеры не резиновые. И "динамичные" циклы - очень дорогое удовольствие в шейдерах.

Но ведь можно же сжульничать :)
Сделать текстуру в которой пятнами будет рисоваться интенсивность света на его цвет уже посчитанная. Причем судя по моим экспериментам с axelynx текстура может быть очень подробной. В смысле большой. Потом в вертексном шейдере читать по мировым координатам количество света для этой точки. И цикл исчезает. Или еще лучше не очень подробную, но 3д текстуру. В общем есть на мой взгляд способы повышения резиновости шейдеров. :)

pax 13.08.2012 16:54

Ответ: Шейдеры освещение
 
И прощай динамическое освещение, разве что только дополнительные источники для него пилить. Но лайтмэпы это круто да)

dsd 13.08.2012 16:59

Ответ: Шейдеры освещение
 
Цитата:

Сообщение от pax (Сообщение 236130)
И прощай динамическое освещение, разве что только дополнительные источники для него пилить. Но лайтмэпы это круто да)

Да нет же. В том то и дело что можно обновлять в прямом эфире, несколько раз в секунду, потратив на это несколько миллисекунд времени из всей секунды. А для прям таких близких 3-4 источников можно уже в пиксельном все подробно считать.

pax 13.08.2012 17:08

Ответ: Шейдеры освещение
 
т.е. использовать второй или третий uv канал на огромную текстуру с освещеним?

dsd 13.08.2012 17:30

Ответ: Шейдеры освещение
 
Ничего дополнительного с моделями делать не надо.
Просто центр в такой текстуре это позиция камеры. А после умножения на мировую и видовую матрицу у вершин координаты можно использовать как текстурные. Если наша лайтмапа охватывает 64 единицы от камеры, то соответственно делим координаты вершин на 128 и плюсуем 0,5. И вуаля нужные координаты для чтения значения из текстуры.

pax 13.08.2012 17:44

Ответ: Шейдеры освещение
 
Ну это только с 3d текстурой, нормально выйдет, а 256х256х256 = 64мб видеопамяти не сжатых. Если есть какое-то dxt то еще ладно.

dsd 13.08.2012 17:52

Ответ: Шейдеры освещение
 
Ну так я и говорю потому что сжульничать можно :) Да и 3д текстуру 256*256*256 уже довольно долго делать. А вот если мир относительно плоский и источники света примерно в одной плоскости лежат...

FREE MAN 13.08.2012 19:46

Ответ: Шейдеры освещение
 
Цитата:

Сообщение от pax (Сообщение 236112)
Как бэ шейдеры не резиновые) точнее резиновые но не на столько)

Да. Я в курсе, на счёт этого. Шейдеры нужно использовать с умом!


Цитата:

Сообщение от MoKa (Сообщение 236119)
Прикольно, только да, шейдеры не резиновые. И
"динамичные" циклы - очень дорогое удовольствие в шейдерах.
Деферред не такой и сложный на самом деле, главное понять фишку.
Реализовать его можно не затрудняясь сильно, ты главное попробуй.

пока что изучаю, скорей всего придется и написать Деферред.
в последних моих скринах освещения можно использовать в коридорных шутерах типа Doom3,
можно сделать скажем 4-8 источников освещения и просто потом перемещать источники освещения в зависимости где находится камера или игрок.

Цитата:

Сообщение от Amatsu (Сообщение 236115)
А ты не мог бы поделиться нормал-мапом с последнего скриншота? Заранее спасибо

Держи!

moka 13.08.2012 21:05

Ответ: Шейдеры освещение
 
В камере не думаю что должно быть слишком много источников, но дело в том что всё усложняется с усложнением материалов. Например если тебе нужно сделать параллакс, и тени, то у тебя всё ещё в разы усложниться.
Когда в дефферед, это будет намного оптимальнее.
Тем более вес вычислений на каждый источник света в деферреде намного меньше чем в Forward Render'инге. Также есть удобные Screen Space оптимизации - исходя из радиуса источника света, положения и камеры, то можно вычислить Screen Space Bounding Box источника света, и при вычислении очередного света, создавать биллбоард именно такого размера - это очень сильно улучшит производительность. А если Bounding Box не в экране - так вообще игнорируется источник света и просчёт его.
Такое на Forward Render'инге замахаешься делать..

FREE MAN 19.08.2012 13:57

Ответ: Шейдеры освещение
 
Балуюсь дальше...:-D

4yBa4Ok 19.08.2012 17:32

Ответ: Шейдеры освещение
 
оч красиво) А поделиться могеш?)

FREE MAN 19.08.2012 17:38

Ответ: Шейдеры освещение
 
Цитата:

Сообщение от 4yBa4Ok (Сообщение 236683)
оч красиво) А поделиться могеш?)

что именно надо? освещение простое, тут стандартные тени Xors-а, Bloom тоже стандартный(тормозной)

Mr_F_ 19.08.2012 17:56

Ответ: Шейдеры освещение
 
а чего всё мыльное? без АА, при этом лесенки пикселей ещё каким-то блюром пожёваны.
либо постэффект-квад сдвинут немного, либо неправильные текскоорды для него считаются.

FREE MAN 19.08.2012 21:01

Ответ: Шейдеры освещение
 
Сделал 10 источников света! девять лампочек и глобальный свет.
http://www.youtube.com/watch?v=NNdLDusP21U

FREE MAN 19.08.2012 21:14

Ответ: Шейдеры освещение
 
Цитата:

Сообщение от Mr_F_ (Сообщение 236688)
а чего всё мыльное? без АА, при этом лесенки пикселей ещё каким-то блюром пожёваны.
либо постэффект-квад сдвинут немного, либо неправильные текскоорды для него считаются.

Это и за блума так мыльно смотрится. поковыряю шейдеры и исправлю, а то действительно лесенка очень заметна!.

Mr_F_ 19.08.2012 22:00

Ответ: Шейдеры освещение
 
на последних скринах вроде пофиксил ты.
а, так там просто блум выкл?

в общем в DX9 есть такой прикол, что чтобы корректно рисовать фулскрин картинку в постэффекте, надо сдвигаться на пол-пикселя:
http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx

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

FREE MAN 19.08.2012 22:12

Ответ: Шейдеры освещение
 
Цитата:

Сообщение от Mr_F_ (Сообщение 236708)
на последних скринах вроде пофиксил ты.
а, так там просто блум выкл?

в общем в DX9 есть такой прикол, что чтобы корректно рисовать фулскрин картинку в постэффекте, надо сдвигаться на пол-пикселя:
http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx

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

да, я там выключил блум. Он очень прожорливый, время будет надо свой будет накарябыть.

4yBa4Ok 19.08.2012 22:35

Ответ: Шейдеры освещение
 
Вау, а выложить не могеш? Илил в личку скинуть? Оч красиво)

FREE MAN 19.08.2012 22:46

Ответ: Шейдеры освещение
 
Цитата:

Сообщение от 4yBa4Ok (Сообщение 236714)
Вау, а выложить не могеш? Илил в личку скинуть? Оч красиво)

Завтра либо после завтра скину окей. а то там небольшой хаос в коде надо все поправить.

4yBa4Ok 19.08.2012 22:52

Ответ: Шейдеры освещение
 
Цитата:

Сообщение от Phyton (Сообщение 236719)
Завтра либо после завтра скину окей. а то там небольшой хаос в коде надо все поправить.

Жду с не терпеньем)

FREE MAN 21.08.2012 22:51

Ответ: Шейдеры освещение
 
4yBa4Ok стучись в аську 480258886, все расскажу как сделать много источников света простым способом.

FREE MAN 05.11.2012 21:17

Ответ: Шейдеры освещение
 
Продолжаем эксперимент, вроде как заморозка получилась.

moka 05.11.2012 21:22

Ответ: Шейдеры освещение
 
Напомнило мне шейдер который я давно делал, Burn, там сгорал объект. Потом я делал версию с типо электро маскировкой - он как бы сгорал только синим электричеством, и заместо прозрачности использовал рефлекцию.
А потом увидел этот же эффект уже в Start Craft II у теранов, самолётики который Cloak используют..

Colossus 06.11.2012 01:55

Ответ: Шейдеры освещение
 
Мока а как ты делал этот шейдер? можешь обьяснить в теории?

moka 06.11.2012 03:41

Ответ: Шейдеры освещение
 
Он вроди как всё ещё есть в поставке примеров с Xors'ом.

Суть простая, тебе нужно каким либо образом симулировать по геометрии переход, простой переход от чёрного к белому (0 - 1.0). Я делал двумя методами, и на видео тут вижу тоже вроди как они же.
Первый - это есть точка в пространстве, увеличиваем дистанцию, все пиксели что поподают в радиус интерполируются в 1.0 от нуля. За радиусом всё 0. Далее высотная карта (чёрно белая, имеет данные 0.0 - 1.0) может также использоваться для смещений параметра, чтобы избавиться от тупо округлой формы дистанции и внести какую-то рябь.
Далее этот параметр от 0 до 1, используешь как маску для смешивания двух палитр - диффуза и палитры горения / заморозки (или чего ещё нада).
Тогда я сделал вручную цвета, а сейчас использовал бы просто 1D Gradient текстуру, которая бы содержала данные о переходе, а также цветах. Таким образом можно было бы заменять просто текстуру или даже генерировать динамично в шейдере для интересных эффектов.
Основной принцип объяснён выше, но чтобы чуток упростить, можно не использовать какую-либо точку в пространстве, а лишь высотную карту. Таким образом будет по всему объекту переход.

Вообще сложно объяснить такой шейдер, ты попробуй подумать смекалкой и поэкспериментировать. Попробуй разбить на какие-то трюки / компоненты сам шейдер, и реализовать их по отдельности для тренировки. Потом полная идея и реализация будет явной.


Часовой пояс GMT +4, время: 08:42.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot