Попиксельное освещение

Работа с 2D и 3D графикой, видео, звуком.

Модератор: Mikle

StimorolD3DX
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 293
Зарегистрирован: 03.04.2007 (Вт) 18:19
Откуда: Kiev city

Попиксельное освещение

Сообщение StimorolD3DX » 04.09.2007 (Вт) 12:10

Привет,
Видел на форуме примерчик попиксельного освещения но ссылки там не работают, у кого есть прошу выложить. Заранее благодарен

DirectXManiac
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1543
Зарегистрирован: 03.11.2005 (Чт) 13:32
Откуда: из DirectX SDK

Сообщение DirectXManiac » 03.10.2007 (Ср) 7:20

StimorolD3DX
Примерчик без исходников и на С++(если то про пример d3drm) :)
#define ROFL 0xDDDD

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Сообщение Mikle » 03.10.2007 (Ср) 10:34

StimorolD3DX
Есть в книге. До описания попиксельного освещения я там так и не добрался, но пример написал (один из последних).

StimorolD3DX
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 293
Зарегистрирован: 03.04.2007 (Вт) 18:19
Откуда: Kiev city

Сообщение StimorolD3DX » 03.10.2007 (Ср) 12:45

Спасибо, уже нашел )

DirectXManiac
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1543
Зарегистрирован: 03.11.2005 (Чт) 13:32
Откуда: из DirectX SDK

Сообщение DirectXManiac » 08.10.2007 (Пн) 18:40

Mikle
Даже и не заметил этот пример. Классно, но насколько я понял такой просчет только для DOT3 будет работать?
А настоящее попиксельное освещение ведь для каждой точки и делается оно в вершинном и пиксельном шейдере
#define ROFL 0xDDDD

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Сообщение Mikle » 09.10.2007 (Вт) 9:38

DirectXManiac
DOT3 - это как раз и есть "для каждой точки", на шейдерах делается аналогичной инструкцией.

DirectXManiac
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1543
Зарегистрирован: 03.11.2005 (Чт) 13:32
Откуда: из DirectX SDK

Сообщение DirectXManiac » 13.10.2007 (Сб) 11:32

Mikle
:oops: Даже не подумал что можно его с текстурой смешать и будет красивый эффект. Пример очень даже отличный :)
#define ROFL 0xDDDD

StimorolD3DX
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 293
Зарегистрирован: 03.04.2007 (Вт) 18:19
Откуда: Kiev city

Сообщение StimorolD3DX » 04.11.2007 (Вс) 22:24

Mikle писал(а):StimorolD3DX
Есть в книге. До описания попиксельного освещения я там так и не добрался, но пример написал (один из последних).


У тебя там directional per-pixel lighting, а мне нужен point.

DODge
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 126
Зарегистрирован: 30.07.2006 (Вс) 0:25
Откуда: Нижний Новгород

Сообщение DODge » 05.11.2007 (Пн) 2:44

StimorolD3DX
Я так понял, тебе нужно расчитать динамическое освещение от точечного источника света, тогда на вот, держи:

Pixel Shader (HLSL)
Код: Выделить всё
float4 Light0; // xyz-координаты источника света и его w-мощность

float4 PS_Main(float4 Origin: TEXCOORD0, float3 Normal: TEXCOORD1): COLOR
{
...
float diffuse = dot(normalize(Light0.xyz - Origin.xyz), Normal) * saturate(Light0.w / (0.15 + 0.0001 * dot(Light0.xyz - Origin.xyz, Light0.xyz - Origin.xyz)))
...
return OutColor * diffuse;
}


Таким образом ты можешь посчитать неограниченное количество источников света по формуле "diffuse", складывая их результаты в одну переменную, а потом перемножая её на "итоговый" цвет шейдера OutColor. Только учти, чем больше света, тем больне тормозов! :D
К тому же, можешь поиграться с постоянными 0.15 и 0.0001 - они отвечают за рассеивание (интерполяцию) света на полигоне.

Да, кстати, чуть не забыл. Origin - это трёхмерное положение вертекса в пространстве, тупо передаётся в пиксельный шейдер.

StimorolD3DX
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 293
Зарегистрирован: 03.04.2007 (Вт) 18:19
Откуда: Kiev city

Сообщение StimorolD3DX » 05.11.2007 (Пн) 11:56

Спасибо конечно, но это же HLSL, а я пишу под восьмерку.
Хотя наверное можна переделать

PS. Кстати раньше пример у меня был и скачал я его на этом форуме, но теперь немогу найти.

DODge
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 126
Зарегистрирован: 30.07.2006 (Вс) 0:25
Откуда: Нижний Новгород

Сообщение DODge » 05.11.2007 (Пн) 21:37

Так а в чём проблема, насколько я помню, восьмые иксы также поддерживают шейдеры (правда, тебе придётся переписать и вертексный) версии, эдак, 2.0 и ниже :( .

ЗЫ. Сам я юзаю только 9с и SM 3.0!

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 05.11.2007 (Пн) 23:50

DODge
Там шейдеры асмовые.
Изображение

DODge
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 126
Зарегистрирован: 30.07.2006 (Вс) 0:25
Откуда: Нижний Новгород

Сообщение DODge » 06.11.2007 (Вт) 0:21

keks-n
Да какая разница - я в курсе (ничто не мешает HLSL перегнать в АСМ). Я специально привёл пример на удобном для чтения и понимания языке программирования, просто чтобы понять общий принцип работы так называемого попиксельного освещения.
CPU = Intel Core i5 6500 @ 3.2 GHz
VGA = GeForce GTX 650Ti 2Gb
RAM = 8 ГБ DDR4 @ 2133 MHz
OS = Windows 10 Pro 64-bit
IDE = Microsoft Visual Studio Community 2017 (Visual Basic.NET)
GAPI = SharpDX 9 + 12

DirectXManiac
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1543
Зарегистрирован: 03.11.2005 (Чт) 13:32
Откуда: из DirectX SDK

Сообщение DirectXManiac » 08.11.2007 (Чт) 0:23

DODge
Далеко не универсальный код... Простой расчет цвета точки, если надо смешать с чем нибудь типа бампа то надо расчитывать и вершинный, но на асм нет смысла перекладывать ИМХО. Такого рода эффекты лучше делать именно на HLSL. Тем более может не хватить регистров для хорошего качества эффектов.
StimorolD3DX
Прочитай статью на GameDev про шейдеры, там есть общие принципы освещения, и попиксельное есть...
#define ROFL 0xDDDD

StimorolD3DX
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 293
Зарегистрирован: 03.04.2007 (Вт) 18:19
Откуда: Kiev city

Сообщение StimorolD3DX » 08.11.2007 (Чт) 11:56

Буду ждать Mikle'а, он когдато вылаживал пример.

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Сообщение Mikle » 12.11.2007 (Пн) 10:06

На GameDev есть статья:
http://www.gamedev.ru/articles/?id=30116
Только в ней неверно описано получение базиса, точнее это подойдет для ландшафта на регулярной сетке, где текстурные координаты параллельны мировым. Для модели с произвольным текстурированием можно в вертексе хранить не только нормаль, но и бинормаль, тангент получаем с помощью одного Cross. Все это прекрасно ложится на вертексный шейдер, а вместо пиксельного шейдера сойдет даже регулярный конвеер.
Тот пример, что я когда-то давно выкладывал тоже не универсален, зато обходится вообще без шейдера, но сейчас это не актуально.

StimorolD3DX
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 293
Зарегистрирован: 03.04.2007 (Вт) 18:19
Откуда: Kiev city

Сообщение StimorolD3DX » 12.11.2007 (Пн) 12:02

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


Почуме не актуально? Можеш еще раз выложить?

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Сообщение Mikle » 14.11.2007 (Ср) 10:38

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

StimorolD3DX
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 293
Зарегистрирован: 03.04.2007 (Вт) 18:19
Откуда: Kiev city

Сообщение StimorolD3DX » 27.11.2007 (Вт) 17:06

Кстати, а как в твоём примере можна изменять радиус света?

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Сообщение Mikle » 27.11.2007 (Вт) 19:31

StimorolD3DX
как в твоём примере можна изменять радиус света?

А как он меняется в зависимости от высоты источника?

StimorolD3DX
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 293
Зарегистрирован: 03.04.2007 (Вт) 18:19
Откуда: Kiev city

Сообщение StimorolD3DX » 28.11.2007 (Ср) 12:20

Mikle писал(а):StimorolD3DX
как в твоём примере можна изменять радиус света?

А как он меняется в зависимости от высоты источника?


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

Sergey-Pr.SV
Начинающий
Начинающий
 
Сообщения: 4
Зарегистрирован: 06.07.2008 (Вс) 16:00

Сообщение Sergey-Pr.SV » 06.07.2008 (Вс) 20:51

Что все это означает. Оно както связано со светом?

d3dDevice.SetTextureStageState 0&, D3DTSS_ADDRESSU, D3DTADDRESS_CLAMP
d3dDevice.SetTextureStageState 0&, D3DTSS_ADDRESSV, D3DTADDRESS_CLAMP
d3dDevice.SetTextureStageState 0&, D3DTSS_TEXTURETRANSFORMFLAGS, D3DTTFF_COUNT2
d3dDevice.SetTextureStageState 0&, D3DTSS_TEXCOORDINDEX, D3DTSS_TCI_CAMERASPACEPOSITION
d3dDevice.SetTextureStageState 0&, D3DTSS_COLOROP, D3DTOP_SELECTARG1
d3dDevice.SetTextureStageState 0&, D3DTSS_COLORARG1, D3DTA_TEXTURE

d3dDevice.SetTextureStageState 1&, D3DTSS_COLOROP, D3DTOP_DOTPRODUCT3
d3dDevice.SetTextureStageState 1&, D3DTSS_COLORARG1, D3DTA_CURRENT
d3dDevice.SetTextureStageState 1&, D3DTSS_COLORARG2, D3DTA_TEXTURE
d3dDevice.SetTextureStageState 1&, D3DTSS_TEXCOORDINDEX, 0&

d3dDevice.SetTextureStageState 2&, D3DTSS_COLOROP, D3DTOP_MODULATE
d3dDevice.SetTextureStageState 2&, D3DTSS_COLORARG1, D3DTA_CURRENT
d3dDevice.SetTextureStageState 2&, D3DTSS_COLORARG2, D3DTA_TEXTURE
d3dDevice.SetTextureStageState 2&, D3DTSS_TEXCOORDINDEX, 0&

d3dDevice.SetTextureStageState 3&, D3DTSS_COLOROP, D3DTOP_MODULATE4X
d3dDevice.SetTextureStageState 3&, D3DTSS_COLORARG1, D3DTA_CURRENT
d3dDevice.SetTextureStageState 3&, D3DTSS_COLORARG2, D3DTA_DIFFUSE


Вернуться в Мультимедиа

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 56

    TopList