Package ca.eandb.jmist.framework

Examples of ca.eandb.jmist.framework.ScatteredRay


  /* (non-Javadoc)
   * @see ca.eandb.jmist.framework.path.PathNode#sample(ca.eandb.jmist.framework.Random)
   */
  public ScatteredRay sample(double ru, double rv, double rj) {
    ScatteredRay sr = inner.sample(ru, rv, rj);
    return sr != null ? sr.transform(localToWorld) : null;
  }
View Full Code Here


      Vector3 v = PathUtil.getDirection(newParent, this);
      Point3 origin = newParent.isAtInfinity()
          ? surf.getPosition().minus(v)
          : newParent.getPosition().toPoint3();
      Ray3 ray = new Ray3(origin, v);
      ScatteredRay sr;

      if (grandChild != null) {
        double rpdf = grandChild.getReversePDF();
        double pdf = grandChild.getPDF();
        Color color = grandChild.getCumulativeWeight()
View Full Code Here

      Vector3 v = PathUtil.getDirection(newParent, this);
      Point3 origin = newParent.isAtInfinity()
          ? surf.getPosition().minus(v)
          : newParent.getPosition().toPoint3();
      Ray3 ray = new Ray3(origin, v);
      ScatteredRay sr;

      if (grandChild != null) {
        double rpdf = grandChild.getReversePDF();
        double pdf = grandChild.getPDF();
        Color color = grandChild.getCumulativeWeight()
View Full Code Here

  @Override
  public ScatteredRay scatter(SurfacePoint x, Vector3 v, boolean adjoint,
      WavelengthPacket lambda, double ru, double rv, double rj) {

    SurfacePoint adapter = new SurfacePointAdapter(x);
    ScatteredRay sr = inner.scatter(adapter, v, adjoint, lambda, ru, rv, rj);

    if (sr != null) {
      double idotn = -v.dot(x.getNormal());
      double odotn = sr.getRay().direction().dot(x.getNormal());

      boolean transmitted = sr.isTransmitted();
      boolean sameSide = (idotn > 0 && odotn > 0) || (idotn < 0 && odotn < 0);

      if ((transmitted && !sameSide) || (!transmitted && sameSide)) {
        return sr;
      }
View Full Code Here

      if (i < nbox) {
        ru = (((double) (i % sqrt)) + ru) / (double) sqrt;
        rv = (((double) (i / sqrt)) + rv) / (double) sqrt;
      }

      ScatteredRay sr = specimen.scatter(surfacePoint, in, false, lambda, ru, rv, rj);

      if (sr != null) {
        Callback f = sensorArray.createCallback(sr.getColor());
        collectorSphere.record(sr.getRay().direction(), f);
      }

    }

    monitor.notifyProgress(1.0);
View Full Code Here

    if (firstBounceRays > 0 && sc.getPathDepth() < 1) {
      Random sampler = firstBounceSampler.get();
      WavelengthPacket lambda = sc.getWavelengthPacket();
      Color shade = sc.getColorModel().getBlack(lambda);
      for (int i = 0; i < firstBounceRays; i++) {
        ScatteredRay ray = sc.getMaterial().scatter(sc, sc.getIncident(), true, sc.getWavelengthPacket(), sampler.next(), sampler.next(), sampler.next());
        if (ray != null) {
          shade = shade.plus(sc.castRay(ray).times(ray.getColor()));
        }
      }
      return shade.divide(firstBounceRays);
    } else if (sc.getPathDepth() < maxDepth) {
      ScatteredRay ray = sc.getScatteredRay();
      if (ray != null) {
        double prob = ColorUtil.getMeanChannelValue(ray.getColor());
        if (prob < 1.0) {
          if (RandomUtil.bernoulli(prob, rnd.get())) {
            ray = ScatteredRay.select(ray, prob);
          } else {
            ray = null;
          }
        }

        if (ray != null) {
          return sc.castRay(ray).times(ray.getColor());
        }
      }
    }

    WavelengthPacket lambda = sc.getWavelengthPacket();
View Full Code Here

  /* (non-Javadoc)
   * @see ca.eandb.jmist.framework.ImageShader#shadeAt(ca.eandb.jmist.math.Point2, ca.eandb.jmist.framework.color.WavelengthPacket)
   */
  public Color shadeAt(Point2 p, WavelengthPacket lambda) {
    ScatteredRay sr = lens.rayAt(p, lambda, Random.DEFAULT);
    if (sr != null) {
      Ray3 ray = sr.getRay();
      Color scale = sr.getColor();
      Color shade = rayShader.shadeRay(ray, lambda);
      return shade.times(scale);
    } else {
      return ColorUtil.getBlack(lambda);
    }
View Full Code Here

      double ru, double rv, double rj) {
    if (inner.isEmissive()) {
      double w = weight * strategy.getWeight(x, lambda);
      SeedReference ref = new SeedReference(rj);
      if (RandomUtil.bernoulli(w, ref)) {
        ScatteredRay sr = strategy.emit(x, lambda, ru, rv, ref.seed);
        if (sr != null) {
          if (sr.getType() == Type.SPECULAR) {
            return ScatteredRay.select(sr, w);
          } else {
            Ray3 ray = sr.getRay();
            Vector3 v = ray.direction();
            double pdf = w * sr.getPDF() + (1.0 - w) * inner.getEmissionPDF(x, v, lambda);
            Color edf = inner.emission(x, sr.getRay().direction(), lambda);
            return new ScatteredRay(ray, edf.divide(pdf), sr.getType(), pdf, sr.isTransmitted());
          }
        }
      } else {
        ScatteredRay sr = inner.emit(x, lambda, ru, rv, ref.seed);
        if (sr != null) {
          if (sr.getType() == Type.SPECULAR) {
            return ScatteredRay.select(sr, 1.0 - w);
          } else {
            Ray3 ray = sr.getRay();
            Vector3 v = ray.direction();
            double pdf = w * strategy.getEmissionPDF(x, v, lambda) + (1.0 - w) * sr.getPDF();
            Color edf = inner.emission(x, sr.getRay().direction(), lambda);
            return new ScatteredRay(ray, edf.divide(pdf), sr.getType(), pdf, sr.isTransmitted());
          }
        }
      }
    }
    return null;
View Full Code Here

  public ScatteredRay scatter(SurfacePoint x, Vector3 v, boolean adjoint,
      WavelengthPacket lambda, double ru, double rv, double rj) {
    double w = weight * strategy.getWeight(x, lambda);
    SeedReference ref = new SeedReference(rj);
    if (RandomUtil.bernoulli(w, ref)) {
      ScatteredRay sr = strategy.scatter(x, v, adjoint, lambda, ru, rv, ref.seed);
      if (sr != null) {
        if (sr.getType() == Type.SPECULAR) {
          return ScatteredRay.select(sr, w);
        } else {
          Ray3 ray = sr.getRay();
          Vector3 r = ray.direction();
          Vector3 in = adjoint ? r.opposite() : v;
          Vector3 out = adjoint ? v.opposite() : r;
          double pdf = w * sr.getPDF() + (1.0 - w) * inner.getScatteringPDF(x, v, r, adjoint, lambda);
          Color bsdf = inner.bsdf(x, in, out, lambda);
          return new ScatteredRay(ray, bsdf.divide(pdf), sr.getType(), pdf, sr.isTransmitted());
        }
      }
    } else {
      ScatteredRay sr = inner.scatter(x, v, adjoint, lambda, ru, rv, ref.seed);
      if (sr != null) {
        if (sr.getType() == Type.SPECULAR) {
          return ScatteredRay.select(sr, 1.0 - w);
        } else {
          Ray3 ray = sr.getRay();
          Vector3 r = ray.direction();
          Vector3 in = adjoint ? r.opposite() : v;
          Vector3 out = adjoint ? v.opposite() : r;
          double pdf = w * strategy.getScatteringPDF(x, v, r, adjoint, lambda) + (1.0 - w) * sr.getPDF();
          Color bsdf = inner.bsdf(x, in, out, lambda);
          return new ScatteredRay(ray, bsdf.divide(pdf), sr.getType(), pdf, sr.isTransmitted());
        }
      }
    }


View Full Code Here

   * @see ca.eandb.jmist.framework.Material#emit(ca.eandb.jmist.framework.SurfacePoint, ca.eandb.jmist.framework.color.WavelengthPacket, double, double, double)
   */
  @Override
  public ScatteredRay emit(SurfacePoint x, WavelengthPacket lambda,
      double ru, double rv, double rj) {
    ScatteredRay result = null;
    boolean aemit = a.isEmissive();
    boolean bemit = b.isEmissive();
    if (aemit && bemit) {
      double t = mask.opacity(x.getUV());
      SeedReference ref = new SeedReference(ru);
      if (RandomUtil.bernoulli(t, ref)) {
        result = b.emit(x, lambda, ref.seed, rv, rj);
        if (result != null) {
          result = new ScatteredRay(result.getRay(), result
              .getColor(), result.getType(), result.getPDF() * t,
              result.isTransmitted());
        }
      } else {
        result = a.emit(x, lambda, ref.seed, rv, rj);
        if (result != null) {
          result = new ScatteredRay(result.getRay(), result
              .getColor(), result.getType(), result.getPDF()
              * (1.0 - t), result.isTransmitted());
        }
      }
    } else if (aemit) {
      result = a.emit(x, lambda, ru, rv, rj);
      if (result != null) {
        double weight = 1.0 - mask.opacity(x.getUV());
        result = new ScatteredRay(result.getRay(), result.getColor()
            .times(weight), result.getType(), result.getPDF(),
            result.isTransmitted());
      }
    } else if (bemit) {
      result = b.emit(x, lambda, ru, rv, rj);
      if (result != null) {
        double weight = mask.opacity(x.getUV());
        result = new ScatteredRay(result.getRay(), result.getColor()
            .times(weight), result.getType(), result.getPDF(),
            result.isTransmitted());
      }
    }
    return result;
  }
View Full Code Here

TOP

Related Classes of ca.eandb.jmist.framework.ScatteredRay

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.