void DumpPerPixelShader(NovaPerPixelShader ppShader, BabylonScene babylonScene) { var babylonMaterial = new BabylonMaterial(); babylonScene.MaterialsList.Add(babylonMaterial); babylonMaterial.name = ppShader.Name; babylonMaterial.id = ppShader.ID.ToString(); babylonMaterial.alpha = ppShader.Alpha; babylonMaterial.ambient = (ppShader.Ambient * (1.0f - ppShader.SelfIllumination)).ToArray(); babylonMaterial.diffuse = (ppShader.Diffuse * (1.0f - ppShader.SelfIllumination)).ToArray(); babylonMaterial.emissive = (ppShader.Emissive * ppShader.SelfIllumination).ToArray(); babylonMaterial.specular = ppShader.Specular.ToArray(); babylonMaterial.specularPower = ppShader.SpecularSharpness; babylonMaterial.backFaceCulling = (ppShader.CullMode == NovaCull.CounterClockwise); if (ppShader.DiffuseTexture != null && ppShader.DiffuseTexture.HasTextureData && ppShader.OpacityTexture != null && ppShader.OpacityTexture.HasTextureData) { if (ppShader.DiffuseTexture.LoadedTexture == ppShader.OpacityTexture.LoadedTexture) { ppShader.DiffuseTexture = ppShader.OpacityTexture; ppShader.OpacityTexture = null; } } if (ppShader.DiffuseTexture != null && ppShader.DiffuseTexture.HasTextureData && !ppShader.DiffuseTexture.IsVideo && !ppShader.DiffuseTexture.IsCubeRender) { babylonMaterial.diffuseTexture = new BabylonTexture(); DumpTexture(ppShader.DiffuseTexture, babylonMaterial.diffuseTexture, babylonScene); } if (ppShader.AmbientTexture != null && ppShader.AmbientTexture.HasTextureData && !ppShader.AmbientTexture.IsVideo && !ppShader.AmbientTexture.IsCubeRender) { babylonMaterial.ambientTexture = new BabylonTexture(); DumpTexture(ppShader.AmbientTexture, babylonMaterial.ambientTexture, babylonScene); } if (ppShader.OpacityTexture != null && ppShader.OpacityTexture.HasTextureData && !ppShader.OpacityTexture.IsVideo && !ppShader.OpacityTexture.IsCubeRender) { babylonMaterial.opacityTexture = new BabylonTexture(); DumpTexture(ppShader.OpacityTexture, babylonMaterial.opacityTexture, babylonScene); } if (mirrorsMaterials.ContainsKey(ppShader)) { babylonMaterial.reflectionTexture = new BabylonTexture(); var novaObject = mirrorsMaterials[ppShader]; DumpRenderTargetTexture(ppShader.ReflectionTexture, babylonMaterial.reflectionTexture, novaObject.MirrorMapSize, novaObject.MirrorLevel, novaObject.MirroredObjects); AttachMirrorPlane(babylonMaterial.reflectionTexture, novaObject); } else if (ppShader.ReflectionTexture != null && ppShader.ReflectionTexture.HasTextureData && !ppShader.ReflectionTexture.IsVideo && !ppShader.ReflectionTexture.IsCubeRender) { babylonMaterial.reflectionTexture = new BabylonTexture(); DumpTexture(ppShader.ReflectionTexture, babylonMaterial.reflectionTexture, babylonScene); } // Refraction if (ppShader.RefractionLevel > 0) { babylonMaterial.alpha = 1.0f - ppShader.RefractionLevel; } if (ppShader.EmissiveTexture != null && ppShader.EmissiveTexture.HasTextureData && !ppShader.EmissiveTexture.IsVideo && !ppShader.EmissiveTexture.IsCubeRender) { babylonMaterial.emissiveTexture = new BabylonTexture(); DumpTexture(ppShader.EmissiveTexture, babylonMaterial.emissiveTexture, babylonScene); } if (ppShader.SpecularTexture != null && ppShader.SpecularTexture.HasTextureData && !ppShader.SpecularTexture.IsVideo && !ppShader.SpecularTexture.IsCubeRender) { babylonMaterial.specularTexture = new BabylonTexture(); DumpTexture(ppShader.SpecularTexture, babylonMaterial.specularTexture, babylonScene); } if (ppShader.BumpTexture != null && ppShader.BumpTexture.HasTextureData && !ppShader.BumpTexture.IsVideo && !ppShader.BumpTexture.IsCubeRender) { babylonMaterial.bumpTexture = new BabylonTexture(); DumpTexture(ppShader.BumpTexture, babylonMaterial.bumpTexture, babylonScene); babylonMaterial.bumpTexture.level /= 2.0f; } }