Skip to main content
Advanced Search
Search Terms
Content Type

Exact Matches
Tag Searches
Date Options
Updated after
Updated before
Created after
Created before

Search Results

132 total results found

AIの課題(5月12日)

Yz個人メモ

見張りモンスターAIを設計せよねらい敵は何を見ているのか? ↓ それをどんなフラグにするのか? ↓ フラグによってどの行動を選ぶのか? ↓ それをif文にするとどうなるのか?課題タイトル「お宝を守るモンスターを設計しよう」シチュエーションあなたはダンジョンゲームの敵AIを作ることになった。モンスターは部屋の中にある宝箱を守っている。プレイヤーは部屋に侵入して、宝箱を開けようとする。モンスターは状況に応じて行動を変える。モンスターの基本行動使ってよい行動は以下。Idle その場で待つ Pat...

AI モンスターの知能

Yz個人メモ

モンスターに視覚を与えるisFindPlayer は誰が決めているのか?1. 前回までの確認前回、モンスターの行動を if文 で切り替える考え方を学びました。例えば、次のような処理です。if (isAttackRange) { Attack(); } else if (isFindPlayer) { ChasePlayer(); } else { Idle(); }この処理では、モンスターは次のように行動します。条件行動攻撃範囲にいる攻撃するプレイヤーを見つけている追い...

既存ゲームを改良するよ(何様じゃい!)

ゲーム研究

既存ゲームの「足りない部分」を見つけて進化案を考える手順書 この課題でやること この課題では、前回分析したゲームをもとにして、 「このゲームはどこが弱いのか」 「どこを足せばもっと面白くなるのか」 を考えます。 ただし、完全に別のゲームを作るのではありません。 元のゲームの面白さを残したまま、 足りない部分を補って、少し進化させることが目的です。 対象ゲーム 前回分析した次のゲームの中から、自分が選んだものを使います。 パックマン クルクルランド デビルワールド ドンキーコングJR 手順1 分析したゲーム名...

状態遷移でモンスターを管理

Yz個人メモ

ゲームAI課題:状態遷移でモンスターの行動を管理しよう 「今、モンスターは何をしているのか?」を設計する 1. 今日のテーマ 前回は、モンスターに「視覚」を与える考え方を学びました。 isFindPlayer = CheckCanSeePlayer(); このように、モンスターがプレイヤーを見つけているかどうかを判定しました。 そして、その結果を使って行動を変えました。 if (isAttackRange) { Attack(); } else if (isFindPlayer) { Chase...

3Dの移動計算(回転して移動)[ゲーム数学、プログラミング基礎]

Yz個人メモ

戦車を「向いている方向」に動かすプログラムを作ろう 1. 今日の目標 今回は、3D空間で戦車を動かす処理を作ります。 完成すると、次の操作ができるようになります。 キー 動き Aキー 左に回転する Dキー 右に回転する Wキー 戦車が向いている方向に進む 今回のポイントは、ただ前に進むだけではありません。 ワールドの+Z方向に進むのではなく、 戦車が向いている方向に進む という処理を作ります。 2. 今日作る処理の方針 今回の移動処理は、次の流れで作ります。 Aキー・Dキーで戦車の角...

ゲームにおけるフィードバックの研究

ゲーム研究

ゲーム研究レポート ゲームにおける入力・出力・フィードバックを調べる この授業でやること この授業では、1つのゲームだけを詳しく調べるのではなく、 いろいろなゲームを見比べながら、 入力・出力・フィードバック の関係を調べます。 ゲームでは、プレイヤーがボタンやキーを押すと、 ゲーム内で何かが起こります。 そして、その結果をプレイヤーに伝えるために、 画面・音・エフェクト・振動・UIなどの反応が返ってきます。 この流れを、次のように考えます。 入力 ↓ ゲーム内の処理 ↓ 出力 ↓ フィードバック ↓ プレイヤーの...

その1

GameBaseDx11界隈 シャドウマップへの道(険しい)

第1章:シャドウマップの考え方 この章の目的 コードを書く前に、なぜ「ライトから見たZ値」を比べると影がわかるのかを理解する。 この章は説明だけ。コード変更はしない。 1. 普通のライト計算だけでは影は出ない 今のライト計算では、だいたい次のことをしている。 面の向きとライト方向を比べる ↓ ライトの方を向いていれば明るい ライトと逆を向いていれば暗い これは「その面がライト方向を向いているか」を見ているだけ。 しかし、影を出すには次のことも調べる必要がある。 ライトとその場所の間に、別の物体があるか 手前に...

その2

GameBaseDx11界隈 シャドウマップへの道(険しい)

第2章:ライトを仮想カメラとして扱う この章の目的 シャドウマップを作るには、ライトから見た画面が必要になる。 そのために、ライト用のビュー行列と射影行列を追加する。 この章では、まだ画面は変わらない。 考え方 普通の描画では、カメラから見た画面を作っている。 カメラ位置 ↓ 見る シーン シャドウマップでは、ライトから見た画面を作る。 ライト視点の仮想カメラ位置 ↓ 見る シーン 今回のライトは平行光源として扱う。 平行光源には本来「位置」はない。 しかし、シャドウマップを作るには「ライトから見た画...

その3

GameBaseDx11界隈 シャドウマップへの道(険しい)

第3章:シャドウマップ用テクスチャを作る この章の目的 ライトから見たZ値を保存するためのテクスチャを作る。 まだそのテクスチャには何も描かない。 この章でも画面は変わらない。 考え方 シャドウマップは普通の色画像ではない。 色を保存する画像ではなく、ライトから見たZ値を保存する画像 DirectXでは、テクスチャ本体と、その使い道を分けて考える。 ID3D11Texture2D ├─ DepthStencilView : 深度を書き込む口 └─ ShaderResourceView : シェーダー...

その4

GameBaseDx11界隈 シャドウマップへの道(険しい)

第4章:深度だけを書く ShadowMap.hlsl を作る この章の目的 ライト視点で深度だけを書くための専用シェーダーを作る。 通常描画用の Simple3D.hlsl とは別に、ShadowMap.hlsl を追加する。 この章でも画面は変わらない。 考え方 通常描画では、色・テクスチャ・ライト計算を使う。 しかしシャドウマップ作成では、必要なのはライトから見たZ値だけ。 必要:頂点をライト視点に変換する 不要:色、テクスチャ、ライティング ピクセルシェーダーは何もしなくてよい。 SV_POSITION ...

その5

GameBaseDx11界隈 シャドウマップへの道(険しい)

第5章:モデルをシャドウマップに描けるようにする この章の目的 通常描画用の Draw() とは別に、シャドウマップ作成用の DrawShadow() を追加する。 この章でも画面は変わらない。 考え方 普通の Draw() は、画面に表示するための描画。 Draw() 色を出す テクスチャを読む ライト計算をする カメラ視点で描く シャドウマップ用の描画では、色はいらない。 DrawShadow() 色を出さない テクスチャを読まない ライト計算もしない ライト視点のWVPだけ...

その6

GameBaseDx11界隈 シャドウマップへの道(険しい)

第6章:描画を2パス構成にする この章でやること Stage::Draw() の描画を2回に分けます。 パス1:ライト視点で深度だけ描く(シャドウパス) パス2:カメラ視点で普通に描く(メインパス) あわせて、第7章でシェーダーがライトVP行列を使えるよう、 CONSTANTBUFFER_STAGE に matLightVP を追加して毎フレーム送ります。 この章が終わっても画面の見た目は変わりません。 影が出るのは第7章からです。 この章でのコード変更点 ファイル 変更内容 Stage.h CO...

その7

GameBaseDx11界隈 シャドウマップへの道(険しい)

第7章:Simple3D.hlslで深度比較して影を出す この章でやること Simple3D.hlsl のピクセルシェーダーで、シャドウマップを読んで影を判定します。 この章で初めて画面に影が出ます。 ただし影のエッジはジャギー(ギザギザ)になります。 なめらかにするのは第8章で行います。 この章でのコード変更点 ファイル 変更内容 Stage.cpp メインパスの前後にシャドウマップSRVをセット/解除 Simple3D.hlsl g_shadowMap・g_shadowSampler の宣言...

その8

GameBaseDx11界隈 シャドウマップへの道(険しい)

第8章:比較サンプラーで影のエッジをなめらかにする この章でやること 影のエッジのジャギー(ギザギザ)を改善します。 第7章では Sample() で1点だけ読んで影を判定していました。 この章では SampleCmpLevelZero() に差し替えて、近隣の複数点を平均した判定にします。 この章が終わると影のエッジが少しなめらかになります。 この章でのコード変更点 ファイル 変更内容 Simple3D.hlsl SamplerState を SamplerComparisonState に変更(...

その9(おまけ)

GameBaseDx11界隈 シャドウマップへの道(険しい)

第9章:影が出ないときの確認ポイント 目的 つまずきやすいところを、症状別に確認できるようにする。 1. 影がまったく出ない 確認すること Stage::Draw() で Direct3D::BeginShadowPass() を呼んでいるか。 Model::DrawShadow(hDonut_) を呼んでいるか。 Direct3D::EndShadowPass() を呼んでいるか。 Stage::Draw() のメインパス前に PSSetShaderResources(1, 1, &pShadowSRV) を...

DirectXTKとAudio

GameBaseDx11界隈 DirectXTKを使ったオーディオマネジメント

Step 00 DirectXTK Audio の基本 この回の目的 この回では、DirectXTK Audio で使う基本的なクラスの役割を整理します。 音を鳴らすプログラムでは、いきなりコードを書く前に、次の3つを分けて考えることが大切です。 AudioEngine … 音を鳴らす仕組み全体 SoundEffect … 音声ファイル1個分のデータ SoundEffectInstance … 実際に再生中の音 この3つの違いが分かると、DirectXTK Audio ...

前準備その2 スマポ

GameBaseDx11界隈 DirectXTKを使ったオーディオマネジメント

スマートポインタ入門 目的 この資料では、C++ の std::unique_ptr の基本的な使い方を学びます。 今回の目標は、スマートポインタを深く理解することではありません。 まずは、次のことが分かれば十分です。 new で作ったものは delete で消す必要がある std::unique_ptr を使うと delete を自動でやってくれる std::make_unique は unique_ptr 用の new のようなもの この考え方を使って、あとで DirectXTK Audio の AudioE...

01 音を鳴らしてみるだけ

GameBaseDx11界隈 DirectXTKを使ったオーディオマネジメント

第1回 DirectXTK Audioで音を1回鳴らす この回に入る前に 先にDirectXTKとAudio を読み、次の3つの役割を確認しておきます。 AudioEngine : 音を鳴らす仕組み本体 SoundEffect : wavファイルを読み込んだ音データ SoundEffectInstance : 再生中の音を操作するもの この回では、まず AudioEngine と SoundEffect だけを使います。 目標 この回では、DirectXTK Audioを使って、...

02 Engineに組み込んでゆくぅ

GameBaseDx11界隈 DirectXTKを使ったオーディオマネジメント

第2回 Audio機能をEngineに組み込んでゆくぅ 目標 この回では、第1回で TestScene に直接書いた音声処理を、エンジン側の機能として分離します。 最終的に、ゲーム側から次のように使える形にします。 file_path testPath = "Assets/Audio/test.wav"; Audio::Load("test", testPath); Audio::Play("test"); DirectXTK Audioの細かい処理は、Audio の中に隠します。 今回変更するファイル Eng...

03 SEとBGMを別扱いに(なんで?)

GameBaseDx11界隈 DirectXTKを使ったオーディオマネジメント

第3回 効果音とBGMを分ける 目標 この回では、Audio機能を次の2種類に分けます。 SE : 効果音。短い音。何度も鳴る。 BGM : 背景音楽。長い音。基本的に1曲を流し続ける。 最終的に、次のように使える形にします。 file_path shotPath = "Assets/Audio/SE/shot.wav"; file_path stagePath = "Assets/Audio/BGM/stage.wav"; Audio::LoadSE("shot", shotPath); Audio::Lo...