Hello ! I’ve been scratching my head for two days around this problem. I have a simple image and a sphere with a see-through glass type material in my scene. Here is the code :
import * as THREE from 'three'
import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls.js'
import { RGBELoader } from "three/examples/jsm/loaders/RGBELoader"
import vertexShader from './shaders/vertex.glsl'
import fragmentsShader from './shaders/fragments.glsl'
export const appInit = () => {
// Scene, Renderer, Camera
const scene = new THREE.Scene()
const renderer = new THREE.WebGLRenderer({
canvas: document.querySelector("#c"),
antialias: true,
})
renderer.setSize(window.innerWidth, window.innerHeight)
renderer.setPixelRatio(window.devicePixelRatio)
renderer.setClearColor(0x111111, 1)
const camera = new THREE.PerspectiveCamera(45, window.innerWidth / window.innerHeight)
camera.position.set(0, 0, 5)
camera.lookAt(0, 0, 0)
window.addEventListener(
'resize',
() => {
camera.aspect = window.innerWidth / window.innerHeight
camera.updateProjectionMatrix()
renderer.setSize(window.innerWidth, window.innerHeight)
},
false
)
// Sphere
const geometry = new THREE.SphereGeometry(1)
const material = new THREE.MeshPhysicalMaterial({
roughness: 0,
transmission: 1,
thickness: 1,
})
const sphere = new THREE.Mesh(geometry, material)
scene.add(sphere)
// Text image
const planeGeo = new THREE.PlaneGeometry( 4.56 * 1.5, 1* 1.5)
const planeMaterial = new THREE.MeshBasicMaterial( {map: new THREE.TextureLoader().load("./images/back_text.png")} )
planeMaterial.transparent = false
planeMaterial.needsUpdate = true
planeMaterial.map.minFilter = THREE.LinearFilter;
const plane = new THREE.Mesh( planeGeo, planeMaterial )
plane.position.set(0, 0, -5)
scene.add( plane )
// Mousemove
const orbit = new OrbitControls(camera, renderer.domElement)
orbit.update()
const animate = () => {
requestAnimationFrame(animate)
renderer.render(scene, camera)
}
animate()
}
My sphere renders colors of objects in the scene correctly when looking through it but not the background color (as shown in the image below). When I put alpha : true
in my renderer constructor and setClearColor(0x111111, 0);
, it has the same exact effect on my html body background. It appears much lighter than it should. I tried searching for this issue but I have not found any similar case.
I tried looking at this code : Simplest Orb Refraction - CodeSandbox . I imported the exact same code in my editor, it ran smoothly but there is the exact same issue, like in my scene. In the codesandbox visualizer though, everything appears fine as expected :
I tried a billion different material settings that I don’t even understand fully. Has any of you encountered the same issue ? Or do you have any clue why this is happening ?
Thank you in advance