MapleStory Play movie

Go down

MapleStory Play movie

投稿 by 構築さん on 2014-06-02, 08:11





ヘネシスBGM



リス港BGM



MapleStory2楽しみですね^^

avatar
構築さん
Admin

Posts : 193
Join date : 2014/05/29

http://maplescience.forumjap.com

トップに戻る Go down

Re: MapleStory Play movie

投稿 by がいる on 2016-05-11, 18:39

日本では、まだMapleStory2はプレイ出来ないのですか??

数週間前から、MapleStory2(ベータ版)のクライアントを覗いていましたが、
4バイト毎に 0xFF がやたらと続く箇所があり、自作のWZ解析プログラムのルーチンを使用して画像にしてみると、マスコットキャラクタ!? らしきキノコの画像が出来上がりました。
16x16
32x32
256x256

また、以前より見たいと思っていた、OpenGL(DirectX-3D!?)のレンダリングのソースがありました。3Dゲームは、OpenGLで記述するのが性能が出ますから。
ソースを流し込んで高速な描画が出来るOpenGLのライブラリーが凄いです。^^
(Androidの3D描画に応用出来ないかなと思ったり…)

MapleStory(1) も、MapleStory2もソース(記述言語)をクライアントに大量に持つ方向に進んで行くのですかね!?
共通のソースで、描画はPC側のドライバーまかせが、問題も少なくて済む予感もしますし…

fragment:

ソースのサンプル(こんなのがクライアントに埋め込まれています)
Code:
S01117198:

    if (LightType != 2)
    {
        // This version only supports spotlights.
        ShadowOut = 1.0;
    }
    else
    {
        float3 LightToWorldPos = normalize(float3(WorldPos - LightPos));

        if (dot(LightDirection, LightToWorldPos) > CosOfCutoff)
        {
            float4 LightProjPos = mul(WorldPos, WorldToLightProjMat);
            float3 ShadowTexC = LightProjPos.xyz / LightProjPos.w;
            ShadowTexC.xy =( 0.5 * ShadowTexC.xy) + float2( 0.5, 0.5 );
            ShadowTexC.y = 1.0f - ShadowTexC.y;

            float LightSpaceDepth = clamp(ShadowTexC.z - ShadowBias,
                0.0, 1.0);

            float ShadowMapSizeInverse = 1.0 / ShadowMapSize.x;

            ShadowTexC.xy = ShadowTexC.xy - ShadowMapSizeInverse.xx;

            ShadowOut = 0;
            float4 fOnes = float4(1.0, 1.0, 1.0, 1.0);
            float4 fKernels = float4(1.0, 1.0, 1.0, 1.0);
            float faKernels[4] = {1.0, 1.0, 1.0, 1.0};

            faKernels[0] = 1-frac(ShadowTexC.y * ShadowMapSize.y);
            faKernels[3]= frac(ShadowTexC.y  * ShadowMapSize.y);

            fKernels.x = 1-frac(ShadowTexC.x * ShadowMapSize.x);
            fKernels.w = frac(ShadowTexC.x  * ShadowMapSize.x);

            float fTotalPercent = 0;

            // This loop is manually unrolled here to avoid long
            // shader compilation times.
            //for (int i=0; i < 4; i++)
            // i == 0
            {
                float4 shadowMapDepth = 0;
                float2 pos = ShadowTexC.xy;
                shadowMapDepth.x = tex2D(ShadowMap, pos).x;
                pos.x += ShadowMapSizeInverse;
                shadowMapDepth.y = tex2D(ShadowMap, pos).x;
                pos.x += ShadowMapSizeInverse;
                shadowMapDepth.z = tex2D(ShadowMap, pos).x;
                pos.x += ShadowMapSizeInverse;
                shadowMapDepth.w = tex2D(ShadowMap, pos).x;

                float4 shad = (LightSpaceDepth <= shadowMapDepth);

                ShadowOut += dot(shad, fKernels) * faKernels[0];
                fTotalPercent += dot(fOnes, fKernels) * faKernels[0];
            }
            // i == 1
            {
                float4 shadowMapDepth = 0;
                float2 pos = ShadowTexC.xy;
                pos.y += ShadowMapSizeInverse;
                shadowMapDepth.x = tex2D(ShadowMap, pos).x;
                pos.x += ShadowMapSizeInverse;
                shadowMapDepth.y = tex2D(ShadowMap, pos).x;
                pos.x += ShadowMapSizeInverse;
                shadowMapDepth.z = tex2D(ShadowMap, pos).x;
                pos.x += ShadowMapSizeInverse;
                shadowMapDepth.w = tex2D(ShadowMap, pos).x;

                float4 shad = (LightSpaceDepth <= shadowMapDepth);

                ShadowOut += dot(shad, fKernels) * faKernels[1];
                fTotalPercent += dot(fOnes, fKernels) * faKernels[1];
            }
            // i == 2
            {
                float4 shadowMapDepth = 0;
                float2 pos = ShadowTexC.xy;
                pos.y += 2 * ShadowMapSizeInverse;
                shadowMapDepth.x = tex2D(ShadowMap, pos).x;
                pos.x += ShadowMapSizeInverse;
                shadowMapDepth.y = tex2D(ShadowMap, pos).x;
                pos.x += ShadowMapSizeInverse;
                shadowMapDepth.z = tex2D(ShadowMap, pos).x;
                pos.x += ShadowMapSizeInverse;
                shadowMapDepth.w = tex2D(ShadowMap, pos).x;

                float4 shad = (LightSpaceDepth <= shadowMapDepth);

                ShadowOut += dot(shad, fKernels) * faKernels[2];
                fTotalPercent += dot(fOnes, fKernels) * faKernels[2];
            }
            // i == 3
            {
                float4 shadowMapDepth = 0;
                float2 pos = ShadowTexC.xy;
                pos.y += 3 * ShadowMapSizeInverse;
                shadowMapDepth.x = tex2D(ShadowMap, pos).x;
                pos.x += ShadowMapSizeInverse;
                shadowMapDepth.y = tex2D(ShadowMap, pos).x;
                pos.x += ShadowMapSizeInverse;
                shadowMapDepth.z = tex2D(ShadowMap, pos).x;
                pos.x += ShadowMapSizeInverse;
                shadowMapDepth.w = tex2D(ShadowMap, pos).x;

                float4 shad = (LightSpaceDepth <= shadowMapDepth);

                ShadowOut += dot(shad, fKernels) * faKernels[3];
                fTotalPercent += dot(fOnes, fKernels) * faKernels[3];
            }

            ShadowOut = ShadowOut / fTotalPercent;
        }
        else
        {
            // Outside of the light cone is shadowed completely
            ShadowOut = 0.0;
        }
    }

S01118540:

    if (LightType != 2)
    {
        // This version only supports spotlights.
        ShadowOut = 1.0;
    }
    else
    {
        float3 LightToWorldPos = normalize(float3(WorldPos - LightPos));

        if (dot(LightDirection, LightToWorldPos) > CosOfCutoff)
        {
            float4 LightProjPos = mul(WorldPos, WorldToLightProjMat);
            float3 ShadowTexC = LightProjPos.xyz / LightProjPos.w;
            ShadowTexC.xy =( 0.5 * ShadowTexC.xy) + float2( 0.5, 0.5 );
            ShadowTexC.y = 1.0f - ShadowTexC.y;
            float LightSpaceDepth = clamp(ShadowTexC.z - ShadowBias,
                0.0, 1.0);
            float ShadowMapSizeInverse = 1.0 / ShadowMapSize.x;
            float2 lerps = frac( ShadowTexC.xy * ShadowMapSize.xx);

            float4 SourceVals;
            SourceVals.x = tex2D( ShadowMap, ShadowTexC.xy ).r;

            ShadowTexC.x += ShadowMapSizeInverse;
            SourceVals.y = tex2D( ShadowMap, ShadowTexC.xy).r;

            ShadowTexC.y += ShadowMapSizeInverse;
            SourceVals.w = tex2D( ShadowMap, ShadowTexC.xy).r;

            ShadowTexC.x -= ShadowMapSizeInverse;
            SourceVals.z = tex2D( ShadowMap, ShadowTexC.xy).r;

            float4 Shade = (LightSpaceDepth <= SourceVals);

            // lerp between the shadow values to calculate our light amount
            ShadowOut = lerp(
                lerp(Shade.x, Shade.y, lerps.x),
                lerp(Shade.z, Shade.w, lerps.x), lerps.y );
        }
        else
        {
            // Outside of the light cone is shadowed completely
            ShadowOut = 0.0;
        }
    }
avatar
がいる

Posts : 13
Join date : 2014/06/17
Location : 北海道

トップに戻る Go down

トップに戻る


 
Permissions in this forum:
返信投稿: 不可