英文:
2nd uv in Aframe for ambient occlusion
问题
以下是翻译好的内容:
我想在Aframe中对一个obj模型使用烘焙的AO效果。Don Mccurdy解释了AO需要第二个UV通道,并在这里用Java说明了如何解决这个问题:
https://github.com/aframevr/aframe/issues/2721
我尝试了,但是我无法让它工作!
var geometry = mesh.geometry;
geometry.addAttribute('uv2', new THREE.BufferAttribute(geometry.attributes.uv.array, 2));
我如何将这些JavaScript代码行指向我在Aframe中的obj模型?
感谢您的帮助,非常感谢!最好,can
英文:
I would like to use baked AO on an obj-model in Aframe. Don Mccurdy explains
that AO needs a 2nd UV channel and how to solve this in Java here:
https://github.com/aframevr/aframe/issues/2721
I tried it but I don`t get it to work!
var geometry = mesh.geometry;
geometry.addAttribute( 'uv2', new THREE.BufferAttribute( geometry.attributes.uv.array, 2 ) );
How do I point this js-lines to my obj-model in Aframe?
Thanks a lot for help, appreciate! Best, can
答案1
得分: 2
理想情况下,我建议在Blender中打开OBJ文件,按照Blender文档中所描述的方法添加环境遮挡贴图,然后导出为glTF格式。其余部分将通过A-Frame的gltf-model
组件自动处理,并且加载速度将更快。
如果转换为其他格式不是一个选项,您将需要编写一个自定义组件,该组件会监听模型的加载,然后遍历模型中的每个网格(可能不止一个!)并创建额外的UV集:
AFRAME.registerComponent('copy-uvs', {
init: function () {
this.el.addEventListener('model-loaded', function (e) {
e.detail.model.traverse(function(object) {
if (object.isMesh && object.geometry.attributes.uv) {
var geometry = object.geometry;
geometry.setAttribute('uv2', geometry.attributes.uv);
console.log('copied UVs!');
}
});
});
}
});
这个copy-uvs
组件需要附加到与您的OBJ模型相同的元素上。
英文:
Ideally, I'd suggest opening the OBJ file in Blender, adding the Ambient Occlusion texture as described in the Blender docs, then exporting to glTF. The rest will be handled automatically with A-Frame's gltf-model
component, and will load more quickly.
If converting to another format isn't an option, you'll need to write a custom component that listens for the model to load, then traverses every mesh in the model (there might be more than one!) and creates an extra UV set:
AFRAME.registerComponent('copy-uvs', {
init: function () {
this.el.addEventListener('model-loaded', function (e) {
e.detail.model.traverse(function(object) {
if (object.isMesh && object.geometry.attributes.uv) {
var geometry = object.geometry;
geometry.setAttribute('uv2', geometry.attributes.uv);
console.log('copied UVs!');
}
});
});
}
});
This copy-uvs
component would need to be attached to the same element as your OBJ model.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论