选择一个模型
选择了一个模型,在three-editor中展示如下
烘培
选择一个建模软件来对模型进行烘培,这里我选择了3dmax来进行烘培,也可以使用blender,c4d等软件来进行烘培。
模型一共有4个mesh,
我使用了vray灯光来对场景进行打光,3dmax中场景渲染的结果
我们开始对物体进行烘培
选择渲染=》渲染到纹理
1、选择需要烘培的mesh
2、使用第二uv来存储烘培的uv信息
3、进行展开uv
选择需要进行的烘培纹理选项,一般选择照明贴图或者完成贴图
点击渲染,然后就会得到对应的贴图
重复几次,把需要烘培的mesh都烘培一边。
会得到一个有烘培贴图的效果
代码
逻辑为: 把两个uv的材质纹理叠加起来。 可以调整两个纹理的比重。或者其他的计算方法。
也可以使用多个uv多个纹理来进行提升效果。
mat.onBeforeCompile = function (shader) {
shader.uniforms.u_map1 = {
value: opts.uv_map1
};
const fragment = `varying vec2 v_uv2;
uniform sampler2D u_map1;
void main() {
`;
const fragmentColor = `
vec4 d_map1 = texture2D(u_map1, v_uv2);
gl_FragColor = vec4(outgoingLight * d_map1.rgb, diffuseColor.a);
`;
shader.fragmentShader = shader.fragmentShader.replace("void main() {", fragment)
shader.fragmentShader = shader.fragmentShader.replace("gl_FragColor = vec4( outgoingLight, diffuseColor.a );", fragmentColor);
const vertex = `varying vec2 v_uv2;
attribute vec2 uv2;
void main() {
v_uv2 = uv2;
`;
shader.vertexShader = shader.vertexShader.replace("void main() {", vertex);
}