Pixel Shader - Смешение двух текстур по маске

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

Модератор: Mikle

djalex777
Постоялец
Постоялец
 
Сообщения: 461
Зарегистрирован: 23.03.2006 (Чт) 16:02

Pixel Shader - Смешение двух текстур по маске

Сообщение djalex777 » 20.10.2008 (Пн) 10:41

Написал следующий pixel shader:
Код: Выделить всё
ps.1.4
texld r0, t0
texld r1, t1
texld r2, t2
lrp r0, r2.r, r1, r0
mul_x2 r0, r0, v0


Применяю его к ландшафту Майкла. Но получаю всё туже одну тектуру.

Перед этим загружаю 3 текстуры и назначаю их (SetTexture):
Код: Выделить всё
Tex1 - трава
Tex2 - камень
Tex3 - маска (с красным каналом)


Формат буфера вершин D3DFVF_XYZ Or D3DFVF_NORMAL Or D3DFVF_TEX2
Код: Выделить всё
Private Type vFormat
  Pos As D3DVECTOR
  Normal As D3DVECTOR
  tu1 As Single
  tv1 As Single
  tu2 As Single
  tv2 As Single
End Type


Что я делаю не так?

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

Re: Pixel Shader - Смешение двух текстур по маске

Сообщение DODge » 22.10.2008 (Ср) 21:57

К сожалению я не так силён в ASM'e, но попытался реализовать твой вариант на HLSL, и вот что мне выдал дизассемблированный шейдер:
Код: Выделить всё
ps_3_0
...
add r1, r1, -r2
mad oC0, r0.r, r1, r2

Короче, всё тоже самое кроме последних двух строчек, только у меня r0 = mask, r1 = rocks, r2 = grass. В рендере всё благополучно рисовало траву с каменными дорожками.
Хотя, выставив в версию 2.0, получилось вот так:
Код: Выделить всё
ps_2_0
...
lrp r3, r0.r, r2, r1
mov oC0, r3

и точно также всё работало.
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

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

Re: Pixel Shader - Смешение двух текстур по маске

Сообщение Mikle » 23.10.2008 (Чт) 13:23

Применение PS1.4 в данном случае нерационально, это делается даже вообще без пиксельного шейдера.
У тебя есть мой ландшафт, который смешивает от 2 до 5 текстур по маске и, в зависимости от кол-ва текстур, применяет соответствующую версию шейдера?

djalex777
Постоялец
Постоялец
 
Сообщения: 461
Зарегистрирован: 23.03.2006 (Чт) 16:02

Re: Pixel Shader - Смешение двух текстур по маске

Сообщение djalex777 » 23.10.2008 (Чт) 18:31

Mikle, Да. Я его и использую в демке. Но он почему-то некорректно работает. С текстурированием разобрался, спасибо. Кстати вопрос - в ландшафте используется vertex shader. А как учесть освещение через vertex shader? Не просто задавать цвет вершины, а расчитывать его исходя из направления света и нормалей ландшафта.

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

Re: Pixel Shader - Смешение двух текстур по маске

Сообщение Mikle » 24.10.2008 (Пт) 14:03

Умножай (DP3) вектор света на вектор нормали, результат отправляй в Color.


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

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

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

    TopList