diff --git a/.github/workflows/gh-pages.yml b/.github/workflows/gh-pages.yml
new file mode 100644
index 0000000..fdf478c
--- /dev/null
+++ b/.github/workflows/gh-pages.yml
@@ -0,0 +1,33 @@
+name: github pages
+
+on:
+ push:
+ branches:
+ - main
+
+jobs:
+ build-deploy:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v4
+ - name: Setup Node.js
+ uses: actions/setup-node@v4
+ with:
+ node-version: 23
+
+ - name: Build
+ env:
+ TZ: "Asia/Tokyo"
+ run: |
+ cd ./book
+ npm i
+ npx honkit build
+
+ - name: Deploy
+ uses: peaceiris/actions-gh-pages@v3
+ with:
+ github_token: ${{ secrets.GITHUB_TOKEN }}
+ publish_dir: ./book/_book
+ publish_branch: gh-pages
+ user_name: 'ai[bot]'
+ user_email: '138105980+yui-syui-ai[bot]@users.noreply.github.com'
diff --git a/.gitignore b/.gitignore
index 2703f31..31c3a85 100644
--- a/.gitignore
+++ b/.gitignore
@@ -9,3 +9,6 @@
/scpt/*.jpeg
/scpt/*.png
config
+book/_book
+book/node_modules
+book/desktop.ini
diff --git a/book/CNAME b/book/CNAME
new file mode 100644
index 0000000..2ee01e9
--- /dev/null
+++ b/book/CNAME
@@ -0,0 +1 @@
+ue-book.syui.ai
diff --git a/book/README.md b/book/README.md
new file mode 100644
index 0000000..e269297
--- /dev/null
+++ b/book/README.md
@@ -0,0 +1,5 @@
+
+
+# Unreal Engine 5 Guide Book
+
+download | web
diff --git a/book/SUMMARY.md b/book/SUMMARY.md
new file mode 100644
index 0000000..a1540b1
--- /dev/null
+++ b/book/SUMMARY.md
@@ -0,0 +1,28 @@
+# Summary
+
+* [Unreal Engine 5 Guild Book](README.md)
+* [default](default/README.md)
+ * [version](default/00_version.md)
+ * [start](default/01_start.md)
+ * [install](default/02_install.md)
+ * [tips](default/03_tips.md)
+* [game animation sample](gas/README.md)
+ * [キャラクターを追加する](gas/01_character.md)
+ * [飛びつける高さを増やす](gas/02_jump.md)
+ * [キャラクターの見た目を変える](gas/03_vrm.md)
+ * [モーションキャプチャで動かす](gas/04_vmc.md)
+ * [揺れものを設定する](gas/05_kawaii.md)
+ * [カメラワークの設定する](gas/06_camera.md)
+* [control rig sample](crs/README.md)
+ * [CRでキャラクターを動かす](crs/01_character.md)
+* [city sample](city/README.md)
+ * [海の境界を消す](city/01_remove.md)
+* [json blueprint utilities](json/README.md)
+ * [apiから情報を取得する](json/01_varest.md)
+* [pixel streaming](pixel/README.md)
+ * [基本事項](pixel/01_server.md)
+* [有料アセット](plan/README.md)
+ * [superhero fligth animations](plan/01_flying.md)
+ * [ultra dynamic sky](plan/02_uds.md)
+ * [ocean waves](plan/03_ocean.md)
+* [end](end/README.md)
diff --git a/book/city/01_remove.md b/book/city/01_remove.md
new file mode 100644
index 0000000..ba88473
--- /dev/null
+++ b/book/city/01_remove.md
@@ -0,0 +1,5 @@
+# 海の境界を消す
+
+海には境界があってそれが惑星システム(planet system)を構築する際に邪魔になるので消します。
+
+
diff --git a/book/city/README.md b/book/city/README.md
new file mode 100644
index 0000000..32e8d33
--- /dev/null
+++ b/book/city/README.md
@@ -0,0 +1,4 @@
+# city sample
+
+[city sample](https://www.unrealengine.com/marketplace/ja/product/city-sample)
+
diff --git a/book/cover.jpg b/book/cover.jpg
new file mode 100644
index 0000000..b2e6fa6
Binary files /dev/null and b/book/cover.jpg differ
diff --git a/book/cover_b.jpg b/book/cover_b.jpg
new file mode 100644
index 0000000..7af40c5
Binary files /dev/null and b/book/cover_b.jpg differ
diff --git a/book/crs/01_character.md b/book/crs/01_character.md
new file mode 100644
index 0000000..b44387a
--- /dev/null
+++ b/book/crs/01_character.md
@@ -0,0 +1,21 @@
+# CRでキャラクターを動かす
+
+`control rig`は`CR_xxx`というファイル名がつけられています。
+
+## dragon
+
+例えば、ABPで`head_global_ctrl`の値を更新します。
+
+
+
+## mech
+
+1. `/Content/ControlRig/Characters/Mech/Meshes/SKM_Mech`からABP, BP, SM(StaticMesh)を作成します。
+2. ABPから`Control Rig`で`cannon_ctrl`などを動かせます。
+
+```sh
+- /Content/ControlRig/Characters/Mech/BP_Mech
+- /Content/ControlRig/Characters/Mech/ABP_Mech
+- /Content/ControlRig/Characters/Mech/Meshes/SM_Mech
+```
+
diff --git a/book/crs/README.md b/book/crs/README.md
new file mode 100644
index 0000000..22d4be8
--- /dev/null
+++ b/book/crs/README.md
@@ -0,0 +1,4 @@
+# control rig sample
+
+[control rig sample](https://www.fab.com/ja/listings/2ce3fe44-9ee6-4fa7-99fc-b9424a402386)
+
diff --git a/book/default/00_version.md b/book/default/00_version.md
new file mode 100644
index 0000000..5633d6e
--- /dev/null
+++ b/book/default/00_version.md
@@ -0,0 +1,41 @@
+# version
+
+現在使用しているplugin(プラグイン)やasset(アセット)の`version(バージョン)`を記述します。
+
+ゲームは無料のassetだけでも作れます。しかし、時間やクオリティを向上させたい場合は有料のassetを使いましょう。
+
+本書の一部では有料assetの使い方を解説します。
+
+## asset
+
+|name|latest|body|
+|---|---|---|
+|[game animation sample](https://dev.epicgames.com/documentation/en-us/unreal-engine/game-animation-sample-project-in-unreal-engine)|5.5|キャラクターをパルクールアクション|
+|[city sample](https://www.unrealengine.com/marketplace/ja/product/city-sample)|5.5|大規模な都市を構築|
+|[control rig sample](https://www.fab.com/ja/listings/2ce3fe44-9ee6-4fa7-99fc-b9424a402386)|5.5|人間以外のキャラクター|
+
+## plugin
+
+|name|latest|body|
+|---|---|---|
+|[pixel streaming](https://github.com/EpicGamesExt/PixelStreamingInfrastructure/blob/master/Docs/pixel-streaming-2-migration-guide.md)|2|ゲームをserverにdeployしてwebからプレイ|
+|[twinmotion](https://www.twinmotion.com/ja)|20250101p|建造物をインポート|
+|[vrm4u](https://github.com/ruyo/VRM4U/releases/tag/20250103)|20250103|vrmモデルを動かす|
+|[kawaiiphysics](https://github.com/pafuhana1213/KawaiiPhysics)|20241201|揺れものを設定|
+|[varest](https://github.com/ufna/VaRest)|20240828|curlのようなもの。supportが終了しているのでbuildが必要|
+
+## 有料
+
+|name|latest|
+|---|---|
+|[superhero flight animations](https://www.fab.com/ja/listings/41185c19-5191-4153-8293-8cc9901efa95)|20241217|空を飛ぶ|
+|[ultra dynamic sky](https://docs.google.com/document/d/1xAr0Hd3mY7Mp0g0waKLUvJaddUPaVxEeRoEEFXctCE0/)|20250203|空や天候を自動化|
+|[ocean waves](https://www.unrealengine.com/marketplace/ja/product/ocean-waves)|20241217|惑星の海を作る|
+
+## link
+
+こちらで最新情報を取り扱っています。
+
+- https://git.syui.ai/ai/ue/
+- https://blueprintue.com/profile/ai/
+- https://dev.epicgames.com/community/profile/organization/gdkg/ai/
diff --git a/book/default/01_start.md b/book/default/01_start.md
new file mode 100644
index 0000000..835a448
--- /dev/null
+++ b/book/default/01_start.md
@@ -0,0 +1,58 @@
+# start
+
+## ueとは
+
+`Unreal Engine`は`epic games`という会社が作っているゲームエンジンです。よく`ue`と略されます。
+
+最新バージョン(latest version)は`5`なので、`ue5`となります。
+
+`ue`の他には`unity`, `godto`が有名です。`DirectX`というものがあり、例えば、`DX12`からGPUに命令を送ることができます。ゲームエンジンの多くは`DX11`, `DX12`を使用します。
+
+|name|url|
+|---|---|
+|unreal engine|https://unrealengine.com/|
+|github|https://github.com/EpicGames/UnrealEngine|
+
+ソース(source)からビルド(build)して使うこともできます。一部でbuildしないと使えない機能があります。private repoなので[こちら](https://www.unrealengine.com/ja/ue-on-github)からアクセス権をもらいます。
+
+## ueの特徴と注意
+
+`c++`か`blueprint`で書きます。
+
+ueの特徴はグラフィックが綺麗なことです。と言ってもきれいなグラフィックはunityなどでも実現可能です。しかし、ueは初期設定でもそれが実現できるので、主にグラフィック用途で使用されています。
+
+ueはバグ(bug)が多く基本的に動きません。これはアップデート(update)が速く、3Dを扱うソフトウェア(software)なので仕方ありません。複雑なのです。
+
+ueを長く使っているとわかることですが、ゲーム制作にはあまり向きません。unityのほうがおすすめです。ueはきれいな画像やシーンを作る用途におすすめです。
+
+「ueはバグが多く基本的に壊れている」このことを最初に理解しておかないと「おかしいなあ」と時間を無駄にしてしまいます。また、保存せず長時間コードを書き続けるのは危険です。クラッシュ(crash)すると消えてしまいます。プロジェクト(project)そのものが壊れることもよくあります。注意しましょう。
+
+## 用語の解説
+
+|title|short|body|
+|---|---|---|
+|unrealengine|ue|アンリアルエンジン|
+|version|ver|バージョン|
+|code||コード、プログラミング言語で書かれた文章|
+|build||ビルド、osで実行できる形式にすること。windowsなら`.exe`|
+|compile||コンパイル、コンピュータで実行できる形式にすること。buildと同じ意味で使われる|
+|source|src|ソース、主にソースコードの略|
+|server||サーバー、リクエストに応じるコンピュータ|
+|deploy||serverに実行ファイルを置くこと|
+|example|ex|例、uriではexample.comが有名|
+|install||インストール、アプリをインストールすること|
+|application|app|アプリ、ソフトウェア(software)のこと|
+|library|lib|ライブラリ、softwareを構築するための部品|
+|package|pkg|パッケージ、appだったり、libだったり色々。基本的にpkg managerでinstallできるものを指す|
+|update|up|アップデート、5.5の`x.5`の部分を言う ex: 5.4 -> 5.5|
+|upgrade||アップグレード、5.5の`5.x`の部分を言う ex: 4.0 -> 5.0|
+|asset||アセット、ueでは購入できるlibやexampleを指す|
+|plugin|plug|プラグイン、エンジンに直接入れる追加機能。新たなblueprintなどを使えるようになる|
+|crash||クラッシュ、アプリやosが落ちること|
+|cache||キャッシュ、一時ファイルのこと。tmpなども使われる|
+|repository|repo|リポジトリ、主にsrc codeの一式が置いてある場所|
+|project||プロジェクト、ueでは主に新しいゲームを作った時のフォルダ一式|
+|blueprint|bp|ブループリント、ueのノードベースで書く形式。anim blueprintはabp、character blueprintはcbpと略される事が多く、ファイル名は`BP_XXX`, `ABP_XXX`, `CBP_XXX`となる。基本大文字が使われる|
+|variable|var|変数、一時的な値の保存場所|
+
+基本的に英語で書けるものは英語で書きます。ueのmenuは英語にするのがおすすめです。様々な単語に慣れておきましょう。
diff --git a/book/default/02_install.md b/book/default/02_install.md
new file mode 100644
index 0000000..b82f9ff
--- /dev/null
+++ b/book/default/02_install.md
@@ -0,0 +1,53 @@
+# install
+
+srcからbuildしない場合は`epicgames launcher`からinstallします。
+
+https://www.unrealengine.com/download
+
+また、[vsinstaller](https://visualstudio.microsoft.com/ja/downloads/)を使用して必要なpackageを入れてください。
+
+
+
+[vscode](https://github.com/microsoft/vscode)でbuildするには`.uproject`を右クリックして`.sln`を作ります。
+
+## package build
+
+まずは新しいprojectを作り、package buildできるかを試してみましょう。
+
+ueではbuildが通らないことがよくあります。長い時間をかけて作り上げたもののbuildが通らない事態は避けましょう。
+
+なお、`mac`, `linux`は、ほとんどうまくいきません。package化に成功してもappが正常に起動しないことがあります。使用するpluginやassetなども影響します。
+
+```sh
+# corss compile tool : https://dev.epicgames.com/documentation/ja-jp/unreal-engine/linux-development-requirements-for-unreal-engine
+# ubuntu(xorg + nvidia)
+
+$ sudo apt-get install xorg xvfb
+Xvfb :99 &
+export DISPLAY=:99
+
+$ sudo apt-get install vulkan-tools
+$ sudo apt-get install mesa-vulkan-drivers
+```
+
+## engineとproject
+
+installする場所は自分で決められます。参考の場所を紹介します。
+
+```sh
+# engine
+C:\Program Files\Epic\UE_5.5\Engine\Binaries\Win64\UnrealEditor.exe
+
+# project
+C:\Users\$USER\Documents\Unreal Projects\MyProject\MyProject.uproject
+```
+
+## windows tool
+
+|name|url|
+|---|---|
+|pwsh|https://github.com/PowerShell/PowerShell|
+|windows terminal|https://github.com/microsoft/terminal|
+|openssh|https://github.com/PowerShell/Win32-OpenSSH|
+|vscode|https://github.com/microsoft/vscode|
+
diff --git a/book/default/03_tips.md b/book/default/03_tips.md
new file mode 100644
index 0000000..39d5f7b
--- /dev/null
+++ b/book/default/03_tips.md
@@ -0,0 +1,91 @@
+# tips
+
+この章は読み飛ばしてください。まとめやすいように重要項目を上にしています。
+
+最初はわからないかもしれませんが、最後まで読んでまた来ると、わかるようになっているかもしれません。
+
+## variable(var)
+
+まずは変数の紹介です。変数はローカル変数(local)、グローバル変数(global)があります。最初はprojectで読み込むところに作ります。
+
+1. フォルダの`/Content/Blueprints/`で右クリックして、ブループリントクラス、`GameInstance`を作ります。例えば、`GM_xxx`にします。(名前はなんでもいいです)
+2. `設定 -> プロジェクト設定 -> マップ&モード`の`Game Instance:GameInstance Class`に`GM_xxx`を読み込みます。
+
+なお、名前に`Default`, `Test`, `Config`などを使う場合は予約されていることがあります。注意してください。
+
+これを開いて、変数のところで`UserTest`という名前で`string`型の変数を作ります。コンパイル(compile)してください。デフォルト値は`World`とでも入れておきましょう。
+
+次に、`/Content/Blueprints/CBP_SandboxCharacter`を開いて、EventGraphで右クリックし、`Cast To GM_xxx`を選択します。
+
+インプット(input)のpin(ピン)にあるObjectには`Get Game Instance`をつなぎます。そして、アウトプット(output)の青線は`Get UserTest`と検索し、それを`Print String`につなぎます。
+
+さて、ここにkeyを設定して再生すると`World`と表示されるはずです。
+
+特に重要なのが`変数の型`です。種類もそうですが、変数の型の右側にある色アイコンをクリックしてみると、たくさんの形式があることがわかります。
+
+- 単一
+- 配列
+- 設定
+- マップ
+
+配列を使ってみましょう。`UserTestList`という名前で`string`の配列を作成します。
+
+ここで、デフォルト値に追加できることに気づくはずです。
+
+例えば、単語を3つ追加してみます。
+
+- [0]ai
+- [1]burst
+- [2]can
+
+`Cast To GM_xxx`から`Get UserTestList`を引っ張り出し、`Length`につなげます。それをprintしてみると、`2`と表示されるはずです。
+
+`length(len)`はその配列に追加された数を知ることができます。
+
+では、全部の値を取り出すため`for`を書きましょう。`UserTestList`から`For Each Loop`を伸ばして`Loop Body`からprintにつなぎます。値は`Array Element`から取ります。
+
+もし文字列をつなぎたいなら`Append`が使えます。
+
+変数にはObjectをいれることもできます。たくさんのObjectを入れておき、`Find`で検索して取り出すこともできます。
+
+では、characterを全部まとめて検索できる変数を作ってみます。
+
+名前は`UserCharacterObj`でstringを選択し、マップを選択します。右側のマップは`オブジェクト(object)`と検索し、object参照を選択します。
+
+```sh
+str obj
+--- ---
+```
+
+`cbp character`と検索し、characterのcbpを入れていきます。名前はわかりやすいものにしてください。例えば、`manny`, `quinn`など。
+
+では繋いでいきます。
+
+```sh
+[Get Game Instance] --> [Cast To GM_Defaultconfig] --> [UserCharacterObj]
+
+--> [Find(manny)] --> [Get Object Name] --> [Print String]
+```
+
+
+
+基本的にこれを利用して、他のBPと値をやり取りすることになります。例えば、`ABP_SandboxCharacter`で条件を満たしたとき実行してほしいアニメーション(anim)があったとします。
+
+この場合、まず`GM_xxx`の変数で`UserCharacterAnim`をboolean型で作り、実行してほしいタイミングで`CBP_SandboxCharacter`に書いた`Cast To GM_Defaultconfig`から`UserCharacterAnim`を`true`に変更します。`Set UserCharacterAnim`で検索してください。そして、ABPには`UserCharacterAnim`がtrueならanimを再生する処理を書きます。
+
+## function(func)
+
+次は関数です。関数は簡単で、何度も繰り返す部分を再利用可能な形で残します。それが関数です。
+
+新しい関数を作ってみましょう。左バーの関数(+)を押せば作成されます。名前は`FuncTest`にします。
+
+関数を表す紫色のボックス(box)を選択した状態でinputとoutputの見てもらって、inputにboolという名前でboolean型を作ります。outputにはstrという名前でstring型を作ります。
+
+処理の内容はboolがtrueなら`[yes]`というstringを出力し、falseなら`[no]`にします。
+
+
+
+確認してみましょう。`[9]`を押すと`[yes][no]`が表示されます。
+
+
+
diff --git a/book/default/README.md b/book/default/README.md
new file mode 100644
index 0000000..7cded56
--- /dev/null
+++ b/book/default/README.md
@@ -0,0 +1,24 @@
+# default
+
+## 本書の目的
+
+ue5でゲームを作成するまでの過程をまとめます。
+
+主に`example`形式で記述し、実行するとその通りの結果になることを目指します。
+
+|name|latest|body|
+|---|---|---|
+|[unreal engine](https://dev.epicgames.com/documentation/ja-jp/unreal-engine/unreal-engine-5.5-release-notes)|5.5.2|ゲームエンジン|
+
+## 使用するタグ
+
+タグ(tag)
+
+```html
+# youtube
+## ?start=0&end=10&mute=1&rel=0&showinfo=0&controls=0
+
+
+# blueprint
+
+```
diff --git a/book/end/README.md b/book/end/README.md
new file mode 100644
index 0000000..589a9ef
--- /dev/null
+++ b/book/end/README.md
@@ -0,0 +1,5 @@
+
+
+# Unreal Engine 5 Guide Book
+
+download | web
diff --git a/book/gas/01_character.md b/book/gas/01_character.md
new file mode 100644
index 0000000..1873ee0
--- /dev/null
+++ b/book/gas/01_character.md
@@ -0,0 +1,11 @@
+# キャラクターを追加する
+
+これには`IKリターゲット`が必要です。
+
+1. `Content/Blueprints/CBP_SandboxCharacter_Manny`をcopyして`CBP_SandboxCharacter_test`を作ります。
+2. `CBP_SandboxCharacter_test`を開いて、`Mesh`の下にあるSKM(スケルタルメッシュ)の`Manny`を選択します。その状態で`詳細(details) -> タグ(tags) -> Component Tags`から`index[0]`を`RTG_UEFN_to_UE5_test`に書き換えます。
+3. `Content/Blueprints/RetargetedCharacters/ABP_GenericRetarget`を開き、変数の`IKRetargeter_Map`に新しく`RTG_UEFN_to_UE5_test`を追加し、ファイルは`/Content/Characters/UE5_Mannequins/Rigs/RTG_UEFN_to_UE5_Mannequin`を参照します。
+4. `/Content/Widgets/GameAnimationWidget`を開いて、characterのiconのところをcopyして貼り付けます。そして、詳細からObjectで `Content/Blueprints/CBP_SandboxCharacter_test`を参照します。
+
+これで新しいキャラを使用することが可能になります。
+
diff --git a/book/gas/02_jump.md b/book/gas/02_jump.md
new file mode 100644
index 0000000..5bfea7f
--- /dev/null
+++ b/book/gas/02_jump.md
@@ -0,0 +1,12 @@
+# 飛びつける高さを増やす
+
+1. `Content/Blueprints/CBP_SandboxCharacter`を開いて、関数の`TryTraversalAction`を編集します。
+2. 一番下の`Max:275`を`Max:475`に変更します。
+3. `/Content/Characters/UEFN_Mannequin/Animations/Traversal/CHT_TraversalAnims`を開きます。
+4. `Mantles(編集)`から先程変更した値のところを全部`275 -> 475`に書き換えます。
+
+例えば、levelにあるblockの高さを変更して飛びつけるか確認します。
+
+1. `LevelBlock_TraversableXX`を選択します。
+2. トランスフォーム(transform)の拡大(scale)のところで青色(transform-scale-z)を`4.5`にします。
+
diff --git a/book/gas/03_vrm.md b/book/gas/03_vrm.md
new file mode 100644
index 0000000..7da0ed8
--- /dev/null
+++ b/book/gas/03_vrm.md
@@ -0,0 +1,105 @@
+# キャラクターの見た目を変える
+
+キャラクターの見た目を変えるには`.vrm`を使うと便利です。これは`pixiv`が作っている規格です。
+
+ueで読み込むには`vrm4u`というpluginを使用します。
+
+
+
+## vrm4u
+
+1. [vrm4u](https://github.com/ruyo/VRM4U/releases)をダウンロード(download)して、`$project/Plugins`に入れる。
+> $project/Plugins/VRM4U/VRM4U.uplugin
+2. editorのファイルエクスプローラーで`.vrm`のモデルファイルをD&Dします。色々と聞かれますが適当にokや選択します。配色タイプが聞かれます。例えば、`$project/Content/Characters`に`ai`というフォルダを作り`ai.vrm`をimport(インポート)した場合で解説します。通常は`$model_name`を使用します。
+> $project/Content/Characters/$model
+
+重要なファイルは`$project/Content/Characters/ai/SK_$model`, `ABP_Post_$model`, `RTG_UEFN_$model`になります。なお、`vrm 1.0`を使用します。
+
+https://vrm.dev/vrm1/
+
+## 指の角度を調整する
+
+これは`RTG_UEFN_$model`で調整します。各指にある線を選択して値を変更します。
+
+- `回転アルファ:0.5`
+- `ボールベクターオフセットを維持:false`
+
+## 前髪の角度を調整する
+
+これは`/Content/Character/$model/VM_${model}_VrmMeta`で調整します。具体的には以下のような値にすればいいでしょう。
+
+```json
+[
+ {
+ "bone Name": "J_Sec_Hair1_03",
+ "Hit Radius": 0
+ },
+ {
+ "bone Name": "J_Sec_Hair2_03",
+ "Hit Radius": 0.01
+ },
+ {
+ "bone Name": "J_Sec_Hair3_03",
+ "Hit Radius": 0.01
+ }
+],
+[
+ {
+ "bone Name": "J_Sec_Hair1_04",
+ "Hit Radius": 0
+ },
+ {
+ "bone Name": "J_Sec_Hair2_04",
+ "Hit Radius": 0.01
+ },
+ {
+ "bone Name": "J_Sec_Hair3_04",
+ "Hit Radius": 0.01
+ }
+],
+[
+ {
+ "bone Name": "J_Sec_Hair1_05",
+ "Hit Radius": 0
+ },
+ {
+ "bone Name": "J_Sec_Hair2_05",
+ "Hit Radius": 0.01
+ },
+ {
+ "bone Name": "J_Sec_Hair3_05",
+ "Hit Radius": 0.01
+ }
+]
+```
+
+飛行時に髪が爆散する問題は以下です。
+
+```json
+{
+ "bone Name": "J_Sec_Hair2_03",
+ "Hit Radius": 0.0
+},
+{
+ "bone Name": "J_Sec_Hair1_09",
+ "Hit Radius": 0.01
+},
+{
+ "bone Name": "J_Sec_Hair1_10",
+ "Hit Radius": 0.01
+}
+```
+
+## アウトラインを追加する
+
+アウトライン(outline)
+
+1. `/Content/Blueprints/RetargetedCharacters/CBP_SandboxCharacter_$model`を作成します。前と同じ要領で新しいキャラクターを追加し、GASで使えるようにします。
+2. componentで`BP_VrmOutlineComponent`を追加します。
+
+## 見た目をきれいにする
+
+これには様々なやり方が存在します。調べた限りではちゃんと機能するやり方がわからないように感じます。
+
+私はcomponentの`VrmPoseableMesh`を追加して、そこに配色タイプの`custom`を当てることで調整しています。ベースは配色タイプの`unlit`を使用します。もし`unlit`で`.vrm`をimportしていない場合は再度importしてください。
+
diff --git a/book/gas/04_vmc.md b/book/gas/04_vmc.md
new file mode 100644
index 0000000..96aff11
--- /dev/null
+++ b/book/gas/04_vmc.md
@@ -0,0 +1,60 @@
+# モーションキャプチャで動かす
+
+カメラ(camera)からcharacterを動かす技術をモーションキャプチャ(motion capture)といいます。様々なprotocol(プロトコル)がありますが、`vrm4u`では[vmc](https://qiita.com/mintan/items/72d63cce4e6197b151b7)というprotocolを使います。
+
+`epicgames`は[livelink](https://dev.epicgames.com/documentation/ja-jp/unreal-engine/live-link-in-unreal-engine)というものを作っています。
+
+必要なものは多く、基本的には`web-camera`、`client-app`, `ue-plugin`が必要です。私は以下を使っています。
+
+- camera: ノートパソコンに付属しているwebカメラ
+- client: [webcam motion capture](https://webcammotioncapture.info/)
+- plugin: [vrm4u](https://github.com/ruyo/VRM4U)
+
+clientはそれぞれのosにあったものを選びます。無料でも可能ですが、性能的には有料アプリがおすすめです。いくつか紹介しておきます。
+
+この辺の情報は最初はわからないと思いますが、基本的には以下の流れで情報を処理します。
+
+```sh
+[camera] --> [client] --> [plugin]
+```
+
+## client
+
+|name|body|free|
+|---|---|---|
+|[vmc](https://github.com/sh-akira/VirtualMotionCapture)|vmcの開発元が出しているclient。protocolと同じ名前がつけられている|🟩|
+|[vseeface](https://www.vseeface.icu/)|高性能なclient|🟩|
+|[xr animator](https://booth.pm/ja/items/4513654)|お手軽に表示できるclient|🟩|
+|[waidayo](https://booth.pm/ja/items/1779185)|iosにも対応しているclient|🟩|
+|[vrm posing desktop](https://store.steampowered.com/app/1895630/VRM_Posing_Desktop/)|steamから出ているclient|🟥|
+|[webcam motion capture](https://webcammotioncapture.info/)|安定したclient。使ってみた中では動きが一番良かった|🟥|
+
+## build packageを使うときportに注意
+
+clientから送信されるportをpluginで受信します。build packageの`.exe`で確認するときは、editor(エディタ)を落としておきましょう。
+
+## 停止したときだけvmcを有効にする
+
+
+
+キャラクターがidle状態、つまり、停止しているときだけVMCのモーションキャプチャを反映させます。
+これはVMCモードの変数を用意し、ABPで条件を書いて実現しています。キャラクターを動かしたときは一時的に無効にします。
+
+関数を作り、bool型でグローバル変数で作ります。それをVMCモードの`enable/disable`とします。カメラは正面と通常を切り替えています。
+
+```sh
+/Content/Blueprints/CBP_SandboxCharacter
+```
+
+
+
+移動するときは一時的に無効にします。移動が完了すると有効にします。GASの移動は終了後に少し滑るので`delay`を入れています。
+
+
+
+```sh
+/Content/Chracters/$model/ABP_Pose_$model
+```
+
+
+
diff --git a/book/gas/05_kawaii.md b/book/gas/05_kawaii.md
new file mode 100644
index 0000000..8ac5c68
--- /dev/null
+++ b/book/gas/05_kawaii.md
@@ -0,0 +1,9 @@
+# 揺れものを設定する
+
+[kawaiiphysics](https://github.com/pafuhana1213/kawaiiphysics)
+
+`$project/Plugins/kawaiiPhysics/kawaiiPhysics.uplugin`
+
+1. 基本的には`/Content/Characters/$model/ABP_Pose_$model`に設定します。
+2. 外付けの服などに設定する場合はABPを作成し、そこに設定します。
+
diff --git a/book/gas/06_camera.md b/book/gas/06_camera.md
new file mode 100644
index 0000000..f580dbe
--- /dev/null
+++ b/book/gas/06_camera.md
@@ -0,0 +1,15 @@
+# カメラワークを設定する
+
+スキル発動したときカメラをぐるっと回す演出です。
+正面カメラを設置し、タイムラインで動かしたあとに通常(後方)カメラに切り替えることで実現しています。
+
+
+
+
+```sh
+/Content/Blueprints/CBP_SandboxCharacter
+```
+
+
+
+ボス戦のときだけこの演出を実行します。なお、`true`, `false`はどちらも最終的に`skill`の実行につながるようにしてください。
diff --git a/book/gas/README.md b/book/gas/README.md
new file mode 100644
index 0000000..8363774
--- /dev/null
+++ b/book/gas/README.md
@@ -0,0 +1,63 @@
+# game animation sample
+
+[game aimation sample](https://www.fab.com/ja/listings/880e319a-a59e-4ed2-b268-b32dac7fa016)はepicgamesが提供しているassetです。
+
+[Game] [A]nimation [S]ampleでGASと略すことがあります。
+
+なお、[G]ame [A]birity [S]ystemもGASなので紛らわしいです。
+
+まずはこれを使ってキャラクター(character)を動かしてみましょう。
+
+## level(map)
+
+1. `/Content/Levels/DefaultLevel`を開きます。
+2. 再生ボタンを押します。
+3. ゲームがプレイできます。
+
+|key|en|ja|
+|---|---|---|
+|w,a,s,d|move|移動|
+|space|jump|ジャンプ|
+|space|sprint|ダッシュ|
+|ctrl|walk|歩く|
+|c|crouch|しゃがむ|
+|マウススクロール|camera|カメラ|
+
+ボタンに乗るとキャラを切り替えることができます。
+
+レベル(level)はマップ(map)とも呼ばれます。プレイ(play)する場所を作ります。
+
+特にボタンが重要です。tipsを確認しましょう。
+
+- https://www.youtube.com/watch?v=IqHrhcA7Rsk
+
+`/Content/Levels/DefaultLevel`を右クリックして`参照ビューア`を選択してみます。どのファイルを参照しているかわかります。
+
+## BP
+
+characterは`/Content/Blueprints/CBP_SandboxCharacter`で動かしています。このファイルを開いて編集してみましょう。
+
+1. `EventGraph`というノードが記述されている場所(画面中央)で右クリックし、`Debug Key 1`を追加します。
+2. Releasedというピン(pin)から`Print String`を追加します。
+3. ゲームを再生します。
+4. キーボード(keyboard)の`[1]`を押すと、画面に`Hello`が表示されます。
+
+これがbp(blueprint)でゲームを作る要領になります。
+
+## ABP
+
+characterの動きは`/Content/Blueprints/ABP_SandboxCharacter`で設定されています。
+
+## input
+
+まずkeyがどこで設定されているのかと言うと、`/Content/Input/IMC_Sandbox`で設定されています。
+
+例えば、`/Content/Input/IA_Aim`をコピー(copy)して、新しく`IA_One`を作ってみましょう。それを`IMC_Sandbox`で読み込んで`[1]`に割り当てます。
+
+次に、`IA_One`を先程の`CBP_SandboxCharacter`にドラッグ&ドロップ(D&D)します。
+
+すると`EnhancedInputAction IA_One`という赤いノードが作成されたと思います。`Debug Key 1`を削除して代わりにつなぎます。色にも意味がありますが、そのうちわかってくると思います。
+
+ゲームを再生してみると先ほどと同じkeyで動きます。
+
+
diff --git a/book/gitbook.md b/book/gitbook.md
new file mode 100644
index 0000000..2a3bc55
--- /dev/null
+++ b/book/gitbook.md
@@ -0,0 +1,10 @@
+## start gitbook(honkit)
+
+```sh
+$ nvm use 23
+$ npm install honkit --save-dev
+$ npx honkit init
+$ npx honkit serve
+$ npx honkit build
+```
+
diff --git a/book/img/0001.png b/book/img/0001.png
new file mode 100644
index 0000000..8d05700
Binary files /dev/null and b/book/img/0001.png differ
diff --git a/book/json/01_varest.md b/book/json/01_varest.md
new file mode 100644
index 0000000..655e2b9
--- /dev/null
+++ b/book/json/01_varest.md
@@ -0,0 +1,5 @@
+# apiから情報を取得する
+
+[varest](https://github.com/ufna/VaRest)などのpluginを使うと便利です。しかし、supportが終了しているため独自にbuildする必要があります。あるいは有料のものを購入するのもいいでしょう。
+
+
diff --git a/book/json/README.md b/book/json/README.md
new file mode 100644
index 0000000..942b924
--- /dev/null
+++ b/book/json/README.md
@@ -0,0 +1,3 @@
+# json blueprint utilities
+
+`json`を扱う。
diff --git a/book/package.json b/book/package.json
new file mode 100644
index 0000000..228e0c7
--- /dev/null
+++ b/book/package.json
@@ -0,0 +1,8 @@
+{
+ "dependencies": {
+ "got": "^14.4.5"
+ },
+ "devDependencies": {
+ "honkit": "^6.0.2"
+ }
+}
diff --git a/book/pixel/01_server.md b/book/pixel/01_server.md
new file mode 100644
index 0000000..5e580ba
--- /dev/null
+++ b/book/pixel/01_server.md
@@ -0,0 +1,4 @@
+# 基本事項
+
+pcのdisplay(ディスプレイ)が必要になる。画面の電源もつけておく必要があります。
+
diff --git a/book/pixel/README.md b/book/pixel/README.md
new file mode 100644
index 0000000..189b212
--- /dev/null
+++ b/book/pixel/README.md
@@ -0,0 +1,32 @@
+# pixel streaming
+
+`pixel streaming`は`.exe`をサーバー(server)に置いてwebからプレイするためのものです。
+
+[pixel streaming 2](https://github.com/EpicGamesExt/PixelStreamingInfrastructure/)が最新です。[ガイド](https://github.com/EpicGamesExt/PixelStreamingInfrastructure/blob/master/Docs/pixel-streaming-2-migration-guide.md)に従い構築しましょう。
+
+1. projectのpluginで`pixel streaming`をdisableにし、`pixel streaming 2`をenableにする。
+2. これをpackage buildして、app.exeを作ります。引数は以下のようにしてください。
+
+なお、sshなどで作業している場合はfirewallの許可が出ませんので、local-desktopで作業してください。または手動でruleを更新してください。
+
+```sh
+./$project/Windows/app.exe -AudioMixer -RenderOffScreen -PixelStreamingSignallingURL="ws://127.0.0.1:8888"
+```
+
+次にserverの設定です。
+
+```sh
+# git clone https://github.com/EpicGamesExt/PixelStreamingInfrastructure.git
+$ git clone --branch UE5.5 https://github.com/EpicGamesExt/PixelStreamingInfrastructure.git
+$ cd PixelStreamingInfrastructure/SignallingWebServer/platform_scripts/cmd
+$ ./setup.bat
+$ ./start.bat
+```
+
+`PixelStreamingInfrastructure/SignallingWebServer/config.json`の書き換えと起動。特に注意すべきは`http_root`です。Publicからwwwに変更されています。path(パス)にも注意してください。
+
+```sh
+$ cd PixelStreamingInfrastructure/SignallingWebServer
+$ vim config.json
+$ npm start -- --public_ip localhost
+```
diff --git a/book/plan/01_flying.md b/book/plan/01_flying.md
new file mode 100644
index 0000000..99a4770
--- /dev/null
+++ b/book/plan/01_flying.md
@@ -0,0 +1,3 @@
+# superhero flight animations
+
+[superhero flight animations](https://www.fab.com/ja/listings/41185c19-5191-4153-8293-8cc9901efa95)
diff --git a/book/plan/02_uds.md b/book/plan/02_uds.md
new file mode 100644
index 0000000..e0fd748
--- /dev/null
+++ b/book/plan/02_uds.md
@@ -0,0 +1,7 @@
+# ultra dynamic sky
+
+[ultra dynamic sky](https://docs.google.com/document/d/1xAr0Hd3mY7Mp0g0waKLUvJaddUPaVxEeRoEEFXctCE0/)
+
+blueprintなどでも`uds`と略されます。
+
+
diff --git a/book/plan/03_ocean.md b/book/plan/03_ocean.md
new file mode 100644
index 0000000..6bf7fe5
--- /dev/null
+++ b/book/plan/03_ocean.md
@@ -0,0 +1,3 @@
+# ocean waves
+
+[ocean waves](https://www.unrealengine.com/marketplace/ja/product/ocean-waves)
diff --git a/book/plan/README.md b/book/plan/README.md
new file mode 100644
index 0000000..fdc0a13
--- /dev/null
+++ b/book/plan/README.md
@@ -0,0 +1,9 @@
+# 有料アセット
+
+|name|latest|
+|---|---|
+|[superhero flight animations](https://www.fab.com/ja/listings/41185c19-5191-4153-8293-8cc9901efa95)|20241217|空を飛ぶ|
+|[ultra dynamic sky](https://docs.google.com/document/d/1xAr0Hd3mY7Mp0g0waKLUvJaddUPaVxEeRoEEFXctCE0/)|20250203|空や天候を自動化|
+|[ocean waves](https://www.unrealengine.com/marketplace/ja/product/ocean-waves)|20241217|惑星の海を作る|
+
+