🌀

分割キーボードZSA Voyagerの設定(for Houdini)

2024/06/12に公開

Voyager is 何

こんなキーボード。

Voyager

スペックなどは下記ブログにまとめているのでご参考されたし。

https://sizu.me/kickbase/posts/owab9smovkkx

本記事ではキーコンフィグの意図・設計の説明を踏まえたうえで、僕のメインツールであるHoudiniに最適化した流れを見ていきたい。

※ここで言うHoudiniはSideFX社の3Dツールを指します

Layer0

メインとなるレイヤー。当然ここに最も使用頻度の高いキーを集めることとなる。下記の画像を見てみよう。

Layer0

修飾キーなどは好みにあわせればいいと思うが、デフォルト設定から変更した個人的に大きいものは下記のとおり。

  • Altキーを左上に
  • 左親指で操作するキーに単独のスペースをアサイン
  • 右親指で操作するキーに単独のバックスペースをアサイン
  • レイヤー切り替えをテレコに(図A)

本来Altキーはノードの複製などで多用するため、できればホームポジションから近くに置きたかったが、ビューポート操作でスペースキーは多用するためそちらに譲ったという経緯がある。

また、デフォルトではレイヤー切り替えのワンタップにスペースキーがアサインされていたが、これがHoudiniと相性が悪いというのも大きなポイントだ。(Houdiniでスペースキー同時押しを要求されるため、長押しでレイヤー切り替えになってしまうと困る)

ちなみにバックスペースを右手親指に割り当てたのもHoudini用のカスタマイズで、実はTAB Menuはバックスペースでも呼び出すことができる。これで左手・右手どちらでもノードを作ることができるという算段だ。

そして地味だが最も影響の大きい点として図Aにあるようにレイヤー切り替えにをテレコにしたところ。これは移動先でバッティングを引き起こしているためあまり推奨できるものではないが、僕の使い方ではどうしてもこうする必要があったので後ほど説明を行う。

Layer1

プログラミングやテキスト入力に特化したコンフィグがこちら。主にVexとPythonで多用するキーを左手に、右手に数値の直接入力を集めている。

Layer1

ここで先程話題に出たレイヤー切り替えキーアサイン変更の弊害が出ている。

図Bの部分を見ていただくとわかると思うが、右親指キーをホールドしているためNumキーが分断されてしまっている。(ただし、_が左手親指で打鍵できるようになったのは怪我の功名といえる。Pythonでもよく入力するからね)

デフォルトのキーアサインであれば下図のように左手・右手できれいに機能分離ができ、美しく覚えやすいキー配列になっている。

元来のキー配列

しかし、この整合性を犠牲にしてもやりたかったのがLayer2のキーアサインだ。

Layer2

特にこだわったのが左手のキーアサインだ。右手は見ての通りVimの移動系をセットしている。またUSキーボードは日本語・英語切り替えはAlt + `で行うが、こちらはマクロで右手小指で打鍵するよう設定している。

Layer2

Layer2への移動を左手親指にしたことにより、Houdiniで利用するホットキーがマウスと独立して実行できるという点が最も重要な設計になっている。(画像左手のオレンジ色のキーW,C,VがHoudini用にカスタマイズされている)

またメディアコントロールも左手だけで行えるのが地味に便利だ。緊急のビデオ会議やリスト再生してる最中に突然出てくるやたらゲインのでかい曲などのスキップなど、利点は多い。

僕はフリーランスということもあり、どんな環境でも作業できるようHoudiniのカスタマイズはあまりしない方なのだが、この設定だけは必ず行っている。

下記のホットキーについて見ていきたい。(図C)

Attribute Wrangle作成ホットキー

Houdiniのシェルフツールをホットキーに割り当て、Wキーで選択した複数のノードとWrangleを接続するようセットしている。業務で使いまくりだ。

Attribute Wrangleの作成

ちなみにフックしているスクリプトは下記の通り。

selNodes = hou.selectedNodes()
INPUT_LIMIT = 4
sop = hou.sopNodeTypeCategory()

if selNodes and all([n.parent().childTypeCategory() == sop for n in selNodes]):
    attribWrangle = selNodes[0].parent().createNode("attribwrangle")
    pos = []

    for i, node in enumerate(selNodes):
        if i < INPUT_LIMIT:
            attribWrangle.setInput(i, node)
            pos.append(node.position())

    posX = sum([x[0] for x in pos]) / len(pos)
    posY = min([x[1] for x in pos])
    attribWrangle.setPosition(hou.Vector2(posX, posY - 1))

Reference Copyのホットキー

こちらも自前で設定している。デフォルトで欲しいなといつも思っている。

Reference Copyのホットキー

ついでにマウス右クリック

こちらをAキーにアサインしているので左右どちらの手でも右クリックを発動できるようにしている。

右クリック

まとめ

分割キーボードはいいものだ。肩こりにはかなりの効果があると個人的には思っている。ミニキーボードに関しては賛否があると思うが、ホームポジションから手を離さない設計はハマれば強いと思う。

またキーコンフィグ設定のルールだが、頭文字と機能を紐づけるか、使用頻度とホームポジションからの位置で設計するか悩むところだと思う。僕は両者を混在して設定しているが、自分が覚えやすく忘れにくいルールを採用するとよいだろう。

まだ右手の負担はあるなと思っているのでカイゼンの余地はありそうだ。

Discussion