ノーツ描画の仕様【うみぐりゃーずアドベントカレンダー 2022】

うみぐりゃーずアドベントカレンダー 2022 3 日目の記事です。

adventar.org



はじめに

こんにちは、UMIGURI の開発者の いののて です。趣味でソフトウェアを開発したりゲーセンで某スライダーを擦る音ゲーをしたりしています。弾幕 STG音ゲーもぼちぼちしてます。ところで聖女アンナちゃん、可愛いですよね。もちろん今開催中のグッズキャンペーンで新規立ち絵入手するつもりです。アンナちゃんが貰える期間の最終日が 1 月 11 日、僕の誕生日は 1 月 15 日。近い。まるで誕生日プレゼントのようですね。

すこだ......

今回、嬉しいことに主催の ひとみとせ さんに うみぐりゃーずアドベントカレンダー 書きませんか!?と誘われて参加することになりました。

アドベントカレンダーは今まで専ら読むだけだったのですがこうして初めての記事、ということで結構緊張しますね。



ノーツ描画の仕様

画像がないと寂しいので適当にパワポで作成した画像

設定したテーマ 開発者として ということで、この記事では本家や UMIGURI のノーツ描画の仕様について 3 つ解説します。ギミックや AIR-TRACE などで装飾を施す際などに参考になれば幸いです。

地面ノーツの描画順

地面ノーツ (TAP、ExTAP、SLIDE、HOLD、FLICK、DAMAGE) はその種類とフィールド上の奥行き方向の位置によって描画順が決まります。(最背面から順に描画されます。)

幅が狭いノーツが上になり、同じ幅同士は奥のノーツが上になる

注意: UMIGURI は奥行き順ではなく時間順で描画するようになっているので (不具合です) 追い越しノーツの描画順が設計と異なる挙動になっています。また、本来は SLIDE の中継点と終点ノーツにもこれらの規則が適用されるのですが UMIGURI は無視して始点の描画順に依存して描画します。



AIR 系ノーツの描画順

AIR 系ノーツ (AIRAIR-HOLD、AIR-SLIDE、AIR-CRUSH、AIR-TRACE) は一部を除いて、その種類とフィールド上の奥行き方向の位置によって描画順が決まります。(最背面から順に描画されます。)

譜面に装飾を施しても意図した見た目にならない場合は描画順を考慮すると解決できることがあります。

それぞれのノーツに AIR-TRACE を重ねたときの様子

AIR 系ノーツの描画順について
AIR 系ノーツは立体的なオブジェクトなので、現実世界のように視点から見て手前に位置する物体は手前に、奥に位置する物体は奥になるよう描画したいですよね (開発者目線)。それを実現するためにゲームなどのリアルタイムレンダリング*1 用途の 3DCG では Z バッファ法 という技術があります。

この技術を使えば描画順を気にせず奥行きを考慮した描画ができるのですが、万能ではなく、テクスチャ (オブジェクトの表面に貼り付ける画像) に半透明で後ろが透けて見える部分があるとうまくいかないことがあります。

UMIGURI (や本家) では、AIR-CRUSH の箱の枠や始点の箱の紫の部分、AIR-ACTION は完全不透明なためこの技術を使って順番を気にせずに描画することができます。しかしそれ以外の AIR 系ノーツはテクスチャに半透明要素があるため、それらに描画順を設定し前後関係が擬似的に極力自然に見えるよう描画しています。

不透明と半透明
半透明オブジェクトを不透明オブジェクトと同じように描画するとおかしな結果になる

詳しい解説: ゲームなどのリアルタイムレンダリング用途では奥行きを処理するために高速な Z バッファ法 が用いられます。この手法を簡単に説明すると描画したいオブジェクトが手前のオブジェクトによって隠れていた場合は描画せず、隠れていなかった場合は描画する仕組みになっています。しかしこれには罠があり、手前のオブジェクトが不透明の場合は正常な結果が得られますが、半透明だった場合は後ろが透けているのにもかかわらず隠れた部分が描画されないためおかしな結果になます。そのため 3DCG を扱うゲームなどのソフトウェアでは不透明オブジェクトを先に描画し、次に半透明オブジェクトをそれらに描画順を設定して、物体同士の奥行き判定を不透明オブジェクトに限定しながら描画する実装になっていることが多いです。



ノーツが中央判定タイミングを超えたときの挙動

ノーツが中央判定タイミング (ガイド音が鳴るタイミング) を超えたとき、流れる速度が等倍になります。

例えば -1.0 倍速にして手前からノーツが流れるようにした場合は、判定線に重なった瞬間に反射したような挙動になります。

ロングノーツの背景部分は判定線跨いだとき、これを境に手前側は等速で流したときと同じ形状になります。

-1.0 倍速設定の SLIDE。判定線で反射したような見た目になる。手動プレイかつ放置しないと見られない貴重な光景
0.25 倍速設定の AIR-SLIDE。判定線から手前の部分は等速になるので吸われているような見た目になる
HOLD は判定線で切れて AIR-TRACE は判定線で切れないことを利用した、AIR-TRACE が出現したら一拍置いて HOLD を押すギミック。AIR-TRACE と HOLD は 0 倍速設定になっている


おまけ

UMIGURI NEW (仮)

UMIGURI v1 に潜在する様々な問題点を解決するために「UMIGURI NEW (仮)」としてほぼ一から開発している新バージョンです。

重かった UI 描画も独自のエンジンで軽量化し、表現力も向上させています。 開発進捗は Twitter @inonote で流しています。

プレイ画面
リザルト画面

※キャプチャ画像は開発中で未完成状態なので完成版は大きく変わっているかもしれません。
※プレイ画面の背景が新しくなっていますが、従来の背景に切り替えることも可能です。



UMIGURI ㊙情報

(ゲームディレクトリ)/data/music のサブディレクトリに .umgrignore の名前で空のファイルを配置すると、起動時の楽曲を収集する際そのディレクトリの存在が無視されます。

楽曲数が多くなるとその分起動時間も長くなりますが、この機能を使うことで起動時間を短縮することができます。

デバッグ機能として実装していたのですが消し忘れました。

例: EXAMPLE ディレクトリを無視したい場合

UMIGURI
┗ data
 ┗ music
  ┗ EXAMPLE
   ┣ 3dBackgroundTest
   ┣ 3dFieldTest
   ┣   ⋮
   ┣ Tutorial
   ┗ .umgrignore   ←こう配置する



好きな配置

一応作譜人 (さくふんちゅ) でもあるので好きな配置を置いておきます。

SLIDE 中継点を等間隔でカチャカチャ鳴らす配置
チャッチャッチャッチャ...って軽快な音が鳴るの好き。

例:

  • Bad Apple!! feat.nomico (MAS)

    ボーカルのリズムを無視して 4 分で音取ることで緩急が生まれる

  • 太陽曰く燃えよカオス (MAS)

    動きが付くと楽しい

  • staple stable (MAS)

    ボーカルに無い音を取っているが前後の流れを崩さない配置

何とは言わないけど星 PLUS から始めた民なので残念ながら一番上以外は遊んだことないです... (復活してくれ)

ノーツの効果音を巧みに使っている配置

楽曲のメロディーの音の高さが上がるのに合わせて AIR-HOLD を配置して高音の効果音を鳴らすようにしています。

また、効果音の高さは TAP → SLIDE 終点 → AIR-HOLD の順で高くなることが知られていますが、この配置は 1 拍目で TAP を鳴らし、 2 拍目で SLIDE 終点 を鳴らし、 3 拍目で AIR-HOLD を鳴らすことで段階的に音が高くなるようになっており、プレイが盛り上がるようになっています。(同時に鳴る効果音の種類も 1 → 2 → 4 と増えてますね。)



最後に

ここまで読んでいただきありがとうございます。
これからチ...ニズムで遊ぶ時はノーツ描画の仕様の知識を活かして、このノーツは描画順があのノーツよりも上だからこんな見た目になってるんだなーとか意識して譜面を見るとより面白くなるかも知れません。僕はしてます。

*1:その場で画面を描画すること。高負荷な処理は極力避け、描画を短時間 (画面の垂直同期の間隔内) で済ませる必要がある。反対にあらかじめ描画しておくことを事前レンダリングという。ゲームの途中に挟まれるムービーなどが大抵それ。

ImageMagick のメモ

基本

  • convert 元の画像を保持
    • 引数の頭に入力画像ファイル名、末尾に出力画像ファイル名。
  • mogrify 上書き
    • 引数の末尾に加工対象の画像ファイル名。

解像度変更

-resize 横x縦

横縦のどちらかを省略すると比率を保持したまま変更。

キャンバスの大きさを変更 (余白を変更)

-gravity 位置 -extent 横x縦

-gravity に指定する方位

northwest  north  northeast
        \    |    /
west ---- center  ---- east
        /    |    \
southwest  south  southeast

画像の透明度を保持して加工する

-background transparent

ひなこのーと のくじ引き

ひなこのーと のくじ引き堂でゲットした商品が届いた。


ウワァァァァァァァァァァァァァァァァァァァ(歓喜)


すこ.........ウッ……死…


財力があればコンプしたかったんですけどね!!!!
(無念)

まとめ

くじ引き堂での売り上げでフィギュア化してくれんかな。受注生産でもいいので

(サムネ用)https://pbs.twimg.com/media/E7rayqkVIAA7VK2?format=jpg&name=large

【PC版 原神】スクリーンショットの保存先の変え方

  • 自己責任で行なってください。
  • インストール先と新たなスクショ保存先のストレージのファイルシステムNTFS 以外の場合は非対応。

1. 新たなスクショ保存先に ScreenShot フォルダを移動する

GenshinImpact.exeがあるインストール先フォルダ (デフォルトで C:\Program Files\Genshin Impact\Genshin Impact game) 内の ScreenShot フォルダを好きな場所に移動します。

※この時フォルダ名が ScreenShot で紛れるかもしれないので、分かりやすく名前変更しても構いません。
f:id:inonote:20210319121947p:plain

2. 管理者権限でコマンドプロンプトを起動する

Winキー + R で「ファイル名を指定して実行」を起動し、「cmd」と打ち込んでから Ctrl + Shift + Enter を押して管理者権限としてコマンドプロンプトを起動します。

3. コマンドを実行する

以下のコマンドをメモ帳などにコピペし、<>内を書き換えてからコマンドプロンプトにコピペし、最後に Enterキー を押します。

pushd "<GenshinImpact.exeがあるインストール先フォルダパス>"
mklink /d "<GenshinImpact.exeがあるインストール先フォルダパス>\ScreenShot" "<新たなスクショ保存先のフォルダパス>"


※フォルダパスは、フォルダを開いた状態でアドレスバーを右クリックし「アドレスのコピー」をクリックすることで簡単にコピペできます。 f:id:inonote:20210319162252p:plain

インストール先フォルダに矢印マークがついたアイコンのScreenShotフォルダが出現したら成功です。原神のカメラ機能でスクショしたら新たなスクショ保存先に保存されるはずです。
f:id:inonote:20210319123001p:plain

※あるフォルダへの入り口を別の場所にも設置するような方法で保存先を変えたので、元のScreenShotフォルダを開いても新たなスクショ保存先と同じ中身なのは正常です



変更した保存先を元に戻す方法

インストール先フォルダにある、矢印マークがついたアイコンのScreenShotフォルダを削除するだけです。

よく使うコマンドのメモ (ffmpeg / youtube-dl)

ffmpeg

1920pに伸縮

ffmpeg -i <input> -vf scale=1920:-1 <output>

youtube-dl

出力ファイル名を指定

youtue-dl -o <filename> <URL>

wavで出力

youtue-dl -x --audio-format wav <URL>

「静的コンテンツ」と「性的コンテンツ」の違い

静的コンテンツとは

誰がいつ見ても内容が変わらないコンテンツ(Webページ)のことを指します。URLの末尾が「.htm」や「.html」で終わっていれば静的コンテンツである場合が多いです。例えば、衆議院HPの日本国憲法のページは静的コンテンツで、それに対してGoogleの検索結果のページはサーバーがその場で自動生成したものなので動的コンテンツとなります。

性的コンテンツとは

えっちなコンテンツのことです。

iOSショートカットAppの「音楽クイズ」が面白かった

f:id:inonote:20210112090548j:plain
適当に遊んでたら見つけました。

*ショートカットAppを開き、「ギャラリー」の「スターターショートカット」内から入手できます。

遊んでみた

早速やってみます。
Siriに「音楽クイズ」と話しかけるとゲームが始まります。

f:id:inonote:20210112092022j:plain

ここでiPhone内の楽曲がランダムに選ばれ、曲の真ん中あたりから再生されます。
しばらくすると選択肢が出てくるので、流れていた曲だと思うものを押します。

f:id:inonote:20210112092043j:plain

f:id:inonote:20210112092238j:plain

簡単ですね。

また曲が流れます。

f:id:inonote:20210112092254j:plain

f:id:inonote:20210112092259j:plain



f:id:inonote:20210112092308j:plain


私は、Siriショートカットのゲーム“音楽クイズ”をプレイして、5ラウンド中、5回勝ちました 🎶


今回ここまで


ショートカット

ショートカット

  • Apple
  • 仕事効率化
  • 無料