Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > Xors3D

Xors3D Графический движок с поддержкой DirectX9

Ответ
 
Опции темы
Старый 20.11.2011, 20:19   #256
dsd
Мастер
 
Аватар для dsd
 
Регистрация: 13.06.2011
Сообщений: 1,103
Написано 481 полезных сообщений
(для 1,836 пользователей)
Ответ: Странное.





Решил познавать силу шейдеров на своей машинке пятилетней давности
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Reizel (20.11.2011)
Старый 21.11.2011, 02:02   #257
dsd
Мастер
 
Аватар для dsd
 
Регистрация: 13.06.2011
Сообщений: 1,103
Написано 481 полезных сообщений
(для 1,836 пользователей)
Ответ: Странное.


Первая часть амдшного шейдера крутой автомобильной краски запустилась И рисует на моей покореженной модели тачки почти тоже, что и в рендер манке.
(Offline)
 
Ответить с цитированием
Старый 21.11.2011, 02:32   #258
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Ответ: Странное.

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

А вообще, молодцом что шейдеры стал познавать лучше, только лучше не в RenderMonkey, а в блокноте..
(Offline)
 
Ответить с цитированием
Старый 21.11.2011, 02:41   #259
dsd
Мастер
 
Аватар для dsd
 
Регистрация: 13.06.2011
Сообщений: 1,103
Написано 481 полезных сообщений
(для 1,836 пользователей)
Ответ: Странное.

Это у меня модель дико косячная Она с 3 версии макса прошла до 9 все версии а потом через 3дс вернулась в восьмую Походу всю поверхность перенатянуть надо. Но если смогу прикрутить глос и как-то приделать ихние спаркле будет супер шейдер с тучей настроек
(Offline)
 
Ответить с цитированием
Старый 21.11.2011, 16:27   #260
dsd
Мастер
 
Аватар для dsd
 
Регистрация: 13.06.2011
Сообщений: 1,103
Написано 481 полезных сообщений
(для 1,836 пользователей)
Ответ: Странное.


Какой-то металик.

Последний раз редактировалось dsd, 13.12.2011 в 22:59.
(Offline)
 
Ответить с цитированием
Эти 4 пользователя(ей) сказали Спасибо dsd за это полезное сообщение:
FireOwl (21.11.2011), H@NON (22.11.2011), moka (21.11.2011), St_AnGer (21.11.2011)
Старый 22.11.2011, 00:17   #261
dsd
Мастер
 
Аватар для dsd
 
Регистрация: 13.06.2011
Сообщений: 1,103
Написано 481 полезных сообщений
(для 1,836 пользователей)
Ответ: Странное.


duotone with some kinder of sparkles.
(Offline)
 
Ответить с цитированием
Эти 3 пользователя(ей) сказали Спасибо dsd за это полезное сообщение:
Android (22.11.2011), FireOwl (23.11.2011), moka (22.11.2011)
Старый 22.11.2011, 01:39   #262
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Ответ: Странное.

Только туда бы ещё кубмапу ввалить по Френелю или какому параметру из шейда машины, вот там где затенение - заместо него кинуть именно кубмапу (курни Fresnel shading).
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Mr_F_ (22.11.2011)
Старый 23.11.2011, 12:57   #263
dsd
Мастер
 
Аватар для dsd
 
Регистрация: 13.06.2011
Сообщений: 1,103
Написано 481 полезных сообщений
(для 1,836 пользователей)
Ответ: Странное.


По-моему вполне симпатичная краска вышла. В динамике она красивее.

float4x4 matrixWorldViewProj : MATRIX_WORLDVIEWPROJ; // матрица итоговая
float4x4 matrixWorld : MATRIX_WORLD; // матрица мировая
float3 lightDirection : LIGHT0_DIRECTION; // направление
float4 lightColor : LIGHT0_COLOR; // цвет
float4 entityColor : COLOR_DIFFUSE; // цвет объекта
float4 campos : CAMERA_POSITION;
float4 ambient : COLOR_AMBIENT ;


float4x4 view_proj_matrix : MATRIX_VIEWPROJ;
float4x4 proj_matrix : MATRIX_PROJ;
float4x4 inv_view_matrix : MATRIX_WORLDVIEWINVERSE;

//параметры краски
float4 paintColorMid;
float4 paintColor2;
float4 paintColor0;


sampler showroomMap;
texture diffuseTexture; // текстура
// описываем sampler
sampler diffuseSampler = sampler_state
{
Texture = <diffuseTexture>; // привязываем текстуру
// устанавливаем адресацию координат
AddressU = WRAP;
AddressV = WRAP;
AddressW = WRAP;
// устанавливаем фильтрацию
MinFilter = ANISOTROPIC;
MagFilter = ANISOTROPIC;
MipFilter = ANISOTROPIC;
// устанавливаем уровень фильтрации
MaxAnisotropy = 5;
};




// входная структура для вершинного шейдера
struct VSInput
{
float4 Pos : POSITION;
float3 Normal : NORMAL;
float2 Tex : TEXCOORD0;

};
// структура для результата вершинного шейдера
struct VSOutput
{
float4 Pos : POSITION;
float2 Tex : TEXCOORD0;
float3 Normal : TEXCOORD1;
float3 View : TEXCOORD2;
float2 SparkleTex : TEXCOORD3;
float3 Pos2 : TEXCOORD4;
};
// вершинный шейдер
VSOutput VSMain(VSInput input)
{

VSOutput output;
// Propagate transformed position out:
output.Pos = mul( input.Pos,matrixWorldViewProj );

// Compute view vector:
output.View = normalize( mul(campos-input.Pos,matrixWorld));

// Propagate texture coordinates:
output.Tex = input.Tex;

// Propagate tangent, binormal, and normal vectors to pixel shader:
output.Normal = input.Normal;
// Compute microflake tiling factor:
output.SparkleTex = 5*float2( output.Pos.x/output.Pos.w , output.Pos.y/output.Pos.w );
output.Pos2 =mul(input.Pos.xyz,proj_matrix);
return output;
// возвращаем результат
return output;
}
// пиксельный шейдер
float4 PSMain(VSOutput input) : COLOR0
{
//для отражзения
float lit = dot(normalize(input.Normal), -lightDirection);
float3 vView = input.View ;
//шум+частицы
float4 sparklecolor=tex2D(diffuseSampler,input.Pos2.xy*in put.Pos2.yz);
float alit=dot(normalize(input.Pos2+0.23*(2*sparklecolor .rgb-float3(1,1,1))), input.Normal);

// Compute reflection vector resulted from the clear coat of paint on the metallic
// surface:
float fFresnel = dot(vView,input.Normal+0.1*(sparklecolor.rgb-float3(1,1,1)));

// Compute final paint color: combines all layers of paint as well as two layers
// of microflakes
float fFresnelSq = fFresnel*fFresnel;
float4 paintColor = fFresnel*paintColor0+fFresnelSq*paintColorMid+fFre snelSq*fFresnelSq*paintColor2;


//отражения
// Look up the reflection
float3 reflVec = reflect(input.View, input.Normal);
float sins=sqrt(1-reflVec.y*reflVec.y);
float ucoor=acos(reflVec.x/sins)/6.28;
float vcoor=acos(reflVec.y)/6.28;
float2 texcoor=float2(ucoor,vcoor);
float4 reflection = tex2D(showroomMap, texcoor);


float4 finalColor;
finalColor.a = 1.0;
finalColor.rgb = paintColor;

return 1.5*finalColor*reflection+0.25*alit*finalColor+0.4 *(1-lit)*reflection;

}
// техника для отрисовки
technique Diffuse
{
pass p0
{
VertexShader = compile vs_2_0 VSMain();
PixelShader = compile ps_3_0 PSMain();
}
}

Последний раз редактировалось dsd, 13.12.2011 в 22:59.
(Offline)
 
Ответить с цитированием
Старый 23.11.2011, 16:37   #264
HolyDel
 
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений
(для 2,707 пользователей)
Ответ: Странное.

стэлс машина
HD 6850 M
Win7
Миниатюры
Нажмите на изображение для увеличения
Название: стелс машина.jpg
Просмотров: 658
Размер:	256.7 Кб
ID:	15559  
(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо HolyDel за это полезное сообщение:
dsd (23.11.2011), moka (23.11.2011)
Старый 23.11.2011, 16:57   #265
dsd
Мастер
 
Аватар для dsd
 
Регистрация: 13.06.2011
Сообщений: 1,103
Написано 481 полезных сообщений
(для 1,836 пользователей)
Ответ: Странное.



А с этим слегка упрощенным шейдером? Походу косяк с матрицей какой-нить

float4x4 matrixWorldViewProj : MATRIX_WORLDVIEWPROJ; // матрица итоговая
float4x4 matrixWorld : MATRIX_WORLD; // матрица мировая
float3 lightDirection : LIGHT0_DIRECTION; // направление
float4 lightColor : LIGHT0_COLOR; // цвет
float4 entityColor : COLOR_DIFFUSE; // цвет объекта
float4 campos : CAMERA_POSITION;
float4 ambient : COLOR_AMBIENT ;


float4x4 view_proj_matrix : MATRIX_VIEWPROJ;
float4x4 proj_matrix : MATRIX_PROJ;
float4x4 inv_view_matrix : MATRIX_WORLDVIEWINVERSE;

//параметры краски
float4 paintColorMid;
float4 paintColor2;
float4 paintColor0;


sampler showroomMap;
texture diffuseTexture; // текстура
// описываем sampler
sampler diffuseSampler = sampler_state
{
Texture = <diffuseTexture>; // привязываем текстуру
// устанавливаем адресацию координат
AddressU = WRAP;
AddressV = WRAP;
AddressW = WRAP;
// устанавливаем фильтрацию
MinFilter = ANISOTROPIC;
MagFilter = ANISOTROPIC;
MipFilter = ANISOTROPIC;
// устанавливаем уровень фильтрации
MaxAnisotropy = 5;
};




// входная структура для вершинного шейдера
struct VSInput
{
float4 Pos : POSITION;
float3 Normal : NORMAL;
float2 Tex : TEXCOORD0;

};
// структура для результата вершинного шейдера
struct VSOutput
{
float4 Pos : POSITION;
float2 Tex : TEXCOORD0;
float3 Normal : TEXCOORD1;
float3 View : TEXCOORD2;
float2 SparkleTex : TEXCOORD3;
float3 Pos2 : TEXCOORD4;
};
// вершинный шейдер
VSOutput VSMain(VSInput input)
{

VSOutput output;
// Propagate transformed position out:
output.Pos = mul( input.Pos,matrixWorldViewProj );

// Compute view vector:
output.View = normalize( mul(campos-input.Pos,matrixWorld));

// Propagate texture coordinates:
float3 reflVec = normalize(reflect(output.View, input.Normal));
float sins=sqrt(1-reflVec.y*reflVec.y);
output.Tex = float2(acos(reflVec.x/sins)/6.28,acos(reflVec.y)/6.2;

// Propagate tangent, binormal, and normal vectors to pixel shader:
output.Normal = normalize(input.Normal);
// Compute microflake tiling factor:
//output.SparkleTex = 5*float2( output.Pos.x/output.Pos.w , output.Pos.y/output.Pos.w );
output.Pos2 =mul(input.Pos.xyz,proj_matrix);
output.SparkleTex = 5*output.Pos2.xy*output.Pos2.yz;
return output;
// возвращаем результат
return output;
}
// пиксельный шейдер
float4 PSMain(VSOutput input) : COLOR0
{
//для отражзения
float lit = dot(input.Normal, -lightDirection);
float3 vView = input.View ;
//шум+частицы
float4 sparklecolor=tex2D(diffuseSampler,input.SparkleTex );
// Compute reflection vector resulted from the clear coat of paint on the metallic
// surface:
float fFresnel=dot(vView,input.Normal+0.2*(sparklecolor. rgb-float3(1,1,1)));

// Compute final paint color: combines all layers of paint as well as two layers
// of microflakes
float fFresnelSq = fFresnel*fFresnel;
float4 paintColor = fFresnel*paintColor0+fFresnelSq*paintColorMid+fFre snelSq*fFresnelSq*paintColor2;


//отражения
// Look up the reflection

float4 reflection = tex2D(showroomMap, input.Tex);
return 2*paintColor*reflection+0.3*lit*reflection;

}
// техника для отрисовки
technique Diffuse
{
pass p0
{
VertexShader = compile vs_2_0 VSMain();
PixelShader = compile ps_2_0 PSMain();
}
}
(Offline)
 
Ответить с цитированием
Старый 23.11.2011, 18:54   #266
dsd
Мастер
 
Аватар для dsd
 
Регистрация: 13.06.2011
Сообщений: 1,103
Написано 481 полезных сообщений
(для 1,836 пользователей)
Ответ: Странное.


Отоптимиздил шейдер по полной. Теперь тормоза только от хайполи колес

У кого не отрисуется машинка отпишитесь . Хотя единственное радикальное отличие от стандартного шейдера в примерах только в этом:

float4x4 proj_matrix : MATRIX_PROJ;

float4 Pos2 =mul(input.Pos,proj_matrix);

float4x4 matrixWorldViewProj MATRIX_WORLDVIEWPROJ// матрица итоговая
float4x4 matrixWorld MATRIX_WORLD// матрица мировая
float4x4 proj_matrix MATRIX_PROJ;
float3 lightDirection LIGHT0_DIRECTION// направление
float4 lightColor LIGHT0_COLOR// цвет
float4 entityColor COLOR_DIFFUSE// цвет объекта
float4 campos CAMERA_POSITION;
float4 ambient COLOR_AMBIENT ;



//параметры краски
float4 paintColorMid;
float4 paintColor2;
float4 paintColor0;

texture showroomMap// текстура
// описываем sampler
sampler showroomMapSampler sampler_state
{
    
Texture = <showroomMap>; // привязываем текстуру
    // устанавливаем адресацию координат
    
AddressU WRAP;
    
AddressV WRAP;
    
AddressW WRAP;
    
// устанавливаем фильтрацию
    
MinFilter ANISOTROPIC;
    
MagFilter ANISOTROPIC;
    
MipFilter ANISOTROPIC;
    
// устанавливаем уровень фильтрации
    
MaxAnisotropy 5;
};


texture diffuseTexture// текстура
// описываем sampler
sampler diffuseSampler sampler_state
{
    
Texture = <diffuseTexture>; // привязываем текстуру
    // устанавливаем адресацию координат
    
AddressU WRAP;
    
AddressV WRAP;
    
AddressW WRAP;
    
// устанавливаем фильтрацию
    
MinFilter ANISOTROPIC;
    
MagFilter ANISOTROPIC;
    
MipFilter ANISOTROPIC;
    
// устанавливаем уровень фильтрации
    
MaxAnisotropy 5;
};




// входная структура для вершинного шейдера
struct VSInput
{
float4 Pos      POSITION
float3 Normal  NORMAL;
};
// структура для результата вершинного шейдера
struct VSOutput
{
   
float4 Pos        POSITION;
   
float2 Tex        TEXCOORD0;
   
float3 Normal     TEXCOORD1;
   
float3 View       TEXCOORD2;
   
float2 SparkleTex TEXCOORD3;
};
// вершинный шейдер
VSOutput VSMain(VSInput input)
{
   
VSOutput output;
   
// Propagate transformed position out:
   
output.Pos mul(input.Pos,matrixWorldViewProj);
   
// Compute view vector: 
   
output.View normalizemul((campos-input.Pos),matrixWorld));
   
output.Normal   mul(input.Normal,matrixWorld);
   
// Propagate texture coordinates:
   
float3 reflVec reflect(output.Viewoutput.Normal);
   
float sins=sqrt(1-reflVec.y*reflVec.y);
   
output.Tex float2(acos(reflVec.x/sins)/6.28,acos(reflVec.y)/6.28);
   
// Compute microflake tiling factor:
   
float4 Pos2   =mul(input.Pos,proj_matrix);
   
output.SparkleTex =3*Pos2.xy*Pos2.yz;
   return 
output;
// возвращаем результат
return output;
}
// пиксельный шейдер
float4 PSMain(VSOutput input) : COLOR0
{
   
float3 vView =  input.View ;
   
//шум+частицы
   
float4 sparklecolor=tex2D(diffuseSampler,input.SparkleTex);
   
float  fFresnel=dot(vView,input.Normal+0.25*sparklecolor);
   
// of microflakes
   
float  fFresnelSq fFresnel*fFresnel;
   
float4 paintColor fFresnel*paintColor0+fFresnelSq*paintColorMid+fFresnelSq*fFresnelSq*paintColor2
    
// Look up the reflection
   
float4 reflection tex2D(showroomMapSamplerinput.Tex);


   return 
0.75*paintColor*reflection+0.45*reflection*sqrt(1-fFresnelSq);
   
}
// техника для отрисовки
technique Diffuse
{
pass p0
{
VertexShader compile vs_2_0 VSMain();
PixelShader compile ps_2_0 PSMain();
}

А косяк может быть в том, что у команды mul(position,matrix) в хорсе, а в рендерманке mul(matrix,position)?

Последний раз редактировалось dsd, 13.12.2011 в 22:59.
(Offline)
 
Ответить с цитированием
Старый 24.11.2011, 13:58   #267
HolyDel
 
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений
(для 2,707 пользователей)
Ответ: Странное.

машина появилась
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
dsd (24.11.2011)
Старый 26.11.2011, 15:22   #268
dsd
Мастер
 
Аватар для dsd
 
Регистрация: 13.06.2011
Сообщений: 1,103
Написано 481 полезных сообщений
(для 1,836 пользователей)
Ответ: Странное.


Пытаюсь сочинять шейдер неба.

Как в сферических координатах можно на сфере рисовать окружность равного диаметра? От вектора втыкающегося в точку находить перпендикуляр и вращать вокруг точки?
(Offline)
 
Ответить с цитированием
Старый 26.11.2011, 16:10   #269
dsd
Мастер
 
Аватар для dsd
 
Регистрация: 13.06.2011
Сообщений: 1,103
Написано 481 полезных сообщений
(для 1,836 пользователей)
Ответ: Странное.

Шейдер машины ржачно раскрашивает морда
(Offline)
 
Ответить с цитированием
Старый 26.11.2011, 19:33   #270
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Ответ: Странное.

Про солнышко, всё просто: есть у тебя вектор - где сейчас солнце находится. И есть у тебя вектор между камерой и пикселем на скайбоксе. Делаешь DOT этих двух векторов, и далее математикой или по условию, выбираешь то что больше 0.95 - то солнце, а что меньше - то небо.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
dsd (26.11.2011)
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


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


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com