研究

BlenderでXray目の再現

どうも、チョコです。多く知られているMultipassのやり方を(今更)理解したので共有したいと思います。

BlenderではMultipassのことをRenderLayerといい、Compositorで組み合わせができる。

ラムのモデルでデモしよう。

Screenshot (1226)

 

髪の毛の前に目を出したいので、まず目と髪の毛を別のオブジェクトにして、髪の毛をレイヤ2にする。

RenderLayerを2個作り、それぞれのマスクを設定する(Hairはレイヤ2しかレンダしない)。

Screenshot (1221)

これをレンダすると、髪の毛が消えた。さて、Compositorで合成しよう。InputNodeを2個使えば両方のRenderLayer画像が入手できる。

 

レイヤ1から目の部分を切り取りたいので、ObjectIDマスクで分離する(目のObjectID1にした)。

Screenshot (1224)

最後に、二つのレイヤをCombineZで合成し、さらに上から切り取った目をAlphaOverする。

Screenshot (1225)

完成。では。

 

OpenGlでスポットライトを実装

チョコです。

エンジン作ってますが照明システムが必要となりました。そこでスポットライトが一番簡単なのでまずそれを実装しました。

Screenshot (1141)

プロセスを説明します。

Deferredなので、まずオブジェクトのパスを出します。zバッファーを使います。

Screenshot (792)
そして、光パスで画面スペース→世界スペースに変換し、光からの距離、角度を出します。割と簡単な数学演算なので省略。
そこで、影がないとおかしいので、影も実装しました。
光パスの前に、光を視点としたMVP行列をかけ、画面をもう一度レンダ―し、マップに保存します。
Screenshot (1142)

光の行列をシェーダーに渡し、世界スペース→陰スペースを算出します。そこのz値を出します。

Screenshot (1143)

陰スペースの自分のz位置と比べて、影かどうかを判断します。完成。biasなど全然かけてないのに割といい結果を出せました。

シェーダーコードも載せときます(フラグメントだけ)

 

これからはポイントライトやら一方向ライトやらの陰も実装しますが、意外と面倒なのでゆっくりやります。では。

Unity でブラックホールのシミュレーション

GPGPUの練習を兼ねて,Unityでブラックホール(っぽいの)をリアルタイムシミュレーションしてみました.

結果

説明

今回はUnityのComputeShaderを利用して並列処理を実装しましたが,CUDAに移植中なので,移植が完了したら別に記事を上げる予定です.
(C#でCUDAを記述する為に,managedCUDAというライブラリを使用しています.)

粒子の数は,上の動画では2の16乗(65536)個ですが,2^20乗でも遅延なく動きました.
GPUはGTX950を使用しています.

以下はComputeShaderのソースです.

結局やっているのは万有引力の計算だけです.しかもかなり省略してます.

CustomShaderとかUnity側のコードは面倒なので載せません.
本当はクソ汚いソースコードを見られたくないだけです.

Unity側やってることはComputeShaderに粒子の初期座標を与えているだけです.
上のComputeShaderではそのデータをもとにフレーム毎の計算を行っています.
そのデータをCustomShaderが受け取って,粒子を描画しているという感じです.
データのやり取りはComputeBufferを介して行っています.

CUDAに移植

移植してます.ぶっちゃけこっちが一番やりたいことで,ComputeShaderはオマケです.

[追記]CUDAに移植した.

全体的に雑.
粒子数:2^20個
ComputeBufferのポインタをそのままCUDAのKernelに渡せるようになったら終わり.
CUDAに移植したら別に記事を書く予定だったけど,面倒なので追記で済ませる.

パラレルデータを用いない多対1声質変換

久しぶりに声質変換の活動を行ったので記録します。以前の記事から半年ほどが経ちました。

https://kcs1959.jp/archives/2432/research/フレーム独立gmm-based-mappingによる声質変換

今回参考にした論文はAI班の記事でも紹介されていますが、以下のような手法です。本文はこちら


声質変換は研究者の数が少ないので他のAI分野に比べて勢いがなく発展が遅れていますが、この手法は2016年8月に発表された画期的な手法です。この手法の凄いところは主に以下のような点です。

  • 同じ内容を話している音声データが必要ない
  • 学習で使った人以外の声からも変換できる
  • 実装が比較的楽にできる

今までの多くの声質変換手法では、同じ内容を話している音声のデータが必要で、学習で使用した人からの変換しかできませんでした。また、最近の手法はなかなか実装が難しいことも個人的には悩みどころでした。

今回の実装ではSPTKという音声分析ツール、Kerasというニューラルネットワークライブラリを主に使用しました。また、音声コーパスはPASDというものを使わせてもらっています。

声質変換の結果は以下のようになりました。
まずは変換元(入力)の声です。改めて強調しておくと、この人の声は声質変換を学習する(変換器をつくる)ときには全く使っていません。

そして変換結果が以下の音声です。変換先の声の目標は水瀬いのりさんという声優の声を使用しています。ラジオの音声を私的に録音したものです。水瀬いのりさんの実際の声はこちらなどを参照してください。

まだ不自然な部分や合成音感が残ってしまっていますが、少なくとも女性らしい声に変換されているのがわかります。今回は論文で使用された5分の1程度の時間の音声を使って学習したため、学習データを増やすことでもう少し質が向上すると思います。データが少ない中で精度を向上するために論文で示されているモデルから多少の変更をしています。詳しい内容は僕の個人的なブログも参照してみてください。

近年ではGANなどの生成モデルが盛んに研究されていて、音声の生成もGoogleのWaveNetに代表されるように数多くの新しい手法が提案されています。この潮流の中での声質変換の発展も期待しつつ、僕も引き続き研究していきたいと思います。

脱出ゲーム(新歓バージョン)近日公開予定!(追記あり)

(2017/4/2追記) 以下にて公開開始しました!(PCブラウザのみ対応) https://kcs1959.jp/dassyutsu2017

こんにちは、GMAです。

近日以下のゲームを公開予定です。

KCS新歓用
※画像は開発中の画面です

なんとなく見覚えのある方は鋭いですね。このゲームは2015年度の三田祭の為に作られた3D脱出ゲームです。昨年UnityがWebGL書き出しに対応し、そろそろホームページにもゲームをアップしたいなと考えていたので、新歓期に合わせてこのゲームを公開することとなりました。

ただ、折角の新歓ですので、オリジナル版にあった通常モードに加えて、今回新たな新歓特別モードを追加しました!このモードは、

  • KCSにちなんだ完全新作の謎解きが楽しめる!
  • KCSや慶應大学に関する様々な豆知識が学べる!
  • 遊ぶときっとKCSに入りたくなる!

という新歓期にとてもぴったりなモードです!

新モードの追加以外にもグラフィックのリファインや操作の改良など、2015年版から様々な箇所に手を加えていますので、遊んだことがある方も無い方も是非挑戦してみてくださいね!なお、このゲームはこのページやトップページに公開予定です。

それでは。

PCのバックアップを取りましょう

この記事を読んだそこのあなたは不慮の事故でOSやHDDが吹き飛ぶ前に
・データのバックアップ
・リカバリメディアの作成(Windows10の場合)
・レジスタファイルのバックアップ
を行いましょう. 優先度は上のものほど高いです.

これらの操作は難しくありませんが, 間違えるとデータが消えたりOSが起動しなくなったりするのでここでの説明は控えます. いずれも検索するとよいサイトが見つかるのでそこを参考にするとよいと思います. (それらのサイトでも操作ミスによるデータの喪失等の責任を取ってくれるわけではないので注意してください).

・データのバックアップ

一番重要です. 最悪元のPCが再起不能になったとしても, データがあれば新しいPCに引き継ぐことができます. 全体のバックアップを取ると, 始めのバックアップでは何日もかかるため(二回目以降はdiffをとればよい), 時間のある時にやることが望ましいです. 時間がない場合でも, 大切なプロジェクトのファイルのバックアップは取っておくようにしましょう. ソースコードだけであれば容量もそこまで大きくはならないと思うので, ドライブにでも投げておきましょう.
プロジェクトに関してはそもそもGitなどのバージョン管理システムを使うという手もあります. リスクの分散のため, 複数の場所にバックアップを残しておくのがよいでしょう. 特に卒論のデータなどはこまめに多めにバックアップを取っておきましょう.
また, 購入したソフトウェアなどがある場合には, ライセンスキーを大切に保管しておきましょう.

・リカバリメディアの作成

Windows10ではリカバリメディアをUSBに焼くことができます. リカバリメディアだけであればそこまで容量は食いませんが, システムファイルのバックアップも同時に取る場合はそれなりの容量が必要です. また, リカバリメディア作成に使ったUSBはそれ専用になることにも留意してください. リカバリメディアの作成はOSが吹き飛んでからでは遅いので, 吹き飛ぶ前に済ませておきましょう. 作成しておけばOSが起動しなくなっても, USBを指した状態でUSBからブートすればWindowsREが起動したと思います. (記憶があいまいですが). Windows8からWindows10に無償アップデートした場合はリカバリ後にWindows8に戻る可能性があるので注意してください. (カスタマーセンターに連絡をすれば10に戻せるとは思いますが).

・レジスタファイルのバックアップ

こちらはregeditを使って行うことになるかと思います. OSが起動しなくなった場合, ブート時に参照されるレジスタファイルが破損している可能性があります. (もちろん他にも可能性は様々考えられます). この場合レジスタファイルのバックアップを取っておくことで, PCをリカバリしなくても直せる場合があります. とはいえ, レジスタファイルまわりの編集は一般的に安全でないため推奨されません. また, バックアップしていない状態でOSが吹き飛んでも, (HDDが破損した場合は無理ですが), WindowsPEからブートすることでrobocopyを実行することができます. 基本的にはバックアップを取ってリカバリするのがよいでしょう. 最近は外付けHDの価格も下がっているので, そこまでコストはかからないと思います. それでもレジスタファイルの修復によってPCの回復を試みたい場合はレジスタファイルのバックアップをローカルに取っておきましょう. (外部に取っておくとデータを持ってくるのが面倒). こちらも起動しなくなってからでは遅いです.

何よりも大切なのはデータのバックアップです. リカバリメディアの作成も, レジスタファイルのバックアップも, HDDが吹き飛んでは意味がありません. 逆にデータのバックアップが取ってあればPCが壊れても意外とダメージは少なく済みます. 何か起きる前に, 事前の対策を心がけましょう.

ホラーゲーム作ります:テクスチャ・演出・D言語くん

バイオ7出ました。素晴らしくて泣いた。決して怖くて泣いたのではありません。

せっかくなので試しにホラーゲーム作ってみたい。ホラーゲームも一人称ゲームも作ったことないし。

早速モデル作りました。こんな感じです(Blender内です)
asdfasdf

これどっかで見たような。。って思ったあなた、友達になってください。
(がっこうぐらしですねはい)

でもこれテクスチャがないとあまり怖くないですね。SubstancePainterに移りましょう。(ここから宣伝)

まず古い校舎感を出すために、「Coarse cement」のレイヤーに「Fine cement」をかけて、マスクで削る壁を演出した。さらにその上にほこりを載せる。

Screenshot (683)

おお、いい感じ。(これにはあらかじめ分割したモデルをベースにノーマルなどをベークした(例の椅子のヤツです))

では、ちょっと血を入れます。物理エンジン(?!)が使えるので、HeavyLeakingやBurn効果(Diffuse色やSpecular, Glossinessをいじったもの)を使ってみよう。

血はDiffuse #770000 Specular #ff6666 Glossiness 0.3かな(だいたい)。旧い血痕はSpecular低めで。

particles

グロ。でも好き。

さて、これをUnityにエクスポートしよう。Export Textures押すとUnityのStandard Materialがすぐ使えるDiffuse, Specular, Normal, Height, Occlusionマップが生成される。これを適用してみよう。

普通の照明じゃ面白くないので、カメラについているSpotlightで照らそう。

Screenshot (727)

怖い怖いちょっと待ていい雰囲気じゃねぇか。ほんとのホラーゲームっぽいぞ。(ホラーゲームです)

 

他のアセット:

1.KCSxUnity本

Screenshot (693)

2.D言語くん Screenshot (719)

↑Sketchfabはいいぞ。

この感じでアセットを作ると超便利で速い!

 

(ネタばれしたら実際のプレイも怖くなくなるので、他のシーンのものは見せられません。お楽しみに。)

では。

Virtuleap WebVR Hackathonに出た話

こんにちは.Kishiです.

2017年になりましたね.昨年はVR元年と言われていましたが,今年のVRは果たしてどうなるのでしょう.

自分は,これからのVRでは他者とのインタラクションという部分も発展していくと考えています.FacebookがSocial VRというものを推し進めていますが,これがもっと自然な形になれば普及する可能性はあると思います.

ここで,現在発展途上のVRの分野にWebVRというものがあります.これを使えば,上に述べたようなVRができるのではないかと思い,2月1日まで開催されているVirtuleap主催のWebVR Hackathonに参加しました.

現在VRの開発環境としてはUnityやUnreal Engineが有名ですが,どちらも今のところWebVRには対応していません.ですから,今回はThree.jsとWebVR Boilerplateを使ってWebVRを実現しました.また,A-Frameも有名ですが,今回は使いませんでした.

自分は他者とともに同じ空間でVRをやりたかったので,マルチプレイ機能を実装することになりました.このためにNode.jsでSocket.IOを使いました.

こうしてできたのが, SphereBlast です.手軽にプレイできるように,Cardboardがあれば誰でもアクセスするだけでできるようになっています.具体的な内容としては,各プレイヤーは球状の乗り物に乗っており,迷宮,山,城を散策できるというものです.山には拾って渡すことのできる星が落ちていたり,城には逃げる鳥がいたりします.

ハッカソンの結果としては,ダメでした.やはり同時にプレイする人のいるほどにぎわっておらず,それに今回のハッカソンではHTC Viveなどの最新機器を持っていることが前提のような作品が多く,趣旨もそのようでした.とはいっても,Node.jsを使ったのも今回が初めてでしたし,いろいろ良い経験になったと思います.そういうことにします.

thumbnail_sphereblast