three.jsgLTF中的纹理有时显示为黑色,但仅在iOS上显示

我使用的一个棒球场的gLTF模型有3个图像纹理。在桌面(macOS Chrome和Safari)上,模型加载正确,座椅、草地和污垢看起来正确。但是,在iOS中,模型并不总是正确的,因为一个或多个纹理是黑色的。有时污垢看起来是黑色的。有时草看起来是黑色的。有时座位是黑色的。但是,有时整个模型看起来是正确的!
偶尔,应用程序将因“问题重复出现”错误而崩溃。
我真的不知道如何使此问题更具可复制性,但感觉有时加载多个选项卡会导致此问题。
以下是显示问题的代码沙盒:three.js/gltf体育场-代码沙盒15(https://hc1vv.csb.app/8)
你也看到了吗小纹理的问题?您可以尝试使用2048x2048纹理的这个版本:ndrive.google.comstadium-v2.glb 4
谷歌驱动器文件
这里是一个具有2k纹理的Sid沙箱分支:np>three.js/gltf体育场(分叉)-代码沙盒5(https://3s932.csb.app/2) .
我在saucelabs上做了一些测试,因为我无法使用iphone在iOS 15中,我没有看到使用低分辨率纹理的bug。需要注意的是,这种阴影故障行为在运行iOS 14的iPhone上并不存在。
谢谢@donmccurdy,这似乎很有帮助。当我们将其他GLB模型(已经使用2048x2048纹理的模型)加载到场景中时,我们仍然会偶尔看到这种情况发生,但现在codesandbox似乎工作得更好了,我们将独立进行一些挖掘(@aidenhjj和我正在一起工作这个项目)。
你有没有想过为什么只有在iOS上才会出现着色问题?纵观本论坛上过去的主题,似乎总是有一些特定于平台的特性,但是想知道是否有更技术的原因来帮助我们更好地理解这个问题。ndiv>sidsethupathi:ndiv>blockquote>
对于为什么阴影问题只在iOS上发生,您有什么想法吗?听上去设备的GPU内存或VRAM快用完了,最后一个要加载的纹理将变暗。移动设备上的内存可能非常有限,甚至一些4K纹理也可能太多。还有最近发布的Safari 15,它有很多WebGL更新,可能有一些bug。
如果问题与内存有关,那么使用分辨率较小的纹理(PNG和JPEG压缩没有帮助!)或者像KTX2/Basis这样的GPU纹理压缩将有助于降低内存占用。
在更新到iOS/iPadOS 15后,我在客户项目中遇到了同样的问题。该web应用程序在macOS和iOS/iPadOS 14上运行良好。
重新启动设备可以解决缺少纹理的问题。但经过一定时间后,纹理再次丢失。因此,iOS 15上的Safari似乎有一个令人讨厌的内存错误。
这是我上周创建的主题:nSafari iOS15上缺少纹理的问题
blockquote>嘿,在更新到iOS15/iPadOS15之后,一些模型纹理丢失了。这看起来更像是Safari中的一个bug,但也许你们中的一些人有一个想法/解决方案/解决方法。要快速查看,您可以访问>nHm。不幸的是,这听起来像是需要向苹果(或Webkit)报告的事情。最新版本的WebGL实现发生了重大变化。
对此有任何后续行动吗?
我在使用3d viewer wordpress插件时遇到了相同或类似的问题,该插件使用three.js
我使用了一些3d模型,上面映射了透明的png纹理,并将它们作为glTF文件用Blenderv2.92.0导出。它们在windows、mac os、android和ios14上都显示正确。然而,在ios15上,3d模型本身工作正常,但贴图纹理有时显示为黑色或根本不显示。查看此屏幕截图以供参考:iOS15上的glTF问题-Imgur 8上的相册
我想知道在从blender导出3d模型时是否还有其他方法可以尝试,以使它们在iOS15上正常工作。非常感谢您的帮助!
我也有同样的问题。我的应用程序在任何iOS(14及以下)和Android设备上都可以正常工作,但在机型上只显示黑色,在iOS 15上的Chrome和Safari中都会崩溃。
我使用较小的纹理(从2k减少到512)进行了测试,它重新开始工作。因此,我认为这是一个内存问题。
更新:我尝试使用精度“lowp”和“mediump”,但没有成功。目前只有较小的纹理可用。
更新2:
我发现了一个问题:Safari v15(在桌面上)->;threejs bug·问题#22582·mrdoob/three.js·GitHub 13。因此我将三级降级为v112.1,这使得黑色纹理的情况不那么频繁。它确实有一些帮助,但在我的情况下不能完全消除这个问题。
顺便说一句,我试图在你的code沙箱中降级相同的内容,而且体育场看起来很完美,没有任何遗漏。你应该试一试。
更新3:
我以某种方式(或解决方法)修复了此问题。
我怀疑iOS15的GPU内存管理存在一些问题,会影响纹理上传到GPU。因此,我限制了纹理实例化(为每个纹理设置一个超时,总共10~20 512*512个纹理),黑色纹理问题再也不会出现。
更新:gpu压缩提示非常有用。您可以获取一个gltf文件文件夹,并执行类似操作以将纹理转换为ktx2格式:n#!/bin/bash# make and make install https://github.com/BinomialLLC/basis_universalfor d in */ ; dopushd $dfor file in *; doecho $fileif [[ $file == *.jpg ]]; thenbasisu -ktx2 $filerm $fileelseif [[ $file == *.gltf ]]; thensed -i -e \"s/\\.jpg/\\.ktx2/g\" $filesed -i -e \"s/image\\/jpeg/image\\/ktx2/g\" $filefifidonepopddone
以加载gltfsthree.js,你必须做一些其他的事情,包括在这里,以防有人觉得它有帮助:nimport { LoadingManager } from \"three\";import { GLTF, GLTFLoader, KTX2Loader } from = new GLTFLoader(texLoadManager);texLoader.setTranscoderPath(transcoderUrl);const { gl>nWe were able to load large gltfs with 8k textures using this approach.nHi @hbleenCan you explain how to implement your solution? i\"m having the same issue.nI use ImageLoader to manage textures manully so it\"s easily to wrap a setTimeout to each image request. If you use loaders such as gltf loader, I\"m not sure how to control the texture loading frequency.nUnderstood… Unfortunately in my case i don\"t have access to the textures as a saparate object but i receive a glb with textures already built in.nThank you anywaynHello @aidenhjjnI\"m trying to follow your steps (but in angular) but i get the error DataCloneError: The object can not be cloned when the code hit the load functionnHere is my coden => {console.log(\"x\", gltf)})
你知道是什么原因造成的吗?
这是gltf文件夹
@tomthebeaded-I“不确定。我没有看到这个错误。您是否测试过仅获取basis/文件和gltf文件?我想知道文件名链接到gltf文件中的纹理是否被破坏了。
谢谢您的快速响应…我已经更新了threejs版本,现在当code到达加载函数时,它似乎什么也没做。
我将尝试用basis工具重新创建gltf。
好了,现在我可以加载模型,但纹理是由于某些原因,缺少
它正在搜索扩展名为.ktx2.ktx2的文件。我不知道为什么,如果我检查gltf,每个文件只有一个ktx2。nSchermata 2021-11-23 alle 17.02.401088×188 KBngltf文件有一个jso
组件—您应该能够在文本编辑器中打开它并搜索这些文件名—在我看来,您已经损坏了gltf本身中的文件名
Textures in gLTF sometimes display black, but only on iOSn

three.js[已解决]正交摄影机的变换控件:gizmos缩放问题

您好,我正在使用带轨道控制的正交摄影机。我注意到当缩放照相机变焦不改变相机的位置(如透视相机)。首先,我想知道为什么这两个相机的实现方式不同?第二,我也在使用TransformControls,对于透视摄影机,更新功能上的小控件的重新缩放在这个等式中非常有效>但是使用OrbitControls更改缩放而不是正交摄影机的位置时,它没有正常工作。我试着像这样在等式中添加缩放,但没有得到任何好的结果>我应该以不同的方式包括它吗?我应该使用其他控件吗?谢谢大家的帮助!NaDaMa:首先,我很想了解为什么这两个摄像头...

日期:2021-12-11 08:00:01 浏览:1740

three.js多次渲染同一模型(obj模型),FPS要低得多

我试图在程序中渲染150个相同的树模型,但FPS突然从60下降到30+。你能告诉我什么是最好的解决办法吗?非常感谢。和平与爱。skr有两种典型的方法可以解决这个性能问题(太多的绘制调用):- 使用实例化渲染- 将所有几何体合并为一个几何体(因此只有一个网格)...

日期:2021-12-11 08:00:02 浏览:1746

three.js可缩放场景背景

three.js大家好,我有一个场景,由一个物体(反射雕像)组成,保持在一个漂亮背景的中心。我一直在使用威尼斯日落矩形hdr地图作为我的场景背景它既可以作为环境地图,也可以作为背景我看到背景不会与场景中渲染的网格一起缩放。这给人一种场景完全是假的感觉。i、 e状态向上/向下缩放,但背景不缩放。目前,我已经禁用了放大/缩小功能,这样用户就不会感到害怕。我的问题是:1. 当轨道控制放大/缩小时,我是否需要在此处使用一些着色器魔法来放大或缩小场景背景,以便看起来场景中的所有对象都在均匀缩放?或者这根本不可能做到?...

日期:2021-12-11 09:00:02 浏览:1272

three.js移动导入的Gltf模型

three.js我导入了我的gltf模型并将其添加到场景中,但现在如果我尝试移动它,它将不会=新建三、几何();var=混音器( 模型动画[0]>如何移动模式?Prakar_Srivastava:var>3D对象不能是Geometry或BufferGeometry类型。它应该是Object3D或类似Mesh、Points或Line的派生类的实例。在您的情况下,我只是这样声明变量:var mode;在动画循环中,执行以下操作:如果(mod!==未定义)>还请记住,基本3D场景的重要部分在代码片段中丢失(例如相...

日期:2021-12-11 10:00:01 浏览:1111

three.js平面明暗处理的问题

three.js嗨!我在项目中使用节点材质。我在模型渲染方面有问题。它看起来像是真实的平面阴影。如何平滑多边形?也有点像低分辨率阴影纹理贴图的自阴影。可能不是,但可能是。@Arkadiy\\u Vinkovskiy您需要在您的帖子中添加更多细节。屏幕截图不足以说明这里发生了什么。始终包括引起问题的代码,如果您使用的是模型,也要包括这些代码。更好的是,使用codepe制作一个工作示例...

日期:2021-12-11 10:00:02 浏览:997

three.js如何渲染立方体材质?

您好,直到昨天,我才相信Object3D是一组网格,而网格是一组几何体+材质,每个对象只有一个对象。我发现了立方体材质的结构,因此object3D的网格包含1个几何体(boxGeometry)和6个材质!所以问题是,这种网格的渲染效果如何?有关于它的文件吗?(这是为了提高我对three.js)非常感谢还有其他问题,与我的上一个帖子相关,如果一个网格中可能有多个材质,如何设置CustomDistanceMaterial以考虑所有材质的所有贴图?elysium11:所以问题是,渲染如何在这种类型的网格上工作?您...

日期:2021-12-11 11:00:03 浏览:857

three.js如何创建要在网格中拟合的线段

three.js伙计们,我想帮忙,假设我有一个这样的网格图像718×729 1.25 KB我想在网格面内创建线段,也就是说,我想将网格转换成这样的线图像710×828 740字节有人能帮忙吗???...

日期:2021-12-11 12:00:01 浏览:909

three.jsGLTFLoader.js这是我的登记簿错误

three.js每当我试着做决定的时候3.GLTFLoader对象我收到此错误代码:“未捕获类型错误:这是我的登记簿不是一个函数“我需要帮助!由Penta#u Trax在post#5中解决我最终发现我一直在使用错误的文件,当你需要使用jsm/example时,我使用的是js/example。其他东西也是个问题。但这是问题的基础。你能给我们看看你的代码吗?通常,如果你使用的是import语句,GLTFLoader不需要在前面加三个字符。好的,所以在这之前,我刚刚关注了这个视频,因为它是去年发布的。但是现在我试...

日期:2021-12-11 12:00:02 浏览:1069

three.js使用threejs的光流

嘿,我需要通过我的屏幕显示一束移动的光束。我不想使用任何模型或动画。我想知道我是否可以单独使用threejs来实现这一点。我也应该能够控制其运动的颜色强度和路径。嗨!也许这会有帮助:GitHub-jeromeetienne/三倍体积聚光灯: three.js扩展以提供体积聚光灯13,用于可视化光锥。您可以使用THREE.Curve()设置其路径。控制颜色强度,可能取决于曲线上的位置,也可以使用tween.js或者GSAP用于复杂的动画。创造力取决于您这是您想要的吗?https://threejs.org/e...

日期:2021-12-11 13:00:01 浏览:1316

three.js使用光线投射动态绘制多边形

我要画多边形three.js具有交点。为此,我使用下面的函数。首先,我使用光线投射器在第一个交点的第一个点添加球体。每次单击后,在交点处创建新球体,并在该交点和上一点之间创建线。现在,我希望在第一次单击时关闭多边形指向或单击该点周围。如何实现此目标。raycaster params是否与网格一起工作以检测鼠标位置周围的网格?function checkIntersectionclick() = raycaster.intersectObjects(addedObject, true);if (interse...

日期:2021-12-11 13:00:02 浏览:868