Comments (7)
@am05mhz
To get much better results you can use this trick:
loader.load( 'meshes/forest_house.glb', function ( gltf ) {
gltf.scene.traverse(function (child) {
if (child.isMesh) {
if (child.material.transparent === true) {
child.material.depthWrite = true;
child.material.alphaTest = 0.5;
}
}
});
Here is the result: https://necromanthus.com/Test/html5/forest_house.html
Realtime 3D engines typically can sort objects - not triangles or pixels - making this category of problem in alpha blending a known limitation.
Don, there is an uninspired (I don't want to say wrong) setting inside of the GLTF Loader:
materialParams.depthWrite = false;
That will generate an alpha sorting mess in 99% of the scenarios.
You should study this sample as well: https://necromanthus.com/Test/html5/head.html
Click on the stage to see the 3 cases.
cheers
from three.js.
Realtime 3D engines typically can sort objects - not triangles or pixels - making this category of problem in alpha blending a known limitation. Entire scenes should not use alpha blending without special care for the sort order, or other techniques like OIT or alpha hashing.
from three.js.
@am05mhz To get much better results you can use this trick:
loader.load( 'meshes/forest_house.glb', function ( gltf ) { gltf.scene.traverse(function (child) { if (child.isMesh) { if (child.material.transparent === true) { child.material.depthWrite = true; child.material.alphaTest = 0.5; } } });
Here is the result: https://necromanthus.com/Test/html5/forest_house.html
Realtime 3D engines typically can sort objects - not triangles or pixels - making this category of problem in alpha blending a known limitation.
Don, there is an uninspired (I don't want to say wrong) setting inside of the GLTF Loader:
materialParams.depthWrite = false;
That will generate an alpha sorting mess in 99% of the scenarios. You should study this sample as well: https://necromanthus.com/Test/html5/head.html Click on the stage to see the 3 cases. cheers
thanks, this solves my problem
from three.js.
We actually use an updated version of the asset in https://threejs.org/examples/webgl_loader_gltf_avif
from three.js.
Closing. Considering this as a modeling issue.
from three.js.
Considering this as a modeling issue.
It's not Michael.
See my above result with that (not very well designed) sample.
from three.js.
We actually use an updated version of the asset in https://threejs.org/examples/webgl_loader_gltf_avif
I get exactly that result (in fact mine is a bit better) using the initial asset and this runtime change:
gltf.scene.traverse(function (child) {
if (child.isMesh) {
if (child.material.name === "TreeLeafs") {
child.material.side = THREE.DoubleSide;
child.material.depthWrite = true;
child.material.depthTest = true;
child.material.alphaTest = 0.4;
child.material.transparent = false;
}
}
});
https://necromanthus.com/Test/html5/forest_house.html
And you'll find a similar modified material in the "fixed" asset.
So Michael, it was a hack, not a real fix.
cheers
from three.js.
Related Issues (20)
- Stencil params getting out of sync. HOT 6
- GLTFLoader does not load external ktx2 textures HOT 5
- Material copy function issue HOT 1
- Clipping is not correct when material enables transparent and spot-light casts shadow [WebGPU] HOT 1
- WebGLRenderer: Calling "copyTextureToTexture" on an unused WebGLRenderTarget does nothing HOT 7
- Editor: name of object or its material in the scene graph tree does not refresh after changing name in sidebar HOT 1
- E2E tests broken. HOT 28
- React Native: THREE.GLTFLoader: Couldn\'t load texture in react native HOT 2
- Problem with Multisampled Renderbuffers use background-image in style HOT 6
- Ability to target ShaderMaterial uniforms via animations HOT 7
- MMDLoader Still has colorization Issues HOT 16
- Weird artifacts with MeshPhysicalMaterial on the sphere primitive when ANISOTROPY > 0 HOT 8
- WebGLProgram leaking (instances increasing) HOT 5
- CurveModifier distorts meshes on curves
- FBXLoader morphAttributes.position[n].count is less than attributes.position.count HOT 41
- Adding a Mesh to a scene *before* an InstancedMesh stop the Instanced mesh working.
- [WebGPU] drawIndirect and drawIndexedIndirect HOT 6
- Editor: Usage of `accept` breaks certain asset imports. HOT 5
- Editor: Runtime error in history. HOT 6
- Editor shows some helpers always in front
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from three.js.