Global Illumination on WebGL

提供: ディーズガレージ wiki
移動先: 案内検索

高品質WebGLのワークフローを探ってみます。

環境

DCCツール 3ds Max 2017, V-Ray, Unity 2018, Babylon.js
モデルデータ Evermotion Archinteriors vol.35 Scene6
検証環境 iPhone XS, Windows10(GTX1050Ti)

目標品質

引用: Scene6 AI35 Archinteriors - max, psd Interior - Evermotion
引用: Bedroom デモ: 建築ビジュアリゼーションとSSRR – Unity Blog

Unity Staffの仕事

  • リダクション
  • Directional Light (太陽)
  • Point Light (ランプ)
  • Cubemap
  • Light Probe
  • Reflection Probe
  • Screen Space Reflection

素材準備

参考: Baking lightmaps with Vray and 3D Studio Max, a tentative guide - Unity Forum
参考: Vray lightmapping workflow in 3dsmax - Unity Forum

※3dsMaxのUVWチャンネル2(UnityのUV1)は設定しない

データ修正

3ds Max
├ ガンマ 基本設定 > ガンマ/LUT 設定 > ガンマ 2.2
├ 単位 単位設定 > センチメートル, システム単位設定 > センチメートル
└ レンダリング設定 V-Ray tab > Color mapping >
Type: Linear multiply
Dark multiplier:1.0, Bright multiplier:1.0
GI tab > Primary engine: Irradiance map : Very low
GI tab > Secondary engine: Light cache
3ds Max
├ レイヤ分け 加工しやすいよう家具毎などに小分け
カメラとライト > Camera&Lightsレイヤ
GIが不要なもの > NoGIレイヤ
├ マルチ/サブOBJ デタッチ
├ リダクション プロオプティマイザーのUV保持 > 集約
├ マージ 同じマテリアルのオブジェクト
├ UVWアンラップ ベイク用 GI対象のみ
├ 整理 0レイヤ: GI対象すべて ユニーク名通し番
NoGIレイヤ: NoGI_***ユニーク名通し番
Camera&Lightsレイヤ: カメラとライト
└ 整理 ベイク解像度レイヤ分け 512 1024 2048 例外4096

露出固定

試行

  • 3dsMax2016以降のVRayPhysicalCameraについて
  • Bakeに使用されるCameraはViewerで使用してるCameraを使用?(非表示関係なく) > カメラ削除
  • VRayPhysicalCamera(旧)は露出制御を非アクティブにできない > 標準フィジカルカメラ新規作成
  • maxファイル読み込み時、「ガンマとLUTが一致しません」> ファイル出力ガンマ 1 or 2.2 > 結果、関係なし

ファイル出力ガンマ 1 or 2.2
環境と効果 > Vray Exposure Control > アクティブ: OFF > レンダリング or Bake
環境と効果 > フィジカルカメラ 露出制御 > アクティブ: OFF > レンダリング or Bake

  • Frame buffer: OK
  • イメージを保存 OpenEXR,PNG ガンマ:自動 > NG
  • イメージを保存 OpenEXR,PNG ガンマ:1.0 > NG
  • イメージを保存 JPG ガンマ:自動 > NG
  • イメージを保存 JPG ガンマ:1.0 > OK

未確認 vray linear workflow - Google 検索

ベイク処理

3ds Max
├ ベイクサイズ 512~2048 例外4096
├ 要素 VRayCompleteMap
VRayRawTotalLightingMap
├ 要素の固有設定 Apply color mapping ON
└ 保存 オブジェクト名VRayCompleteMap.jpg
オブジェクト名VRayRawTotalLightingMap.jpg

FBX具合

3ds Max Unity
標準 フィジカルカメラ ×
標準 フリーカメラ
標準 ターゲットカメラ 〇 Look At Constraint
VRayPhisicalCamera ×
3ds Max Unity
標準 ターゲットスポットライト △ Type:Spot *.Targetゴミ
標準 ターゲット指向性ライト △ Type:Directional *.Targetゴミ
標準 オムニライト 〇 Type:Point
標準 フリースポットライト 〇 Type:Spot
標準 フリー指向性ライト 〇 Type:Directional
標準 スカイライト △ Type:Point
フォトメトリック ターゲットライト △ Type:Point *.Targetゴミ
フォトメトリック フリーライト △ Type:Point
フォトメトリック サンポジショナ ×
VRayLight ×

FBX書き出し

3ds Max
├ VRayMtl Unityで詰めるのでVRayMtlのまま(書き出し時のエラーは無視)
├ VRayLight 標準ライトに修正
├ VRayCamera 標準カメラに修正
├ 書き出し オブジェクト カメラとライト以外を選択 > 書き出し > 選択を書き出し
└ 書き出し カメラとライト カメラとライトを選択 > 書き出し > 選択を書き出し

Unity

ビルド

  • Edit Menu > Project Settings > Player > Other Settings > Color Space: Linear
  • Lighting > Scene tab > Auto Generate OFF
  • FBX読込み
  • (GameObject).FBX > Inspector > Geometry > Generate Lightmap UVs OFF(デフォルト)
  • FBX配置
  • Hierarchy > (GameObject) > Inspector > Static OFF(デフォルト)

  • Collider.FBX > Mesh Collider追加
  • Light Type: Realtime, Intensity: 0.01 or 0
  • Material: Unity > Legacy Shaders > Lightmapped > VertexLit > Lightmap

  • Hierarchy > (GameObject) > Inspector > Static ON
  • Reflection Probe Type: Baked > Bake実行
  • Hierarchy > (GameObject) > Inspector > Static OFF
  • File Menu > Build Settings > Build

V-Ray Completemap版

Build Data: 88MB
AI35_006_02_completemap_build_windows.zip

V-Ray Lightmap版

Build Data: 74MB
AI35_006_02_lightmap_build_windows.zip

Unity Enlighten版

Unity
├ 読込み (GameObject).FBX
├ Generate UVs (GameObject).FBX > Inspector > Geometry > Generate Lightmap UVs ON > Apply
├ Color Space Edit Menu > Project Settings > Player > Other Settings > Color Space: Linear
├ 配置 Hierarchy > (GameObject)
├ Static Hierarchy > (GameObject) > Inspector > Static ON > Yes, change children
├ Cast Shadow Hierarchy > (GameObject) 窓ガラス以外全て選択 > Inspector > Cast Shadow: ON (窓ガラスはOFF)
├ Globalillumination Window Menu > Rendering > Lighting Settings >
Scene tab > Mixed Lighting > Baked Globalillumination ON
├ Lightmap bounses Window Menu > Rendering > Lighting Settings >
Scene tab > Lightmapping Setting > Bounses: 2 (デフォルト: 2)
├ Lightmap Resolution Window Menu > Rendering > Lighting Settings >
Scene tab > Lightmapping Setting > Lightmap Resolution 調整中10程度 仕上げ20程度
├ Lighting Mode Scene tab > Lighting Mode > Subtractive
└ Lightmap scale Hierarchy > (GameObject) GI対象全て選択 > Lightmap Static ON > Scale In Lightmap 調整中2程度 仕上げ8~10程度
Unity
├ Light Hierarchy > (GameObject)ライト > Type: Area(baked only)
Mode: Baked
Shadow Type: Hard(直射光) or Soft(反射光, 昼光)
Intensity: 1程度から始め微調整
├ SSR Post Processing Stack > Screen Space Reflection
├ Color Grading Post Processing Stack > Color Grading 不採用
├ Reflection Reflection Probe
├ Collider Mesh Collider
├ FPS FPSController, FirstPersonCharacter
├ Material Standard Shader (PBRマテリアル) 全て作り直し
└ Build File Menu > Build Settings > Build
Build Data: 121MB
AI35_006_03_unity_build_windows.zip

Babylon

Unity Exporter
参考: Getting Started (Unity exporter) - Babylon.js Documentation
BabylonJS Editor
参考: Getting Started - Babylon.js Documentation

ビデオチュートリアル
Unity Exporter (日本語字幕向け)
BabylonJS Editor

ビルド

  • Hierarchy > Main Camera > Inspector > Transform Position Y: 1
  • Hierarchy > Main Camera > Inspector > Add Compoment > Babylon > System Componrnts > Camera Rig > Camera Type: Universal Camera, Camera Input: Attach Render Canvas Input, Camera Speed: 0.04, Input Move Speed: 0.04, Apply Camera Gravity: OFF
  • Hierarchy > Create Empty > GameObject > Inspector > Add Component > Babylon > System Componrnts > Default Scene Controller > Lighting Options > Ambient Scale: 10
  • Babylon Exporter > Default Engine Options > Default Image Format > JPG
  • Babylon Exporter > Toolkit Exportation Options > Show Render Stats: ON
  • Babylon Exporter > Build And Preview

  • ガラスはBabylon Standard Materialでないとダメっぽい
  • ミラーが汚い ***_Reflection.hdr Equirectangular形式
  • Unity Exporter > Set Image EncodingはPNG・JPG変換にOpenEXR画像は露出補正を考慮してないように見える
  • ↑Legacy ShaderのMain Colorを全て白(露出補正無し)に設定 PhotoShopで直接露出補正
  • Unity Exporter > Set Image EncodingのOpenEXR>JPG変換は拡張子がJPGのPNG画像に見える
  • ↑Build後、PhotoShopでJPG画像で保存し直す
  • Unity Exporter > Set Image EncodingのJPG>JPG変換はQuality設定が機能していないように見える
  • ↑Build前に直接PhotoShopで保存し直す
  • 4096サイズtextureを多用するとiPhone XSのロードエラーが出るように見える

V-Ray Completemap版

Babylon Completemap.png

Build Data:80MB, ポリゴン数:42万, オブジェクト数:53
https://dz.plala.jp/wiki_data/babylon01/

Babylon Completemap2.png

Build Data:120MB, ポリゴン数:66万, オブジェクト数:89
https://dz.plala.jp/wiki_data/babylon02/

Babylon Completemap3.png

Build Data:51MB, ポリゴン数:25万, オブジェクト数:38
https://dz.plala.jp/wiki_data/babylon03/

V-Ray Completemap+PBR版

変更 Default Scene Controller > Lighting Options > Ambient Scale: 0
変更 Legacy MaterialのLightmap(VRayCompleteMap)と同等のStandard Material設定
Main Maps Albedo > VRayCompleteMap, Color:白
Main Maps Emission > VRayCompleteMap or VRayRawTotalLightingMap, HDR Color:白
VRayRawTotalLightingMapが正解に見える

Secondary MapsのDetail AlbedoとNormal Mapが使えない > 大問題

Babylon Completemap.png

Build Data:80MB, ポリゴン数:42万, オブジェクト数:53
https://dz.plala.jp/wiki_data/babylon04/
※検証中 すべてMetallic=1, Smoothness=1

Babylon Completemap3.png

Build Data:48MB, ポリゴン数:25万, オブジェクト数:38
https://dz.plala.jp/wiki_data/babylon05/
※検証中

V-Ray Lightmap+PBR版

理屈ではMain Maps Emission > VRayRawTotalLightingMapでGIは完了していることになる
試してみる

Unity Enlighten版

建築に向かないGIに見える

更新履歴

  • 2019.08.03 公開