hyousi

  • Home
  • 一覧
  • 雑記
  • 通常時視野角からADS視野角を求める FPSとFOV③

    視野角の変換式でアスペクト比の比率を用いましたが今回はモニターディスタンスを係数として利用することにします。また画面上のズーム倍率で視野角を変換し腰だめ視野角からADS視野角を求めます。

    前の記事:FPSとFOV② 異なるアスペクト比に視野角を変換

    タンジェントで整理する

    $$
    \mbox{[出力fov]}=atan\left(
    \frac{\mbox{[変換先アス比]}}{\mbox{[変換元アス比]}}
    tan\left( \mbox{ [入力fov]}\frac{\pi}{360}\right)
    \right)
    \frac{360}{\pi}
    $$

    アスペクト比による視野角の変換式はタンジェントで表された式でした。

    では上記前回のイメージ図もタンジェントで整理し直します。

    上図では半径を1として書き込みましたが今回は1/cosθとして書き込んでみます。

    右の三角形についてa、b、cを求めます。

    $$
    a =\frac{1 }{ cosθ}
    $$
    $$
    cosθ = \frac{b }{ a} = \frac{b }{ \left(\frac{1 }{ cosθ}\right)}
    \\b = 1
    $$
    $$
    sinθ = \frac{c }{ a} = \frac{c }{ \left( \frac{1 }{ cosθ }\right)}
    \\c = tanθ
    $$

    左の三角形についてa、b、cを求めます。

    $$b = 1$$
    $$cosφ = \frac{b }{ a} = \frac{1 }{ a}
    \\a = \frac{1 }{cosφ}$$
    $$tanφ = \frac{c }{ b} = \frac{c }{ 1}
    \\c = tanφ$$

    求めた数値を書き込んでみます。

    画面(弦)の部分をタンジェントで表すことで見やすくなりました。

    モニターディスタンスの導入

    $$\frac{\mbox{[変換先アス比]} }{\mbox{ [変換元アス比]}}$$

    アス比による視野角変換式中のこの部分を書きかえます。

    16:9→4:3の変換で係数は3/4=0.75でした。これは水平方向に4:3画面が16:9画面の75%の長さであるということです。

    つまりアスペクト比の比は変換前後で画面上の長さの何%であるかということを表していることがわかります。これは画面上の距離ですからモニターディスタンスです。

    この画面中央から端まで、変換前後で何パーセントかというのがモニターディスタンスでありMD〇%と表します。

    腰だめ時を変換前、ADS時を変換後とすると画面上で何%の位置までズームするかを考えることでADS時の視野角を求められそうです。

    では係数をMDに置き換え前回同様に変換式を求めてみます。

    この時の満たすべき条件は、画面の長さ割合をMDとして

    $$ \mbox{ [ADS時画面比]} = \mbox{ MD}* \mbox{ [hipfire時画面]}
    \\ex) \mbox{ [4:3画面長さ]} = 0.75 * \mbox{ [16:9画面長さ]}$$

    となればよいです。画面長さ( c )は先程求めましたね。代入します

    $$[ADS時画面比] = \mbox{ MD} * \mbox{ [hipfire時画面]}
     \\tanφ = \mbox{ MD} * tanθ
     \\ φ = atan( \mbox{ MD} * tanθ )$$

    radをdegに直します

    $$ \mbox{ [ADSfov]} \frac{\pi }{ 360} = atan \left[ \mbox{ MD} * tan \left( \mbox{ [hipfire fov]} \frac{ \pi }{360} \right)\right]
    \\
    \mbox{ [ADSfov]} = atan\left[ \mbox{ MD} * tan\left( \mbox{ [hipfire fov]} \frac{ \pi}{ 360} \right) \right]\frac{360}{\pi}$$

    腰だめ視野角と、ADS時に画面の何%までズームするかわかればADSfovが求められることがわかりました。

    ADS視野角を求めてみる

    スクショを取ってADS視野角を求めてみます。スクショを取ると横1920ドットですね。画面半分だと960ドットになります。

    ズーム時の画面割合がMDなので

    $$MD=\frac{\mbox{960-[ズーム分]}}{960}$$

    となります。先ほどの式のMDに代入します。

    $$ \mbox{ [ADSfov]} = atan\left[ \frac{ \mbox{960 – [ズーム分]} }{ 960 } tan\left( \mbox{[hipfire fov]} \frac{ \pi}{ 360} \right) \right] \frac{360}{\pi}$$

    ただこの計算式では画面中央から端までの比ですから、すべて16:9HFOVでしか求められませんので主流である4:3fovにはその都度変換し直さなくてはなりません。

    スクショからADS視野角を求めてみました↓

    [計算機]スクショからADS視野角を計算する-Screenshot ADS FOV Calculator

    まとめ

    視野角はタンジェントで考えられることがわかりました。またモニターディスタンスを考えることで画面上の長さと視野角を結びつけることができました。

    次の記事:FPSとFOV④ モニターディスタンスで感度を変換する

  • 異なるアスペクト比に視野角を変換 FPSとFOV②

    視野角はFOVタイプによって数値が変わるためアスペクト比に応じて変換する必要があります。大体CS:GOは1:1fov74、4:3fov90、16:9fov106ということは有名ですが、どうやって相互に変換しているのかという話です。

    前の記事:FPSとFOV① 視野角の種類とイメージ

    三角関数について

     角度θ、辺a、b、cを持つ図のような直角三角形についてサインコサインタンジェントはこの式のように表せます。

    16:9FOVから4:3FOVへの変換を考える

      θ の部分が16:9モニターの右半分で見えている範囲で、φの部分が4:3モニターの左半分で見えている範囲です。

    画面上で縦の視野角を合わせると4:3fovは16:9fovの75%の横幅を持ちます。

    $$\frac{ 4 }{ 3 } ÷ \frac{ 16 }{ 9 } = \frac{ 12 }{ 9 } ÷ \frac{16 }{ 9 } = \frac{1.33 }{ 1.77} = \frac{3 }{ 4 }= 0.75$$

    2つの画面長さ(↔の部分)がこの75%の幅を持つという条件を満たせばよいわけです。

    また16:9fovを4:3fovに変換し角度を求めるわけですからφをθの関数で表したい。

    まず右の黒い三角形16:9fovについて考えます。半径は特に意味もないので1とします。

    三角関数からそれぞれの辺の長さが求まりますね。

    $$a=1
    \\cosθ = \frac{b }{ a }= b
    \\sinθ = \frac{c }{ a} = c$$

     

    次に左のオレンジの三角形の辺の長さを求めます。

    $$b = cosθ$$
    $$cosφ = \frac{b }{ a} = \frac{cosθ }{ a}
    \\a = \frac{cosθ }{ cosφ}$$
    $$tanφ =\frac{ c }{ b }= \frac{c }{ cosθ}
    \\c = cosθ tanφ$$

    「4:3fovは16:9fovの75%の横幅を持つ」という条件を二つの三角形の c について満たせばよいですね。

    また、求めたいのはφですからφについてまとめます。

    $$1 : 0.75 = sinθ : (cosθ tanφ)
    \\0.75 sinθ = cosθ tanφ
    \\tanφ = 0.75 \frac{sinθ }{ cosθ} = 0.75 tanθ
    \\φ = atan( 0.75 tanθ ) = atan\left( \frac{3 }{ 4}tanθ \right)
    $$

    求めることができました。

    θとφではわかりづらいです。三角形を作り画面の半分の角度を用いて計算したので2倍すれば視野角になります。また[rad]だとわかりづらいので[deg]に直します。

    $$2θ[rad] = \mbox{16:9fov[rad]} =\mbox{ (16:9fov[deg])} \frac{\pi}{180}
    \\θ = \mbox{[16:9fov]} \frac{\pi}{360}$$
    $$φ = \mbox{[4:3fov]} \frac{\pi}{360}$$

    θとφに代入し4:3fovについて解きます。

    $$\mbox{[4:3fov]}\frac{\pi}{360} =atan\left[ \frac{3 }{ 4} tan\left(\mbox{[16:9fov]} \frac{\pi}{360}\right) \right]
    \\\mbox{[4:3fov]} = atan\left[ \frac{3 }{ 4} tan\left(\mbox{[16:9fov]} \frac{\pi}{360}\right) \right]\frac{360}{\pi}$$

    16:9fovから4:3fov を求める式ができました。

    アスペクト比に応じて視野角を変換

    ここで式中の3/4に注目します。3/4はどこから出てきた数字でしょうか。

    $$\frac{ 4 }{ 3 } ÷ \frac{ 16 }{ 9 }= \frac{3 }{ 4 }$$

    この条件式でした。こう書き直すことで一般化できそうです。

    $$\frac{3 }{ 4}= \frac{4 }{ 3} ÷ \frac{16 }{ 9} → \frac{\mbox{[変換先アス比]}}{\mbox{[変換元アス比]}}$$
    $$\mbox{[出力fov]} = atan\left[ \frac{\mbox{[変換先アス比]} }{\mbox{ [変換元アス比]}} tan\left(\mbox{[入力fov]} \frac{\pi}{360}\right) \right]\frac{360}{\pi}$$

    一般化できました。サインコサインタンジェントを図に書き込んでいくだけなので簡単です。

     

    計算フォーム:[計算機]異なるアスペクト比に視野角を変換 Aspect-ratio FOV Calculator

    次の記事:FPSとFOV③ 通常時視野角からADS視野角を求める

  • FPSの視野角と感度① 視野角とアスペクト比

    FPSの視野角と感度の関係は自分に合った設定を考える上で重要です。

    一度理解してしまえば単純なことですが、知ろうとする人自体が少なく、理解している人がとても少ないので解説します。

    できるだけかなり嚙み砕いて記述しましたのでそんな当たり前のことを、という部分はどんどん飛ばしていってください。

    はじめに

    じゃあこの記事を追えば強い設定が知れるかというとそうではありません。

    強い設定とは、いろいろな値をそれぞれの組み合わせで全て試行していき経験的に一番パフォーマンスが出た設定であると考えます。

    そのため直接強さに関わるとは思えませんが、ここら辺を理解している人と理解していない人とではFPSゲームに対する理解度が全く異なります。それはSNSなどで設定に詳しい人が重宝されていることから明らかです。

    これらは知らなくてもいい事、ではなくFPSをプレイするうえで最低限知っている必要がある事だと私は思っています。

    仕組みを何も知らなければ、APEXの視野角を103に設定してVALORANTと揃えたとかいう素っ頓狂なことを平気で言ってしまうわけです。(嘘だと思う方もいると思いますがこのラインの方が実際多数派のようです。)

    この記事は視野角と感度について、ゲーム内部でどのように計算されているのかという設定を行う上で最低限必要な知識を身に着けること、またその感覚を得ることが目的となっています。

    具体的には視野角の変換と導出、ADS感度の計算方法と変換までを行います。

    実際のゲーム間での視野角計算方法の差異

    私にも混同していた時期がありました。fov90が一般的らしいぞということでBFをHor90に設定し、R6Sもfov90に設定し揃えたぞと思っていた時期が。しかしそれは誤りです。

    CS:GOがfov90というのは有名です。ではR6Sのfov90、APEXのfov90、BFのHor90、OW90はどれも90ですが同じ視野角でしょうか?同じではありません。

    実際どう違うのかというと

    • R6Sfov90 → CS:GOfov106.26
    • APEXfov90 → CS:GOfov89.25
    • BF Hor90 → CS:GOfov90.27
    • OW90 → CS:GOfov73.74

    となっておりそれぞれ同じfov90であるにもかかわらず異なっていることがわかります。

    これらの差異はアスペクト比というゲーム内FOVタイプが異なるによって引き起こされています。

    アスペクト比とは

    アスペクト比とは長方形における長辺と短辺の比率のことです。

    ディスプレイは横長な状態で使用されるのが普通だと思いますので、FPSにおいては横と縦の画面比と言い換えることができます。

    通常のPCモニターはアスペクト比 16:9 です。

    これを比率としてあらわすと 16÷9 で 1.77… となります。

    実際に計算を行う上では何対何ではなく、このアスペクト比率 長辺÷短辺 の値を使用します。

    • 16:9→1.77…
    • 4:3→1.33…

    といった具合です。

    一般的なPCディスプレイが16:9 であることはフルHDディスプレイの解像度が 1920×1080、つまり 1920÷1080=16÷9 であることから分かります。

    アスペクト比と画面

    ディスプレイが 16:9 なのだから使用されるアスペクト比は16:9しかないのではないかというとそうではありません。

    ゲーム内設定でアスペクト比を変更することができます。

    16:10, 3:2, 4:3, 5:4 等を選択することができます。

    CS:GOを例に16:9と4:3を見てみます。

    16:9
    4:3黒帯(Black Bar)

    このように複数のアスペクト比を使用することができます。

    そして上記画像を比較してみると16:9では壁が見えていますが、4:3では壁までの範囲しか見えていません。横方向の見えている範囲、つまり描画されている水平視野角(Horizontal FOV)が異なっていることがわかります。

    一方で床から空の縦方向に見えている範囲、つまり垂直視野角(Vertical FOV)は等しいです。

    このようにアスペクト比が変わるとFOV設定はそのままなのに見えている範囲、視野角が変わることがわかります。

    またこの4:3画面を横に引き伸ばし黒帯をなくすことで4:3画面を16:9スケールの引き延ばしでプレイすることも可能です。視野角を考える際には引き延ばしについても考慮する必要があります。

    引き延ばすことによって水平方向画面上では4:3の画面範囲がそのまま16:9のアスペクト比に拡大され変更されます。

    アスペクト比と視野角の種類(FOVタイプ)

    CS:GOでは、アスペクト比が変わると画面左端から右端の描画範囲、水平視野角HFOVが異なっていることが分かりました。

    ではアスペクト比ごとに実際に視野角がいくつであるのかを見ていきます。

    注目するアスペクト比は

    • 16:9
    • 4:3
    • 1:1

    の3種類です。基本的にゲームの視野角の計算方法はこの3つのどれかに当てはまるためです。

    視野角が広い外側から 16:9(ピンク線) 、4:3(青線)、1:1(赤線)のアスペクト比における画面外枠となっています。

    CS:GOは一般にアスペクト比 4:3 画面(青線)の時視野角が90度であることが知られています。(このことは振り向き分と画面端までのマウスの移動量を測ることなどして簡単に検証することができます。)

    それではアスペクト比ごとの水平視野角HFOVを示してみます。(計算方法は先の記事で解説します)

    • 16:9 →106.26度
    • 4:3 →90度
    • 1:1 →73.74度

    CS:GOはこの3つのアスペクト比の画面においてこのような水平視野角が描画されています。

    また 1:1 のアスペクト比というのは横と縦が同じであるということなので垂直視野角もこの 73.74度であるということです。

    よって特別なことがない限り垂直視野角 VFOVは1:1HFOVと一致します。

    よってなぜ代表アスペクト比がこの3種類なのかというと

    • 16:9→現在のディスプレイのアスペクト比
    • 4:3→昔のディスプレイのアスペクト比
    • 1:1→ディスプレイの縦方向を基準とする場合

    ということです。

    ここまでで画面アスペクト比が変わると視野角も変わることが分かりました。

    しかしアスペクト比 16:9 の画面のCS:GOの視野角の値 90度 がアスペクト比 4:3 に対応していることはややこしいです。

    そこでアスペクト比を置き換えて、FOVタイプ を用いて表されます。つまりCS:GOにおいて

    • 16:9FOV=106.26deg
    • 4:3FOV=90deg
    • 1:1FOV=73.74deg

    このときCS:GOはFOVタイプ4:3における90度と言います。

    また、ややこしいのですがCS:GOでアスペクト比4:3黒帯画面を16:9に引き伸ばすと、16:9画面が4:3相当になるのでこのとき 16:9FOVは90度となります。

    垂直視野角 VFOV は引き伸ばされていないため 73.74度のままです。

    4:3(引き延ばし)

    視野角が何度であるのかについて、何度であるかだけでなくFOVタイプ(アスペクト比)と共に記載しなければ意味不明であることが分かりました。

    FOV90といったところで、1:1なのか4:3なのか16:9なのか16:10なのかアスペクト比が分からないと何も示せていないということです。

    ゲームごとの基準視野角

    ゲームごとにアスペクト比を変更した際に基準となる方向があります。

    先ほどのCS:GOの画像を再度示します。

    16:9
    4:3黒帯(Black Bar)

    次にVALORANTの場合を示します。

    様子が異なっていることが分かるでしょうか。

    CS:GOでは4:3にすることで横方向の描画範囲が狭まりましたがVALORANTでは縦方向の描画範囲が広くなっています。

    つまりCS:GOではアスペクト比を変更したとき縦方向、VFOVはそのままであるのに対し

    VALORNTはアスペクト比を4:3にすると横方向、HFOVがそのままであることが分かります。

    これの何が問題であるかというと、まずVALORANTは16:9HFOVが103であることが知られていますが、4:3(Black Bar)でプレイした際にはHFOVがそのままであるので、

    4:3FOVが103となり、16:9FOVが118.36に変わってしまうということです。

    VALORANTで4:3引き延ばしを行うと実際には縦方向の押し縮みになるということですね。

    多くのタイトルではCS:GOと同じ方式ですが、このようにアスペクト比によって視野角が変わる特殊例があります。なので視野角を記述する際はFOVタイプを併記しなくては情報を伝えることができないということです。

    視野角のイメージ

    円を描いてみます。すると視点を中心として上空から俯瞰した状態となります。

    視野角とは視野の角度ですから、図のように見えている範囲を扇形(青線)とすればその中心角が視野角となります。

    その扇形に弦(オレンジ線)を引くことができます。この弦が周囲を映し出す画面になっているというわけです。

    例えば自分から等距離に4人の敵(黒点)がいたとして、図中の矢印のように画面に射影されるわけです。

    またこの4人の敵についてみてみると、自分からは等距離ですが、画面からの距離だと外側の敵ほど近くなっています。

    というのは画面(オレンジ線)を上にスライドしていくと外側の敵が先に画面にぶつかります。この画面との距離感が画面に映るサイズ感と一致するということです。

    なので等距離のモノでも画面中央と比べ画面端に映すとより大きく拡大されて見えるわけですね。

    画面中央の方が角度の密度が濃く、画面端に寄るほど角度の密度が薄いことがわかります。


    もう少し例を示します。円はプレイヤーの真上からの俯瞰図、矩形は画面上とします。

    円の中心がプレイヤーの視点として円周上つまりプレイヤーから等距離な一に敵が5人いると仮定します。

    ピンクで塗りつぶしている部分が画面に描画されている範囲、画面相当の角度とします。

    ということで視野角についてこのようなイメージで話を進めていきます。

    おわり

    最初の話をするとゲームタイトルごとにFOVタイプが異なった表記をしておりCS:GOは4:3FOV、R6Sは1:1FOV、OWは16:9FOVです。

    それぞれゲーム内で同じ視野角の値に揃えたところでFOVタイプが異なっているので何も揃わないということはわかったと思います。

    FOVタイプが異なっていてはゲーム間で視野角を正しく比較することができません。(4:3FOV90と16:9FOV103はどれだけ異なるのかどっちがどれだけ広いのか?)

    よって視野角を揃えるにはFOVタイプ間で値を相互に変換する必要があるというのが次につながる話です。

    次の記事:FPSとFOV② 異なるアスペクト比に視野角を変換


  • [自キ]初めての自作キーボード テンキー(試作)

    自作キーボードやってみたいと唐突に思い道具をそろえ挑戦することに。

    初めてなこともありキー数の少ないテンキーを作り自作キーボードを大まかに理解することを目的とした。

    また今回自作キーボードに挑戦するうえで「手配線で自作キーボードを作る講座 – おかゆ++」さんを参考にしました。

    購入した材料

    Pro Micro(単体) 660円 

    マイコン


    Kailhロープロファイルスイッチ(10個)白 440円×2セット

    キースイッチ。分厚くなりそうだったのでロープロファイルにした。18キーで作ったため20個購入。


    MBK Choc Low-Profile Keycaps 550円×2セット

    キーキャップ。キースイッチよりキーキャップの方が高いとは!


    タクタイルスイッチ – 2pin 3.5x6x4.3mm 11円

    リセットスイッチ。結果としてはわざわざリセットスイッチ設けなくてもピンセットで短絡させればいいかなと思った。


    高速スイッチング・ダイオード 1SS178(100本入) 100円

    ダイオード


    プラ板(PC)数百円

    9×11cm程度×2枚使用。いわゆるサンドイッチプレートみたいな感じ。特に理由なくPC板を購入したが柔らかく加工がしやすかった半面テンキー自体もふにゃふにゃになった。


    ネジ・スペーサー 数百円

    プラ板固定用。ネジはM3、スペーサーは1cmのやつ。

    完成

    4×5の18キーで空いたところにマイコン張り付ける感じのテンキーとなりました。汚い出来上がりですね。雑で不器用だな。

    組み立て

    プラ板の切り出し

    普通キーボードは1キー19.05mm四方でつくられていること、ねじ止めする余白を1cmとったことから

    縦86.2mm、横105.25mmを2枚アクリルカッターで切り出しました。


    プラ板の穴あけとキースイッチの固定

    普通アクリルプレートは14mm角の穴をあけキースイッチをはめると思うのですが加工するのが非常にめんどくさいと思ったので別の方法をとることにしました。

    Kailh choc v1のデータシートから足の位置を確認してプラ板に電動ドリルで穴をあけました。また、キースイッチを差し込みボンドで固定しました。


    行列の配線

    格子配列なので手配線は直線ばかり、単純でした。


    promicroとの配線

    回路とpromicroを耐熱電子ワイヤで配線します。今回は下側の9つのpin、promicroに書いてある5~10、14~16を使用しました。耐熱電子ワイヤをはんだ付けしました。promicroにはんだ付けするのは穴同士が近いし少しめんどくさい。


    組み立て

    promicroはボンドでプラ板に張り付け、そこら辺にあったUSBを刺しておきました。

    スペーサーをプラ板で挟みねじ止めしキーキャップをはめたら本体は完成。

    Firmware

    config.h

    #pragma once
    
    #include "config_common.h"
    
    /* USB Device descriptor parameter */
    #define VENDOR_ID    0xFEED
    #define PRODUCT_ID   0x0000
    #define DEVICE_VER   0x0001
    #define MANUFACTURER Tsuiha
    #define PRODUCT      tenki01
    
    /* key matrix size */
    #define MATRIX_ROWS 4
    #define MATRIX_COLS 5
    
    #define MATRIX_ROW_PINS { B1, B3, B2, B6 }
    #define MATRIX_COL_PINS { C6, D7, E6, B4, B5 }
    #define UNUSED_PINS
    
    /* COL2ROW, ROW2COL */
    #define DIODE_DIRECTION COL2ROW

    「define MATRIX」で行列を定義する必要があるらしい。今回だと縦に4キー横に5キーなので行(ROW)が4、列(col)が5とします。

    「MATRIX_PINS」で行と列で使用するマイコンのピンを指定します。テンキーの0~3行、0~4列で配線したピンを指定します。

    「COL2ROW」はcolからrow(縦線から横線)に電流が流れるということらしい。ダイオードの向きと対応させます。

     

    tenki01.h

    #pragma once
    
    #include "quantum.h"
    
    #define LAYOUT( \
    	   k01, k02, k03, k04, \
    	   k11, k12, k13, k14, \
    	k20, k21, k22, k23, k24, \
    	k30, k31, k32, k33, k34  \
    ) { \
          { KC_NO,  k01,  k02,  k03,  k04 }, \
    	{ KC_NO,  k11,  k12,  k13,  k14 }, \
    	{ k20  ,  k21,  k22,  k23,  k24 }, \
    	{ k30  ,  k31,  k32,  k33,  k34 }  \
    }

    行列とキーの名前を対応させます。わかりやすく座標をそのまま名前にするのが定番なのだろうか。今回は左上のスペースは使用しないがこのように空欄にし下のカッコ内で「KC_NO」とすればよいらしい。

     

    keymap.c

    #include QMK_KEYBOARD_H
    
    #define BASE  0
    const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
      [0] = LAYOUT(
            KC_7 ,KC_8     ,KC_9    ,KC_KP_SLASH   , \
                   KC_4 ,KC_5   ,KC_6    ,KC_KP_ASTERISK, \
        KC_DELETE ,KC_1 ,KC_2     ,KC_3    ,KC_KP_MINUS   , \
        KC_BSPACE ,KC_0 ,KC_KP_DOT,KC_ENTER,KC_KP_PLUS      \
      ),
    };

    先ほどの行列に合わせてキーコードを打ち込む。

     

    あとはうまくコンパイルできればqmktoolboxで書き込んで完成。

    今回は一発で動作したので良かった。

    反省とか

    • 無事完成しテンキーとして動作、使用することができた。調べたり作ったりの中でなんとなく自作キーボードについて理解が深まった気がする。
    • PC板が柔らかく加工しやすいのはよかったがふにゃふにゃになった。素材や厚さはしっかり考えた方がよさそう。
    • 簡単だったのでプラ板に穴をあけスイッチを差し込んだが、プラ板が薄い必要があったりキーボードが厚くなったりするのであまりよくないので14mm角にはめ込むほうがよいかな。
    • promicroに直接配線したが作業がとてもやりにくかったので棒状のやつを差し込みそこに巻き付けてはんだ付けする方がよさそう。
    • 縦の配線、ダイオードの足そのまままげてつなげればよさそう。

    初めてにしてはちゃんとできたしまあ上出来なんじゃないだろうか。

      

    次の記事:[自キ]チルトグリップ対応の左手デバイス(試作)

  • [APEX]ゲーム内FOVと実際FOVの変換方法

    APEX世界のinGAME視野角はactual視野角とは微妙に異なります。APEX世界の視野角はどう計算されているのかの記事になります。

    APEX90は4:3fov89.25というやつです。特に目新しい情報ではないですが、知らない初心者とかに向けて。

    APEX視野角と実際の視野角の関係

    APEX世界の視野角と実際の視野角の関係は温度でいうところの華氏と摂氏の関係に似ています。

    (X°C×1.8) + 32 = Y°F

    というやつですね。

    Cl_FovScaleとは?4:3視野角の関係

    APEXの視野角は Cl_FovScale という値によって決められています。

    この値は「C:\Users\Username\Saved Games\Respawn\Apex\profile\profile.cfg」内に記述されています。拡張子をtxtに変更もしくはテキストエディタで開くことで確認、書き換えを行えます。

    そして Cl_FovScale の値を70倍すると4:3視野角を求められます。

    例えばゲーム内視野角90に設定したとき Cl_FovScale は1.275となります。これを70倍すると89.25となりこれが4:3視野角というわけです。

    またゲーム内視野角70のとき Cl_FovScale は1ぴったりとなっていて70倍すると4:3視野角も70で一致します。APEX世界の視野角と4:3視野角が70のときだけ一致するということです。APEX世界の視野角はこの70を基準として計算されています。

    Cl_FovScale のことが分かったところでそれぞれの関係を見ていきましょう。

    Cl_FovScale とAPEXゲーム内視野角の関係

    先ほどのゲーム内視野角90を例にしましょう。APEXでは70が基準となるといいました。ゲーム内視野角とのその差を取ってみましょう。

    90-70=20ですね。

    Cl_FovScaleも差を取ってみましょう

    1.275-1=0.275

    ではAPEX視野角1度あたり Cl_FovScale がどれだけ変動するのか見てみましょう。

    0.275 ÷20=0.01375

    つまり ゲーム内視野角を90から91に1増やすと Cl_FovScaleが0.01375増えます。 90から92に2増やすと Cl_FovSc aleが0.0275増えます。ということですね。

    APEX視野角1度 と Cl_FovScale0.01375が対応しています。

    よってAPEX視野角と Cl_FovScalega相互変換できます。

    Cl_FovScale = 1 + { ( APEX視野角 – 70 ) x 0.01375 }
    APEX視野角 = 70 + { ( Cl_FovScale – 1 ) ÷ 0.01375 }

    APEXゲーム内視野角と4:3視野角の関係

    APEX視野角1度 と Cl_FovScale0.01375が対応しています。 そして Cl_FovScale の値を70倍すると4:3視野角を求められます。

    Cl_FovScale0.01375 を70してみましょう

    0.01375 x 70 = 0.9625

    これがAPEX視野角1度と4:3視野角の関係に対応していることとなります。

    APEX視野角90は4:3視野角89.25でゲーム内では実際より大きな視野角が表示されていますが、それはAPEX世界では1度が0.9625度だからということですね。

    よってAPEX視野角と4:3視野角が相互変換できます。

    APEX視野角 = 70 + { ( 4:3視野角 – 70 ) ÷ 0.9625 }
    4:3視野角 = 70 + { ( APEX視野角 – 70 ) x 0.9625 }

    おわり

    電卓たたくのも面倒なんで表計算ソフトに突っ込みましょう。

      

    計算フォーム:[計算機]APEX ゲーム内視野角と実際の視野角の変換

    ADS用の計算フォーム:[計算機]APEXの腰だめ・ADS視野角を計算

    関連:[計算機]APEXの腰だめ・ADS視野角を計算

  • 20250422

    stm32のマイコンボード基板とどいていたので実装してみました。手はんだしやすいように選んでいるので手はんだでも難なかったですが、人に寄るような気もしています。

    ひとまずブートローダ起動できたので、後日qmkなりarduinoなりで遊んでみようと思います。
    あとエンコーダとホールセンサの基板も届いていますので触っていきたいですね。

    問題は完全に繁忙期で毎日10時帰りなこと。定時帰りしたい。

    結局stm32は1こ500円とかするのでrp2040には価格ではかなわないのですが、なんならマイコン周りなんもいらない勢いなので楽そうです。安くキーボードを済ませるならrp2040の自家実装なのでしょうね。でもみてくださいよこれ。5.1kohmはusbに必要なものだし、あとはLDOとコンデンサ2つだけですよ。あとbootのプルアップ抵抗。とてもシンプルだしデカップリングコンデンサは消しても動きそう。

    パッケージサイズも大きくてあんまり強み自体があるマイコンではないので、今回のいろいろが終わったら使わなそうではあります。ミニマルな感じはとても好きですがもっと安く高性能で小さいものが新しく出ていますからね、、、、

  • 20250413

    HEKBD用のdip基板も作成しました。
    f042fの評価基板と2軸エンコーダと磁気センサーとmuxのdip基板発注しました。安いとはいえ種類頼むと5k円ぐらいするのですね。高いぜ

    いや安いんですけど。国内で頼むとイニシャル抜きで1枚1000円とかですもんね。

    金ないのに買い物をするのでした。

    ひと段落といいたいところですがもう4月も中旬のようで。あと2週間でGWですなだから何だというのですけども、新年度を何一つ感じていません。

    結局これらの後になりそうな気もしますが手実装するようにすれば試作を安く早く回せるようになるのでそこも同時に進めておきたいところです。分割ならケースも3dpで簡易でいいのだろうし。すると一番手実装しやすいマイコン周りはなんだ?という話題になるのですがどうなんでしょうね。

  • 20250412

    ちょっと外食してきました。美味。

     2軸エンコーダ使ったマクロパッド作ろうという話と、stm32でキーボード作ろうという話がありましたので、同時にこなせばいいねということで進めております。
     ioピンがおそらく14引き出せるのでエンコーダ3+16キーのテンキー+エンコーダのマクロパッド作ろうと思っています。
     とりあえず評価用の基板を起こしました。promicroおよそ互換ですが手はんだしたいのでチップ部品は1608m使っていて大きいです。stm32f042fの仕様がちょっとめんどくさそうなのでちゃんと動かせるかどうかという不安はあります。このパッケージのもの利点全然ないですね。手はんだがとても簡単というだけです。でかくてピン数も少ないという

     それと一緒に磁気キーボード開発用にもセンサーなりmuxなり発注したので、そのdip化基板も起こして一緒に頼みたいです。

     マクロパッドの基板も雑に頼んだ方が進んでよいですが送料が増えそうで若干悩みます。

  • 20250409

     ラピトリキーボード買ってみた
     fun60proみたいなやつです。4000円で売ってました。安いね。

     まえwooting60he+は持っていましたが低apはくそ強いけど面白味はなかったので友人にあげました。で性懲りもなくキーボード買ってしまいました。前情報通りカチャカチャなのですがそんなんゲームに関係ないし、よさそうですね。
     そんな興味あるわけじゃないですがいいじゃんと思うのでそのうち記事書くかも。

     キーキャップ外した時にどっか飛んで行っちゃったのでかけてます。見つからない、、、一般にはゴミみたいな評価ですが、個人的には割といいなあと感じています。

     なんかアマプラに広告が追加されていますが、これはひどいですね、、、、、かといって解約はしないのでアマプラには足元見られている気がします。youtubeも去年から課金していますが、アマプラはじゃあ追加課金するかといわれるとラインナップ自体貧弱なので微妙だよな。dアニメ再契約しようか、どんどんサブスク代がかさんでいきますね。便利を買えという話ですがキショいなあと感じてしまいます、、、
     amazon自体脱するべきではあるのかもしれないが今さらという話。

     最近の話ですが、ちょっとちゃんとデバイス製作しようかと思ったのですけどちゃんとしようと思うとかなり期間がかかるわけで、その前にテキトウな磁気キーボード作ってからにしようかななどと思っています。しかし部材買う金もないという現状であります。数万円が捻出できない財布事情よ、、、

  • 20250403

     最近いろいろが色々でPC触れていなかったというかそもそも何もできていなかったですよ。
     キーボード周りでモノが届きました。

     2軸のエンコーダです。やはりマクロパッド作るならこれないと始まらないですよね。alpsはディスコンしてるのでコピー品でしょうか。ありがたい。
     エンコーダはあまりつかうひつようにせまられてきていなかったので自設計で扱うのはだいぶ久しぶりです。いったんfdmでノブ作ったり配列の検討をしたいところです。

     ここ数か月はシンプルに金がなくてあまり手が付けられていませんね。使うから無くなるのですが、その時しか買えないものが多いですね。

     最近の傾向としましては、キーボードの制御部はマイコンボードでもjlcでpcbaでもなく、家で実装が一番いいんじゃねという感じがあります。pcba発注するとなんだかんだで高くはなるし、別に自分でもで切るわけなので、、
     いろいろ自由に選べますし、安くもなります。自分用しか作らないのですからなおさら家で実装した方が都合よいですよね。
     結局部品入手に回数輸入とかしていると高くつくような気もしますが、

     社畜の念が強く、日々の生活に意味を感じられないこの頃であった。