Skip to content

Commit

Permalink
fix: empty IOR extension was incorrect
Browse files Browse the repository at this point in the history
  • Loading branch information
hybridherbst committed Nov 6, 2022
1 parent 8997125 commit eb51147
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 14 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -39,13 +39,12 @@ public override IExtension Deserialize(GLTFRoot root, JProperty extensionToken)
if (extensionToken != null)
{
JToken strength = extensionToken.Value[nameof(KHR_materials_ior.ior)];

var extension = new KHR_materials_ior();
if (strength != null)
{
var extension = new KHR_materials_ior();
extension.ior = strength.Value<float>();
return extension;
}
return extension;
}

return null;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,39 +42,52 @@ private static void GLTFSceneExporterOnAfterMaterialExport(GLTFSceneExporter exp
{
if (!material) return;

if (material.IsKeywordEnabled("_VOLUME_TRANSMISSION_ON"))
{
exporter.DeclareExtensionUsage(KHR_materials_ior_Factory.EXTENSION_NAME, false);
exporter.DeclareExtensionUsage(KHR_materials_transmission_Factory.EXTENSION_NAME, false);
var usesTransmission = material.IsKeywordEnabled("_VOLUME_TRANSMISSION_ON");
var usesVolume = material.HasProperty("_VOLUME_ON") && material.GetFloat("_VOLUME_ON") > 0.5f;
var hasIor = material.HasProperty(ior);

if (hasIor || usesTransmission || usesVolume)
{
if (materialnode.Extensions == null)
materialnode.Extensions = new Dictionary<string, IExtension>();

// if the material already has an extension, we should get and modify that
var vi = new KHR_materials_ior();
var vt = new KHR_materials_transmission();

if (materialnode.Extensions.TryGetValue(KHR_materials_ior_Factory.EXTENSION_NAME, out var vv1))
vi = (KHR_materials_ior) vv1;
else
materialnode.Extensions.Add(KHR_materials_ior_Factory.EXTENSION_NAME, vi);

if (material.HasProperty(ior))
vi.ior = material.GetFloat(ior);
}

if (usesTransmission)
{
if (materialnode.Extensions == null)
materialnode.Extensions = new Dictionary<string, IExtension>();

exporter.DeclareExtensionUsage(KHR_materials_ior_Factory.EXTENSION_NAME, false);
exporter.DeclareExtensionUsage(KHR_materials_transmission_Factory.EXTENSION_NAME, false);

// if the material already has an extension, we should get and modify that
var vt = new KHR_materials_transmission();

if (materialnode.Extensions.TryGetValue(KHR_materials_transmission_Factory.EXTENSION_NAME, out var vv2))
vt = (KHR_materials_transmission) vv2;
else
materialnode.Extensions.Add(KHR_materials_transmission_Factory.EXTENSION_NAME, vt);

if (material.HasProperty(ior))
vi.ior = material.GetFloat(ior);

if (material.HasProperty(transmissionFactor))
vt.transmissionFactor = material.GetFloat(transmissionFactor);
if (material.HasProperty(transmissionTexture) && material.GetTexture(transmissionTexture))
vt.transmissionTexture = exporter.ExportTextureInfo(material.GetTexture(transmissionTexture), nameof(transmissionTexture));
}

if (material.HasProperty("_VOLUME_ON") && material.GetFloat("_VOLUME_ON") > 0.5f)
if (usesVolume)
{
if (materialnode.Extensions == null)
materialnode.Extensions = new Dictionary<string, IExtension>();

exporter.DeclareExtensionUsage(KHR_materials_volume_Factory.EXTENSION_NAME, false);

if (materialnode.Extensions == null)
Expand Down

0 comments on commit eb51147

Please sign in to comment.