Тема: Странное.
Показать сообщение отдельно
Старый 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)
 
Ответить с цитированием