質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
CPU

CPUは、コンピュータの中心となる処理装置(プロセッサ)で中央処理装置とも呼ばれています。プログラム演算や数値計算、その他の演算ユニットをコントロール。スマホやPCによって内蔵されているCPUは異なりますが、処理性能が早いほど良いとされています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

3回答

6361閲覧

ポリゴン数とフレームレートの関係について

kaz2zak

総合スコア36

CPU

CPUは、コンピュータの中心となる処理装置(プロセッサ)で中央処理装置とも呼ばれています。プログラム演算や数値計算、その他の演算ユニットをコントロール。スマホやPCによって内蔵されているCPUは異なりますが、処理性能が早いほど良いとされています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

4クリップ

投稿2018/05/28 09:45

#分からないいこと
①ポリゴン数を減らすと、フレームレートが上がるのは明白ですが、指数関数的に増加する理由がわかりません。
②ProfilerのCPU Usageの測定図と、Hierarchy右横のCPU(ms)に表示される値からの計算値とが異なるのはなぜでしょうか。

#①について
病院にあるCTでファントムを撮影し、臓器ごとに三次元化したものを、Virtual Reality(Gear VR)内で観察できるよにしています。
CTのデータからそのまま三次元化したデータでは、頸骨~鼠径部の範囲の骨のデータだけで約56MBあります。
このままでは、目標レートの60fpsは達成できないため、ポリゴン数を減らし、最適化することにしました。

他の条件を一定にし、ポリゴン数のみ元のデータから削減率90%までは10%刻み、90~99%までは1%刻み、加えて99.5%,99.9%で処理を行い、その時のfpsをUnityのProfilerを利用し、連続する10フレームのCPU(ms)から平均fpsを計測しました。
結果は、次のグラフの通りです。

削減率とフレームレートの関係

98%削減した際に60 fpsを達成し、そこからは60 fpsで頭打ちとなったので、今回の条件では98%削減することで最適化されると考えています。
なぜ指数関数的に増加するのでしょうか。。

#②について
次の図は20%削減した時のものです。(実測値ではないものが混ざっており、見にくくなり申し訳ありません)
この時、CPU:200.20 ms = 4.995 fpsとなりますが、CPU Usageでは50fps程出ているように見えます。

20%reduction

99%削除した際は、CPU:16.49 ms = 60.64 fpsですが、80~90 fpsくらいあるように見えます。
99% reduction

このグラフと測定からの計測値で相違が見られる理由としては何が考えられるでしょうか。
スマホのためスペックが低く計測値では遅いが、スペックに余裕があればCPU Usageのグラフのようになるということでしょうか!?

初歩的な質問かもしれませんが、ご教示頂けると幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

①だけ。
なぜポリゴン削減量vsフレームレートでグラフを描こうと思ったのでしょうか。
「ポリゴン総数」が「処理時間」に比例すると考えるのが自然です。
お示しのグラフから適当に読み取った数値で処理時間vsポリゴン数のグラフを書いてみましたが、一定量までは綺麗に比例するグラフになりました。
また、これはすなわち元のグラフは指数でなく反比例だったことになります。不用意に指数関数的などと厳密な数学用語を使わないほうがよいでしょう。
処理時間vsポリゴン数

投稿2018/05/28 13:12

ikadzuchi

総合スコア3047

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kaz2zak

2018/05/28 23:37

ikadzughi様 回答ありがとうございます。 縦軸を処理時間に取れば良かったんですね!横軸をポリゴン総数、縦軸を処理時間にすることで回答者様が提示して頂いたようなグラフになりましたし、削減率を横軸にとることで負の一次関数になりました。 よくよく考えれば、フレームレートは処理時間で割っているので、反比例のグラフになりますよね。 急激にフレームレートが上がったので何かからくりがあるのかと思いましたが、グラフの取り方の問題だったとは恥ずかしい限りです。 ①については解決しました。ありがとうございます。
guest

0

②について解決できたのでこちらに記載します.

unity プロファイラーウィンドウを使ってパフォーマンスの問題を診断する
にVSyncは無視できると記載があったので,VSyncを非表示にしていたのが,グラフとCPU(ms)の差異の原因でした.
しっかりと,上の診断するの内容の中に「Vertical Synchronization(VSync)は、ゲームのフレームレートを、表示される画面のリフレッシュレートに一致させるために使用されます。」と記載されていました.
VSyncを表示させてprofilerを確認したところしっかりと一致していました.

投稿2018/05/29 23:35

kaz2zak

総合スコア36

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

CTデータから三次元データへ変換した時に、どのようなデータになっているか、わかりますでしょうか?
というのも、消費されているリソースがCPUでありGPUではないというところから、ボトルネックになっているのは単なるポリゴン数ではなさそうです。

Unity公式の以下が参考になると思います。
https://docs.unity3d.com/ja/current/Manual/OptimizingGraphicsPerformance.html

また、ポリゴン数や使用しているCPU、GPUの情報はありますでしょうか?環境によってどの程度のポリゴン数なら適正なのかかなり変わりますので。

投稿2018/05/28 11:44

TakafumiYuasa

総合スコア124

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kaz2zak

2018/05/28 12:46

gesyutapo 様 回答頂きましてありがとうございます。 CTのデータはDICOMであり、3D Slicerというソフトを使用し3次元データにし、objファイルで一度保存します。(stlかobjしか選択肢がないため) その後、blenderを用いてポリゴン数を削減し、このときはfbxファイルで保存しています。 なるほど。ポリゴン数を削減することで、フレームレートも上昇したので、ポリゴン数由来かと思っていました。 https://unity3d.com/jp/learn/tutorials/temas/performance-optimization/diagnosing-performance-problems-using-profiler-window にもありますが、GPUに対応していないデバイスですが、GPUバウンドにはなってないので、gesyutapo様が仰られるようにボトルネックは別のところにあるのですかね。。 ポリゴン数は骨が一番多いのですが削減前は2991640という膨大な数で構成されています。 CPU,GPUは自分の使用しているGalaxy S8に依存しております。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問