在aframe中加载GLTF-model非常方便,但是没有找到包含envmap纹理的案例。我想看看官方可以提供三个官方一样的案例。pmremGenerator.fromEquirectangular(texture) 函数用于使gltf模型产生真实的反射效果
https://threejs.org/examples/#webgl_loader_gltf https://threejs.org/examples/#webgl_materials_envmaps_hdr
在aframe中加载GLTF-model非常方便,但是没有找到包含envmap纹理的案例。我想看看官方可以提供三个官方一样的案例。pmremGenerator.fromEquirectangular(texture) 函数用于使gltf模型产生真实的反射效果
https://threejs.org/examples/#webgl_loader_gltf https://threejs.org/examples/#webgl_materials_envmaps_hdr
一种方法是创建一个自定义组件,它将:
envmap 需要是 CubeTexture - 当您想使用全景图时,这会增加另一层复杂性。您可以使用WebGLRenderTargetCube - 它是一个提供来自 Cube 相机“观看”全景图的纹理的对象。
总体而言,组件代码可能如下所示:
// create the 'cubecamera' objct
var targetCube = new THREE.WebGLRenderTargetCube(512, 512);
var renderer = this.el.sceneEl.renderer;
// wait until the model is loaded
this.el.addEventListener("model-loaded", e => {
let mesh = this.el.getObject3D("mesh");
// load the texture
var texture = new THREE.TextureLoader().load( URL,
function() {
// create a cube texture from the panorama
var cubeTex = targetCube.fromEquirectangularTexture(renderer, texture);
mesh.traverse(function(node) {
// if a node has a material attribute - it can have a envMap
if (node.material) {
node.material.envMap = cubeTex.texture;
node.material.envMap.intensity = 3;
node.material.needsUpdate = true;
}
});
}
在这个故障中检查一下。
我遇到了同样的问题,我发现来自 a-frame-extras 的 cube-env-map 就像一个魅力。
它的文档将其描述为:
应用 CubeTexture 作为实体的 envMap,无需修改预设材质
而且代码超级简单:
yarn add aframe-extras
import 'aframe-extras'
<a-entity
gltf-model="src: url('/path/to/file.glb')"
cube-env-map="path: /cubeMapFolder/;
extension: jpg;
reflectivity: 0.9;">
</a-entity>
在THREE demo中,我记得WebGLRenderTargetCube是用来生成envmap的,但是最近发现PMREMGenerator基本上是用来生成envmap贴图和mipmap的。它还支持HDR图像格式,使gltf模型优于JPG纹理。
我不知道这些 JS 模块 PMREMGenerator 和 RGBELoader 是如何与 Aframe 的组件一起使用的。有人可以在 Aframe 中提供这样的例子吗,谢谢
这与使用运行时生成的预过滤粗糙度 Mipmap (PMREM) 的高动态范围 (RGBE) 基于图像的照明 (IBL) 相同