提交 f5ad66a5 编写于 作者: M Matt Pharr

Remove "sigma" parameter from diffuse materials

Switch to DiffuseBxDF in DiffuseMaterial
Remove "sigma" parameters with --upgrade
上级 d84558d9
......@@ -77,9 +77,8 @@ std::vector<TestScene> GetScenes() {
static ConstantSpectrum cs(0.5);
SpectrumTexture Kd = alloc.new_object<SpectrumConstantTexture>(&cs);
FloatTexture sigma = alloc.new_object<FloatConstantTexture>(0.);
// FIXME: here and below, Materials leak...
Material material = new DiffuseMaterial(Kd, sigma, nullptr, nullptr);
Material material = new DiffuseMaterial(Kd, nullptr, nullptr);
MediumInterface mediumInterface;
std::vector<Primitive> prims;
......@@ -106,8 +105,7 @@ std::vector<TestScene> GetScenes() {
static ConstantSpectrum cs(0.5);
SpectrumTexture Kd = alloc.new_object<SpectrumConstantTexture>(&cs);
FloatTexture sigma = alloc.new_object<FloatConstantTexture>(0.);
const Material material = new DiffuseMaterial(Kd, sigma, nullptr, nullptr);
const Material material = new DiffuseMaterial(Kd, nullptr, nullptr);
MediumInterface mediumInterface;
std::vector<Primitive> prims;
......@@ -140,8 +138,7 @@ std::vector<TestScene> GetScenes() {
static ConstantSpectrum cs(0.5);
SpectrumTexture Kd = alloc.new_object<SpectrumConstantTexture>(&cs);
FloatTexture sigma = alloc.new_object<FloatConstantTexture>(0.);
const Material material = new DiffuseMaterial(Kd, sigma, nullptr, nullptr);
const Material material = new DiffuseMaterial(Kd, nullptr, nullptr);
// We have to do this little dance here to make sure the spectrum is
// properly normalized (this is usually all handled inside *Light::Create())
......
......@@ -180,7 +180,7 @@ HairMaterial *HairMaterial::Create(const TextureParameterDictionary &parameters,
// DiffuseMaterial Method Definitions
std::string DiffuseMaterial::ToString() const {
return StringPrintf("[ DiffuseMaterial displacement: %s reflectance: %s sigma: %s ]",
displacement, reflectance, sigma);
displacement, reflectance);
}
DiffuseMaterial *DiffuseMaterial::Create(const TextureParameterDictionary &parameters,
......@@ -191,10 +191,9 @@ DiffuseMaterial *DiffuseMaterial::Create(const TextureParameterDictionary &param
if (!reflectance)
reflectance = alloc.new_object<SpectrumConstantTexture>(
alloc.new_object<ConstantSpectrum>(0.5f));
FloatTexture sigma = parameters.GetFloatTexture("sigma", 0.f, alloc);
FloatTexture displacement = parameters.GetFloatTextureOrNull("displacement", alloc);
return alloc.new_object<DiffuseMaterial>(reflectance, sigma, displacement, normalMap);
return alloc.new_object<DiffuseMaterial>(reflectance, displacement, normalMap);
}
// ConductorMaterial Method Definitions
......@@ -566,8 +565,8 @@ SubsurfaceMaterial *SubsurfaceMaterial::Create(
// DiffuseTransmissionMaterial Method Definitions
std::string DiffuseTransmissionMaterial::ToString() const {
return StringPrintf("[ DiffuseTransmissionMaterial displacement: %s reflectance: %s "
"transmittance: %s sigma: %s ]",
displacement, reflectance, transmittance, sigma);
"transmittance: %s ]",
displacement, reflectance, transmittance);
}
DiffuseTransmissionMaterial *DiffuseTransmissionMaterial::Create(
......@@ -587,11 +586,10 @@ DiffuseTransmissionMaterial *DiffuseTransmissionMaterial::Create(
FloatTexture displacement = parameters.GetFloatTextureOrNull("displacement", alloc);
bool remapRoughness = parameters.GetOneBool("remaproughness", true);
FloatTexture sigma = parameters.GetFloatTexture("sigma", 0.f, alloc);
Float scale = parameters.GetOneFloat("scale", 1.f);
return alloc.new_object<DiffuseTransmissionMaterial>(
reflectance, transmittance, sigma, displacement, normalMap, scale);
return alloc.new_object<DiffuseTransmissionMaterial>(reflectance, transmittance,
displacement, normalMap, scale);
}
MeasuredMaterial::MeasuredMaterial(const std::string &filename, FloatTexture displacement,
......
......@@ -428,7 +428,7 @@ class HairMaterial {
class DiffuseMaterial {
public:
// DiffuseMaterial Type Definitions
using BxDF = RoughDiffuseBxDF;
using BxDF = DiffuseBxDF;
using BSSRDF = void;
// DiffuseMaterial Public Methods
......@@ -450,24 +450,20 @@ class DiffuseMaterial {
std::string ToString() const;
DiffuseMaterial(SpectrumTexture reflectance, FloatTexture sigma,
FloatTexture displacement, Image *normalMap)
: displacement(displacement),
normalMap(normalMap),
reflectance(reflectance),
sigma(sigma) {}
DiffuseMaterial(SpectrumTexture reflectance, FloatTexture displacement,
Image *normalMap)
: displacement(displacement), normalMap(normalMap), reflectance(reflectance) {}
template <typename TextureEvaluator>
PBRT_CPU_GPU bool CanEvaluateTextures(TextureEvaluator texEval) const {
return texEval.CanEvaluate({sigma}, {reflectance});
return texEval.CanEvaluate({}, {reflectance});
}
template <typename TextureEvaluator>
PBRT_CPU_GPU BSDF GetBSDF(TextureEvaluator texEval, MaterialEvalContext ctx,
SampledWavelengths &lambda, RoughDiffuseBxDF *bxdf) const {
SampledWavelengths &lambda, DiffuseBxDF *bxdf) const {
SampledSpectrum r = Clamp(texEval(reflectance, ctx, lambda), 0, 1);
Float sig = Clamp(texEval(sigma, ctx), 0, 90);
*bxdf = RoughDiffuseBxDF(r, SampledSpectrum(0), sig);
*bxdf = DiffuseBxDF(r);
return BSDF(ctx.ns, ctx.dpdus, bxdf);
}
......@@ -476,7 +472,6 @@ class DiffuseMaterial {
FloatTexture displacement;
Image *normalMap;
SpectrumTexture reflectance;
FloatTexture sigma;
};
// ConductorMaterial Definition
......@@ -799,20 +794,19 @@ class DiffuseTransmissionMaterial {
using BSSRDF = void;
// DiffuseTransmissionMaterial Public Methods
DiffuseTransmissionMaterial(SpectrumTexture reflectance,
SpectrumTexture transmittance, FloatTexture sigma,
FloatTexture displacement, Image *normalMap, Float scale)
SpectrumTexture transmittance, FloatTexture displacement,
Image *normalMap, Float scale)
: displacement(displacement),
normalMap(normalMap),
reflectance(reflectance),
transmittance(transmittance),
sigma(sigma),
scale(scale) {}
static const char *Name() { return "DiffuseTransmissionMaterial"; }
template <typename TextureEvaluator>
PBRT_CPU_GPU bool CanEvaluateTextures(TextureEvaluator texEval) const {
return texEval.CanEvaluate({sigma}, {reflectance, transmittance});
return texEval.CanEvaluate({}, {reflectance, transmittance});
}
template <typename TextureEvaluator>
......@@ -820,8 +814,7 @@ class DiffuseTransmissionMaterial {
SampledWavelengths &lambda, RoughDiffuseBxDF *bxdf) const {
SampledSpectrum r = Clamp(scale * texEval(reflectance, ctx, lambda), 0, 1);
SampledSpectrum t = Clamp(scale * texEval(transmittance, ctx, lambda), 0, 1);
Float s = texEval(sigma, ctx);
*bxdf = RoughDiffuseBxDF(r, t, s);
*bxdf = RoughDiffuseBxDF(r, t, 0);
return BSDF(ctx.ns, ctx.dpdus, bxdf);
}
......@@ -847,7 +840,6 @@ class DiffuseTransmissionMaterial {
FloatTexture displacement;
Image *normalMap;
SpectrumTexture reflectance, transmittance;
FloatTexture sigma;
Float scale;
};
......
......@@ -1556,6 +1556,8 @@ std::string FormattingParserTarget::upgradeMaterial(std::string *name, Parameter
} else if (*name == "matte") {
*name = "diffuse";
dict->RenameParameter("Kd", "reflectance");
dict->RemoveFloat("sigma");
dict->RemoveTexture("sigma");
} else if (*name == "metal") {
*name = "conductor";
removeParamSilentIfConstant("Kr", 1);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册