130.3K Views
July 26, 21
スライド概要
講演動画はこちら:
https://youtu.be/GEl8AfgI35g
講演者:
小林 浩之(Epic Games Japan)
https://twitter.com/hannover_bloss
本スライドは2021年7月25日に行われたオンライン勉強会「UE4 Character Art Dive Online」の講演資料となります。
イベントについてはこちら:
https://www.unrealengine.com/ja/blog/epicgamesjapan-onlinelearning-13
Unreal Engineを開発・提供しているエピック ゲームズ ジャパンによる公式アカウントです。 勉強会や配信などで行った講演資料を公開しています。 公式サイトはこちら https://www.unrealengine.com/ja/
UE4 Hair & Groomでの リアルタイムファーレンダリング Epic Games Japan / Technical Artist DevRel 小林 浩之
自己紹介 小林浩之 Epic Games Japan / Technical Artist UDNなどでライセンシー向けのサポート Twitter / はのば@hannover_bloss
Hair Groom導入部分 ちろナモ様の記事 https://qiita.com/chironamo/items/41d24d59bcab605e6475 公式ドキュメント クイックスタート https://docs.unrealengine.com/4.26/ja/WorkingWithContent/Hair/QuickStart/
もう少し踏み込んだお話
アジェンダ セットアップ Groom Asset ライティング 最適化
アジェンダ セットアップ Groom Asset ライティング 最適化
検証環境 GPU RTX2080ti CPU AMD Ryzen 9 3950X RAM 64.0 GB Unreal Engine 4.26.2
セットアップ Hair GroomはHoudiniで作成
セットアップ UVやBaseColorなどのアトリビュートがインポート可能 命名規則に準じて名前を付けておく
セットアップ 命名規則 https://docs.unrealengine.com/4.26/ja/WorkingWithContent/Hair/AlembicForGrooms/
セットアップ Materialから各種アトリビュートへアクセス可能 ストランド毎に色のバラつきを表現するため、Base Colorをマスクとして使用
セットアップ 模様などのBase Colorはテクスチャマッピング UVにもMaterialからアクセス可能
セットアップ インポートに時間がかかるため、Groomアセットは部位ごとに分けて管理 頭部の41万本、370万頂点で5~6分
アジェンダ セットアップ Groom Asset ライティング 最適化
Groom Asset Showリスト Hairの各アトリビュートを可視化
Groom Asset Showリスト Hairの各アトリビュートを可視化 Guide
Groom Asset Showリスト Hairの各アトリビュートを可視化 Guide Influence
Groom Asset Showリスト Hairの各アトリビュートを可視化 UV
Groom Asset Showリスト Hairの各アトリビュートを可視化 Root UV
Groom Asset Showリスト Hairの各アトリビュートを可視化 Root UDIM
Groom Asset Showリスト Hairの各アトリビュートを可視化 Seed
Groom Asset Showリスト Hairの各アトリビュートを可視化 Dimension
Groom Asset Showリスト Hairの各アトリビュートを可視化 Radius Variation
Groom Asset Showリスト Hairの各アトリビュートを可視化 Base Color
Groom Asset Showリスト Hairの各アトリビュートを可視化 Roughness
Groom Asset Showリスト Hairの各アトリビュートを可視化 Vis Color
Groom Asset Showリスト Hairの各アトリビュートを可視化 Cards Guide
Groom Asset LOD
Groom Asset - LOD Curve、Vertex Decimation Curve Decimation Curveの本数を減らす
Groom Asset - LOD Curve、Vertex Decimation Vertex Decimation Vertexの数を減らす
Groom Asset - LOD Angular Threshold Vertex Decimationで頂点を削除する時の角度閾値 値が大きいほど削除される
Groom Asset - LOD Thickness Scale Curveを減らした分太くして隙間を補う
Groom Asset - LOD Visible Screen Size
Groom Asset - LOD Geometry Type ジオメトリのタイプを選択する Strands or Cards or Meshes
Groom Asset - LOD LODSelection Type LODの選択をCPUで行うかGPUで行うかを設定 CPU すべてのGeometry Typeに対応 GPU Groomのクラスターデータを使用してより細かい精度で行う カード、メッシュは非対応
Groom Asset - LOD Minimum LOD 最小LODを指定する プラットフォームごとに設定可能 Disable Below Min Lod Stripping Minimum LOD未満のLODを削除 プラットフォームごとに設定可能
Groom Asset Interporation
Groom Asset - Interporation Curve、Vertex Decimation
Groom Asset - Interporation Override Guide ガイドとして使用されるストランドのサブセットを選択し インポートされたガイドをオーバーライドする
Groom Asset - Interporation Hair to Guide Density ガイドとして使用されるストランドの比率
Groom Asset - Interporation Interpolation Quality ストランドへのガイドモーションを補間する際の補間品質
Groom Asset - Interporation Interpolation Distance ガイドとストランドをペアリングする際に使用されるメトリックタイプ Parametric ・カーブのパラメトリック距離によって補間 Root ・ストランドルートとガイドルート間の距離によって補間 Index ・ストランドとガイドのVertex Indexによって補間
Groom Asset - Interporation RBF Interpolation Radial Basis Function(RBF) を補間に使用
Groom Asset - Interporation Hair Interpolation Type グルームがスケルタルメッシュにバインドされる時に使用する補間のタイプ Rigid Transform: 補間中はスキンのトライアングルに最も近いルートの移動のみを使用 Offset Transform: 補間中はスキンのトライアングルに最も近いルートの移動のみを使用 Smooth Transform: 補間中はスキンのトライアングルに最も近いルートの移動と ガイドから計算されたスムーズな回転を使用
Groom Asset Strands
Groom Asset - Strands Material ストランドで使用するマテリアル
Groom Asset - Strands Hair Width ストランドの幅(太さ)を変更 インポートされたグルームのデフォルト値
Groom Asset - Strands Hair Root Scale ヘアの根本の太さ Hair Tip Scale ヘアの先端の太さ
Groom Asset - Strands Hair Shadow Density シャドウおよびトランスミッションの強弱がグルーム全体で均一になるよう ヘアの密度をスケーリングする
Groom Asset - Strands Hair Raytracing Radius Scale レイトレースされたシャドウイングが使用される場合に ストランドの幅をスケーリングする Use Hair Raytracing Geometry ヘアのレイトレーシングレンダリングを有効にする
Groom Asset - Strands Voxelize ライティング計算のためにボクセル化するかどうか
Groom Asset - Strands Use Stable Rasterization ストランドのノイズを抑えるが、やや厚めに表示される
Groom Asset - Strands Scatter Scene Lighting シーンのライティングを光源としてストランドで使用する まつ毛や産毛などの非常に短い髪向け
Groom Asset Cards
Groom Asset - Cards Source Type Procedual カードメッシュをエンジン内で自動生成する 実験的機能 Imported インポートしたメッシュを使用
Groom Asset - Cards プロシージャル生成 Generation Type Use Guides ガイドを使用してカードを生成 Cards Count パラメータで設定した数でカードを生成
Groom Asset - Cards プロシージャル生成 Cluster Type クラスターを生成する際の精度
Groom Asset - Cards プロシージャル生成 Min Segment Length カードのセグメント同士の最小距離 Angular Threshold カードのセグメント同士の最大角度
Groom Asset - Cards プロシージャル生成 Min Cards Length この閾値より短いカードを削除する Max Cards Length この閾値より長いカードを削除する
Groom Asset - Cards プロシージャル生成 Atlas Max Resolution 生成されるカードアトラスの最大解像度 Pixel Per Centimeters カードアトラスのピクセル精度 Length Texture Count 生成されるクラスターのバリエーション数
Groom Asset - Cards Textures Hair Attributesノードに送られる各種ア トリビュートテクスチャ
Groom Asset Meshes
Groom Asset - Meshes Material Imported Mesh
Groom Asset - Meshes Textures
Groom Asset - Meshes Create Strands Texturesから 各種アトリビュートテクスチャを生成
Groom Asset Materials
Groom Asset - Materials Materialsで設定したマテリアルが各項目から選択できる Strandsの場合、Used With Hair Strandsフラグが必要
Groom Asset Physics
Groom Asset - Physics Enable Smulation グルームのシミュレーションを有効にする
Groom Asset - Physics Niagara Solver シミュレーションに使用するナイアガラソルバを選択 ● Cosserate Rods ● Angular Springs ● Custom Solver Custom System Custom Solverで使用するナイアガラソルバを選択
Groom Asset - Physics Sub Steps フレームごとに実行されるサブステップの数 Iteration Count ソルバのイテレーション数
Groom Asset - Physics Gravity Vector 重力の加速度ベクター (cm/s2) Air Drag 空気抗力に使用する 0 から 1 の間の係数 Air Velocity 周囲の空気の速度 (cm/s)
Groom Asset - Physics Bend Constraint Bend(曲げ)に関するパラメーター群
Groom Asset - Physics Stretch Constraint Stretch(伸縮)に関するパラメーター群
Groom Asset - Physics Collision Constraint Collosionに関するパラメーター群
Groom Asset - Physics Strands Parameters Strandsに関するパラメーター群
アジェンダ セットアップ Groom Asset ライティング 最適化
ライティング ShadowやAnti-Aliasing、透過率を計算するためにCustom Render Pathを使用 Pixel内でストランドを複数回サンプル r.HairStrands.DebugMode 5で可視化
ライティング 3つのレンダリングモード ● MSAA-ed Visibility Buffer ● Per Pixel Linked List ● Raster Compute
ライティング MSAA-ed Visibility Buffer デフォルト設定
ライティング Per Pixel Linked List r.HairStrands.Visibility.PPLL 1で有効 処理負荷が高く、映像向け
ライティング Raster Compute r.HairStrands.Visibility.ComputeRaster 1で有効 比較的負荷が軽い
ライティング ● ● ● ● ● Shadow Deep Shadow Voxel Tracing Sky Lighting Ray Tracing
Shadow Opaque → Hair シャドウマップ
Shadow Hair → Oapque Deep Shadow Voxel Tracing
Shadow Hair → Hair Deep Shadow Voxel Tracing
Deep Shadow Hair専用のシャドウマップを生成する 各ライトの設定からon/off可能
Deep Shadow Deep Opacity Map 4レイヤーのシャドウマップ 階層ごとにヘアの密度を格納 Front Depth Layer 0 Layer 1 Layer 2
Deep Shadow 生成されたシャドウマップの可視化 r.HairStrands.DebugMode 4
Deep Shadow 解像度の変更 r.HairStrands.DeepShadow.Resolution 512 2048
Deep Shadow コンソールコマンドからシャドウマップのPCFフィルタを調整可能 Hair→Hair r.HairStrands.DeepShadow.KernelType 0~4 Hair→Opaque r.HairStrands.DeepShadow.ShadowMaskKernelType 0~4
Deep Shadow Hair→Hair r.HairStrands.DeepShadow.KernelType 0~4 0 = Linear 1 = 2x2 PCF Kernel 2 = 6x4 PCF Kernel 3 = PCSS 4 = 6x6 PCF Kernel Linear
Deep Shadow Hair→Hair r.HairStrands.DeepShadow.KernelType 0~4 0 = Linear 1 = 2x2 PCF Kernel 2 = 6x4 PCF Kernel 3 = PCSS 4 = 6x6 PCF Kernel 2x2 PCF Kernel
Deep Shadow Hair→Hair r.HairStrands.DeepShadow.KernelType 0~4 0 = Linear 1 = 2x2 PCF Kernel 2 = 6x4 PCF Kernel 3 = PCSS 4 = 6x6 PCF Kernel 6x4 PCF Kernel
Deep Shadow Hair→Hair r.HairStrands.DeepShadow.KernelType 0~4 0 = Linear 1 = 2x2 PCF Kernel 2 = 6x4 PCF Kernel 3 = PCSS 4 = 6x6 PCF Kernel PCSS
Deep Shadow Hair→Hair r.HairStrands.DeepShadow.KernelType 0~4 0 = Linear 1 = 2x2 PCF Kernel 2 = 6x4 PCF Kernel 3 = PCSS 4 = 6x6 PCF Kernel 6x6 PCF Kernel
Deep Shadow Hair→Opaque r.HairStrands.DeepShadow.ShadowMaskKernelType 0~4 0 = 2x2 PCF Kernel 1 = 4x4 PCF Kernel 2 = 8 Gaussian PCF Kernel 3 = 16 Gaussian PCF Kernel 4 = 8 Gaussian with Transmittance 2x2 PCF Kernel
Deep Shadow Hair→Opaque r.HairStrands.DeepShadow.ShadowMaskKernelType 0~4 0 = 2x2 PCF Kernel 1 = 4x4 PCF Kernel 2 = 8 Gaussian PCF Kernel 3 = 16 Gaussian PCF Kernel 4 = 8 Gaussian with Transmittance 4x4 PCF Kernel
Deep Shadow Hair→Opaque r.HairStrands.DeepShadow.ShadowMaskKernelType 0~4 0 = 2x2 PCF Kernel 1 = 4x4 PCF Kernel 2 = 8 Gaussian PCF Kernel 3 = 16 Gaussian PCF Kernel 4 = 8 Gaussian with Transmittance 8 Gaussian PCF Kernel
Deep Shadow Hair→Opaque r.HairStrands.DeepShadow.ShadowMaskKernelType 0~4 0 = 2x2 PCF Kernel 1 = 4x4 PCF Kernel 2 = 8 Gaussian PCF Kernel 3 = 16 Gaussian PCF Kernel 4 = 8 Gaussian with Transmittance 16 Gaussian PCF Kernel
Deep Shadow Hair→Opaque r.HairStrands.DeepShadow.ShadowMaskKernelType 0~4 0 = 2x2 PCF Kernel 1 = 4x4 PCF Kernel 2 = 8 Gaussian PCF Kernel 3 = 16 Gaussian PCF Kernel 4 = 8 Gaussian with Transmittance 8 Gaussian with Transmittance
Voxel Tracing Voxel化したヘアのDensity Volumeを使用 Sky Lightや複数ライトの計算
Voxel Tracing ボクセルサイズの変更 r.HairStrands.Voxelization.Virtual.VoxelWorldSize 0.15 0.3
Voxel Tracing ボクセルの可視化 r.HairStrands.DebugMode 8 r.ShaderPrintEnable 1
Voxel Tracing シャドウはDeep Shadowがオフの場合Voxel Tracingが行われる Deep Shadow Voxel Tracing
Voxel Tracing ノイズ抑制 r.HairStrands.Voxelization.Raymarching.SteppingScale 1.15 1.0
Sky Lighting 複数のIntegration Typeが選べる r.HairStrands.SkyLighting.IntegrationType (0~2) 0 = 1と2の中間程度 若干高負荷 1 = 正確な計算 高負荷 2 = Occlusionが不正確 低負荷
Sky Lighting 複数のIntegration Typeが選べる r.HairStrands.SkyLighting.IntegrationType (0~2) IntegrationType 2
Sky Lighting 複数のIntegration Typeが選べる r.HairStrands.SkyLighting.IntegrationType (0~2) IntegrationType 1
Sky Lighting 複数のIntegration Typeが選べる r.HairStrands.SkyLighting.IntegrationType (0~2) IntegrationType 0
Ray Tracing アセットまたはアクタからUse hair Raytracing Geometryにチェック ライト側はDeep Shadowをオフ
Ray Tracing ソフトシャドウ表現が可能
Ray Tracing レイトレ映る?映らない?
Ray Tracing レイトレ映る?映らない? ヘア、シャドウ共に映らない
アジェンダ セットアップ Groom Asset ライティング 最適化
最適化 コンソールコマンドstat gpuでフレーム内のさまざまなコストを調べることができる
最適化 HairStrandsVisibility:ヘアのプライマリビジビリティのレンダリング ヘアで覆われている部分と、オーバードローの量に依存
最適化 Hair Sky Lighting: Sky Lightのレンダリング
最適化 HairStrandsDeepShadowLayers: Deep Shadowレイヤーのレンダリング ヘアクラスターごととライトごとに行われる
最適化 HairStrandsInterpolation: ヘアストランドの補間
最適化 HairStrandsDeepshadowFrontDepth: ヘアのフロントデプスのレンダリング ヘアクラスターごととライトごとに行われる
最適化 HairStrandsVoxelization: ヘアークラスターのボクセル化
最適化 DeepShadowTransmittanceMask: ヘアの内部で透過する光のレンダリング
最適化 Lights: ヘアのレンダリングが影響する
最適化 GPU Visualizer
最適化 GPU Visualizer Interporlation Deep Shadow Visibility
最適化 コンソールコマンド r.HairStrands.Visibility.MSAA.SamplePerPixel r.HairStrands.Voxelization.Raymarching.SteppingScale r.HairStrands.DeepShadow.Resolution r.HairStrands.SkyLighting.SampleCount
まとめ クオリティ、パフォーマンスのトレードオフを柔軟に選択できる 全体的に負荷が大きくなりがちなため、運用には注意が必要 LODでのカード、メッシュ切り替え、コンソールコマンドによるパラメータ調整を 使いこなせばリアルタイムコンテンツでの運用もある程度は可能 映像や静止画用途ではPPLLなど高価な設定を使うことでハイクオリティな表現も可能
参考 ミーアキャットデモ https://www.unrealengine.com/marketplace/ja/product/meerkat-demo?lang=ja
参考 Hair at a Strand Level | Grooming your creations in Unreal Engine https://www.youtube.com/watch?v=__BScFPJy3E
参考 グルーム アセット エディタのユーザー ガイド https://docs.unrealengine.com/4.26/ja/WorkingWithContent/Hair/GroomAssetEditor/ ヘア レンダリング https://docs.unrealengine.com/4.26/ja/WorkingWithContent/Hair/Overview/ Hair Properties Reference https://docs.unrealengine.com/4.26/ja/WorkingWithContent/Hair/Reference/ Alembic for Grooms の仕様 https://docs.unrealengine.com/4.26/ja/WorkingWithContent/Hair/AlembicForGrooms/
ご視聴ありがとうございました