Exemplo n.º 1
0
        public void ComputeScatteringFunctions(SurfaceInteraction si,
                                               IObjectArena arena,
                                               TransportMode mode,
                                               bool allowMultipleLobes)
        {
            BumpMap?.Bump(si);
            var bsdf = si.BSDF.Initialize(in si);
            var kd   = Kd.Evaluate(in si).Clamp();

            if (!kd.IsBlack())
            {
                bsdf.Add(arena.Create <LambertianReflection>().Initialize(in kd));
            }

            var ks = Ks.Evaluate(in si).Clamp();

            if (ks.IsBlack())
            {
                return;
            }

            var fresnel = arena.Create <FresnelDielectric>().Initialize(1.5f, 1f);
            var rough   = Roughness.Evaluate(in si);

            if (RemapRoughness)
            {
                rough = TrowbridgeReitzDistribution.RoughnessToAlpha(rough);
            }

            var distribution = arena.Create <TrowbridgeReitzDistribution>().Initialize(rough, rough);

            bsdf.Add(arena.Create <MicrofacetReflection>().Initialize(ks, distribution, fresnel));
        }
Exemplo n.º 2
0
        public void ComputeScatteringFunctions(SurfaceInteraction si,
                                               IObjectArena arena,
                                               TransportMode mode,
                                               bool allowMultipleLobes)
        {
            _bumpMap?.Bump(si);

            si.BSDF.Initialize(si);

            var uRough = _uRoughness?.Evaluate(si) ?? _roughness.Evaluate(si);
            var vRough = _vRoughness?.Evaluate(si) ?? _roughness.Evaluate(si);

            if (_remapRoughness)
            {
                uRough = TrowbridgeReitzDistribution.RoughnessToAlpha(uRough);
                vRough = TrowbridgeReitzDistribution.RoughnessToAlpha(vRough);
            }

            var fr = arena.Create <FresnelConductor>().Initialize(Spectrum.One, _eta.Evaluate(si), _k.Evaluate(si));

            var dist = arena.Create <TrowbridgeReitzDistribution>().Initialize(uRough, vRough);

            si.BSDF.Add(arena.Create <MicrofacetReflection>().Initialize(Spectrum.One, dist, fr));
        }