Three.js. Различные варианты черепицы для диффузных и текстурных текстур [duplicate]

Вот также версия для машинописного текста:

JSONTryParse(input) {
    try {
        //check if the string exists
        if (input) {
            var o = JSON.parse(input);

            //validate the result too
            if (o && o.constructor === Object) {
                return o;
            }
        }
    }
    catch (e) {
    }

    return false;
};
3
задан shino 17 January 2013 в 04:43
поделиться

2 ответа

Нет. Значения смещения и повторения по умолчанию для одного из них:

// uv repeat and offset setting priorities
//  1. color map
//  2. specular map
//  3. displacement map
//  4. normal map
//  5. bump map
//  5. roughness map
//  5. metalness map
//  6. alpha map
//  7. emissive map

В вашем случае это будут настройки landTexture.

Обходной путь заключается в изменении ваших текстур или создайте пользовательский ShaderMaterial.

EDIT: Исключение составляет карта света и карта окклюзии окружающего пространства, каждая из которых использует второй набор UV. Это позволяет другим текстурам быть более детальными, чем карта света / AO.

three.js r.84

4
ответ дан WestLangley 18 August 2018 в 17:35
поделиться

Да. В последних версиях tr.js r90^ имеет API, который можно использовать для изменения поведения встроенных материалов с помощью GLSL.

Это непросто сделать, но был сделан пример:

https://github.com/pailhead/three.js/blob/aa72250835b82f7dde2e8375775a4b039cb719c6/examples/webgl_materials_extended_multiple_uvs.html

https: // github .com / mrdoob / three.js / pull / 14174

В основном встроенные материалы основаны на шаблонах шейдеров, которые являются просто упорядоченным списком операторов #include <some_chunk>.

Некоторые из этих «кусков» содержат некоторый код, который выглядит так

/*...*/ texture2D( foo, vUv ) /*...*/

Где foo - alphaMap, map, specularMap и т. д. Это означает что поиск текстуры выполняется на этом семплере, в интерполированном атрибуте uv. Вам все равно, что предшествует этому коду или что следует за ним (это может быть только точка с запятой ; или маска .xy).

Итак, что вы хотите сделать какое-то смещение или способ, которым выполняет тр.js, применить преобразование mat3.

Таким образом, GLSL должен выглядеть следующим образом

texture2D( foo, foo_transform * vUv )

Затем проблема становится поставкой шейдера эта форма. В этом примере выполняется немного грубой силы, сначала компилируя шейдер, а затем просматривая всю вещь (в противном случае вы должны знать, в каких кусках искать этот поиск текстуры).

Это гораздо лучшее решение, чем изменение текстур, и на самом деле должно быть проще, чем писать пользовательские ShaderMaterial.

Отказ от ответственности - три на самом деле не предназначены для использования таким образом, но могут быть. Так, например, в то время как каждая карта имеет префикс somethingMap, альбедо-карта не является, и ее просто называют map, если это albedoMap, регулярное выражение в этом примере было бы проще.

0
ответ дан pailhead 18 August 2018 в 17:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: