Швы на краях куба при использовании текстурного атласа с three.js
У меня есть швы между горизонтальными гранями куба при использовании текстурного атласа в three.js.
Это демо:http://jsfiddle.net/rnix/gtxcj3qh/7/ или жеhttp://jsfiddle.net/gtxcj3qh/8/ (из комментариев)
Скриншот проблемы:
Здесь я использую повтор и смещение:
var materials = [];
var t = [];
var imgData = document.getElementById("texture_atlas").src;
for ( var i = 0; i < 6; i ++ ) {
t[i] = THREE.ImageUtils.loadTexture( imgData ); //2048x256
t[i].repeat.x = 1 / 8;
t[i].offset.x = i / 8;
//t[i].magFilter = THREE.NearestFilter;
t[i].minFilter = THREE.NearestFilter;
t[i].generateMipmaps = false;
materials.push( new THREE.MeshBasicMaterial( { map: t[i], overdraw: 0.5 } ) );
}
var skyBox = new THREE.Mesh( new THREE.CubeGeometry( 1024, 1024, 1024), new THREE.MeshFaceMaterial(materials) );
skyBox.applyMatrix( new THREE.Matrix4().makeScale( 1, 1, -1 ) );
scene.add( skyBox );
Атлас имеет размер 2048x256 (мощность два). Я также попробовал ручное УФ-картирование вместо повторения, но результат тот же. Я использую 8 плиток вместо 6, потому что я думал, что точность деления 1/6 вызывает проблему, но нет.
Пиксели на этой линии взяты из следующей плитки в атласе. Я попробовал полностью белый атлас, и там не было никаких артефактов. Это объясняет, почему на вертикальных границах Z-граней нет швов. Я играл с фильтрами, wrapT, wrapS и mipmaps, но это не помогает. Увеличение разрешения не помогает. Атлас 8192x1024http://s.getid.org/jsfiddle/atlas.png Я попробовал другой атлас, результат тот же.
Я знаю, что могу разбить атлас на отдельные файлы, и он отлично работает, но это не удобно.
В чем дело?