キャンセル
次の結果を表示 
次の代わりに検索 
もしかして: 
キャンセル
次の結果を表示 
次の代わりに検索 
もしかして: 
BMP#07 announcement
5月開催 BIMマネージャープログラム受講申し込み受付中!
  

Archicad 26の2Dレンダリングの詳細

Michitaka Kiriki
Graphisoft
Graphisoft

この記事では、複数のArchicadバージョンにまたがる2Dの近代化プロジェクトについて、いくつかの洞察を提供することを目的としています。線分のレンダリングの変化とその効果に注目します。

 

タイトル通り、ソフトの内部構造に興味がある方には、なぜこのように変化していったのかをより深く理解するためにお勧めの資料です。

 

用語

詳細を説明する前に、使用されている専門用語の簡単な概要を説明します。

  • エイリアシング: ラスタライズによるベクトルデータの離散化(「ギザギザのエッジ/ライン」)
  • アンチエイリアシング: ラスタライズ中またはラスタライズ後にベクトルデータの再構築
  • API: アプリケーションにサービスを提供するソフトウェアインターフェース
  • レンダリングAPI: レンダリング目的に特化したAPI(Direct 3D、OpenGL、Metalなど)
  • ドライバ: ハードウェアデバイス用のソフトウェアインターフェースを提供します。
  • シェーダー: グラフィックスプロセッシングユニット(GPU)上で実行される小さなプログラム

 

クロスプラットフォーム機能の履歴

Archicad自体はクロスプラットフォームですが、レンダリングを処理する基本的なソースコードは長い間、クロスプラットフォームではありませんでした。初期の試みは、Archicad 22でOpenGL 3.3に支えられた拡張可能なソフトウェアインターフェイスの導入が行われました。これを(Archicadの)GPUインターフェースと呼ぶことにしています。

 

Archicad 25の開発中に、私たちは(macOSで最初に)近代化プロジェクトを開始しました。これには2つの目標がありました。

  • ローレベルレンダリングをAppleのMetal APIに移行(OpenGLは廃止されていたため)
  • GPUメモリフットプリントを低減するために、新しいアンチエイリアシング方法の研究

また、当時のアンチエイリアシングソリューション(MSAA)が原因でドライバーのクラッシュが多発したことも、後者を支持する論拠となりました。


この(Archicad 26をターゲットとした)近代化の次のマイルストーンは、WindowsのハイブリッドDirect 3D-OpenGL描画インフラストラクチャ(レガシー実装と呼ぶことにします)を更新することでした。その他にも次のような懸念がありました:

  • Direct 3Dの部分(2D)は完全に独立した実装であったため、メンテナンスやビルドが困難でした。。
  • macOSで実装したのと同じ外観と動作を採用したかったのです。
  • 他の新しい技術(例えば、ハードウェアアクセラレーションを用いたテキストレンダリング)の基礎となることを望んでいました。

私たちが下した決断は、レガシーな実装を取り除き、プラットフォームに依存しないGPUインターフェースの下でDirect3Dの機能を再実装することでした。これは、Archicad 26から、レンダリングAPIの違いに対処することなく改良できる、真のクロスプラットフォーム実装が可能になったことを意味します。

 

シェーダーベースのラインレンダリング

アンチエイリアス部分は、直線の方向に垂直なガウス関数(いわゆるベル曲線)にすぎません。なお、"線"という言葉を使っていますが、実際には長方形のポリゴン(多角形)であることに注意してください。From left to right: aliased, MSAA, shader-based renderingFrom left to right: aliased, MSAA, shader-based rendering

アルゴリズムの強みは、ラウンドキャップ(実際には任意のタイプのキャップ)を自由にレンダリングできることです。レガシー実装では、キャップは実際のジオメトリを計算することによって行われていました。そのため、不必要なメモリを使用し、高いズームレベルでは分割表示されていましたThe legacy implementation (left) had to manually generate rounded caps, whilst the new one (right) calculates them during rasterizationThe legacy implementation (left) had to manually generate rounded caps, whilst the new one (right) calculates them during rasterization

また、MSAAから直接得られるメモリも節約できます(つまり、ドライバがサブピクセルサンプル用にメモリを割り当てる必要がありません)。

 

あとがき

新しいDirect3D実装は、マルチGPUシステムにおいて、より強力なGPUを自動的に検出します。必要に応じて、次のレジストリキーをゼロに設定することで、この機能をオフにできます。

 

HKCU\SOFTWARE\Graphisoft\Archicad\Archicad XXXX\Graphix\AutoDetectGPU

 

ノートパソコンをお使いの方で、長時間電源に接続できない場合におすすめです。Windowsの省電力設定だけでは効果がない場合がありますので、ご注意ください。

 

一般的に、レジストリに触れることはお勧めしません。ご不明な場合は、テクニカルサポートまでお問い合わせください。

回答が見つかりませんでしたか?

このフォーラムで
他の記事をチェック

フォーラムへ戻る

最新の解決策をチェック

採用された解決策

新しいディスカッションを始める

投稿する