simplestarの技術ブログ

目的を書いて、思想と試行、結果と考察、そして具体的な手段を記録します。

Math:Unityで対称行列の対角化と同時に固有値・固有ベクトルを求める方法

ゲーム業界でも固有値・固有ベクトルという単語はよく出てきますが、対称行列を与えられた状態から具体的な解き方までご存知の方はそう多くいません。 答えを先に言うと、対称行列を対角化すると、その時点で対角行列の各要素は固有値、左右の回転行列はその…

Math:Unityでの連立方程式の解き方

本ブログの数学カテゴリを作りまして、第一回目は連立方程式の解き方を示したいと思います。みなさんご存じの通り、中学校で学ぶ連立方程式のことですが、これがなかなか簡単ではありません。 例えば、次の連立方程式がテストで出された時、変数 x, y, z, w,…

Unity:4画面テクスチャビューアの配置スクリプト

画像処理していると、複数枚のテクスチャを見比べたりしていきたいところなのですが Android 環境にもっていくと、配置がずれていたりして困ったことになったので 簡単な配置スクリプトを作りました。自分が再利用する目的で記事書きます。 using System.Col…

Unity:深度画像の取得

オブジェクトのエッジを強調したり、モデルベースの画像処理を行いたいときなどは、見ているシーンの深度画像が必要になります。(これは本当)OpenCV に現在フレームの深度画像を渡したいときは float 配列としてカメラからのZ距離が得られると文句はないの…

Unity:Compute Shaderでカメラ画像処理する時に最初に書くコード

ひとつ前の記事で Compute Shader を Android で実行するサンプルを載せましたので、今回はその Compute Shader を使ってカメラ画像をリアルタイムに処理します。できました! これからリアルタイムカメラ画像処理を Compute Shader で行う際は、以下のコー…

Unity:AndroidでComputeShaderを使ってみました

画像処理では、並列計算による高速化が求められます。(常に…) Compute Shader を使った並列計算による高速化は実装が簡単で効果抜群なのですが、DirectX 依存なので(と思い込んでいた私は) PC 上での動作に限られていると思っていました。しかし、ふと U…

Unity:uGUIにDebug.Logの内容を表示する方法1

UnityでDebug.Logした内容を、uGUIのUI画面でゲーム実行中に確認したい場合があります。 今回はその要望に応える形で次のようにログが流れる仕組みを作ったので、今後自分が再利用するために公開します。Debug.Log をハンドリングするコードは次の通り using…

対戦ゲームで一喜一憂するAI

強化学習でまるばつゲーム(3目ならべ)を作ったことがありましたが、ふと相手の手や自分の手に関して一喜一憂するAIが作れるのではないかと思ったわけです。 作ってみます。AIには最近扱いに慣れてきたSDユニティちゃんを使わせてもらおうと思います。 感情…

Unity:mecanimのイロハ

SD Toon シェーダーの Unityちゃんで、ステート遷移によってアニメーションが変化する仕組み mecanim を勉強してみようと思います。 ほんとに今更ですが、基本的なところを触ってみます。ボーンの入ったモデルと、そのボーンを動かすアニメーションクリップ…

Unity:楽曲のビートに合わせてオブジェクトを振動させる

ちょっとテンションが上がるBGMをかけながら作業していたところ ふと、Audio の低音と同期して振動するオブジェクトができないかな? なんて思いついたので、ちょっと調べて解決したので、解決方法を書いておきます。情報ソースはこちら docs.unity3d.com us…

3目ならべ(〇×ゲーム)で最強のAIを作る

AI

表題の通り、今回は3目ならべで最強のAIを作りました。 最も勝利確率の高いマスを赤く示してくれるツールとなっています。具体的にどうしたかというと 前回作った強化学習のコードの一部を次の通り、変更してみました。 変更の意図としてはBellman方程式のMo…

3目ならべで強化学習すると、どうなる?→こうなる

AI

前回の記事ははじめての強化学習ということで、Bellman方程式を使ってきわめて単純な経路分岐問題を解いてみました。 今回はもう少し複雑な経路問題を解いてみたいと思います。お題は「3目ならべ」です。先攻後攻が決まったら、まずは 3x3 のマス目の 9つの…

とっても簡単!強化学習の実践

AI

強化学習とは? それは、行動の結果得られる報酬が最も大きくなる行動を選択する仕組みにおいて その報酬を計算して求めることです。例えば「働けばお金がもらえる」という場合は「お金」が報酬となります。 報酬の設定のしかたは問題によって、また設定する…

強化学習の Value Iteration と Q-Learning の違い

AI

強化学習には Value Iteration と Q-Learning の2通りの学習方法が存在します。Value Iteration で登場する Model が既知か、未知かを見て 未知の場合は、試行錯誤を繰り返す Q-Learning しか選べません。Value Iteration にて登場する報酬は人間のさじ加減…

エピソード(思い出)を記録し、呼び起こす強化学習

AI

強化学習について(私が知識を増やすために)学んでいますが、Value Iteration と Q-Learning の違いを書く前に(この後書こうと思っています。) 一つ昔に高校時代の友人から教えてもらった、エピソードに紐づく知識というものとの組み合わせを思いつきまし…

AI的な調べもの

AI

最近、社内の勉強会でその存在を再確認したのですが、みなさんは OpenAI をご存知ですか?OpenAI は組織名のようです。 コンテンツは Gym にあるとのことです。OpenAI Gymは、強化学習を開発、評価するための プラットフォームです。 色々な環境が用意されて…

UnityでMMDのPMXを表情モーフ付きでダンスするFBXとしてアセット利用する話

今回のトピックは Unity で MMD モデルにモーション付けて再生するというものです。みなさんご存じ(?)のMikuMikuDance(MMD)と呼ばれるソフトウェアは、VPVP公開されているの3DCG動画作成ツールです。表情豊かに歌って踊る3DCGコンテンツを探すと、ほとん…

UnrealEngine4.13で頂点シェーダー

頂点シェーディング方法を探して次のプロジェクトを見つけたのですが github.com確かにコンピュートシェーダーとピクセルシェーダは機能していました。 描画ターゲットに結果を書き出して利用する分にはこれが良いかもしれません。しかし、ずいぶんとトライ…

VRHMDのポジショントラッキングについて

VRHMDといっても、今の時代 HTC Vive ですか? Oculus Rift ですか? PSVR ですか? と大きく三つのVRHMDを想像できる時代となりました。 (え、そんなの知らない?そんな方は、この記事は読めないかも。)今回は Oculus Rift や PSVR で使われている HMD の…

Windowsから重力方向を求める

加速度センサの情報を拾うコードは次の通りらしい Using Windows 8* WinRT API from desktop applications | Intel® SoftwareUnreal Engine 4 からの取得方法を知りたかったのですが すでにサポート済みであり そこは Motion をキーワードにすると良いらしい…

Direct Method:またCVネタのメモ

CV

SVO という技術をご存知でしょうか? www.youtube.com去年の SSII 2015 のチュートリアルによると SVO は近年CV研究界(一般人は簡単に踏み込めないので、どこぞの異界を想像して良いかも)で関心が高まってきているとのこと。 確かに Direct Method を使っ…

画像処理メモ

CV

画像処理の顔検出技術において 高速化するうえで便利な技法に積分画像というものが知られています。Haar-like 特徴量とかSURFというこれまた有名な局所特徴量記述形式などにも利用され コンピュータビジョンを仕事にしている人で、知らない人はいないほど(…

Webcam画像を表示

CV

EWCLIBヘルプ というものを使いました。下記コード(これだけではビルドが通りませんが…)の要領で Webcam 画像を表示してみました。 // OpenCVCameraViewer.cpp : コンソール アプリケーションのエントリ ポイントを定義します。 // #include "stdafx.h" /*…

OpenCVをインストール

CV

一番新しい OpenCV をもらってきます。DOWNLOADS | OpenCVこのリンクから OpenCV 3.1 をインストールしました。次のインストール先のサンプルコードを実行します。 opencv-3.1.0\sources\samples\cpp\tutorial_code\ImgProcおお、スライダーコントロールで値…

UnrealEngine4.12をソースコードからVisualStudio2013でビルドする

Epic Gamesのアカウントで次のアドレスに入ったら https://www.unrealengine.com/dashboardソースコードを取得する項目を見つけました。 GitHub アカウントを作成して、アカウント名をプロフィールに記載することで Unreal Engine のリポジトリアクセス権関…

UnrealEngine4.12をVisualStudio2013で起動する方法

いや、おかしいよ。 何もしなくてもビルドと実行ができるはずなのに(←勘違いでした。)error LNK2019: unresolved external symbol という、リンクエラーが発生して先に進めません。同じような苦しみを味わっている人が数日から数時間前にフォーラムに書き…

UnrealEngine4でUTexture2Dをシステムメモリから更新する

まず Unreal Engine 4 ではマテリアルに適用するテクスチャは UTexture2D というものだそうです。(調べただけでまだ触っていない) 基本的にはGPU側で超並列演算を行うもののようですが、特別にシステムメモリのbyte配列からテクスチャの内容を更新するUpda…

UnrealEngine4.12のC++プラグインでスタティックリンクライブラリを利用する

入門書や公式リファレンスを読んでいてびっくりしたのですが Unreal Engine におけるプラグイン機能は、次の図で示す通りゲームのプロジェクトにC++のソースコードが配置される感じです。プラグインは独立したプロジェクトにならないことに衝撃を受けました…

UnrealEngine4.12でAndroidアプリ作成とインストール

フィーリングで探すと File メニューからパッケージ化するというものが見つかります。パッケージ化メニューからAndroid(すべて)を選べばインストールバッチファイルが作成されます。 これを実行すればAndroid端末にUnreal Engineのゲームがインストールされ…

UnrealEngine4.12のC++プラグイン機能を利用する

オブジェクト(UE4だとActor)のTransformをC++のコードから編集したいだけなんです。私がどんな落とし穴にハマっていくか、記録していきます。Visual Studio 2015 を Community からインストールしました。 あ、ここまでは大丈夫です。 C++がディフォルトで入…

テスラの自動運転に試乗

Model S | テスラモーターズジャパン これに乗ってきた。加速を体感したけど、ジェットコースターだったよ。 静止状態から3.3秒で100kmだそうな。自動運転の状態も乗ってきた。 車間距離を一定に保ちつつ、道路に沿って移動とか素晴らしかったよ。

リンクメモ

まずここ OpenGL+Objective-C編 - 勉強理解したらここ livedoor Techブログ : 猫でもわかるiPhoneで画像にフィルターをかける方法あと、ここのオプティカルフローの説明良い https://courses.engr.illinois.edu/cs543/sp2012/lectures/Lecture%2008%20-%20Fe…

Windowsでキーボード割り当てを変更

先日、GPUが壊れてPCが起動できなくなったことがあり 問題の切り分けのためOSの再インストールを行いました。そのため、使っている英字キーボードのカスタマイズ情報が無くなりました。 再度割り当てるので、次の記事を参考に再割り当てしました。www.gigafr…

ナイーブベイズとは

AI

基本から確かめてみたくなったので もう一度ナイーブベイズについて確認します。確率の加法定理と乗法定理の式を使うと、ベイズの定理が導けます。確率の加法定理とは、ベン図を使うと次のイメージです。 確率の乗法定理とは、ベン図を使うと次のイメージで…

人工知能:歴史から学んでみる 3

AI

1950年代から、1990年代前半くらいまで見てきました。 その後の人工知能研究で注目されるようになった手法というものを見ていきたいと思います。【決定ツリー(決定木)】 これだけだと、ただの木構造のグラフになってしまいますが、ここではID3 - Wikipedia…

人工知能:歴史から学んでみる 2

AI

1980年ころの人工知能の研究を見ていく前回までのおさらい 人工知能の研究の成果がマイクロワールド(限定された世界)から外に出ようとして 組み合わせ爆発を起こし計算が終わらず、知識の記述も終わらず、研究中だったのに 世間の人工知能に対する熱が冷め…

人工知能:歴史から学んでみる

AI

なぜ人工知能(AI)について調べているのか? ここまでの経緯(いきさつ)を紹介します。最初は音声認識を使って、マイク入力をテキストに起こすところからスタートします。 simplestar-tech.hatenablog.com 起こしたテキストをコンピュータにしゃべってもら…

人工知能:これまでのアプローチを調べてみた

AI

何か新しいことをするには過去の業績を調べようということで、前回 simplestar-tech.hatenablog.com の中盤から、AIの歴史について学び始めましたよく引き合いに出る、チェスのAIについてその原理を調べてみましょう。 オセロの方が簡単だったかもしれません…

人工知能:単語から経験に基づくエピソードが思い起こされる

AI

最近、人工知能ネタばかり書いていますが そのことを物理に詳しい高校の友人に聞いてみたところ (人に聞いてばっかりですみません)単語から、それにまつわるエピソードが思い起こされるから その後の心配とかするわけですよと言われました。なるほど、単語…

人工知能:エディタの作成 その1

筆者はUnityに詳しいので、人工知能エディタをUnityで実装してみたいと思います。 ある単語は何に属するのかこれを設定し易いエディタというものを考えていきましょう。たとえば、ソクラテスという単語があったとして ソクラテスが属しているカテゴリを考え…

人工知能:学習と整理

AI

前回の記事で、演繹的思考とは何か、どうプログラムを組むと演繹的な思考、推論を構築できるかを書きました。(参考文献なしで、自分なりに…)simplestar-tech.hatenablog.comそこで、まだ説明していない部分があったので補足すると 作成したプログラムは学…

演繹的思考をするAIについて考えてみる

タイトル、どんだけ考えるんだよと突っ込みたいですがどうも我々はひとり残らずどんなときも推論を続けながら生きているみたいなのですよ。 その推論には大きく2つに分類する見方があって、今日はそれをさらっと紹介して その発展について考えてみたいと思…

Unity:3層ニューラルネットワークプログラム

AI

人工知能とか機械学習とかを勉強していきたいと思います。 3層ニューラルネットワークをご存知でしょうか?まずは解説されている書籍を読んでみます。 「ディジタル画像処理」のニューラルネットワークの説明を参考にしました。 書籍リンク:CG-ARTS協会 | …

Unity:音声合成でリアルタイムにコンピュータにしゃべってもらう その3でオウム返し

音声合成でリアルタイムにしゃべってもらう話は以前しましたね。 simplestar-tech.hatenablog.com ここでで、予告通り今回はオウム返しするシステムを作ります。 マイクでしゃべったことをテキストに変換する話も以前しましたね。 simplestar-tech.hatenablo…

CeVIO4.0がリリースされたので新機能を試してみた

新機能の抑揚をMAXにしたら、えらい生き生きとした音声になった。 今後もCeVIOで音声合成しようと思った次第です。とりあえず、さすがCeVIO音声作ってみた。 http://file.blenderbluelog.anime-movie.net/sasucevi.mp3前回の記事の CeVIOCtrl を 4.0 のアセ…

Unity:音声合成でリアルタイムにコンピュータにしゃべってもらう その2でCeVIO

前回 simplestar-tech.hatenablog.com の続きです。cevio.jp を触ってみました。起動するとトラックごとのテキスト入力欄があるので、今回は「CeVIOだよ!」と入力再生すると次の音声ファイルが作られました。http://file.blenderbluelog.anime-movie.net/Ce…

Hearthstone: ハースストーンのスプリットダメージの期待値プログラム 高速化

およそ想定される最大計算量の 5^10 の分岐確率計算に 0.4 秒要するというのが前回の省メモリプログラムの速度でした。 これに対して 「秒という単位が出た時点で遅いです。」 という意見をもらいまして、さらなる高速化が求められている訳です。高速化でき…

Hearthstone: ハースストーンのスプリットダメージの期待値プログラム省メモリ化

ふと、前回書いたプログラム simplestar-tech.hatenablog.comについて デバッグ用に組み合わせ一覧を記録していましたが ほしいのはカードごとの撃破率なので、計算結果が出たら 加算していけば答えを変えずに省メモリ化できることに気づきまして 下記の通り…

Hearthstone: ハースストーンのスプリットダメージの期待値(検算プログラム)

スプリットダメージの期待値の計算について書いてきましたが やっと期待値計算を行うためのプログラムの形が見えてきました。 (正確にはカードごとに撃破される確率を出すプログラムです。)ということで、私が見たものを書いてみます。 using System; usin…

Hearthstone: ハースストーンのスプリットダメージの期待値 その3

前回の続きです。 スプリットダメージの回数3の場合の各カードの撃破率を様々な盤面で見ていきます。simplestar-tech.hatenablog.com■問題1 場に2枚のカードがあり 1枚目のカードのライフは1 2枚目のカードのライフは3 ★答え1 1枚目のライフ1のカードの撃破…