2018年1月28日日曜日

Windows が瞬間的に遅くなる症状を直す方法 (SSDのプチフリ)

How to fix Windows short time freezing

数年前に Windows 8 の PC を購入し Windows 8.1、Windows 10 とアップデートして今も使ってます。
Windows 8 の頃は快適だったのですが 8.1 にアップデートしてから一瞬だけ操作を受け付けず画面の動きが固まるような症状が出るようになりました。
最新の 10 でも同じ症状が出ます。
ずっと原因が不明でしたが設定を変更したら症状がなくなったのでその内容をまとめました。


環境

  • SATA 規格の内蔵ハードディスクを SSD に換装した Lenovo ThinkPad


症状

  • スタートボタンをクリックするとスタートメニューが表示されるまで 0.1秒ほどかかることがある。その間マウスを動かしてもポインターが動かない。その後再起動するまではスタートボタンのクリックはすぐに反応する。
  • デスクトップの壁紙に設定したスライドショーが切り替わるタイミングで 0.1秒ほど画面の表示が固まる。その間マウスを動かしてもポインターが動かない。
  • DirectX を使用するゲームで 0.1秒ほどのフレーム飛びが不定期に起きる。


解決方法

症状が「プチフリーズ」と呼ばれる現象に似ていることとハードディスクを SSD に換装しているため、SSD のプチフリーズの解決手段を試しました。
いろいろな手段があるようですが、SSD の名前をレジストリに登録するという手段で解決したようです。


設定方法

レジストリに SSD の名前を手入力すると入力ミスする可能性がありますが、次の操作で正確な名前を調べて入力することができます。
コマンドプロンプトを起動して
msinfo32
と入力して Enter キーを押します。
blog.fujiu.jp Windows が瞬間的に遅くなる症状を直す方法 (SSDのプチフリ)

システム情報が起動するので
コンポーネント - 記憶域 - ディスク
と開くと右側に「モデル」が表示されます。この値が今回必要な名前です。
SSD を2台以上接続している場合は接続している台数だけ表示されると思います。

モデルの行をクリックしてメニューの
編集 - コピー
でコピーします。

次にコマンドプロンプト
regedit
と Enter キーを入力して レジストリエディターを管理者権限で起動します。

¥HKEY_LOCAL_MACHINE¥SYSTEM¥CurrentControlSet¥Service¥storahci¥Parameters¥Device
と開き、右側の NoLPM をダブルクリックします。

「複数文字列の編集」が表示されるので「値のデータ」を右クリックして 貼り付け (または Ctrl + V) でディスクの名前を貼り付けします。名前の最後に「*」をつけて OK をクリックします。

PC を再起動して設定完了です。
この設定以降は症状が現れてません。


試したけど解決しなかったこと

  • 最新のデバイスドライバーをインストールする
  • Lenovo Update で推奨のアップデートをインストールする
  • Windows 10 をクリーンインストールする
  • 電源オプションの AHCI Link Power Management-HIPM/DIPM を Active に設定する


参考にしたコンテンツ

Windows 8 ssd freeze "Reset to device, \Device\RaidPort0, was issued."
https://social.technet.microsoft.com/Forums/windows/en-US/fa9f69d6-ba08-4895-a2bb-4741c05d5fbf/windows-8-ssd-freeze-reset-to-device-deviceraidport0-was-issued?forum=w8itproperf
レジストリの NoLPM に SSD の名前を登録するとその SSD に LPM のコマンドが発行されなくなるようです。
つまり特定の SSD をWindows のシステムドライブにすると LPM (省電力管理)に問題が起きてプチフリーズが起こるようです。



関連ブログ

Windows 10 Creators Update をクリーンインストールする方法
[ThinkPad] ノートPCのハードディスクをSSDに交換する方法
フリーズ(文鎮化)したCrucialのSSDが復旧するまで

2018年1月13日土曜日

[Unity3D] オリジナルキャラクターにユニティちゃんのスクリプトを設定する方法

How to attach UnityChan assets to original charactors

Unity3D ゲームエンジン(以下 Unity)にオリジナキャラクターをインポートして「ユニティちゃん」と同じように操作できる方法をまとめました。
応用すれば MikuMikuDance 用のモデルにも適用できます。(下の画像)
blog.fujiu.jp  [Unity3D] オリジナルキャラクターにユニティちゃんの動作を設定する方法
アイティオール株式会社が公開したモデルを MMD4Mechanim で Unity にインポートしました


環境

  • Windows 10
  • MakeHuman 1.1.1
  • Unity 2017.3.0f3


オリジナルの人物モデルを作る

手っ取り早くオリジナルキャラクターを作るため人物のモデリングに特化した無料の MakeHuman を使いました。
MakeHuman のライセンスは AGPL3 ですが作ったモデルのライセンスは CC0 で利用できるようです。
キャラクターのデザインは自由ですが次の設定をしておくと Unity にインポートした後の不具合が少ないと思います。
  • Pose/Animate - Skelton は Cmu mb に設定する
  • Pose/Animate - Pose は Tpose に設定する
特に Skelton は Game engine に設定したら Unity にインポートした後「Required human bone 'Hips' not found」のエラーでリギングできなかったので要注意です。

キャラクターが完成したら
File - Export
で Filmbox (fbx) を選択して名前をつけて FBX ファイルにエクスポートします。


Unity にオリジナルモデルをインポートする

MakeHuman でエクスポートした FBX ファイルをサブフォルダーごと Unity の Project ウィンドウにインポートします。

Project ウィンドウの先ほどインポートした FBX ファイルを選択して Inspector の Rig の Animation Type を Humanoid に変更し Apply をクリックします。


Unity に "Unity-chan!" Model をインポートする

Asset Store から無料でダウンロード出来る "Unity-chan!" Model をインポートします。
このアセットのアニメーションやスクリプトをオリジナルキャラクターで動作させます。


オリジナルキャラクターに "Unity-chan!" のスクリプトを適用する

Project ウィンドウのオリジナルキャラクターを Hierarchy にドラッグ&ドロップします。

Hierarchy ウィンドウのオリジナルキャラクターに Project ウィンドウの
Assets - UnityChan - Prefabs - for Locomotion
の以下の3つのプレファブを追加します。
  • CamPos
  • FrontPos
  • JumpPos

オリジナルキャラクターの Inspector に Project ウィンドウの
Assets - UnityChan - Scripts
の UnityChanControlScriptWithRgidBody というスクリプトを追加します。
RgidBody と Capsule Collider が自動で追加されます。
RgidBody の Freeze Rotation の X・Y・Z をすべてオンにします。
Capsule Collider はキャラクターに合わせて大きさと位置を調整します。

オリジナルキャラクターの Inspector の Animator の Controller を UnityChanLocomotions に設定します。

Hierarchy の Main Camera に Project ウィンドウの
Assets - UnityChan - Scripts
の ThirdPersonCamera を追加します。

これで完了です。
地面がないと落下し続けるので Plane を追加して Mesh Corider をつけて地面として設置しました。
実行するとユニティちゃんと同じ動作をします。
カーソルキーで移動、走っている最中にスペースキーでジャンプします。


関連ブログ

MakeHumanでCLIP STUDIO用3Dキャラクターを作る方法
ゲームのグラフィックや音声を吸い出す方法 (Unity Assets Bundle Extractor)
[Blender] ManuelbastioniLAB でCLIP STUDIO用キャラクターを作る方法
Unity3D のC#スクリプトを Visual Studio Code で編集する方法



2018年1月7日日曜日

ゲームのグラフィックや音声を吸い出す方法 (Unity Assets Bundle Extractor)

How to rip Unity games to graphics and audio clips

Unity Assets Bundle Extractor というツールを使って Unity3D (以下 Unity) 製ゲームのグラフィックや音声を吸い出して
ファイルに復元する方法を試してみました。

※ FBX ファイルに復元したい場合は ゲームのグラフィックを FBX ファイルに吸い出す方法 (AssetStudio) をご覧ください。


環境

  • Windows 10
  • Unity 5.6.5
  • Unity Assets Bundle Extractor 2.1
このブログを書いている時点の Unity の最新バージョンは 2017.3.0 ですが、Unity Assets Bundle Extractor 2.1 では最新の Unity でビルドしたゲームの吸い出しが出来なかったため Unity をバージョンダウンして検証しました。


吸い出す対象のゲームを作る

メッシュオブジェクトがシンプルな「クエリちゃん SD版」を使って吸い出し方法を説明します。
「クエリちゃん SD版」は Asset Store から無料でダウンロード出来ます。
blog.fujiu.jp ゲームのグラフィックや音声を吸い出す方法

このアセットのプレファブを追加しただけの Scene を作り、キャラクターを吸い出すことを目標とします。

exe ファイルにビルドします。
今回は uabe_sample.exe というファイル名でビルドしました。


Unity Assets Bundle Extractor をダウンロードする

Unity Assets Bundle Extractor (以下、UABE) は Unity でビルドしたファイルからグラフィックや音声を吸い出すツールです。
機能はシンプルですが無料で公式サイトからダウンロードできます。
https://7daystodie.com/forums/showthread.php?22675-Unity-Assets-Bundle-Extractor

ダウンロードした zip ファイルを展開して AssetBundleExtractor.exe をダブルクリックすると起動します。


UABE で吸い出す

exe ファイルをビルドした場所に ○○_Data というフォルダーがあります。
uabe_sample.exe をというファイルにビルドしたらフォルダー名は uabe_sample_Data です。
UABE のメニュー
File - Open
でそのフォルダーの中の sharedassets0.assets というファイルを開きます。
ビルドした Unity が新しすぎると下のような画面が表示されるので選択肢のうち最も新しいバージョンを選択します。

UABE の 解析が正常に出来ると Assets info という画面が表示されます。

Type が Texture2D なら画像、Mesh ならメッシュオブジェクト、AudioClip なら音声です。
Mesh を吸い出すなら メッシュオブジェクトを選択して 右の Plugins をクリックして Export to obj を選んで OK をクリックします。
画像を吸い出すなら Texture2D オブジェクトを選択して Plugins をクリックして Export to .tga または Export to .pngを選んで OK をクリックします。
音声を吸い出すなら AudioClip オブジェクトを選択して Plugins をクリックして Export sound を選んで OK をクリックします。

下は Body のメッシュオブジェクトを吸い出してペイント3Dで開いた結果です。
胴体が吸い出せました。

Texture2D と Mesh を全部吸い出して Blender で復元してみました。
UV座標が保持されているのでテクスチャが正確に再現出来ました。


市販のゲームも吸い出し出来る

プライエタリーなゲームでもUnity製なら吸い出し出来ることがあります。
ただしほとんどのゲームは著作権やエンドユーザーライセンス契約などで保護されています。


AUBE の限界

AUBE で吸い出したメッシュオブジェクトはリギングが失われ親子関係も保たれません。
ほかのゲームに使い回すのは難しいと思います。
大事なアセットはバックアップすることをおすすめします。

関連ブログ

Unity3D のC#スクリプトを Visual Studio Code で編集する方法
Live2D を Unity3D で動作させる方法
[Unity3D] ユニティちゃんたちのアニメーションを分離するスクリプト