Search Unity

Google I/O でお知らせした通り、本日、Unity で実用間近の Vulkan レンダラーの最初の開発者プレビューをリリースします。

Vulkan は新世代のグラフィックスと計算処理 API で、最近のPC やモバイルプラットフォームに使用されている多くの GPU に対し、効率が高いクロスプラットフォームのアクセスを提供します。最近 Google がリリースした Android の Nougat 版は、Vulkan API を公式にサポートしています。Unity も、ユーザーがグラフィックスパフォーマンスを次のレベルに押し上げることができるよう尽力し続けています。

cslexlkxgaujvs7

Vulkan レンダラーを使って Linux 上で実行した Unity Labs のシーン

利点

OpenGL ES 3.x などの従来のモバイルレンダリング API と比較すると、Vulkan の主な利点はスピードです。Vulkan は、複数の CPU コアを利用し、アプリケーションが並列のマルチスレッドに複数のコマンドリストを作成できるように設計されています。これにより、アプリケーションがデバイス上のすべての CPU コアを利用し、パフォーマンスを向上させることが可能になります。Vulkan プレビューリリースでは、 Player settings の “Enable Graphics Jobs” チェックボックスをチェックすることによってこれを有効にします。ただし、レンダラーがシングルスレッドで実行されているときでさえ、かなり大きなパフォーマンスの向上が見られます。Unity 社内用のベンチマークの 1 つでは、シングルスレッドで実行されているときでさえ、OpenGL ES 3.1 レンダラーに比べ、Android 上のフレームタイムで最大 35% の向上が見られました。

まず初めに

ベータ版のページから実験版ビルドを取得してください。ビルドは、Unity 5.5 beta 4 リリースです。ベータ版を試す前に、忘れずにプロジェクトのバックアップを取っておいてください。

Vulkan サポートを有効にするには “Player Settings…” を開き、“Other Settings” ペインの “Auto Graphics API” チェックボックスを無効にします。すると、グラフィックス API のリストが選択肢として表示されます。Vulkan がリストにない場合は、下の方の + をクリックして追加します。次に、Vulkan をリストの一番上位になるようにドラッグします。こうしておけば、Vulkan が可能な場合はいつでも使用されます。設定はこれで終わりです。存在するすべてのシェーダーは Vulkan SPIR-V に変換され (#pragma only_renderers などを通じて、特別に無効にされない限り)、「何もしなくても 勝手に動く」はずです。

Player settings

また、”Graphics Jobs” チェックボックスも試すことができます。これを使うと、特にマルチコア CPU で、パフォーマンスを向上させることができます。

注意 ― Android をターゲットにするとき、“Multithreaded Rendering” と “Graphics Jobs (Experimental)” 設定を絶対に同時には有効にしないように気を付けてください。その 2 つは互いに排他的なので、最終リリース版では、Graphics Jobs を有効にすると、警告なしに Multithreaded Rendering は無視されるようになります。

あとは、ビルドして実行するだけです。すべてがうまくいったら、以下のようなものがプレイヤーログの startup に表示されます。

235c803738138c489e67185497ccbd64

サポートするデバイス

Vulkan をサポートするこのプレビュービルドは、以下のターゲットで使用できます。

* Windows スタンドアロン (エディターでは Vulkan はまだ、サポートされていません)
* Android
* Linux スタンドアロン

Windows では、主に Nvidia と AMD の GPU をテストしました。GPU ドライバーをアップデートするのを忘れないようにしてください。Vulkan は新しい技術で、ドライバーは常に更新されています。クラッシュする不具合の報告をする前に、まず、ドライバーをアップデートして問題解決できないかを確認してください。

Android では、以下のデバイスでテストしました。

* Samsung Galaxy S7 (ARM Mali GPU 搭載の欧州バージョン)。ビルドが 2016 年 8 月以降の最新のファームウェアであることを確認してください。それより前のファームウェアは古いドライバーを使っており、作動しません。
* Nvidia Shield Tablet (両バージョン)、Shield Console
* Google Nexus 6P、5X (これらのデバイスでは、他に比べて問題が多く発生する可能性があります)

以下のデバイスは、現在使用できるファームウェアでは作動しないことが確認されています。

* Samsung Galaxy S7 (Qualcomm GPU 搭載の US バージョン)。ドライバーがアップデートされる次のファームウェアでは、問題が修正されると予想されます。更新 ― Samsung は 2016 年 10 月の次回のシステムアップデートで Qualcomm ベースの Galaxy S7 用に、修正した Vulkan ドライバーをリリースすると発表しました。

Linux では、Nvidia GPU だけをテストしました。libvulkan1 のインストール (Distro から、または、LunarG Vulkan SDK 経由かいずれかで ) と、最近のドライバー (367.x 以降のもの) が必要です。ただし、スプラッシュ画面からゲームに遷移するときに、ランダムにハングが見られました。ですから、この実験版リリースを使用するときに、可能な場合は Unity のスプラッシュ画面を無効にすることをお勧めします。

既知の問題

このリリースは実験的な開発者用プレビューなので、まだ解決していない問題があります。皆様からのフィードバックをお待ちしています。また、不具合や問題が見つかった場合はお知らせください。

* 現時点では、Vulkan の Graphics Jobs は特に、まだ実験的です。クラッシュが発生した場合は、Graphics Jobs を無効にし、それが原因になっていないかを確かめてください
* GrabPass は Graphics Jobs には対応していません
* Nvidia GPU では、MSAA を有効にした複数カメラをレンダリングすると、画面が崩れることがあります
* 現在 Android では、Graphics Jobs の設定は、2 つの同時実行スレッドで作動するようにしか設定できません。そのため、代わりにマルチスレッドレンダラー (既存のクライアント/ワーカースレッドレンダラー) を使用する方が、多くの場合は良いパフォーマンスを得られます。
* コンピュートシェーダーはまだ、テストを十分に行っていません。効果は状況によって異なります。

どうぞ、新しいレンダラーをお試しいただき、その効果をお楽しみください。良い点、悪い点、好きな点、足りない (不満な) 点など、フォーラムに感想をお寄せください。不具合を見つけた場合は、バグレポートシステムを通して報告をお願いします (報告の際には、実験的な Vulkan ビルドに関しての報告であることを記載してください)。特に、Vulkan レンダラーが Android で GL ES 3.x より遅くなるケース、Windows で DX11 か DX9 よりも顕著に遅くなるケースに注目しています。

45 コメント

コメントの配信登録

コメント受付を終了しました。

  1. Is this missing from 5.5.0b9 on MAC ?

    1. Mikko Strandborg

      11月 1, 2016 5:26 pm

      First of all, Vulkan support will be available starting in Unity version 5.6 onwards, so yeah, no Vulkan in 5.5 yet. Secondly, MacOS does not support Vulkan: Apple is using their own rendering API (Metal) instead.

  2. Can Unity finally fix that uttery terrible Stuttering on Nvidia cards?

    We suffer terribly because of the stutter our users get while playing our game if you guys don’t fix this we will move to Unreal and never come back. I’m so getting tired of Unity and I was loving it so much. Very dissapointing engine. This bug is present from 2012 till now…………….

    1. I’m surprised you haven’t submitted a bugreport for this in 4 years. In Fact, nobody has – maybe because it isn’t an issue with Unity, but some users have enforced expensive features like ambient occlusion (SSAO) or DSR in the driver? If you provide some information (preferably a bug report with repro project), I’m sure someone will look into this.

        1. None of these links provide anything to reproduce or understand the issue. Also, the majority of these links says stuttering is caused by another tool or incorrect vsync or refresh rate setup in the driver, or incorrect FixedUpdate/PhysX usage. I have never had any stuttering or hickups like this, and I’m using Unity since 2010, with various nvidia cards on all Windows versions.
          Do you also have a stuttering effect if you play for example INSIDE on Steam? I played it from start to end in one sitting, there was no lag or stutter at all and all content is loaded/streamed dynamically. You get 60fps constantly – so what needs to be different to break this? Do you have these hickups also with an almost empty scene where just one cube is spinning?

  3. I’m afraid I get about 58FPS with OpenGL ES 3 and merely 26 with Vulkan on an Android 6P. Nothing fancy, just meshes with standard materials, no special effects. Still, keep the good work, Vulkan is the way to go :)

    1. Mikko Strandborg

      10月 10, 2016 5:01 pm

      Can you file a bug with repro project attached please? We’d love to take a look.

      1. Ruben Torres Bonet

        10月 11, 2016 11:53 am

        Done

  4. Allan Rowntree

    10月 2, 2016 3:56 pm

    Will Unity take advantage of asynchronous compute on GPU as used by DOOM and other games (DX12 and Vulkan) link -> http://wccftech.com/async-compute-praised-by-several-devs-was-key-to-hitting-performance-target-in-doom-on-consoles/

  5. Wondering when vulkan was coming, thanks a bunch!

  6. Rodrigo Pegorari

    9月 30, 2016 12:46 am

    I’m trying to build to GearVR but the screen doesn’t split. This preview works with VR, or Am I missing something in the building settings?

    1. Mikko Strandborg

      9月 30, 2016 6:41 am

      According to Oculus GearVR forums, Vulkan isn’t yet supported on Gear VR.

  7. Was able to get our source to run with Vulkan, there were a slew of Shader Errors, will there be a forum for us to post questions?

    Overall THANK YOU, this is very promising

  8. Great work.
    Please, before you releasing the new update make a video about all new features.
    Thank you.

  9. It’s great to be able to get this kind of updates early on as a preview. The only rant i have is that everything is now delivered as a preview build !

    This means i must install at any given point in time, something like 7 different versions of Unity on my machine. (2d preview, scripting update preview, 5.5 beta, vulkan preview, along with the other 2-3 versions of the engine i have installed).

    Is this something you’re considering to improve somehow? for example – using the “module” system where each component could have a preview ? (not sure this is currently possible though)

    1. Get ready to install the Module System Preview

  10. Awesome news! Congrats gfx coders @ Unity :)
    I’ll have to add Vulcan support to AVPro Video soon – I’m curious to see if there are any improvements in texture upload speed. I hope that Android MediaPlayer API has Vulcan integration…I’m sure it must have….

  11. Maybe use an enum: None, Multithreaded Rendering, Graphics jobs

    1. Artūras Šlajus

      9月 30, 2016 6:50 am

      “NOTE! When targeting Android, make sure you never have both “Multithreaded Rendering” and “Graphics Jobs (Experimental)” settings enabled at the same time. They are mutually exclusive, and in the final version we’ll silently ignore the Multithreaded Renderer setting if Graphics Jobs are enabled.”

      I can’t believe how someone thinks that silently ignoring something is a good idea ever. Unity, listen to this man, change it into enum or at least don’t silently ignore it, but disallow selecting both with an explanation message.

      1. Aras Pranckevičius

        9月 30, 2016 7:56 am

        Yes, changing these into some sort of enum is a plan.

  12. Lermy García Mas

    9月 29, 2016 5:14 pm

    This is excellent!! Keep polishing!!

  13. Thanks for the Linux Support!

  14. Marc Andre Jutras

    9月 29, 2016 4:42 pm

    > GrabPass is not supported with Graphics Jobs.

    Wow… That’s quite a deal breaker. Is there a way to do refraction without GrabPass?

    1. Aras Pranckevičius

      9月 29, 2016 4:43 pm

      CommandBuffer based approach should work – copy active render target into another texture, from a command buffer that executes after opaque geometry for example.

      1. Marc Andre Jutras

        9月 29, 2016 5:00 pm

        Isn’t that an amazing way to kill your framerate?

        Already that CommandBuffer has poor performance, I would assume copying the render target from them sure won’t help.

        1. Aras Pranckevičius

          9月 29, 2016 5:07 pm

          But that is exactly what a GrabPass does.

          GrabPass does this: “copy current render target into another texture”.

          I’m suggesting a command buffer that does this: “copy current render target into another texture”.

          Which part is more expensive, and do you have more details on what is the “command buffers are slow” problem?

    2. Mikko Strandborg

      9月 29, 2016 4:59 pm

      The reason for this is mostly that from Vulkan’s point of view, each render job builds its own secondary command buffer, and currently the secondary command buffers cannot begin or end render passes (so that we can have multiple threads building draw commands for the same renderpass in parallel). This also means that it is not possible to switch a rendertarget within a job either.

      On tile-based GPUs, doing a GrabPass means flushing the tiles to main memory, copying it to render texture, and then read the previous contents back to the tiles to continue rendering, and this is obviously quite slow, so I’d recommend trying alternative approaches; maybe reusing the contents of the previous frame for the refractions?

      1. Marc Andre Jutras

        9月 29, 2016 5:05 pm

        That sounds like a terrible hack that would give ugly result when the camera start and stop moving. Might be wrong.

        And how would you get the last frame at the right moment, with all the stuff rendered, but without the translucent/refractive surface and no post-effect?

        1. Alkis Tsapanidis

          9月 30, 2016 9:55 pm

          If I remember rightly, that’s how the new Doom does it.

    3. Mikko Strandborg

      9月 29, 2016 5:51 pm

      Oh, and just to clarify: GrabPass should work fine when graphics jobs are not enabled. And, on tile based GPUs it causes a tile resolve+unresolve, just the same as would happen on GL ES.

  15. Really slow guys… being using Vulkan SDK with UE4 since February… and I still have the GI bugs in deferred rendering, simply falling back to forward path… I’m seriously disappointed guys.

    1. Aras Pranckevičius

      9月 29, 2016 4:44 pm

      Are the GI+deferred bugs related to Vulkan, or just in general? In the latter case, do you have more detail on what these bugs are, e.g. case numbers?

      1. Marc Andre Jutras

        9月 29, 2016 5:02 pm

        Don’t know about bug, but reflection probe in Deferred Shading still don’t blend. It’s pretty annoying to have edge showing up when two probes meets. On top, most of our pipeline requires Deferred Shading. So we are stuck with something butt ugly.

        1. Aras Pranckevičius

          10月 1, 2016 8:25 am

          Details would be welcome. Reflection probes do blend in our tests.

        2. Robert Quinones

          11月 21, 2016 11:37 pm

          I would have this issue too, i had to switch to standard shader. i have noticed they arent blending as well as they used to, im not sure if this was caused by an update to 5.4 from 5.3 ill have to check.

      2. Pino of DFT Games Ltd.

        10月 23, 2016 8:37 pm

        I’m referring to the shadows not working in mixed mode lighting, moved to experimental build againn… it was expected with 5.4, then some 5.4.x (see release notes) now not even in 5.5 :(

    2. Why not stick with UE4?

      1. Pino of DFT Games Ltd.

        10月 23, 2016 8:39 pm

        Simply because projects already in advanced state on Unity would cost too much money to be moved to UE4… I'[m kinda stuck on a few projects and I feel the pain every time I cannot progress on those.

    3. Anton van Dijk

      9月 29, 2016 10:30 pm

      Read your comment. This isn’t constructive criticism. Please add some details as to why you’re disappointed! It makes you look more creditable and maybe your issues will get solved eventually. Win-win.

      1. Pino of DFT Games Ltd.

        10月 23, 2016 8:43 pm

        Is very constructive, it reads as follows in plain English: “Unity, stop divesting from the Engine to put money in useless services I didn’t buy in the first place. I expect Vulkan and fixed mixed light rendering ASAP, not more services that I never bought”.

        Simple and easy to understand I guess… having put a few ten of thousand dollars in this engin I’ve fill right to complain quite loud when I feel robbed.

        1. Did you pay for Vulkan renderer?
          Vulkan is a bit new and only supported by a few devices. By the time it is mature, I’m sure Unity will fix that before they release the build. Don’t complain about a feature in a beta build.

  16. Pechka_Productions

    9月 29, 2016 4:18 pm

    Just as you promised at Google I/O. Great job!