Bakeワークフローで、トゥーンレンダリングをどうやって実現できるか？

今回の主な話題：Bakeワークフローでのトゥーンレンダリングをどうやって実現できる、Unityバージョンのアップグレード問題、AssetBundleを使用する時に報告されたエラー、C++ dllの.netバージョンは変更できない、jenkinsで-executeMethodを実行すると見つからない。

---
###トゥーンレンダリング
Q1:Bakeワークフローで、トゥーンレンダリングをどうやって実現できるか？次の2つの方法のいずれかを使用できますか？ または他の方法を使用しますか？
1）Bake’s Shaderをカスタマイズし、トゥーン化されたLightmapを直接ベイクします。
2）Unityの標準ライトマップをテクスチャとして使用し、後でトゥーン処理を行います。

私たちの具体的な状況は：リアルタイムレンダリングでは、さまざまなシェーダー（自分で作成したものもあるし、既有のトゥーンシェーダーもたくさん見つかりました）を介して、トゥーンレンダリングを実現しました（主に端を描くこと、RampやSpecular、次のようになります）。しかし、ベイクしたら完全に変わりまし私たちの具体的な状況は：リアルタイムレンダリングでは、さまざまなシェーダー（自分で作成したものもあるし、既有のトゥーンシェーダーもたくさん見つかりました）を介して、トゥーンレンダリングを実現しました（主に端を描くこと、RampやSpecular、次のようになります）。しかし、ベイクしたら完全に変わりました（図２のように）。た（図２のように）。
![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653855/788e8cf7-e381-9f83-96c5-1530b30d8a8a.png)
![2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653855/fb1433ca-b26f-a0a9-c2d1-4ee945ab8962.png)
さまざまな実験とインターネット上での検索を通じて、次の点が見つかりました。

1）Unityの標準ベイクは、StandardのShaderを採用して行います。つまり、PBSに基づいています。実験を通じて、シェーダーをどのように変更しても、Unityによってベイクされたライトマップは変更されないことがわかりました。実験を通じて、Shaderをどのように変更しても、UnityによってベイクされたLightmapは変更されないことがわかりました。
2）異なるShaderがBakeにある表現は違います。これらの違いは、主にShaderがLightmap運用する方法が違いますから導きます。
3）カスタムbakeの流れに関する文章またはプラグインがあります。（例えば、Amplify Impostorsなど）

 

私たちのターゲットプラットフォームはスマートフォン（最低でもiPhone 6Sぐらいの端末）であり、まだ初期の調査段階にあります。動的なリアルタイムライトを直接使用することは効率が比較的に低いで、静的オブジェクトがベイクした後、フレームレートが大幅に改善されたので、上記の要求があります。

①
>
よく外部ベイク処理を使用してデータをインポットし、Max、Maya、さらにはue4などのカスタムShaderを使用します。外部ベイク処理のインポートには、同じようなカスタム、デバイスなくでも距離を表示すること、静的Lightmap動的Normalなどの利点があります。

②
>
私も初心者です。同じようにベイクしたい場合、自分でShaderのMeta PassをStandard ShaderのMeta Passに変更したら大丈夫だと思っています。静的オブジェクトに照らすライトをトゥーンライトにしたい場合、自分であのようなCPUベイクを書けて、カラー情報を頂点カラーに直接ベイクすることができます。

③
>
まずはあなたが望む効果から始めなければならないと思います。問題主がやりたいトゥーン効果は一体どのような効果ですか？トゥーンレンダリングは実際に多くの種類があり、たくさんのアニメ映画もPBSで作成したものです。では、なぜベイクが必要ですか？トゥーンレンダリングに間接照明を追加したいですか？

>1）問題にある効果から見ると、このようなバイナリCell Shadingは、シャドウのみがベイクしたいかもしれません。実際に間接照明にはベイクする必要がなく、通常は一つのリア​​ルタイムの動的ライトだけで大丈夫です。本当に何かの効果をベイクしたい場合、カスタムMeta Passで実現できます。
2）上記のように、多くのトゥーン効果はPBSを使用しますが、テクスチャの描画のみに注意する必要があります。この種のトゥーンレンダリングでは、独自のstandard shaderを使ってばいいです。

④
>
Unityの光線追跡で作成した効果です、悪くないと思います。
![3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653855/191a9166-6421-439f-46b9-00ebfddf38f1.png)
実際に、たくさんのキャラクターのトゥーンレンダリングはほぼ多くのテーブルルックアップとアートワークによって取得します。トゥーンレンダリングのハイライトとシャドウは一枚の画像でコントロールします。シャドウ部分のAOは、グラデーション効果が必要なため、頂点カラーを使用します。良い見栄えのためにアーティストの作業量は本当に多いです。セルルックトゥーンレンダリング方法に従う場合は、アーティストが低周波ライトで照らすことに比べて、ベイクすることはあまりよくないです。一枚の画像を加えてハイライト部分をコントロールすれば完璧になります。
>
アーティストがどうでもやりたくない場合、おとなしくPBRを使用するほうがいいです。トゥーンレンダリングを上手くできた作品には、ほぼキャラクターを大事にしまして、シーンが多くの犠牲を払っているようです。

---
###バージョン管理
Q2: プロジェクトは1か月後リリース予定がありますが、現在、アップグレードすることを考えています。そうしないと、将来、Unityが古いバージョンを維持しない時に、プロジェクトに非常厄介なことを導きます。（以前のプロジェクトには常にUnity 4.6.xでしたが、新しいプロジェクトの開発では5.6.xを使用します。維持する必要のある同じ基になるコードが2種類あるので、急いで5.6.xにアップグレードしまいました。）

毎回アップグレードのリスクが非常に高いことを私は知っています。もうアップグレードした友達から、経験を学びたいと思います。例えば、現時点でアップグレードすることをお勧めしますか？Unity 2018.3または2018.2にアップグレードする方が良いですか？アップグレード後にどのような問題が発生しますか？また、どうすればそれらを回避できますか？ 何か見つけにくいピットはありますか？

>私からのアドバイス、
>
1）既存プロジェクトを2017.4安定バージョンにアップグレードすることをお勧めします。Unity5.6から2017.4への移行に大きな問題はありません。レンダリングがガンマ空間からリニア空間に変更されない限り、いくつかの新しいピットがあります。シーンをリベイクする必要があるため、プロジェクトの状況に応じてベーキング計画を調整する必要があるかどうかを考慮することをお勧めします。
2）新しいプロジェクトを作成する場合のみにUnity2018を考慮することをお勧めします。2018の新機能の一部を使用するには、プロジェクトで新しい仕様と使用プロセスを確立することが必要です。
>
レンダリング：カスタムレンダリングパイプラインHDRPの使用は、しばらくモバイルプラットフォームをサポートしていません。LWRPの使用も不安定であり、新しいプロジェクトはゆっくりと磨り合わせて使用することはできます。LWRPを使用せずに3Dプロジェクトを使用している場合は、2017.4を選択しても大きな違いはありません。
>
エディター：主にシーン方面の問題です。Unity 2018はProgressiveベイクグモードを使用できます。2018.3の地形は、多地形をサポートし、大規模な地図の作成に適します。もちろん、シームレスな世界を作成するには、いろいろなロード＆アンロード戦略、アーティストが地形の境界とオブジェクトの処理などを考慮する必要があります。
>
パッケージ：2018.3のPrefabはネストをサポートしており、パッケージング戦略はこの特性で変更される可能性があります。
>
UI：NGUIは更新されなくなりました。新しいプロジェクトでは、間違いなくUGUIが選択されます。

---
###コンパイル
Q3: C ++dllの.netバージョンは変更できません。私が選択したのは3.5ですが、なぜここでは4になりますか？
![4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653855/accfaee7-f153-9aa4-723a-88a5493b99a1.png)
![5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653855/33365c60-afac-c872-c4b5-480065ca131a.png)

>Unityのフィードバック状況から判断すると、このプラグインは.Net4.xを使用しています。.Net3.5バージョンを使用するプロジェクトでは使用させられません。再びプラグインのプロジェクトエンジニアリング環境を確認することをお勧めします。このプロジェクトを見つけたら、txt方式で.vcxprojを開きます。「TargetFrameworkVersionv4.5.2 / TargetFrameworkVersion」が定義するバージョンをチェックし、対応する変更をしてから再コンパイルしてください。

---
###コンパイル
Q4: AssetBundleを使用してパッケージすると、なぜこのエラーが頻繁に報告されるのですか？

`is corrupted! Remove it and launch unity again!
2018-12-21 16:17:24.399 19653-19674/? E/Unity: Mismatched serialization in the builtin class ‘Transform’. (Read 68 bytes but expected 80 bytes)
1  (Filename:  Line: 1901)
2018-12-21 16:17:24.399 19653-19674/? E/Unity: The file ‘archive:/CAB-2ac09b746803d54354bb4ff326f03c3f/CAB-2ac09b746803d54354bb4ff326f03c3f’ is corrupted! Remove it and launch unity again!
[Position out of bounds!]
1  (Filename:  Line: 221)`

①
>
archive：/ CABは一つのリソースのインデックスであり、Unityの公式ツールでチェックでき、Unityのインストールディレクトリにあります。これでどちらのリソースにエラーが出るのは見つけることができます。一般的にはPrefabが破損しているか、オーディオファイルが破損していることです。これで問題を特定するのは一番速いです。

②
>
https://forum.unity.com/threads/unity-5-6-0b4-problem-with-asset-bundle-the-file-archive-cab-8bc5a956f7efa6356fcd1d00c8005f99.452006/
この記事が役立つかどうかを確認してください。
>
組み込みツールWebExtractを使用してbundleリソースを解凍し、それがbundleであることを確認してから、このbundleに対応するオリジナルリソースに何か問題があるかどうかを確認し、これで特定するのは一番速いです。

③
>
リソースが破損していない場合は、非同期ロード中にResources.UnloadUnusedAssetsをコールすることを意味します。このAPIには怖いBUGがあり、ロードされているリソースをアンロードし、報告されたエラーはあなたと同じようです。この問題は、Demoを書いて模擬しやすいます。Unityは修復されていません（2018.3でも再現できます）。
>
解決方法は、タイミングをコントロールし、Resources.UnloadUnusedAssetsを延期します。

---
###構築
Q5：Jenkinsを使用してUnityをパッケージ化したことがありますか？Invoke Unity3d Editorにコマンド-quit -batchmode -executeMethod を使用してもPlayerBuilder.BuildPlayerDebugHKは常にPlayerBuilderのclassが見つからないことを提示しますが、私のプロジェクトには確かにあります。
>次の条件を満たす必要があります。
>
1）エディターの下のコードである必要があります。
2）名付けチャンスがあれば、名付けチャンス.Class.Methodで書く必要があります。

---
UWA Technologyは、モバイル/VRなど様々なゲーム開発者向け、**パフォーマンス分析**と**最適化ソリューション**及び**コンサルティングサービス**を提供している会社でございます。

UWA公式サイト：https://jp.uwa4d.com
UWA公式ブログ：https://blog.jp.uwa4d.com