diff --git a/Assets/UniGLTF/Runtime/UniGLTF/IO/TextureIO/GltfTextureExporter.cs b/Assets/UniGLTF/Runtime/UniGLTF/IO/TextureIO/GltfTextureExporter.cs
index 179a3be26..7ef729c71 100644
--- a/Assets/UniGLTF/Runtime/UniGLTF/IO/TextureIO/GltfTextureExporter.cs
+++ b/Assets/UniGLTF/Runtime/UniGLTF/IO/TextureIO/GltfTextureExporter.cs
@@ -13,7 +13,7 @@ namespace UniGLTF
///
///
///
- static (byte[] bytes, string mine) GetBytesWithMime(Texture2D texture)
+ public static (byte[] bytes, string mine) GetBytesWithMime(Texture2D texture)
{
#if UNITY_EDITOR
var path = UnityPath.FromAsset(texture);
diff --git a/Assets/UniGLTF/Tests/Resources.meta b/Assets/UniGLTF/Tests/Resources.meta
new file mode 100644
index 000000000..c6b5a4bfd
--- /dev/null
+++ b/Assets/UniGLTF/Tests/Resources.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: ee977e7fc2164bd408c27953f01dd8f1
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/UniGLTF/Tests/Resources/4x4.png b/Assets/UniGLTF/Tests/Resources/4x4.png
new file mode 100644
index 000000000..732ecd83a
Binary files /dev/null and b/Assets/UniGLTF/Tests/Resources/4x4.png differ
diff --git a/Assets/UniGLTF/Tests/Resources/4x4.png.meta b/Assets/UniGLTF/Tests/Resources/4x4.png.meta
new file mode 100644
index 000000000..cf43629e3
--- /dev/null
+++ b/Assets/UniGLTF/Tests/Resources/4x4.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: db15802c623d98042a8cf5f03959818c
+TextureImporter:
+ fileIDToRecycleName: {}
+ externalObjects: {}
+ serializedVersion: 9
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 1
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ isReadable: 0
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: -1
+ aniso: -1
+ mipBias: -100
+ wrapU: -1
+ wrapV: -1
+ wrapW: -1
+ nPOTScale: 1
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 0
+ spriteTessellationDetail: -1
+ textureType: 0
+ textureShape: 1
+ singleChannelComponent: 0
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ platformSettings:
+ - serializedVersion: 2
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ physicsShape: []
+ bones: []
+ spriteID:
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ spritePackingTag:
+ pSDRemoveMatte: 0
+ pSDShowRemoveMatteOption: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/UniGLTF/Tests/UniGLTF/Resources.meta b/Assets/UniGLTF/Tests/UniGLTF/Resources.meta
new file mode 100644
index 000000000..5d9b3dec7
--- /dev/null
+++ b/Assets/UniGLTF/Tests/UniGLTF/Resources.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 3ff3cfe62633ecc40a4ee5b12d3e680f
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/UniGLTF/Tests/UniGLTF/Resources/4x4.png b/Assets/UniGLTF/Tests/UniGLTF/Resources/4x4.png
new file mode 100644
index 000000000..732ecd83a
Binary files /dev/null and b/Assets/UniGLTF/Tests/UniGLTF/Resources/4x4.png differ
diff --git a/Assets/UniGLTF/Tests/UniGLTF/Resources/4x4.png.meta b/Assets/UniGLTF/Tests/UniGLTF/Resources/4x4.png.meta
new file mode 100644
index 000000000..3daaec290
--- /dev/null
+++ b/Assets/UniGLTF/Tests/UniGLTF/Resources/4x4.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: 82e462ede66d6d0488b5be50747cbad9
+TextureImporter:
+ fileIDToRecycleName: {}
+ externalObjects: {}
+ serializedVersion: 9
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 1
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ isReadable: 0
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: -1
+ aniso: -1
+ mipBias: -100
+ wrapU: -1
+ wrapV: -1
+ wrapW: -1
+ nPOTScale: 1
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 0
+ spriteTessellationDetail: -1
+ textureType: 0
+ textureShape: 1
+ singleChannelComponent: 0
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ platformSettings:
+ - serializedVersion: 2
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ physicsShape: []
+ bones: []
+ spriteID:
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ spritePackingTag:
+ pSDRemoveMatte: 0
+ pSDShowRemoveMatteOption: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/UniGLTF/Tests/UniGLTF/Resources/4x4compressed.DDS b/Assets/UniGLTF/Tests/UniGLTF/Resources/4x4compressed.DDS
new file mode 100644
index 000000000..3eb4a189a
Binary files /dev/null and b/Assets/UniGLTF/Tests/UniGLTF/Resources/4x4compressed.DDS differ
diff --git a/Assets/UniGLTF/Tests/UniGLTF/Resources/4x4compressed.DDS.meta b/Assets/UniGLTF/Tests/UniGLTF/Resources/4x4compressed.DDS.meta
new file mode 100644
index 000000000..ef44f51d6
--- /dev/null
+++ b/Assets/UniGLTF/Tests/UniGLTF/Resources/4x4compressed.DDS.meta
@@ -0,0 +1,19 @@
+fileFormatVersion: 2
+guid: e1e26504b87027940bfbd21ea1327ff6
+IHVImageFormatImporter:
+ externalObjects: {}
+ textureSettings:
+ serializedVersion: 2
+ filterMode: 1
+ aniso: 1
+ mipBias: 0
+ wrapU: 0
+ wrapV: 0
+ wrapW: 0
+ isReadable: 0
+ sRGBTexture: 1
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/UniGLTF/Tests/UniGLTF/TextureTests.cs b/Assets/UniGLTF/Tests/UniGLTF/TextureTests.cs
index c99e97696..938359013 100644
--- a/Assets/UniGLTF/Tests/UniGLTF/TextureTests.cs
+++ b/Assets/UniGLTF/Tests/UniGLTF/TextureTests.cs
@@ -31,93 +31,24 @@ namespace UniGLTF
Assert.AreEqual(glFilter.LINEAR_MIPMAP_LINEAR, sampler.minFilter);
Assert.AreEqual(glFilter.LINEAR_MIPMAP_LINEAR, sampler.magFilter);
}
- }
- public class MetallicRoughnessConverterTests
- {
+
[Test]
- public void ExportingColorTest()
+ public void NotReadable()
{
- {
- var smoothness = 1.0f;
- Assert.That(
- OcclusionMetallicRoughnessConverter.ExportPixel(new Color32(255, 255, 255, 255), smoothness, default),
- // r <- 0 : (Unused)
- // g <- 0 : ((1 - src.a(as float) * smoothness) ^ 2)(as uint8)
- // b <- 255 : Same metallic (src.r)
- // a <- 255 : (Unused)
- Is.EqualTo(new Color32(0, 0, 255, 255)));
- }
-
- {
- var smoothness = 0.5f;
- Assert.That(
- OcclusionMetallicRoughnessConverter.ExportPixel(new Color32(255, 255, 255, 255), smoothness, default),
- // r <- 0 : (Unused)
- // g <- 63 : ((1 - src.a(as float) * smoothness) ^ 2)(as uint8)
- // b <- 255 : Same metallic (src.r)
- // a <- 255 : (Unused)
- Is.EqualTo(new Color32(0, 127, 255, 255)));
- }
-
- {
- var smoothness = 0.0f;
- Assert.That(
- OcclusionMetallicRoughnessConverter.ExportPixel(new Color32(255, 255, 255, 255), smoothness, default),
- // r <- 0 : (Unused)
- // g <- 255 : ((1 - src.a(as float) * smoothness) ^ 2)(as uint8)
- // b <- 255 : Same metallic (src.r)
- // a <- 255 : (Unused)
- Is.EqualTo(new Color32(0, 255, 255, 255)));
- }
+ var readonlyTexture = Resources.Load("4x4");
+ Assert.False(readonlyTexture.isReadable);
+ var (bytes, mime) = GltfTextureExporter.GetBytesWithMime(readonlyTexture);
+ Assert.NotNull(bytes);
}
[Test]
- public void ImportingColorTest()
+ public void Compressed()
{
- {
- var roughnessFactor = 1.0f;
- Assert.That(
- OcclusionMetallicRoughnessConverter.ImportPixel(new Color32(255, 255, 255, 255), 1.0f, roughnessFactor, default),
- // r <- 255 : Same metallic (src.r)
- // g <- 0 : (Unused)
- // b <- 0 : (Unused)
- // a <- 0 : ((1 - sqrt(src.g(as float) * roughnessFactor)))(as uint8)
- Is.EqualTo(new Color32(255, 0, 0, 0)));
- }
-
- {
- var roughnessFactor = 1.0f;
- Assert.That(
- OcclusionMetallicRoughnessConverter.ImportPixel(new Color32(255, 128, 255, 255), 1.0f, roughnessFactor, default),
- // r <- 255 : Same metallic (src.r)
- // g <- 0 : (Unused)
- // b <- 0 : (Unused)
- // a <- 128 : ((1 - sqrt(src.g(as float) * roughnessFactor)))(as uint8)
- Is.EqualTo(new Color32(255, 0, 0, 127))); // smoothness 0.5 * src.a 1.0
- }
-
- {
- var roughnessFactor = 0.5f;
- Assert.That(
- OcclusionMetallicRoughnessConverter.ImportPixel(new Color32(255, 255, 255, 255), 1.0f, roughnessFactor, default),
- // r <- 255 : Same metallic (src.r)
- // g <- 0 : (Unused)
- // b <- 0 : (Unused)
- // a <- 74 : ((1 - sqrt(src.g(as float) * roughnessFactor)))(as uint8)
- Is.EqualTo(new Color32(255, 0, 0, 127)));
- }
-
- {
- var roughnessFactor = 0.0f;
- Assert.That(
- OcclusionMetallicRoughnessConverter.ImportPixel(new Color32(255, 255, 255, 255), 1.0f, roughnessFactor, default),
- // r <- 255 : Same metallic (src.r)
- // g <- 0 : (Unused)
- // b <- 0 : (Unused)
- // a <- 255 : ((1 - sqrt(src.g(as float) * roughnessFactor)))(as uint8)
- Is.EqualTo(new Color32(255, 0, 0, 255)));
- }
+ var readonlyTexture = Resources.Load("4x4compressed");
+ Assert.False(readonlyTexture.isReadable);
+ var (bytes, mime) = GltfTextureExporter.GetBytesWithMime(readonlyTexture);
+ Assert.NotNull(bytes);
}
}
}
diff --git a/Assets/VRMShaders/Tests.meta b/Assets/VRMShaders/Tests.meta
new file mode 100644
index 000000000..918f681e5
--- /dev/null
+++ b/Assets/VRMShaders/Tests.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 7b9c0681fd83aa3439d3221de54fdacf
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/VRMShaders/Tests/MetallicRoughnessConverterTests.cs b/Assets/VRMShaders/Tests/MetallicRoughnessConverterTests.cs
new file mode 100644
index 000000000..1f79152f9
--- /dev/null
+++ b/Assets/VRMShaders/Tests/MetallicRoughnessConverterTests.cs
@@ -0,0 +1,93 @@
+using NUnit.Framework;
+using UnityEngine;
+
+namespace VRMShaders
+{
+ public class MetallicRoughnessConverterTests
+ {
+ [Test]
+ public void ExportingColorTest()
+ {
+ {
+ var smoothness = 1.0f;
+ Assert.That(
+ OcclusionMetallicRoughnessConverter.ExportPixel(new Color32(255, 255, 255, 255), smoothness, default),
+ // r <- 0 : (Unused)
+ // g <- 0 : ((1 - src.a(as float) * smoothness) ^ 2)(as uint8)
+ // b <- 255 : Same metallic (src.r)
+ // a <- 255 : (Unused)
+ Is.EqualTo(new Color32(0, 0, 255, 255)));
+ }
+
+ {
+ var smoothness = 0.5f;
+ Assert.That(
+ OcclusionMetallicRoughnessConverter.ExportPixel(new Color32(255, 255, 255, 255), smoothness, default),
+ // r <- 0 : (Unused)
+ // g <- 63 : ((1 - src.a(as float) * smoothness) ^ 2)(as uint8)
+ // b <- 255 : Same metallic (src.r)
+ // a <- 255 : (Unused)
+ Is.EqualTo(new Color32(0, 127, 255, 255)));
+ }
+
+ {
+ var smoothness = 0.0f;
+ Assert.That(
+ OcclusionMetallicRoughnessConverter.ExportPixel(new Color32(255, 255, 255, 255), smoothness, default),
+ // r <- 0 : (Unused)
+ // g <- 255 : ((1 - src.a(as float) * smoothness) ^ 2)(as uint8)
+ // b <- 255 : Same metallic (src.r)
+ // a <- 255 : (Unused)
+ Is.EqualTo(new Color32(0, 255, 255, 255)));
+ }
+ }
+
+ [Test]
+ public void ImportingColorTest()
+ {
+ {
+ var roughnessFactor = 1.0f;
+ Assert.That(
+ OcclusionMetallicRoughnessConverter.ImportPixel(new Color32(255, 255, 255, 255), 1.0f, roughnessFactor, default),
+ // r <- 255 : Same metallic (src.r)
+ // g <- 0 : (Unused)
+ // b <- 0 : (Unused)
+ // a <- 0 : ((1 - sqrt(src.g(as float) * roughnessFactor)))(as uint8)
+ Is.EqualTo(new Color32(255, 0, 0, 0)));
+ }
+
+ {
+ var roughnessFactor = 1.0f;
+ Assert.That(
+ OcclusionMetallicRoughnessConverter.ImportPixel(new Color32(255, 128, 255, 255), 1.0f, roughnessFactor, default),
+ // r <- 255 : Same metallic (src.r)
+ // g <- 0 : (Unused)
+ // b <- 0 : (Unused)
+ // a <- 128 : ((1 - sqrt(src.g(as float) * roughnessFactor)))(as uint8)
+ Is.EqualTo(new Color32(255, 0, 0, 127))); // smoothness 0.5 * src.a 1.0
+ }
+
+ {
+ var roughnessFactor = 0.5f;
+ Assert.That(
+ OcclusionMetallicRoughnessConverter.ImportPixel(new Color32(255, 255, 255, 255), 1.0f, roughnessFactor, default),
+ // r <- 255 : Same metallic (src.r)
+ // g <- 0 : (Unused)
+ // b <- 0 : (Unused)
+ // a <- 74 : ((1 - sqrt(src.g(as float) * roughnessFactor)))(as uint8)
+ Is.EqualTo(new Color32(255, 0, 0, 127)));
+ }
+
+ {
+ var roughnessFactor = 0.0f;
+ Assert.That(
+ OcclusionMetallicRoughnessConverter.ImportPixel(new Color32(255, 255, 255, 255), 1.0f, roughnessFactor, default),
+ // r <- 255 : Same metallic (src.r)
+ // g <- 0 : (Unused)
+ // b <- 0 : (Unused)
+ // a <- 255 : ((1 - sqrt(src.g(as float) * roughnessFactor)))(as uint8)
+ Is.EqualTo(new Color32(255, 0, 0, 255)));
+ }
+ }
+ }
+}
diff --git a/Assets/VRMShaders/Tests/MetallicRoughnessConverterTests.cs.meta b/Assets/VRMShaders/Tests/MetallicRoughnessConverterTests.cs.meta
new file mode 100644
index 000000000..a8f006ef3
--- /dev/null
+++ b/Assets/VRMShaders/Tests/MetallicRoughnessConverterTests.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 98670a2a3852f3f40a7f9cbd5791e506
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/VRMShaders/Tests/VRMShaders.Tests.asmdef b/Assets/VRMShaders/Tests/VRMShaders.Tests.asmdef
new file mode 100644
index 000000000..18b3c3304
--- /dev/null
+++ b/Assets/VRMShaders/Tests/VRMShaders.Tests.asmdef
@@ -0,0 +1,18 @@
+{
+ "name": "VRMShaders.Tests",
+ "references": [
+ "VRMShaders"
+ ],
+ "optionalUnityReferences": [
+ "TestAssemblies"
+ ],
+ "includePlatforms": [
+ "Editor"
+ ],
+ "excludePlatforms": [],
+ "allowUnsafeCode": false,
+ "overrideReferences": false,
+ "precompiledReferences": [],
+ "autoReferenced": false,
+ "defineConstraints": []
+}
\ No newline at end of file
diff --git a/Assets/VRMShaders/Tests/VRMShaders.Tests.asmdef.meta b/Assets/VRMShaders/Tests/VRMShaders.Tests.asmdef.meta
new file mode 100644
index 000000000..320d01208
--- /dev/null
+++ b/Assets/VRMShaders/Tests/VRMShaders.Tests.asmdef.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 0e517ae7a2a124241a6da9588530ce79
+AssemblyDefinitionImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant: