MapleStory Play movie
2 posters
Page 1 of 1
Re: MapleStory Play movie
日本では、まだMapleStory2はプレイ出来ないのですか??
数週間前から、MapleStory2(ベータ版)のクライアントを覗いていましたが、
4バイト毎に 0xFF がやたらと続く箇所があり、自作のWZ解析プログラムのルーチンを使用して画像にしてみると、マスコットキャラクタ!? らしきキノコの画像が出来上がりました。
16x16
32x32
256x256
また、以前より見たいと思っていた、OpenGL(DirectX-3D!?)のレンダリングのソースがありました。3Dゲームは、OpenGLで記述するのが性能が出ますから。
ソースを流し込んで高速な描画が出来るOpenGLのライブラリーが凄いです。^^
(Androidの3D描画に応用出来ないかなと思ったり…)
MapleStory(1) も、MapleStory2もソース(記述言語)をクライアントに大量に持つ方向に進んで行くのですかね!?
共通のソースで、描画はPC側のドライバーまかせが、問題も少なくて済む予感もしますし…
数週間前から、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;
}
}
がいる- Posts : 13
Join date : 2014/06/17
Location : 北海道
Page 1 of 1
Permissions in this forum:
返信投稿: 不可