20211015のUnityに関する記事は14件です。

【Unity】Unityのダッシュボードのレイアウト変わってたから実装手順は俺が書く

Unityダッシュボードのレイアウト変わっててUnityAdsの導入手順が分からない 掲題の通りだ。金が欲しいのでUnityでゲーム作って広告入れようと思ったら、ダッシュボードのレイアウトが大きく変わったため既存の導入手順系の記事通りに行かなくなってしまった。 「いや公式リファレンス読めばわかるじゃんwww」という方は帰ってどうぞ。君らはターゲットじゃない。 同じことで悩んでいる初学者のみんな、頑張りましょう。公式リファレンスは俺が代わりに読んどくよ。 内容 一応、公式リファレンスがどこから見られるか書いとくよ   以下を参考にしてね※Unity用のページの開き方だよ これでIntegration guide for Unityってページが開くよ。 ダッシュボード画面のガイドはこっち あとはこのリファレンス通りに作業するだけだから、英語強い人は上のサイト見てね。 準備するよ ビルドターゲットを変更 ここではAndroidにするよ。UnityEditor左上の[File]>[Build Settings]を押すよ 右下に[Switch Platform]ってボタンが出るはずなので、それを押すよ UnityAdsをインストールするよ UnityEditor左上の[Window]>[PackageManager]を押してね AdvertisementをImportするよ こんな感じの画面が出るから、Advertisementを探してね。右下(この画像だと[Up to date]ボタンの位置)に[Install]ってボタンがあるから押してね。なんか[Import]みたいな画面でるはずだから、色々先に進みそうなボタン押してね。 ダッシュボードで広告の設定するよ ここ押すよ 最初どんな画面が出るか忘れちゃった。何かしらやって、以下の画面になったら[Add Ad Unit]を押してね こんな画面になるから、適宜情報を入力しよう。 - [Rewarded]はスキップできない広告で、見終わるとプレイヤーにゲーム内通貨とかの報酬を与えられるやつ。漫画アプリとかで広告みたら一話読めたりするよね。 - [Interstitial]は一定秒数経過で広告をスキップできる。基本的にはこっち選んどこうね。面倒くさいからね。 こんなんでるよ [+Advanced Settings]で表示する広告について音出すかとか、何秒で飛ばせるかとか決められるみたい。決定ボタンみたいなのはないから、設定終わったら[←]を押してひとつ前の画面に戻る そしたら一番下にこんな感じで今作った広告の設定?が表示されるはず もっと詳しく設定したい人はこっち 組み込んでいくよ じゃあそろそろゲームの方に組み込んでいこう。 まずGameIDを調べよう。ダッシュボード上で、さっき開いてたAd Unitsのページをもう一回開いてね。 ここにApple用のGameIDとAndroid用のGameID載ってるから、控えといてね。 したらScene内に空のGameObject置くか、ゲーム開始時点~ゲーム中も存在するObjectに以下の内容のScriptをアタッチしてあげてね。 ※リファレンスからの丸ごとコピーだから、もし権利者に怒られたら消すよ using UnityEngine; using UnityEngine.Advertisements; public class AdsInitializer : MonoBehaviour, IUnityAdsInitializationListener { [SerializeField] string _androidGameId; [SerializeField] string _iOsGameId; [SerializeField] bool _testMode = true; [SerializeField] bool _enablePerPlacementMode = true; private string _gameId; void Awake() { InitializeAds(); } public void InitializeAds() { _gameId = (Application.platform == RuntimePlatform.IPhonePlayer) ? _iOsGameId : _androidGameId; Advertisement.Initialize(_gameId, _testMode, _enablePerPlacementMode, this); } public void OnInitializationComplete() { Debug.Log("Unity Ads initialization complete."); } public void OnInitializationFailed(UnityAdsInitializationError error, string message) { Debug.Log($"Unity Ads Initialization Failed: {error.ToString()} - {message}"); } } InspectorからAndroid Game Id, iOsGameIdのとこに、さっき控えたandroidのGameIDとiOSのGameIDを入力しよう ここまでで広告表示のためのSDK初期化ができたよ。あと少し! さっきのスクリプトと同じGameObjectに以下のScriptをアタッチしてあげてね。 using UnityEngine; using UnityEngine.Advertisements; public class InterstitialAdExample : MonoBehaviour, IUnityAdsLoadListener, IUnityAdsShowListener { [SerializeField] string _androidAdUnitId = "Interstitial_Android"; [SerializeField] string _iOsAdUnitId = "Interstitial_iOS"; string _adUnitId; void Awake() { // Get the Ad Unit ID for the current platform: _adUnitId = (Application.platform == RuntimePlatform.IPhonePlayer) ? _iOsAdUnitId : _androidAdUnitId; } // Load content to the Ad Unit: public void LoadAd() { // IMPORTANT! Only load content AFTER initialization (in this example, initialization is handled in a different script). Debug.Log("Loading Ad: " + _adUnitId); Advertisement.Load(_adUnitId, this); } // Show the loaded content in the Ad Unit: public void ShowAd() { // Note that if the ad content wasn't previously loaded, this method will fail Debug.Log("Showing Ad: " + _adUnitId); Advertisement.Show(_adUnitId, this); } // Implement Load Listener and Show Listener interface methods: public void OnUnityAdsAdLoaded(string adUnitId) { // Optionally execute code if the Ad Unit successfully loads content. } public void OnUnityAdsFailedToLoad(string adUnitId, UnityAdsLoadError error, string message) { Debug.Log($"Error loading Ad Unit: {adUnitId} - {error.ToString()} - {message}"); // Optionally execite code if the Ad Unit fails to load, such as attempting to try again. } public void OnUnityAdsShowFailure(string adUnitId, UnityAdsShowError error, string message) { Debug.Log($"Error showing Ad Unit {adUnitId}: {error.ToString()} - {message}"); // Optionally execite code if the Ad Unit fails to show, such as loading another ad. } public void OnUnityAdsShowStart(string adUnitId) { } public void OnUnityAdsShowClick(string adUnitId) { } public void OnUnityAdsShowComplete(string adUnitId, UnityAdsShowCompletionState showCompletionState) { } public void OnGUI() { if (GUILayout.Button("LoadAndShowAd")) { LoadAd(); ShowAd(); } } } これでゲームを再生してみてね。画面上方に以下みたいな感じで[LoadAndShowAd]ってボタンが出てくるから、これを押してみてね。 広告が表示されると思う。されなかった?困っちゃうね。(投げやり) たぶんね、Inspector上でInterstitialAdExampleのAndroid Ad Unit Idを、さっき作った広告設定のIDに書き換えるとそれを表示するようにできるんですよ。 でもね、上述の手順だけだとその作成した広告設定の情報が穴だらけで使えないみたい。だからそこは自分で調べてみてね。 僕も調べるから、また進捗あれば更新するよ。 以上 想像以上に雑な内容でビビったかな?ごめんね、でも英語分からなくても広告が出せるとこまではたぶんいったよね?それで許してね。 今後も僕自身が「これ調べても出てこねーじゃんかよォ!!!!」て激怒することがあれば、こんな感じでHowTo記事にしようと思うよ。じゃあの。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Unityモバイルプラットフォームにおけるベイクの使用と最適化(下)

三、ベイクの効率と効果の最適化 シーン作成の規模が大きくなっていることは、ベイク処理のプロセスへの影響: 1)ベイク処理の量の増加; 2)単一マップのベイク時間は大きくなってきて、ベイクはプログレスバーでフレーズする可能性もあります; 3)ライトマップ解像度の精度が変わらない場合、ライトマップの数量が大きいほど、メモリの使用も高い。 この三つの問題はGenerate Lightingのプロセスとかかわるため、Unityのライトデータを生成する計算プロセスを理解する必要があります。 3.1 Generate Lighting Process Generate Lightingしている時、エディタの右下にはPrecompute Processがバックグラウンドでの処理の進捗状況が表示されます。 公式サイトによって紹介されたライトの計算プロセス: 単一シーンのベイクには、コストが高いのはマッピングライトの情報(5/11)とライトの計算(7/11)で、ベイク速度に影響を及ぼすのは主にUVの合理性とライトの計算精度です。 Unityは、Precomputed RealtimeGIを最適化するためのアセットと詳しいガイダンスを提供しています。原文を読むことをお勧めします。 このガイダンスはベイク速度を最適化するポイントをを際立たせました。 Over the course of the document we will cover: How to determine an appropriate lighting resolutionfor our Scenes. What Charts are and how they affect our precompute times. How to start the precompute process. Using probe lighting to reduce the complexity of our lighting Improving auto-unwrapped UVsgenerated by Unity’s Precomputed Realtime GI. What Clusters are and how they are used to generate globally illuminated lighting. Using Lightmap Parameters to fine-tune our lighting on a per-object 3.2 UV Charts、Lightmap UvsとClustersに対する理解 静的オブジェクトのライトを計算する時、Precomputed Realtime GIはまず一部のライトデータを計算してLighting Data Assetに保存します。これらのデータが実行している時に、一組の低い解像度のライトマップが生成されました;Baked GIはライトデータをオフオンラインでライトマップを生成します。リアルタイムのLightmapとベイクLightmapとは直接的な対応関係がなく、二つのオブジェクトは同じrealtime Lightmapにあってもいいです。二枚のBaked Lightmapには、Baked UVsとPrecomputed realtime UVsは異なっています。プレビュー画面からUV ChartingとLightmapが見られます。 1)UV Chartsを理解する UV Chartは静的オブジェクトがライトマップのUVに対応しているところです。リアルタイムGIをプレ計算する時、毎Chartのピクセルでもライトを計算し、プレ計算の時間はChartの数量と大きくかかわっています。そのため、Chartsはどのように働くのかを理解するのは、ライトの計算時間の最適化に役立っています。 各オブジェクトのUV Chartsは一組のUV Chartによって構成され、各UV Chartは連続しているUVセグメントとなさっています。テクスチャのオーバーフローを防ぐために、UV Chainの間に0.5ピクセルのエッジが予約されています。最小単位は44で、各Chartには、少なくとも16のピクセルを占めています。例を挙げれば、ある11メートルのオブジェクトは、Lightmap Resolutionの解像度を1に設定した場合、一つのChartはライトマップに16のピクセルを占めています。50個のChartsでしたら、ライトマップに占めるピクセルは800になります。 左図:6個のUV Charts、少なくとも96ピクセルを示す; 右図: 1個のUV Chartに最適化される 2)UV Charting Control UV Chartのパラメータは、静的オブジェクトのライトマップパラメータで調整できます。UnityのUVマッピング方法は直交しており、Unwrappingアルゴリズムは、UVフラグメントによって共有されているエッジと隣接するエッジを見つけ、それらをステッチすることにより、Lightmap UVsを簡素化します。 Max Distance最大距離(デフォルト値0.5)およびMax Angle最大角度(デフォルト値89)のパラメーターを変更することにより、UV Chartの数を減らすことができます。 Max Distanceは、設定された距離内でのUV shellの接続とステッチを表します。UVのエッジが設定されたMax Distance内にある場合、ステッチの対象と見なされます。Unityシステムのデフォルト値は0.5単位です(単位は1メートルなどのUnityシステム単位です)。オブジェクトが大きい場合は、パラメータ値を大きく設定できます。 値が大きいほどUVフラグメントは減少しますが、実際の状況に応じて考慮する必要があります。ライトマップでより多くのピクセルを占める必要があるオブジェクトの場合、より多くのUVフラグメントが必要になります。 Max Angleは、設定された角度範囲内でのUVシェルの接続とステッチを表します。UVエッジステッチと隣接するサーフェス間の角度も関連しています。同じエッジを共有する2つのサーフェス間の角度は設定されたMax Angleにある場合、ステッチの対象と見なされます。値が大きいほどUVフラグメントは減少しますが、値が大きすぎるとUVストレッチが発生する場合があり、適切な設定も必要です。 導入されたmesh数に対して、メッシュ数が多すぎるため、子Meshに分割されます。分割されたメッシュには異なる角度の法線を持ち、Chartsの分布にも影響します。Ignore Normalsがオンになっている場合(Precomputed Realtime GIのみがこのオプションの影響を受けます)、Chartsは分割されません。ほとんどの場合、メッシュを分割するためにChartsを分割する必要はありません。Ignore Normalsというオプションをオンにすることに注意してください。 Window> LightingのObjectタブで、Chartingプレビューを選択して、選択されたオブジェクトのChartの分布を確認できます。 SceneウィンドウのUV Charts可視化プレビューを使用すると、単一のオブジェクトのUVChartsの数を簡単に確認できるし、使用が適切かどうかを評価できるし、バランスを見つけることができます。 木の葉、低木などの小植物など、UVChartsで合併できない状況では、Light Probeを使用できます。 3)Clustersを理解する 計算を単純化するために、Unityは最初に静的シーンをClustersにボクセル化します。シーン内で、メッシュを介して静的ジオメトリの表面にマッピングしてライト計算に用いますClusters与UV Chartsには同様のライトマッピング方法がありますが、独立した機能です。 SceneウィンドウのClustering可視化プレビューモードを介して、Clusterの分布を確認できます。 上図の正方形のカラーブロックはClusterです 4)Generate Lightmap UV ほとんどのオブジェクトに対して、UnityのGenerate Lightmap UVsのデフォルトパラメータを使用して、ライトマップを生成するUVを計算します。HardAngleパラメータ値は、オブジェクトの角度に応じて手動で調整して、過度のUV切断を防ぐことができます。 できるだけUntiyを使用してLightmaUVを生成してください。手動で処理されたUVフラグメントはライトマップに再配置され、Unityの自動UVよりも前処理に時間がかかります。Unityが自動的にUVを処理する場合、LightmapでUVフラグメントを1つずつ配置します。UnityのGenerate Lightmap UVsを使用しない場合、オブジェクト自体の2番のUV情報はライトマップのUV情報として使用されます。手動処理した合併UVレイアウトから、UVフラグメントを見つけて配置します。 UVを自動分割して理想的なUV分布を得ることが難しい場合があります。この場合、モデルの2番目のUVを手動で処理する必要があります。UVを手動で処理する場合は、UVフラグメントを減らして歪みのないことを維持することが必要となります。 Unityの自動的に生成したUVと3DSMAXの中にある手動処理した連続的な2番UVの効果の比較 2番UVを手動処理する時に注意してください:エクスポートされたオブジェクトに複数の子Meshがある場合、すべての子Meshには、2番UVを手動処理する必要があります。そうでなければ、Generate Lightmap UVsを選択しないと、2番UVのデータは得られなく、ベイク結果が黒くなります。例を挙げれば、ここの樹幹と木の葉が合併されて一つのオブジェクトとしてエクスポートされます。3DSMAXで樹幹の2番UVを変更するだけでは不十分です。また、木の葉もUnwrapして2番UVデータを生成する必要があります。 3.3ライトマップの占有ピクセルに影響を与えるパラメータ 単一のオブジェクトがライトマップで占めるピクセルは、複数のパラメーターの影響を受けます。UV Charting Controlのパラメーターが変更されない場合、主に、グローバルパラメータLightmap Resolutionと各オブジェクトのScale In Lightmapパラメーターの影響を受けます。 LightmapPaddingは、ライトマップにおけるオブジェクト間の間隔ピクセルを決定し、LightmapSizeは、単一のライトマップの最大サイズを決定します。ライトマップにはオブジェクトの対応するすべてのライトピクセルが収容されできない場合、複数のライトマップがベイク処理されます。 1)Lightmap Resolution 適切なLightmap Resolutionを選ぶのはとても重要です。それはシーンを制御するライトマップが総ピクセルで占める全局値です。公式に推奨されるLightmap Resolutionの値:シーンのスケールが世界単位(1 unit= 1メートル)と一致している場合、屋外シーンは0.5〜1、屋内シーンは2〜3、地形は0.1〜0.5です。1メートルを単位にして、豊かな屋内の小さなシーンでは、さまざまなライトとバウンスライトがあり、ライトマップの解像度を2〜3ピクセル/単位に設定できるため、より多くのライトの詳細が収容されます。大きな屋外シーンの場合、ゲームの世界の割合が大きくなります。オブジェクトの表面が数百メートルまたは数千メートルに達する可能性があります。同時に1つの表面にあるライトの種類が少なくなります。この場合、オブジェクトはライトマップの解像度を0.5〜1ピクセル/ユニットに設定でき、地形の場合は0.1〜0.5ピクセル/ユニットに設定できます。 古いバージョンのベイク処理テクノロジーでは、ベイク処理シャドーにはより高い精度が必要なため、リアルタイム解像度を10〜30に設定できます。混合ライトベイクモードでは、間接ライトとリアルタイムシャドーが推奨されます。これにより、ベイク処理シャドーの要件が多く軽減されます。 したがって、実際のシーンスケール、使用するベイクモード、およびベイク効果の要件を総合的に考慮して、適切な値を選択する必要があります。 2)Scale In Lightmap 面積の大きいオブジェクトは、ライトマップの精度とライトの計算精度を高く設定する必要があるという誤解があります。 実際、ライトマップの解像度が変わらない場合、ライトマップ上のオブジェクトが占めるピクセルもオブジェクトのサイズによって異なります。細かい小さなオブジェクトは、かえってより高い精度で設定する必要がある場合があります。 画面の左側は古い調整方法です。大きなオブジェクトのScale In Lightmapのパラメータを3または5に調整し、小さなオブジェクトのパラメータを0.5または0.1に下げます。これは手動でパラメータを変更することで不合理です。 画面の右側は新しいプロセスです。事前にScale In LightmapとLightmap Parameters配置をPrefabの中に保存して、シーンが構築された後、ライトの精度比がすでに形成されます。それでファイナルベイク結果に応じてシーンになる特別な条件を調整するだけで十分です。ほとんどのごく小さながオブジェクトを1つずつ調整する必要がないため、パラメータを手動で調整する手間が大幅に軽減されます。 全局Lightmap Resolutionに基づき、通用オブジェクトのScale In Lightmapを1に、特別な精度設定が必要なオブジェクトを分類によって規範を設定し、違っている精度比を設定します。たとえば、建物の壁の構造は単純で、光は主に低周波光であり、パラメータは0.5に下げます。都市の通りではより高いシャドーの精度が必要なので、パラメータは3に上げます。野生の植物が多数ある場合は、パラメータを0.5に低くします。細部のある主体オブジェクトの場合、パラメータを2に高くします。 Scale In Lightmapが調整前後のオブジェクトのライト精度を比較して、調整した後のライトマップのピクセルの占用分布がより合理的に見えます。 3.4 ライト精度の計算に影響を与えるパラメータ 影响ベイク时长的主要因素在于ライト精度的計算、主要是Lightmapping Settings上的参数配置。 ベイク時間に影響を与える主な要因は、ライト精度の計算であり、主にLightmapping Settingsのパラメータ構成です。 1)Indirect Resolution ライトの計算は、Clusterを単位にして光を照射してライト情報を収集します。Indirect ResolutionはClusterの数に影響し、それを変更するとベイク処理の速度を向上させます。通常、ライト効果のデバッグ段階では精度を下げて最終的なライトパラメータを確認してから、またそれを上げてファイナルベイク効果を取得することをお勧めします。 2)Ambient Occlusion Ambient Occlusion選択する時、オブジェクト間のオクルージョン関係が計算されます。シーンオブジェクトの数量が大きい場合、AO計算をオフにすることはベイク速度を向上させます。通常、ライト効果のデバッグ段階でオフにして最終的なライトパラメータを確認してから、またそれをオンにしてファイナルベイク効果を取得することをお勧めします。 3)Final Gather Final Gatherが選択されている場合、Lightmapの解像度に従って、レイトレーシング(光線追跡法)を使用して、ライトバウンスを計算します。RayCountは、サンプリングされたライトによって計算されるレイの数を決定します。デフォルトは256です。値が大きいほど、ベイクプロセス中の計算時間が長くなります。常、ライト効果のデバッグ段階でオフにして最終的なライトパラメータを確認してから、またそれをオンにしてファイナルベイク効果を取得することをお勧めします。 4)Lightmap Parameters Lightmap Parametersは、一組のPrecomputed Realtime GIのパラメータの集合です。さまざまな静的シーンオブジェクトに複数のパラメータのセットを設定できます。ベイク速度への影響は、主にResolutionとCluster Resolutionのパラメーターに反映されます。Resolutionは、ライト計算の精度に直接影響します。通常、0.1〜2にすることをお勧めします。Cluster ResolutionはClusterの数に影響します。通常、0.3〜0.6に設定することをお勧めします。値が大きいほど、ベイク時間は長くなります。ResolutionとCluster Resolutionは、ライト計算の精度を表します。Scale In Lightmapと違って、Lightmap Resolutionライトマップの解像度と最終サイズには影響しません。 Baked GIのBlur Radiusぼかし半径パラメータを調整することで、不十分なシャドー精度による効果を補正できます。 3.5シーンライトの管理和ベイク モバイルプラットフォームのリアルタイムライトは厳密に制御する必要があります。初期段階ではシーンオブジェクトの分類と階層化を検討して、後の段階での光とシャドーの制御を容易にするようにしてください。実際の制作では、アーティストは問題を発見してから分類するかもしれません。仕様を事前に策定できるかどうかに関係なく、ベイクプロセスの非常に重要なステップであり、無視することはできません。 1)オブジェクトPrefabのライトパラメータを配置する 標準環境を構築し、モデルをインポートしてPrefabする時、標準環境でモデルの2番UVが妥当かどうかをテストし、モデルのUV ControlとLightmapパラメーターを調整し、通用規則に沿ってPrefabのScale in Lightmap値とLightmap Parameters配置をします。 Prefabに保存されているライトパラメータは、グローバルパラメータ、経験値と見なすことができます。シーンがPrefabを呼び出した後、ほとんどの場合、パラメーターを1つずつ調整する必要はなく、特別な状況を微調整して実際のシーンに適応するようにします。モデルのインポート段階では、モデルのUVをチェックし、オブジェクトのライトパラメータを配置すると、後期の大量なオブジェクトのライト配置の作業負荷を節約できます。 たとえば、町の街は、ベイクによって得られるシャドーの細部をサポートするのに十分な精度を必要とするため、Scale in Lightmapを3に設定し、Lightmap ParametersはHighを設定します。壁の構造は単純で、ライトは主に低周波光です。Scale in Lightmapは0.5に低下させることができ、Lightmap ParametersをLowに設定します。これらの特性に従って配置してください。 2)シーンオブジェクトの設計 オブジェクトを分類するのは、ライトの計算をすばやく割り当てることができます。これは、オブジェクトを管理したり、重複するオブジェクトを選択したりするのに便利です。たとえば、シーンの親ノードはEnvironmentであり、表示されているすべての静的シーンオブジェクトが含まれています。子レベルは、類似なサイズと構造のオブジェクトに従ってグループ化されるため、Staticパラメータの統一された設定が容易になり、後の最適化が容易になります。 3)ベイクライトの設計 通常、Directional Lightをメイン光源にして、マテリアル効果とシャドウを表現します、その属性はMixedです。シーンの原画概念にある色相と明度に従って、主光源の色と強度を事前に決定します。主光源のパラメータColorとIntensityはともにシーンの全体的な明るさを定めます。ColorBrightness*Intensity≈1を標準の参照値とされますが、同時に、周囲の環境光の平均明るさ、他の補助光の強度がシーンの明るさへの影響も考慮する必要があります シーンの原画概念にあるシャドーの方向に基づいて主光源の角度を事前に決定し、極端な光の角度を使用しないようにします。例えば、地面に平行または地面に垂直な角度など、ベイク効果に不利です。 ライトのCullingMaskは、静的シーンオブジェクトと動的キャラクターが配置されているLayerに設定されます。CullingMaskを手動で設定する習慣を身に付け、Everythingの使用を避けてください。 主光源が1つしかない場合、ベイクには暗いコーナーが多くなり、シーン全体のトーンは比較的単一になります。通常、より良いベイク効果を得るために、ベイクフィルライトとして平行ライトを追加して、属性をBakedに設定し、平行光の方向、色、強度をよく決めます。ベイク補助用の平行ライトは2つ以下にする必要があります。平行光が多すぎると、ライトが複雑でアンリアルになり、さらに深刻な色のにじみの問題が発生します。したがって、同じ方向と色の平行光は一つだけを残ることをお勧めします。ベイク効果の色相は十分豊富ではない場合、後の色修正によって補うことをお勧めします。ColorGradingとLutのコストは、モバイルプラットフォームで許容範囲内です。 細部を表現するために他のタイプの補助ライトを追加し、シーンで光源が必要な位置でベイク処理するためのPoint Light、Area Light、およびその他のライトを追加します。 4)プリベイクとファイナルベイク シーンの構築はほぼ完成した後、さらにディテールライティングを追加する必要があります。Enlightenの機能では、ライティングとライティングパラメータのみを変更すると、ライトマップをすばやくベイクできます。オブジェクトの追加、削除、変更は、リベイクと同じです。シーンオブジェクトが完全に決定されていない場合は、ベイクをデバッグする効率を改善する必要があります。 適切なRealtime Resolutionを選択し、ライトマップのおおよそのサイズを決定します。この段階では、特に的確である必要はありません。ライトマップの総数と占有率についてはあまり気にせず、最後のステップで微調整します。 グローバルに使用するために2セットのLightmap Parametersを設定します。 これらの2つのセットのパラメーターの違いは、主に、ベイク処理の速度に影響を与えるResolutionとClusterResolutionの値にあります。 シーンで配置されたLightmap Parametersは、これら2つのグローバル設定の影響を受けないことに注意してください。 左側:プリベイク;右側:ファイナルベイク 「プリベイク」は、第一のセットLightmap Parameters-LightmapPreBakeを使用します。Indirect Resolutionを下げ、AOとFinal GatherをオフにしてIndirect Resolution(間接ライト)計算の精度を下げます。これらのパラメータを調整すると、ベイク速度が速くなり、ライトマップのピクセル占有率が変化しないようになります。 「ファイナルベイク」では、第二のセットLightmap Parameters-LightmapFinalBakeを使用します。Indirect Resolutionを上げ、AOとFinal GatherをオンにしてIndirect Resolution(間接ライト)計算の精度を上げます。高配置のベイクマシンを使用して高精度のライト計算を取得します。 二つのベイク方法の比較 ベイクの結果からみれば、プリベイクでライトをデバッグするのは、効率がもっと高く見えます。ベイク効果に問題のあるオブジェクトをタイムリーに修正し(一部のエラーは、オブジェクトの法線と2番UVを修正することで解決できます)、ベイクに適さないオブジェクトをLight Probeに調整します。ライト効果を決定したら、ファイナルベイクを使用して、もっと多くのライトの詳細を取得します。ここは、Indirect Resolutionはライトマップのレイアウトに影響を与えるので、注意してください。最後の段階で、適切なリアルタイム解像度値を決定して、ライトマップのピクセル使用率を最大化するようにします。 公式マニュアルの例では、ベイク時間は7.5hrsから2.25minsに最適化されています。 3.6 他の問題 1)Light Probeの使用 Probe lightingは、リアルタイムライティングに近い技術であり、通常、キャラクターや非静的オブジェクトのライティングに使用され、実行時に高いパフォーマンスを発揮します。Probe lightingは球面調和関数を使用して、3D空間内の点の入射光をサンプリングします。これらの係数は、ストレージコストが低く、すばやく解凍されてシェーダーに使用されます。 Probe lightingの使用には制限があり、高周波光を計算することは困難であり、 特別な可視光放射範囲を計算するには精度が十分ではありません。低次の球面調和関数とパフォーマンスによって制限されるため、Probe lightingは大きなオブジェクトや複雑な受光には適していません。また、大きな平面や表面に凹状があるオブジェクトにも適していません。小さな凸状の物体には適しています。 ライトプローブを使用する利点: LightProbeを使用すると、Lightmapのピクセル占有率を減らし、ベイク速度を上げることができます。シーンには、Lightmapに適さないオブジェクトがあります:複雑な構造の小さなもの、UVChartsの数が不合理なもの、ライトが単一なものなど Lightmapの影響を受けないオブジェクトは、表示と非表示を最適化するのに便利です。 LightProbeの密度は、ライト計算の効率に影響します。オブジェクトの環境ライト状況に基づいて、プローブのレイアウトを行います。密度分布に注意を払う必要があります。LightProbeのコストは高くないが、Probeを配置する時、パフォーマンスの低下を考慮してください。密度が高すぎると、無駄が発生します。大幅な変更が必要な領域や、色をバウンスするために強い光が必要な領域に高密度のプローブを配置します。 同時に、簡易バージョンのLight Probeを作成して、ローエンドの画質に適します。 Light ProbeはLOD Groupの低精度モデルのライトにも用いられます。 Light Probeを設定しない場合、オブジェクトはFallbackのAmbient Probeライトを使用し、Ambient Probeサンプリングライトパネルに設定された環境光は、ユーザイーに表示しません。 2)Baked Reflection Probeの使用 特定の異なるエリアに対して複数の異なるReflectionCubeを作成します。 モバイルプラットフォームでのReflection ProbeのTypeは、通常、RealtimeではなくBakedを使用します。適切な解像度を設定します。Resolutionは、ベイク処理されたCubeの解像度を決定します。これは通常、256を超えません。Culling Maskを使用して、反射ベーキングに参加する必要のあるレイヤーを設定します。 Box Sizeの範囲の設定に注意し、複数の異なるReflectionCubeのエリアが重ならないようにしてください。エリアが重なると、オブジェクトの設定に従って混合されて、不必要なコストが発生します。GraphicsSettingsを使用してReflection Probes Blendingを無効にできます。 グローバルに使用するためのReflection Probeを作成し、Texture ShapeがCubeであるシーンの反射イメージをベイク処理し、Lightingパネルに配置することをお勧めします。シーン内のReflectionCubeは最適化中に無効にすることができ、Lightingパネルで配置されたCubemapがデフォルトで使用されます。 3)マルチシーン管理ライトマップ 適切な照明パラメータ設定の場合、シーン内のオブジェクトが多いほど、より多くのライトマップがベイク処理されます。同じ画面に描画されたオブジェクトは、多数の異なるライトマップを占める可能性があり、レンダリング中のメモリ圧力が増加します。マップサイズが2048サイズに達したら、大きなシーンをエリアに応じて複数のシーンに分割することをお勧めします。異なるエリアのオブジェクトのライトマップはシーンによって管理され、分割された小さなライトマップの数は制御され、シーンに沿ってローディングやとアンインストールします。 4)ベーキングハードウェア構成 最終ベーキングでは、より高い構成のハードウェアが使用されます。ベーキングマシンの推奨ハードウェア構成は、32コア256Gメモリです。 UWA Technologyは、モバイル/VRなど様々なゲーム開発者向け、パフォーマンス分析と最適化ソリューション及びコンサルティングサービスを提供している会社でございます。 今なら、UWA GOTローカルツールが15日間に無償試用できます!! よければ、ぜひ! UWA公式サイト:https://jp.uwa4d.com UWA GOT OnlineレポートDemo:https://jp.uwa4d.com/u/got/demo.html UWA公式ブログ:https://blog.jp.uwa4d.com
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Unityモバイルプラットフォームにおけるベイクの使用と最適化

三、ベイクの効率と効果の最適化 シーン作成の規模が大きくなっていることは、ベイク処理のプロセスへの影響: 1)ベイク処理の量の増加; 2)単一マップのベイク時間は大きくなってきて、ベイクはプログレスバーでフレーズする可能性もあります; 3)ライトマップ解像度の精度が変わらない場合、ライトマップの数量が大きいほど、メモリの使用も高い。 この三つの問題はGenerate Lightingのプロセスとかかわるため、Unityのライトデータを生成する計算プロセスを理解する必要があります。 3.1 Generate Lighting Process Generate Lightingしている時、エディタの右下にはPrecompute Processがバックグラウンドでの処理の進捗状況が表示されます。 公式サイトによって紹介されたライトの計算プロセス: 単一シーンのベイクには、コストが高いのはマッピングライトの情報(5/11)とライトの計算(7/11)で、ベイク速度に影響を及ぼすのは主にUVの合理性とライトの計算精度です。 Unityは、Precomputed RealtimeGIを最適化するためのアセットと詳しいガイダンスを提供しています。原文を読むことをお勧めします。 このガイダンスはベイク速度を最適化するポイントをを際立たせました。 Over the course of the document we will cover: How to determine an appropriate lighting resolutionfor our Scenes. What Charts are and how they affect our precompute times. How to start the precompute process. Using probe lighting to reduce the complexity of our lighting Improving auto-unwrapped UVsgenerated by Unity’s Precomputed Realtime GI. What Clusters are and how they are used to generate globally illuminated lighting. Using Lightmap Parameters to fine-tune our lighting on a per-object 3.2 UV Charts、Lightmap UvsとClustersに対する理解 静的オブジェクトのライトを計算する時、Precomputed Realtime GIはまず一部のライトデータを計算してLighting Data Assetに保存します。これらのデータが実行している時に、一組の低い解像度のライトマップが生成されました;Baked GIはライトデータをオフオンラインでライトマップを生成します。リアルタイムのLightmapとベイクLightmapとは直接的な対応関係がなく、二つのオブジェクトは同じrealtime Lightmapにあってもいいです。二枚のBaked Lightmapには、Baked UVsとPrecomputed realtime UVsは異なっています。プレビュー画面からUV ChartingとLightmapが見られます。 1)UV Chartsを理解する UV Chartは静的オブジェクトがライトマップのUVに対応しているところです。リアルタイムGIをプレ計算する時、毎Chartのピクセルでもライトを計算し、プレ計算の時間はChartの数量と大きくかかわっています。そのため、Chartsはどのように働くのかを理解するのは、ライトの計算時間の最適化に役立っています。 各オブジェクトのUV Chartsは一組のUV Chartによって構成され、各UV Chartは連続しているUVセグメントとなさっています。テクスチャのオーバーフローを防ぐために、UV Chainの間に0.5ピクセルのエッジが予約されています。最小単位は44で、各Chartには、少なくとも16のピクセルを占めています。例を挙げれば、ある11メートルのオブジェクトは、Lightmap Resolutionの解像度を1に設定した場合、一つのChartはライトマップに16のピクセルを占めています。50個のChartsでしたら、ライトマップに占めるピクセルは800になります。 左図:6個のUV Charts、少なくとも96ピクセルを示す; 右図: 1個のUV Chartに最適化される 2)UV Charting Control UV Chartのパラメータは、静的オブジェクトのライトマップパラメータで調整できます。UnityのUVマッピング方法は直交しており、Unwrappingアルゴリズムは、UVフラグメントによって共有されているエッジと隣接するエッジを見つけ、それらをステッチすることにより、Lightmap UVsを簡素化します。 Max Distance最大距離(デフォルト値0.5)およびMax Angle最大角度(デフォルト値89)のパラメーターを変更することにより、UV Chartの数を減らすことができます。 Max Distanceは、設定された距離内でのUV shellの接続とステッチを表します。UVのエッジが設定されたMax Distance内にある場合、ステッチの対象と見なされます。Unityシステムのデフォルト値は0.5単位です(単位は1メートルなどのUnityシステム単位です)。オブジェクトが大きい場合は、パラメータ値を大きく設定できます。 値が大きいほどUVフラグメントは減少しますが、実際の状況に応じて考慮する必要があります。ライトマップでより多くのピクセルを占める必要があるオブジェクトの場合、より多くのUVフラグメントが必要になります。 Max Angleは、設定された角度範囲内でのUVシェルの接続とステッチを表します。UVエッジステッチと隣接するサーフェス間の角度も関連しています。同じエッジを共有する2つのサーフェス間の角度は設定されたMax Angleにある場合、ステッチの対象と見なされます。値が大きいほどUVフラグメントは減少しますが、値が大きすぎるとUVストレッチが発生する場合があり、適切な設定も必要です。 導入されたmesh数に対して、メッシュ数が多すぎるため、子Meshに分割されます。分割されたメッシュには異なる角度の法線を持ち、Chartsの分布にも影響します。Ignore Normalsがオンになっている場合(Precomputed Realtime GIのみがこのオプションの影響を受けます)、Chartsは分割されません。ほとんどの場合、メッシュを分割するためにChartsを分割する必要はありません。Ignore Normalsというオプションをオンにすることに注意してください。 Window> LightingのObjectタブで、Chartingプレビューを選択して、選択されたオブジェクトのChartの分布を確認できます。 SceneウィンドウのUV Charts可視化プレビューを使用すると、単一のオブジェクトのUVChartsの数を簡単に確認できるし、使用が適切かどうかを評価できるし、バランスを見つけることができます。 木の葉、低木などの小植物など、UVChartsで合併できない状況では、Light Probeを使用できます。 3)Clustersを理解する 計算を単純化するために、Unityは最初に静的シーンをClustersにボクセル化します。シーン内で、メッシュを介して静的ジオメトリの表面にマッピングしてライト計算に用いますClusters与UV Chartsには同様のライトマッピング方法がありますが、独立した機能です。 SceneウィンドウのClustering可視化プレビューモードを介して、Clusterの分布を確認できます。 上図の正方形のカラーブロックはClusterです 4)Generate Lightmap UV ほとんどのオブジェクトに対して、UnityのGenerate Lightmap UVsのデフォルトパラメータを使用して、ライトマップを生成するUVを計算します。HardAngleパラメータ値は、オブジェクトの角度に応じて手動で調整して、過度のUV切断を防ぐことができます。 できるだけUntiyを使用してLightmaUVを生成してください。手動で処理されたUVフラグメントはライトマップに再配置され、Unityの自動UVよりも前処理に時間がかかります。Unityが自動的にUVを処理する場合、LightmapでUVフラグメントを1つずつ配置します。UnityのGenerate Lightmap UVsを使用しない場合、オブジェクト自体の2番のUV情報はライトマップのUV情報として使用されます。手動処理した合併UVレイアウトから、UVフラグメントを見つけて配置します。 UVを自動分割して理想的なUV分布を得ることが難しい場合があります。この場合、モデルの2番目のUVを手動で処理する必要があります。UVを手動で処理する場合は、UVフラグメントを減らして歪みのないことを維持することが必要となります。 Unityの自動的に生成したUVと3DSMAXの中にある手動処理した連続的な2番UVの効果の比較 2番UVを手動処理する時に注意してください:エクスポートされたオブジェクトに複数の子Meshがある場合、すべての子Meshには、2番UVを手動処理する必要があります。そうでなければ、Generate Lightmap UVsを選択しないと、2番UVのデータは得られなく、ベイク結果が黒くなります。例を挙げれば、ここの樹幹と木の葉が合併されて一つのオブジェクトとしてエクスポートされます。3DSMAXで樹幹の2番UVを変更するだけでは不十分です。また、木の葉もUnwrapして2番UVデータを生成する必要があります。 3.3ライトマップの占有ピクセルに影響を与えるパラメータ 単一のオブジェクトがライトマップで占めるピクセルは、複数のパラメーターの影響を受けます。UV Charting Controlのパラメーターが変更されない場合、主に、グローバルパラメータLightmap Resolutionと各オブジェクトのScale In Lightmapパラメーターの影響を受けます。 LightmapPaddingは、ライトマップにおけるオブジェクト間の間隔ピクセルを決定し、LightmapSizeは、単一のライトマップの最大サイズを決定します。ライトマップにはオブジェクトの対応するすべてのライトピクセルが収容されできない場合、複数のライトマップがベイク処理されます。 1)Lightmap Resolution 適切なLightmap Resolutionを選ぶのはとても重要です。それはシーンを制御するライトマップが総ピクセルで占める全局値です。公式に推奨されるLightmap Resolutionの値:シーンのスケールが世界単位(1 unit= 1メートル)と一致している場合、屋外シーンは0.5〜1、屋内シーンは2〜3、地形は0.1〜0.5です。1メートルを単位にして、豊かな屋内の小さなシーンでは、さまざまなライトとバウンスライトがあり、ライトマップの解像度を2〜3ピクセル/単位に設定できるため、より多くのライトの詳細が収容されます。大きな屋外シーンの場合、ゲームの世界の割合が大きくなります。オブジェクトの表面が数百メートルまたは数千メートルに達する可能性があります。同時に1つの表面にあるライトの種類が少なくなります。この場合、オブジェクトはライトマップの解像度を0.5〜1ピクセル/ユニットに設定でき、地形の場合は0.1〜0.5ピクセル/ユニットに設定できます。 古いバージョンのベイク処理テクノロジーでは、ベイク処理シャドーにはより高い精度が必要なため、リアルタイム解像度を10〜30に設定できます。混合ライトベイクモードでは、間接ライトとリアルタイムシャドーが推奨されます。これにより、ベイク処理シャドーの要件が多く軽減されます。 したがって、実際のシーンスケール、使用するベイクモード、およびベイク効果の要件を総合的に考慮して、適切な値を選択する必要があります。 2)Scale In Lightmap 面積の大きいオブジェクトは、ライトマップの精度とライトの計算精度を高く設定する必要があるという誤解があります。 実際、ライトマップの解像度が変わらない場合、ライトマップ上のオブジェクトが占めるピクセルもオブジェクトのサイズによって異なります。細かい小さなオブジェクトは、かえってより高い精度で設定する必要がある場合があります。 画面の左側は古い調整方法です。大きなオブジェクトのScale In Lightmapのパラメータを3または5に調整し、小さなオブジェクトのパラメータを0.5または0.1に下げます。これは手動でパラメータを変更することで不合理です。 画面の右側は新しいプロセスです。事前にScale In LightmapとLightmap Parameters配置をPrefabの中に保存して、シーンが構築された後、ライトの精度比がすでに形成されます。それでファイナルベイク結果に応じてシーンになる特別な条件を調整するだけで十分です。ほとんどのごく小さながオブジェクトを1つずつ調整する必要がないため、パラメータを手動で調整する手間が大幅に軽減されます。 全局Lightmap Resolutionに基づき、通用オブジェクトのScale In Lightmapを1に、特別な精度設定が必要なオブジェクトを分類によって規範を設定し、違っている精度比を設定します。たとえば、建物の壁の構造は単純で、光は主に低周波光であり、パラメータは0.5に下げます。都市の通りではより高いシャドーの精度が必要なので、パラメータは3に上げます。野生の植物が多数ある場合は、パラメータを0.5に低くします。細部のある主体オブジェクトの場合、パラメータを2に高くします。 Scale In Lightmapが調整前後のオブジェクトのライト精度を比較して、調整した後のライトマップのピクセルの占用分布がより合理的に見えます。 3.4 ライト精度の計算に影響を与えるパラメータ 影响ベイク时长的主要因素在于ライト精度的計算、主要是Lightmapping Settings上的参数配置。 ベイク時間に影響を与える主な要因は、ライト精度の計算であり、主にLightmapping Settingsのパラメータ構成です。 1)Indirect Resolution ライトの計算は、Clusterを単位にして光を照射してライト情報を収集します。Indirect ResolutionはClusterの数に影響し、それを変更するとベイク処理の速度を向上させます。通常、ライト効果のデバッグ段階では精度を下げて最終的なライトパラメータを確認してから、またそれを上げてファイナルベイク効果を取得することをお勧めします。 2)Ambient Occlusion Ambient Occlusion選択する時、オブジェクト間のオクルージョン関係が計算されます。シーンオブジェクトの数量が大きい場合、AO計算をオフにすることはベイク速度を向上させます。通常、ライト効果のデバッグ段階でオフにして最終的なライトパラメータを確認してから、またそれをオンにしてファイナルベイク効果を取得することをお勧めします。 3)Final Gather Final Gatherが選択されている場合、Lightmapの解像度に従って、レイトレーシング(光線追跡法)を使用して、ライトバウンスを計算します。RayCountは、サンプリングされたライトによって計算されるレイの数を決定します。デフォルトは256です。値が大きいほど、ベイクプロセス中の計算時間が長くなります。常、ライト効果のデバッグ段階でオフにして最終的なライトパラメータを確認してから、またそれをオンにしてファイナルベイク効果を取得することをお勧めします。 4)Lightmap Parameters Lightmap Parametersは、一組のPrecomputed Realtime GIのパラメータの集合です。さまざまな静的シーンオブジェクトに複数のパラメータのセットを設定できます。ベイク速度への影響は、主にResolutionとCluster Resolutionのパラメーターに反映されます。Resolutionは、ライト計算の精度に直接影響します。通常、0.1〜2にすることをお勧めします。Cluster ResolutionはClusterの数に影響します。通常、0.3〜0.6に設定することをお勧めします。値が大きいほど、ベイク時間は長くなります。ResolutionとCluster Resolutionは、ライト計算の精度を表します。Scale In Lightmapと違って、Lightmap Resolutionライトマップの解像度と最終サイズには影響しません。 Baked GIのBlur Radiusぼかし半径パラメータを調整することで、不十分なシャドー精度による効果を補正できます。 3.5シーンライトの管理和ベイク モバイルプラットフォームのリアルタイムライトは厳密に制御する必要があります。初期段階ではシーンオブジェクトの分類と階層化を検討して、後の段階での光とシャドーの制御を容易にするようにしてください。実際の制作では、アーティストは問題を発見してから分類するかもしれません。仕様を事前に策定できるかどうかに関係なく、ベイクプロセスの非常に重要なステップであり、無視することはできません。 1)オブジェクトPrefabのライトパラメータを配置する 標準環境を構築し、モデルをインポートしてPrefabする時、標準環境でモデルの2番UVが妥当かどうかをテストし、モデルのUV ControlとLightmapパラメーターを調整し、通用規則に沿ってPrefabのScale in Lightmap値とLightmap Parameters配置をします。 Prefabに保存されているライトパラメータは、グローバルパラメータ、経験値と見なすことができます。シーンがPrefabを呼び出した後、ほとんどの場合、パラメーターを1つずつ調整する必要はなく、特別な状況を微調整して実際のシーンに適応するようにします。モデルのインポート段階では、モデルのUVをチェックし、オブジェクトのライトパラメータを配置すると、後期の大量なオブジェクトのライト配置の作業負荷を節約できます。 たとえば、町の街は、ベイクによって得られるシャドーの細部をサポートするのに十分な精度を必要とするため、Scale in Lightmapを3に設定し、Lightmap ParametersはHighを設定します。壁の構造は単純で、ライトは主に低周波光です。Scale in Lightmapは0.5に低下させることができ、Lightmap ParametersをLowに設定します。これらの特性に従って配置してください。 2)シーンオブジェクトの設計 オブジェクトを分類するのは、ライトの計算をすばやく割り当てることができます。これは、オブジェクトを管理したり、重複するオブジェクトを選択したりするのに便利です。たとえば、シーンの親ノードはEnvironmentであり、表示されているすべての静的シーンオブジェクトが含まれています。子レベルは、類似なサイズと構造のオブジェクトに従ってグループ化されるため、Staticパラメータの統一された設定が容易になり、後の最適化が容易になります。 3)ベイクライトの設計 通常、Directional Lightをメイン光源にして、マテリアル効果とシャドウを表現します、その属性はMixedです。シーンの原画概念にある色相と明度に従って、主光源の色と強度を事前に決定します。主光源のパラメータColorとIntensityはともにシーンの全体的な明るさを定めます。ColorBrightness*Intensity≈1を標準の参照値とされますが、同時に、周囲の環境光の平均明るさ、他の補助光の強度がシーンの明るさへの影響も考慮する必要があります シーンの原画概念にあるシャドーの方向に基づいて主光源の角度を事前に決定し、極端な光の角度を使用しないようにします。例えば、地面に平行または地面に垂直な角度など、ベイク効果に不利です。 ライトのCullingMaskは、静的シーンオブジェクトと動的キャラクターが配置されているLayerに設定されます。CullingMaskを手動で設定する習慣を身に付け、Everythingの使用を避けてください。 主光源が1つしかない場合、ベイクには暗いコーナーが多くなり、シーン全体のトーンは比較的単一になります。通常、より良いベイク効果を得るために、ベイクフィルライトとして平行ライトを追加して、属性をBakedに設定し、平行光の方向、色、強度をよく決めます。ベイク補助用の平行ライトは2つ以下にする必要があります。平行光が多すぎると、ライトが複雑でアンリアルになり、さらに深刻な色のにじみの問題が発生します。したがって、同じ方向と色の平行光は一つだけを残ることをお勧めします。ベイク効果の色相は十分豊富ではない場合、後の色修正によって補うことをお勧めします。ColorGradingとLutのコストは、モバイルプラットフォームで許容範囲内です。 細部を表現するために他のタイプの補助ライトを追加し、シーンで光源が必要な位置でベイク処理するためのPoint Light、Area Light、およびその他のライトを追加します。 4)プリベイクとファイナルベイク シーンの構築はほぼ完成した後、さらにディテールライティングを追加する必要があります。Enlightenの機能では、ライティングとライティングパラメータのみを変更すると、ライトマップをすばやくベイクできます。オブジェクトの追加、削除、変更は、リベイクと同じです。シーンオブジェクトが完全に決定されていない場合は、ベイクをデバッグする効率を改善する必要があります。 適切なRealtime Resolutionを選択し、ライトマップのおおよそのサイズを決定します。この段階では、特に的確である必要はありません。ライトマップの総数と占有率についてはあまり気にせず、最後のステップで微調整します。 グローバルに使用するために2セットのLightmap Parametersを設定します。 これらの2つのセットのパラメーターの違いは、主に、ベイク処理の速度に影響を与えるResolutionとClusterResolutionの値にあります。 シーンで配置されたLightmap Parametersは、これら2つのグローバル設定の影響を受けないことに注意してください。 左側:プリベイク;右側:ファイナルベイク 「プリベイク」は、第一のセットLightmap Parameters-LightmapPreBakeを使用します。Indirect Resolutionを下げ、AOとFinal GatherをオフにしてIndirect Resolution(間接ライト)計算の精度を下げます。これらのパラメータを調整すると、ベイク速度が速くなり、ライトマップのピクセル占有率が変化しないようになります。 「ファイナルベイク」では、第二のセットLightmap Parameters-LightmapFinalBakeを使用します。Indirect Resolutionを上げ、AOとFinal GatherをオンにしてIndirect Resolution(間接ライト)計算の精度を上げます。高配置のベイクマシンを使用して高精度のライト計算を取得します。 二つのベイク方法の比較 ベイクの結果からみれば、プリベイクでライトをデバッグするのは、効率がもっと高く見えます。ベイク効果に問題のあるオブジェクトをタイムリーに修正し(一部のエラーは、オブジェクトの法線と2番UVを修正することで解決できます)、ベイクに適さないオブジェクトをLight Probeに調整します。ライト効果を決定したら、ファイナルベイクを使用して、もっと多くのライトの詳細を取得します。ここは、Indirect Resolutionはライトマップのレイアウトに影響を与えるので、注意してください。最後の段階で、適切なリアルタイム解像度値を決定して、ライトマップのピクセル使用率を最大化するようにします。 公式マニュアルの例では、ベイク時間は7.5hrsから2.25minsに最適化されています。 3.6 他の問題 1)Light Probeの使用 Probe lightingは、リアルタイムライティングに近い技術であり、通常、キャラクターや非静的オブジェクトのライティングに使用され、実行時に高いパフォーマンスを発揮します。Probe lightingは球面調和関数を使用して、3D空間内の点の入射光をサンプリングします。これらの係数は、ストレージコストが低く、すばやく解凍されてシェーダーに使用されます。 Probe lightingの使用には制限があり、高周波光を計算することは困難であり、 特別な可視光放射範囲を計算するには精度が十分ではありません。低次の球面調和関数とパフォーマンスによって制限されるため、Probe lightingは大きなオブジェクトや複雑な受光には適していません。また、大きな平面や表面に凹状があるオブジェクトにも適していません。小さな凸状の物体には適しています。 ライトプローブを使用する利点: LightProbeを使用すると、Lightmapのピクセル占有率を減らし、ベイク速度を上げることができます。シーンには、Lightmapに適さないオブジェクトがあります:複雑な構造の小さなもの、UVChartsの数が不合理なもの、ライトが単一なものなど Lightmapの影響を受けないオブジェクトは、表示と非表示を最適化するのに便利です。 LightProbeの密度は、ライト計算の効率に影響します。オブジェクトの環境ライト状況に基づいて、プローブのレイアウトを行います。密度分布に注意を払う必要があります。LightProbeのコストは高くないが、Probeを配置する時、パフォーマンスの低下を考慮してください。密度が高すぎると、無駄が発生します。大幅な変更が必要な領域や、色をバウンスするために強い光が必要な領域に高密度のプローブを配置します。 同時に、簡易バージョンのLight Probeを作成して、ローエンドの画質に適します。 Light ProbeはLOD Groupの低精度モデルのライトにも用いられます。 Light Probeを設定しない場合、オブジェクトはFallbackのAmbient Probeライトを使用し、Ambient Probeサンプリングライトパネルに設定された環境光は、ユーザイーに表示しません。 2)Baked Reflection Probeの使用 特定の異なるエリアに対して複数の異なるReflectionCubeを作成します。 モバイルプラットフォームでのReflection ProbeのTypeは、通常、RealtimeではなくBakedを使用します。適切な解像度を設定します。Resolutionは、ベイク処理されたCubeの解像度を決定します。これは通常、256を超えません。Culling Maskを使用して、反射ベーキングに参加する必要のあるレイヤーを設定します。 Box Sizeの範囲の設定に注意し、複数の異なるReflectionCubeのエリアが重ならないようにしてください。エリアが重なると、オブジェクトの設定に従って混合されて、不必要なコストが発生します。GraphicsSettingsを使用してReflection Probes Blendingを無効にできます。 グローバルに使用するためのReflection Probeを作成し、Texture ShapeがCubeであるシーンの反射イメージをベイク処理し、Lightingパネルに配置することをお勧めします。シーン内のReflectionCubeは最適化中に無効にすることができ、Lightingパネルで配置されたCubemapがデフォルトで使用されます。 3)マルチシーン管理ライトマップ 適切な照明パラメータ設定の場合、シーン内のオブジェクトが多いほど、より多くのライトマップがベイク処理されます。同じ画面に描画されたオブジェクトは、多数の異なるライトマップを占める可能性があり、レンダリング中のメモリ圧力が増加します。マップサイズが2048サイズに達したら、大きなシーンをエリアに応じて複数のシーンに分割することをお勧めします。異なるエリアのオブジェクトのライトマップはシーンによって管理され、分割された小さなライトマップの数は制御され、シーンに沿ってローディングやとアンインストールします。 4)ベーキングハードウェア構成 最終ベーキングでは、より高い構成のハードウェアが使用されます。ベーキングマシンの推奨ハードウェア構成は、32コア256Gメモリです。 UWA Technologyは、モバイル/VRなど様々なゲーム開発者向け、パフォーマンス分析と最適化ソリューション及びコンサルティングサービスを提供している会社でございます。 今なら、UWA GOTローカルツールが15日間に無償試用できます!! よければ、ぜひ! UWA公式サイト:https://jp.uwa4d.com UWA GOT OnlineレポートDemo:https://jp.uwa4d.com/u/got/demo.html UWA公式ブログ:https://blog.jp.uwa4d.com
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Unityモバイルプラットフォームにおけるベイクの使用と最適化(上)

前書き モバイルプラットフォームでのシーン作成の規模はますます大きくなっています。オープンパースペクティブを備えた3Dビッグワールドシーンでは、マップサイズと可視距離に対する要求がますます高まっています。これにより、地形のサイズが大きくなり、シーンオブジェクトの種類が増え、オブジェクトのモードのメッシュと数量も増えていきます。従って、アート効果もコンソールやPC側のゲームに近づいていくと要求しています。 モバイルプラットフォームでは、Realtime Global Illuminationがまだ自由に使えられません。アートシーンのライトは主にベイク処理されたGIに基づいています。Unityバージョンのアップグレードに伴い、シーンのベイク処理プロセスはいくつかのバージョンを更新しましたが、問題もますます出てきました。Unityの公式テクニカルサポートにより、ベイク処理のプロセスでいくつかの非常に重要な部分が無視され、またUnity 2017.4にアップグレードした後、ベイク処理モードが変更されたため、この記事をまとめます。 一、Unityライトベイクシステム Unity 5.6バージョンがを例にして、ライトベイクシステムを紹介します。ほかの古いバージョンは紹介しません。 1.1 Enlightenに基づいたGIとLightmapping Workflow Unity 5.0バージョンはEnlightenに基づいたreal-time GIとベイクライトマップの処理プロセスをアップグレードしました。“Auto”モードには、プレ計算のリアルタイムGIや、静的ライトマップLightmaps、ライトプローブLight Probes、反射プローブReflection Probesなどデータが生成されています。主なアップグレード内容は以下の通り: 1)リアルタイムGIはLightsとSkylightをサポートし、自発ライトの表面をリアルタイムのライト源とさせ、ライトの色は動的オブジェクトにリアルタイムで影響を与え、動的に変更することもできます。 2)ライトマップLightmapは三つのモードがあります: "Non-directional" モードのコスト最も少なく、普通の拡散反射効果が得られる。 "Directional" モードは法線を計算でき、拡散反射と法線の効果が得られる。 "Directional Specular" モードはさらにハイライトの効果も残されている。 3)Reflection Probesは、HDR形式をサポートし、リアルタイムレンダリング、またベイクはCubeアセットとして保存されることもサポートしています。 4)SkyboxはHDR形式をサポートし、環境光の一種とされる。 Unity 5.0から、ベイクシステムはライトだけでベイク効果を作るのではなくなり、ベイクプロセスでの環境光と反射環境、また発ライトShaderのマテリアルを使用することなどにも考慮を要します。 1.2 Mixed Lighting Unity 5.6バージョンから、Baked GIはミックスライティングMixed Lightingに変更されます。Light ModeがMixedに設置されることは、ライトの静的と動的オブジェクトへの共同作用からではなく、本当に間接ライトと直接ライト、ベイクシャドーとリアルタイムシャドーを融合させることからです。 Mixed Lightingに基づき、新しいShadowmaskベイクが添加されました。ベイクシャドーとリアルタイムシャドーとの融合をサポートしています。Unity 2017以上のバージョンを使用することをお勧めします。Unity 2017.1バージョンで、ShadowmaskとDistance Shadowmask二つのモードの切り替えはQualitySettingに移動したので、QualitySettings.shadowmaskModeで修正できます。 画面左側のShadowmaskモードは完全ベイク処理されたShadowmapの効果で、画面右側のDistance ShadowmaskはリアルタイムシャドーとベイクShadowmapは設定距離に基づいた融合した効果です。 1.3 Progressive Lightmapper Unity 5.6バージョンは新しい特性Progressive Lightmapperを追加しました。これはEnlightenと全く違っている漸進的なライトスタンプの技術で、ベイク処理のプロセスを改善しました。 Progressive Lightmapperパスに基づき、漸進的に生成したライトマップをトレースして、素早くシーンのベイクライトをプレビューして、lightmapsとLight Probesを素早くベイクして、徐々に最終的なバージョンが表示して更新されました。 Enlightenに基づいたベイクはPrecomputed realtime GIを依頼して間接ライトを生成します。そのメリットは、ライトのみを変更することで新しいライトスタンプを素早く生成することです。ただし、マップを作成する段階では、さまざまな要素はシーンオブジェクトとかかわるから、Lightmap UVsのレイアウトは再び変更します。Enlightenの特性では、頻繁的にベイクを繰り返してライトスタンプを生成する必要があります。それに対し、Progressive Lightmapperという特性では、"Auto Generate"は実際に大型シーンの作成に使用できます。 Enlightenは、UVに起因する効果の欠陥を完全に避けることはできないが、Progressive Lightmapperには、UVに対する要求はより一般的に見えます: 重なるUVがなく、面積と角度のエラーが小さく、チャート間の充填間隔が十分です。Unityのバージョンアップグレードにより、Progressive Lightmapperは、より優れたソリューションとベイク効果を提供できます。たとえば、Unity2017.2で追加されたStitch Seams機能は、継ぎ目のライトを修復できます。 Progressive LightmapperはUnity 2017のすべてのバージョンでは、プレビューしかサポートしません。Unity 2018には、ベイクの使用ができるようになりました。その故、Unity 2018にアップグレードしないと、引き続きEnlightenのベイクシステムを使用しかありません。でも、Progressive Lightmapperの出現に伴い、Unityのベイクプロセスもより良い方向へと調整しています。 Unity 5.6のバージョンから、UV ControlとLightmap SettingsはLighting-ObjectのパネルからInspectorパネルのオブジェクト属性へと移動されました。これはMesh Rendererによって統一な管理を行っています。Meshの導入階段のはじめから、ライトにかかわる2号UVおよびLightmapの設定に注意しなければならない。 二、Mixed Lightingベイクモード 2.1 Mixed Lightingの三つのモード Window > Lighting > Scene のパネルで Mixed LightingにあるLighting Mode を選びます。Mixed Lightingには三つのモードがあります: 左:間接ライトだけをベイクする; 中:間接ライトとシャドーをベイクする; 右:直接ライト、間接ライト和シャドーをベイクする ミクスライトは間接ライト、直接ライト、シャドーの融合です。三つのモードはベイクライトマップが違って、ミクスライトの計算も違っています。 Baked IndirectとShadowmaskのモードでは、ミクスライトにおける直接ライトはリアルタイムに計算されたもので、それに対して間接ライトはライトマップにベイクされたものです。Shadowmaskモードでは、もう一つのシャドーライトマップがあるので、余計なメモリコストが起こります。ShadowmaskのタイプはDistance Shadowmaskの場合、シャドーライトマップとリアルタイムシャドーはShadow Distanceで設定された距離によって融合できます。Baked Indirectモードでは、静的オブジェクトはリアルタイムのシャドーしかありえない、Shadow Distanceで設定された距離に従ってシャドーなしに遷移します 。 Subtractiveモードは古いバージョンのBaked GIに似ており、そのライトもライトマップにベイクされています。Mixed Lightingの予備解決案として、ローエンドモバイルデバイスに用いられます。Subtractiveモードには、リアルタイム計算に関与するのは動的オブジェクトのリアルタイムライトと動的オブジェクトが静的オブジェクトへの投影しかありません。 2.2 Shadowmaskベイクモード 1)Mixedライトの役割 Mixedライトの静的オブジェクトへの間接ライトLightmap_lightに記録され静的オブジェクトへのシャドーはライトマップLightmap_shadowmaskに記録されています。Mixedライトによって生成されたDirect Lightingは、Lightmap_lightのIndirect Lightingと一緒に静的オブジェクトのライトを計算します;Mixedライトによって生成されたリアルタイムシャドーは、ライトマップLightmap_shadowmaskのシャドー情報と一緒に静的オブジェクトのシャドーを計算します;動的オブジェクトに対しては、リアルタイムシャドー を計算します。 ベイクされたライト情報は二つのグループのライトマップに保存され、実行中に変更せることはできませんが、Mixedライトのパラメータは(例えばDirectional LightのパラメータはTransform、Color、Intensityになる)実行中にも変更できます。 2)Shadowmaskの二つのモード Edit > Project Settings > Quality > Shadowsの設定には、Shadowmask ModeとShadow Distanceのパラメータを設置することができます。 Shadowmask ModeはShadowmaskの場合、Lightmap_shadowmaskのベイクシャドーを使用します。 Shadowmask ModeはDistance Shadowmaskの場合、設定されたShadow Distanceのパラメータに従って、リアルタイムシャドーとベイクシャドーを融合させます。距離以内に、Realtime Shadowmap、Shadow Resolutionによって設定されたシャドーの解像度を使用し;距離以外に在、Lightmap_shadowmaskのベイクシャドーを使用します。 Distance Shadowmaskのコストはより高く見えます。それは静的オブジェクトもShadowmapにおいて、リアルタイムレンダリングされたからです。太陽の位置が固定されているビッグワードシーンに対し、Distance Shadowmaskモードをお勧めします。シャドーの効果は地平線までに延長することができます。 2.3 Shadowmaskベイクの例 1)古いベイクモードで、リアルタイムシャドーとベイクシャドーの切替を実現する Shadowmaskというベイクモードが出現する前、Unity 5.5バージョンを利用してリアルタイムシャドーとベイクシャドーの切替を実現するソリューションは以下の通り: 左側:ベイクライト 右側:ベイクAOとリアルタイムライトとの融合 ベイクライト:一つのベイクライトグループ Bake_lights_Group を使って、Baked GIのプロセスに従ってライトマップをベイクします。ベイクライトグループには一つのシャドーを生成するライトが含まれています。リアルタイムのライトSunlightの強度は僅かの0.1しかなく、静的シーンが受けた動的キャラクターのシャドを描くことに用いられます。キャラクターのライトもSunlightで決められるため、キャラクターのShaderでは10倍のSunlightの強度を補充することが必要となります。 ベイクAO:も一つのベイクライトグループ BakeAO_lights_Groupを使って、AOの情報を帯びているライトマップをベイクします。ライトグループにはライトの色とAOだけをベイクされ、シャドーを生成するライトが含まれません。Sunlightはリアルタイムライトとしてシャドーをオンにし 、また全局の色を増加してベイクライトの効果と合わせます。 この方法の目的は、ベイクされたライトマップにあるシャドーを独立させるだけですが、二つのグループのライトマップのベイク、リアルタイムライトとベイクライトマップとの融合の計算、リアルタイムライトの強弱と二つ効果のライトの差の修正などのような作成プロセス面の変更とかかわっています。 2)Shadowmaskモードのメリット Unity 5.6バージョンでのShadowmaskベイクモードは、一つのグループのライトマップをベイクするだけでリアルタイムシャドーとベイクシャドー 都の切替を実現させます。Distance ShadowmaskとShadowmaskの切替を利用するだけで十分です。 左側:ShadowMaskモード;右側:Distance ShadowMaskモード Distance ShadowmaskモードではShadow Distanceを設置して、シーンのリアルタイムシャドーの範囲をコントロールできます。それは全シーンのリアルタイムシャドーより、コストがより低くなります。 左側:Distance ShadowMaskモードで、Shadow Distanceが35の効果、右側:Distance ShadowMaskモードで、Shadow Distanceが70の効果。 2.4 リアルタイムシャドー最適化の策略 Shadowmaskというベイクモードを理解した後、同時にはEdit > Project Settings > Quality > Shadowsというシャドーの設定に対してもっと深く理解できるこそ、これらのパラメータを利用してリアルタイムシャドーのコストをコントロールすることができます。 1)合理的にShadow Resolutionを設定する 実際の状況に合わせて、Shadow Resolutionの数値を設定します。設定されたシャドーの解像度が大きければ、shadowmapの帯域幅の占用は大きいです;シャドーの精度の向上に伴い、計算のコストも高くなり、それはパフォーマンスや発熱に大きな影響を与えます。 通常、Medium ResolutionまたはHigh Resolutinを設定し、シャドーの解像度はそれぞれ20482048と40964096です。Very High Resolutinはハードウェアからの最大解像度を使用するから、コストが多すぎてモバイルプラットフォームに使用することをお勧めしません。 2)合理的にShadow Distanceを設定する 実際の状況に合わせて、Shadow Distanceの数値を設定します。リアルタイムシャドーの距離は大きくなった場合、シーンにあるシャドー作成に関与する静的オブジェクトが大きくなって、これはDrawCallの増加を引き起こし、同じスクリーンで作成したメッシュが多くなります。同時に、リアルタイムシャドーの距離が大きければシャドーの効果がいいということではありません。Shadow Resolutionシャドーの解像度が変わらない場合、設置したShadow Distanceが大きいほど、シャドーの表示した質はかえって低くなっています。 3)Shadow Cascadesの使用を注意する Shadow Cascadesを使用するのは、シャドーの解像度が距離によってもっと合理的に配置できるけれども、余計なシャドー計算コストを生じます。Shadow Cascadesの設定によって、シャドーのレンダリングは対応したいくつかのブロックに分けて、近間のシャドーの解像度の占用を向上させ、それによってシャドーのギザギザ見た目を改善します。 もし、よりよいシャドー効果を求めたいと、Shadow Cascadesを使用することができます。ただし、同時にQualitySettingとGraphicSettingにある設定をオンにしないと、有効になりません。一般的にモバイルプラットフォームでShadow Cascadesを使用しないことをお勧めします。 4)Shadow ProjectionでStable Fitを使用する 全体のシャドーの解像度が変わらない場合、Shadow ProjectionのClose Fitの使用はさらに近間にあるオブジェクトのシャドー解像度を向上させ、同時にもっと高いコストが有します。モバイルプラットフォームでStable Fitを使用すると、シャドーの効果がもっと安定になります。 5)画質のレベルに合わせてシャドーの配置を制定する 実際の状況に合わせて、画質ごとに異なるシャドー構成を提供します。 下篇に続く:https://qiita.com/UWATechnology/items/9385d81e2409f2ca657c UWA Technologyは、モバイル/VRなど様々なゲーム開発者向け、パフォーマンス分析と最適化ソリューション及びコンサルティングサービスを提供している会社でございます。 今なら、UWA GOTローカルツールが15日間に無償試用できます!! よければ、ぜひ! UWA公式サイト:https://jp.uwa4d.com UWA GOT OnlineレポートDemo:https://jp.uwa4d.com/u/got/demo.html UWA公式ブログ:https://blog.jp.uwa4d.com
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Unityモバイルプラットフォームにおけるベイクの使用と最適化

前書き モバイルプラットフォームでのシーン作成の規模はますます大きくなっています。オープンパースペクティブを備えた3Dビッグワールドシーンでは、マップサイズと可視距離に対する要求がますます高まっています。これにより、地形のサイズが大きくなり、シーンオブジェクトの種類が増え、オブジェクトのモードのパッチ数や数量も増えていきます。従って、アート効果もコンソールやPC側のゲームに近づいていくと要求しています。 モバイルプラットフォームでは、Realtime Global Illuminationがまだ自由に使えられません。アートシーンのライトは主にベイク処理されたGIに基づいています。Unityバージョンのアップグレードに伴い、シーンのベイク処理プロセスはいくつかのバージョンを更新しましたが、問題もますます出てきました。Unityの公式テクニカルサポートにより、ベイク処理のプロセスでいくつかの非常に重要な部分が無視され、またUnity 2017.4にアップグレードした後、ベイク処理モードが変更されたため、この記事をまとめます。 一、Unityライトベイクシステム Unity 5.6バージョンがを例にして、ライトベイクシステムを紹介します。ほかの古いバージョンは紹介しません。 1.1 Enlightenに基づいたGIとLightmapping Workflow Unity 5.0バージョンはEnlightenに基づいたreal-time GIとベイクライトマップの処理プロセスをアップグレードしました。“Auto”モードには、プレ計算のリアルタイムGIや、静的ライトマップLightmaps、ライトプローブLight Probes、反射プローブReflection Probesなどデータが生成されています。主なアップグレード内容は以下の通り: 1)リアルタイムGIはLightsとSkylightをサポートし、自発ライトの表面をリアルタイムのライト源とさせ、ライトの色は動的オブジェクトにリアルタイムで影響を与え、動的に変更することもできます。 2)ライトマップLightmapは三つのモードがあります: "Non-directional" モードのコスト最も少なく、普通の拡散反射効果が得られる。 "Directional" モードは法線を計算でき、拡散反射と法線の効果が得られる。 "Directional Specular" モードはさらにハイライトの効果も残されている。 3)Reflection Probesは、HDR形式をサポートし、リアルタイムレンダリング、またベイクはCubeアセットとして保存されることもサポートしています。 4)SkyboxはHDR形式をサポートし、環境光の一種とされる。 Unity 5.0から、ベイクシステムはライトだけでベイク効果を作るのではなくなり、ベイクプロセスでの環境光と反射環境、また発ライトShaderのマテリアルを使用することなどにも考慮を要します。 1.2 Mixed Lighting Unity 5.6バージョンから、Baked GIはミックスライティングMixed Lightingに変更されます。Light ModeがMixedに設置されることは、ライトの静的と動的オブジェクトへの共同作用からではなく、本当に間接ライトと直接ライト、ベイクシャドーとリアルタイムシャドーを融合させることからです。 Mixed Lightingに基づき、新しいShadowmaskベイクが添加されました。ベイクシャドーとリアルタイムシャドーとの融合をサポートしています。Unity 2017以上のバージョンを使用することをお勧めします。Unity 2017.1バージョンで、ShadowmaskとDistance Shadowmask二つのモードの切り替えはQualitySettingに移動したので、QualitySettings.shadowmaskModeで修正できます。 画面左側のShadowmaskモードは完全ベイク処理されたShadowmapの効果で、画面右側のDistance ShadowmaskはリアルタイムシャドーとベイクShadowmapは設定距離に基づいた融合した効果です。 1.3 Progressive Lightmapper Unity 5.6バージョンは新しい特性Progressive Lightmapperを追加しました。これはEnlightenと全く違っている漸進的なライトスタンプの技術で、ベイク処理のプロセスを改善しました。 Progressive Lightmapperパスに基づき、漸進的に生成したライトマップをトレースして、素早くシーンのベイクライトをプレビューして、lightmapsとLight Probesを素早くベイクして、徐々に最終的なバージョンが表示して更新されました。 Enlightenに基づいたベイクはPrecomputed realtime GIを依頼して間接ライトを生成します。そのメリットは、ライトのみを変更することで新しいライトスタンプを素早く生成することです。ただし、マップを作成する段階では、さまざまな要素はシーンオブジェクトとかかわるから、Lightmap UVsのレイアウトは再び変更します。Enlightenの特性では、頻繁的にベイクを繰り返してライトスタンプを生成する必要があります。それに対し、Progressive Lightmapperという特性では、"Auto Generate"は実際に大型シーンの作成に使用できます。 Enlightenは、UVに起因する効果の欠陥を完全に避けることはできないが、Progressive Lightmapperには、UVに対する要求はより一般的に見えます: 重なるUVがなく、面積と角度のエラーが小さく、チャート間の充填間隔が十分です。Unityのバージョンアップグレードにより、Progressive Lightmapperは、より優れたソリューションとベイク効果を提供できます。たとえば、Unity2017.2で追加されたStitch Seams機能は、継ぎ目のライトを修復できます。 Progressive LightmapperはUnity 2017のすべてのバージョンでは、プレビューしかサポートしません。Unity 2018には、ベイクの使用ができるようになりました。その故、Unity 2018にアップグレードしないと、引き続きEnlightenのベイクシステムを使用しかありません。でも、Progressive Lightmapperの出現に伴い、Unityのベイクプロセスもより良い方向へと調整しています。 Unity 5.6のバージョンから、UV ControlとLightmap SettingsはLighting-ObjectのパネルからInspectorパネルのオブジェクト属性へと移動されました。これはMesh Rendererによって統一な管理を行っています。Meshの導入階段のはじめから、ライトにかかわる2号UVおよびLightmapの設定に注意しなければならない。 二、Mixed Lightingベイクモード 2.1 Mixed Lightingの三つのモード Window > Lighting > Scene のパネルで Mixed LightingにあるLighting Mode を選びます。Mixed Lightingには三つのモードがあります: 左:間接ライトだけをベイクする; 中:間接ライトとシャドーをベイクする; 右:直接ライト、間接ライト和シャドーをベイクする ミクスライトは間接ライト、直接ライト、シャドーの融合です。三つのモードはベイクライトマップが違って、ミクスライトの計算も違っています。 Baked IndirectとShadowmaskのモードでは、ミクスライトにおける直接ライトはリアルタイムに計算されたもので、それに対して間接ライトはライトマップにベイクされたものです。Shadowmaskモードでは、もう一つのシャドーライトマップがあるので、余計なメモリコストが起こります。ShadowmaskのタイプはDistance Shadowmaskの場合、シャドーライトマップとリアルタイムシャドーはShadow Distanceで設定された距離によって融合できます。Baked Indirectモードでは、静的オブジェクトはリアルタイムのシャドーしかありえない、Shadow Distanceで設定された距離に従ってシャドーなしに遷移します 。 Subtractiveモードは古いバージョンのBaked GIに似ており、そのライトもライトマップにベイクされています。Mixed Lightingの予備解決案として、ローエンドモバイルデバイスに用いられます。Subtractiveモードには、リアルタイム計算に関与するのは動的オブジェクトのリアルタイムライトと動的オブジェクトが静的オブジェクトへの投影しかありません。 2.2 Shadowmaskベイクモード 1)Mixedライトの役割 Mixedライトの静的オブジェクトへの間接ライトLightmap_lightに記録され静的オブジェクトへのシャドーはライトマップLightmap_shadowmaskに記録されています。Mixedライトによって生成されたDirect Lightingは、Lightmap_lightのIndirect Lightingと一緒に静的オブジェクトのライトを計算します;Mixedライトによって生成されたリアルタイムシャドーは、ライトマップLightmap_shadowmaskのシャドー情報と一緒に静的オブジェクトのシャドーを計算します;動的オブジェクトに対しては、リアルタイムシャドー を計算します。 ベイクされたライト情報は二つのグループのライトマップに保存され、実行中に変更せることはできませんが、Mixedライトのパラメータは(例えばDirectional LightのパラメータはTransform、Color、Intensityになる)実行中にも変更できます。 2)Shadowmaskの二つのモード Edit > Project Settings > Quality > Shadowsの設定には、Shadowmask ModeとShadow Distanceのパラメータを設置することができます。 Shadowmask ModeはShadowmaskの場合、Lightmap_shadowmaskのベイクシャドーを使用します。 Shadowmask ModeはDistance Shadowmaskの場合、設定されたShadow Distanceのパラメータに従って、リアルタイムシャドーとベイクシャドーを融合させます。距離以内に、Realtime Shadowmap、Shadow Resolutionによって設定されたシャドーの解像度を使用し;距離以外に在、Lightmap_shadowmaskのベイクシャドーを使用します。 Distance Shadowmaskのコストはより高く見えます。それは静的オブジェクトもShadowmapにおいて、リアルタイムレンダリングされたからです。太陽の位置が固定されているビッグワードシーンに対し、Distance Shadowmaskモードをお勧めします。シャドーの効果は地平線までに延長することができます。 2.3 Shadowmaskベイクの例 1)古いベイクモードで、リアルタイムシャドーとベイクシャドーの切替を実現する Shadowmaskというベイクモードが出現する前、Unity 5.5バージョンを利用してリアルタイムシャドーとベイクシャドーの切替を実現するソリューションは以下の通り: 左側:ベイクライト 右側:ベイクAOとリアルタイムライトとの融合 ベイクライト:一つのベイクライトグループ Bake_lights_Group を使って、Baked GIのプロセスに従ってライトマップをベイクします。ベイクライトグループには一つのシャドーを生成するライトが含まれています。リアルタイムのライトSunlightの強度は僅かの0.1しかなく、静的シーンが受けた動的キャラクターのシャドを描くことに用いられます。キャラクターのライトもSunlightで決められるため、キャラクターのShaderでは10倍のSunlightの強度を補充することが必要となります。 ベイクAO:も一つのベイクライトグループ BakeAO_lights_Groupを使って、AOの情報を帯びているライトマップをベイクします。ライトグループにはライトの色とAOだけをベイクされ、シャドーを生成するライトが含まれません。Sunlightはリアルタイムライトとしてシャドーをオンにし 、また全局の色を増加してベイクライトの効果と合わせます。 この方法の目的は、ベイクされたライトマップにあるシャドーを独立させるだけですが、二つのグループのライトマップのベイク、リアルタイムライトとベイクライトマップとの融合の計算、リアルタイムライトの強弱と二つ効果のライトの差の修正などのような作成プロセス面の変更とかかわっています。 2)Shadowmaskモードのメリット Unity 5.6バージョンでのShadowmaskベイクモードは、一つのグループのライトマップをベイクするだけでリアルタイムシャドーとベイクシャドー 都の切替を実現させます。Distance ShadowmaskとShadowmaskの切替を利用するだけで十分です。 左側:ShadowMaskモード;右側:Distance ShadowMaskモード Distance ShadowmaskモードではShadow Distanceを設置して、シーンのリアルタイムシャドーの範囲をコントロールできます。それは全シーンのリアルタイムシャドーより、コストがより低くなります。 左側:Distance ShadowMaskモードで、Shadow Distanceが35の効果、右側:Distance ShadowMaskモードで、Shadow Distanceが70の効果。 2.4 リアルタイムシャドー最適化の策略 Shadowmaskというベイクモードを理解した後、同時にはEdit > Project Settings > Quality > Shadowsというシャドーの設定に対してもっと深く理解できるこそ、これらのパラメータを利用してリアルタイムシャドーのコストをコントロールすることができます。 1)合理的にShadow Resolutionを設定する 実際の状況に合わせて、Shadow Resolutionの数値を設定します。設定されたシャドーの解像度が大きければ、shadowmapの帯域幅の占用は大きいです;シャドーの精度の向上に伴い、計算のコストも高くなり、それはパフォーマンスや発熱に大きな影響を与えます。 通常、Medium ResolutionまたはHigh Resolutinを設定し、シャドーの解像度はそれぞれ20482048と40964096です。Very High Resolutinはハードウェアからの最大解像度を使用するから、コストが多すぎてモバイルプラットフォームに使用することをお勧めしません。 2)合理的にShadow Distanceを設定する 実際の状況に合わせて、Shadow Distanceの数値を設定します。リアルタイムシャドーの距離は大きくなった場合、シーンにあるシャドー作成に関与する静的オブジェクトが大きくなって、これはDrawCallの増加を引き起こし、同じスクリーンで作成したメッシュが多くなります。同時に、リアルタイムシャドーの距離が大きければシャドーの効果がいいということではありません。Shadow Resolutionシャドーの解像度が変わらない場合、設置したShadow Distanceが大きいほど、シャドーの表示した質はかえって低くなっています。 3)Shadow Cascadesの使用を注意する Shadow Cascadesを使用するのは、シャドーの解像度が距離によってもっと合理的に配置できるけれども、余計なシャドー計算コストを生じます。Shadow Cascadesの設定によって、シャドーのレンダリングは対応したいくつかのブロックに分けて、近間のシャドーの解像度の占用を向上させ、それによってシャドーのギザギザ見た目を改善します。 もし、よりよいシャドー効果を求めたいと、Shadow Cascadesを使用することができます。ただし、同時にQualitySettingとGraphicSettingにある設定をオンにしないと、有効になりません。一般的にモバイルプラットフォームでShadow Cascadesを使用しないことをお勧めします。 4)Shadow ProjectionでStable Fitを使用する 全体のシャドーの解像度が変わらない場合、Shadow ProjectionのClose Fitの使用はさらに近間にあるオブジェクトのシャドー解像度を向上させ、同時にもっと高いコストが有します。モバイルプラットフォームでStable Fitを使用すると、シャドーの効果がもっと安定になります。 5)画質のレベルに合わせてシャドーの配置を制定する 実際の状況に合わせて、画質ごとに異なるシャドー構成を提供します。 下篇に続く UWA Technologyは、モバイル/VRなど様々なゲーム開発者向け、パフォーマンス分析と最適化ソリューション及びコンサルティングサービスを提供している会社でございます。 今なら、UWA GOTローカルツールが15日間に無償試用できます!! よければ、ぜひ! UWA公式サイト:https://jp.uwa4d.com UWA GOT OnlineレポートDemo:https://jp.uwa4d.com/u/got/demo.html UWA公式ブログ:https://blog.jp.uwa4d.com
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

GPU Skinningは有効にならない

今日の話題: 1)GPU Skinningは有効になりません 2)convex hullを選択することによる警告表示 3)Unity 2019 画像圧縮フォーマットの選択 4)AndroidでExportしたパッケージが圧縮への影響 5)AndroidのメモリにおけるUnknown部分のリーク Rendering Q:Unityバージョン:2019.3.0f6 Shader:GPUSkinningUnlitSkin2 テストScene :Adam_Player_Crowd テストスマホ :Samsung S5 質問です。GitのGPU Skinningを使用して、PCでテストされたDrawCall数は減少しています。同時にAnimator.updateのコストはなくて、Instancingがあります。しかし、Samaung S5にbuildして、Unity Profilerで確認すると、Animator.updateのコストもなくて、DrawCallも減少しておらず、さらにInstancingもありません。これはどこの部分がよく設定されなかったということでしょうか。 またGPU SkinningはInstancingを使用したら、OpenGL ES 3.0にしか使えませんか。またはOpenGL ES 2.0にも使えますか? PC Samsung S5 A:公式サイトのドキュメントを参照して、以下のように、OpenGL ES 2.0をサポートしません。 Mesh Q:ある複雑なモデルに警告が表示されました: Couldn’t create a Convex Mesh from source mesh “**” within the maximum polygons limit (256). The partial hull will be used. Consider simplifying your mesh. SimpleLodでポリリデュースしても、256個のポリにリデュースされなかったが、この警告は表示しなくなりました。一体この警告はどういうことでしょうか。モデリングする時どうすれば避けられますか。 A: 生成されたConvex Meshには、せいぜい255個の三角形しか含めることができません。元のモデルは複雑すぎて、255個の三角形では足りなくて、アウトラインを表すのに十分ではありません。 Texture Q:画像圧縮フォーマットの選択について、この前のブログには、AndroidならETC2を選択し、iosならPVRTC選択すると推薦してくれましたが。現在のプロジェクトはUnity 2019.2.21f1までにアップグレードして、もっと多くのフォーマットが増えています。それに、以下のいくつかの質問があります:(Unityバージョン:2019.2.21f1) 1. 新しいバージョンUnity 2019におけるFormatに関して、Android とios にそれぞれどういうようなフォーマットを選択すべきか? 2. AndroidにはASTCフォーマットを使用できますか。市場占有率はどれぐらいでしょうか。 3. Resize Algorithm、Override ETC2 fallback、それぞれの意味および選択基準は? 4. HDR 、6X6、10X10、どちらを選択したら良いですか。 ご回答お願い致します。ありがとうございます。 A1:個人的には Q1、iosならASTCを選択し、AndroidならETC2を選択することをお勧めします; Q3&4については、Textureの公式ドキュメントを参照してください。大体わかった上に、プロジェクトに応じて、きっとよりよくの選択があるはずです。 A2:現在txの新しいプロジェクトには、すでにASTCの使用が普及し始まった。したがってすべてASTCを選択します。2019でimportの時にASTCをデフォルトと設定したら、特にイルミネーションのスタンプと法線には効果があります。Unityのデフォルトは6x6です、プロジェクトに応じてほかのサイズも選択できます。 AssetBundle Q:Android Gradleのプロジェクトに、build.gradleは以下のような配置があります: aaptOptions { noCompress ‘.unity3d’, ‘.ress’, ‘.resource’, ‘.obb’ } 現在のテストでは、AssetBundleが非圧縮に配置されていない場合、パッケージ本体は少し縮小されます。これは、AssetBundleに対するLZMA圧縮の効果とほぼ同じです。圧縮されたパッケージがこの方法で2回圧縮された場合、解凍プロセスはどのようになりますか?実行時のパフォーマンスにどんな影響がありますか? 今、私の個人的な経験に基づいて、AndroidのAPKパッケージはインストール時に解凍されると推測します。つまり、インストールが完了すると、2回圧縮されているかどうかに関係なく、ハードディスク内で同じように表示されます。経験のある誰かにも説明してもらいたいと思います。 A:AndroidのAPKパッケージはインストール後に解凍されないため、理論的には、実行時に「2回圧縮」のBundleを取得するには解凍手順が必要です。 実際、「2回圧縮」に変更すると、AssetBundleのローディングとAssetBundleからのアセットのローディングにかかる時間が大幅に長くなったという開発者からのフィードバックがあります。 したがって、変更する前に、自らのプロジェクトにおけるAssetBundleアセットを使用してテストを実行してみてください。そして、この2つの部分が時間コストにおける相違が明白かどうかを確認することをお勧めします。 Memory Q: 一般的にAndroidのメモリにおけるUnknownの部分は何ですか?一つのシーンに何度も出入りすることで、Unityのアセットは正常にリークすることなく解放されますが、このUnknownのものは増え続けています。 A:この部分はmmapを介して分配された匿名メモリです。LuaJITを用いて、Luaメモリはここに存在しています;従来のLuaメモリはmallocを介して分配されて、Native Heapに現れます;もう一つの大部分はMonoメモリです。Boehm GCはAndroidにもmmapによって分配されました;または第三者におけるsoライブラリのメモリ分配です。 UWA公式サイト:https://jp.uwa4d.com UWA公式ブログ:https://blog.jp.uwa4d.com UWA公式Q&Aコミュニティ(中国語注意):https://answer.uwa4d.com!
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【Unity】索敵範囲外を暗くする表現の実装

自作ゲームに索敵要素を取り入れてキャラクターの視界外を暗くしたい、そんなときの実装の一例を書いてみます。 環境 Unity 2020.3.20f1 Universal RP 10.6.0 手法 影を描画する手法のひとつであるステンシルシャドウボリュームを応用してみます。 ステンシルシャドウボリュームとは、影を落とすオブジェクトをライト方向から見たときの輪郭となる頂点を引き延ばし、その引き延ばされてできた領域内を影として描画する手法です。 ステンシルバッファを利用するためこの名前がついています。 こちらのサイトに概念がわかりやすくまとめられています。 トゥーン調のキャラクターの顔に落ちる髪の影を(ライトによってできる影だと形を制御しにくいため)ステンシルシャドウボリュームの応用で理想的な形に出す、というような使われ方もします。 実装 実装といってもコードはほぼ書かずに実現できます。 純粋なステンシルシャドウボリュームではなく任意の範囲を影にしたいため、その範囲を覆うメッシュをまず用意します。 わかりやすいようCubeのメッシュで見ていきます。 CubeオブジェクトのLayerは新しく追加したものに変更します。ここでは追加Layer名をCoverとしています。 影を描画するべきCubeの内側の範囲は、表面と裏面の差分で求まります。 差分を描画するために、ForwardRendererDataファイル(デフォルト名はUniversalRenderPipelineAsset_Renderer.asset)をインスペクタから編集します。 Coverオブジェクトは通常描画しないので、FilteringプルダウンのCoverのチェックをはずす Coverオブジェクトの裏面部分のステンシル値を+1するRendererFeatureを追加 Coverオブジェクトの表面部分のステンシル値を-1するRendererFeatureを追加 ステンシル値が0未満の部分を描画するRendererFeatureを追加 追加した各RendererFeatureの設定は以下のようになります。 裏面/表面の指定は RendererFeatureでオーバーライドするマテリアルのシェーダでやっています。 裏面のみを通すシェーダコードは以下です。表面のみを通すには"Cull Front"を"Cull Back"と書き換えるだけです。 CullFront.shader Shader "Custom/CullFront" { SubShader { Tags { "RenderType" = "Opaque" } Pass { ZWrite Off Cull Front Blend Zero One } } } 3つめのRendererFeatureでステンシルが負の値の部分を描画して完成です。 もちろん表現はオーバーライドするマテリアルのシェーダ次第でなんとでも。 メッシュ生成 動的にメッシュ生成する場合、UnityのMeshクラスには三角形化した配列で渡します。 ”三角形分割 耳刈り取り法” とかで調べると実装法がいろいろ出てきます ちなみに、ディファードレンダリングであればワールド座標を格納したGBufferと暗くしたい範囲を書き出したテクスチャを使って.. というアプローチもでき、複雑なメッシュを生成するより楽かもしれません。 UnivarsalRPはいまのところ(ver 10.6.0)ディファード非対応なので、やるならレンダーパイプラインに手を加えたりが必要です。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

UnityのHololens2でもっと遠くのオブジェクトをつかめるようになりたい

Hololens2で遠くのオブジェクトが掴めない そもそもHololensでは指の先からちょっと線が出てて、それに触れているオブジェクトはつかめたりできる Unity上のエディタでも、エミュレータでも、実機でも、だいたい5.5mくらいまではつかめるがそれ以上離れちゃうとつかめない 参考サイト https://qiita.com/jyouryuusui/items/1d69342b6aaf9553f1bb https://microsoft.github.io/MixedRealityToolkit-Unity/Documentation/Input/Pointers.html https://bluebirdofoz.hatenablog.com/entry/2020/02/07/095226 Unity初心者の自分では、ここらへん見てすぐに見つけられなかったので残しておきます。 設定場所 シーンに追加されている「MixesRealityToolkit」を選択 ここらへんは他の設定でも使うのでわかるっちゃわかった それぞれcloneしまくって編集できるようにする 「DefaultControllerPointer」をこれもコピーしておいてから、ダブルクリックし編集します 「Pointer Extent」あたりの数字を増やせばできた デフォルト値は5.5だったので、やはり手からの距離が5.5mが範囲だったようですね
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Unity仕事メモ

■カメラ座標を移動できない    CinemachineのVirtual Cameraが座標を上書きするらしい  ■参考サイト  https://tsubakit1.hateblo.jp/entry/2018/09/08/223556 ■指定コミット番号をチェリーピック git cherry-pick [コミットID]  ■参考サイト  https://www.sejuku.net/blog/71544 ■コルーチンをawaitしたい  ■参考サイト  https://qiita.com/Euglenach/items/6579854924036deee7bc
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Unity アプリケーション開発時に役立つショートカット 【 10選 】

はじめに Unity を使ってアプリケーション開発を行う際に役立つショートカット ( 標準ショートカット ) を紹介したいと思います。 目次 1. グローバルメニューの選択 2. トランスフォームツール切り替え 3. オブジェクトの 展開 / 折り畳み 4. 選択オブジェクトへのフォーカス 5. オブジェクトの 表示 / 非表示 6. 2Dモードの 有効化 / 無効化 7. 再生モード ( Play / Stop ) 8. コンソールウィンドウの有効化 9. ビルドウィンドウ立ち上げ 10. 新規オブジェクト作成 1. グローバルメニューの選択 ショートカット : Alt + (グローバルメニュー頭文字 ex. E[Edit]) Alt + E → Edit メニューを開く Alt + F → File メニューを開く メニューが開いた後、選択したいボタンの頭文字を入力するとカーソル移動も可能です。 グローバルメニューを閉じる際は Esc (エスケープ) ボタンを押します。 2. トランスフォームツール切り替え トランスフォームツールは、シーンビューで使用できるオブジェクト操作用ツールです。 アイコン ツール名 概要 ショートカット Hand Tool シーン内をつまみながら移動できるツール Q Move Tool シーン内のオブジェクトの位置を調整するツール W Rotate Tool シーン内のオブジェクトの回転を調整するツール E Scale Tool シーン内のオブジェクトのスケールを調整するツール R Move , Rotate or Scale Tool 選択したオブジェクトの位置と回転、もしくはスケールを調整するツール T 3. オブジェクトの 展開 / 折り畳み オブジェクトの子要素を展開する > オブジェクトの子要素を折りたたむ < 4. 選択オブジェクトへのフォーカス ショートカット : Shift + F フォーカスがあっていない場合、ショートカット一発で操作したいオブジェクトへフォーカスが当てられるので便利です。 5. オブジェクトの 表示 / 非表示 ショートカット : H サンプルプロジェクト等を閲覧する際、ヒエラルキーウィンドウのゲームオブジェクトがシーンウィンドウのどのオブジェクトに紐付いているのか、確認したい際に便利なショートカットです。 6. 2Dモードの 有効化 / 無効化 UI の 2次元の調整をする際に、3Dだと少し不便なので、2Dモードで編集するのに使っています。たまに、position.z がズレていて、とんでもないことになるのが玉に瑕。 ショートカット : 2 7. 再生モード ( Play / Stop ) ショートカット : Ctrl + P 再生モードの Play / Stop をトグルで実行してくれるショートカットです。 8. コンソールウィンドウの有効化 コンソールウィンドウをすぐ確認したい時に、コマンド一発で表示されるので便利です。 ショートカット : Ctrl + Shift + C 9. ビルドウィンドウ立ち上げ ビルドウィンドウ立ち上げ、慣れるとわざわざグローバルメニューから開くことは一切無くなります。超絶便利。 ショートカット : Shift + Ctrl + B 10. 新規オブジェクト作成 空のオブジェクトを作成したい際に便利なショートカットです。 最上位の階層に新規オブジェクトを生成 ショートカット : Ctrl + Shift + N 選択中のオブジェクトの子オブジェクトを生成 ショートカット : Ctrl + Alt + N 終わりに Unity Editor 標準で設定されているショートカットは、Edit > Shortcuts から確認できます。独自のショートカットキー割当も可能です。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Unity 初心者がまず抑えておきたい開発効率を高めるショートカット 10選

はじめに Unity を使ってアプリケーション開発を行う際に役立つショートカット ( 標準ショートカット ) を紹介したいと思います。 目次 1. グローバルメニューの選択 2. トランスフォームツール切り替え 3. オブジェクトの 展開 / 折り畳み 4. 選択オブジェクトへのフォーカス 5. オブジェクトの 表示 / 非表示 6. 2Dモードの 有効化 / 無効化 7. 再生モード ( Play / Stop ) 8. コンソールウィンドウの有効化 9. ビルドウィンドウ立ち上げ 10. 新規オブジェクト作成 1. グローバルメニューの選択 ショートカット : Alt + (グローバルメニュー頭文字 ex. E[Edit]) Alt + E → Edit メニューを開く Alt + F → File メニューを開く メニューが開いた後、選択したいボタンの頭文字を入力するとカーソル移動も可能です。 グローバルメニューを閉じる際は Esc (エスケープ) ボタンを押します。 2. トランスフォームツール切り替え トランスフォームツールは、シーンビューで使用できるオブジェクト操作用ツールです。 アイコン ツール名 概要 ショートカット Hand Tool シーン内をつまみながら移動できるツール Q Move Tool シーン内のオブジェクトの位置を調整するツール W Rotate Tool シーン内のオブジェクトの回転を調整するツール E Scale Tool シーン内のオブジェクトのスケールを調整するツール R Move , Rotate or Scale Tool 選択したオブジェクトの位置と回転、もしくはスケールを調整するツール T 3. オブジェクトの 展開 / 折り畳み オブジェクトの子要素を展開する > オブジェクトの子要素を折りたたむ < 4. 選択オブジェクトへのフォーカス ショートカット : Shift + F フォーカスがあっていない場合、ショートカット一発で操作したいオブジェクトへフォーカスが当てられるので便利です。 5. オブジェクトの 表示 / 非表示 ショートカット : H サンプルプロジェクト等を閲覧する際、ヒエラルキーウィンドウのゲームオブジェクトがシーンウィンドウのどのオブジェクトに紐付いているのか、確認したい際に便利なショートカットです。 6. 2Dモードの 有効化 / 無効化 UI の 2次元の調整をする際に、3Dだと少し不便なので、2Dモードで編集するのに使っています。たまに、position.z がズレていて、とんでもないことになるのが玉に瑕。 ショートカット : 2 7. 再生モード ( Play / Stop ) ショートカット : Ctrl + P 再生モードの Play / Stop をトグルで実行してくれるショートカットです。 8. コンソールウィンドウの有効化 コンソールウィンドウをすぐ確認したい時に、コマンド一発で表示されるので便利です。 ショートカット : Ctrl + Shift + C 9. ビルドウィンドウ立ち上げ ビルドウィンドウ立ち上げ、慣れるとわざわざグローバルメニューから開くことは一切無くなります。超絶便利。 ショートカット : Shift + Ctrl + B 10. 新規オブジェクト作成 空のオブジェクトを作成したい際に便利なショートカットです。 最上位の階層に新規オブジェクトを生成 ショートカット : Ctrl + Shift + N 選択中のオブジェクトの子オブジェクトを生成 ショートカット : Ctrl + Alt + N 終わりに Unity Editor 標準で設定されているショートカットは、Edit > Shortcuts から確認できます。独自のショートカットキー割当も可能です。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

unityでwebGLビルドした際のエラーと解決策

はじめに Unityで作ったプロジェクトをwebGLビルドした際に直面したエラーまとめ (追記していきます) エラー 文字が消える テキストのフォントがデフォルトのArialのままになっている。 Arielフォントは日本語に対応していないので変えるのが吉。 Pro Builderで製作したオブジェクトが表示されない Pro Builderのバージョンをアップデートしたら直った。 https://forum.unity.com/threads/probuilder-on-webgl-nullreferenceexception-for-simple-generateplane.807081/
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

UnityHDRPでUnityちゃんを入れたら緑色になった

Unityちゃんが緑色になった 今回の記事はこのUnityちゃんを救ってあげる記事です。 ピッコロやんけ。 今回使用したアセット下記のアセットです。 直し方 Unityちゃんに使用されているマテリアルを見つけて, Subsurfaceの項目を0にするといいです。 全部変更してあげるとかわいいUnityちゃんになります。 原因追及 とまぁここまでで終わらせてしまう訳にもいかず,原因追及を始めました。 というわけで公式へGO!! 載ってない……!? それならとマニュアル内検索をしたものの,完全一致するものはなし。 というか「Subsurface」と「Mask」の両方の単語を含んだ記事は2桁もなかった。 むむ?と頭を悩ませた結果,よくヒットする「Subsurface Scattering」について調べたところこれが成功。 Subsurface Maskとはこれの可視性についてのものらしい。 0 = 見えない 1 = 完全に見える といった感じ。 ではSubsurface Scatteringとはなんぞやと。 検索の結果この記事を発見。 解決しました。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

UnityHDRPでUnityちゃんを入れたらマテリアルが緑色になった

Unityちゃんが緑色になった 今回の記事はこのUnityちゃんを救ってあげる記事です。 ピッコロやんけ。 今回使用したアセット下記のアセットです。 直し方 Unityちゃんに使用されているマテリアルを見つけて, Subsurfaceの項目を0にするといいです。 全部変更してあげるとかわいいUnityちゃんになります。 原因追及 とまぁここまでで終わらせてしまう訳にもいかず,原因追及を始めました。 というわけで公式へGO!! 載ってない……!? それならとマニュアル内検索をしたものの,完全一致するものはなし。 というか「Subsurface」と「Mask」の両方の単語を含んだ記事は2桁もなかった。 むむ?と頭を悩ませた結果,よくヒットする「Subsurface Scattering」について調べたところこれが成功。 Subsurface Maskとはこれの可視性についてのものらしい。 0 = 見えない 1 = 完全に見える といった感じ。 ではSubsurface Scatteringとはなんぞやと。 検索の結果この記事を発見。 解決しました。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む