forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Проекты C++ (http://forum.boolean.name/forumdisplay.php?f=56)
-   -   [TrueHorror] - разработка (http://forum.boolean.name/showthread.php?t=17293)

mr.DIMAS 22.09.2012 17:34

Ответ: [TrueHorror] - разработка
 
http://connect.creativelabs.com/open.../AllItems.aspx

третий сверху

mr.DIMAS 22.09.2012 23:01

Ответ: [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();
    }
}


pax 23.09.2012 15:01

Ответ: [TrueHorror] - разработка
 
так что на счет черного экрана?

mr.DIMAS 23.09.2012 20:21

Ответ: [TrueHorror] - разработка
 
убрал нафиг тени, и запилил обычное точечное освещение без теней - в ущерб "графону".

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

брать предмет - [ E ]. брость - ЛКМ

заменил текстуры.

сорсы в комплекте

шейдер рисует 6 источников света за проход. свет простейший.

баги сообщаем.

аттачи глючат.

вот
http://tempfile.ru/file/2535190

Устарело

mr.DIMAS 24.09.2012 00:04

Ответ: [TrueHorror] - разработка
 
Вложений: 4
добавил эффект затуманивания рассудка от темноты( как в амнезии почти что )

выложу скриншоты:

Wegox 24.09.2012 00:52

Ответ: [TrueHorror] - разработка
 
Тележки странно вибрируют если их в руки взять, это и правда страшно!
будто в них демоны. И да, если их кидать то они не переворачиваются.:4to:
Красного эффекта не ведал.

mr.DIMAS 24.09.2012 01:13

Ответ: [TrueHorror] - разработка
 
Цитата:

Красного эффекта не ведал.
если посмотреть на время постов - все станет ясно.

добавил музыку - круто что есть FMA.

добавил эффект при беге - увидите

шейдер освещения( в архиве ) поглядите - такой подход вообще катит?

http://tempfile.ru/file/2535239

Устарело

Wegox 24.09.2012 01:22

Ответ: [TrueHorror] - разработка
 
Аааа, это ты как бы в реальном времени проект делаешь что-ли, Я думал ты просто скриншоты выложил.

mr.DIMAS 24.09.2012 01:23

Ответ: [TrueHorror] - разработка
 
Цитата:

Аааа, это ты как бы в реальном времени проект делаешь что-ли, Я думал ты просто скриншоты выложил.
когда время позволяет, сегодня только 4 часа потратил на то чтобы вспомнить как кодить на HLSL :-D

mr.DIMAS 24.09.2012 01:27

Ответ: [TrueHorror] - разработка
 
помимо "красного эффекта" - присутствует еще и "колыхание" сцены

Wegox 24.09.2012 01:31

Ответ: [TrueHorror] - разработка
 
Цитата:

Сообщение от mr.DIMAS (Сообщение 239010)
помимо "красного эффекта" - присутствует еще и "колыхание" сцены

Чё за "колыхание сцены"
Телеги сквозь решётки проходят.

mr.DIMAS 24.09.2012 01:36

Ответ: [TrueHorror] - разработка
 
оу щит. ты минуты две в тени( можно где коробки ) постой и погляди потом на стену.

с "прохождением сквозь"уже разобрался. завтра скину

Wegox 24.09.2012 01:42

Ответ: [TrueHorror] - разработка
 
Во теперь все эффекты увидал и услыхал, а так мимо коробок пробегал и вниз:-D

mr.DIMAS 24.09.2012 01:46

Ответ: [TrueHorror] - разработка
 
вопрос к труЪ кодерам:
возможно ли вторым проходом добавить бамп?

mr.DIMAS 24.09.2012 18:16

Ответ: [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 источников света ( можно еще один добавить ) за проход и все это с бампом!

далее запилю меню и выложу новую версию


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

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot