mirror of
https://github.com/vrm-c/UniVRM.git
synced 2026-04-25 07:28:51 -05:00
Merge branch 'master' into urp_xrmotionvector
This commit is contained in:
commit
2dfb7b222f
2
.github/workflows/create-unitypackage.yml
vendored
2
.github/workflows/create-unitypackage.yml
vendored
|
|
@ -33,7 +33,7 @@ jobs:
|
|||
UNITY_VERSION=`cat ${PROJECT_VERSION_PATH} | sed -n -E "s/^m_EditorVersion:\s+//p" | head -n 1`
|
||||
UNITY_CHANGESET=`cat ${PROJECT_VERSION_PATH} | sed -n -E "s/^m_EditorVersionWithRevision:\s+\S+\s+\((\S+)\)/\1/p" | head -n 1`
|
||||
UNITY_EDITOR_EXECUTABLE=`"${UNITY_HUB}" -- --headless editors --installed | \
|
||||
sed -n -E "s/^${UNITY_VERSION} , installed at //p" | \
|
||||
sed -n -E "s/^${UNITY_VERSION} installed at //p" | \
|
||||
head -n 1`
|
||||
|
||||
if [ -z "${UNITY_EDITOR_EXECUTABLE}" ]; then
|
||||
|
|
|
|||
|
|
@ -5,14 +5,18 @@ using UnityEngine;
|
|||
namespace UniGLTF
|
||||
{
|
||||
/// <summary>
|
||||
/// GLTF の MaterialImporter
|
||||
/// A class that generates MaterialDescriptor by considering the extensions included in the glTF data to be imported.
|
||||
/// </summary>
|
||||
public sealed class BuiltInGltfMaterialDescriptorGenerator : IMaterialDescriptorGenerator
|
||||
{
|
||||
public BuiltInGltfPbrMaterialImporter PbrMaterialImporter { get; } = new();
|
||||
public BuiltInGltfDefaultMaterialImporter DefaultMaterialImporter { get; } = new();
|
||||
public BuiltInGltfUnlitMaterialImporter UnlitMaterialImporter { get; } = new();
|
||||
|
||||
public MaterialDescriptor Get(GltfData data, int i)
|
||||
{
|
||||
if (BuiltInGltfUnlitMaterialImporter.TryCreateParam(data, i, out var param)) return param;
|
||||
if (BuiltInGltfPbrMaterialImporter.TryCreateParam(data, i, out param)) return param;
|
||||
if (UnlitMaterialImporter.TryCreateParam(data, i, out var param)) return param;
|
||||
if (PbrMaterialImporter.TryCreateParam(data, i, out param)) return param;
|
||||
|
||||
// fallback
|
||||
if (Symbols.VRM_DEVELOP)
|
||||
|
|
@ -22,6 +26,6 @@ namespace UniGLTF
|
|||
return GetGltfDefault(GltfMaterialImportUtils.ImportMaterialName(i, null));
|
||||
}
|
||||
|
||||
public MaterialDescriptor GetGltfDefault(string materialName = null) => BuiltInGltfDefaultMaterialImporter.CreateParam(materialName);
|
||||
public MaterialDescriptor GetGltfDefault(string materialName = null) => DefaultMaterialImporter.CreateParam(materialName);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5,16 +5,28 @@ using UnityEngine;
|
|||
namespace UniGLTF
|
||||
{
|
||||
/// <summary>
|
||||
/// Generate the descriptor of the glTF default material.
|
||||
/// A class that generates MaterialDescriptor for "Standard" shader based on glTF default Material specification.
|
||||
///
|
||||
/// https://registry.khronos.org/glTF/specs/2.0/glTF-2.0.html#default-material
|
||||
/// </summary>
|
||||
public static class BuiltInGltfDefaultMaterialImporter
|
||||
public class BuiltInGltfDefaultMaterialImporter
|
||||
{
|
||||
public static MaterialDescriptor CreateParam(string materialName = null)
|
||||
/// <summary>
|
||||
/// Can be replaced with custom shaders that are compatible with "Standard" properties and keywords.
|
||||
/// </summary>
|
||||
public Shader Shader { get; set; }
|
||||
|
||||
public BuiltInGltfDefaultMaterialImporter(Shader shader = null)
|
||||
{
|
||||
Shader = shader != null ? shader : Shader.Find("Standard");
|
||||
}
|
||||
|
||||
public MaterialDescriptor CreateParam(string materialName = null)
|
||||
{
|
||||
// FIXME
|
||||
return new MaterialDescriptor(
|
||||
string.IsNullOrEmpty(materialName) ? "__default__" : materialName,
|
||||
BuiltInGltfPbrMaterialImporter.Shader,
|
||||
Shader,
|
||||
default,
|
||||
new Dictionary<string, TextureDescriptor>(),
|
||||
new Dictionary<string, float>(),
|
||||
|
|
|
|||
|
|
@ -5,44 +5,16 @@ using UnityEngine;
|
|||
namespace UniGLTF
|
||||
{
|
||||
/// <summary>
|
||||
/// Gltf から MaterialImportParam に変換する
|
||||
///
|
||||
/// StandardShader variables
|
||||
///
|
||||
/// _Color
|
||||
/// _MainTex
|
||||
/// _Cutoff
|
||||
/// _Glossiness
|
||||
/// _Metallic
|
||||
/// _MetallicGlossMap
|
||||
/// _BumpScale
|
||||
/// _BumpMap
|
||||
/// _Parallax
|
||||
/// _ParallaxMap
|
||||
/// _OcclusionStrength
|
||||
/// _OcclusionMap
|
||||
/// _EmissionColor
|
||||
/// _EmissionMap
|
||||
/// _DetailMask
|
||||
/// _DetailAlbedoMap
|
||||
/// _DetailNormalMapScale
|
||||
/// _DetailNormalMap
|
||||
/// _UVSec
|
||||
/// _EmissionScaleUI
|
||||
/// _EmissionColorUI
|
||||
/// _Mode
|
||||
/// _SrcBlend
|
||||
/// _DstBlend
|
||||
/// _ZWrite
|
||||
/// A class that generates MaterialDescriptor for "Standard" shader based on glTF Material specification.
|
||||
///
|
||||
/// https://registry.khronos.org/glTF/specs/2.0/glTF-2.0.html#materials
|
||||
/// </summary>
|
||||
public static class BuiltInGltfPbrMaterialImporter
|
||||
public class BuiltInGltfPbrMaterialImporter
|
||||
{
|
||||
private static readonly int SrcBlend = Shader.PropertyToID("_SrcBlend");
|
||||
private static readonly int DstBlend = Shader.PropertyToID("_DstBlend");
|
||||
private static readonly int ZWrite = Shader.PropertyToID("_ZWrite");
|
||||
private static readonly int Cutoff = Shader.PropertyToID("_Cutoff");
|
||||
public static Shader Shader => Shader.Find("Standard");
|
||||
|
||||
private enum BlendMode
|
||||
{
|
||||
|
|
@ -52,7 +24,17 @@ namespace UniGLTF
|
|||
Transparent
|
||||
}
|
||||
|
||||
public static bool TryCreateParam(GltfData data, int i, out MaterialDescriptor matDesc)
|
||||
/// <summary>
|
||||
/// Can be replaced with custom shaders that are compatible with "Standard" properties and keywords.
|
||||
/// </summary>
|
||||
public Shader Shader { get; set; }
|
||||
|
||||
public BuiltInGltfPbrMaterialImporter(Shader shader = null)
|
||||
{
|
||||
Shader = shader != null ? shader : Shader.Find("Standard");
|
||||
}
|
||||
|
||||
public bool TryCreateParam(GltfData data, int i, out MaterialDescriptor matDesc)
|
||||
{
|
||||
if (i < 0 || i >= data.GLTF.materials.Count)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -5,13 +5,26 @@ using UnityEngine;
|
|||
|
||||
namespace UniGLTF
|
||||
{
|
||||
public static class BuiltInGltfUnlitMaterialImporter
|
||||
/// <summary>
|
||||
/// A class that generates MaterialDescriptor for "UnGLTF/UniUnlit" shader based on glTF Extension "KHR_materials_unlit".
|
||||
///
|
||||
/// https://github.com/KhronosGroup/glTF/tree/main/extensions/2.0/Khronos/KHR_materials_unlit
|
||||
/// </summary>
|
||||
public class BuiltInGltfUnlitMaterialImporter
|
||||
{
|
||||
private static readonly int Cutoff = Shader.PropertyToID("_Cutoff");
|
||||
|
||||
public static Shader Shader => Shader.Find(UniUnlitUtil.ShaderName);
|
||||
/// <summary>
|
||||
/// Can be replaced with custom shaders that are compatible with "UniGLTF/UniUnlit" properties and keywords.
|
||||
/// </summary>
|
||||
public Shader Shader { get; set; }
|
||||
|
||||
public static bool TryCreateParam(GltfData data, int i, out MaterialDescriptor matDesc)
|
||||
public BuiltInGltfUnlitMaterialImporter(Shader shader = null)
|
||||
{
|
||||
Shader = shader != null ? shader : Shader.Find(UniUnlitUtil.ShaderName);
|
||||
}
|
||||
|
||||
public bool TryCreateParam(GltfData data, int i, out MaterialDescriptor matDesc)
|
||||
{
|
||||
if (i < 0 || i >= data.GLTF.materials.Count)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -6,12 +6,15 @@ using UnityEngine.Rendering;
|
|||
namespace UniGLTF
|
||||
{
|
||||
/// <summary>
|
||||
/// Generate the descriptor of the glTF default material.
|
||||
/// A class that generates MaterialDescriptor for "Universal Render Pipeline/Lit" shader based on glTF default Material specification.
|
||||
///
|
||||
/// https://registry.khronos.org/glTF/specs/2.0/glTF-2.0.html#default-material
|
||||
/// </summary>
|
||||
public class UrpGltfDefaultMaterialImporter
|
||||
{
|
||||
/// <summary>
|
||||
/// Can be replaced with custom shaders that are compatible with "Universal Render Pipeline/Lit" properties and keywords.
|
||||
/// </summary>
|
||||
public Shader Shader { get; set; }
|
||||
|
||||
public UrpGltfDefaultMaterialImporter(Shader shader = null)
|
||||
|
|
|
|||
|
|
@ -7,14 +7,14 @@ using UnityEngine.Rendering;
|
|||
namespace UniGLTF
|
||||
{
|
||||
/// <summary>
|
||||
/// glTF PBR to URP Lit.
|
||||
///
|
||||
/// see: https://github.com/Unity-Technologies/Graphics/blob/v7.5.3/com.unity.render-pipelines.universal/Editor/UniversalRenderPipelineMaterialUpgrader.cs#L354-L379
|
||||
/// A class that generates MaterialDescriptor for "Universal Render Pipeline/Lit" shader based on glTF Material specification.
|
||||
///
|
||||
/// https://registry.khronos.org/glTF/specs/2.0/glTF-2.0.html#materials
|
||||
/// </summary>
|
||||
public class UrpGltfPbrMaterialImporter
|
||||
{
|
||||
/// <summary>
|
||||
/// Universal Render Pipeline/Lit とプロパティやキーワードに互換があるカスタムシェーダに置換可能。
|
||||
/// Can be replaced with custom shaders that are compatible with "Universal Render Pipeline/Lit" properties and keywords.
|
||||
/// </summary>
|
||||
public Shader Shader { get; set; }
|
||||
|
||||
|
|
|
|||
|
|
@ -3,16 +3,17 @@ using UnityEngine;
|
|||
namespace UniGLTF
|
||||
{
|
||||
/// <summary>
|
||||
/// GLTF の MaterialImporter
|
||||
/// A class that generates MaterialDescriptor by considering the extensions included in the glTF data to be imported.
|
||||
/// </summary>
|
||||
public sealed class UrpGltfMaterialDescriptorGenerator : IMaterialDescriptorGenerator
|
||||
{
|
||||
public UrpGltfPbrMaterialImporter PbrMaterialImporter { get; } = new();
|
||||
public UrpGltfDefaultMaterialImporter DefaultMaterialImporter { get; } = new();
|
||||
public BuiltInGltfUnlitMaterialImporter UnlitMaterialImporter { get; } = new();
|
||||
|
||||
public MaterialDescriptor Get(GltfData data, int i)
|
||||
{
|
||||
if (BuiltInGltfUnlitMaterialImporter.TryCreateParam(data, i, out var param)) return param;
|
||||
if (UnlitMaterialImporter.TryCreateParam(data, i, out var param)) return param;
|
||||
if (PbrMaterialImporter.TryCreateParam(data, i, out param)) return param;
|
||||
|
||||
// NOTE: Fallback to default material
|
||||
|
|
|
|||
|
|
@ -83,6 +83,7 @@ namespace UniGLTF
|
|||
RestoreOlderVersionValues(json, GLTF);
|
||||
|
||||
FixMeshNameUnique(GLTF);
|
||||
FixBlendShapeNameUnique(GLTF);
|
||||
foreach (var image in GLTF.images)
|
||||
{
|
||||
image.uri = PrepareUri(image.uri);
|
||||
|
|
@ -121,6 +122,61 @@ namespace UniGLTF
|
|||
}
|
||||
}
|
||||
|
||||
// https://github.com/vrm-c/UniVRM/issues/2619
|
||||
private static void FixBlendShapeNameUnique(glTF GLTF)
|
||||
{
|
||||
foreach (var mesh in GLTF.meshes)
|
||||
{
|
||||
/// https://github.com/KhronosGroup/glTF/pull/1631/files
|
||||
if (gltf_mesh_extras_targetNames.TryGet(mesh, out var targetNames))
|
||||
{
|
||||
var used = new HashSet<string>();
|
||||
int rename = 0;
|
||||
for (int i = 0; i < targetNames.Count; ++i)
|
||||
{
|
||||
var target_name = targetNames[i];
|
||||
if (string.IsNullOrEmpty(target_name))
|
||||
{
|
||||
// no name
|
||||
targetNames[i] = $"__{i}__";
|
||||
UniGLTFLogger.Log($"rename blendshape: {mesh.name}[{i}]{target_name} => {targetNames[i]}");
|
||||
rename += 1;
|
||||
}
|
||||
else if (used.Contains(target_name))
|
||||
{
|
||||
// rename
|
||||
var uname = $"__{i}__{target_name}";
|
||||
targetNames[i] = uname;
|
||||
UniGLTFLogger.Log($"rename blendshape: {mesh.name}[{i}]{target_name} => {targetNames[i]}");
|
||||
rename += 1;
|
||||
}
|
||||
used.Add(targetNames[i]);
|
||||
}
|
||||
if (rename > 0)
|
||||
{
|
||||
|
||||
// var extrans = new Dictionary<string, JsonNode>()
|
||||
// {
|
||||
// {"targetNames", targetNames },
|
||||
var f = new JsonFormatter();
|
||||
f.BeginMap();
|
||||
f.Key("targetNames");
|
||||
{
|
||||
f.BeginList();
|
||||
foreach (var name in targetNames)
|
||||
{
|
||||
f.Value(name);
|
||||
}
|
||||
f.EndList();
|
||||
}
|
||||
f.EndMap();
|
||||
var json = f.ToString();
|
||||
mesh.extras = new UniGLTF.glTFExtensionImport(JsonParser.Parse(json));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static void RenameImageFromTexture(glTF GLTF, int i)
|
||||
{
|
||||
foreach (var texture in GLTF.textures)
|
||||
|
|
|
|||
|
|
@ -4,8 +4,8 @@ namespace UniGLTF
|
|||
public static partial class PackageVersion
|
||||
{
|
||||
public const int MAJOR = 0;
|
||||
public const int MINOR = 129;
|
||||
public const int PATCH = 3;
|
||||
public const string VERSION = "0.129.3";
|
||||
public const int MINOR = 130;
|
||||
public const int PATCH = 0;
|
||||
public const string VERSION = "0.130.0";
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,8 +4,8 @@ namespace UniGLTF
|
|||
public static partial class UniGLTFVersion
|
||||
{
|
||||
public const int MAJOR = 2;
|
||||
public const int MINOR = 65;
|
||||
public const int PATCH = 3;
|
||||
public const string VERSION = "2.65.3";
|
||||
public const int MINOR = 66;
|
||||
public const int PATCH = 0;
|
||||
public const string VERSION = "2.66.0";
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -53,7 +53,7 @@ namespace UniJSON
|
|||
}
|
||||
|
||||
default:
|
||||
throw new ParserException(segment + " is not valid json start");
|
||||
throw new ParserException(segment + " is not valid json start(maybe invalid ',')");
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -233,5 +233,103 @@ namespace UniGLTF
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
// https://github.khronos.org/glTF-Tutorials/gltfTutorial/gltfTutorial_017_SimpleMorphTarget.html
|
||||
[Test]
|
||||
public void Preprocess_AutoNodeName()
|
||||
{
|
||||
var json = @"
|
||||
{
|
||||
""scene"": 0,
|
||||
""scenes"" : [
|
||||
{
|
||||
""nodes"" : [ 0 ]
|
||||
}
|
||||
],
|
||||
|
||||
""nodes"" : [
|
||||
{
|
||||
""mesh"" : 0
|
||||
}
|
||||
],
|
||||
|
||||
""meshes"" : [
|
||||
{
|
||||
""primitives"" : [ {
|
||||
""attributes"" : {
|
||||
""POSITION"" : 1
|
||||
},
|
||||
""indices"" : 0
|
||||
} ]
|
||||
}
|
||||
],
|
||||
|
||||
""buffers"" : [
|
||||
{
|
||||
""uri"" : ""data:application/octet-stream;base64,AAABAAIAAAAAAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAA="",
|
||||
""byteLength"" : 44
|
||||
}
|
||||
],
|
||||
""bufferViews"" : [
|
||||
{
|
||||
""buffer"" : 0,
|
||||
""byteOffset"" : 0,
|
||||
""byteLength"" : 6,
|
||||
""target"" : 34963
|
||||
},
|
||||
{
|
||||
""buffer"" : 0,
|
||||
""byteOffset"" : 8,
|
||||
""byteLength"" : 36,
|
||||
""target"" : 34962
|
||||
}
|
||||
],
|
||||
""accessors"" : [
|
||||
{
|
||||
""bufferView"" : 0,
|
||||
""byteOffset"" : 0,
|
||||
""componentType"" : 5123,
|
||||
""count"" : 3,
|
||||
""type"" : ""SCALAR"",
|
||||
""max"" : [ 2 ],
|
||||
""min"" : [ 0 ]
|
||||
},
|
||||
{
|
||||
""bufferView"" : 1,
|
||||
""byteOffset"" : 0,
|
||||
""componentType"" : 5126,
|
||||
""count"" : 3,
|
||||
""type"" : ""VEC3"",
|
||||
""max"" : [ 1.0, 1.0, 0.0 ],
|
||||
""min"" : [ 0.0, 0.0, 0.0 ]
|
||||
}
|
||||
],
|
||||
|
||||
""asset"" : {
|
||||
""version"" : ""2.0""
|
||||
}
|
||||
}
|
||||
";
|
||||
|
||||
var gltf = GlbLowLevelParser.ParseGltf("tmp", json, null, null, default);
|
||||
Assert.AreEqual(1, gltf.GLTF.nodes.Count);
|
||||
Assert.AreEqual("0", gltf.GLTF.nodes[0].name);
|
||||
}
|
||||
|
||||
// https://github.khronos.org/glTF-Tutorials/gltfTutorial/gltfTutorial_017_SimpleMorphTarget.html
|
||||
[Test]
|
||||
public void Preprocess_DupMorphTargetName()
|
||||
{
|
||||
var asset = UnityEditor.AssetDatabase.LoadAssetAtPath<TextAsset>("Assets/UniGLTF/Tests/UniGLTF/gltfTutorial_017_SimpleMorphTarget.txt");
|
||||
Assert.True(asset);
|
||||
var gltf = GlbLowLevelParser.ParseGltf("tmp", asset.text, null, null, default);
|
||||
Assert.AreEqual(1, gltf.GLTF.nodes.Count);
|
||||
Assert.AreEqual("0", gltf.GLTF.nodes[0].name);
|
||||
Assert.True(gltf_mesh_extras_targetNames.TryGet(gltf.GLTF.meshes[0], out List<string> targetNames));
|
||||
// [dup_name, dup_name] => [dup_name, __1__dup_name]
|
||||
Assert.AreEqual(2, targetNames.Count);
|
||||
Assert.AreEqual("dup_name", targetNames[0]);
|
||||
Assert.AreEqual("__1__dup_name", targetNames[1]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,198 @@
|
|||
{
|
||||
"scene": 0,
|
||||
"scenes":[
|
||||
{
|
||||
"nodes":[
|
||||
0
|
||||
]
|
||||
}
|
||||
],
|
||||
"nodes":[
|
||||
{
|
||||
"mesh":0
|
||||
}
|
||||
],
|
||||
"meshes":[
|
||||
{
|
||||
"primitives":[
|
||||
{
|
||||
"attributes":{
|
||||
"POSITION":1
|
||||
},
|
||||
"targets":[
|
||||
{
|
||||
"POSITION":2
|
||||
},
|
||||
{
|
||||
"POSITION":3
|
||||
}
|
||||
],
|
||||
"indices":0
|
||||
}
|
||||
],
|
||||
"weights":[
|
||||
1.0,
|
||||
0.5
|
||||
],
|
||||
"extras":{
|
||||
"targetNames": [
|
||||
"dup_name",
|
||||
"dup_name"
|
||||
]
|
||||
}
|
||||
}
|
||||
],
|
||||
|
||||
"animations":[
|
||||
{
|
||||
"samplers":[
|
||||
{
|
||||
"input":4,
|
||||
"interpolation":"LINEAR",
|
||||
"output":5
|
||||
}
|
||||
],
|
||||
"channels":[
|
||||
{
|
||||
"sampler":0,
|
||||
"target":{
|
||||
"node":0,
|
||||
"path":"weights"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
|
||||
"buffers":[
|
||||
{
|
||||
"uri":"data:application/gltf-buffer;base64,AAABAAIAAAAAAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAA/AAAAPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIC/AACAPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIA/AACAPwAAAAA=",
|
||||
"byteLength":116
|
||||
},
|
||||
{
|
||||
"uri":"data:application/gltf-buffer;base64,AAAAAAAAgD8AAABAAABAQAAAgEAAAAAAAAAAAAAAAAAAAIA/AACAPwAAgD8AAIA/AAAAAAAAAAAAAAAA",
|
||||
"byteLength":60
|
||||
}
|
||||
],
|
||||
"bufferViews":[
|
||||
{
|
||||
"buffer":0,
|
||||
"byteOffset":0,
|
||||
"byteLength":6,
|
||||
"target":34963
|
||||
},
|
||||
{
|
||||
"buffer":0,
|
||||
"byteOffset":8,
|
||||
"byteLength":108,
|
||||
"byteStride":12,
|
||||
"target":34962
|
||||
},
|
||||
{
|
||||
"buffer":1,
|
||||
"byteOffset":0,
|
||||
"byteLength":20
|
||||
},
|
||||
{
|
||||
"buffer":1,
|
||||
"byteOffset":20,
|
||||
"byteLength":40
|
||||
}
|
||||
],
|
||||
"accessors":[
|
||||
{
|
||||
"bufferView":0,
|
||||
"byteOffset":0,
|
||||
"componentType":5123,
|
||||
"count":3,
|
||||
"type":"SCALAR",
|
||||
"max":[
|
||||
2
|
||||
],
|
||||
"min":[
|
||||
0
|
||||
]
|
||||
},
|
||||
{
|
||||
"bufferView":1,
|
||||
"byteOffset":0,
|
||||
"componentType":5126,
|
||||
"count":3,
|
||||
"type":"VEC3",
|
||||
"max":[
|
||||
1.0,
|
||||
0.5,
|
||||
0.0
|
||||
],
|
||||
"min":[
|
||||
0.0,
|
||||
0.0,
|
||||
0.0
|
||||
]
|
||||
},
|
||||
{
|
||||
"bufferView":1,
|
||||
"byteOffset":36,
|
||||
"componentType":5126,
|
||||
"count":3,
|
||||
"type":"VEC3",
|
||||
"max":[
|
||||
0.0,
|
||||
1.0,
|
||||
0.0
|
||||
],
|
||||
"min":[
|
||||
-1.0,
|
||||
0.0,
|
||||
0.0
|
||||
]
|
||||
},
|
||||
{
|
||||
"bufferView":1,
|
||||
"byteOffset":72,
|
||||
"componentType":5126,
|
||||
"count":3,
|
||||
"type":"VEC3",
|
||||
"max":[
|
||||
1.0,
|
||||
1.0,
|
||||
0.0
|
||||
],
|
||||
"min":[
|
||||
0.0,
|
||||
0.0,
|
||||
0.0
|
||||
]
|
||||
},
|
||||
{
|
||||
"bufferView":2,
|
||||
"byteOffset":0,
|
||||
"componentType":5126,
|
||||
"count":5,
|
||||
"type":"SCALAR",
|
||||
"max":[
|
||||
4.0
|
||||
],
|
||||
"min":[
|
||||
0.0
|
||||
]
|
||||
},
|
||||
{
|
||||
"bufferView":3,
|
||||
"byteOffset":0,
|
||||
"componentType":5126,
|
||||
"count":10,
|
||||
"type":"SCALAR",
|
||||
"max":[
|
||||
1.0
|
||||
],
|
||||
"min":[
|
||||
0.0
|
||||
]
|
||||
}
|
||||
],
|
||||
|
||||
"asset":{
|
||||
"version":"2.0"
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
fileFormatVersion: 2
|
||||
guid: ff5b21eda4deae14583275d904ae3d08
|
||||
TextScriptImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "com.vrmc.gltf",
|
||||
"version": "0.129.3",
|
||||
"version": "0.130.0",
|
||||
"displayName": "UniGLTF",
|
||||
"description": "GLTF importer and exporter",
|
||||
"unity": "2021.3",
|
||||
|
|
|
|||
|
|
@ -5,10 +5,19 @@ using UnityEngine;
|
|||
|
||||
namespace VRM
|
||||
{
|
||||
/// <summary>
|
||||
/// A class that generates MaterialDescriptor by considering the VRM 0.X extension included in the glTF data to be imported.
|
||||
/// </summary>
|
||||
public sealed class BuiltInVrmMaterialDescriptorGenerator : IMaterialDescriptorGenerator
|
||||
{
|
||||
private readonly glTF_VRM_extensions _vrm;
|
||||
|
||||
public BuiltInGltfPbrMaterialImporter PbrMaterialImporter { get; } = new();
|
||||
public BuiltInGltfDefaultMaterialImporter DefaultMaterialImporter { get; } = new();
|
||||
public BuiltInGltfUnlitMaterialImporter UnlitMaterialImporter { get; } = new();
|
||||
public BuiltInVrmMToonMaterialImporter MToonMaterialImporter { get; } = new();
|
||||
public BuiltInVrmUnlitTransparentZWriteMaterialImporter UnlitTransparentZWriteMaterialImporter { get; } = new();
|
||||
|
||||
public BuiltInVrmMaterialDescriptorGenerator(glTF_VRM_extensions vrm)
|
||||
{
|
||||
_vrm = vrm;
|
||||
|
|
@ -17,25 +26,25 @@ namespace VRM
|
|||
public MaterialDescriptor Get(GltfData data, int i)
|
||||
{
|
||||
// legacy "VRM/UnlitTransparentZWrite"
|
||||
if (BuiltInVrmUnlitTransparentZWriteMaterialImporter.TryCreateParam(data, _vrm, i, out var matDesc))
|
||||
if (UnlitTransparentZWriteMaterialImporter.TryCreateParam(data, _vrm, i, out var matDesc))
|
||||
{
|
||||
return matDesc;
|
||||
}
|
||||
|
||||
// mtoon
|
||||
if (BuiltInVrmMToonMaterialImporter.TryCreateParam(data, _vrm, i, out matDesc))
|
||||
if (MToonMaterialImporter.TryCreateParam(data, _vrm, i, out matDesc))
|
||||
{
|
||||
return matDesc;
|
||||
}
|
||||
|
||||
// unlit
|
||||
if (BuiltInGltfUnlitMaterialImporter.TryCreateParam(data, i, out matDesc))
|
||||
if (UnlitMaterialImporter.TryCreateParam(data, i, out matDesc))
|
||||
{
|
||||
return matDesc;
|
||||
}
|
||||
|
||||
// pbr
|
||||
if (BuiltInGltfPbrMaterialImporter.TryCreateParam(data, i, out matDesc))
|
||||
if (PbrMaterialImporter.TryCreateParam(data, i, out matDesc))
|
||||
{
|
||||
return matDesc;
|
||||
}
|
||||
|
|
@ -48,6 +57,6 @@ namespace VRM
|
|||
return GetGltfDefault(GltfMaterialImportUtils.ImportMaterialName(i, null));
|
||||
}
|
||||
|
||||
public MaterialDescriptor GetGltfDefault(string materialName = null) => BuiltInGltfDefaultMaterialImporter.CreateParam(materialName);
|
||||
public MaterialDescriptor GetGltfDefault(string materialName = null) => DefaultMaterialImporter.CreateParam(materialName);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -6,7 +6,12 @@ using UnityEngine;
|
|||
|
||||
namespace VRM
|
||||
{
|
||||
public static class BuiltInVrmMToonMaterialImporter
|
||||
/// <summary>
|
||||
/// A class that generates MaterialDescriptor for some shader based on VRM 0.X implementation.
|
||||
///
|
||||
/// There is no specification for VRM 0.X.
|
||||
/// </summary>
|
||||
public class BuiltInVrmMToonMaterialImporter
|
||||
{
|
||||
/// <summary>
|
||||
/// 過去バージョンに含まれていたが、廃止・統合された Shader のフォールバック情報
|
||||
|
|
@ -33,8 +38,46 @@ namespace VRM
|
|||
"_UvAnimMaskTexture",
|
||||
};
|
||||
|
||||
public static bool TryCreateParam(GltfData data, glTF_VRM_extensions vrm, int materialIdx,
|
||||
out MaterialDescriptor matDesc)
|
||||
/// <summary>
|
||||
/// Can be replaced with custom shaders that are compatible with "VRM/MToon" properties and keywords.
|
||||
/// </summary>
|
||||
public Shader MToonShader { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Can be replaced with custom shaders that are compatible with "Unlit/Texture" properties and keywords.
|
||||
/// </summary>
|
||||
public Shader UnlitTextureShader { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Can be replaced with custom shaders that are compatible with "Unlit/Transparent" properties and keywords.
|
||||
/// </summary>
|
||||
public Shader UnlitTransparentShader { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Can be replaced with custom shaders that are compatible with "Unlit/Transparent Cutout" properties and keywords.
|
||||
/// </summary>
|
||||
public Shader UnlitTransparentCutoutShader { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Can be replaced with custom shaders that are compatible with "UniGLTF/UniUnlit" properties and keywords.
|
||||
/// </summary>
|
||||
public Shader UniUnlitShader { get; set; }
|
||||
|
||||
public BuiltInVrmMToonMaterialImporter(
|
||||
Shader mtoonShader = null,
|
||||
Shader unlitTextureShader = null,
|
||||
Shader unlitTransparentShader = null,
|
||||
Shader unlitTransparentCutoutShader = null,
|
||||
Shader uniUnlitShader = null)
|
||||
{
|
||||
MToonShader = mtoonShader != null ? mtoonShader : Shader.Find("VRM/MToon");
|
||||
UnlitTextureShader = unlitTextureShader != null ? unlitTextureShader : Shader.Find("Unlit/Texture");
|
||||
UnlitTransparentShader = unlitTransparentShader != null ? unlitTransparentShader : Shader.Find("Unlit/Transparent");
|
||||
UnlitTransparentCutoutShader = unlitTransparentCutoutShader != null ? unlitTransparentCutoutShader : Shader.Find("Unlit/Transparent Cutout");
|
||||
UniUnlitShader = uniUnlitShader != null ? uniUnlitShader : Shader.Find(UniGLTF.UniUnlit.UniUnlitUtil.ShaderName);
|
||||
}
|
||||
|
||||
public bool TryCreateParam(GltfData data, glTF_VRM_extensions vrm, int materialIdx, out MaterialDescriptor matDesc)
|
||||
{
|
||||
if (vrm?.materialProperties == null || vrm.materialProperties.Count == 0)
|
||||
{
|
||||
|
|
@ -66,7 +109,16 @@ namespace VRM
|
|||
{
|
||||
shaderName = FallbackShaders[shaderName];
|
||||
}
|
||||
var shader = Shader.Find(shaderName);
|
||||
|
||||
var shader = shaderName switch
|
||||
{
|
||||
"VRM/MToon" => MToonShader,
|
||||
"Unlit/Texture" => UnlitTextureShader,
|
||||
"Unlit/Transparent" => UnlitTransparentShader,
|
||||
"Unlit/Transparent Cutout" => UnlitTransparentCutoutShader,
|
||||
UniGLTF.UniUnlit.UniUnlitUtil.ShaderName => UniUnlitShader,
|
||||
_ => Shader.Find(shaderName),
|
||||
};
|
||||
|
||||
var textureSlots = new Dictionary<string, TextureDescriptor>();
|
||||
var floatValues = new Dictionary<string, float>();
|
||||
|
|
|
|||
|
|
@ -8,12 +8,27 @@ using RenderMode = MToon.RenderMode;
|
|||
|
||||
namespace VRM
|
||||
{
|
||||
public static class BuiltInVrmUnlitTransparentZWriteMaterialImporter
|
||||
/// <summary>
|
||||
/// A class that generates MaterialDescriptor for "VRM/UnlitTransparentZWrite" shader based on VRM 0.X implementation.
|
||||
///
|
||||
/// There is no specification for VRM 0.X.
|
||||
/// </summary>
|
||||
public class BuiltInVrmUnlitTransparentZWriteMaterialImporter
|
||||
{
|
||||
public const string UnlitTransparentZWriteShaderName = "VRM/UnlitTransparentZWrite";
|
||||
public const string UnlitTransparentZWriteMainTexturePropName = "_MainTex";
|
||||
|
||||
public static bool TryCreateParam(GltfData data, glTF_VRM_extensions vrm, int materialIdx,
|
||||
/// <summary>
|
||||
/// Can be replaced with custom shaders that are compatible with "VRM/UnlitTransparentZWrite" properties and keywords.
|
||||
/// </summary>
|
||||
public Shader Shader { get; }
|
||||
|
||||
public BuiltInVrmUnlitTransparentZWriteMaterialImporter(Shader shader = null)
|
||||
{
|
||||
Shader = shader != null ? shader : Shader.Find(UnlitTransparentZWriteShaderName);
|
||||
}
|
||||
|
||||
public bool TryCreateParam(GltfData data, glTF_VRM_extensions vrm, int materialIdx,
|
||||
out MaterialDescriptor matDesc)
|
||||
{
|
||||
if (vrm?.materialProperties == null || vrm.materialProperties.Count == 0)
|
||||
|
|
|
|||
|
|
@ -5,12 +5,16 @@ using UnityEngine;
|
|||
|
||||
namespace VRM
|
||||
{
|
||||
/// <summary>
|
||||
/// A class that generates MaterialDescriptor by considering the VRM 0.X extension included in the glTF data to be imported.
|
||||
/// </summary>
|
||||
public sealed class UrpVrmMaterialDescriptorGenerator : IMaterialDescriptorGenerator
|
||||
{
|
||||
private readonly glTF_VRM_extensions _vrm;
|
||||
|
||||
public UrpGltfPbrMaterialImporter PbrMaterialImporter { get; } = new();
|
||||
public UrpGltfDefaultMaterialImporter DefaultMaterialImporter { get; } = new();
|
||||
public BuiltInGltfUnlitMaterialImporter UnlitMaterialImporter { get; } = new();
|
||||
|
||||
public UrpVrmMaterialDescriptorGenerator(glTF_VRM_extensions vrm)
|
||||
{
|
||||
|
|
@ -21,7 +25,7 @@ namespace VRM
|
|||
{
|
||||
// mtoon URP "MToon" shader is not ready. import fallback to unlit
|
||||
// unlit "UniUnlit" work in URP
|
||||
if (BuiltInGltfUnlitMaterialImporter.TryCreateParam(data, i, out var matDesc)) return matDesc;
|
||||
if (UnlitMaterialImporter.TryCreateParam(data, i, out var matDesc)) return matDesc;
|
||||
// pbr "Standard" to "Universal Render Pipeline/Lit"
|
||||
if (PbrMaterialImporter.TryCreateParam(data, i, out matDesc)) return matDesc;
|
||||
|
||||
|
|
|
|||
|
|
@ -6,7 +6,8 @@
|
|||
"GUID:1cd941934d098654fa21a13f28346412",
|
||||
"GUID:b7aa47b240b57de44a4b2021c143c9bf",
|
||||
"GUID:05dd262a0c0a2f841b8252c8c3815582",
|
||||
"GUID:3e5d614bc16b50d41bd94c8d7444ca46"
|
||||
"GUID:3e5d614bc16b50d41bd94c8d7444ca46",
|
||||
"GUID:d8b63aba1907145bea998dd612889d6b"
|
||||
],
|
||||
"includePlatforms": [],
|
||||
"excludePlatforms": [],
|
||||
|
|
|
|||
|
|
@ -343,15 +343,15 @@ namespace VRM.SimpleViewer
|
|||
m_loaded.EnableLipSyncValue = m_enableLipSync.isOn;
|
||||
m_loaded.EnableBlinkValue = m_enableAutoBlink.isOn;
|
||||
m_loaded.SetSpringboneModelLevel(new UniGLTF.SpringBoneJobs.Blittables.BlittableModelLevel
|
||||
{
|
||||
ExternalForce = new Vector3(
|
||||
(
|
||||
externalForce: new Vector3(
|
||||
m_springExternalX.value,
|
||||
m_springExternalY.value,
|
||||
m_springExternalZ.value
|
||||
),
|
||||
StopSpringBoneWriteback = m_springBonePause.isOn,
|
||||
SupportsScalingAtRuntime = m_springBoneScaling.isOn,
|
||||
});
|
||||
stopSpringBoneWriteback: m_springBonePause.isOn,
|
||||
supportsScalingAtRuntime: m_springBoneScaling.isOn
|
||||
));
|
||||
m_loaded.Update();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -48,9 +48,10 @@ namespace VRM
|
|||
{
|
||||
var vrm = new VRMData(data);
|
||||
var importer = new VRMImporterContext(vrm, null);
|
||||
var materialImporter = new BuiltInVrmMToonMaterialImporter();
|
||||
|
||||
Assert.AreEqual(73, vrm.Data.GLTF.materials.Count);
|
||||
Assert.True(BuiltInVrmMToonMaterialImporter.TryCreateParam(vrm.Data, importer.VRM, 0, out MaterialDescriptor matDesc));
|
||||
Assert.True(materialImporter.TryCreateParam(vrm.Data, importer.VRM, 0, out MaterialDescriptor matDesc));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -138,9 +138,10 @@ namespace VRM
|
|||
},
|
||||
}
|
||||
};
|
||||
var materialImporter = new BuiltInVrmMToonMaterialImporter();
|
||||
|
||||
// 2系統ある?
|
||||
Assert.IsTrue(BuiltInVrmMToonMaterialImporter.TryCreateParam(data, vrm, 0, out var matDesc));
|
||||
Assert.IsTrue(materialImporter.TryCreateParam(data, vrm, 0, out var matDesc));
|
||||
Assert.AreEqual(1, matDesc.TextureSlots.Count);
|
||||
|
||||
var items = new VrmTextureDescriptorGenerator(data, vrm).Get().GetEnumerable().ToArray();
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "com.vrmc.univrm",
|
||||
"version": "0.129.3",
|
||||
"version": "0.130.0",
|
||||
"displayName": "VRM",
|
||||
"description": "VRM importer",
|
||||
"unity": "2021.3",
|
||||
|
|
@ -14,7 +14,7 @@
|
|||
"name": "VRM Consortium"
|
||||
},
|
||||
"dependencies": {
|
||||
"com.vrmc.gltf": "0.129.3",
|
||||
"com.vrmc.gltf": "0.130.0",
|
||||
"com.unity.ugui": "1.0.0"
|
||||
},
|
||||
"samples": [
|
||||
|
|
|
|||
|
|
@ -87,9 +87,11 @@ namespace UniVRM10
|
|||
//
|
||||
// angle limit
|
||||
//
|
||||
m_showAnglelimitSettings = EditorGUILayout.Foldout(m_showAnglelimitSettings, "AngleLimit Settings(dev)");
|
||||
m_showAnglelimitSettings = EditorGUILayout.Foldout(m_showAnglelimitSettings, "AngleLimit Settings (experimental)");
|
||||
if (m_showAnglelimitSettings)
|
||||
{
|
||||
EditorGUILayout.HelpBox("SpringBoneの角度制限はまだdraft仕様です。将来的に仕様が変更される可能性があります。また、VRMファイルへのインポート・エクスポート機能はまだ実装されていません。\nThe angle limit feature for SpringBone is still in draft status. The specifications may change in the future. Also, the import/export of VRM files has not yet been implemented.", MessageType.Warning);
|
||||
|
||||
EditorGUILayout.PropertyField(m_angleLimitType);
|
||||
switch ((UniGLTF.SpringBoneJobs.AnglelimitTypes)m_angleLimitType.enumValueIndex)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -5,16 +5,24 @@ using UnityEngine;
|
|||
|
||||
namespace UniVRM10
|
||||
{
|
||||
/// <summary>
|
||||
/// A class that generates MaterialDescriptor by considering the VRM 1.0 extension included in the glTF data to be imported.
|
||||
/// </summary>
|
||||
public sealed class BuiltInVrm10MaterialDescriptorGenerator : IMaterialDescriptorGenerator
|
||||
{
|
||||
public BuiltInGltfPbrMaterialImporter PbrMaterialImporter { get; } = new();
|
||||
public BuiltInGltfDefaultMaterialImporter DefaultMaterialImporter { get; } = new();
|
||||
public BuiltInGltfUnlitMaterialImporter UnlitMaterialImporter { get; } = new();
|
||||
public BuiltInVrm10MToonMaterialImporter MToonMaterialImporter { get; } = new();
|
||||
|
||||
public MaterialDescriptor Get(GltfData data, int i)
|
||||
{
|
||||
// mtoon
|
||||
if (BuiltInVrm10MToonMaterialImporter.TryCreateParam(data, i, out MaterialDescriptor matDesc)) return matDesc;
|
||||
if (MToonMaterialImporter.TryCreateParam(data, i, out MaterialDescriptor matDesc)) return matDesc;
|
||||
// unlit
|
||||
if (BuiltInGltfUnlitMaterialImporter.TryCreateParam(data, i, out matDesc)) return matDesc;
|
||||
if (UnlitMaterialImporter.TryCreateParam(data, i, out matDesc)) return matDesc;
|
||||
// pbr
|
||||
if (BuiltInGltfPbrMaterialImporter.TryCreateParam(data, i, out matDesc)) return matDesc;
|
||||
if (PbrMaterialImporter.TryCreateParam(data, i, out matDesc)) return matDesc;
|
||||
|
||||
// fallback
|
||||
if (Symbols.VRM_DEVELOP)
|
||||
|
|
@ -24,6 +32,6 @@ namespace UniVRM10
|
|||
return GetGltfDefault(GltfMaterialImportUtils.ImportMaterialName(i, null));
|
||||
}
|
||||
|
||||
public MaterialDescriptor GetGltfDefault(string materialName = null) => BuiltInGltfDefaultMaterialImporter.CreateParam(materialName);
|
||||
public MaterialDescriptor GetGltfDefault(string materialName = null) => DefaultMaterialImporter.CreateParam(materialName);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -11,14 +11,26 @@ using OutlineWidthMode = UniGLTF.Extensions.VRMC_materials_mtoon.OutlineWidthMod
|
|||
namespace UniVRM10
|
||||
{
|
||||
/// <summary>
|
||||
/// Convert MToon parameters from glTF specification to Unity implementation.
|
||||
/// A class that generates MaterialDescriptor for "VRM10/MToon10" shader based on vrm-1.0 Material specification.
|
||||
///
|
||||
/// https://github.com/vrm-c/vrm-specification/blob/master/specification/VRMC_materials_mtoon-1.0/README.md
|
||||
/// </summary>
|
||||
public static class BuiltInVrm10MToonMaterialImporter
|
||||
public class BuiltInVrm10MToonMaterialImporter
|
||||
{
|
||||
/// <summary>
|
||||
/// Can be replaced with custom shaders that are compatible with "VRM10/MToon10" properties and keywords.
|
||||
/// </summary>
|
||||
public Shader Shader { get; set; }
|
||||
|
||||
public BuiltInVrm10MToonMaterialImporter(Shader shader = null)
|
||||
{
|
||||
Shader = shader != null ? shader : Shader.Find("VRM10/MToon10");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// VMRC_materials_mtoon の場合にマテリアル生成情報を作成する
|
||||
/// </summary>
|
||||
public static bool TryCreateParam(GltfData data, int i, out MaterialDescriptor matDesc)
|
||||
public bool TryCreateParam(GltfData data, int i, out MaterialDescriptor matDesc)
|
||||
{
|
||||
var m = data.GLTF.materials[i];
|
||||
if (!UniGLTF.Extensions.VRMC_materials_mtoon.GltfDeserializer.TryGet(m.extensions,
|
||||
|
|
|
|||
|
|
@ -7,14 +7,26 @@ using VRM10.MToon10;
|
|||
namespace UniVRM10
|
||||
{
|
||||
/// <summary>
|
||||
/// Convert MToon parameters from glTF specification to Unity implementation.(for URP)
|
||||
/// A class that generates MaterialDescriptor for "VRM10/Universal Render Pipeline/MToon10" shader based on vrm-1.0 Material specification.
|
||||
///
|
||||
/// https://github.com/vrm-c/vrm-specification/blob/master/specification/VRMC_materials_mtoon-1.0/README.md
|
||||
/// </summary>
|
||||
public static class UrpVrm10MToonMaterialImporter
|
||||
public class UrpVrm10MToonMaterialImporter
|
||||
{
|
||||
/// <summary>
|
||||
/// Can be replaced with custom shaders that are compatible with "VRM10/Universal Render Pipeline/MToon10" properties and keywords.
|
||||
/// </summary>
|
||||
public Shader Shader { get; set; }
|
||||
|
||||
public UrpVrm10MToonMaterialImporter(Shader shader = null)
|
||||
{
|
||||
Shader = shader != null ? shader : Shader.Find("VRM10/Universal Render Pipeline/MToon10");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// VMRC_materials_mtoon の場合にマテリアル生成情報を作成する
|
||||
/// </summary>
|
||||
public static bool TryCreateParam(GltfData data, int i, out MaterialDescriptor matDesc)
|
||||
public bool TryCreateParam(GltfData data, int i, out MaterialDescriptor matDesc)
|
||||
{
|
||||
var m = data.GLTF.materials[i];
|
||||
if (!UniGLTF.Extensions.VRMC_materials_mtoon.GltfDeserializer.TryGet(m.extensions, out var mtoon))
|
||||
|
|
|
|||
|
|
@ -5,17 +5,22 @@ using UnityEngine;
|
|||
|
||||
namespace UniVRM10
|
||||
{
|
||||
/// <summary>
|
||||
/// A class that generates MaterialDescriptor by considering the VRM 1.0 extension included in the glTF data to be imported.
|
||||
/// </summary>
|
||||
public sealed class UrpVrm10MaterialDescriptorGenerator : IMaterialDescriptorGenerator
|
||||
{
|
||||
public UrpGltfPbrMaterialImporter PbrMaterialImporter { get; } = new();
|
||||
public UrpGltfDefaultMaterialImporter DefaultMaterialImporter { get; } = new();
|
||||
public BuiltInGltfUnlitMaterialImporter UnlitMaterialImporter { get; } = new();
|
||||
public UrpVrm10MToonMaterialImporter MToonMaterialImporter { get; } = new();
|
||||
|
||||
public MaterialDescriptor Get(GltfData data, int i)
|
||||
{
|
||||
// mtoon
|
||||
if (UrpVrm10MToonMaterialImporter.TryCreateParam(data, i, out var matDesc)) return matDesc;
|
||||
if (MToonMaterialImporter.TryCreateParam(data, i, out var matDesc)) return matDesc;
|
||||
// unlit
|
||||
if (BuiltInGltfUnlitMaterialImporter.TryCreateParam(data, i, out matDesc)) return matDesc;
|
||||
if (UnlitMaterialImporter.TryCreateParam(data, i, out matDesc)) return matDesc;
|
||||
// pbr
|
||||
if (PbrMaterialImporter.TryCreateParam(data, i, out matDesc)) return matDesc;
|
||||
|
||||
|
|
|
|||
|
|
@ -6,7 +6,8 @@
|
|||
"GUID:e47c917724578cc43b5506c17a27e9a0",
|
||||
"GUID:8d76e605759c3f64a957d63ef96ada7c",
|
||||
"GUID:1cd941934d098654fa21a13f28346412",
|
||||
"GUID:5f875fdc81c40184c8333b9d63c6ddd5"
|
||||
"GUID:5f875fdc81c40184c8333b9d63c6ddd5",
|
||||
"GUID:d8b63aba1907145bea998dd612889d6b"
|
||||
],
|
||||
"includePlatforms": [],
|
||||
"excludePlatforms": [],
|
||||
|
|
|
|||
|
|
@ -135,12 +135,7 @@ namespace UniVRM10.ClothWarp
|
|||
// }
|
||||
}
|
||||
|
||||
public void Process()
|
||||
{
|
||||
Process(Time.deltaTime);
|
||||
}
|
||||
|
||||
void Process(float deltaTime)
|
||||
public void Process(float deltaTime)
|
||||
{
|
||||
if (!_initialized)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -193,14 +193,12 @@ namespace UniVRM10.ClothWarp.Jobs
|
|||
var colliderTransformIndex = GetOrAddColliderTransform(collider.transform);
|
||||
|
||||
colliderRef.Add(colliderInfo.Count);
|
||||
colliderInfo.Add(new BlittableCollider
|
||||
{
|
||||
offset = collider.Offset,
|
||||
radius = collider.Radius,
|
||||
tailOrNormal = collider.TailOrNormal,
|
||||
colliderType = TranslateColliderType(collider.ColliderType),
|
||||
transformIndex = colliderTransformIndex,
|
||||
});
|
||||
colliderInfo.Add(new BlittableCollider(
|
||||
offset: collider.Offset,
|
||||
radius: collider.Radius,
|
||||
tailOrNormal: collider.TailOrNormal,
|
||||
colliderType: TranslateColliderType(collider.ColliderType),
|
||||
colliderTransformIndex: colliderTransformIndex));
|
||||
_colliders.Add(collider);
|
||||
}
|
||||
|
||||
|
|
@ -410,11 +408,6 @@ namespace UniVRM10.ClothWarp.Jobs
|
|||
}
|
||||
}
|
||||
|
||||
public void Process()
|
||||
{
|
||||
Process(Time.deltaTime);
|
||||
}
|
||||
|
||||
public void Process(float deltaTime)
|
||||
{
|
||||
var frame = new FrameInfo(deltaTime, Vector3.zero);
|
||||
|
|
|
|||
|
|
@ -39,14 +39,12 @@ namespace UniVRM10.ClothWarp.Jobs
|
|||
|
||||
public BlittableJointMutable ToBlittableJointMutable()
|
||||
{
|
||||
return new BlittableJointMutable
|
||||
{
|
||||
stiffnessForce = Stiffness,
|
||||
gravityPower = 1.0f,
|
||||
gravityDir = Gravity,
|
||||
dragForce = Deceleration,
|
||||
radius = Radius,
|
||||
};
|
||||
return new BlittableJointMutable(
|
||||
stiffnessForce: Stiffness,
|
||||
gravityPower: 1.0f,
|
||||
gravityDir: Gravity,
|
||||
dragForce: Deceleration,
|
||||
radius: Radius);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -4,9 +4,11 @@ namespace UniVRM10.VRM10Viewer
|
|||
{
|
||||
class UnlitMaterialImporter : IMaterialImporter
|
||||
{
|
||||
public BuiltInGltfUnlitMaterialImporter GltfUnlitMaterialImporter { get; } = new();
|
||||
|
||||
bool IMaterialImporter.TryCreateParam(GltfData data, int i, out MaterialDescriptor matDesc)
|
||||
{
|
||||
return BuiltInGltfUnlitMaterialImporter.TryCreateParam(data, i, out matDesc);
|
||||
return GltfUnlitMaterialImporter.TryCreateParam(data, i, out matDesc);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -7,9 +7,11 @@ namespace UniVRM10.VRM10Viewer
|
|||
/// </summary>
|
||||
public class UrpMToonMaterialImporter : IMaterialImporter
|
||||
{
|
||||
public UrpVrm10MToonMaterialImporter MToonMaterialImporter { get; } = new();
|
||||
|
||||
public bool TryCreateParam(GltfData data, int i, out MaterialDescriptor matDesc)
|
||||
{
|
||||
if (UrpVrm10MToonMaterialImporter.TryCreateParam(data, i, out matDesc))
|
||||
if (MToonMaterialImporter.TryCreateParam(data, i, out matDesc))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -185,15 +185,14 @@ namespace UniVRM10.VRM10Viewer
|
|||
m_controller.ShowBoxMan(m_showBoxMan.value);
|
||||
if (m_controller.TryUpdate(
|
||||
m_motionMode.value == 0,
|
||||
new BlittableModelLevel
|
||||
{
|
||||
ExternalForce = new Vector3(
|
||||
new BlittableModelLevel(
|
||||
externalForce: new Vector3(
|
||||
m_springboneExternalX.value,
|
||||
m_springboneExternalY.value,
|
||||
m_springboneExternalZ.value),
|
||||
StopSpringBoneWriteback = m_useSpringbonePause.value,
|
||||
SupportsScalingAtRuntime = m_useSpringboneScaling.value,
|
||||
},
|
||||
stopSpringBoneWriteback: m_useSpringbonePause.value,
|
||||
supportsScalingAtRuntime: m_useSpringboneScaling.value
|
||||
),
|
||||
out var loaded
|
||||
))
|
||||
{
|
||||
|
|
|
|||
|
|
@ -7,7 +7,8 @@
|
|||
"GUID:e47c917724578cc43b5506c17a27e9a0",
|
||||
"GUID:1cd941934d098654fa21a13f28346412",
|
||||
"GUID:3e5d614bc16b50d41bd94c8d7444ca46",
|
||||
"GUID:f06555f75b070af458a003d92f9efb00"
|
||||
"GUID:f06555f75b070af458a003d92f9efb00",
|
||||
"GUID:d8b63aba1907145bea998dd612889d6b"
|
||||
],
|
||||
"includePlatforms": [],
|
||||
"excludePlatforms": [],
|
||||
|
|
|
|||
|
|
@ -226,12 +226,11 @@ namespace UniVRM10.VRM10Viewer
|
|||
m_controller.ShowBoxMan(m_showBoxMan.isOn);
|
||||
if (m_controller.TryUpdate(
|
||||
m_ui.IsTPose,
|
||||
new BlittableModelLevel
|
||||
{
|
||||
ExternalForce = new Vector3(m_springboneExternalX.value, m_springboneExternalY.value, m_springboneExternalZ.value),
|
||||
StopSpringBoneWriteback = m_springbonePause.isOn,
|
||||
SupportsScalingAtRuntime = m_springboneScaling.isOn,
|
||||
},
|
||||
new BlittableModelLevel(
|
||||
externalForce: new Vector3(m_springboneExternalX.value, m_springboneExternalY.value, m_springboneExternalZ.value),
|
||||
stopSpringBoneWriteback: m_springbonePause.isOn,
|
||||
supportsScalingAtRuntime: m_springboneScaling.isOn
|
||||
),
|
||||
out var loaded
|
||||
))
|
||||
{
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "com.vrmc.vrm",
|
||||
"version": "0.129.3",
|
||||
"version": "0.130.0",
|
||||
"displayName": "VRM-1.0",
|
||||
"description": "VRM-1.0 importer",
|
||||
"unity": "2021.3",
|
||||
|
|
@ -15,7 +15,7 @@
|
|||
},
|
||||
"dependencies": {
|
||||
"com.unity.timeline": "1.7.6",
|
||||
"com.vrmc.gltf": "0.129.3"
|
||||
"com.vrmc.gltf": "0.130.0"
|
||||
},
|
||||
"samples": [
|
||||
{
|
||||
|
|
|
|||
|
|
@ -4,9 +4,11 @@ namespace UniVRM10.VRM10Viewer
|
|||
{
|
||||
class UnlitMaterialImporter : IMaterialImporter
|
||||
{
|
||||
public BuiltInGltfUnlitMaterialImporter GltfUnlitMaterialImporter { get; } = new();
|
||||
|
||||
bool IMaterialImporter.TryCreateParam(GltfData data, int i, out MaterialDescriptor matDesc)
|
||||
{
|
||||
return BuiltInGltfUnlitMaterialImporter.TryCreateParam(data, i, out matDesc);
|
||||
return GltfUnlitMaterialImporter.TryCreateParam(data, i, out matDesc);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -7,9 +7,11 @@ namespace UniVRM10.VRM10Viewer
|
|||
/// </summary>
|
||||
public class UrpMToonMaterialImporter : IMaterialImporter
|
||||
{
|
||||
public UrpVrm10MToonMaterialImporter MToonMaterialImporter { get; } = new();
|
||||
|
||||
public bool TryCreateParam(GltfData data, int i, out MaterialDescriptor matDesc)
|
||||
{
|
||||
if (UrpVrm10MToonMaterialImporter.TryCreateParam(data, i, out matDesc))
|
||||
if (MToonMaterialImporter.TryCreateParam(data, i, out matDesc))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user