mirror of
https://github.com/vrm-c/UniVRM.git
synced 2026-08-20 17:45:22 -05:00
default TinyPbr off
This commit is contained in:
8
Assets/VRM10_Samples/VRM10Viewer/MaterialImporter.meta
Normal file
8
Assets/VRM10_Samples/VRM10Viewer/MaterialImporter.meta
Normal file
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: da380cc015227a946a8a8ccd61811b82
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,88 @@
|
||||
using System.Collections.Generic;
|
||||
using UniGLTF;
|
||||
|
||||
namespace UniVRM10.VRM10Viewer
|
||||
{
|
||||
/// <summary>
|
||||
/// Importersに格納したを順番に試行して成功したらそれを採用する。
|
||||
/// mtoon, unlit, pbr の順に試行することを想定。
|
||||
/// </summary>
|
||||
public sealed class OrderedMaterialDescriptorGenerator : IMaterialDescriptorGenerator
|
||||
{
|
||||
public readonly List<IMaterialImporter> Importers = new();
|
||||
|
||||
public delegate MaterialDescriptor MakeDefaultMaterialDescriptor(string materialName);
|
||||
|
||||
private readonly MakeDefaultMaterialDescriptor _makeDefault;
|
||||
|
||||
/// <summary>
|
||||
/// 順に TryCreateParam を実行して最初に成功したら終わる。
|
||||
/// 全て失敗したら UrpGltfDefaultMaterialImporter を実行する。
|
||||
/// 通常 vrm-1.0, unlit, pbr の順に試行する。
|
||||
/// </summary>
|
||||
/// <param name="importers"></param>
|
||||
public OrderedMaterialDescriptorGenerator(MakeDefaultMaterialDescriptor makeDefault, params IMaterialImporter[] importers)
|
||||
{
|
||||
_makeDefault = makeDefault;
|
||||
Importers.AddRange(importers);
|
||||
}
|
||||
|
||||
public static OrderedMaterialDescriptorGenerator CreateCustomGenerator(
|
||||
IMaterialImporter customPbr,
|
||||
IMaterialImporter customMToonImporter = null)
|
||||
{
|
||||
|
||||
var generator = new OrderedMaterialDescriptorGenerator((new UrpGltfDefaultMaterialImporter()).CreateParam);
|
||||
|
||||
// 最初にMToonの分岐
|
||||
// generator.Importers は前から順に処理します
|
||||
if (customMToonImporter != null)
|
||||
{
|
||||
// TinyMToon(WebGL 向け) を使う例
|
||||
generator.Importers.Add(customMToonImporter);
|
||||
}
|
||||
else
|
||||
{
|
||||
// VRM10/Universal Render Pipeline/MToon10 を使う例
|
||||
generator.Importers.Add(new UrpMToonMaterialImporter());
|
||||
}
|
||||
|
||||
// 次に unlit の分岐
|
||||
generator.Importers.Add(new UnlitMaterialImporter());
|
||||
|
||||
// 次に pbr の分岐
|
||||
if (customPbr != null)
|
||||
{
|
||||
// TinyPbr を使う例
|
||||
generator.Importers.Add(customPbr);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Universal Render Pipeline/Lit を使う例
|
||||
// AlwaysIncludedShaders に登録すると、Variant が多すぎてビルドが終わらない問題があります。
|
||||
generator.Importers.Add(new UrpPbrMaterialImporter());
|
||||
}
|
||||
|
||||
return generator;
|
||||
}
|
||||
|
||||
public MaterialDescriptor Get(GltfData data, int i)
|
||||
{
|
||||
foreach (var importer in Importers)
|
||||
{
|
||||
if (importer.TryCreateParam(data, i, out var param))
|
||||
{
|
||||
return param;
|
||||
}
|
||||
}
|
||||
// NOTE: Fallback to default material
|
||||
if (Symbols.VRM_DEVELOP)
|
||||
{
|
||||
UniGLTFLogger.Warning($"material: {i} out of range. fallback");
|
||||
}
|
||||
return GetGltfDefault(GltfMaterialImportUtils.ImportMaterialName(i, null));
|
||||
}
|
||||
|
||||
public MaterialDescriptor GetGltfDefault(string materialName = null) => _makeDefault(materialName);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
using UniGLTF;
|
||||
|
||||
namespace UniVRM10.VRM10Viewer
|
||||
{
|
||||
class UnlitMaterialImporter : IMaterialImporter
|
||||
{
|
||||
bool IMaterialImporter.TryCreateParam(GltfData data, int i, out MaterialDescriptor matDesc)
|
||||
{
|
||||
return BuiltInGltfUnlitMaterialImporter.TryCreateParam(data, i, out matDesc);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: f3cabd0c7193c374bbeb7db075c3479b
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,19 @@
|
||||
using UniGLTF;
|
||||
|
||||
namespace UniVRM10.VRM10Viewer
|
||||
{
|
||||
/// <summary>
|
||||
/// VRM10/Universal Render Pipeline/MToon10
|
||||
/// </summary>
|
||||
public class UrpMToonMaterialImporter : IMaterialImporter
|
||||
{
|
||||
public bool TryCreateParam(GltfData data, int i, out MaterialDescriptor matDesc)
|
||||
{
|
||||
if (UrpVrm10MToonMaterialImporter.TryCreateParam(data, i, out matDesc))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: c97cb941cc7451b49b9d347de508bdbd
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,18 @@
|
||||
using UniGLTF;
|
||||
|
||||
namespace UniVRM10.VRM10Viewer
|
||||
{
|
||||
public class UrpPbrMaterialImporter : IMaterialImporter
|
||||
{
|
||||
public UrpGltfPbrMaterialImporter PbrMaterialImporter { get; } = new();
|
||||
|
||||
public bool TryCreateParam(GltfData data, int i, out MaterialDescriptor matDesc)
|
||||
{
|
||||
if (PbrMaterialImporter.TryCreateParam(data, i, out matDesc))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 5541a21c1ccebff4e9d222a059c90c57
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -1,41 +0,0 @@
|
||||
using UniGLTF;
|
||||
|
||||
namespace UniVRM10.VRM10Viewer
|
||||
{
|
||||
public sealed class OrderedMaterialDescriptorGenerator : IMaterialDescriptorGenerator
|
||||
{
|
||||
private IMaterialImporter[] _importers;
|
||||
|
||||
public UrpGltfDefaultMaterialImporter DefaultMaterialImporter { get; } = new();
|
||||
|
||||
/// <summary>
|
||||
/// 順に TryCreateParam を実行して最初に成功したら終わる。
|
||||
/// 全て失敗したら UrpGltfDefaultMaterialImporter を実行する。
|
||||
/// 通常 vrm-1.0, unlit, pbr の順に試行する。
|
||||
/// </summary>
|
||||
/// <param name="importers"></param>
|
||||
public OrderedMaterialDescriptorGenerator(params IMaterialImporter[] importers)
|
||||
{
|
||||
_importers = importers;
|
||||
}
|
||||
|
||||
public MaterialDescriptor Get(GltfData data, int i)
|
||||
{
|
||||
foreach (var importer in _importers)
|
||||
{
|
||||
if (importer.TryCreateParam(data, i, out var param))
|
||||
{
|
||||
return param;
|
||||
}
|
||||
}
|
||||
// NOTE: Fallback to default material
|
||||
if (Symbols.VRM_DEVELOP)
|
||||
{
|
||||
UniGLTFLogger.Warning($"material: {i} out of range. fallback");
|
||||
}
|
||||
return GetGltfDefault(GltfMaterialImportUtils.ImportMaterialName(i, null));
|
||||
}
|
||||
|
||||
public MaterialDescriptor GetGltfDefault(string materialName = null) => DefaultMaterialImporter.CreateParam(materialName);
|
||||
}
|
||||
}
|
||||
@@ -4931,6 +4931,7 @@ RectTransform:
|
||||
- {fileID: 1767706907}
|
||||
- {fileID: 1621794411}
|
||||
- {fileID: 731212245}
|
||||
- {fileID: 358762027}
|
||||
- {fileID: 2009818432}
|
||||
- {fileID: 103723704}
|
||||
- {fileID: 602093298}
|
||||
@@ -5130,6 +5131,92 @@ MonoBehaviour:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
m_IsOn: 0
|
||||
--- !u!1 &358762026
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 358762027}
|
||||
- component: {fileID: 358762028}
|
||||
m_Layer: 5
|
||||
m_Name: UseCustomMToorMaterial
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &358762027
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 358762026}
|
||||
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children:
|
||||
- {fileID: 2090176800}
|
||||
- {fileID: 1405688945}
|
||||
m_Father: {fileID: 339774397}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 0}
|
||||
m_AnchorMax: {x: 0, y: 0}
|
||||
m_AnchoredPosition: {x: 0, y: 0}
|
||||
m_SizeDelta: {x: 0, y: 20}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!114 &358762028
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 358762026}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 9085046f02f69544eb97fd06b6048fe2, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
m_Navigation:
|
||||
m_Mode: 3
|
||||
m_WrapAround: 0
|
||||
m_SelectOnUp: {fileID: 0}
|
||||
m_SelectOnDown: {fileID: 0}
|
||||
m_SelectOnLeft: {fileID: 0}
|
||||
m_SelectOnRight: {fileID: 0}
|
||||
m_Transition: 1
|
||||
m_Colors:
|
||||
m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
|
||||
m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1}
|
||||
m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
|
||||
m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608}
|
||||
m_ColorMultiplier: 1
|
||||
m_FadeDuration: 0.1
|
||||
m_SpriteState:
|
||||
m_HighlightedSprite: {fileID: 0}
|
||||
m_PressedSprite: {fileID: 0}
|
||||
m_SelectedSprite: {fileID: 0}
|
||||
m_DisabledSprite: {fileID: 0}
|
||||
m_AnimationTriggers:
|
||||
m_NormalTrigger: Normal
|
||||
m_HighlightedTrigger: Highlighted
|
||||
m_PressedTrigger: Pressed
|
||||
m_SelectedTrigger: Highlighted
|
||||
m_DisabledTrigger: Disabled
|
||||
m_Interactable: 1
|
||||
m_TargetGraphic: {fileID: 2090176801}
|
||||
toggleTransition: 1
|
||||
graphic: {fileID: 379278027}
|
||||
m_Group: {fileID: 0}
|
||||
onValueChanged:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
m_IsOn: 0
|
||||
--- !u!1 &364098868
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
@@ -5464,6 +5551,81 @@ CanvasRenderer:
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 377012217}
|
||||
m_CullTransparentMesh: 1
|
||||
--- !u!1 &379278025
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 379278026}
|
||||
- component: {fileID: 379278028}
|
||||
- component: {fileID: 379278027}
|
||||
m_Layer: 5
|
||||
m_Name: Checkmark
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &379278026
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 379278025}
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 2090176800}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0.5, y: 0.5}
|
||||
m_AnchorMax: {x: 0.5, y: 0.5}
|
||||
m_AnchoredPosition: {x: 0, y: 0}
|
||||
m_SizeDelta: {x: 20, y: 20}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!114 &379278027
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 379278025}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
m_Material: {fileID: 0}
|
||||
m_Color: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_RaycastTarget: 1
|
||||
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
|
||||
m_Maskable: 1
|
||||
m_OnCullStateChanged:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
m_Sprite: {fileID: 10901, guid: 0000000000000000f000000000000000, type: 0}
|
||||
m_Type: 0
|
||||
m_PreserveAspect: 0
|
||||
m_FillCenter: 1
|
||||
m_FillMethod: 4
|
||||
m_FillAmount: 1
|
||||
m_FillClockwise: 1
|
||||
m_FillOrigin: 0
|
||||
m_UseSpriteMesh: 0
|
||||
m_PixelsPerUnitMultiplier: 1
|
||||
--- !u!222 &379278028
|
||||
CanvasRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 379278025}
|
||||
m_CullTransparentMesh: 0
|
||||
--- !u!1 &381534432
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
@@ -5651,7 +5813,9 @@ MonoBehaviour:
|
||||
m_HorizontalOverflow: 0
|
||||
m_VerticalOverflow: 0
|
||||
m_LineSpacing: 1
|
||||
m_Text: Use CustomMaterial
|
||||
m_Text: 'Use CustomPbrMaterial
|
||||
|
||||
'
|
||||
--- !u!222 &390989033
|
||||
CanvasRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
@@ -12326,7 +12490,7 @@ GameObject:
|
||||
- component: {fileID: 731212245}
|
||||
- component: {fileID: 731212246}
|
||||
m_Layer: 5
|
||||
m_Name: UseCustomMaterial
|
||||
m_Name: UseCustomPbrMaterial
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
@@ -23821,6 +23985,87 @@ RectTransform:
|
||||
m_AnchoredPosition: {x: 0, y: 0}
|
||||
m_SizeDelta: {x: 0, y: 28}
|
||||
m_Pivot: {x: 0.5, y: 1}
|
||||
--- !u!1 &1405688944
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 1405688945}
|
||||
- component: {fileID: 1405688947}
|
||||
- component: {fileID: 1405688946}
|
||||
m_Layer: 5
|
||||
m_Name: Label
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &1405688945
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1405688944}
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 358762027}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 0}
|
||||
m_AnchorMax: {x: 1, y: 1}
|
||||
m_AnchoredPosition: {x: 9, y: -0.5}
|
||||
m_SizeDelta: {x: -28, y: -3}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!114 &1405688946
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1405688944}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
m_Material: {fileID: 0}
|
||||
m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1}
|
||||
m_RaycastTarget: 1
|
||||
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
|
||||
m_Maskable: 1
|
||||
m_OnCullStateChanged:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
m_FontData:
|
||||
m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}
|
||||
m_FontSize: 14
|
||||
m_FontStyle: 0
|
||||
m_BestFit: 0
|
||||
m_MinSize: 10
|
||||
m_MaxSize: 40
|
||||
m_Alignment: 0
|
||||
m_AlignByGeometry: 0
|
||||
m_RichText: 1
|
||||
m_HorizontalOverflow: 0
|
||||
m_VerticalOverflow: 0
|
||||
m_LineSpacing: 1
|
||||
m_Text: 'Use CustomMToonMaterial
|
||||
|
||||
'
|
||||
--- !u!222 &1405688947
|
||||
CanvasRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1405688944}
|
||||
m_CullTransparentMesh: 0
|
||||
--- !u!1 &1406385458
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
@@ -30646,7 +30891,8 @@ MonoBehaviour:
|
||||
type: 3}
|
||||
m_mtoonMaterialAlphaBlend: {fileID: -876546973899608171, guid: 6b60fe85d745eda4281e3278fcb0657c,
|
||||
type: 3}
|
||||
m_useCustomMaterial: {fileID: 731212246}
|
||||
m_useCustomPbrMaterial: {fileID: 731212246}
|
||||
m_useCustomMToonMaterial: {fileID: 358762028}
|
||||
m_openModel: {fileID: 2009818433}
|
||||
m_openMotion: {fileID: 168425996}
|
||||
m_pastePose: {fileID: 1307084564}
|
||||
@@ -35733,6 +35979,82 @@ CanvasRenderer:
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 2085434813}
|
||||
m_CullTransparentMesh: 1
|
||||
--- !u!1 &2090176799
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 2090176800}
|
||||
- component: {fileID: 2090176802}
|
||||
- component: {fileID: 2090176801}
|
||||
m_Layer: 5
|
||||
m_Name: Background
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &2090176800
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 2090176799}
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children:
|
||||
- {fileID: 379278026}
|
||||
m_Father: {fileID: 358762027}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 1}
|
||||
m_AnchorMax: {x: 0, y: 1}
|
||||
m_AnchoredPosition: {x: 10, y: -10}
|
||||
m_SizeDelta: {x: 20, y: 20}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!114 &2090176801
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 2090176799}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
m_Material: {fileID: 0}
|
||||
m_Color: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_RaycastTarget: 1
|
||||
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
|
||||
m_Maskable: 1
|
||||
m_OnCullStateChanged:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0}
|
||||
m_Type: 1
|
||||
m_PreserveAspect: 0
|
||||
m_FillCenter: 1
|
||||
m_FillMethod: 4
|
||||
m_FillAmount: 1
|
||||
m_FillClockwise: 1
|
||||
m_FillOrigin: 0
|
||||
m_UseSpriteMesh: 0
|
||||
m_PixelsPerUnitMultiplier: 1
|
||||
--- !u!222 &2090176802
|
||||
CanvasRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 2090176799}
|
||||
m_CullTransparentMesh: 0
|
||||
--- !u!1 &2092455692
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
|
||||
@@ -9,6 +9,7 @@ using System.Threading.Tasks;
|
||||
using UniGLTF;
|
||||
using UniGLTF.SpringBoneJobs.Blittables;
|
||||
using UnityEngine;
|
||||
using UnityEngine.Rendering;
|
||||
using UnityEngine.UI;
|
||||
|
||||
namespace UniVRM10.VRM10Viewer
|
||||
@@ -34,7 +35,9 @@ namespace UniVRM10.VRM10Viewer
|
||||
|
||||
[Header("UI")]
|
||||
[SerializeField]
|
||||
Toggle m_useCustomMaterial = default;
|
||||
Toggle m_useCustomPbrMaterial = default;
|
||||
[SerializeField]
|
||||
Toggle m_useCustomMToonMaterial = default;
|
||||
|
||||
[SerializeField]
|
||||
Button m_openModel = default;
|
||||
@@ -378,7 +381,8 @@ namespace UniVRM10.VRM10Viewer
|
||||
{
|
||||
var map = new ObjectMap(gameObject);
|
||||
Root = map.Objects["Root"];
|
||||
m_useCustomMaterial = map.Get<Toggle>("CustomMaterial");
|
||||
m_useCustomPbrMaterial = map.Get<Toggle>("CustomPbrMaterial");
|
||||
m_useCustomMToonMaterial = map.Get<Toggle>("CustomMToonMaterial");
|
||||
m_openModel = map.Get<Button>("OpenModel");
|
||||
m_openMotion = map.Get<Button>("OpenMotion");
|
||||
m_pastePose = map.Get<Button>("PastePose");
|
||||
@@ -485,15 +489,6 @@ namespace UniVRM10.VRM10Viewer
|
||||
VRM10Blinker m_autoBlink;
|
||||
VRM10AIUEO m_autoLipsync;
|
||||
|
||||
private class UnlitMaterialImporter : IMaterialImporter
|
||||
{
|
||||
bool IMaterialImporter.TryCreateParam(GltfData data, int i, out MaterialDescriptor matDesc)
|
||||
{
|
||||
return BuiltInGltfUnlitMaterialImporter.TryCreateParam(data, i, out matDesc);
|
||||
}
|
||||
}
|
||||
private UnlitMaterialImporter m_unlitImporter = new();
|
||||
|
||||
private TinyMToonrMaterialImporter m_mtoonImporter;
|
||||
private TinyPbrMaterialImporter m_pbrImporter;
|
||||
|
||||
@@ -508,6 +503,9 @@ namespace UniVRM10.VRM10Viewer
|
||||
m_pbrImporter = new(m_pbrOpaqueMaterial, m_pbrAlphaBlendMaterial);
|
||||
}
|
||||
|
||||
// URP かつ WebGL で有効にする
|
||||
m_useCustomMToonMaterial.isOn = Application.platform == RuntimePlatform.WebGLPlayer && GraphicsSettings.renderPipelineAsset != null;
|
||||
|
||||
m_autoEmotion = gameObject.AddComponent<VRM10AutoExpression>();
|
||||
m_autoBlink = gameObject.AddComponent<VRM10Blinker>();
|
||||
m_autoLipsync = gameObject.AddComponent<VRM10AIUEO>();
|
||||
@@ -524,12 +522,10 @@ namespace UniVRM10.VRM10Viewer
|
||||
if (m_motion != null)
|
||||
{
|
||||
Motion = BvhMotion.LoadBvhFromText(m_motion.text);
|
||||
if (m_useCustomMaterial.isOn)
|
||||
if (GraphicsSettings.renderPipelineAsset != null
|
||||
&& m_pbrAlphaBlendMaterial != null)
|
||||
{
|
||||
if (m_pbrAlphaBlendMaterial != null)
|
||||
{
|
||||
Motion.SetBoxManMaterial(Instantiate(m_pbrOpaqueMaterial));
|
||||
}
|
||||
Motion.SetBoxManMaterial(Instantiate(m_pbrOpaqueMaterial));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -801,14 +797,17 @@ namespace UniVRM10.VRM10Viewer
|
||||
|
||||
IMaterialDescriptorGenerator GetMaterialDescriptorGenerator()
|
||||
{
|
||||
if (m_useCustomMaterial.isOn && (m_mtoonImporter != null || m_pbrImporter != null))
|
||||
{
|
||||
return new OrderedMaterialDescriptorGenerator(m_mtoonImporter, m_unlitImporter, m_pbrImporter);
|
||||
}
|
||||
else
|
||||
var useCustomPbr = m_useCustomPbrMaterial.isOn && m_pbrImporter != null;
|
||||
var useCustomMToon = m_useCustomMToonMaterial.isOn && m_mtoonImporter != null;
|
||||
if (!useCustomPbr && !useCustomMToon)
|
||||
{
|
||||
// カスタムしない。デフォルトのローダーを使う
|
||||
return default;
|
||||
}
|
||||
|
||||
return OrderedMaterialDescriptorGenerator.CreateCustomGenerator(
|
||||
useCustomPbr ? m_pbrImporter : null,
|
||||
useCustomMToon ? m_mtoonImporter : null);
|
||||
}
|
||||
|
||||
IAwaitCaller GetIAwaitCaller()
|
||||
|
||||
Reference in New Issue
Block a user