pbrtools
Version:
laya pbr tools
127 lines (115 loc) • 4.08 kB
JavaScript
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;
}
}