UNPKG

pbrtools

Version:
127 lines (115 loc) 4.08 kB
#!/usr/bin/env node var fs = require('fs'); var path = require('path'); let index = require('../index'); /** * @return {string} */ function getFinalePath(f){ if(f) return path.isAbsolute(f)?f:path.resolve(process.cwd(), f); return null; } var args = process.argv; function printHelp(){ console.log(` 用法: handleenvmap img 处理环境贴图,生成env.mipmaps,env.png,envinfo.json。 要求贴图大小必须是512x256的全景图格式。 handle_ue4_texture 处理SP导出的符合UE4标准的贴图。 处理指定目录下的所有的看起来是SP导出的UE4的贴图。输出到同一目录下。 calc_tangent lmfile outpath 给模型增加tangent和binormal。 prefilterenv img maxlv outpath 生成各个粗糙度的环境贴图,放到outpath文件夹。 img: hdr、png或者tga格式的全景图。 maxlv: 最大层级 shmat img normalize 输出能在shader中直接使用的球谐函数的参数。 img: hdr、png或者tga格式的全景图。 normalize: 参数是否归一化。没有表示不用归一化。正常是不用。(仅用于测试) `); } if(args.length<3){ printHelp(); }else{ switch( args[2] ){ case 'prefilterenv': index.prefilterenv(getFinalePath(args[3]),parseInt(args[4]),getFinalePath(args[5])); break; case 'shmat': index.doCalcSH(getFinalePath(args[3]),args[4]==='true',(rgbmat)=>{ console.log(rgbmat.join(',')); }); break; case 'handleenvmap':{ if(!args[3]){ console.log('error:需要输入图片文件!'); break; } index.handleenvmap(getFinalePath(args[3])); break; } case 'handle_ue4_texture':{ if(args[3]){ let basecolor='_BaseColor.png'; let normal = '_Normal.png'; let orm = '_OcclusionRoughnessMetallic.png'; let expfiles={};//name:flag , flag:int = basecolor|normal|orm let root = getFinalePath(args[3]); fs.readdirSync(root).forEach(function(file){ let pathname = root+'/'+file; let stat = fs.lstatSync(pathname); if (!stat.isDirectory()){ let f = 0; let base=''; let p1 = file.indexOf(basecolor); let p2 = file.indexOf(normal); let p3 = file.indexOf(orm); if(p1>0){ f|=0x4; base = file.substr(0,p1); } if(p2>0){ f|=0x2; base = file.substr(0,p2); } if(p3>0){ f|=0x1; base = file.substr(0,p3); } if(f>0){ if(!(f===1||f===2|f===4)){ //error }else{ if(!expfiles[base]){ expfiles[base]=f; }else{ expfiles[base]|=f; } } } } }); let outpath =root+'/'+'layaout/'; if(!fs.existsSync(outpath)){ fs.mkdirSync(outpath); } for(let v in expfiles){ if(expfiles[v]===0x7){ index.mergetexture(root+'/'+v+basecolor, root+'/'+v+normal, root+'/'+v+orm, outpath+v+'_layabasecolor.png', outpath+v+'_layanormal.png',false); } } }else{ console.log('error:需要指定要处理的目录!'); } break; } default: printHelp(); break; } }