Нужно светить на букашек и червяков из различных источников света.
Сейчас получается так:
Вот таким образом:
_d3dDevice->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA); _d3dDevice->SetRenderState( D3DRS_DESTBLEND, D3DBLEND_ONE);
Накладываю вот такой спрайт света:
Получается аддитивное наложение, это чуть лучше чем просто как есть накладывать, но всё равно свет ватный!
В идеале хотелось бы получить вот такой эффект:
Это я в графическом редакторе наложил спрайт света в режиме Overlay.
Как можно сделать хоть что-нибудь похожее?
Желательно через FFP, но и шейдером пойдёт.
Kozinaka
Пробуй шейдером
Andrey
> Пробуй шейдером
Ха, если бы проблема была исключительно в выборе между FFP и шейдером, то я бы не стал уважаемое сообщество беспокоить.
Есть кто-нибудь со значком «Хочешь сделать Overlay шейдером — спроси меня как!»?
Вот очень хорошая статья к ознакомлению - http://mouaif.wordpress.com/2009/01/05/photoshop-math-with-glsl-shaders/
а если под современное железо, то можно и через данное расширение - http://www.opengl.org/registry/specs/NV/blend_equation_advanced.txt
Попробуй вместо освещения затемнять остальную картинку:
_d3dDevice->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_ZERO); _d3dDevice->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_SRCALPHA);
А вообще попробуй так:
_d3dDevice->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_DESTCOLOR); _d3dDevice->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_ONE);
есть не NV specific:
http://www.opengl.org/registry/specs/KHR/blend_equation_advanced.txt
Neill
> Вот очень хорошая статья к ознакомлению -
> http://mouaif.wordpress.com/2009/01/05/photoshop-math-with-glsl-shaders/
Спасибо! Попробую вкурить!
Che@ter
> Попробуй вместо освещения затемнять остальную картинку
Увы, не то.
Che@ter
> А вообще попробуй так
А вот это интереснее! Эффект - что нужно, не хватает только вывода по маске. Может можно в два прохода как-нибудь сделать? Я похожим образом блики на стёкла накладываю, вот в этой теме подсказали: http://www.gamedev.ru/code/forum/?id=184279 Спасибо за идею, попробую!
HolyDel
> есть не NV specific:
> http://www.opengl.org/registry/specs/KHR/blend_equation_advanced.txt
Боюсь, у меня DirectX 9.
Kozinaka
> А вот это интереснее!
Для такого эффекта нужно накладывать черно-белую градиентную картинку, в которой нет прозрачности.
Kozinaka
> > Попробуй вместо освещения затемнять остальную картинку
Да, если много источников освещения - такой вариант не пойдет.
Kozinaka
В этом посте я писал, как 2д свет можно сделать: http://www.gamedev.ru/code/forum/?id=192224&page=2#m23
Che@ter
> Для такого эффекта нужно накладывать черно-белую градиентную картинку, в
> которой нет прозрачности.
Ура! Che@ter, то, что доктор прописал! На лампах подсветка щелей поползла, потому что там свет с альфой, я только круглое пятно света для пробы заменил.
Спасибо! Буду экспериментировать.
SunnyBunny
> В этом посте я писал, как 2д свет можно сделать:
> http://www.gamedev.ru/code/forum/?id=192224&page=2#m23
О, спасибо за информацию! Попробовал мультипликативный блендинг сделать к текущему варианту, который предложил Che@ter:
_d3dDevice->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_DESTCOLOR); _d3dDevice->SetRenderState( D3DRS_DESTBLEND, D3DBLEND_ONE); _d3dDevice->SetTextureStageState( 0, D3DTSS_ALPHAOP, D3DTOP_MULTIPLYADD);
На выходе без изменений. Можно получить что-то лучше, чем на картинке?
Даже при текущем варианте при наложении пятен света друг на друга получается прикольный пережиг, который очень быстро переходит в адский.
Если будет мешать, то воспользуюсь твоим опытом. Просто буду предварительно собирать свет в отдельном спрайте, а потом накладывать разом. У меня в игре это можно разрулить парой-тройкой слоёв.
Тема в архиве.