PaperSloth’s diary

Unity(C#)、UE4(Blueprint/C++)についての記事を書いたり日常のことをつぶやきます。

LumberyardをUnity, UE4と比較(グラフィック編)

この記事はLumberyard Advent Calendar 2017の19日目の記事です。
Lumberyard Advent Calendar 2017 - Qiita

環境

Unity 5.6.x
Unreal Engine 4.18.1
Lumberyard 1.12.0.0


Unity

Cg、HLSLが利用可能。
シェーダーの種類は頂点シェーダー、フラグメントシェーダー
サーフェイスシェーダー、固定関数シェーダー、コンピュートシェーダー
ジオメトリシェーダー、ハルシェーダー、ドメインシェーダーがある。
種類が多くて大変そう。と思ったかもしれませんが
個人的には頂点、フラグメントさえおさえればいいと思っている。
ComputeShaderの利用例としてはGPU Particleで100万個のパーティクル出したい!とかですね。

また、モバイルはGLSLですがUnity側でCg/HLSLをGLSLにコンパイルしてくれているようです。
さらに条件付きでGLSLの記述も可能なようです。
tips.hecomi.com

公式からUnitychanトゥーンシェーダーが配布されており、アニメ調の表現が誰でも手軽に実現できます。
最近公開されたPhantom KnowledgeはUnityユーザー必見ですね!
unity-chan.com

最近ではShader関連の書籍も出てきました。
Unityシェーダープログラミングの教科書 ShaderLab言語解説編 - 染井吉野ゲームズ - BOOTH
自前のCascade Shadow Maps, Variance Shadow Mapsなんかは
Unityユーザーなら誰しも書いていることでしょう。

また、Shader Forgeを利用することでノードベースのシェーダーが扱えます。
アーティストでも気軽にシェーダーに触れることが出来てオススメです。
https://www.assetstore.unity3d.com/jp/#!/content/14147

何でも出来て最高!と思ったかもしれませんが、1つ困ったことがあります。
幾つかのShaderを自分で用意する必要があります(勿論Assetを買ってもいいです)
Anti-AliasingもBloomもLensFlareもMotionBlurも自分で書かなければいけません。
アセットを購入したりGitHubで落としてきたり、サンプルに含まれていることもありますが
ライセンスの扱いが厳しい場合やそれらに含まれていない場合は自前実装が必要になるため、
Shaderを覚えておくと幸せになれるかもしれません。


Unreal Engine4

HLSL, Material Editorが利用可能。
シェーダーの種類は頂点シェーダー、ピクセルシェーダー、ジオメトリシェーダー
ハルシェーダー、ドメインシェーダー、コンピュートシェーダーがあります。
UE4も標準でPBRに対応しており、デフォルトで様々な画面効果がかかっているため
モデルをインポートして配置しただけでとても綺麗に表示されます。

Material Editorがとても高機能でDecal, PostProcess, UIの種類を簡単に切り替えができ、
Maskや半透明やDither抜きも簡単に表現できます。
質感も豊富で皮膚、髪、目、布、葉など様々です。
モバイルではUnity同様にエンジン側でHLSLをGLSLに変換してくれます。

標準機能だけで大凡の表現が簡単に行え、Material Instanceの利用で
再利用も簡単に行うことが出来ます。
もっと詳しく知りたい人は書籍で一通り学ぶと良さそうです。
Unreal Engine 4 マテリアルデザイン入門[第2版] (GAME DEVELOPER BOOKS) 茄子さん、もんしょさん
Amazon CAPTCHA


続いてHLSLですが、Material Editor内でCustomノードを使うことで利用できるほか
Engine内のusf(Unreal Shader File)内でも定義することができます。
さらに4.17からはGlobal ShaderをPluginとして追加する機能がサポートされました。
Create a New Global Shader as a Plugin | Unreal Engine

UE4といえばリアルな絵が特徴的でしたが今ではアニメ調の絵作りが増えてきましたね。
Airtone, DQ11, Project LayereD, DRAGON BALL FighterZ ...etc

誰でも手軽に機能が追加できるのが魅力的ですね。
さらに何でも出来て最高!と思ったかもしれませんが、1つ困ったことがあります。
ほんとに誰でもルールなく追加するとメモリ、処理負荷共に大変なことになります。
ですので、適切にリーダーを立ててワークフローを構築した方が良さそうです。


Lumberyard

前置きが長くなりました。いよいよLumberyardです。
HLSL, DirectX FX(コンパイル済みエフェクトファイル)と似た形式が利用可能。
標準で豊富なシェーダーが用意されており
リアルな絵作りにおいてはカスタムシェーダーがほとんど必要ないかもしれません。
http://docs.aws.amazon.com/ja_jp/lumberyard/latest/userguide/shader-ref-intro.html

Lumberyardは2017年2月末の時点でCrytekのコードは約50%になっていました。
さらに10ヶ月が過ぎた現在では多くが新機能になったと思われます。

Lumberyardはリアルタイムレンダリングなので、Lightmapのベイクの必要がありません。
反射から、天候の変化まで簡単に行えます。
その分エディターが重いかというとそんなことも全くありません。
さらにLumberyardはSpeedTreeが無料で利用可能なのも魅力的です。


続いてLumberyardの特徴的で高度なグラフィックス技術を幾つか紹介します。

・Specular Anti-Aliasing
スペキュラのハイライト部分がカメラ移動に合わせてちらつくのを抑えている。
www.youtube.com

・Order Independent Transparency(順不同の半透明描画)
www.youtube.com


UE4が実装を諦めたVoxel-based Global Illuminationが搭載されている。
docs.aws.amazon.com

・Fur Shaderを標準サポート(1.12から利用出来ます)
f:id:PaperSloth:20171218212144p:plain
UnityやUE4でもAssetとして購入したり自前で作ることは勿論可能ですが
Lumberyardは標準でサポートされており、高品質です。

2017/12/20追記
・ToonShaderも公式でサポート!
docs.aws.amazon.com

まとめ

Lumberyardのグラフィックスはリアルな絵作りにおいてかなり技術的にも進んでいます。
グラフィックの目玉はVoxel-based Global Illuminationでしょう。
標準で高機能なシェーダーが揃っているのでちょっとマテリアルで遊ぶだけでも楽しいです。
f:id:PaperSloth:20171218212551p:plain

あと、Unitychanみたいなかわいいキャラが出てくると日本でももっと触ってもらえそうだと感じました。
個人的にはFurShaderのくまちゃんとロゴマークの木こりが好きです。

少しでも興味が湧いた人は早速ダウンロードして触れてみてください!