我在编辑器中导入了一个FBX对象,它的外观如下所示:
完美,这正是我期望的!
但是当我制作场景并导入相同的对象时,它看起来像这样:
更暗了,但为什么呢?
即使我使用了与两者相同强度的直接光线!
这些是我的编辑器对象:
而这是我的简单额外代码:
var scene = new THREE.Scene();
scene.background = new THREE.Color( 0x9A9A9A );
var camera = new THREE.PerspectiveCamera( 75, window.innerWidth / window.innerHeight, 0.1, 1000 );
var renderer = new THREE.WebGLRenderer();
renderer.setSize( window.innerWidth, window.innerHeight );
document.body.appendChild( renderer.domElement );
camera.position.z = 5;
var controls = new THREE.OrbitControls( camera, renderer.domElement );
//controls.update() must be called after any manual changes to the camera's transform
camera.position.set( 0, 20, 100 );
controls.update();
var directionalLight = new THREE.DirectionalLight( 0xffffff, 1 );
scene.add( directionalLight );
directionalLight.position.set(5,10,8);
var helper = new THREE.DirectionalLightHelper( directionalLight, 5 );
scene.add( helper );
var loader = new THREE.FBXLoader();
loader.load( '/assets/village/village_update.fbx', function ( object ) {
object.traverse( function ( child ) {
console.info( 'loaded' );
if (child.isMesh) {
child.receiveShadow = true;
child.material.color.set( 0xffffff );
}
} );
object.name = "village";
console.log( 'adding it to scene' );
scene.add( object );
});
var animate = function () {
requestAnimationFrame( animate );
renderer.render( scene, camera );
};
我在这里漏掉了什么?
编辑:
material.map.encoding = THREE.sRGBEncoding;
? - shamaseen.map
,.emissive
),那么是的,对于其他纹理(例如.normalMap
),请坚持使用LinearEncoding
。理想情况下,对于所有颜色纹理,您都应该这样做,并设置renderer.outputEncoding = sRGBEncoding
,如上所示(“线性工作流程”)。一种替代方案,对于PBR来说不太好,但对于其他用例来说还不错,是将所有纹理和outputEncoding
保持线性(“伽马工作流程”)。当您混合两者时,因此纹理设置与渲染器设置不匹配,您将遇到像在此问题中遇到的问题。 - Don McCurdyoutputEncoding = 3000
设置为了解决在使用 React Fiber 的项目中的颜色问题。 - JacksonkrTHREE.LinearEncoding
,相当于上面提到的“伽马工作流”。它通常不是您想要的东西——除非您正在进行后期处理中的伽马校正,否则它表明其他一些设置可能不太正确。但如果对于您的项目看起来不错,那么我就不会太担心它。 - Don McCurdy