| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Numerics;
- using System.Text;
- using System.Threading.Tasks;
- using GLTFMATERIAL = SharpGLTF.Schema2.Material;
- namespace SharpGLTF.Runtime.Pipeline
- {
- internal static class _GltfMaterialBasicProperties
- {
- public static float GetAlphaLevel(GLTFMATERIAL srcMaterial)
- {
- if (srcMaterial.Alpha == Schema2.AlphaMode.OPAQUE) return 1;
- var baseColor = srcMaterial.FindChannel("BaseColor");
- if (baseColor == null) return 1;
- return baseColor.Value.Color.W;
- }
- public static Vector3 GetDiffuseColor(GLTFMATERIAL srcMaterial)
- {
- var diffuse = srcMaterial.FindChannel("Diffuse");
- if (diffuse == null) diffuse = srcMaterial.FindChannel("BaseColor");
- if (diffuse == null) return Vector3.One;
- return new Vector3(diffuse.Value.Color.X, diffuse.Value.Color.Y, diffuse.Value.Color.Z);
- }
- public static Vector3 GetSpecularColor(GLTFMATERIAL srcMaterial)
- {
- var mr = srcMaterial.FindChannel("MetallicRoughness");
- if (mr == null) return Vector3.One; // default value 16
- var diffuse = GetDiffuseColor(srcMaterial);
- var metallic = mr.Value.GetFactor("MetallicFactor");
- var roughness = mr.Value.GetFactor("RoughnessFactor");
- var k = Vector3.Zero;
- k += Vector3.Lerp(diffuse, Vector3.Zero, roughness);
- k += Vector3.Lerp(diffuse, Vector3.One, metallic);
- k *= 0.5f;
- return k;
- }
- public static float GetSpecularPower(GLTFMATERIAL srcMaterial)
- {
- var mr = srcMaterial.FindChannel("MetallicRoughness");
- if (mr == null) return 16; // default value = 16
- var metallic = mr.Value.GetFactor("MetallicFactor");
- var roughness = mr.Value.GetFactor("RoughnessFactor");
- return 4 + 16 * metallic;
- }
- public static Vector3 GeEmissiveColor(GLTFMATERIAL srcMaterial)
- {
- var emissive = srcMaterial.FindChannel("Emissive");
- if (emissive == null) return Vector3.Zero;
- return new Vector3(emissive.Value.Color.X, emissive.Value.Color.Y, emissive.Value.Color.Z);
- }
- }
- }
|