日本語版
最新ニュース
科学&テクノロジー

あなたのMacゲームはおそらくぼやけています – ランダムな考え

問題解決影響を受けたゲームAppleができること 問題 この投稿で説明されている問題をFB13375033としてAppleに提出しました。この問題は、2023年9月から公開されています。 MacBookディスプレイでゲームをする場合 - あなたのゲームは おそらく 設定を調整しない限り、間違ったレンダリングを行います。 Appkit(またはCatalyst)でフルスクリーンゲームを構築する開発者の場合 - AppleのAPIには注意する必要があるいくつかの問題があります。 ほとんどのゲームが開始されると、現在のディスプレイでどの解像度が利用できるかをシステムに尋ね、最高のゲームを選択します。 Macアプリは、提案された出力解像度のリストを取得できます。 cgdisplaycopyalldisplaymodes 関数。これは、通常のディスプレイを備えたMacで何十年もうまく機能しました。 Appleラップトップの問題は、ディスプレイの上部にノッチがあることです。ゲームが実行されるフル画面領域は、画面と同じ解像度ではありません。ほとんどのゲームはこの問題を考慮していません。それらは、描くことができる領域ではなく、画面全体のサイズの出力フレームを出力します。この出力は、高さの圧縮とぼやけです。 Notchedディスプレイのレイアウトがどのように機能するかを始めましょう。 Notched Macディスプレイには、注意すべき3つの異なる領域があります。 ディスプレイのフルバウンド。これは、上の図に明示的にマークされていません。しかし、それはメニューとノッチ周辺の領域を含むディスプレイエリア全体です。 ディスプレイの安全なエリア。これには、ノッチのすぐ下のディスプレイの面積が含まれます。 Appkitはこのプロパティを介して公開します NSScreenのSafeareAinsets 財産。 AppKitで利用できるフルスクリーン領域。 これは安全なエリアとは異なります。フルスクリーンエリアはメニューバーの下から伸びていますが、安全な領域はノッチの下から伸びています。 あなたがiOS開発者なら、おそらく安全なエリアのアイデアにすでに精通しているでしょう。しかし、Macは3番目のコンセプト、つまりフルスクリーンアプリ領域を追加します。安全なエリアはノッチの下の領域です。ただし、ウィンドウのフル画面領域は、メニューバーの下の領域です。 CGDISPLAYCOPYALLDISPLAYMODESはどの領域を返しますか?実際、2つの地域の解像度を返します。 ディスプレイの全領域の解像度(最新のフルスクリーンアプリではアクセスできません。) メニューバーの下のエリアの解像度 - フルスクリーンアプリアプリに関連する。私のMacBook Proでは、これらの解像度はすべて16:10です。 問題は、これらの解像度がフィルタリングに組み込まれていない単一のリストに混合されていることです。 さらに悪いことに、ほとんどのゲームはリストの最初の解像度にデフォルトです。これは、たまたまノッチの下の領域の代わりにディスプレイ全体の解像度です。箱から出して、ほとんどのゲームは、不一致になったこの押しつぶされた倒れの出力を使用して描画します。 これがShadow of the…

あなたのMacゲームはおそらくぼやけています – ランダムな考え

1755270400
2025-08-14 22:11:00

問題

この投稿で説明されている問題をFB13375033としてAppleに提出しました。この問題は、2023年9月から公開されています。

MacBookディスプレイでゲームをする場合 – あなたのゲームは おそらく 設定を調整しない限り、間違ったレンダリングを行います。 Appkit(またはCatalyst)でフルスクリーンゲームを構築する開発者の場合 – AppleのAPIには注意する必要があるいくつかの問題があります。

ほとんどのゲームが開始されると、現在のディスプレイでどの解像度が利用できるかをシステムに尋ね、最高のゲームを選択します。 Macアプリは、提案された出力解像度のリストを取得できます。 cgdisplaycopyalldisplaymodes 関数。これは、通常のディスプレイを備えたMacで何十年もうまく機能しました。

Appleラップトップの問題は、ディスプレイの上部にノッチがあることです。ゲームが実行されるフル画面領域は、画面と同じ解像度ではありません。ほとんどのゲームはこの問題を考慮していません。それらは、描くことができる領域ではなく、画面全体のサイズの出力フレームを出力します。この出力は、高さの圧縮とぼやけです。

Notchedディスプレイのレイアウトがどのように機能するかを始めましょう。 Notched Macディスプレイには、注意すべき3つの異なる領域があります。

  • ディスプレイのフルバウンド。これは、上の図に明示的にマークされていません。しかし、それはメニューとノッチ周辺の領域を含むディスプレイエリア全体です。
  • ディスプレイの安全なエリア。これには、ノッチのすぐ下のディスプレイの面積が含まれます。 Appkitはこのプロパティを介して公開します NSScreenのSafeareAinsets 財産。
  • AppKitで利用できるフルスクリーン領域。 これは安全なエリアとは異なります。フルスクリーンエリアはメニューバーの下から伸びていますが、安全な領域はノッチの下から伸びています。

あなたがiOS開発者なら、おそらく安全なエリアのアイデアにすでに精通しているでしょう。しかし、Macは3番目のコンセプト、つまりフルスクリーンアプリ領域を追加します。安全なエリアはノッチの下の領域です。ただし、ウィンドウのフル画面領域は、メニューバーの下の領域です。

CGDISPLAYCOPYALLDISPLAYMODESはどの領域を返しますか?実際、2つの地域の解像度を返します。

  • ディスプレイの全領域の解像度(最新のフルスクリーンアプリではアクセスできません。)
  • メニューバーの下のエリアの解像度 – フルスクリーンアプリアプリに関連する。私のMacBook Proでは、これらの解像度はすべて16:10です。

問題は、これらの解像度がフィルタリングに組み込まれていない単一のリストに混合されていることです。

さらに悪いことに、ほとんどのゲームはリストの最初の解像度にデフォルトです。これは、たまたまノッチの下の領域の代わりにディスプレイ全体の解像度です。箱から出して、ほとんどのゲームは、不一致になったこの押しつぶされた倒れの出力を使用して描画します。

これがShadow of the Tomb Raiderのスクリーンショットです。上部スライスは、MacBook Pro – 3456 x 2234でデフォルトである解像度からのものです。その解像度にはノッチが含まれます。しかし、墓レイダーの影は、3456 x 2160エリアでのみ、ノッチの下にのみ描くことができます。ビューの高さのこの74ピクセルの違いは、押しつぶされた画像を作成します。一番下のスライスは、3456 x 2160の適切なRESで実行されているゲームからのものです。円ははるかにきれいに見えますが、上部の伸びた円はぼやけて押しつぶされています。

nsscreenはaを公開します SafeareAinsets プロパティ – ここで役立つはずだと感じています。しかし、図で見たように、安全な領域は、利用可能なフルスクリーン領域とまだ同じではありません。そのため、安全なエリアを使用することはできません。

解決

ノッチ付きディスプレイでゲームフルスクリーンをプレイしている場合は、16:10の解像度を選択していることを確認してください。プレイするゲームは、おそらく正しい解像度にデフォルトではありません。

開発者の場合 – 安全なエリアを使用して解像度リストをフィルタリングできます。しかし、私たちはそれについて少し賢くなければなりません。完全に一致するものではなく、安全なエリア内に収まる解像度を探す必要があります。

extension NSScreen
{
    func safeAreaResolutions() -> Array {
        let screenResolution = frame
        let safeAreaInset = safeAreaInsets
        let safeScreenResolution = CGSize(
            width: screenResolution.size.width - (safeAreaInset.left + safeAreaInset.right),
            height: screenResolution.size.height - (safeAreaInset.top + safeAreaInset.bottom)
        )
        let safeAreaAspectRadio = safeScreenResolution.width / safeScreenResolution.height
        
        let screenNumber = deviceDescription[NSDeviceDescriptionKey.init("NSScreenNumber")] as! CGDirectDisplayID
        
        guard let resolutions = CGDisplayCopyAllDisplayModes(screenNumber, nil) as? Array else
        {
            // We should never get here, the display should be valid
            fatalError()
        }
        
        return resolutions.filter { resolution in
            (CGFloat(resolution.width)/CGFloat(resolution.height)) > safeAreaAspectRadio
        }
    }
}

このアプローチには、フィルタリングに攻撃的であるという副作用があります。 4:3のようないくつかの解像度を失います。

誰かがより良いアプローチやアルゴリズムを思いつくのを見たいです。しかし、最終的には、これはApple次第だと思います。

影響を受けたゲーム

Shadow of the Tomb Raiderについてはすでに言及しましたが、他の最近のリリースがいくつかあります。

私のMacBook Pro – 3456 x 2234は私のディスプレイの解像度です。しかし、3456 x 2160は、フルスクリーンゲームで利用可能なメニューバーの下の解像度です。つまり、3456 x 2160のような16:10の解像度を探しています。

Ultimate Editionを制御します

コントロールは、独自の解決策を作成するだけで問題を回避します。リストにはいくつかの16:10の解決策がありますが、MacBook Proの実際のネイティブ解像度はありません。

男の空はありません

マンズスカイはデフォルトでは、16:10以外の解像度が不足しています。解像度ピッカーには、安全なエリアと非安全なエリアの両方の解像度がリストされています。

リヴェン

Rivenはデフォルトで押しつぶされた解像度です。

迷う

迷惑なデフォルトは1728 x 1117です。これは16:10ではなく、押しつぶされています。

正しいゲーム

サイバーパンク2077

CyberPunkはデフォルトで1728×1080です。これは16:10です!それらがどのように解像度リストをフィルタリングしているかは明確ではありません。ただし、最大解像度は3456 x 2160です。これは、フルスクリーンアプリの正しい最大解像度です。

名誉ある言及:World of Warcraft

World of Warcraftは最初は間違っているように見えます。しかし、World of Warcraftは、Legacy CoreGraphicsディスプレイサービスフルスクリーンAPIを使用した古いゲームです。そのAPIは、実際にWorld of Warcraftがノッチに引き込むことを可能にします。したがって、この場合、3456×2234の解像度が正しいです。

Appleができること

HIGを更新します

AppleはAを維持します ゲーム用のヒグ フルスクリーンゲームの構築に関するセクションが含まれています。しかし、この問題はどこにも言及されていません。 HIGを更新して、ノッチ周辺の問題と解像度リストを取得する方法を説明する必要があります。

ゲームポーティングツールキットサンプルを更新します

Appleがゲームを移植する方法について提供するサンプルは、出力解像度の選択例を含めません。そうするためのベストプラクティスは、サンプルに含める必要があります。

cgdisplaymodeを更新します

Cocoaアプリケーションには、リストを除去する機能が必要です。フルスクリーンココアアプリに関連する解像度のみを確認するオプションが必要です。

新しいゲーム中心APIを構築します

Appleが解像度リストの取得などのボイラープレートを処理できるゲーム中心APIを構築する時が来るかもしれません。

ゲーム開発者にディスプレイモードをクエリしないようにアドバイスします

コントロールが解像度を処理する方法が好きではありません。開発者は、どのMacでも同じリストをハードコードしているようです。そして、私は本当に私のディスプレイに関連する解像度のリストを持ちたいと思っています。

しかし、彼らは何かに取り組んでいるかもしれません。特定の解像度でゲームをレンダリングする要件はありません。アプリケーションは独自の解像度リストを作成できます。ビューの境界に関する解像度のリストを計算できます。これは、任意のディスプレイまたはウィンドウまたはフル画面モードにスケーリングされます。一部のゲームでは、解像度リストさえ持っていない同様の「レンダリングスケール」設定を実装しています。スケールだけです。

これが良い道である場合 – AppleはHIGとサンプルコードを更新する必要があります。

#あなたのMacゲームはおそらくぼやけています #ランダムな考え

執筆者について: nipponese

Nipponese News編集部は、国内外のニュースを日本語で分かりやすくお届けします。