예제 #1
0
    def get_bsdf(self, dgGeom: DifferentialGeometry, dgShading: DifferentialGeometry) -> [BSDF]:

        dgs = DifferentialGeometry()
        if self.bumpMap is None:
            dgs = dgShading
        else:
            # todo Bump(bumpMap, dgGeom, dgShading, &dgs);
            pass

        bsdf = BSDF(dgs, dgGeom.normal)

        r = self.Kr.get_evaluate(dgs).get_clamp()

        if not r.get_is_black():
            bsdf.add(SpecularReflection(r, FresnelNoOp()))

        return bsdf
예제 #2
0
    def get_bsdf(self, dgGeom: DifferentialGeometry, dgShading: DifferentialGeometry)->[BSDF]:

        dgs = DifferentialGeometry()
        if self.bumpMap is None:
            dgs = dgShading
        else:
            #todo Bump(bumpMap, dgGeom, dgShading, &dgs);
            pass

        bsdf = BSDF(dgs, dgGeom.normal)

        r = self.Kd.get_evaluate(dgs).get_clamp()
        sig = get_clamp(self.sigma.get_evaluate(dgs), 0.0, 90.0)

        if r.get_is_black():
            bsdf.add(OrenNayar(r,sig))
        else:
            bsdf.add(Lambertian(r))

        return bsdf
예제 #3
0
    def get_bsdf(self, dgGeom: DifferentialGeometry, dgShading: DifferentialGeometry)->[BSDF]:

        dgs = DifferentialGeometry()
        if self.bumpMap is None:
            dgs = dgShading
        else:
            #todo Bump(bumpMap, dgGeom, dgShading, &dgs);
            pass

        bsdf = BSDF(dgs, dgGeom.normal)

        kd = self.Kd.get_evaluate(dgs).get_clamp()
        if not kd.get_is_black():
            diff = Lambertian(kd)
            bsdf.add(diff)

        ks = self.Ks.get_evaluate(dgs).get_clamp()
        if not ks.get_is_black():
            fresnel = FresnelDielectric(1.5, 1.0)
            rough = self.roughness.get_evaluate(dgs)
            spec = Microfacet(ks, fresnel, Blinn(1.0 / rough))
            bsdf.add(spec)

        return bsdf