|
22.09.2012, 17:34
|
#16
|
Дэвелопер
Регистрация: 26.12.2006
Адрес: Санкт-Петербург
Сообщений: 1,572
Написано 547 полезных сообщений (для 1,540 пользователей)
|
Ответ: [TrueHorror] - разработка
|
(Offline)
|
|
22.09.2012, 23:01
|
#17
|
Дэвелопер
Регистрация: 26.12.2006
Адрес: Санкт-Петербург
Сообщений: 1,572
Написано 547 полезных сообщений (для 1,540 пользователей)
|
Ответ: [TrueHorror] - разработка
появился вопрос по шейдерам: есть два типа источников
1) направленный с конусом ( spot )
2) точечный
как их отрисовывать вместе? первым проходом отрисовать точечные, вторым направленные?
код шейдера отвечающего за освещение
float4x4 mWorldViewProj : MATRIX_WORLDVIEWPROJ;
float4x4 mWorld : MATRIX_WORLD;
#define MAX_LIGHTS 10
float3 lightPos[ MAX_LIGHTS ];
float3 litColor[ MAX_LIGHTS ];
float litDistFactor[ MAX_LIGHTS ];
int litEnabled[ MAX_LIGHTS ];
texture diffuseTexture : TEXTURE_0;
sampler diffuseSampler = sampler_state
{
Texture = <diffuseTexture>;
AddressU = WRAP;
AddressV = WRAP;
AddressW = WRAP;
MinFilter = ANISOTROPIC;
MagFilter = ANISOTROPIC;
MipFilter = ANISOTROPIC;
MaxAnisotropy = 4;
};
struct VSInput
{
float4 pos : POSITION;
float3 normal : NORMAL;
float2 texCoord0 : TEXCOORD0;
};
struct VSOutput
{
float4 pos : POSITION;
float3 normal : TEXCOORD0;
float2 texCoord0 : TEXCOORD1;
float4 pos2 : TEXCOORD2;
};
struct PSInput
{
float3 normal : TEXCOORD0;
float2 texCoord0 : TEXCOORD1;
float4 pos : TEXCOORD2;
};
VSOutput vertexShaderMain( VSInput input )
{
VSOutput output;
output.pos = mul( input.pos, mWorldViewProj );
output.pos2 = mul( input.pos, mWorld );
output.normal = normalize( mul( input.normal, mWorld ));
output.texCoord0 = input.texCoord0;
return output;
};
float4 pixelShaderPass1( PSInput input ) : COLOR0
{
float3 result = 0;
float4 texelColor = tex2D( diffuseSampler, input.texCoord0 );
for( int i = 0; i < MAX_LIGHTS / 2; i++ )
{
if( litEnabled[ i ] )
{
float orientationFactor = saturate( dot( input.normal, lightPos[ i ].xyz - input.pos )) * 0.77;
float distanceFactor = distance( lightPos[ i ].xyz, input.pos ) * litDistFactor[ i ];
float brightness = orientationFactor / ( distanceFactor );
result += brightness * litColor[ i ] ;
};
};
return texelColor * clamp( float4( result, 1 ), 0.1, 1 );
};
float4 pixelShaderPass2( PSInput input ) : COLOR0
{
float3 result = 0;
float4 texelColor = tex2D( diffuseSampler, input.texCoord0 );
for( int i = MAX_LIGHTS / 2; i < MAX_LIGHTS; i++ )
{
if( litEnabled[ i ] )
{
float orientationFactor = saturate( dot( input.normal, lightPos[ i ].xyz - input.pos )) * 0.77;
float distanceFactor = distance( lightPos[ i ].xyz, input.pos ) * litDistFactor[ i ];
float brightness = orientationFactor / ( distanceFactor );
result += brightness * litColor[ i ] ;
};
};
return texelColor * clamp( float4( result, 1 ), 0.1, 1 );
};
technique Main
{
pass p0
{
AlphaBlendEnable = false;
VertexShader = compile vs_2_0 vertexShaderMain();
PixelShader = compile ps_2_0 pixelShaderPass1();
}
pass p1
{
AlphaBlendEnable = TRUE;
DestBlend = ONE;
SrcBlend = ONE;
VertexShader = compile vs_2_0 vertexShaderMain();
PixelShader = compile ps_2_0 pixelShaderPass2();
}
}
|
(Offline)
|
|
23.09.2012, 15:01
|
#18
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: [TrueHorror] - разработка
так что на счет черного экрана?
|
(Offline)
|
|
23.09.2012, 20:21
|
#19
|
Дэвелопер
Регистрация: 26.12.2006
Адрес: Санкт-Петербург
Сообщений: 1,572
Написано 547 полезных сообщений (для 1,540 пользователей)
|
Ответ: [TrueHorror] - разработка
убрал нафиг тени, и запилил обычное точечное освещение без теней - в ущерб "графону".
добавил возможность подбирать предметы. фишка в том, что все объекты, когда ударятся о что либо, издают звуки - эти звуки привлекают внимание главного злодея руконогоотрезальщика. чтобы пройти, скажем, через завал коробок, нужно их тихонько убрать. такие дела.
брать предмет - [ E ]. брость - ЛКМ
заменил текстуры.
сорсы в комплекте
шейдер рисует 6 источников света за проход. свет простейший.
баги сообщаем.
аттачи глючат.
вот
http://tempfile.ru/file/2535190
Устарело
Последний раз редактировалось mr.DIMAS, 24.09.2012 в 01:58.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
24.09.2012, 00:04
|
#20
|
Дэвелопер
Регистрация: 26.12.2006
Адрес: Санкт-Петербург
Сообщений: 1,572
Написано 547 полезных сообщений (для 1,540 пользователей)
|
Ответ: [TrueHorror] - разработка
добавил эффект затуманивания рассудка от темноты( как в амнезии почти что )
выложу скриншоты:
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
24.09.2012, 00:52
|
#21
|
Бывалый
Регистрация: 17.12.2011
Сообщений: 862
Написано 443 полезных сообщений (для 1,133 пользователей)
|
Ответ: [TrueHorror] - разработка
Тележки странно вибрируют если их в руки взять, это и правда страшно!
будто в них демоны. И да, если их кидать то они не переворачиваются.
Красного эффекта не ведал.
|
(Offline)
|
|
24.09.2012, 01:13
|
#22
|
Дэвелопер
Регистрация: 26.12.2006
Адрес: Санкт-Петербург
Сообщений: 1,572
Написано 547 полезных сообщений (для 1,540 пользователей)
|
Ответ: [TrueHorror] - разработка
Красного эффекта не ведал.
|
если посмотреть на время постов - все станет ясно.
добавил музыку - круто что есть FMA.
добавил эффект при беге - увидите
шейдер освещения( в архиве ) поглядите - такой подход вообще катит?
http://tempfile.ru/file/2535239
Устарело
Последний раз редактировалось mr.DIMAS, 25.09.2012 в 22:13.
|
(Offline)
|
|
24.09.2012, 01:22
|
#23
|
Бывалый
Регистрация: 17.12.2011
Сообщений: 862
Написано 443 полезных сообщений (для 1,133 пользователей)
|
Ответ: [TrueHorror] - разработка
Аааа, это ты как бы в реальном времени проект делаешь что-ли, Я думал ты просто скриншоты выложил.
|
(Offline)
|
|
24.09.2012, 01:23
|
#24
|
Дэвелопер
Регистрация: 26.12.2006
Адрес: Санкт-Петербург
Сообщений: 1,572
Написано 547 полезных сообщений (для 1,540 пользователей)
|
Ответ: [TrueHorror] - разработка
Аааа, это ты как бы в реальном времени проект делаешь что-ли, Я думал ты просто скриншоты выложил.
|
когда время позволяет, сегодня только 4 часа потратил на то чтобы вспомнить как кодить на HLSL
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
24.09.2012, 01:27
|
#25
|
Дэвелопер
Регистрация: 26.12.2006
Адрес: Санкт-Петербург
Сообщений: 1,572
Написано 547 полезных сообщений (для 1,540 пользователей)
|
Ответ: [TrueHorror] - разработка
помимо "красного эффекта" - присутствует еще и "колыхание" сцены
|
(Offline)
|
|
24.09.2012, 01:31
|
#26
|
Бывалый
Регистрация: 17.12.2011
Сообщений: 862
Написано 443 полезных сообщений (для 1,133 пользователей)
|
Ответ: [TrueHorror] - разработка
Сообщение от mr.DIMAS
помимо "красного эффекта" - присутствует еще и "колыхание" сцены
|
Чё за "колыхание сцены"
Телеги сквозь решётки проходят.
|
(Offline)
|
|
24.09.2012, 01:36
|
#27
|
Дэвелопер
Регистрация: 26.12.2006
Адрес: Санкт-Петербург
Сообщений: 1,572
Написано 547 полезных сообщений (для 1,540 пользователей)
|
Ответ: [TrueHorror] - разработка
оу щит. ты минуты две в тени( можно где коробки ) постой и погляди потом на стену.
с "прохождением сквозь"уже разобрался. завтра скину
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
24.09.2012, 01:42
|
#28
|
Бывалый
Регистрация: 17.12.2011
Сообщений: 862
Написано 443 полезных сообщений (для 1,133 пользователей)
|
Ответ: [TrueHorror] - разработка
Во теперь все эффекты увидал и услыхал, а так мимо коробок пробегал и вниз
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
24.09.2012, 01:46
|
#29
|
Дэвелопер
Регистрация: 26.12.2006
Адрес: Санкт-Петербург
Сообщений: 1,572
Написано 547 полезных сообщений (для 1,540 пользователей)
|
Ответ: [TrueHorror] - разработка
вопрос к труЪ кодерам:
возможно ли вторым проходом добавить бамп?
|
(Offline)
|
|
24.09.2012, 18:16
|
#30
|
Дэвелопер
Регистрация: 26.12.2006
Адрес: Санкт-Петербург
Сообщений: 1,572
Написано 547 полезных сообщений (для 1,540 пользователей)
|
Ответ: [TrueHorror] - разработка
хм. ответов на булке ждать не приходится, поэтому сам запилил
вот он бамп моей мечты:
float4x4 mWorldViewProj : MATRIX_WORLDVIEWPROJ;
float4x4 mWorld : MATRIX_WORLD;
float3 cameraPosition : CAMERA_POSITION;
float3 lit1Pos : LIGHT0_POSITION;
float3 lit1Color : LIGHT0_COLOR;
float lit1Range : LIGHT0_RANGE;
float3 lit2Pos : LIGHT1_POSITION;
float3 lit2Color : LIGHT1_COLOR;
float lit2Range : LIGHT1_RANGE;
float3 lit3Pos : LIGHT2_POSITION;
float3 lit3Color : LIGHT2_COLOR;
float lit3Range : LIGHT2_RANGE;
float3 lit4Pos : LIGHT3_POSITION;
float3 lit4Color : LIGHT3_COLOR;
float lit4Range : LIGHT3_RANGE;
float3 lit5Pos : LIGHT4_POSITION;
float3 lit5Color : LIGHT4_COLOR;
float lit5Range : LIGHT4_RANGE;
float3 lit6Pos : LIGHT5_POSITION;
float3 lit6Color : LIGHT5_COLOR;
float lit6Range : LIGHT5_RANGE;
const texture diffuseTexture : TEXTURE_0;
const texture normalTexture : TEXTURE_1;
sampler diffuseSampler = sampler_state
{
Texture = <diffuseTexture>;
AddressU = WRAP;
AddressV = WRAP;
AddressW = WRAP;
MinFilter = LINEAR;
MagFilter = LINEAR;
MipFilter = LINEAR;
};
sampler normalSampler = sampler_state
{
Texture = <normalTexture>;
AddressU = WRAP;
AddressV = WRAP;
AddressW = WRAP;
MinFilter = LINEAR;
MagFilter = LINEAR;
MipFilter = LINEAR;
};
struct VSInputBump
{
float4 pos : POSITION;
float2 diffuseCoord : TEXCOORD0;
float2 normalCoord : TEXCOORD1;
float3 tangent : TANGENT;
float3 binormal : BINORMAL;
float3 normal : NORMAL;
};
struct VSOutputBump
{
float4 pos : POSITION;
float2 diffuseCoord : TEXCOORD0;
float4 lit1Param : TEXCOORD2;
float4 lit2Param : TEXCOORD3;
float4 lit3Param : TEXCOORD4;
float4 lit4Param : TEXCOORD5;
float4 lit5Param : TEXCOORD6;
float4 lit6Param : TEXCOORD7;
};
struct PSInputBump
{
float2 diffuseCoord : TEXCOORD0;
float4 lit1Param : TEXCOORD2;
float4 lit2Param : TEXCOORD3;
float4 lit3Param : TEXCOORD4;
float4 lit4Param : TEXCOORD5;
float4 lit5Param : TEXCOORD6;
float4 lit6Param : TEXCOORD7;
};
VSOutputBump VertexShaderBump( VSInputBump input )
{
VSOutputBump output = (VSOutputBump)( 0 );
output.pos = mul( input.pos , mWorldViewProj ) ;
output.diffuseCoord = input.diffuseCoord;
float3 worldPos = mul( input.pos, mWorld );
float3 tangent = normalize( mul( input.tangent, mWorld ));
float3 binormal = normalize( mul( input.binormal, mWorld ));
float3 normal = normalize( mul( input.normal, mWorld ));
float3 litDir1 = normalize( lit1Pos.xyz - worldPos );
float3 litDir2 = normalize( lit2Pos.xyz - worldPos );
float3 litDir3 = normalize( lit3Pos.xyz - worldPos );
float3 litDir4 = normalize( lit4Pos.xyz - worldPos );
float3 litDir5 = normalize( lit5Pos.xyz - worldPos );
float3 litDir6 = normalize( lit6Pos.xyz - worldPos );
output.lit1Param.xyz = float3( dot( litDir1, tangent ), dot( litDir1, binormal ), dot( litDir1, normal ) );
output.lit2Param.xyz = float3( dot( litDir2, tangent ), dot( litDir2, binormal ), dot( litDir2, normal ) );
output.lit3Param.xyz = float3( dot( litDir3, tangent ), dot( litDir3, binormal ), dot( litDir3, normal ) );
output.lit4Param.xyz = float3( dot( litDir4, tangent ), dot( litDir4, binormal ), dot( litDir4, normal ) );
output.lit5Param.xyz = float3( dot( litDir5, tangent ), dot( litDir5, binormal ), dot( litDir5, normal ) );
output.lit6Param.xyz = float3( dot( litDir6, tangent ), dot( litDir6, binormal ), dot( litDir6, normal ) );
output.lit1Param.w = lit1Range / pow( distance( lit1Pos.xyz, worldPos ), 2 );
output.lit2Param.w = lit2Range / pow( distance( lit2Pos.xyz, worldPos ), 2 );
output.lit3Param.w = lit3Range / pow( distance( lit3Pos.xyz, worldPos ), 2 );
output.lit4Param.w = lit4Range / pow( distance( lit4Pos.xyz, worldPos ), 2 );
output.lit5Param.w = lit5Range / pow( distance( lit5Pos.xyz, worldPos ), 2 );
output.lit6Param.w = lit6Range / pow( distance( lit6Pos.xyz, worldPos ), 2 );
return output;
};
float4 PixelShaderBump( PSInputBump input ) : COLOR0
{
float3 bumpNormal = normalize( tex2D( normalSampler, input.diffuseCoord ) * 2.0f - 1.0f );
float3 light1 = lit1Color * pow( max( dot( bumpNormal, input.lit1Param.xyz ), 0.0f ), 0.8f) * input.lit1Param.w;
float3 light2 = lit2Color * pow( max( dot( bumpNormal, input.lit2Param.xyz ), 0.0f ), 0.8f) * input.lit2Param.w;
float3 light3 = lit3Color * pow( max( dot( bumpNormal, input.lit3Param.xyz ), 0.0f ), 0.8f) * input.lit3Param.w;
float3 light4 = lit4Color * pow( max( dot( bumpNormal, input.lit4Param.xyz ), 0.0f ), 0.8f) * input.lit4Param.w;
float3 light5 = lit5Color * pow( max( dot( bumpNormal, input.lit5Param.xyz ), 0.0f ), 0.8f) * input.lit5Param.w;
float3 light6 = lit6Color * pow( max( dot( bumpNormal, input.lit6Param.xyz ), 0.0f ), 0.8f) * input.lit6Param.w;
return tex2D( diffuseSampler, input.diffuseCoord ) * saturate( float4( light1 + light2 + light3 + light4 + light5 + light6, 1 ));
};
technique Main
{
pass Bump
{
Lighting = false;
VertexShader = compile vs_2_0 VertexShaderBump();
PixelShader = compile ps_2_0 PixelShaderBump();
}
}
6 источников света ( можно еще один добавить ) за проход и все это с бампом!
далее запилю меню и выложу новую версию
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 10:50.
|