Search in sources :

Example 26 with Vector3

use of org.sunflow.math.Vector3 in project joons-renderer by joonhyublee.

the class NormalShader method getRadiance.

public Color getRadiance(ShadingState state) {
    Vector3 n = state.getNormal();
    if (n == null) {
        return Color.BLACK;
    }
    float r = (n.x + 1) * 0.5f;
    float g = (n.y + 1) * 0.5f;
    float b = (n.z + 1) * 0.5f;
    return new Color(r, g, b);
}
Also used : Color(org.sunflow.image.Color) Vector3(org.sunflow.math.Vector3)

Example 27 with Vector3

use of org.sunflow.math.Vector3 in project joons-renderer by joonhyublee.

the class ShinyDiffuseShader method scatterPhoton.

public void scatterPhoton(ShadingState state, Color power) {
    Color diffuse;
    // make sure we are on the right side of the material
    state.faceforward();
    diffuse = getDiffuse(state);
    state.storePhoton(state.getRay().getDirection(), power, diffuse);
    float d = diffuse.getAverage();
    float r = d * refl;
    double rnd = state.getRandom(0, 0, 1);
    if (rnd < d) {
        // photon is scattered
        power.mul(diffuse).mul(1.0f / d);
        OrthoNormalBasis onb = state.getBasis();
        double u = 2 * Math.PI * rnd / d;
        double v = state.getRandom(0, 1, 1);
        float s = (float) Math.sqrt(v);
        float s1 = (float) Math.sqrt(1.0 - v);
        Vector3 w = new Vector3((float) Math.cos(u) * s, (float) Math.sin(u) * s, s1);
        w = onb.transform(w, new Vector3());
        state.traceDiffusePhoton(new Ray(state.getPoint(), w), power);
    } else if (rnd < d + r) {
        float cos = -Vector3.dot(state.getNormal(), state.getRay().getDirection());
        power.mul(diffuse).mul(1.0f / d);
        // photon is reflected
        float dn = 2 * cos;
        Vector3 dir = new Vector3();
        dir.x = (dn * state.getNormal().x) + state.getRay().getDirection().x;
        dir.y = (dn * state.getNormal().y) + state.getRay().getDirection().y;
        dir.z = (dn * state.getNormal().z) + state.getRay().getDirection().z;
        state.traceReflectionPhoton(new Ray(state.getPoint(), dir), power);
    }
}
Also used : Color(org.sunflow.image.Color) Vector3(org.sunflow.math.Vector3) Ray(org.sunflow.core.Ray) OrthoNormalBasis(org.sunflow.math.OrthoNormalBasis)

Example 28 with Vector3

use of org.sunflow.math.Vector3 in project joons-renderer by joonhyublee.

the class CornellBox method prepareShadingState.

@Override
public void prepareShadingState(ShadingState state) {
    state.init();
    state.getRay().getPoint(state.getPoint());
    int n = state.getPrimitiveID();
    switch(n) {
        case 0:
            state.getNormal().set(new Vector3(1, 0, 0));
            break;
        case 1:
            state.getNormal().set(new Vector3(-1, 0, 0));
            break;
        case 2:
            state.getNormal().set(new Vector3(0, 1, 0));
            break;
        case 3:
            state.getNormal().set(new Vector3(0, -1, 0));
            break;
        case 4:
            state.getNormal().set(new Vector3(0, 0, 1));
            break;
        case 5:
            state.getNormal().set(new Vector3(0, 0, -1));
            break;
        default:
            state.getNormal().set(new Vector3(0, 0, 0));
            break;
    }
    state.getGeoNormal().set(state.getNormal());
    state.setBasis(OrthoNormalBasis.makeFromW(state.getNormal()));
    state.setShader(this);
}
Also used : Vector3(org.sunflow.math.Vector3)

Example 29 with Vector3

use of org.sunflow.math.Vector3 in project joons-renderer by joonhyublee.

the class Plane method prepareShadingState.

@Override
public void prepareShadingState(ShadingState state) {
    state.init();
    state.getRay().getPoint(state.getPoint());
    Instance parent = state.getInstance();
    Vector3 worldNormal = state.transformNormalObjectToWorld(normal);
    state.getNormal().set(worldNormal);
    state.getGeoNormal().set(worldNormal);
    state.setShader(parent.getShader(0));
    state.setModifier(parent.getModifier(0));
    Point3 p = state.transformWorldToObject(state.getPoint());
    float hu, hv;
    switch(k) {
        case 0:
            {
                hu = p.y;
                hv = p.z;
                break;
            }
        case 1:
            {
                hu = p.z;
                hv = p.x;
                break;
            }
        case 2:
            {
                hu = p.x;
                hv = p.y;
                break;
            }
        default:
            hu = hv = 0;
    }
    state.getUV().x = hu * bnu + hv * bnv + bnd;
    state.getUV().y = hu * cnu + hv * cnv + cnd;
    state.setBasis(OrthoNormalBasis.makeFromW(normal));
}
Also used : Point3(org.sunflow.math.Point3) Instance(org.sunflow.core.Instance) Vector3(org.sunflow.math.Vector3)

Example 30 with Vector3

use of org.sunflow.math.Vector3 in project joons-renderer by joonhyublee.

the class MirrorShader method getRadiance.

public Color getRadiance(ShadingState state) {
    if (!state.includeSpecular()) {
        return Color.BLACK;
    }
    state.faceforward();
    float cos = state.getCosND();
    float dn = 2 * cos;
    Vector3 refDir = new Vector3();
    refDir.x = (dn * state.getNormal().x) + state.getRay().getDirection().x;
    refDir.y = (dn * state.getNormal().y) + state.getRay().getDirection().y;
    refDir.z = (dn * state.getNormal().z) + state.getRay().getDirection().z;
    Ray refRay = new Ray(state.getPoint(), refDir);
    // compute Fresnel term
    cos = 1 - cos;
    float cos2 = cos * cos;
    float cos5 = cos2 * cos2 * cos;
    Color ret = Color.white();
    ret.sub(color);
    ret.mul(cos5);
    ret.add(color);
    return ret.mul(state.traceReflection(refRay, 0));
}
Also used : Color(org.sunflow.image.Color) Vector3(org.sunflow.math.Vector3) Ray(org.sunflow.core.Ray)

Aggregations

Vector3 (org.sunflow.math.Vector3)75 Color (org.sunflow.image.Color)34 Point3 (org.sunflow.math.Point3)27 Ray (org.sunflow.core.Ray)25 OrthoNormalBasis (org.sunflow.math.OrthoNormalBasis)17 Instance (org.sunflow.core.Instance)11 LightSample (org.sunflow.core.LightSample)8 ShadingState (org.sunflow.core.ShadingState)3 ParameterList (org.sunflow.core.ParameterList)2 TriangleMesh (org.sunflow.core.primitive.TriangleMesh)2 XYZColor (org.sunflow.image.XYZColor)2 Timer (org.sunflow.system.Timer)2 File (java.io.File)1 FileInputStream (java.io.FileInputStream)1 FileNotFoundException (java.io.FileNotFoundException)1 IOException (java.io.IOException)1 FloatBuffer (java.nio.FloatBuffer)1 MappedByteBuffer (java.nio.MappedByteBuffer)1 ReentrantReadWriteLock (java.util.concurrent.locks.ReentrantReadWriteLock)1 PrimitiveList (org.sunflow.core.PrimitiveList)1