まるでサンシャイン2002
今日から夏体みです。
せいせきもあがったので、マリオサンシャインをかってもらいました。
成績があがってよかったね。休みでもあそんでばかりじゃいけませんよ。(先生)
マリオがおもしろいです。
うみにスミがうかんでいるところからさきにすすめません。
先生も海に行きました。水着の女の子がかわいかったです。(先生)
今日はメカクッパにやられました。
やっぱりマリオの敵はクッパなんですか?ルイージは今回は、いますか?(先生)
ヨッシーのタマゴがおちています。
エサをあげただけでなつくなんてキャッシュなやつです。
とりに水をかけて虐待するのがマイブームです。
鳥に水をかけて遊んではいけません。(先生)
30シャインあつめました。
すんごいポンプもひろいました。
ひろいものは警察にとどけましょう。(先生)
7月24日 マリオおあずけ
マリオばっかりしていたら、パパにキューブをとりあげられました。
勉強もしましょう。(先生)
しゅくだいわすれてた。
自由けんきゅうもでてたけど。ネタがないよぉ。
どうしよう・・・
先生も子供のころは自由研究で悩みました。(先生)
そういえば、カクカクシカジカな、にいさかくんが、
「シャドウマップなどのテクスチャの解像度の問題を解決する方法として、Perspective Shadow Mapsという手法があります。
ちょっと論文の比較画像は誇張しすぎですが(Perspectiveでない方のシャドウマップが駄目過ぎ)、これは中々良いと思います。
通常のシャドウマップでは光源とカメラが向かい合ってしまうとカメラに近くなるほど影が粗くなるという欠点がありますけど、この方法ならその問題もありませんね。
いつか実装してみようと思っていまだにやってませんが、誰か代わりに試してください(笑」っていってたっけ。
これやってみようかな。
INRIA Sophia Antipolis の Marc Stamminger くんと George Drettakis くんで SIGGHRAPH 2002 ってイベントでやったんだって。
パパもママもこむからやだって SIGGHRAPH につれてってくれないんだよなぁ~
自由研究の内容が決まっておめでとう。遊びにつれてってくれないからって、プレッシャーをかけちゃいけないよ(先生)
シャドウマップって、ライトを当てる方向から深さの絵をつくって、
その絵と本当にかきたい絵の深さのくらべて、影をつくるみたいです。
上の絵は、クルマのなかみをひっくりかえしてるみたいです。
さいしょに、シロクロのえをかいたあとに、テレビにもう1かい絵をかくみたいです。
draw.c 0442: lpD3DDev->GetDepthStencilSurface( &lpZbuffer ); 0443: lpD3DDev->SetRenderTarget(pTextureSurface, lpZbuffer); 0444: lpD3DDev->Clear(0,NULL,D3DCLEAR_TARGET, D3DCOLOR_XRGB(0,0,0),1.0f,0); 0445: 0446: // シャドウマップの作成 0447: lpD3DDev->SetRenderState( D3DRS_ALPHABLENDENABLE, FALSE); 0448: lpD3DDev->SetVertexShader(hVertexShader); 0449: lpD3DDev->SetPixelShader(hPixelShader); 0450: DrawModel(lpD3DDev, 1, 0); 0451: 0452: // 描画をバックバッファに戻す 0453: lpD3DDev->SetRenderTarget(pBackbuffer, lpZbuffer ); 0454: lpD3DDev->Clear(0,NULL,D3DCLEAR_ZBUFFER, 0,1.0f,0); 0455: 0456: // 比較しながらの描画 0457: lpD3DDev->SetVertexShader(hShadowVertexShader); 0458: lpD3DDev->SetPixelShader(hShadowPixelShader); 0459: lpD3DDev->SetTexture( 1, pTexture ); 0460: DrawModel(lpD3DDev, 0, 1);
おくゆきのシロクロのえをかくのは、
vs.vsh 0003: ; c4-7 -- world + ライトビュー + 透視変換行列 0004: ; c15 -- 深度調整 0006: ; v0 頂点の座標値 0009: vs.1.0 0014: ;座標変換 0015: m4x4 oPos, v0, c4 0017: ; 深度を色のw成分に入れる 0018: dp4 r0, v0, c6 0019: mad oD0, r0, c15.x, c15.y
ps.psh 0004: ps.1.0 0010: mov r0, v0.a
で、もういっかいは、
Shadow.vsh 0002: ; c0-3 -- world + ビュー + 透視変換行列 0003: ; c4-7 -- world + ライトビュー + 透視変換行列 0004: ; c13 -- ライトのベクトル (w成分は環境光の強さ) 0005: ; c14 -- ライトの色(メッシュの色) 0006: ; c15 -- 深度調整 0008: ; v0 頂点の座標値 0010: ; v7 テクスチャ座標 0012: vs.1.0 0014: ; デカールテクスチャー 0015: mov oT0, v7 0017: ;座標変換 0018: m4x4 oPos, v0, c0 0020: ; ((l,n) + l.w)*c14 (平行光源のライティング) 0021: dp4 r0.w, v3, c13 0022: mul oD0.xyz,r0.w, c14 0024: ; 深度を色のw成分に入れる 0025: dp4 r0, v0, c6 0026: mad oD0.w, r0, c15.x, c15.y 0028: ; シャドウバッファ 0029: dp4 r0.x, v0, c4 0030: dp4 r0.y, -v0, c5 0031: dp4 r0.w, v0, c7 0032: rcp r0.w, r0.w 0033: mul r0.xy, r0, r0.w 0034: mad oT1.xy, r0, c12.y, c12.y
shadow.psh 0004: ps.1.0 0006: def c0, 0.0f, 0.0f, 0.0f, 0.000000000001f ; z-オフセット 0007: def c1, 0.3f, 0.3f, 0.3f, 0.0f ; 影の濃さ 0009: ; テクスチャーの色を引っ張ってくる 0010: tex t0 ; デカールテクスチャー 0011: tex t1 ; 深度テクスチャー 0012: 0013: add r1, t0, v0 ; 色=頂点色+デカール 0014: 0015: ; r0 = (t1.a < v0.a-0.1f) ? r1 : r1-c1 0016: add r0, v0, -c0 0017: add r0, r0, -t1_bias 0018: cnd r0, r0.a, c1, c0 0019: add r0, r1, -r0
でかきます。
めんどくさいから、影の部分は手で黒く塗ろうよ。(先生)
今日は、いけぶくろにいきました。
かえりにお酒をのんでくだをまいているおとなをみました。
「マ○○サンシャイン」ってさけんでいました。
おじさんたちもマリオをするのかな?
あんなおとなにはなりたくないとおもいました。
大人の世界もいろいろと大変なんだよ。(先生)
Perspective Shadow Maps (以下、透視影マップ)は、影マップのぎょうれつをちがうものにします。
とおしへんかんしてから、ひしゃげたくうかんのままで、ライトのほうこうからせかいをみます。
ただ、とおくのものが小さくなったので、つかわないぶぶんがでてきます。
だから、いいかんじに画面の中心をずらします。
ざひょうをへんかんするぎょうれつは、むずかしいものになります。
しゃえいへんかんをしたあとに、すけーりんぐします。
これは、とうしへんかんのあとのくうかんがひしゃげてるので、
いい大きさになるようにちょうせいしています。
そのあとに、とうしへんかんしたざひょうを、もとのせかいの真ん中がちゅうしんになるようにうごかします。
そのときに、ビューぎょうれつをつかいます。ただし、してんがワールドのちゅうしん、みているむきはZほうこう、うえむきはうえむきです。
ただ、そのベクトルは、とうしへんかんでへんかんしたものです(そのあとに、きかくかもします)。
とうしへんかんでうつったせかいでのベクトルをつかうと、とうしへんかんしたせかいでのもとのワールドのちゅうしんがわかります。
ただ、つくったビューぎょうれつをつかったら、xじくとyじくがひっくりかえっていたので、もとにもどすぎょうれつをつかいました(べつにいらないけどね)。
あと、ライトのほうこうにまわしたあとは(ライトのほうこうも、とうしへんかんしたあとのむきだよ)、とうしへんかんしてテクスチャーにかきます。
そのとき、さいごのしんどがいいカンジになるように、しゃえいぎょうれつはせんようでつくりました。
あと、真ん中をうごかして、いいかんじの大きさにちょうせいします。
できたテクスチャーは、てまえのくるまが大きくかけました。
すこし、このほうほうにぎもんをかんじます。パースをかけるぶん、さいごにひかくするときのZちとテクスチャーのむきがかたむいているので、
かげにならないきょうかいぶぶんのギザギザがおおきくなるきがします。
見ているだけで、クラクラしそうな絵ですね。。(先生)
透視影マップのいいところは、てまえのかげがこまかくなるようです。
ということは、テクスチャーが小さくてもきれいということです。
透視影マップとふつうのほうほうをくらべよう。
テクスチャーのサイズを512x512にしたとき、それぞれのえは、つぎのようになります
(このあと、左が透視影マップ、右がふつうのほうほうです)。
透視影マップの手前のクルマのりんかくが、おそろしくきれいです。
あと、このがめんできがついたのですが、透視影マップはひだりしたが(影マップが)かけているので、影がきえてます。
テクスチャーのサイズを256x256にしたとき、つぎのようになります。
透視影マップは、おくのほうが大きなギザギザがあるのがみえます。
テクスチャーのサイズを128x128にしたとき、つぎのようになります。
透視影マップのてまえのぶぶんが、かくじつにきれいです。
テクスチャーのサイズを64x64にしたとき、つぎのようになります。
どっちもギザギザ。
でも、透視影マップのほうは、てまえの影がきれいですね。
テクスチャーのサイズを32x32にしたとき、つぎのようになります。
やっぱり、透視影マップがの手前はあまりくずれません。
こんかいのひかくは、いままでのほうほうとのさがすくないですね。やっとしゅくだいがそろいました。
なかみは、つぎのファイルです。
shadow.psh | ちょうてんシェーダー。 |
shadow.psh | ピクセルシェーダー。 |
vs.vsh | ちょうてんシェーダー。かげマップをつくるよ。 |
ps.psh | ピクセルシェーダー。かげマップをつくるよ。 |
draw.cpp | テレビをかくんだ。 |
draw.h | テレビをかくんだ。 |
bg.cpp | じめんとかかくよ。 |
main.h | はじめのいっぽ。 |
main.cpp | はじめのいっぽ。 |
load.cpp | えをよむんだ。 |
load.h | えをよむんだ。 |
font.cpp | じをかくよ。 |
font.h | じをかくよ。 |
あと、モデルと、あそべるエグゼや、プロジェクトファイルがはいってます。
きょうで、夏体みもおしまいです。あぁ~あ、あしたからも夏体みがいいな。
お疲れ様でした。新学期もがんばってね。(先生)