サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
Pixel 9
marupeke296.com
ホーム < ゲームつくろー! < IKD備忘録 VisualStudio + Pythonでディープラーニング Kerasの使い方をざっくりと (2018. 11. 21) 前章でPythonによるディープラーニングの開発環境を整えました。本章では根幹ライブラリの一つである「Keras」について見ていこうと思います。非常に使いやすいライブラリですが、ディープラーニングの奥深さをそのまま反映しているので、この章では「兎に角なんか雰囲気掴みたい!」という目的でKerasをざっくり触ってみる事にします。 ① Kerasとは? KerasはPythonで書かれたニューラルネットワーク学習ライブラリです。ニューラルというのは「脳神経」の事、そしてネットワークは「網」の意味です。つまりニューラルネットワークとは脳神経の網状構造の事で、それをプログラム上で模倣して脳神経のような働きをさせてしまおうという
ホーム < ゲームつくろー! < アルゴリズム編 その3 パーリンノイズとフラクタル ~ フラクタブルな地形を作る基盤 ~ ① ノイズのお話 オープンワールドを採用しているゲームでは壮大な地形が用意されています。山あり川あり海ありと、地球上のどこかに本当に存在しているかのようなその仮想世界は本当に美しく、ゲームを忘れただひたすらに駆け回りたくなってしまいます。そういう地形の中にはもちろん開発者が丹念に作り上げているものもありますが、例えばマインクラフトのワールドなどは開発者が最初から地形を用意しているわけではなく、完全に自動生成されています。マイクラをやった事のある人なら、その地形がとてもプログラムが作り上げ得たとは思えない程自然っぽくてパターンぽい所が見受けられず変化に富んでいる事を知っているはずです: MineCraftの地形。矩形だけども美しい(^-^) 上のスクリーンショットのよう
ホーム < ゲームつくろー! < DirectX技術編 その71 深度バッファの精度って? ポリゴンの前後関係を判断する「深度(Depth)」を格納するバッファである「深度バッファ(Depth buffer)」。このバッファは通常目にする事も触る事も出来ませんが、そこに書き込まれている深度がZテストで比較される事で3Dのモデルに「前後の関係」が与えられるため極めて重要です。 深度バッファでしばし問題になるのがその前後を判定する精度です。所詮デジタルな数値ですから無限に細かい精度で前後判定は出来ません。ポリゴンが殆ど密着しているような状態(キャラクタが着ている衣服やGUIの重ね合わせなど)の場合、本当は離れているはずなのに、精度不足から双方のポリゴンの深度が「同じ」と判定され、描画が激しくちらついてしまう事があります。いわゆる「Zファイト」と呼ばれるアーティファクトです。これを避けるには、密
ホーム < ゲームつくろー! < C++踏み込み編 その18 最低限のカスタムメモリアロケータ メモリアロケータは、「メモリ欲しいんだけど~」という要求に応えてメモリを分け与えてくれる人です。C言語だとこれはmalloc関数、C++だとnew関数がその役を担ってくれます。カスタムメモリアロケータは、その機能を自前で実装した物を指します。 「え?何でそれを自前で実装するの?」と不思議に思うかもしれません。例えば、コンシューマ機での開発ではおおよそメモリアロケータを換装します。それはメモリ確保と解放の速度、耐久性、詳細なデバッグ情報を得るためと移植性を高めるためです。PC用のゲームを作る場合も、自分がどれだけのメモリを消費しているのか、メモリリークはしていないか、誰がいつどこでメモリを確保したのか、そういうメモリのデバッグ情報を見られるというのか安定したゲーム開発に必要になってきます。そういう
ホーム < ゲームつくろー! < DirectX技術編 その69 インスタンシングでモデルを大量発生! 久しぶりのDirectX9技術編。2014.9時点でDirectX11な時代ではありますが、3Dの基礎はDirectX9でも十分に学べます。まだまだ現役DX9(^-^) 3Dのモデルには、例えば主人公クラスのキャラクタのように1点物モデルもありますが、パーティクルやモブキャラ(背景に適当にいるキャラクタ)のように同じ形状のモデルで且つ大量に発生する役目をするモデルもあります。STGも全く同じ弾や敵のモデルが実に沢山出ますよね。またノベルス系やRPGなどで大量に表示するフォント文字は、これ同じ板ポリゴンの形で表示位置とUV(フォントの位置)が違うだけだったりします。このように「同型もしくは似てるモデルを大量に発生する」場合、個々のモデルを1個ずつまともに描画していると大幅にパフォーマンスを
ホーム < ゲームつくろー! < DirectX技術編 その70 完全ホワイトボックスなパースペクティブ射影変換行列 「今更何を?」という題目ではあります(^-^;。パースペクティブ射影変換行列は3Dを描画する時に間違いなく使用する行列の一つです。DirectX9の場合はD3DXMatrixPerspectiveFovLH関数を使うと自動的にそういう行列を作ってくれます。でも、な~んとなくふわふわっとした感じで使っていませんか?また、中身の数字とか式の形を見るも「ん~、まぁ何かやっているんだろうなぁ」と受け流してしまっていませんか?ワールド変換行列よりも実は良く分からずに使ってしまう事が多いこの行列。これって…ブラックボックスで不安な要素でもあります。 そこで本章では、パースペクティブ射影変換行列を丸裸にしてしまいます。似たような事はマルペケのあちこちに散らばっているのですが、ここにぎゅー
ホーム < 電子工作やってみた Arduino編 その8 距離センサーを使ってみる 光センサーの値を音にするという訳の分からない仕組みを作り、すっかりセンサーが楽しくなってしまった私。次なるセンサーと選んだのは「距離センサー」。その名の通り距離を測定するセンサーです。世に距離センサーは沢山ありますが、手に入れたのは簡易距離センサーである「HC-SR04」。40kHzという高い周波数の超音波を出して、それが反射して戻って来るまでの時間から距離を計測するセンサーです。まずは、このセンサーを使って実際に距離を測るまでをやってみたいと思います。 ① HC-SR04 2つの突起が特徴的な距離センサー。カタログ(PDF)はこちら。説明書などが無く上の基盤だけが届きました。男気溢れてます(笑)。ちなみにお値段は500円位でした(Amazonで買って送料無料)。使い方がわからないのでWebであれこれ調べて
Blenderはゲーム専用の3Dモデリングツールでは無いので、一般的な3Dモデリング用のフォーマットが並んでいます。並んでいるフォーマットを見るに、ゲーム用のオブジェクトを出力する物としてはやはりメジャー所のColladaかFBXが選択肢かなという所です。ColladaもFBXもデータをインポートするSDKがあります。 ColladaにはCollada DOM、FCollada、Open ColladaというSDKがありますが、実はどれも微妙な情勢。Collada DOMはColladaのバージョンに厳格、FColladaはサポートバージョンが広いけども現在サポート終了、そしてOpen Colladaはリファレンス情報に乏しいようです。 FBXにはFBX SDKがあり、これはAutodeskが公開しています。こちらは現行でもサポートが続いています。バージョンが上がる毎に何かコロコロと変わる
ホーム < ゲームつくろー! ゲームプログラマのためのBlender ゲーム内に登場する3Dモデルはモデリングソフトで作成します。それらモデルはデザイナさんが作成してくれるため、通常プログラマはそのモデリング技術までを習得する必要はあまりありません。ただ、プログラマがモデリングソフトの「使い方」を知る必要はあります!それは例えばこんな理由からです: デザイナさんへゲーム用のモデルの作り方を説明 モデリングソフトは元々は動画素材を作るツールです。美麗な動画を作る専用の機能を沢山持っていますが、その多くはゲームで再現できません。その為「ゲームで再現できる機能は何なのか?」をデザイナさんに伝える必要があります。 ゲームで使える機能を知る モデリングソフトのどの機能がゲーム側に反映できるのかを知るために、プログラマ自身がテストモデルを作らないといけない場面がちょこちょこ出てきます。モデルの形は適当
ホーム < 電子工作やってみた Arduino編 その9 Arduinoでサーボモータをキュイキュイ動かす! これまでLEDを光らせたり(その2)、光センサーの結果を音にしてみたり(その7)、距離センサーを触ってみたり(その8)と、Arduinoで簡単な実験をいくつかやってきました。ゲームプログラムもそうですが、沢山の小さな実験と経験が大切なのは電子工作も同じだなと感じます。 で、今回はより実用的な「モーターを回す」という事に挑戦してみます。私は「モーターと言えばミニ四駆(初代)でタミヤ!」という世代なんですが、残念ながらラジコンカー等には触れてきませんで、モーターは電気を通すとすげー回転する…くらいの知識しかありません。ただ、だからと言ってArduinoの5V電源にモーターつないで「ギュイーン」と回して「やった~」はさすがにどうかと思うので、今回は「サーボモータ」を使ってみる事にしました
ホーム < ゲームつくろー! < FBX習得編 その9 ボーンの情報を取得する 前章までで、FBXファイルから3Dモデルを表現するに必要な情報を一揃え抽出できました。固定的なモデルであればそれらの情報からDirectXなどでモデルを描画する事ができるはずです。 この章ではスキンメッシュアニメーションの基本であるボーンの情報を取得してみたいと思います。 ① 最終的に欲しい情報をまとめます スキンメッシュアニメーションに必要な情報はたくさんあり、また複雑です。まず必要な情報を整理します。 スキンメッシュアニメーションとは、モデルに埋め込まれた「ボーン(Bone)」を動かすことによってその周りの頂点を動かす手法です。1本のボーンが影響を与える頂点は予め決まっています。また、1本のボーンがある1つの頂点に与える影響力を「ウェイト(Weight)」と言います。一般に1つの頂点には複数のボーンが少しず
ホーム < ゲームつくろー! < Programming TIPs編 その19 補間関数あれこれ ゲーム制作の中では「補間」があちこちに出てきます。補間とは一般に2つの値の間を媒介変数t(=割合t)で表したものです。例えばキャラクタが地点AからBへ移動する時、時間が経過すると少しずつBへ向かいます。この「向かい方」は補間関数によって色々変化させる事ができます。他にも絵をフェードインさせる時とか、エフェクトを動かす時など、実に様々です。そして、この補間関数によってゲームの面白さのかなりな部分が決まってしまうのです。この章では、そんな補間関数をあれこれ見て行きます。 ① 線形補間 補間で一番単純なのは線形補間です。これは2つの値の間を等速で移動する補間です: 横軸が媒介変数tで、縦軸がそれに対応する値です。グラフを見ると一目瞭然で、線形補間の場合はtと値vは一緒になります。つまり、 です。正に
ホーム < 電子工作やってみた Arduino編 その10 プラ板でブラケット作成に挑戦する! 前章でサーボモータSG90をArduinoでキュイキュイと動かす事が出来ました。ではこのサーボモータで何をしようか?という話になる訳です。で、あれこれ考えましたが、やっぱり王道はロボットじゃないでしょうかと!関節制御してぎゅいぎゅい歩かせるのが男の子のロマンなのです (>_<)/。しかし、どんなロボットにも骨組みとなるフレームがあるのですが、私はあいにくプラモデルなどのハードウェアなホビーをやってこなかった駄目な子で、そういうフレームを作る技術を全然持ち合わせていません。ろ、ロマンは幻想…orz いや、だからこそ挑戦してみるのが楽しいのです。何をどうしたら良いかはわかりませんが、今の世の中には頼もしいGoogle先生がいらっしゃいます。地道な調査で道はきっと開けるはず! そこでこの章では、まずサ
ホーム < ゲームつくろー! < IKD備忘録 (2013. 8. 11追記) Raspberry Pi Vimで方向キーを押すとABCDが出る問題を直す ここまで食わず嫌い克服の目的でVimをテキストエディタとして使ってきました。で、一つ「はい?」と首をかしげる入力状況がありました。挿入モードで方向キーで移動しようとすると「ABCD」と文字が入力されてしまうんです。「こういうもんなのかなぁ」と移動する時にはノーマルモードに戻ってたのですが、ググってみると同じような問題が多数ヒット。直し方が色々ありましたが、私の対処を備忘録しておきます。 ① vi互換モードだった どうらや方向キーでABCDが出るのはVimが「vi互換モード」で動いている時のようです(そのモードで必ずそうなるのかは不明)。私は別にVimで十分なので、この互換モードを切る事にしました。一番簡単なのはVimを起動した後にノーマ
ホーム < ゲームつくろー! < Unity/サウンド編 プラグイン編 その1 NGUI:ビットマップフォント表示~フォントテクスチャを作る Unityには非常に沢山の有料/無料プラグインがあります。それらのほとんどはUnityのAsset Storeであり過ぎて検索と選択に困るくらい公開されています。この編ではそのプラグインの中で私が使用した範囲ですが紹介できればと思います。 NGUIはいわゆるGUIを作成する有料プラグインの一つで、ゲーム中のボタン等をサクサクと作る事ができます。このNGUIの機能の一つに「ビットマップフォント表示」があります。 ゲームを作る上で文字や数字の表示はかかせません。変化しない物であれば単にテクスチャを板ポリに貼って表示しても良いのですが、動的に文字列が変わる場合、文字を位置文字ずつ並べる必要が出てきます。しかし、それがとてつもなく面倒くさい作業である事は想像
ホーム < ゲームつくろー! < IKD備忘録 JavaScript JavaScriptでのクラスの作り方まとめ JavaScriptでのクラスの作り方をまとめてみました。 ① クラス宣言 JavaScriptにはクラスという言語仕様は無いので模倣して作ります。クラスを宣言するにはグローバルな領域にクラス名な変数を定義し、その変数に無名関数を代入します:
ホーム < ゲームつくろー! < Unity/サウンド編 サウンド編 その1 Unityのサウンドの根っこ ゲーム制作をしているといつも「音が入ると途端にゲームらしくになる!」と感動します。音はゲームを印象付ける極めて大切な要素だと再認識させられる瞬間です。 そんな大切な要素「音」、Unityは簡単に鳴らす事が出来る仕組みが整っています。簡単なのですが、それ以上の所が無いのもまたUnity。そこで本編ではゲームで使えるサウンドシステムを考えてみます。 何はともあれ、Unityでどうやって音を鳴らすかをざっと見て行く事にしましょう。 ① まずは音を用意 音の素となるのはもちろんサウンドファイルです。UnityがサポートしているサウンドファイルのフォーマットはOggVorbisと非圧縮のwavです。mp3などもリソースとしてインポートできますが、時間かかるは劣化するはなので、なるべく対象フォー
ホーム < ゲームつくろー! < Unity/サウンド編 サウンド編 その5 SEの同時発生数問題を考えてみる 前章まででSoundPlayerシングルトンを介してSEとBGMが鳴るようになりました。サウンドの登録周りがまだ適当ですが、その前に解決しておきたい問題があります。それは「SEの同時発生」です。 例えば、STGでボムを使って画面内にいる100体のザコ敵を「同じフレーム」で爽快に破壊したとしましょう。この時、もしザコ敵に爆発SEを仕込んでいたとすると、同じフレームで同時にその爆発SEが100個分重なって鳴る事になります。これ、どうなるかというと、PCにもよりますが、「ギャギガガガガ!!!」という爆発音とは到底思えないような酷い音が鳴ります。 何故そんな事になるのか?それはPCの音声が「デジタル合成」であるためです。音データは最終的には波形の形を数値化して並べた配列になっています。2
ホーム < ゲームつくろー! < オブジェクト指向設計編 <CS1:オブジェクト指向で作る「Hello World !」 その2 CS1:オブジェクト指向で作る「Hello World !」 プログラマであれば「Hello World !」を知らないとは言わせません!どのような言語のプログラムでも、最初に行う「画面への出力」は「Hello World !」なんです!(エゴですよ、もちろん(笑))。ということで、オブジェクト指向設計論CS1(Case Study 1)は、Hello World !をオブジェクト指向に則って画面に出すプログラムを作成します。 ① オブジェクト指向設計の最初は問題意識 オブジェクト指向プログラミングをしようとして、画面に向かってはいけません。95%は失敗します。その1で述べましたように、オブジェクト指向はプログラム技術ではなくて問題解決の技術です。問題解決は、別
ホーム < ゲームつくろー! < Lua組み込み編 その3 コルーチンで状態遷移をLuaで制御 Luaが持つ素晴らしい機能の一つに「コルーチン(coroutine)」があります。コルーチンは「関数の途中で戻ってきて、続きからまた実行出来る」という仕組みです。 こう聞いても「ん?」とハテナが付くと思います。私もそうでした。C言語にはコルーチンの機能がありません。なので、C言語に慣れている人だとピンと来ないんですよね。 例えば、キャラクタの位置を連続的に動かす事を考えてみます。最初10フレームは右へ1ステップずつ動き、次の5フレームで上へ、さらに次の7フレームで左下に移動するとしましょう。これをC言語でベタに書くとこんな感じになります: int state = STEP_1; int curFrame = 0; int step() { switch(state) { // 右へ10フレーム1
ホーム < ゲームつくろー! < IKD備忘録 Raspberry Pi Raspberry Piがやってきた! とある日にAmazonさんからやってきたお勧めの書籍紹介メール。そこにあったのが「Raspberry Piユーザーガイド」。「ん?Raspberry Piてなんじゃ?」と調べてみたら、あらまぁちっこいPCじゃないですか。驚くべきはその値段。日本円で4000円くらい。でもPCとして動く。こんな面白そうなおもちゃはそうありません。迷わずぽちクリました。 後日やってきましたRaspberry Pi! ちっさい、かわいい(>_<)g。1円玉のサイズを見ても小ささがわかりますよね。これがPCになるんですからビックリです。この編はこの子を色々使ってみようという、そういうお話です。 ① 購入時の注意 Amazonの箱に入っていたRaspberry Piはこんなラズベリー色なケースに入ってまし
ホーム < ゲームつくろー! < Unity/Shader編 Shader編 その3 サーフェイスシェーダ Unityのシェーダには3種類ありますが、そのうちサーフェイスシェーダはUnityのライティングパイプラインに組み込まれるシェーダです。サーフェイスシェーダを使えば、Unityのシーンに置いたライトがちゃんと反映されるわけです。 サーフェイスシェーダの直接的なマニュアルはこちらです: Unity.Writing Surface Shader: http://docs.unity3d.com/Documentation/Components/SL-SurfaceShaders.html ① サーフェイスシェーダの書き方 サーフェイスシェーダはシェーダ内のSubShaderに書きます。この時、いくつかのお約束があります。まず、SubShaderに「シェーダをこの範囲に書きますよ~」という
ホーム < ゲームつくろー! < C++踏み込み編 < 多重継承と仮想基本クラス その8 多重継承と仮想基本クラス C++ではクラスの「多重継承」が認められています。多重継承とは1つのクラスが複数の親クラスを持つ事を言います。多重継承をすることにより、1つのクラスは2つのクラスの性質を同時に受け続く事になります。一般に多重継承はあまり多用するべきではないと言われていますが、その定義方法を知らないよりは知っておいた方が良いかと思います。ここでは多重継承の扱い方について簡単にまとめます。 ① どうして多重継承が必要か? 多重継承というのは、1つのクラスに2つの親クラスのメソッドを引き継ぎたい時に使います。例えば、ゲームで使用するオブジェクトは大抵アップデート(状態の更新)する必要があります。また画面に表示させるには描画メソッドが必須でしょう。ゲーム内で使用されるクラスの多くは、このどちらか、も
ホーム < ゲームつくろー! < オブジェクト指向設計編 <オブジェクト指向って何だ? その1 オブジェクト指向って何だ? そうなんです。多分昨今のプログラマのほぼ全員が「オブジェクト指向って何だ」?っと思う時期があるのです。今更感は拭い切れないのですが、それがもやもやとしているので自分がその考え方でプログラムしているかどうかも良くわからない。そこでオブジェクト指向設計編第1回は、オブジェクト指向そのものについて見ていくことにします。 ① 比較検討で定義するオブジェクト指向 そもそも論で恐縮ですが、「指向 (orientation)」って何でしょうか? 大辞泉 : ある方向・目的に向かうこと。また、方向や目的を指示してその方に向かわせること。志向。 大辞林 : ある目的を目指して向かうこと。志向。 「指向」とは「何らかの指針を示してそこへ向かわせる」という意味合いのようです。これを踏まえて
ホーム < ゲームつくろー! < DirectX技術編 その66 WindowsAPIな力でアウトラインフォントを描画する DirectX技術編その5「高速フォント表示」ではTrueTypeフォントをテクスチャに描き込んで描画する方法を紹介しました。フォントテクスチャを一度だけ作成し、あとはそれを並べるだけでフォント文字が描画できるため、高速に描画ができるというわけです。 この記事を挙げた所掲示板にて「アウトラインフォント(袋文字、縁取り文字)は描画できないか?」というご質問を頂きました。確かに縁取り文字が描画できれば表現の幅が広がります。しかしどうやれば良いのか…。テクスチャを重ねて云々ではちょっと太刀打ちできそうにありません。そこで色々あれこれと調べるうち、WindowsAPIの力をドカッと使うとなんと可能である事がわかりましたので、ここでご報告です(^-^) ① 決め手その1「Cre
ホーム < ゲームつくろー! < C++踏み込み編 その16 クラス内静的状態遷移なお話 ゲーム制作で状態遷移はぜーーーーったい必要です。だってゲームですから、「何かしたら状態が変わる」が無いとゲームになれません。ゲームのほぼ全域に何らかの状態遷移はあります。 例えば、あるステージを再生する事を考えてみましょう。ステージには様々な物が置かれていますよね。そういうステージを構成する情報を格納したファイルを最初に読み込みます。次にそこからステージを構成する物を実際に作ります。全部作り終わったら画面をフェードインさせて、ステージを開始します。このステージを開始する部分だけでも次のような単方向の状態遷移がある事がわかります: これをホントーーーにベタに作るとこうなってしまいます: enum State { State_LoadingStageConstructFile, // ステージ構成フ
ホーム < ゲームつくろー! < Unity/カスタムエディタ編 カスタムエディタ編 その1 Inspectorが変わる! UnityのGameObjectにスクリプトをくっつけると、そのGameObjectが機能を持つようになります。そして、その機能を調節するパラメータがInspector上に表示されます。例えば、ワールドに球を沢山発生させるジェネレータを作るとしましょう。ObjectGeneratorというスクリプトに「freq」という発生頻度を調節するメンバ変数をpublicで作り、このスクリプトをGameObjectにくっつけると、Inspectorはこう表示されます: まぁ、もちろんこのFreqに何らかの値を与えればいいわけですが、このままだとどんな値でも入ってしまいます。頻度なのにマイナス値も入れられますし、とんでもなく大きな値も可能です。例えばこの数値が1秒間あたりに出現する
int count8bit(unsigned char v) { unsigned count = (v & 0x55) + ((v >> 1) & 0x55); count = (count & 0x33) + ((count >> 2) & 0x33); return (count & 0x0f) + ((count >> 4) & 0x0f); } int count16bit(unsigned short v) { unsigned short count = (v & 0x5555) + ((v >> 1) & 0x5555); count = (count & 0x3333) + ((count >> 2) & 0x3333); count = (count & 0x0f0f) + ((count >> 4) & 0x0f0f); return (count & 0x00ff)
ホーム < ゲームつくろー! < Unity/サウンド編 サウンド編 その2 トリガー駆動のタイミングでSEを鳴らす 前章でUnityでのサウンド再生の根っこを見てきました。Audio ClipがくっついたAudio Soundを世界にポイっと投げれば勝手に音が鳴るんですから簡単です。でも、ゲームで実際に使うにはもう少し考える事があります。 SEは何らかのきっかけで初めて音が鳴ります。例えばマリオがジャンプしたら「ぴゅい~ん」とジャンプ音がしますよね。「ジャンプをしたら」というのが「きっかけ」で、そういうきっかけの事を「トリガー」と言います。お手元のゲームを観察すると分かると思いますが、SEはトリガー駆動が殆どです。 ではUnityでトリガー駆動なSEを再生するにはどうしたら良いか?試行錯誤してみます。 ① まずはトリガーを作ろう まずはトリガーそのものを作ってみましょう。実際はあらゆるト
次のページ
このページを最初にブックマークしてみませんか?
『マルペケつくろーどっとコム』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く