焔(プログラム・自作ゲーム・開発日記)

フリーのゲームダウンロード ・プログラムのトピックス

シャイニングのシェーダー

ついこの間シャイニングのピアレビューが通りました
審査してくれた方ありがとうございます

この頃はXNAコンテストに向け新作を作成中です
前に作った「あちゃちゃ」というゲームを大幅リニューアルして出す予定
時間があればもう一本!
欲張って出してもろくなものはできなさそうですが

今回追加したシャイニングの機能で、
やられたときに画面の明暗が反転(ネガティブフィルタ)する処理と
ブースト使用時のブラーのシェーダーを載せてみます
後、アナグリフモードも実装したのでそれも
単にビューの位置をずらしたタイミングで赤青を切り替えるだけです





sampler BloomSampler : register(s0);
sampler BaseSampler : register(s1);

float BloomIntensity;
float BaseIntensity;

float BloomSaturation;
float BaseSaturation;

//ここを本体から切り替え
bool GreenViewEnable;
bool BuleRedViewEnable;
bool BuleRedSwitch;
bool RevViewEnable;

float2 m_CenterTexel ; //ブラーの中心のテクセル座標
float BlurPower = 9.9f; //ぼけ強度(0.0f でボケなし)
float m_TU; //X方向の隣のテクセル位置
float m_TV; //Y方向の隣のテクセル位置


float4 AdjustSaturation(float4 color, float saturation)
{
float grey = dot(color, float3(0.3, 0.59, 0.11));

return lerp(grey, color, saturation);
}

float4 Expl( float2 texCoord : TEXCOORD0 ) : COLOR0
{
float4 Color[10];

m_CenterTexel.x = 0.5;
m_CenterTexel.y = 0.5;
//ブラーの中心位置 ← 現在のテクセル位置
float2 dir = m_CenterTexel - texCoord;

//距離を計算する
float len = length( dir );

//1テクセルの大きさをセット
m_TU = 1.0f / 1024;
m_TV = 1.0f / 768;

//方向ベクトルの正規化し、1テクセル分の長さとなる方向ベクトルを計算する
dir = normalize( dir ) * float2( m_TU, m_TV );

//m_BlurPower でボケ具合を調整する
//距離を積算することにより、爆発の中心位置に近いほどブラーの
//影響が小さくなるようにする
dir *= BlurPower * len;

//合成する
Color[0] = tex2D( BaseSampler, texCoord ) * 0.19f;
Color[1] = tex2D( BaseSampler, texCoord + dir ) * 0.17f;
Color[2] = tex2D( BaseSampler, texCoord + dir * 2.0f ) * 0.15f;
Color[3] = tex2D( BaseSampler, texCoord + dir * 3.0f ) * 0.13f;
Color[4] = tex2D( BaseSampler, texCoord + dir * 4.0f ) * 0.11f;
Color[5] = tex2D( BaseSampler, texCoord + dir * 5.0f ) * 0.09f;
Color[6] = tex2D( BaseSampler, texCoord + dir * 6.0f ) * 0.07f;
Color[7] = tex2D( BaseSampler, texCoord + dir * 7.0f ) * 0.05f;
Color[8] = tex2D( BaseSampler, texCoord + dir * 8.0f ) * 0.03f;
Color[9] = tex2D( BaseSampler, texCoord + dir * 9.0f ) * 0.01f;

return Color[0] + Color[1] + Color[2] + Color[3] + Color[4] + Color[5]
+ Color[6] + Color[7] + Color[8] + Color[9];
}

float4 PixelShader(float2 texCoord : TEXCOORD0) : COLOR0
{
float4 bloom = tex2D(BloomSampler, texCoord);
float4 base;
float gray;
float4 color;

if(BlurPower > 0)
{
base = Expl(texCoord);
}
else
{
base = tex2D(BaseSampler, texCoord);
}
// ブルームの処理
bloom = AdjustSaturation(bloom, BloomSaturation) * BloomIntensity;
base = AdjustSaturation(base, BaseSaturation) * BaseIntensity;

base *= (1 - saturate(bloom));

//色調変更モード
if (GreenViewEnable)
{
color = float4( base.g +bloom.g ,base.b +bloom.b, base.r
+bloom.r*0.4, base.a +bloom.a );
}
//赤青アナグリフモード
else if (BuleRedViewEnable)
{
gray = 0.3*base.r + 0.59 *base.g + 0.11*base.b;
gray += 0.3*bloom.r + 0.59 *bloom.g + 0.11*bloom.b;
//ここで赤青を切り替える
if(BuleRedSwitch)
{
color = float4( gray * 1.5, 0, 0, base.a );
}
else
{
color = float4( 0, 0, gray * 1.5, base.a );
}
}
//通常モード
else
{

color = base + bloom;
//反転モード
if (RevViewEnable)
{
color.rgb = 1.0f - color.rgb;
}
}
return color;
}




technique BloomCombine
{
pass Pass1
{
PixelShader = compile ps_2_0 PixelShader();
}
}



鋼鉄の戦士さんのサイトを参考にしています
http://maverickproj.web.fc2.com/pg48.html

テーマ:ゲーム製作 関連 - ジャンル:ゲーム

XNA | コメント:4 | トラックバック:0 |

シャイニングの画面分割対戦版配信

シャイニングの画面分割対戦版が配信されました

マーケットプレイス

シャイニングと尊い犠牲についてインタビューを受けました
毎日ムキムキさんの所で公開されています

毎日ムキムキ




ピアレビューは通ったのですが、
実はバグがありまして、追加でピアレビューをお願いしているところです

バグ原因はある操作をすると、画面の3D部分の表示がされなくなるのですが
これの原因が0除算でした
エラー処理を停止していたためか、0除算しても異常終了せずに
非数値として処理を続行していたため、原因特定に苦労しました

ピアレビュー対策のため、リリース版では万が一にも異常終了しないように
エラー処理を停止していたのですが、裏目に出てしまいました

XNA | コメント:2 | トラックバック:0 |

画面分割対戦対応

シャイニングの画面分割対戦に対応しましたので
再レビューに提出している最中です
(既に3回差し戻しくらいましたw)

画面分割対戦ですが、Win版では実装しないで
XBOX版でのみ使えるようにして、差別化しようと思います
XBOX版を購入して頂いた方に納得がいく位というと
中々大変そうですが

それと、日本語と英語に本格対応しました
後は画面が見づらいのを多少緩和しました

この英語への対応が大変で
グーグル翻訳で機体説明等を翻訳したところ
今度はピアレビューで英語がおかしいとの理由で
差し戻しを食らっちゃいました
外人さんは厳しいのです
まあ、でもその外人さんが協力してくれて
おかしな部分を修正することが出来ました

英語に不安のある方は、その旨表記し
プレイテストに出してみることを
お勧めします

テーマ:ゲーム製作 関連 - ジャンル:ゲーム

XNA | コメント:0 | トラックバック:0 |

ダウンロード数集計

大体マーケットで公開されて1ヶ月たったので
ダウンロード数を確認してみました

シャイニング ブラッド
お試し版: 6759 完全版: 52

尊い犠牲
お試し版: 7883 完全版: 377

という結果に

シャイニングは400ゲイツポイント
尊いは80ゲイツポイント
30%マイクロソフトで取られてポイント換算すると
400 × 52 × (70%-0%) × 0.0121 = $176.176
80 × 377 × (70%-0%) × 0.0121 = $255.4552
計431.6312
そこにさらに30%税金で取られちゃうので
$302.14184≒30200円ということでしょうか?

この完全版の数って実際に購入したのか、単にダウンロードしただけなのか
わからないんでこれが正しいか微妙ではあります

この売り上げ高いと見るか安いとみるか

意外だったのは尊い犠牲の完全版ダウンロード数
シャイニングの方は400ポイント分あると思ってるんですが
尊いは80でも高いと思ってるのでちょっと申し訳ないです

テーマ:ゲーム製作 関連 - ジャンル:ゲーム

XNA | コメント:0 | トラックバック:0 |

自分でプロモーションしないと

プロモーションビデオ?を作ってみました
ほぼ前作った動画を流用してます(手抜きw)
もうちょっとかっこよくしたいところですが
Windowsムービーメーカーではこれが限界かな
(私のセンスも)






テーマ:ゲーム製作 関連 - ジャンル:ゲーム

XNA | コメント:1 | トラックバック:0 |
| HOME |NEXT