Войти
ПрограммированиеФорумГрафика

Программирование шейдеров на HLSL. (Комментарии к статье) (4 стр)

Страницы: 13 4 5 610 Следующая »
#45
22:50, 30 июня 2004
Изображение удалено

#46
22:57, 30 июня 2004

Блинновская модель это апроксимация фонга, только заместо возведения в степень используется половинный вектор.

#47
4:34, 2 июля 2004

хм...
Изображение удалено

#48
11:42, 2 июля 2004

Paronator
V и L там наверное нормализированнъ, а потом или в vs или в ps есть нормализация H...

#49
22:56, 2 июля 2004

Ну если говорить про бамп, то там ненужно нормализовать
L и V, ведь потом в fs мы все равно нормализуем...
Вот скрин с нормализацией L и V, А вот без нее:
Изображение удаленоИзображение удалено

float3 vLightVec = m_vLightPos - In.vPos; // без nrm
float3 vViewVec = m_vCameraPos - In.vPos;

Out.vPos = mul(m_matMVP,In.vPos);
Out.vTex = In.vTex;
Out.vNrm = In.vNrm;
Out.vLht = vLightVec;
Out.vHlf = vLightVec + vViewVec;
Out.vTan = In.vTan;
Out.vBin = In.vBin;
Потом в ps делаем так и все дела:
float4 TEX_Base = tex2D(m_txBase,In.vTex);
float4 TEX_Bump = tex2D(m_txBump,In.vTex);
float4 TEX_DetailBump = tex2D(m_txDetailBump,In.vTex);
float4 TEX_Gloss = tex2D(m_txHMap,In.vTex);

TEX_Bump = Expand(TEX_Bump);
TEX_DetailBump = Expand(TEX_DetailBump);
TEX_Bump.xy += 0.5f * TEX_DetailBump.xy;

float3 NNormal = normalize(TEX_Bump.x * In.vTan +
		           TEX_Bump.y * In.vBin +
			   TEX_Bump.z * In.vNrm);

float3 NLight = normalize(In.vLht);
float3 NHalf = normalize(In.vHlf);

float4 N_dot_L = dot(NNormal,NLight); // вот оно..
float4 N_dot_H = dot(NNormal,NHalf); // еще оно..

float4 vAmbient = TEX_Base * (m_vAmbient * m_vHelper.x);
float4 vDiffuse = TEX_Base * (m_vDiffuse * m_vHelper.y) * saturate(N_dot_L);
float4 vSpec    = TEX_Gloss * (m_vSpec * m_vHelper.z) * pow(saturate(N_dot_H),m_vHelper.w);

float4 Light = vAmbient + vDiffuse + vSpec;
return Light;

Ты увидел разницу в скринах ?

#50
23:01, 2 июля 2004

Дизайн сайта мне очень нравиться.

#51
0:43, 3 июля 2004

Paronator
Ну, разницъ при такой геометрии, лампочке и камере может и не бъть. Попробуй сделать low-poly домик или архитектуру, где остръе углъ (нормаль интерполируется плохо), отодвинь лампочку вдаль и т.д.
Half-vector так считать неправильно.

#52
1:31, 3 июля 2004

Zemedelec

хм... какая разница то это ведь все равно потом:

float3 NLight = normalize(In.vLht);
float3 NHalf = normalize(In.vHlf);

float4 N_dot_L = dot(NNormal,NLight); // вот оно..
float4 N_dot_H = dot(NNormal,NHalf); // еще оно..
А NNormal в tangent space...
Так что ни на что ни повлияет это...
а вершин у торуса: 2500

#53
15:04, 3 июля 2004

Paronator
Изображение удалено

#54
15:28, 3 июля 2004

Paronator
Изображение удалено

#55
12:15, 23 июля 2004

"float3 NNormal = normalize(TEX_Bump.x * In.vTan + TEX_Bump.y * In.vBin + TEX_Bump.z * In.vNrm)"
А зачем так извращаться? Будет быстрее, если привести остальные вектора в tangent space.

#56
15:27, 23 июля 2004

> Будет быстрее, если привести остальные вектора в tangent space.

Увы, но если вектора tangent space неортогональные, то делать это нет смысла.

#57
8:35, 25 июля 2004

Неплохо было бы если исходники в статье все таки компилировались :-)
Например в части про бамп в вершином шейдере есть такое, объявлено:

float4 n_dot_l    = dot(tx_bump,nrmd_light);

А ниже используется:

float4 diffuse = tx_base * m_vDiffuse * m_vHelper.y * max(N_dot_L,0.0f);

все таки n_dot_l и N_dot_L вроде не совсем одно и тоже.

#58
17:50, 25 июля 2004

Есть такой вопрос можно ли bump подобный тому что описан в статье сделать на шейдерах
версии 1.1 за один проход?

#59
4:38, 26 июля 2004

fr:
Вот например мой пикс. шадер:
На c0 и c1 можно внимания не обращать

ps.1.1
tex t0
texm3x2pad t1, t0_bx2
texm3x2tex t2, t0_bx2
tex t3
dp3 r1, t0_bx2, v0_bx2
mad r1, t3, r1, t2
mul r0.xyz, r1, c0
+mov r0.w, c1.w

Достаточно одного прохода :)

Страницы: 13 4 5 610 Следующая »
ПрограммированиеФорумГрафика

Тема в архиве.