2
0
Эх сурвалжийг харах

Added KHR_EMissiveStrength (wip)

Vicente Penades 3 жил өмнө
parent
commit
096a1150fe

+ 31 - 0
build/SharpGLTF.CodeGen/Ext.KHR_EmissiveStrength.cs

@@ -0,0 +1,31 @@
+using System;
+using System.Collections.Generic;
+
+using SharpGLTF.SchemaReflection;
+
+namespace SharpGLTF
+{
+    class EmissiveStrengthExtension : SchemaProcessor
+    {
+        private static string SchemaUri => Constants.KhronosExtensionPath("KHR_materials_emissive_strength", "glTF.KHR_materials_emissive_strength.schema.json");
+
+        public override IEnumerable<(string, SchemaType.Context)> Process()
+        {
+            var ctx = SchemaProcessing.LoadSchemaContext(SchemaUri);
+            ctx.IgnoredByCodeEmitter("glTF Property");
+            ctx.IgnoredByCodeEmitter("glTF Child of Root Property");
+            ctx.IgnoredByCodeEmitter("Texture Info");
+
+            var cls = ctx.FindClass("KHR_materials_emissive_strength glTF extension");
+            
+            // straightforward extension, nothing to do
+
+            yield return ("ext.MaterialsEmissiveStrength.g", ctx);
+        }
+
+        public override void PrepareTypes(CodeGen.CSharpEmitter newEmitter, SchemaType.Context ctx)
+        {
+            newEmitter.SetRuntimeName("KHR_materials_emissive_strength glTF extension", "MaterialEmissiveStrength");
+        }
+    }
+}

+ 2 - 0
build/SharpGLTF.CodeGen/Program.cs

@@ -38,7 +38,9 @@ namespace SharpGLTF
             processors.Add(new SpecularExtension());
             processors.Add(new ClearCoatExtension());
             processors.Add(new TransmissionExtension());
+            processors.Add(new EmissiveStrengthExtension());
             processors.Add(new SpecularGlossinessExtension());
+            
 
             // lights
             processors.Add(new LightsPunctualExtension());

+ 58 - 0
src/SharpGLTF.Core/Schema2/Generated/ext.MaterialsEmissiveStrength.g.cs

@@ -0,0 +1,58 @@
+// <auto-generated/>
+
+//------------------------------------------------------------------------------------------------
+//      This file has been programatically generated; DON´T EDIT!
+//------------------------------------------------------------------------------------------------
+
+#pragma warning disable SA1001
+#pragma warning disable SA1027
+#pragma warning disable SA1028
+#pragma warning disable SA1121
+#pragma warning disable SA1205
+#pragma warning disable SA1309
+#pragma warning disable SA1402
+#pragma warning disable SA1505
+#pragma warning disable SA1507
+#pragma warning disable SA1508
+#pragma warning disable SA1652
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Numerics;
+using System.Text.Json;
+
+namespace SharpGLTF.Schema2
+{
+	using Collections;
+
+	/// <summary>
+	/// glTF extension that adjusts the strength of emissive material properties.
+	/// </summary>
+	partial class MaterialEmissiveStrength : ExtraProperties
+	{
+	
+		private const Double _emissiveStrengthDefault = 1;
+		private const Double _emissiveStrengthMinimum = 0;
+		private Double? _emissiveStrength = _emissiveStrengthDefault;
+		
+	
+		protected override void SerializeProperties(Utf8JsonWriter writer)
+		{
+			base.SerializeProperties(writer);
+			SerializeProperty(writer, "emissiveStrength", _emissiveStrength, _emissiveStrengthDefault);
+		}
+	
+		protected override void DeserializeProperty(string jsonPropertyName, ref Utf8JsonReader reader)
+		{
+			switch (jsonPropertyName)
+			{
+				case "emissiveStrength": _emissiveStrength = DeserializePropertyValue<Double?>(ref reader); break;
+				default: base.DeserializeProperty(jsonPropertyName,ref reader); break;
+			}
+		}
+	
+	}
+
+}

+ 1 - 0
src/SharpGLTF.Core/Schema2/gltf.ExtensionsFactory.cs

@@ -35,6 +35,7 @@ namespace SharpGLTF.Schema2
             RegisterExtension<Material, MaterialClearCoat>("KHR_materials_clearcoat");
             RegisterExtension<Material, MaterialTransmission>("KHR_materials_transmission");
             RegisterExtension<Material, MaterialVolume>("KHR_materials_volume");
+            RegisterExtension<Material, MaterialEmissiveStrength>("KHR_materials_emissive_strength");
             RegisterExtension<Material, MaterialPBRSpecularGlossiness>("KHR_materials_pbrSpecularGlossiness");
 
             RegisterExtension<TextureInfo, TextureTransform>("KHR_texture_transform");

+ 22 - 0
src/SharpGLTF.Core/Schema2/gltf.MaterialsFactory.cs

@@ -612,4 +612,26 @@ namespace SharpGLTF.Schema2
             yield return new MaterialChannel(material, "VolumeAttenuation", onCreate => null, attColorParam, attDistParam);
         }
     }
+
+    internal sealed partial class MaterialEmissiveStrength
+    {
+        #pragma warning disable CA1801 // Review unused parameters
+        internal MaterialEmissiveStrength(Material material) { }
+        #pragma warning restore CA1801 // Review unused parameters
+
+        protected override void OnValidateContent(ValidationContext validate)
+        {
+            base.OnValidateContent(validate);
+
+            if (_emissiveStrength < _emissiveStrengthMinimum) throw new ArgumentOutOfRangeException(nameof(EmissiveStrength)); 
+        }
+
+        public static float DefaultEmissiveStrength => (float)_emissiveStrengthDefault;
+
+        public float EmissiveStrength
+        {
+            get => (float)(this._emissiveStrength ?? _emissiveStrengthDefault);
+            set => this._emissiveStrength = ((double)value).AsNullable(_emissiveStrengthDefault);
+        }
+    }
 }

+ 3 - 4
tests/SharpGLTF.Core.Tests/Validation/InvalidFilesTests.cs

@@ -60,19 +60,18 @@ namespace SharpGLTF.Validation
                 .GetKhronosValidationPaths()
                 .Where(item => item.EndsWith(".gltf"))
                 .Where(item => !item.Contains("KHR_materials_variants"))
-                .Where(item => !item.Contains("KHR_materials_volume"))
-                .Where(item => !item.Contains("KHR_materials_emissive_strength"));
+                .Where(item => !item.Contains("KHR_materials_iridescence"));
 
             foreach (var f in files)
             {
                 if (f.EndsWith("invalid_image_data.gltf")) continue; // we're not checking images data (yet)
                 if (f.EndsWith("png_eos.gltf")) continue; // we're not checking images data (yet)
 
-                // these should give error in gltfValidator due to missing BufferView in accessors
+                // https://github.com/KhronosGroup/glTF-Validator/issues/189
                 if (f.EndsWith("node_weights_override.gltf")) continue;
                 if (f.EndsWith("valid_with_tangent.gltf")) continue;
 
-                if (!f.EndsWith("out_of_range.gltf")) continue;
+                // if (!f.EndsWith("out_of_range.gltf")) continue;
 
                 var gltfJson = f.EndsWith(".gltf") ? System.IO.File.ReadAllText(f) : string.Empty;