2017/05/11

PureRefの画像にグリッドを表示する方法

PureRef


便利ばリファレンス画像表示ソフト、つまるところの資料画像表示に特化したビューアであるPureRefでグリッドを表示しよう、という話です。

PureRef自体の詳しい話はこちらにも書いています。
リファレンス/資料画像表示ソフト「Pureref」の使い方

資料のバランスを見るとき、デスケルな使い方としてグリッド表示があると便利かな、と思ったのですがPureRefには1.90現在がグリッド表示機能はありません。

ところがPureRefは透過画像に対応しています。
なのでグリッドでみたい画像の上に、背景が透明なグリッド画像を重ねればいけんじゃ。
ということで試してみました。

2017/05/08

リファレンス/資料画像表示ソフト「Pureref」の使い方

※この記事は「資料画像表示ソフト「Pureref」のあれこれ」を大幅に加筆修正したものです。

PureRef

イラストなどのリファレンス画像を表示するのに特化した画像ビューアことPureref。
リファレンスを平たく日本語にすると参照や引用という意味で、イラストを描く人的に言えば何かを描くのに参考にする画像、資料用の画像ですね。
3Dだとビューの背面や板ポリに表示してモデリングのガイドにする下書きもそう呼ばれたりします。
「(作りたいものに対して)基準になる画像」的なニュアンスなんだと思います。

そんなPureRefはWin/Linux /Mac対応のドネーションウェアです。
ダウンロード時に金額は0から任意の金額が入力出来ます。気に入ったり開発を応援してくれるなら好きな金額を払ってね、という仕組みです。デフォルトは5です。
例えば0を入れるとそのままダウンロードへ移行します。それ以外ならPaypalの支払画面へと移行します。
アカウント的なものはありません。

対応形式は、BMP / DDS / GIF / ICNS / ICO / JPEG / JP2(JPEG2000) / MNG / PBM / PGM / PNG / PNM / PPM / PSD / TIFF / WEBP / XBM /XPM / TGA です。
Xnviewほどではありませんが、WEBPやJP2にも対応しているので必要十分だと思います。
(強いて言えばJPEG XRの姿がありませんが、普及度的に、まあいいかな、と)

メリット

PureRefは画像ビューアの中ではわりと特異なUI/UX を持っています。
大量の画像を素早く切り替えたり並べて表示することに特化しています。
前回作業終了時の環境をすぐに再現できること、というのも特徴です。

素早くグレイスケール表示が出来るというのもポイントが高いです。
グレイスケール化にあたっては、RGBに重みを付けてくれています。詳しい説明はここでは省きますが、「RGBの数値的には同じ明るさでも、青は暗めに見えよね、とか黄色は明るめに見えるよね、というのを考慮しますよ」という意味です。
色に惑わされずにシルエットや凹凸を見るのに使われます。

クリスタやPhotoshopで同じ結果を得るには、黒のレイヤーを上にのせてレイヤーモードをカラーにするか、クリスタの場合はレイヤーモードを「グレー」にする必要がありますので、ボタン1つで出来るのは便利です。
元画像
重き付け無し
重き付け有り


資料は描いているところと出来るだけ近いところのほうが、目線移動が少なくて便利です。
クリスタには資料表示用にサブビューというパレットがあります。
資料を表示したり、色を拾えたりと、とても便利な機能で最近だと反転機能も追加されました。
ただ、サブビューは画像に切替が「進む」「戻る」しかなく、画像の量が増えてくると切替が面倒になってきます。
(このあたり昔、リストで選べたり順番を入れ替えできたりしないかなと要望を出してみたのですが、わりとおまけ感がある機能なので優先度はかなり低そうです)

特徴

キャンバス

いわゆるWinのMassigraやMacのプレビューと大きく違うのは画像の表示の仕方だと思います。PureRefは1枚1枚の画像をページをめくるように表示するのではなく、大きなキャンバスにペタペタ貼り付けたように表示します。
キャンバスは画像が端に行くと自動的に拡張されます。

画像データ

異なるサイズの画像を自動で並べる機能があります。
そのとき、画像がリサイズされますがオリジナルのデータは保持されています。
なのでリサイズされたからといって画像の縮小されてディティールが飛ぶということはありません。
このあたりの操作感は「Mischief 」に似ています。

デフォルトでは設定ファイルpurに画像データが埋め込まれます。
なのでpurファイルをコピーするだけでwinやmacとOSや環境が変わってもデータを正しく再現出来ます。

多彩な機能

出来る機能を現在でざっくり列挙すると以下の通りです。(バージョン1.90)
  • 自由な画像配置
  • オリジナルを保持した拡大縮小、回転、反転が可能
  • 画像の指定箇所を切り抜き、後から範囲を変更可能
  • 画像単体、キャンバス全体をグレイスケール化
  • 選択画像を縦幅、横幅、全体サイズを基準にして自動で揃える
  • 選択画像を名前順、追加順、形状に応じて並べるタイリング
  • クリック位置のカラーコードを取得
  • 画像キャンバスの透明度を変更
  • マウスイベントを透過する機能
  • 他準起動可能
  • 複数の設定で起動可能
  • アプリがフォーカスされていなくても有効になるグローバルショートカットを割り当て可能
主要機能を挙動面を含めて意訳すると以下のような感じです。
機能 名称
-Action-
すべての画像を並べてキャンバス範囲を最適化 Pack All and Optimize
マウスやペンの情報を無視(透過) Transparent To Mouse
選択画像を画面一杯に表示(オーバーレイ) Overlay selection
ウィンドウのサイズを選択画像に合わせる Resize To Selection
ウィンドウの位置を固定 Lock Window
カメラ(ズームや位置)をリセット Reset Camera
カメラのズームだけをリセット Reset Camera Zoom
キャンバス内の画像のロック Lock Canvas
キャンバスのグレイスケール化 Grayscale
元の画像を開く Open Souce
画像の拡縮アルゴリズムをバイリニアに切り替え Toggle Bilinear Sampling
最適な方法で配置 Arrange Optimal
名前で配置 Arrange by Name
追加順で配置 Arrange By Addition
左方向に整列 Align Left
右方向に整列 Align Right
上方向に整列 Allign Top
下方向に整列 Allign Bottom
重ねる Stack
高さで画像サイズを揃える Normalize Height
幅で画像サイズを揃える Normalize Width
幅高さで画像サイズを揃える Normalize Size
-Controls-
画像移動 Pan
カラーコードを表示 Show Color code
画像座標を表示 show Image Coordinate
連続選択 Continuous Select
画像移動 Move Item
縦横軸にスナップして画像を移動 Axis Snapped Move Item
近くの画像にスナップして画像を移動 Neighbour Snapped Move Item
回転 Rotate
一定角度で回転 Snapped Rotate
拡縮 Scale
反転 Flip
画像の透明度を変更 Change Opacity
切り抜き Crop Selection
切り抜き範囲を移動 Pan Cropping
切り抜き範囲を拡縮 Zoom Cropping
画像を表示枠一杯に表示 Focus Image
次の画像をウィンドウ一杯に表示 Focus Next Image
前の画像をウィンドウ一杯に表示 Focus Previous Image
背面に送る Send To Back
前面に送る Send To Front
画像をキャンバスから削除 delete

TIPS的ななにか

調子に乗って画像を突っ込みすぎて、メモリを5GBも使うPurファイルを運用していた私が送る毎度好例のTIPS的なものです。
(さすがに今は1GB未満にしています)

画像を一気に敷き詰めたい/並べたい

Pack All and Optimizeを使います。
ショートカットは「Ctrl+Shift+P」 です。

並べた画像を一覧したい

いくつか方法があります。
  • ctrl+aの後にダブルクリック。(ロック中ならロックを解除してから)
  • Camera Resetを使う(ただし画像を拡縮してたりすると上手くいかないことも)
  • ホイールなどでズームアウトする

特定の画像だけ整列したい

画像を複数選択後にAlignかArrange。

Optimizeってなに?

キャンバスのサイズの外周余白無くし、必要な範囲に絞ることです。

拡縮や回転はどうするの?

特定のショートカットを押しながら画像をドラッグ

特定の画像を素早く見たい

画像をダブルクリック。ロック中でもオッケーです。

ブラウザで表示中の画像を読み込みたい

ブラウザから対象画像をD&D。
Pureref自体に画像ダウンロード機能があります。(HTTPS対応)
ブラウザから読み込まれた画像は、自動でpurファイル埋め込み扱いになります。

またはブラウザ上で画像のコンテキストメニューを出して「画像をコピー」、その後にPureRef上でペーストしてもオッケーです。

PureRefキャンバスを画像として出力したい

「Save>Export>Scene」で出来ます。

PureRefを起動しているとストロークが途切れる時がある

オートセーブ機能が有効になってると、オートセーブ間隔で一瞬アクティブアプリが切り替わります。

画像の色を拾いたい

Sキーを押すとカラーピッカーが表示されます。
表示されたからコードはPhotoshopなどにコピペすればオッケーです。

黒枠が邪魔

customizeにあるpresetをglassにすると背景色が透明になります。

グリッドを表示したい

PureRefの画像にグリッドを表示する方法

ロックはしたほうがいい?

正直、好き好きだと思います。
ロックをしない状態だとスクロール時にスペースバーを押す必要がありますが、よく見る画像を並べるとかクロップ・回転などが手軽にできるので便利、という見方も出来ます。

メモリを食いすぎる

大きな画像を大量に読み込んでいると、必然的にメモリ消費も増えます。
解決策としては
  • 大きな画像は縮小して読み込む
  • Purファイルを分割する
  • UNDO回数を減らす
という方法があります。縮小に当たってはSettingのところに「Auto downscale large image」というのがあります。これはD&D時に指定以上のサイズの画像を自動でリサイズしてくれる機能です。

Purファイルの分割は、用途別に画像を分けておく、というスタンダードな方法です。
またPureRefは複数起動が出来ますので、それらを組み褪せて使うという方法もあります。
Windowsの場合は、タスクバーにあるアイコンを中クリックすればいいですが、Macの場合は「open -n -a “PureRef”」で開く必要があります。

Undo回数を減らすと、長時間使っている間の増えるメモリを抑制することが出来ますが、固定値的なメモリ消費は変わりません。

設定ファイルはどこ?

windowsなら%appdata%\PureRef.iniです。
Macは…わかりません。~\library\preferences\の中にあるファイルかと思ったのですが、どうも違うみたいです。

異なる設定で起動

コマンドラインオプションで「-s 設定ファイルのパス」と指定すると、その設定ファイルで起動します。
パスはファイル名まで入れると、そのファイル名が使われます。

Purファイルが大きい

PureRefは画像は内部でPNGとして持ちます。
なのでPurファイルに画像を埋め込む際にJPGもPNG形式で保存されます。そのため、JPGのように高圧縮ファイルを配置していても、サイズが大きくなる傾向があります。
将来元の形式のまま保存する計画があるみたいですが、現時点では仕様みたいです。

Purファイルが壊れたら

コマンドラインオプション「----brute-force」を付けて起動すると、壊れた部分を無視して強制的に読み込みます。
そこで一旦画像をExportしてPurファイルを作り直すのが良いでしょう。

Export時のファイル名

キャンバス内の画像を一気に書き出すことが出来ます。
その際に、ファイル名規則を指定できます。
連番とオリジナルファイル名を組み合わせることが出来るのですが、どうも%0と%1は両方使用しないと正しく動作しないみたいです。重複上書き防止なのでしょうね。(%1単独だと連番になってしまいます)

商用利用していいの?

金額0でダウンロードしても、現時点では商用利用しても構わないそうです。(フォーラム
ですが、継続的な開発のために支援して欲しいとのことなので、気に入ったら寄付を検討して上げて下さい。
(将来的にはダウンロード販売をするプランはあるみたいです)

キーバインドにあるShortcut Contextって?

ショートカットを割り当てるときにある、Shortcut Contextというのは、そのショートカットが有効になる状況を指定するところです。
ApplicationはPurerefがアクティブになっているときに有効になります。
GlobalはPurerefがアクティブであるとなかろうと有効になります。
windowは現在アクティブになっているPurerefウィンドウのみに有効になります。多重起動時用です。

オススメのショートカット設定

普段使いのペイントソフトとキャンバス操作のショートカットを合わせておくと、混乱が少なくて良い感じだと思います。
例えばクリスタに合わせる場合は、Panを「Space+LMB」、Zoomに「Ctrl+Space+LMB」を追加で割り当てます。
なおショートカットは右の方にある+をクリックすると割り当てを追加できます。

最後に

今回も、画像じゃなくてアナログな本の資料を見るとき便利な書見台で私が使っているのをペタリを貼っておきます。

これ厚手の大判のものでもしっかり止まるので重宝しています。
あと、同メーカーと思われるアームスタンド付きのものも見つけたので合わせて貼っておきます。

2017/05/07

多機能画像ビューアがクリスタのlip/Clip形式に対応していた話

XnView MP

対応画像形式200種類という膨大な数の画像形式に対応していることで有名なXnView。
ビューアだけでなく、編集、変換、管理と非常に幅広いタスクをカバーします。

XnView MPは元々Windowsのみの対応だったものをマルチプラットフォームに対応するために作り直しているものです。MPはマルチプラットフォームの意味。マルチプロセッサ対応って意味じゃありません。

Win/Mac両方で同じ機能を提供してくれるので私も愛用しています。

2017/05/05

シンプルラジアルメニューの話


このブログではシンプルラジアルメニューというツールを公開しています。
詳しい説明は公開のページに譲るとして、ざっくり言うとWACOMのドライバについている「ラジアルメニュー」を再現して普通のキーボードやマウスから呼び出す+αしようとした「お絵描きソフト操作支援ツール」です。

2017/04/28

1万前後のプロジェクターでアニメを見る話

去年引っ越したときに家具を買い換えました。地震でほとんど駄目になってしまったんですね。
そのときはまだまだ余震で揺れていたので、寝室の教訓から「腰より高い家具は置かない」と決めていました。クローゼットとか蓋が出来る場所に納めてしまえ、溢れるものは処分、という方針です。
 
その結果、というか新居は壁に覆う物がないガランとした部屋になりました。
そこでふと「真っ白な壁があるならプロジェクター投影できるんじゃ?」と思い立って、試しに安いプロジェクターを買いました。
これはそのお話です。

2017/04/25

動物避けの機械を導入した話

今回はちょっとお食事中の方はごめんなさいな記事です。

地震以降に引っ越したのですが、庭先に良く猫が粗相をしていきます。
朝起きて見てみると、砂地に小さな小山が出来ているわけです。この小山の中にいらっしゃるわけです。

これが実に玄関近くの絶妙な位置に、しかも毎回同じ場所にするので、うっかり踏みそうになります。

どうやら、ご近所さんあちこちで同様に粗相をされているようで、どうも同じ猫二匹の犯行の模様です。

私、猫は好きなんですけどね。飼っていましたし。
でも毎朝、起きて最初のお仕事は知らない猫様の粗相のお世話は中々ストレスです。

うっかり見逃すと夏場は臭いますし虫も来ます。踏んだのに気づかずに家に入ろうなら玄関の臭いが凄いことです。
子供もいて砂遊ぶが好きな年頃なので、うっかり宝を掘り当ててしまわれたら大変です。

いい加減に、対策を考えないと、という話になりました。

2017/04/22

StackEditからClasseurへ乗り換え

オンラインのmarkdownエディタをStackEditから開発中の後継サービスClasseurへ乗り換えました。

StackEditを使い勝手は悪くなかったのですが、日本語入力後に確定して改行するときに上の行に入力されてしまうという変な挙動が散見されて困っていたのですが、こっちでは今のところ問題ありません。

2017/04/18

2017/03/17

[Unity] TouchScriptを使うとWin x86ビルドでログを吐く話

TouchScript+Win x86

UnityのTouchScriptを使っていてWindows x86(32bit)スタンドアロンでビルドすると終了時にクラッシュログを吐きます。(TS 8.2現在)
理由はここで議論があるように VC++のランタイムの依存関係らしいです。
VC++ redistributableを最新にすれば解決するらしいですが、一般的に配布となるとちょっと面倒です。
最新版の9.0Alpha2で直ってるみたいですが、この修正以外にも色々修正されたみたいで安定版リリースには慎重みたいです。

解決策1 WindowsTouch.dllをコピーする

公式のwiki曰く、「WindowsTouch.dllをgithubからソースを落としてきてビルドするか、最新版の9.0Alpha2をダウンロードしてコピーしてね」という事みたいです。
ビルドでも良いのですが、ここは簡単に最新版をダウンロード後にdllだけインポートし、その後Unityでビルドをする方法です。

解決策2 StandardInputの設定を変える

touchManagerを含んでいるGameObjectあたりにStandardInputModuleをアタッチして、windows8 Touchの設定を「Unity」に切り替えます。
これで一応ログは吐かれなくなります。


抜本的な解決は9.0から

抜本的な解決は9.0が出るまでお預けみたいです。
ちなみに自分のところではx64ビルドではエラーを吐きませんでした。
Windowsのゲームならば基本的にマウス入力主体なので、Windows 32bit+マルチタッチを使うゲームというのは少ないように思いますが、該当される方は注意が必要かと思います。

2017/02/17

音楽畑のジャケットを二度見した話

E-Onkyo

 私はハイレゾ音源配信サイトのE-Onkyoをよく利用しています。
 もっともハイレゾだからと云うよりは、ロスレス音源の配信サイトという意味合いが強いです。

 そこで新譜を眺めていたときです。
 ジャンルをクラシックを選んだとき、思わず目が留まったのがこれ

音楽畑 String Quartet Collection
音楽畑のリンク

ジャンルを間違えたかと二度見しましたが、ちゃんとクラシックです。
制服姿の女の子4人が弦楽器を手にしたこのゲームのサントラや同人CDに見えるジャケットは、服部克久さんの音楽畑を弦楽4重奏にアレンジしたものです。ちゃんとオフィシャルなものです。

音楽畑というとテレビなどから流れ聞こえてきた曲が多く収められたシリーズです。
このアルバムに収められている「自由の大地」や「ル・ローヌ」あたりは聞いたことある人多いのではないでしょうか。私は「自由の大地」は学生の時、奏楽部でよく演奏したものです。

そうかぁ。このジャンルもこう言うジャケットで攻めるようになったかぁと感慨深くなった物です。

イラストなジャケットや表紙

いわゆる古典な小説の表紙にイラストが使われるようになった、という話を聞いたのはつい数年前です。
その結果、表紙で登場人物や内容を提示できて、これまでアタッチできなかった層が気になって手に取るようになったという話を聞いたことがあります。

いわゆる「クラシック」や「イージーリスニング」などとくくられる音楽界隈も同じく、なんというか地味な印象をまといがちなジャンルだと思います。

ジャケットといえば大抵、演奏者がキリッとした写真か、風光明媚な風景や静物が多いです。
「そういうジャケットならクラシック」という目印にはなりますですが、縁がない人にはコンテンツの中身がわかりやすいかといえば、ちょっと首が傾きます。

ジャケットからの先入観などではなく楽曲を聴いて各々個人がそれぞれのイメージを育ててほしいというのはわかるのですが、あくまで初心者というか、それまで触れたことのない裾野の端の人々にはハードルが高い気がします。
先入観云々を言い出したら勝手につけた副題ととかはどうなの、と思いますし。

業界的にも、テーマを絞ってコンピレーションCDを作ったり、それこそ全曲放送に拘らず聞きやすいところだけを抜粋することも良しとするOTTAVAのようなラジオ曲があり、もっとライトな感じにクラシックを楽しめるように努力されているところがあります。
ちなみに私はTBS時代からOTTAVAは愛聴していました。特に月一の企画会議好きでしたよ。

個人的には、こういうジャケットもありだと思うのです。
現に私のように思わず二度見して、わざわざブログに書こうという人が現れたのですから、ある意味成功じゃないでしょうか。

もちろん全部こうするべきとは思いません。棚に並べたくない、とかいう人もいるでしょう。さもありなんです。
ただ、こういうアタッチも悪くないと思います。
せっかく、いい曲が沢山あるんですから、こういうジャケットも入り口には良いと思います、という雑感でした。

無料で使えるPC VRプレイヤー「Go Pro VR Player」

意外と無い、無料で使えるVR PCプレイヤー

ローカルに保存された全球型3D 映像映像いわゆるVR動画を再生するPCソフトウェアを探したら思いのほかに見つかりません。
スマホアプリなら沢山あるのですがことPCになるとぱったりです。
そんな中で見つけたのがgoPro VR Playerというプレイヤーです。

GoPro VR Player

元々はGoProで撮影した全球映像を再生するために配布されているwindowsおよびMacのソフトウェアですが、他で作られた映像も問題無く再生できます。

対応デバイスもOculusやVIVE(steamVR)と必要どころを抑えています。
デコーダーはVLCのライブラリ、Media Foundation(MacならAV Foundation)、DirectShowなど必要どころを抑えています。

3D方式はサイドバイサイド、上下とそれぞれ逆と必要十分を抑えています。
コントロール系はキーボードショートカットのほかGazeUI、入力インターフェースはHMD デバイスのコントローラの他LeapMotionやrealSense対応のカメラが使えます。

コマンドラインでファイルを渡しての起動やHTTPストリームからの再生、ついでにPremireProでVR動画を編集する際の確認用ビュアーとしても動作します。

json形式でのプレイリストにも対応しています。

ぶっちゃけ正直、VR動画プレイヤーとして必要十分です。

操作とショートカット

操作デバイスとして対応しているのは以下の機器です。
  • Oculus Remote
  • Oculus Touch
  • XBox One controller
  • HTC Vive controll

ショートカットはHキーを押すことで画面に表示されます。
※ V2.2以降はDキーに変わった模様。

後で出てくるスマホをHMDの代わりにするvridgeを使っている場合、コントロールに困ります。理由は単純にキーボードが見えないので。
なのでゲームパッドを繋いで、joytokeyなどで操作すると良い思います。

LOGICOOL ワイヤレスゲームパッド F710r
マイクロソフト ゲームコントローラー Bluetooth/有線接続/xbox one/Windows対応 PC用USBケーブル同梱 4N6-00003

プレイリストはUTF-8

プレイリストの書き方はここに説明が書いてあります。jsonという形式です。 
説明は英語ですが、例を見れば大体分かると思います。
気にする点は次の通りです。

- 文字コードはURF-8
- \などのパスの区切り文字は2つにする

プレイリストで書かれたファイルはalt+left/rightで再生順を制御出来ます。サムネイルを付加することも出来ます。

サムネイルを付加していてGaze UIを選択している場合は、画面上に表示されたサムネイルを注視することでも選択可能です。

vridge使いの場合

スマホをVIVEなどのHMD代わりにするvridgeというソフトウェアがあります。
vridgeはPCでレンダリングされた映像を一旦エンコードしてスマホに送るのですが、そのエンコードにGPUやCPUのエンコーダを使います。

この時にAPIがGoPro VR Player側と被るとあまりパフォーマンスが良くない事が多いですので、例えばvridgeがMedia Foundationでエンコードするなら、映像デコーダはVLCを使うなど分けた方が経験上良かったです。
このあたりは組み合わせもあると思いますので、試行錯誤すると良いと思います。

音声は今のところPCにヘッドホンなどを繋いでになります。
無線化したい場合はSoundWireアプリなどを使ってPCの音声をスマホに飛ばすことも出来ます。
ちなみにVridgeは音声込みのストリーミングを実装予定だそうで、早ければ5月くらいにはリリースされるのだとか。

格安スマホでのVR動画再生にも

VR動画を販売配信するサービスが増えましたが、格安スマホなどでは専用アプリで再生できないパターンがあります。
その理由は大きく分けて「ジャイロが無い」と「再生能力が足りない」の2つに分かれると思います。

販売されている動画は1920x2160というフルHDを縦に詰んだサイズのものが多く、1080p以上の再生が出来ないスマホだと再生時にエラーが出たり音だけになったりするわけです。
 
そんなときはPCの再生能力が十分ならGoPro Player+vridgeを使うことで回避することが出来ます。
もっとも販売サービスがPC用の試聴ソフトを用意していて、それがVIVE対応だったりするならば、Vridgeで一発です。
ただ某サービスではPC用ファイルよりもスマホ用ファイルのほうが画質が良かったりしますが、公式アプリはファイル形式で絞り込んでいるのか、スマホ用ファイルだとVR動画だと認識しなかったりします。こういうときはGoPro Playerの出番ですね。

GoPro Playerが使えるのは動画ファイルにDRMが掛かっていない場合に限ります。DMMとかはDRMが掛かっているので専用プレイヤーが必要になります。

vridgeはスマホだけではポジショントラッキングができませんが、この手のVR動画はポジショントラッキングは必要ないので十分でしょう。

youtubeなどのVR動画を見ようとして、スマホの再生能力以上のデータを受信するすることができないため、HMDゴーグルをつけても解像度が足りないがっかり映像になったりしますが、それも例えば「YouTube VR 360/3D Streaming Player for Vive」などを使うと4K映像で視聴できたりします。(もっとも4K 60fpsのストリーミングはかなりの回線速度が必要でしょうけども)


まとめ

無料という手軽さと、豊富な設定と機能を持ったGoPro VR Playerはローカル環境でのVR再生に持って来いだと思います。
 強いての懸念は、オープンソース等では無く、企業が一種の自社製品のためにある種サービスとして配布しているソフトなのでいつまでも配布されているかは分からないところ。仕方のないの無い話ですが。

最後に素敵なソフトウェアを配布してくれているGoProに感謝を込めて、せめてAAだけでも貼っておきます。


【国内正規品】 GoPro ウェアラブルカメラ HERO5 Black
ゴープロ (2016-10-03)
売り上げランキング: 155

2017/02/16

iPadの外付けキーボードはUSとJISを同時にペアリングしない方が良い

iPadでUS配列とJIS配列

iPadProはペンをメインで使うときと、膝の上で文章入力などラフに使うときのために2種類のBluetoothキーボードを用意しています。 
 ノートPCのような形になるキーボードはUS配列、ペンを多用するときに使う本体から独立しているMagic KeyboardはJIS配列です。
 
 これを同時にペアリングしていたときです。Magickeyboard側で英数字の=の入力出来ず、ふと隣のキーを叩くと=が入力されたじゃないですか。
 JIS配列なMagic keyboardがどうやらUS認識をしているっぽい。
 とりあえずUS配列のキーボードのペアリングを削除をしてアプリを再起動したところ、ちゃんとJIS配列として認識するようになりました。

キーボードの配列は混ぜるなキケン

キケンとまでは言いませんが、予期しない挙動をするためいくつもkeyboardをペアリングする場合は配列を揃えた方が良さそうです。
 もっとも、キーボードを二個も三個もペアリングするという使い方はマイナーでしょうけども。

おまけ

amazonでiPadのキーボードを見ていたら、ロジのIk1200が発売当初からなんか半値くらいになっているじゃないですか。
 2017年2月16日現在で9,944円です。
 Ik1200はiPad Pro用でちゃんとしたライセンスを受けたもので、BluetoothではなくiPadの横にあるSmart Connectorを使って接続をするものです。おまけにバックライトも付いています。その分、ちょっと重さに来るみたいですが。
 たしかこれ、しばらく2万円くらいの価格だったはず。9.7インチより安くなっていて、不思議な感じがします。
 

2017/02/13

[Unity] TouchScriptの覚え書き



TouchScriptって

Unityで個人的な物を作るとき、入力周りにはTouchScriptというアセットをよく使います。
TouchScriptというのは、マルチプラットフォームに対応したタッチ入力やジェスチャ入力を簡単に扱えるようになるアセットです。現在絶讃Asset Storeにて配布中です。無料です。
なんでもPokemonをGOするアプリにも使われていたとかなんとか。
簡単に使えるようになる、はずなのですが、よくセットアップ時に何か1つ抜けてたりするので備忘録ついでにブログに残してみます。

セットアップ

この記事はUnity5.4f3+Touchscript 8.2基準で書いています。

アセットをインポートしたら空のGameObjectを作り適当に「TouchManager」とか名前をつけます。
それにTouchScript/TouchManagerとTouchScript/InputSouces/Standard Inputのコンポーネントを追加します。Standard Inputは無くても自動で追加されるんですが、あった方が後々便利かなと思います。
ついでにプロジェクトから「TouchScript/Prefabs/Touch Visualizer」をhierarchyに放り込むとタッチの状態が視覚化できて便利です。

ジェスチャの計画

ゲームの種類や用途に応じてコンポーネントを追加していきます。
2DゲームならカメラにTouchScript/Layers/CameraLayer2Dを割りあてます。
3DならCameraLayerをカメラに割り当てます。
 
fullscreen Layerは全画面で反応するようにするもので、UI LayerはUI要素に反応するもの。こちらは後ほど説明します。

オブジェクトにジェスチャを割り当て

入力に反応して欲しいオブジェクトに対してジェスチャのコンポーネントを追加していきます。
TouchScriptにあるジェスチャコンポーネントで主要なものは以下の通り。
  • タップに反応する「TapGesture」
  • フリックに反応する「FlickGesture」
  • 長押しに反応する「LongPressGesture」
  • ドラッグ、ピンチ(拡大縮小)や回転に反応する「TransformGesture」
  • TransformGestureと基本同じだけどスクリーン座標を返す「ScreenTransformGesture」
オブジェクトを中心として一本指で回転やピンチをする「PinnedTransFormGesutre」
Transform系のGestureはpositionのみとかscaleのみとか振る舞いを絞り込むことが出来ます。

他にも指を離したときに特化したRelease Gestureとかありますが割愛です。
ちなみにScreen Transform Gestureは使ったことがないのでよく分かりません。FullscreenLayerと組み合わせてカメラ移動とかに使うのでしょうか?
これらから欲しい挙動のコンポーネントを反応させたいGameObjectに割り当ててます。
Colliderを追加するのも忘れずに。

特定のオブジェクトのタップを得る場合

反応させたいGameObjectにTap Gestureを割り当てます。
そして次のようなコードを書きます。
usingは必要に応じてTouchScript.Gesturesなどを追加して下さい。
void OnEnable()
{
    // TapGestureのdelegateに登録
    GetComponent<TapGesture>().Tapped += tappedHandle;
}

void OnDisable()
{
    UnsubscribeEvent();
}

void OnDestroy()
{
    UnsubscribeEvent();
}

void UnsubscribeEvent()
{
    // 登録を解除
    GetComponent<TapGesture>().Tapped -= tappedHandle;
}

void tappedHandle(object sender, System.EventArgs e)
{
    //処理したい内容
}

特定のオブジェクトのフリックを得る場合


反応させたいGameObjectにFlick Gestureを割り当てます。
そして次のようなコードを書きます。
usingは必要に応じてTouchScript.Gesturesなどを追加して下さい。

void OnEnable()
{
    // FlickGestureのdelegateに登録
    GetComponent<FlickGesture>().Tapped += FlickedHandle;
}

void OnDisable()
{
    UnsubscribeEvent();
}

void OnDestroy()
{
    UnsubscribeEvent();
}

void UnsubscribeEvent()
{
    // 登録を解除
    GetComponent<FlickGesture>().Tapped -= FlickedHandle;
}

void FlickedHandle(object sender, System.EventArgs e)
{

    var gesture = sender as FlickGesture;
    // ジェスチャが適切かチェック
    if (gesture.State != FlickGesture.GestureState.Recognized)
    return;
    // 処理したい内容
    // gesture.ScreenFlickVectorにフリック方向が入るので
    // if (gesture.ScreenFlickVector.y < 0)としたら下方向へのフリックを検知できる
}

ScreenFlickVectorを使ってフリック方向を得る事が出来ます。
その他に、反応する方向、距離や時間なども設定出来ます。インスペクタからも設定出来ますが、コードで設定する場合は こちらを確認すると良いです。

ドラッグ、拡大や回転を得る場合

反応させたいGameObjectにTransform Gestureを割り当てます。
TransformGestureについてはTransformerというコンポーネントを加えると、コードを書かずに移動や拡大を実現出来ます。もちろんイベントハンドラを使って自分でtransformを設定すればtransformerは使わないでもいいですが、回転や拡大縮小を使う場合は、ぐっと楽になります。

今回はTransformerを使う方法で書きます。
コンポーネント追加後はTransform GestureでPositionやScaleなど有効にしたいtransformを指定したら、これでとりあえずドラッグに合わせてオブジェクトが動きます。

あとはイベントハンドラを使って必要な処理を追加していきます。
usingは必要に応じてTouchScript.Gesturesなどを追加して下さい。

void OnEnable()
{
    // Transform Gestureのdelegateに登録
    GetComponent<TransformGesture>().TransformStarted+= TransformStartedHandle; // 変形開始
    GetComponent<TransformGesture>().StateChanged+= StateChangedHandle; // 状態変化
    GetComponent<TransformGesture>().TransformCompleted+= TransformCompletedHandle; // 変形終了
    GetComponent<TransformGesture>().Cancelled+= CancelledHandle; // キャンセル
}

void OnDisable()
{
    UnsubscribeEvent();
}

void OnDestroy()
{
    UnsubscribeEvent();
}

void UnsubscribeEvent()
{
    // 登録を解除
    GetComponent<TransformGesture>().TransformStarted -= TransformStartedHandle;
    GetComponent<TransformGesture>().StateChanged -= StateChangedHandle;
    GetComponent<TransformGesture>().TransformCompleted -= TransformCompletedHandle;
    GetComponent<TransformGesture>().Cancelled -= CancelledHandle;
}

void TransformStartedHandle(object sender, System.EventArgs e)
{
// 変形開始のタッチ時の処理
}

void StateChangedHandle(object sender, System.EventArgs e)
{
// 変形中のタッチ時の処理
}

void TransformCompletedHandle(object sender, System.EventArgs e)
{
// 変形終了のタッチ時の処理
}
void CancelledHandle(object sender, System.EventArgs e)
{
// 変形終了のタッチ時の処理
}
transfromerコンポーネントを使うとこれだけで2本指での拡大、移動、回転が可能になります。

PC上でマウスを使う場合は二本指ジェスチャは出来ないので、そのときはaltキーを押してクリックすると、そのクリックは「押しっぱなし」と見なされマルチタッチジェスチャを入力することが出来ます。

transformGestureのインスペクタ上にある「transform Type」の項目は以下のようにするとスクリプトで設定することが出来ます。
// using TouchScript.Gestures.Base;がある前提で
// 値には以下の値を入れる
// 回転ならTransformGestureBase.TransformType.Rotation
// 移動ならTransformGestureBase.TransformType.Translation
// 拡大ならTransformGestureBase.TransformType.Scaling
// 例
GetComponent<TransformGesture>().Type = TransformGestureBase.TransformType.Rotation | TransformGestureBase.TransformType.Scaling; 

画面全体のタッチを取得する場合

画面全体つまりオブジェクトが無いところで起きたタッチイベントを取得することが出来ます。

カメラの移動などに使ったり、画面を切り替えるとき、とにかく画面をタップしてほしい時などに使うのだと思います。

使い方はまずHierarchyに空のgameObjectを作り、touchManagerとfullScreenLayerコンポーネントをセットします。すると、TouchManagerコンポーネントに「FullScreen」レイヤーが認識された旨追加されます。

 後は作成したgameObjectにタップなどのジェスチャを割り当てていきます。内容は上のタップやフリックなどと同じです。

uGUIにジェスチャを割り当てる

やり方はFullScreenLayerとほぼ同じです。
FullScreenLayerの代わりにUILayerをGameObjectに割り当てます。
割り当てるのはべつにCanvasなどで無くともTouchManagerをセットしたGameObjectでも良いみたいです。

標準のuGUIとTouchScriptを混在させる

標準のuGUIとTouchscriptを混在して使う場合、例えばキャラクターの移動にはTouchScriptを使ってアイテムの選択にはuGUIを使う場合は、EventSystemにあるStandaloneInputModuleをTouchScriptInputModuleに置き換えます。
これをしないとuGUI側が無効になります。

タッチされた位置を知る

タッチの情報は、イベントハンドラ内のobjectから得ることができます。
例の場合、senderからタッチされた情報を得るには以下のようにします。

// transformGestureの場合

   var gesture = sender as TransformGesture;
   TouchHit hit;

   gesture.GetTargetHitResult(out hit);

これでhitにはタッチされた場所などの情報が渡されます。あとはhit.Pointで位置が取得で見ます。

hit.NomalにはタッチされたColliderとの法線が得られます。
例えば床に当たったときは(0f,1f,0f)が、壁等の場合は(1f,0f,0f)などが得られますので、必要に応じて組み合わせます。

シーン上のタップの状況を知る

TouchScriptにはタッチジェスチャごとにSendMassageを送ることが出来ますが、シーン全体のタッチを管理するTouchManagerのイベントハンドラからタッチ情報を得ることも出来ます。

// using TouchScript; として

// touchはTouchPointが入る
// touch.Idはタッチした順の値

   TouchManager.Instance.TouchesBegan +=
       (sender, args) => {
           foreach (var touch in args.Touches)
               Debug.Log("Began: " + touch.Id);
       };

    TouchManager.Instance.TouchesEnded +=
       (sender, args) => {
       foreach (var touch in args.Touches)
               Debug.Log("Ended: " + touch.Id);
       };

例ではtouchから TouchPointの情報を得ることが出来ます。具体的にはタップした順や位置、transform、入力方法などです。

ただこのイベントだと「どのオブジェクトがタッチされたか」しか分からないのです。(もしジェスチャまで分かる方法があるなら教えて下さい)
なので、ジェスチャごとの挙動は各ジェスチャのイベントハンドラに書いた方が良いでしょう。

複数のジェスチャを認識する

TouchScriptは一つのGameObjectに複数のジェスチャコンポーネントが割り当てられていると、排他的に登録順に処理していきます。

そのため、一つのジェスチャが認識中は他のジェスチャを認識しません。
例えば、とあるボタンは長押しをすると技の詳細表示、そのままフリックすると技を発動したい、とします。普通に割り当てたままだと、LongPressGestureがタッチ情報を掴んでしまいflickGestureへ流れなくなります。

そんな時はfriendlyGesturesというのを割り当てます。
やり方は、インスペクタから同時に認識させたいジェスチャのコンポーネントへジェスチャを含んだGameObjectをD&Dするか、スクリプトで割り当てます。

 
GetComponent<LongPressGesture>().AddFriendlyGesture(GetComponent<FlickGesture>());
 これで長押しとフリックが同時に認識するようになります。

まとめ

TouchScriptはやりたいことをイベントハンドラに登録すれば出来てしまうと言うお手軽さと、マウスでもマルチタッチジェスチャがテストできるのが素敵なフレームワークです。

なのですけど、多機能なだけに「これ、どこにセットするんだっけ」と毎回ググる羽目になるので自分宛の備忘録のつもりに書いてみました。

この記事からstackEditで書いて投稿しています。今更感満載ですが、markdownでかけるのは楽です。

Blogger標準のエディタも悪くは無いんですけど、WYSIWYGなエディタの宿命なのかよく分からない見出しタグが入るのが残念でした。
しばらくこれを試してみようと思います。

2017/02/03

ブログの表示が遅いのでテンプレートを変更した


 もうタイトルですべてを言い切った感がありますが、ここのところブログの表示が妙に遅かったのです。
 サーバーが混んでるのかとも思っていましたが、googleさんがそんなに遅いはずは…と思い直し、いろいろ弄った結果ブログのテンプレートを変えることにしました。