「ドキュメンテーションの集い@大阪 第2回」でUE4スタイルガイド翻訳について発表してきた

 今回の集いのお題が「翻訳」で、手持ちにスタイルガイド翻訳の題材があったので 15分程度のLTで軽く話してきた。

doc-meeting-jp.connpass.com

以下、集いまとめ。

最初

  • 翻訳の品質について
  • 業務としての翻訳ワークフローなど
    • 非ネイティブの書いた曖昧な英語を、想像で日本語に(お客さんの了承とって
    • 翻訳以外も色々(通訳、デザイン中の英語の翻訳(ツールつかって
  • 機械(google)翻訳肯定派の勢力もあるとの事
    • 機械翻訳は、ありえないミスすることもあるので間違い探しだよね的な
      • 意味的に逆になったり

  • 2017年に使った時よりgoogle翻訳良くはなってる
    • 昔blueprintを青写真って訳してたけど、今はカタカナのブループリントに
    • でも変な誤訳は普通に残ってる(否定する箇所が前後逆で、真逆の意味になってるなど

  • vscode良いよね
    • textlint良さそう

以下、発表資料。

続きを読む

モニターヘッドホン

すぐさま買うとかではないが、 YAMAHA スタジオモニターヘッドホン HPH-MT8が良いモノらしい*1

で、残念ながらスピーカー無しのモニタ買って、すぐさま必要だったけど HPH-MT8に2万円をポンとだす余裕なかったので、5千円代で評判は良かった*2audio-technica モニターヘッドホン ATH-M20xを買ってみたぞいw−

 一先ず最初は長時間付けてたら耳が圧迫で痛くなったけど、馴染んできたのか今は気にならない。
ゲームやるとまあいい感じには聞こえてますけど、これは普通なのか良いのかは、よく分からんw−。

*1:ん、お仕事で使うなら高くはない値段だけどサウンドの人でないので高く見えてしまう><

*2:Amazonの書き込みがどの程度信用できるか微妙なんですけど

「バイキング流UEの使い方 僕のヒーローアカデミア One's Justice 制作事例」適当メモ

 適当メモなので正確性*1は保証しません^^;
あと発表ペースが速かったので、後半メモが力尽きました

# 10:00- 星と翼のパラドクス

登壇者紹介

  橘川 優樹 P
  奥井 健   IyasiP

来月11/21稼働

2レバー2ペダル、専用巨体
8人チーム16人対戦

開発   :30カ月
UE4Ver : 4.9.l1-4.16.3

???VRではないのか

低速移動は、移動方向と椅子の動作は同じ(振り回されている感じが出ないように、わざと
高速移動時のみ、逆方向に動く(Gを体感出来るように

** ue4を用いたキャラクター制作

AActor <- APawn <- **ACharacter**


** マルチプレイで問題




# 11.10- バイキング流「ヒロアカOJ」制作事例

登壇者紹介

  稲田 義信 PL
  瀬田 掃除 PGreat 背景、アニメーション、サウンド

アンリアルエンジン3タイトル目(マジシャン、パラドクス、僕アカで3つ?


製作期間: 14カ月
UE4Ver  : 4.15-4.18.3


PS4,NW(,XboxOne,Steam海外のみ)


販売ナムコ、開発バイキング


- TOC
  - キャラクタシステム
  - 背景の破壊と表示
  - アセットローカライゼイション

## キャラクタシステム

ゲームエンジンアーキテクチャを読んでも1Pでさっと流してる
情報が少ないので(15年作っているが分からんなんも)発表してみる

20体以上
量産出来るように多くを共通化
BPに変わるスクリプトシステム導入
即座に反映できるパラメータ設定機能の作成


キャラクタの個性(専用処理)


## キャラクタ、アクション、ステートマシン

1.通常アクション 待機、移動、ジャンプ、ガード、
2.攻撃アクション 敵にダメージ
3.ダメージアクション


上記3種類のカテゴリを遷移するステートマシンとして実装

  **特にダメージは重要**

  目的:相手を倒す
  方法:攻撃
  結果:ダメージ

  (ダメージは)正解に対するご褒美
  が、対戦ではジレンマ。
  対戦相手にとっては(ダメージは)褒美でなく罰なので
  拘束時間を納得してもらう必要。そのためにダメージアニメーションが重要に


 デクのダメージモーション
   攻撃を受ける、のけ反る、踏ん張る、体制を戻す、待機
                          ↑ここだとテンポ悪い
                                        ↑ので、ここで操作を受け付ける
              <-  スロー可能区間  ->

     アニメーションはそのままで、ダメージの拘束時間を調整
       スロー可能区間、AnimNotifyなどでStart<->End


UObject(UE) <- UActionBase <- UActionBattleBase 
                                                 <- ???UActionControlComponent???
                                                 <-
                                                 <-

## アクション、2つのコンポ―ネットに分離

分割理由、戦闘以外でも、アクションしたいので


 UActionControlComponent(これを差し替えると)
プレイヤーの入力、キャラクターの状態に応じて

  UActionDriveComponent
   キャラクタを実際に動かすため


## アクションの実装

C++
  良い
    デバッグしやすい、早い
  悪い
  コンパイル遅い


 スクリプトはLuaを使用

 テキストベースの言語が欲しい(去年のスクエニ、紙山さんも欲しいと言ってた

C++ 30%
 固定処理、まとまった機能
スクリプト70%
  処理フロー、パラメータ設定、アニメーション設定


共通処理とキャラクター専用処理
 1、通常、ほとんど共通(3キャラ、3アクションのみ専用アクション)
 2、攻撃、専用アクション
 3、ダメージ、共通

パラメータはJson形式
 問題:(プログラマ以外が弄るには)フォーマット厳しい

  通常パラメータはプランナーが弄るので、尾畑さん用Excelツールを作成

   Json -> Excel edit -> save -> Json


  リアルタイム


ActionParam.json
  移動、旋回性能
AttackParam.json
  
Damege.json


## 壁バトル

 壁と

UCharacterMovementComponentは使わず、UpawnMovementComponentを継承した独自クラスを使用

 −>
 −>(独自クラスのため)ACharacterも必然的に使用できない

垂直方向制御

・保管なしに、バシッと壁垂直に切り替える

最後にまとめ。

自由に使えるUE凄い(褒め
Epicさんの公式テキストスクリプト欲しいよ(願い


## 背景の破壊と表示

目標:
 派手に壊れる背景
 それでもゲームとして戦える


ロジックはC++,設定はBP(検証はBPがやっぱり早い)
 
A. 尾畑さん「背景は派手に壊して、でも処理は軽めで」

背景オブジェクト種類
 壊れるオブジェクト
  3種類
   物理モデル
   
 壊れないオブジェクト

物理モデル(DestructibleMesh
 長所
  簡単、リッチな表現
 短所
  重い、4.8.1でプラグインに(そのままフェードアウトする?

アニメーションモデル
 長所
  処理負荷低い(物理に比べて)
  Mayaの物理シミュを利用
 短所
  バリエーションが少なくメモリを圧迫

エフェクトモデル
 長所
  UE4のカスケードで作成
  ランダム性あり
 短所
  物理モデルに比べると単調
  破壊前の形状と会わない


Q. 破壊されるタイミング
A. 尾畑「キャラクタに振れれば破壊でいいのでは」

 破壊前(StaticMesh
 破壊時(3タイプ組み合わせ
  キャラクタの速度と衝撃度をかけた値と、ぶつかった位置

 破壊後(StaticMesh

尾畑「大きなオブジェクトが振れただけで壊れるのはおかしいのでは?」

 すぐこわれないオブジェクトも用意


地面や壁も派手に壊したい
 とりあえず、地面に壊れるパーツを敷き詰める
  処理負荷高い
   壁バトル(壁も壊す必要が

同じオブジェクトを一杯
 InstancedStaticMeshComponent使う

      Game   Draw    GPU
SM    40.5   188.3   93.0
ISM   15.1   3.5     21.1
HISM  14.0   ?       ?

ISM はLODできない
 HirerarchicalInstancedStaticMeshComponentを使う


TODO



破壊後の表示

  HISMを二重化

ゲームを遊んでみると

 尾畑「一回しか破壊出来ないのは物足りない」
  破壊後は変わらないけど、破壊エフェクトは何回でも発生



破壊時のエフェクト
  
  大きなものは複数個所設定したい(StaticMeshにSocketを追加



壁バトルについて

 キャラクタが壁バトル中であることを表現したい
  窓ガラス
    キャラクタが歩くだけで破壊
      窓ガラスが落ちる方向で、重力方向が分かる



背景オブジェクトについて
 ゲームの邪魔にならない用に
  カメラ位置は、1P2Pのキャラクタ位置より


  キャラクタに被ると半透明処理(半透明用のStaticMeshと切り替える
  
 遮蔽チェック
  複数判定の可能性
   LineTrace -> SphereTrace


  影が消える

*** このへんでメモの限界w=。

P.S.
メモが力尽きた以降は、以下togetter辺り等を参考に
https://togetter.com/li/1276894?page=8

エリアチェック

 ステージは

  デバッグはFreezeRendaring便利




アセットローカライゼイション

 ???なんか気付いてたら終わってたw=)

*1:誤字脱字は気にするな^^;

開発ボードメモ

 利用用途の検討チラシ裏w−


CoretexA系 ARMv7/v8

  1. PINE A64 CA53x4 Mem2GB
    1. OS : ubuntu
    2. todo : WebApp (golang / OCaml / Rust)
  2. NanoPi 2 Neo CA53x4 Mem0.5GB
    1. OS : Armbian
    2. todo : ArmbianBuild*1 / lxc
  3. RasberryPi 2 CA7x4 Mem1GB
    1. OS : rasbian
    2. todo : GPGPU
  4. ZYBO Z7(Zynq-7010) CA9x2 Mem1GB
    1. OS :
    2. todo : Vivado / FPGA

マイコン

  1. DE0-Nano
    1. todo : RISC-V(FPGA)
  2. Aurduino
    1. todo : ?
  3. STM32F4
    1. todo : Thumb2
  4. STM32F0
    1. todo :

*1:NFSboot

ユーザランドからのUARTの高速化について

 メモ書きです。


 ユーザランドから/proc/ttySxなどのシリアル(UART等)通信においてread/writeを早める方法について


 デバイスは200Hz程度での動作保証なのに、linuxユーザランドから/dev/ttyS0で高頻度でreadするベンチを作ってみたら、
毎秒50Hz程度しか呼べなかったので高速化してみた。

P.S
ドライバで割り込みなど用いればスマートに解決するかもしれませんがw−。

スループットを上げる

 UARTで通信のデータ量が欲しくて、デバイス間で対応しているbundrateを挙げれるならbundrateを上げれる


 ただbundrateを上げると通信経路(接続しているワイヤー)などがシビアになって通信できなくなる可能性もあります。
ご利用は計画的にw−

今回は通信データ量が少ないので、bundrateを変更しても変化しなかったです。

レスポンス応答を早める

 こちはらデータ量は少ないが、毎秒の呼び出し回数を多くしたい(100Hz-1000Hz)場合に有用です*1


方法としてはカーネルの再ビルドが必要ですが、CONFIG_HZが100/250Hzなどだった場合に、1000Hzに上げてカーネルを置き換える

CONFIG_HZ=1000に変更して、毎秒200Hz以上に改善しました。よかったよかったw<

P.S.
 kernelのタイマ割り込み頻度を上げるので、もちろんいろいろ影響する可能性はあります。
すぐさま影響しそうなのは消費電力とか上がりそう。

UARTのみでなく、他の通信(I2C/SPI等)も改善する可能性があります。

  1. 参考
    1. "RasberryPi / Fourms / Change kernel frequency CONFIG_HZ"
    2. http://d.hatena.ne.jp/embedded/20151024/p2

*1:今回のケースですねw−