public Color getGlobalRadiance(ShadingState state) { if (globalPhotonMap == null) { if (state.getShader() != null) return state.getShader().getRadiance(state); else return Color.BLACK; } else return globalPhotonMap.getRadiance(state.getPoint(), state.getNormal()); }
public Color GetRadiance(ShadingState state) { if (state.getNormal() == null) { // if this shader has been applied to an infinite instance because of shader overrides // run the default shader, otherwise, just shade black return(state.getShader() != this ? state.getShader().GetRadiance(state) : Color.BLACK); } // make sure we are on the right side of the material state.faceforward(); // setup lighting state.initLightSamples(); state.initCausticSamples(); return(state.diffuse(Color.GRAY)); }
public Color GetRadiance(ShadingState state) { if (state.getNormal() == null) { // if this shader has been applied to an infinite instance because of shader overrides // run the default shader, otherwise, just shade black return state.getShader() != this ? state.getShader().GetRadiance(state) : Color.BLACK; } // make sure we are on the right side of the material state.faceforward(); // setup lighting state.initLightSamples(); state.initCausticSamples(); return state.diffuse(Color.GRAY); }
public Color getGlobalRadiance(ShadingState state) { if (globalPhotonMap == null) { if (state.getShader() != null) { return(state.getShader().GetRadiance(state)); } else { return(Color.BLACK); } } else { return(globalPhotonMap.getRadiance(state.getPoint(), state.getNormal())); } }
public Color getIrradiance(ShadingState state, Color diffuseReflectance) { if (samples <= 0) { return(Color.BLACK); } // compute new sample Color irr = Color.black(); OrthoNormalBasis onb = state.getBasis(); Vector3 w = new Vector3(); int n = state.getDiffuseDepth() == 0 ? samples : 1; for (int i = 0; i < n; i++) { float xi = (float)state.getRandom(i, 0, n); float xj = (float)state.getRandom(i, 1, n); float phi = (float)(xi * 2 * Math.PI); float cosPhi = (float)Math.Cos(phi); float sinPhi = (float)Math.Sin(phi); float sinTheta = (float)Math.Sqrt(xj); float cosTheta = (float)Math.Sqrt(1.0f - xj); w.x = cosPhi * sinTheta; w.y = sinPhi * sinTheta; w.z = cosTheta; onb.transform(w); ShadingState temp = state.traceFinalGather(new Ray(state.getPoint(), w), i); if (temp != null) { temp.getInstance().prepareShadingState(temp); if (temp.getShader() != null) { irr.add(temp.getShader().getRadiance(temp)); } } } irr.mul((float)Math.PI / n); return(irr); }
public void set(ShadingState state) { if (state == null) { c = Color.BLACK; } else { c = state.getResult(); checkNanInf(); shader = state.getShader(); instance = state.getInstance(); if (state.getNormal() != null) { nx = state.getNormal().x; ny = state.getNormal().y; nz = state.getNormal().z; } } n = 1; }
private IShader getShader(ShadingState state) { return shaderOverride != null ? shaderOverride : state.getShader(); }
private IShader getPhotonShader(ShadingState state) { return (shaderOverride != null && shaderOverridePhotons) ? shaderOverride : state.getShader(); }
public override Color getFillColor(ShadingState state) { return ambocc ? state.occlusion(16, 6.0f) : state.getShader().getRadiance(state); }
public override Color getFillColor(ShadingState state) { return(ambocc ? state.occlusion(16, 6.0f) : state.getShader().getRadiance(state)); }
public Color getIrradiance(ShadingState state, Color diffuseReflectance) { float b = (float)Math.PI * c / diffuseReflectance.getMax(); Color irr = Color.black(); Point3 p = state.getPoint(); Vector3 n = state.getNormal(); int set = (int)(state.getRandom(0, 1, 1) * numSets); foreach (PointLight vpl in virtualLights[set]) { Ray r = new Ray(p, vpl.p); float dotNlD = -(r.dx * vpl.n.x + r.dy * vpl.n.y + r.dz * vpl.n.z); float dotND = r.dx * n.x + r.dy * n.y + r.dz * n.z; if (dotNlD > 0 && dotND > 0) { float r2 = r.getMax() * r.getMax(); Color opacity = state.traceShadow(r); Color power = Color.blend(vpl.power, Color.BLACK, opacity); float g = (dotND * dotNlD) / r2; irr.madd(0.25f * Math.Min(g, b), power); } } // bias compensation int nb = (state.getDiffuseDepth() == 0 || numBias <= 0) ? numBias : 1; if (nb <= 0) { return(irr); } OrthoNormalBasis onb = state.getBasis(); Vector3 w = new Vector3(); float scale = (float)Math.PI / nb; for (int i = 0; i < nb; i++) { float xi = (float)state.getRandom(i, 0, nb); float xj = (float)state.getRandom(i, 1, nb); float phi = (float)(xi * 2 * Math.PI); float cosPhi = (float)Math.Cos(phi); float sinPhi = (float)Math.Sin(phi); float sinTheta = (float)Math.Sqrt(xj); float cosTheta = (float)Math.Sqrt(1.0f - xj); w.x = cosPhi * sinTheta; w.y = sinPhi * sinTheta; w.z = cosTheta; onb.transform(w); Ray r = new Ray(state.getPoint(), w); r.setMax((float)Math.Sqrt(cosTheta / b)); ShadingState temp = state.traceFinalGather(r, i); if (temp != null) { temp.getInstance().prepareShadingState(temp); if (temp.getShader() != null) { float dist = temp.getRay().getMax(); float r2 = dist * dist; float cosThetaY = -Vector3.dot(w, temp.getNormal()); if (cosThetaY > 0) { float g = (cosTheta * cosThetaY) / r2; // was this path accounted for yet? if (g > b) { irr.madd(scale * (g - b) / g, temp.getShader().GetRadiance(temp)); } } } } } return(irr); }
public void set(ShadingState state) { if (state == null) c = Color.BLACK; else { c = state.getResult(); shader = state.getShader(); instance = state.getInstance(); if (state.getNormal() != null) { nx = state.getNormal().x; ny = state.getNormal().y; nz = state.getNormal().z; } alpha = state.getInstance() == null ? 0 : 1; } n = 1; }