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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? ubershader.java

?? Sunflow是一個照片級的渲染系統
?? JAVA
字號:
package org.sunflow.core.shader;

import org.sunflow.SunflowAPI;
import org.sunflow.core.ParameterList;
import org.sunflow.core.Ray;
import org.sunflow.core.Shader;
import org.sunflow.core.ShadingState;
import org.sunflow.core.Texture;
import org.sunflow.core.TextureCache;
import org.sunflow.image.Color;
import org.sunflow.math.MathUtils;
import org.sunflow.math.OrthoNormalBasis;
import org.sunflow.math.Vector3;

public class UberShader implements Shader {
    private Color diff;
    private Color spec;
    private Texture diffmap;
    private Texture specmap;
    private float diffBlend;
    private float specBlend;
    private float glossyness;
    private int numSamples;

    public UberShader() {
        diff = spec = Color.GRAY;
        diffmap = specmap = null;
        diffBlend = specBlend = 1;
        glossyness = 0;
        numSamples = 4;
    }

    public boolean update(ParameterList pl, SunflowAPI api) {
        diff = pl.getColor("diffuse", diff);
        spec = pl.getColor("specular", spec);
        String filename;
        filename = pl.getString("diffuse.texture", null);
        if (filename != null)
            diffmap = TextureCache.getTexture(api.resolveTextureFilename(filename), false);
        filename = pl.getString("specular.texture", null);
        if (filename != null)
            specmap = TextureCache.getTexture(api.resolveTextureFilename(filename), false);
        diffBlend = MathUtils.clamp(pl.getFloat("diffuse.blend", diffBlend), 0, 1);
        specBlend = MathUtils.clamp(pl.getFloat("specular.blend", diffBlend), 0, 1);
        glossyness = MathUtils.clamp(pl.getFloat("glossyness", glossyness), 0, 1);
        numSamples = pl.getInt("samples", numSamples);
        return true;
    }

    public Color getDiffuse(ShadingState state) {
        return diffmap == null ? diff : Color.blend(diff, diffmap.getPixel(state.getUV().x, state.getUV().y), diffBlend);
    }

    public Color getSpecular(ShadingState state) {
        return specmap == null ? spec : Color.blend(spec, specmap.getPixel(state.getUV().x, state.getUV().y), specBlend);
    }

    public Color getRadiance(ShadingState state) {
        // make sure we are on the right side of the material
        state.faceforward();
        // direct lighting
        state.initLightSamples();
        state.initCausticSamples();
        Color d = getDiffuse(state);
        Color lr = state.diffuse(d);
        if (!state.includeSpecular())
            return lr;
        if (glossyness == 0) {
            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(spec);
            ret.mul(cos5);
            ret.add(spec);
            return lr.add(ret.mul(state.traceReflection(refRay, 0)));
        } else
            return lr.add(state.specularPhong(getSpecular(state), 2 / glossyness, numSamples));
    }

    public void scatterPhoton(ShadingState state, Color power) {
        Color diffuse, specular;
        // make sure we are on the right side of the material
        state.faceforward();
        diffuse = getDiffuse(state);
        specular = getSpecular(state);
        state.storePhoton(state.getRay().getDirection(), power, diffuse);
        float d = diffuse.getAverage();
        float r = specular.getAverage();
        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) {
            if (glossyness == 0) {
                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);
            } else {
                float dn = 2.0f * state.getCosND();
                // reflected direction
                Vector3 refDir = new Vector3();
                refDir.x = (dn * state.getNormal().x) + state.getRay().dx;
                refDir.y = (dn * state.getNormal().y) + state.getRay().dy;
                refDir.z = (dn * state.getNormal().z) + state.getRay().dz;
                power.mul(spec).mul(1.0f / r);
                OrthoNormalBasis onb = state.getBasis();
                double u = 2 * Math.PI * (rnd - r) / r;
                double v = state.getRandom(0, 1, 1);
                float s = (float) Math.pow(v, 1 / ((1.0f / glossyness) + 1));
                float s1 = (float) Math.sqrt(1 - s * s);
                Vector3 w = new Vector3((float) Math.cos(u) * s1, (float) Math.sin(u) * s1, s);
                w = onb.transform(w, new Vector3());
                state.traceReflectionPhoton(new Ray(state.getPoint(), w), power);
            }
        }
    }
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
五月天中文字幕一区二区| 亚洲v精品v日韩v欧美v专区| 欧美精品tushy高清| 97精品久久久久中文字幕 | 91九色02白丝porn| av中文字幕不卡| 成人av先锋影音| 99久久精品国产精品久久| 99久久伊人精品| bt欧美亚洲午夜电影天堂| 成人网页在线观看| av一本久道久久综合久久鬼色| 成人亚洲一区二区一| 国产精品456露脸| 成人免费看视频| 色综合天天综合网天天狠天天| 色综合天天在线| 日本久久电影网| 在线成人小视频| 日韩欧美一区二区视频| 中文字幕欧美区| 伊人夜夜躁av伊人久久| 五月激情六月综合| 国产综合久久久久久久久久久久| 懂色一区二区三区免费观看 | 色综合天天视频在线观看| 一本久道久久综合中文字幕| 在线观看一区二区精品视频| 欧美日本在线观看| 久久久久九九视频| 亚洲欧洲综合另类在线| 喷水一区二区三区| 成人精品免费看| 欧美日韩国产大片| 日韩美女一区二区三区| 1024亚洲合集| 久久国产免费看| 在线观看视频一区| 久久久久久久久免费| 午夜视频在线观看一区二区| 狠狠网亚洲精品| 在线免费观看成人短视频| 欧美成va人片在线观看| 亚洲日本电影在线| 狠狠色丁香久久婷婷综合丁香| 色欧美片视频在线观看在线视频| 日韩精品一区二区三区视频在线观看 | 国产河南妇女毛片精品久久久 | 欧美一区二区三区婷婷月色| 国产精品三级av在线播放| 日产精品久久久久久久性色| www.色精品| 日韩免费电影网站| 天天综合天天综合色| aaa亚洲精品一二三区| 精品1区2区在线观看| 亚洲电影在线播放| av亚洲精华国产精华精华| 日韩精品一区二区三区视频播放| 亚洲一区在线观看网站| 不卡的电视剧免费网站有什么| 精品乱人伦一区二区三区| 天天亚洲美女在线视频| 91福利视频网站| 亚洲卡通欧美制服中文| 高清不卡在线观看av| 欧美成人女星排行榜| 国产午夜亚洲精品理论片色戒| 在线免费av一区| 久久久久国产精品麻豆ai换脸| 亚洲高清久久久| 99热这里都是精品| 中文字幕精品一区| hitomi一区二区三区精品| 国产日韩欧美精品在线| 久久 天天综合| 精品国精品国产尤物美女| 日韩av网站在线观看| 欧美电影一区二区| 亚洲.国产.中文慕字在线| 欧美中文字幕亚洲一区二区va在线| 国产精品美女久久久久久久久久久 | 在线电影院国产精品| 亚洲欧美自拍偷拍| 国产成人在线视频免费播放| 精品福利一区二区三区免费视频| 免费在线观看视频一区| 日韩一级二级三级精品视频| 卡一卡二国产精品 | 欧美激情一区二区三区在线| 久久99国产精品免费| 精品国产伦一区二区三区观看体验| 亚洲成人7777| 欧美成人a在线| 国产成a人亚洲精| 亚洲欧洲www| 欧美亚洲免费在线一区| 青娱乐精品视频在线| 欧美精品一区二区三区蜜桃| 国产91精品在线观看| 亚洲色图视频网| 国产精品亚洲人在线观看| 99久久免费国产| 亚洲精品日韩专区silk| 欧美日韩激情一区二区三区| 男女男精品视频| 国产日产欧美一区二区三区| 色呦呦国产精品| 无吗不卡中文字幕| 国产欧美一区二区精品秋霞影院| 91蝌蚪porny九色| 亚洲国产日韩一级| 久久久亚洲国产美女国产盗摄| 99re这里只有精品视频首页| 亚洲a一区二区| 中文字幕第一页久久| 在线播放91灌醉迷j高跟美女 | 亚洲成年人影院| 久久久久久**毛片大全| 日本久久一区二区| 国产一区二区三区久久久| 久久91精品久久久久久秒播| 国产精品初高中害羞小美女文| 欧美日韩另类一区| 成人精品视频一区二区三区尤物| 日韩成人精品视频| 玉米视频成人免费看| 精品久久人人做人人爽| 在线精品视频一区二区三四 | 久久精品人人爽人人爽| 欧美精品18+| 色综合欧美在线视频区| 国产精品99久久久久久有的能看 | 日韩成人免费电影| 亚洲美女屁股眼交| 国产精品人妖ts系列视频| 欧美一区二区三区在线看| 91在线观看免费视频| 岛国一区二区在线观看| 国产精品日韩精品欧美在线 | 亚洲免费在线视频| 久久久国产综合精品女国产盗摄| 69堂成人精品免费视频| 欧美亚洲国产一区二区三区| 99综合电影在线视频| 国产精品456露脸| 久久99久久99小草精品免视看| 亚洲国产精品一区二区尤物区| 国产精品第四页| 欧美国产精品一区二区三区| 日韩精品一区二| 日韩欧美电影在线| 6080yy午夜一二三区久久| 在线成人av影院| 69久久夜色精品国产69蝌蚪网| 精品污污网站免费看| 欧美色图片你懂的| 色呦呦国产精品| 欧美丝袜丝交足nylons| 制服丝袜av成人在线看| 欧美电影一区二区| 欧美大片一区二区| 精品va天堂亚洲国产| 亚洲另类一区二区| 国产欧美日韩不卡免费| 久久久久久免费网| 91麻豆精品国产91久久久更新时间 | 丁香婷婷综合网| 99久久伊人精品| 欧美性受极品xxxx喷水| 欧美久久久影院| 日韩一区二区三区观看| 欧美一区二区私人影院日本| 日韩精品一区二区三区在线观看| www国产成人| 欧美激情一区二区在线| 亚洲人成网站影音先锋播放| 亚洲精品乱码久久久久久| 视频一区视频二区中文字幕| 韩国精品在线观看| 成人av在线一区二区三区| 91激情在线视频| 精品国一区二区三区| 国产精品情趣视频| 亚洲va欧美va人人爽| 极品美女销魂一区二区三区| 成人小视频免费观看| 欧美在线观看18| 精品国产三级电影在线观看| 国产精品久久久久久久久搜平片| 一区二区三区四区亚洲| 美女诱惑一区二区| 99久久久无码国产精品| 欧美一区二区三区免费视频| 中文字幕在线不卡一区二区三区| 香蕉成人啪国产精品视频综合网| 国产乱码字幕精品高清av| 日本久久精品电影| 国产日韩一级二级三级| 亚洲成人免费视|