亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? instantgi.java

?? Sunflow是一個照片級的渲染系統(tǒng)
?? JAVA
字號:
package org.sunflow.core.gi;

import java.util.ArrayList;

import org.sunflow.core.GIEngine;
import org.sunflow.core.Options;
import org.sunflow.core.PhotonStore;
import org.sunflow.core.Ray;
import org.sunflow.core.Scene;
import org.sunflow.core.ShadingState;
import org.sunflow.image.Color;
import org.sunflow.math.BoundingBox;
import org.sunflow.math.OrthoNormalBasis;
import org.sunflow.math.Point3;
import org.sunflow.math.Vector3;
import org.sunflow.system.UI;
import org.sunflow.system.UI.Module;

public class InstantGI implements GIEngine {
    private int numPhotons;
    private int numSets;
    private float c;
    private int numBias;
    private PointLight[][] virtualLights;

    public InstantGI(Options options) {
        numPhotons = options.getInt("gi.igi.samples", 64);
        numSets = options.getInt("gi.igi.sets", 1);
        c = options.getFloat("gi.igi.c", 0.00003f);
        numBias = options.getInt("gi.igi.bias_samples", 0);
        virtualLights = null;
    }

    public Color getGlobalRadiance(ShadingState state) {
        Point3 p = state.getPoint();
        Vector3 n = state.getNormal();
        int set = (int) (state.getRandom(0, 1, 1) * numSets);
        float maxAvgPow = 0;
        float minDist = 1;
        Color pow = null;
        for (PointLight vpl : virtualLights[set]) {
            maxAvgPow = Math.max(maxAvgPow, vpl.power.getAverage());
            if (Vector3.dot(n, vpl.n) > 0.9f) {
                float d = vpl.p.distanceToSquared(p);
                if (d < minDist) {
                    pow = vpl.power;
                    minDist = d;
                }
            }
        }
        return pow == null ? Color.BLACK : pow.copy().mul(1.0f / maxAvgPow);
    }

    public boolean init(Scene scene) {
        if (numSets < 1)
            numSets = 1;
        UI.printInfo(Module.LIGHT, "Instant Global Illumination settings:");
        UI.printInfo(Module.LIGHT, "  * Samples:     %d", numPhotons);
        UI.printInfo(Module.LIGHT, "  * Sets:        %d", numSets);
        UI.printInfo(Module.LIGHT, "  * Bias bound:  %f", c);
        UI.printInfo(Module.LIGHT, "  * Bias rays:   %d", numBias);
        virtualLights = new PointLight[numSets][];
        if (numPhotons > 0) {
            for (int i = 0, seed = 0; i < virtualLights.length; i++, seed += numPhotons) {
                PointLightStore map = new PointLightStore();
                if (!scene.calculatePhotons(map, "virtual", seed))
                    return false;
                virtualLights[i] = map.virtualLights.toArray(new PointLight[map.virtualLights.size()]);
                UI.printInfo(Module.LIGHT, "Stored %d virtual point lights for set %d of %d", virtualLights[i].length, i + 1, numSets);
            }
        } else {
            // create an empty array
            for (int i = 0; i < virtualLights.length; i++)
                virtualLights[i] = new PointLight[0];
        }
        return true;
    }

    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);
        for (PointLight vpl : 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;
    }

    private static class PointLight {
        Point3 p;
        Vector3 n;
        Color power;
    }

    private class PointLightStore implements PhotonStore {
        ArrayList<PointLight> virtualLights = new ArrayList<PointLight>();

        public int numEmit() {
            return numPhotons;
        }

        public void prepare(BoundingBox sceneBounds) {
        }

        public void store(ShadingState state, Vector3 dir, Color power, Color diffuse) {
            state.faceforward();
            PointLight vpl = new PointLight();
            vpl.p = state.getPoint();
            vpl.n = state.getNormal();
            vpl.power = power;
            synchronized (this) {
                virtualLights.add(vpl);
            }
        }

        public void init() {
        }

        public boolean allowDiffuseBounced() {
            return true;
        }

        public boolean allowReflectionBounced() {
            return true;
        }

        public boolean allowRefractionBounced() {
            return true;
        }
    }
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲人成网站在线| a美女胸又www黄视频久久| 在线不卡中文字幕播放| 日韩二区三区四区| 日韩免费在线观看| 国产成人免费视频一区| 一色屋精品亚洲香蕉网站| 日本高清无吗v一区| 三级精品在线观看| 久久五月婷婷丁香社区| 成人毛片老司机大片| 一区二区三区在线视频免费| 欧美精三区欧美精三区| 韩国av一区二区三区| 成人免费在线视频| 欧美剧在线免费观看网站| 国产精品一区二区视频| 一区二区三区欧美视频| 91精品国产综合久久精品app| 国产真实乱子伦精品视频| 亚洲欧洲精品一区二区精品久久久| 欧美主播一区二区三区| 国内一区二区在线| 亚洲一区二区三区爽爽爽爽爽| 日韩精品专区在线| 91老师国产黑色丝袜在线| 青青草国产成人av片免费| 中文字幕欧美国产| 欧美猛男超大videosgay| 国产一区二区三区蝌蚪| 一二三四区精品视频| 久久综合色之久久综合| 日本精品免费观看高清观看| 久久99国产乱子伦精品免费| 亚洲乱码国产乱码精品精小说 | 精品视频在线免费| 九九精品视频在线看| 亚洲激情欧美激情| 久久久欧美精品sm网站| 欧美日韩久久一区| 91在线观看美女| 国产在线精品一区在线观看麻豆| 玉米视频成人免费看| 国产校园另类小说区| 91精品国产综合久久国产大片| 91在线观看成人| 国产美女精品人人做人人爽| 午夜欧美在线一二页| 亚洲欧洲日产国码二区| 久久久久久亚洲综合| 欧美一激情一区二区三区| 在线亚洲高清视频| 成人av在线播放网站| 国产永久精品大片wwwapp| 日韩 欧美一区二区三区| 伊人色综合久久天天人手人婷| 国产欧美日韩综合精品一区二区| 日韩一区二区三区视频| 精品视频在线免费| 欧美综合亚洲图片综合区| 99久久精品国产导航| 成人午夜在线视频| 精品一区二区三区在线视频| 日韩二区在线观看| 日韩精品一级二级| 日韩精品一区第一页| 日本亚洲欧美天堂免费| 五月婷婷另类国产| 天堂va蜜桃一区二区三区 | 日韩中文字幕一区二区三区| 亚洲免费色视频| 亚洲欧洲av色图| 国产精品婷婷午夜在线观看| 久久精品水蜜桃av综合天堂| 久久久欧美精品sm网站| 欧美激情综合在线| 国产精品美女一区二区| 国产精品美女视频| 亚洲欧美成人一区二区三区| 亚洲欧美福利一区二区| 亚洲欧美激情在线| 亚洲一区二区三区四区在线观看| 亚洲国产精品一区二区尤物区| 亚洲国产三级在线| 一个色在线综合| 日韩精品一二三四| 黄色成人免费在线| 国产精品一品视频| 成人av在线一区二区三区| 91丨九色丨蝌蚪丨老版| 欧美伊人精品成人久久综合97| 欧美精品第1页| 精品日韩99亚洲| 国产精品天天看| 夜夜精品视频一区二区| 日本不卡视频在线| 国产成人精品网址| 色综合色狠狠综合色| 欧美日高清视频| 欧美大片日本大片免费观看| 国产亚洲欧美色| 一区二区免费在线播放| 久久国产精品露脸对白| 成人av电影在线观看| 欧美日韩成人高清| 日本一区二区三区在线观看| 亚洲综合一区二区三区| 五月天网站亚洲| 国产69精品一区二区亚洲孕妇| 色久综合一二码| 欧美精品一区二区高清在线观看| 国产精品高潮久久久久无| 亚洲超碰97人人做人人爱| 国产成人在线免费| 欧美性受xxxx| 国产欧美日韩在线视频| 亚洲国产视频直播| 国产露脸91国语对白| 欧美图片一区二区三区| 久久久亚洲综合| 五月婷婷久久综合| jizzjizzjizz欧美| 日韩一区二区三区视频| 亚洲精品久久久久久国产精华液| 久久精品国产亚洲aⅴ| 色婷婷综合久久久久中文一区二区| 欧美一区二区三区在线观看| 国产精品福利影院| 九九国产精品视频| 欧美日韩精品欧美日韩精品| 国产欧美日韩精品a在线观看| 视频一区在线播放| 97久久久精品综合88久久| 欧美电视剧在线看免费| 午夜婷婷国产麻豆精品| 波多野结衣精品在线| 久久久青草青青国产亚洲免观| 日产国产欧美视频一区精品 | 欧美日韩在线免费视频| 国产欧美一区二区精品仙草咪| 日日夜夜一区二区| 日本大香伊一区二区三区| 国产欧美综合色| 国产一区二区三区高清播放| 制服丝袜日韩国产| 亚洲成人av免费| 欧美色精品在线视频| 一区二区三区在线看| hitomi一区二区三区精品| 日本一区免费视频| 国产一区二区在线免费观看| 欧美成人在线直播| 日日夜夜一区二区| 正在播放一区二区| 午夜精品久久久久久久蜜桃app| 91在线精品秘密一区二区| 欧美国产激情一区二区三区蜜月| 国产自产2019最新不卡| 久久尤物电影视频在线观看| 久久精品国产一区二区三区免费看 | 亚洲精品日日夜夜| 99视频国产精品| 中文字幕在线免费不卡| 成人综合在线视频| 国产日产亚洲精品系列| 成人国产电影网| 中文字幕一区三区| 97超碰欧美中文字幕| **网站欧美大片在线观看| 91日韩精品一区| 亚洲精品日日夜夜| 精品视频999| 免播放器亚洲一区| 久久久久久影视| 国产成人免费网站| 亚洲欧洲精品一区二区三区不卡| 色综合一个色综合亚洲| 亚洲成人av中文| 欧美电影免费观看高清完整版在线观看 | 欧美网站一区二区| 丝袜美腿亚洲一区二区图片| 91精品欧美一区二区三区综合在| 美女任你摸久久| 久久精品亚洲乱码伦伦中文 | 日本不卡不码高清免费观看| 精品人在线二区三区| 国产成人激情av| 亚洲视频香蕉人妖| 欧美夫妻性生活| 国产精品一线二线三线| 自拍偷在线精品自拍偷无码专区 | 26uuu欧美| 成人一道本在线| 亚洲第一主播视频| 久久色视频免费观看| 成人99免费视频| 视频一区二区三区入口| 久久亚洲捆绑美女| 日本伦理一区二区| 久久成人久久爱|