123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165 |
- /*jshint esversion: 6 */
- module.exports = (() => {
- const createTexture = require("./texture.js");
- var texture_mappings = {
- diff_color: 1,
- normal: 2,
- mirror: 8,
- diff_intensity: 16,
- spec_intensity: 32,
- emit: 32,
- alpha: 128,
- spec_hardness: 256,
- ray_mirror: 512,
- translucency: 1024,
- ambient: 2048,
- displacement: 4096,
- warp: 8192
- };
- let blender_specular_types = {
- cooktorr: 0,
- phong: 1,
- blinn: 2,
- toon: 3,
- wardiso: 4
- };
- function applyColorMapping(blender_texture, three_texture, material) {
- if (blender_texture.mapto & texture_mappings.diff_color) {
- material.map = three_texture;
- }
- }
- function applySpecMapping(blender_texture, three_texture, material) {
- if (blender_texture.mapto & texture_mappings.spec_color && material.type != "MeshStandardMaterial") {
- material.specularMap = three_texture;
- }
- if (blender_texture.mapto & texture_mappings.spec_intensity && material.type != "MeshStandardMaterial") {
- material.roughnessMap = three_texture;
- }
- }
- function applyAlphaMapping(blender_texture, three_texture, material) {
- if (blender_texture.mapto & texture_mappings.alpha) {
- material.alphaMap = three_texture;
- }
- }
- function applyNormalMapping(blender_texture, three_texture, material) {
- if (blender_texture.mapto & texture_mappings.normal) {
- material.normalMap = three_texture;
- material.normalScale = {
- x: blender_texture.norfac,
- y: blender_texture.norfac
- };
- }
- }
- function applyMirrorMapping(blender_texture, three_texture, material) {
- if (blender_texture.mapto & texture_mappings.mirror) {
- material.envMap = three_texture;
- material.envMapIntensity = blender_texture.mirrfac;
- }
- }
- var blender_texture_coordinates = {
- GENERATED : 1,
- REFLECTION : 2,
- NORMAL:4,
- GLOBAL : 8,
- UV : 16,
- OBJECT : 32,
- WINDOW: 1024,
- TANGENT:4096,
- PARTICLE: 8192,
- STRESS:16384
- }
- var blender_texture_mapping = {
- FLAT : 0,
- CUBE : 1,
- TUBE : 2,
- SPHERE : 3
- }
- function applyTexture(blender_texture, material) {
- //extract blender_texture data. Use Only if image has been supplied.
- if (blender_texture && blender_texture.tex && blender_texture.tex.ima) {
- let three_texture = createTexture(blender_texture.tex.ima);
- if(blender_texture.texco == blender_texture_coordinates.REFLECTION){
- switch(blender_texture.mapping){
- case blender_texture_mapping.FLAT:
- three_texture.mapping = THREE.EquirectangularReflectionMapping;
- break;
- case blender_texture_mapping.SPHERE:
- three_texture.mapping = THREE.SphericalReflectionMapping;
- break;
- }
- //three_texture.mapping = THREE.EquirectangularRefractionMapping;
- }
-
- applyColorMapping(blender_texture, three_texture, material);
-
- applySpecMapping(blender_texture, three_texture, material);
-
- applyAlphaMapping(blender_texture, three_texture, material);
-
- applyNormalMapping(blender_texture, three_texture, material);
- applyMirrorMapping(blender_texture, three_texture, material);
- }
- }
- return function createThreeJSMaterial(blend_mat) {
- var material = null;
- var textures = blend_mat.mtex;
- switch (blend_mat.spec_shader) {
- case blender_specular_types.lambert:
- material = new THREE.MeshLambertMaterial();
- material.color.setRGB(blend_mat.r, blend_mat.g, blend_mat.b);
- break;
- case blender_specular_types.blinn:
- case blender_specular_types.phong:
- material = new THREE.MeshStandardMaterial();
- material.color.setRGB(blend_mat.r, blend_mat.g, blend_mat.b);
- //material.specular.setRGB(blend_mat.specr, blend_mat.specg, blend_mat.specb);
- material.roughness = (1 - (blend_mat.har / 512));
- material.metalness = 1 - blend_mat.ref;
- if(blend_mat.alpha < 0.98){
- material.transparent = true;
- material.opacity = blend_mat.alpha;
- console.log(blend_mat, material)
- }
- break;
- case blender_specular_types.wardiso:
- case blender_specular_types.cooktorr:
- material = new THREE.MeshPhongMaterial();
- material.color.setRGB(blend_mat.r, blend_mat.g, blend_mat.b);
- material.specular.setRGB(blend_mat.specr, blend_mat.specg, blend_mat.specb);
- material.shininess = blend_mat.har / 512;
- material.reflectivity = blend_mat.ref * 100;
- break;
- default:
- material = new THREE.MeshLambertMaterial();
- material.color.setRGB(blend_mat.r, blend_mat.g, blend_mat.b);
- break;
- }
- var at = (texture) => applyTexture(texture, material);
- if (textures && textures.length) textures.map(at);
- return material;
- };
- })();
|