public SolidMaterial(MaterialInfo mi, string name = null, int id = 0) { MaterialData = mi; ID = id; Name = name; bxdfs = new List<BaseBsdf>(); }
public MaterialInfoContainer( MaterialInfo mt, IEnumerable<MaterialInfo> mats ) { this.defaultMaterial = mt; this.map = new Dictionary<string, int>(); this.materials = mats == null ? new []{mt} : mats.ToArray(); for (int index = 0; index < this.materials.Length; index++) { var materialInfo = this.materials[index]; this.map.Add(materialInfo.Name.ToLower(), index); } }
protected BaseBxdf(ref RayHit rh, ref RayData ray, ref Normal ng, ref Normal ns, ref UV texCoord, MaterialInfo mi, SurfaceTextureInfo texData, bool fromLight) { #if VERBOSE if (ng.Length > 1f || ns.Length > 1f) { Console.WriteLine("Normals in bsdf arent normalized"); } #endif this.Init(ref rh, ref ray, ref ng, ref ns, ref texCoord, mi, texData, fromLight); }
public void SetMaterialInfo(MaterialInfo mi) { if (mi == null) { var col = new RgbSpectrum(0.5f); this.Kd = ColorFactory.CreateRegularSpd(ref col, SpectrumType.Reflectance); return; } this.MaterialInfo = mi; this.Kd = ColorFactory.CreateRegularSpd(ref mi.Kd, SpectrumType.Reflectance); this.Ks = ColorFactory.CreateRegularSpd(ref mi.Ks, SpectrumType.Reflectance); this.Kr = ColorFactory.CreateRegularSpd(ref mi.Kr, SpectrumType.Reflectance); this.Kt = ColorFactory.CreateRegularSpd(ref mi.Kt, SpectrumType.Reflectance); this.Ke = ColorFactory.CreateRegularSpd(ref mi.Ke, SpectrumType.Reflectance); }
public SceneManager(TriangleMesh[] geometry, SceneGeometryInfo sceneGeometry, MaterialInfo[] mats) { this.sceneGeometry = sceneGeometry; this.geometry = geometry; this.materials = mats.ToDictionary(item => item.Name.ToLower()); var acc = //new OctreeAcceleration(); //new BVHAccellerationStructure(); //new BoundingVolumeHierarchyAcceleration(); //new BottomUpBvhAccelleration(); //new LinearBvhAccelleration(); //new TopDownBvhAccell(); new BoundingVolumeHierarchyAccelerationStructure(); //new BruteForceAccellerationStructure(); //new BspAccellerationStructure(); acc.Init(sceneGeometry, this, geometry); this.accel = acc; this.lights = new List<ILight>(); this.defaultMaterial = new MaterialInfo() { Kd = new RgbSpectrum(0.6f) }; Console.WriteLine("Using {0} ", accel.GetType().Name); }
internal void Init(ref RayHit rh, ref RayData ray, ref Normal ng, ref Normal ns, ref UV texCoord, MaterialInfo mi, SurfaceTextureInfo texData, bool fromLight) { if (rh.Miss()) { throw new ArgumentException("RayHit missed geometry!"); } //if (HitPoint == null) //{ HitPoint = new HitPointInfo { Color = RgbSpectrum.Max(ref mi.Kd, ref mi.Ks), HitPoint = ray.Point(rh.Distance), TexCoord = texCoord, FromDirection = -ray.Dir, GeoNormal = ng, ShadingNormal = ns, FromLight = fromLight }; //} //else //{ // HitPoint.HitPoint = ray.Point(rh.Distance); // HitPoint.TexCoord = texCoord; // HitPoint.FromDirection = -ray.Dir; // HitPoint.GeoNormal = ng; // HitPoint.ShadingNormal = ns; // HitPoint.FromLight = fromLight; //}; this.MaterialInfo = mi; this.TexData = texData; if (Frame == null) this.Frame = new ONB(ref HitPoint.GeoNormal); else Frame.SetFromZ(ref HitPoint.GeoNormal); }
public static SurfaceMaterial CreateFrameMaterial(FrameMaterialInfo mi) { BrdfClass brdfClass; if (!BrdfClass.TryParse(mi.BrdfClass, true, out brdfClass)) { throw new ArgumentException("Invalid brdf class"); } var matInfo = new MaterialInfo() { DataFile = mi.DataFile, Kd = mi.Diffuse, Kr = mi.Specular, Ks = mi.Glossy, PhongExponent = mi.Exponent, Name = mi.MaterialName, DiffuseTexture = new ImageTextureInfo() { FilePath = mi.DiffuseTexture }, BumpTexture = new ImageTextureInfo() { FilePath = mi.BumpTexture }, AlphaTexture = new ImageTextureInfo() { FilePath = mi.AlphaTexture }, }; return CreateMaterial(brdfClass, matInfo); }
protected BaseMaterial(MaterialInfo mi, RayEngineScene scene) { this.mi = mi; this.Exponent = mi.Exponent; this.IndexOfRefraction = (ConstWavelengthDependentValue)mi.MediumInfo.IoR; if (mi.DiffuseTexture != null) { Diffuse = TextureFactory.Instance.CreateImageTexture( (RgbSpectrumTexture)scene.Query(mi.MaterialName, TextureType.Diffuse)); } else { Diffuse = TextureFactory.Instance.CreateConstTexture(ref mi.Kd); } if (mi.Specular != null) { Specular = TextureFactory.Instance.CreateImageTexture( (RgbSpectrumTexture)scene.Query(mi.MaterialName, TextureType.Specular)); } else { Specular = TextureFactory.Instance.CreateConstTexture(ref mi.Kr); } if (mi.AlphaTexture != null) { Alpha = TextureFactory.Instance.CreateImageTexture( (RgbSpectrumTexture)scene.Query(mi.MaterialName, TextureType.Alpha)); } var zeroSpectrum = RgbSpectrum.ZeroSpectrum(); var zeroTex = TextureFactory.Instance.CreateConstTexture(ref zeroSpectrum); if (mi.BumpTexture != null && scene.OptTextures.Contains(mi.BumpTexture)) { Bump = TextureFactory.Instance.CreateImageTexture( (RgbSpectrumTexture)scene.Query(mi.MaterialName, TextureType.Bump)); } //else //{ // Bump = zeroTex; //} if (!mi.GlossReflectance.IsBlack()) { Glossy = TextureFactory.Instance.CreateConstTexture(ref mi.Ks); } //else //{ // Glossy = zeroTex; //} if (!mi.Kt.IsBlack()) { Transmission = TextureFactory.Instance.CreateConstTexture(ref mi.Kt); } //else //{ // Transmission = zeroTex; //} if (!mi.Reflectance.IsBlack()) { Reflectance = TextureFactory.Instance.CreateConstTexture(ref mi.Reflectance); } //else //{ // Reflectance = zeroTex; //} }
public SolidMaterial(int id, MaterialInfo mi, RayEngineScene scn, BrdfBase brdf) : base(mi, scn) { this.Id = id; this.brdf = brdf; }
private static MaterialInfo CreateMaterial(string name, ObjMaterial material) { try { var res = new MaterialInfo() { Ka = material.Ka, Kd = material.Kd, Ks = material.Ks, Ke = material.Ke, Exponent = material.Ns, Name = name }; if (!string.IsNullOrWhiteSpace(material.KaMap)) { res.Specular = new ImageTextureInfo() { FilePath = material.KaMap, Name = Path.GetFileName(material.KaMap) }; } if (!string.IsNullOrWhiteSpace(material.KdMap)) { res.Diffuse = new ImageTextureInfo() { FilePath = material.KdMap, Name = Path.GetFileName(material.KdMap) }; } if (!string.IsNullOrWhiteSpace(material.KsMap)) { res.Specular = new ImageTextureInfo() { FilePath = material.KsMap, Name = Path.GetFileName(material.KsMap) }; } if (!string.IsNullOrWhiteSpace(material.BumpMap)) { res.BumpMap = new ImageTextureInfo() { FilePath = material.BumpMap, Name = Path.GetFileName(material.BumpMap) }; } if (!string.IsNullOrWhiteSpace(material.AlphaMap)) { res.Alpha = new ImageTextureInfo() { FilePath = material.AlphaMap, Name = Path.GetFileName(material.AlphaMap) }; } if (!string.IsNullOrWhiteSpace(material.NormalMap)) { res.NormalMap = new ImageTextureInfo() { FilePath = material.NormalMap, Name = Path.GetFileName(material.NormalMap) }; } if (!string.IsNullOrWhiteSpace(material.DataMap)) { res.DataFile = material.DataMap; } return res; } catch (Exception ex) { throw ex; } }
private void Init() { var materialInfo = new MaterialInfo() { Name = "object_materialview_test", DiffuseReflectance = new RgbSpectrum(0.6f), GlossReflectance = new RgbSpectrum(0f, 0.45f, 0.65f), PhongExponent = 50f,SpecularReflectance = new RgbSpectrum(0.75f), DiffuseTexture = new ImageTextureInfo() { FilePath = @"I:\3D\Textures\Oxidated.jpg" },// { FilePath = @"I:\3D\Textures\102.png" }, //BumpTexture = new ImageTextureInfo() { FilePath = @"I:\3D\Textures\102bump.png" }, NormalMap = new ImageTextureInfo() { FilePath = @"I:\3D\Textures\Oxidated.normal.jpg" } }; var secondMI = new MaterialInfo() { Name = "smi", DiffuseReflectance = new RgbSpectrum(0.75f), SpecularReflectance = new RgbSpectrum(0.75f) }; ObjectMaterial = new SurfaceMaterial ( //new MatteMaterial(materialInfo.DiffuseReflectance) { MaterialData = materialInfo } new OrenNayarMaterial(materialInfo.DiffuseReflectance, 0.2f) { MaterialData = materialInfo } //new AnisotropicPhong(materialInfo.DiffuseReflectance, materialInfo.GlossReflectance, 10f, 10f) { MaterialData = materialInfo} //new GlassMaterial(materialInfo.DiffuseReflectance + 0.2f, materialInfo.GlossReflectance + 0.2f, 1.0005f, 1.5f, true, true) { MaterialData = materialInfo } //new MetalMaterial(materialInfo.DiffuseReflectance, materialInfo.PhongExponent, true){MaterialData = materialInfo} /* */ // new MatteMirrorMaterial(materialInfo.DiffuseReflectance, materialInfo.GlossReflectance, true) { MaterialData = materialInfo } // new ArchGlassMaterial(materialInfo.DiffuseReflectance, materialInfo.GlossReflectance, true, true) { MaterialData = materialInfo} /* new DistributionBsdf(10.175f, materialInfo.DiffuseReflectance //,new FresnelDielectric(1.39f, 0.6f) ,new FresnelConductor(materialInfo.DiffuseReflectance, materialInfo.GlossReflectance) ) {MaterialData = materialInfo} */ //new MirrorMaterial(materialInfo.DiffuseReflectance, true) { MaterialData = materialInfo } //new MatteMaterial(secondMI.DiffuseReflectance) { MaterialData = secondMI } //new TranslucentMaterial(materialInfo.DiffuseReflectance) { MaterialData = secondMI } //new MatteMaterial(materialInfo.DiffuseReflectance){ MaterialData = materialInfo } /* new MatteMaterial(materialInfo.DiffuseReflectance){ MaterialData = materialInfo } * new MirrorMaterial(secondMI.DiffuseReflectance, true) { MaterialData = secondMI }*/ //new AlloyMaterial(materialInfo.DiffuseReflectance, materialInfo.GlossReflectance, materialInfo.PhongExponent, 0.5f, true) {MaterialData = materialInfo} ); var planeMI = new MaterialInfo() { Name = "plane_material", DiffuseReflectance = new RgbSpectrum(0.7f), DiffuseTexture = new ImageTextureInfo() { FilePath = "Finishes.Flooring.Tile.Diamond.Red.jpg" }, //{ FilePath = @"I:\3D\Textures\CEDFENCE.jpg" }, //BumpTexture = new ImageTextureInfo() { FilePath = @"I:\3D\Textures\102bump.png" }, BumpMap = new ImageTextureInfo() { FilePath = "Finishes.Flooring.Tile.Diamond.Red.bump.jpg" } //{ FilePath = @"I:\3D\Textures\CEDFENCE.Normal.jpg" } }; PlaneMaterial = new SurfaceMaterial( new MatteMaterial(planeMI.DiffuseReflectance) // new DistributionBsdf(1.175f, materialInfo.DiffuseReflectance ,new FresnelDielectric(1.39f, 0.6f)) { MaterialData = planeMI}); }
public UberMaterial(MaterialInfo data) : base(data) { }
protected MaterialImplementation(MaterialInfo data) { this.MaterialData = data; }
public MaterialInfo[] LoadMaterials(string fileName, params string[] paths) { return this.materials.Select( mat => { var result = new MaterialInfo() { Name = mat.Key, Ka = new RgbSpectrum(mat.Value.Ambient), Kd = new RgbSpectrum(mat.Value.Diffuse), Ks = new RgbSpectrum(mat.Value.Specular), Exponent = mat.Value.Shininess }; if (mat.Value.Textures.Any()) { result.Diffuse = new ImageTextureInfo() { FilePath = mat.Value.Textures[0] }; } return result; } ).ToArray(); }
public OptixMaterialInfo CreateMaterial(MaterialInfo mi, BrdfClass type) { var result = new OptixMaterialInfo() { Name = mi.Name.ToLower(), Info = mi, Type = type }; result.Node = new Material(context); result.Node.SetSurfaceProgram(0, new SurfaceProgram(context, RayHitType.Closest, classKernelMap[result.Type].Item1, classKernelMap[result.Type].Item2)); result.Node.SetSurfaceProgram(1, new SurfaceProgram(context, RayHitType.Any, classKernelMap[result.Type].Item1, classKernelMap[result.Type].Item3)); /* switch (result.Type) { case BrdfClass.DiffuseLambert: break; }*/ return result; }
public SpecularReflectionBrdf(ref RayHit rh, ref RayData ray, ref Normal ng, ref Normal ns, ref UV texCoord, MaterialInfo mi, SurfaceTextureInfo texData, bool fromLight) : base(ref rh, ref ray, ref ng, ref ns, ref texCoord, mi, texData, fromLight) { }
public MatteLambertBrdf(ref RayHit rh, ref RayData ray, ref Normal ng, ref Normal ns, ref UV texCoord, MaterialInfo mi, SurfaceTextureInfo texData, bool fromLight) : base(ref rh, ref ray, ref ng, ref ns, ref texCoord, mi, texData, fromLight) { }
private static SurfaceMaterial CreateMaterial(BrdfClass cl, MaterialInfo materialInfo) { switch (cl) { case BrdfClass.Measured: return new SurfaceMaterial( new RegularHalfangleBRDF(materialInfo.DataFile ?? @"F:\3D\Brdfs\merl\two-layer-silver.binary") ) { Name = materialInfo.Name.ToLower(), Type = BrdfType.Glossy }; ; case BrdfClass.ArchGlass: return new SurfaceMaterial( new ArchGlassMaterial(materialInfo.DiffuseReflectance, materialInfo.GlossReflectance, true, true) { MaterialData = materialInfo }) { Name = materialInfo.Name.ToLower(), Type = BrdfType.Specular }; case BrdfClass.Glass: return new SurfaceMaterial( //new CanonicalGlassMaterial(materialInfo.Kd + 0.5f , materialInfo.GlossReflectance + 0.1f, MediumInfo.Glass) new GlassMaterial(materialInfo.Kd + 1f, materialInfo.GlossReflectance + 0.1f, 1.0005f, 1.2f, true, true) { MaterialData = materialInfo }) { Name = materialInfo.Name.ToLower(), Type = BrdfType.Specular }; case BrdfClass.GlossyMetal: return new SurfaceMaterial( new MetalMaterial(materialInfo.DiffuseReflectance, materialInfo.PhongExponent, true) { MaterialData = materialInfo }) { Name = materialInfo.Name.ToLower(), Type = BrdfType.Glossy }; case BrdfClass.Alloy: return new SurfaceMaterial( //new AnisotropicPhong(materialInfo.DiffuseReflectance, materialInfo.GlossReflectance, 20f, 20f) //new PhongMaterial(RgbSpectrum.Max(ref materialInfo.Kd, ref materialInfo .Ks), materialInfo.PhongExponent) new AlloyMaterial(materialInfo.DiffuseReflectance, materialInfo.GlossReflectance, materialInfo.PhongExponent, 0.5f, true) { MaterialData = materialInfo }) { Name = materialInfo.Name.ToLower(), Type = BrdfType.Glossy }; case BrdfClass.Mirror: return new SurfaceMaterial( new MirrorMaterial(materialInfo.DiffuseReflectance, true) { MaterialData = materialInfo }) { Name = materialInfo.Name.ToLower(), Type = BrdfType.Specular }; case BrdfClass.MatteMirror: return new SurfaceMaterial( new MatteMirrorMaterial(materialInfo.DiffuseReflectance, materialInfo.GlossReflectance, true) { MaterialData = materialInfo }) { Name = materialInfo.Name.ToLower(), Type = BrdfType.Glossy }; case BrdfClass.Distribution: // return new RoughMatte(ref materialInfo.Kd) {Type = BrdfType.Diffuse}; return new SurfaceMaterial( //new GlassMaterial(materialInfo.GlossReflectance, materialInfo.DiffuseReflectance + 0.1f, 1.0005f, 1.5f, true, true) //new AnisotropicPhong(materialInfo.DiffuseReflectance, materialInfo.GlossReflectance , 10f, 10f) //new PhongMaterial(materialInfo.Kd, materialInfo.Ks, materialInfo.PhongExponent) //new FresnelBlend(materialInfo.Kd, materialInfo.Ks, materialInfo.PhongExponent) //new MatteMaterial(materialInfo.DiffuseReflectance) //new OrenNayarMaterial(materialInfo.DiffuseReflectance, materialInfo.Kd.Filter()) //new MatteMaterial(materialInfo.DiffuseReflectance) //new MatteMirrorMaterial( materialInfo.DiffuseReflectance, materialInfo.GlossReflectance, true) //new MirrorMaterial(materialInfo.DiffuseReflectance,true) //new DistributionBsdf(materialInfo.PhongExponent, materialInfo.Kd) new DistributionBsdf(materialInfo.PhongExponent, materialInfo.Kd + 0.5f, new FresnelConductor(new RgbSpectrum(0.5f), new RgbSpectrum(0.025f))) //new ArchGlassMaterial(materialInfo.Kd, materialInfo.Ks, true, true) { MaterialData = materialInfo } //new AlloyMaterial(materialInfo.Kd, materialInfo.Ks, materialInfo.Exponent, 0.5f, true) //new MetalMaterial(materialInfo.Kd, materialInfo.Exponent, true) { MaterialData = materialInfo } //new MatteMaterial(materialInfo.Kd) { MaterialData = materialInfo } ) { Name = materialInfo.Name, Type = BrdfType.Glossy | BrdfType.Diffuse, }; case BrdfClass.DiffuseLambert: return new SurfaceMaterial( //new DistributionBsdf(materialInfo.Exponent, materialInfo.Kd) //new OrenNayarMaterial(materialInfo.DiffuseReflectance, materialInfo.Kd.Filter()) new MatteMaterial(materialInfo.DiffuseReflectance) { MaterialData = materialInfo }) { Name = materialInfo.Name, Type = BrdfType.Diffuse, }; default: return new SurfaceMaterial( //new DistributionBsdf(materialInfo.Exponent, materialInfo.Kd) new OrenNayarMaterial(materialInfo.DiffuseReflectance, materialInfo.Kd.Filter()) { MaterialData = materialInfo }) //new MatteMaterial(materialInfo.DiffuseReflectance) { MaterialData = materialInfo }) { Name = materialInfo.Name, Type = BrdfType.Diffuse, }; } }
public DiffuseMaterial(MaterialInfo data) : base(data) { }
public static SurfaceMaterial CreateMaterial(MaterialInfo materialInfo) { var mat = CreateMaterialInternal(materialInfo); return mat; }
public IMaterialLibrary<ISurfaceMaterial> GetLibrary(MaterialInfo[] materials) { var library = new OptimizedBsdfLibrary(); library.Populate(materials); return library; }
//TODO Eval by mapper only elementary brdf - single return with variable parameters private static SurfaceMaterial CreateMaterialInternal(MaterialInfo materialInfo) { try { if (materialInfo.Name.ToLowerInvariant().StartsWith("mb") && materialInfo.Name.Length < 5) { var index = int.Parse(materialInfo.Name.Substring(2, materialInfo.Name.Length - 2)); var mbData = SampledSpectrum.macbethSpectra[index].Select(i => (float)i).ToArray(); float[] mRes = new float[81]; for (int i = 0; i < 81; i++) { mRes[i] = (float)SampledSpectrum.macbethSpectra[i][index - 1]; } SampledSpectrum spd = SampledSpectrum.FromSampled(SampledSpectrum.macbeth_lambda.Select(o => (float)o).ToArray(), mRes); materialInfo.Reflectance = spd; return new SurfaceMaterial( //new OrenNayarMaterial(materialInfo.DiffuseReflectance, materialInfo.Kd.Filter()) new SpectralMatteMaterial(spd) { MaterialData = materialInfo }) { Name = materialInfo.Name, Class = BrdfClassNameMapper.GetMaterialClass(materialInfo), Type = BrdfType.Diffuse, }; } } catch { } if (materialInfo.Name.Contains("translucent")) { if (materialInfo.Name.Contains("alloy")) { return new SurfaceMaterial( new BrdfToBtdf( new AlloyMaterial(materialInfo.DiffuseReflectance, materialInfo.GlossReflectance, materialInfo.PhongExponent, materialInfo.DiffuseReflectance.y() / materialInfo.GlossReflectance.y(), false) { MaterialData = materialInfo })) { Name = materialInfo.Name.ToLower(), Class = BrdfClassNameMapper.GetMaterialClass(materialInfo), Type = BrdfType.Glossy | BrdfType.Refractive }; } return new SurfaceMaterial( new BrdfToBtdf(new MatteMirrorMaterial(materialInfo.DiffuseReflectance, materialInfo.GlossReflectance, false) { MaterialData = materialInfo })) { Name = materialInfo.Name.ToLower(), Class = BrdfClassNameMapper.GetMaterialClass(materialInfo), Type = BrdfType.Glossy }; } if (materialInfo.Name.NameContains("water")) { return new SurfaceMaterial( new GlassMaterial(new RgbSpectrum(0f, 0.1f, 0.7f), materialInfo.GlossReflectance + 0.1f, 1.0005f, 1.31f, true, true) { MaterialData = materialInfo }) { Name = materialInfo.Name.ToLower(), Class = BrdfClassNameMapper.GetMaterialClass(materialInfo), Type = BrdfType.Specular | BrdfType.Refractive }; } switch (BrdfClassNameMapper.GetMaterialClass(materialInfo)) { case BrdfClass.Measured: return new SurfaceMaterial( new RegularHalfangleBRDF(materialInfo.DataFile ?? @"F:\3D\Brdfs\merl\two-layer-silver.binary") ) { Class = BrdfClassNameMapper.GetMaterialClass(materialInfo), Name = materialInfo.Name.ToLower(), Type = BrdfType.Glossy }; ; case BrdfClass.ArchGlass: return new SurfaceMaterial( new ArchGlassMaterial(materialInfo.DiffuseReflectance, materialInfo.GlossReflectance, true, true) { MaterialData = materialInfo }) { Name = materialInfo.Name.ToLower(), Class = BrdfClassNameMapper.GetMaterialClass(materialInfo), Type = BrdfType.Specular | BrdfType.Refractive }; case BrdfClass.Glass: return new SurfaceMaterial( //new CanonicalGlassMaterial(materialInfo.Kd + 0.5f , materialInfo.GlossReflectance + 0.1f, MediumInfo.Glass) new GlassMaterial(materialInfo.Kd + 1f, materialInfo.GlossReflectance + 0.1f, 1.0005f, materialInfo.Name.NameContains("flint") ? 1.98f : Math.Max(materialInfo.MediumInfo.IoR,1.5f), true, true) //new DispersiveGlassMaterial(materialInfo.Kd + 1f, materialInfo.GlossReflectance + 0.1f, 1.0005f, 1.2f, true, true) //new ArchGlassMaterial(materialInfo.DiffuseReflectance, materialInfo.GlossReflectance, true, true) { MaterialData = materialInfo }) { Name = materialInfo.Name.ToLower(), Class = BrdfClassNameMapper.GetMaterialClass(materialInfo), Type = BrdfType.Specular | BrdfType.Refractive }; case BrdfClass.GlossyMetal: return new SurfaceMaterial( new MetalMaterial(materialInfo.DiffuseReflectance, materialInfo.PhongExponent, true) { MaterialData = materialInfo }) { Name = materialInfo.Name.ToLower(), Class = BrdfClassNameMapper.GetMaterialClass(materialInfo), Type = BrdfType.Glossy }; case BrdfClass.Alloy: bool specular = !materialInfo.Name.NameContains("dull"); return new SurfaceMaterial( //new AnisotropicPhong(materialInfo.DiffuseReflectance, materialInfo.GlossReflectance, 20f, 20f) //new PhongMaterial(RgbSpectrum.Max(ref materialInfo.Kd, ref materialInfo .Ks), materialInfo.PhongExponent) new AlloyMaterial(materialInfo.DiffuseReflectance, materialInfo.GlossReflectance, materialInfo.PhongExponent, materialInfo.DiffuseReflectance.y() / materialInfo.GlossReflectance.y(), specular) { MaterialData = materialInfo }) { Name = materialInfo.Name.ToLower(), Class = BrdfClassNameMapper.GetMaterialClass(materialInfo), Type = BrdfType.Glossy }; case BrdfClass.Mirror: return new SurfaceMaterial( new MirrorMaterial(materialInfo.DiffuseReflectance, true) { MaterialData = materialInfo }) { Name = materialInfo.Name.ToLower(), Class = BrdfClassNameMapper.GetMaterialClass(materialInfo), Type = BrdfType.Specular }; case BrdfClass.MatteMirror: return new SurfaceMaterial( new MatteMirrorMaterial(materialInfo.DiffuseReflectance, materialInfo.GlossReflectance, true) { MaterialData = materialInfo }) { Name = materialInfo.Name.ToLower(), Class = BrdfClassNameMapper.GetMaterialClass(materialInfo), Type = BrdfType.Glossy }; case BrdfClass.Distribution: // return new RoughMatte(ref materialInfo.Kd) {Type = BrdfType.Diffuse}; return new SurfaceMaterial( //new GlassMaterial(materialInfo.GlossReflectance, materialInfo.DiffuseReflectance + 0.1f, 1.0005f, 1.5f, true, true) //new AnisotropicPhong(materialInfo.DiffuseReflectance, materialInfo.GlossReflectance , 10f, 10f) //new PhongMaterial(materialInfo.Kd, materialInfo.Ks, materialInfo.PhongExponent) //new FresnelBlend(materialInfo.Kd, materialInfo.Ks, materialInfo.PhongExponent) //new MatteMaterial(materialInfo.DiffuseReflectance) //new OrenNayarMaterial(materialInfo.DiffuseReflectance, materialInfo.Kd.Filter()) //new MatteMaterial(materialInfo.DiffuseReflectance) //new MatteMirrorMaterial( materialInfo.DiffuseReflectance, materialInfo.GlossReflectance, true) //new MirrorMaterial(materialInfo.DiffuseReflectance,true) //new DistributionBsdf(materialInfo.PhongExponent, materialInfo.Kd) new DistributionBsdf(materialInfo.PhongExponent, materialInfo.Kd + 0.5f, new FresnelConductor(new RgbSpectrum(0.5f), new RgbSpectrum(0.025f))) //new ArchGlassMaterial(materialInfo.Kd, materialInfo.Ks, true, true) { MaterialData = materialInfo } //new AlloyMaterial(materialInfo.Kd, materialInfo.Ks, materialInfo.Exponent, 0.5f, true) //new MetalMaterial(materialInfo.Kd, materialInfo.Exponent, true) { MaterialData = materialInfo } //new MatteMaterial(materialInfo.Kd) { MaterialData = materialInfo } ) { Name = materialInfo.Name, Class = BrdfClassNameMapper.GetMaterialClass(materialInfo), Type = BrdfType.Glossy | BrdfType.Diffuse, }; case BrdfClass.DiffuseLambert: return new SurfaceMaterial( //new DistributionBsdf(materialInfo.Exponent, materialInfo.Kd) //new OrenNayarMaterial(materialInfo.DiffuseReflectance, materialInfo.Kd.Filter()) new MatteMaterial(materialInfo.DiffuseReflectance) { MaterialData = materialInfo }) { Name = materialInfo.Name, Class = BrdfClassNameMapper.GetMaterialClass(materialInfo), Type = BrdfType.Diffuse, }; default: return new SurfaceMaterial( //new DistributionBsdf(materialInfo.Exponent, materialInfo.Kd) //new OrenNayarMaterial(materialInfo.DiffuseReflectance, materialInfo.Kd.Filter()) { MaterialData = materialInfo }) new MatteMaterial(materialInfo.DiffuseReflectance) { MaterialData = materialInfo }) { Name = materialInfo.Name, Class = BrdfClassNameMapper.GetMaterialClass(materialInfo), Type = BrdfType.Diffuse, }; } }
public static BrdfClass GetMaterialClass(MaterialInfo materialInfo) { if (materialInfo.Name.NameContains("orennayar", "oren_nayar", "_M_OR")) { return BrdfClass.OrenNayar; } if (materialInfo.Name.NameContains1("anisotropicphong", "_M_AS")) { return BrdfClass.AnisotropicPhong; } if (materialInfo.Name.NameContains("measured" , "head_mat" , "_M_RHA_")) { return BrdfClass.Measured; } if (materialInfo.Name.NameContains("experimental", "_M_XP")) { return BrdfClass.Experimental; } if (materialInfo.Name.NameContains( "Ruby", "Emerald", "bunny", "garg_mat", "cornell_exp_mat", "glass", "wire_135059008", "wire_060134005", "staklo", "wire_140088225", "wire_154215229", "wire_228153184", "wire_057008136", "__SILVER", "simple_metal_1", "wire_000000000", "wire_200157056", "wire_113134006", "wire_134110008", "water", "_M_GLS", "wire_141182235")) { return BrdfClass.Glass; } if (materialInfo.Name.NameContains( "Saphire", "arch", "_M_AGLS", "wire_008061138", "wire_213228166", "wire_134110008", "wire_028149177", "Material__29")) { return BrdfClass.ArchGlass; } if (!materialInfo.GlossReflectance.IsBlack() && materialInfo.Name.NameContains("metal", "wire_028089177", "_M_MTL", "chrome", "inside", "reflection", "wire_177088026", "wire_153228184", "wire_153228214", "wire_028089177" )) { return BrdfClass.GlossyMetal; } if (!materialInfo.GlossReflectance.IsBlack() && materialInfo.Name.NameContains("alloy" , "mmix", "_M_ALO", "porcelain", "marble", "gloss", "plastic", "ceramic", "wire_008008136" )) { return BrdfClass.Alloy; } if (materialInfo.Name.NameContains("mirror", "_M_MIR", "wire_154154229")) { return BrdfClass.Mirror; } if (materialInfo.Name.NameContains("matmir", "_M_MMR", "wire_087224087")) { return BrdfClass.MatteMirror; } if (materialInfo.Name.NameContains("MaterialView_Test", //"phong", "mitsuba", "blinn", "_M_DST", "wire_088144225" )) { return BrdfClass.Distribution; } if (materialInfo.Name.NameContains("wire_229166215", "wire_060134005")) { return BrdfClass.ArchGlass; } return BrdfClass.DiffuseLambert; }
public IMaterialLibrary<ISurfaceMaterial> GetMaterialPlugin(MaterialInfo[] m) { return new MaterialPlugin().GetLibrary(m); }