Как избавиться от размытых текстур в металле? - PullRequest
0 голосов
/ 07 марта 2020

Я только что создал шаблон Metal и немного изменил код. Я отключил цветовую карту по умолчанию с текстурой руды Майнкрафт 16x16, но по какой-то причине они размыты при низком разрешении. Я пытаюсь добиться такого пиксельного внешнего вида Minecraft и хотел бы знать, как отключить это размытие / фильтрацию.

Есть ли способ загрузки / представления ресурсов без этого размытия? Вот моя функция загрузки ресурсов:

class func loadTexture(device: MTLDevice, textureName: String) throws -> MTLTexture {
    /// Load texture data with optimal parameters for sampling
    return try MTKTextureLoader(device: device).newTexture(name: textureName, scaleFactor: 1.0, bundle: nil, options: [
        MTKTextureLoader.Option.textureUsage: NSNumber(value: MTLTextureUsage.shaderRead.rawValue),
        MTKTextureLoader.Option.textureStorageMode: NSNumber(value: MTLStorageMode.`private`.rawValue)
    ])
}

Вот снимок экрана с размытым кубом, который я получаю:

Blurry cube

1 Ответ

4 голосов
/ 08 марта 2020

При вызове сэмплирования текстуры (в шейдере) вам необходимо установить для фильтра увеличения значение «ближайший», а не «линейный», например, так (при условии, что ваш сэмплер объявлен встроенным внутри вашего шейдера):

constexpr sampler textureSampler (mag_filter::nearest, // <-- Set this to 'nearest' if you don't want any filtering on magnification
                                  min_filter::nearest);

// Sample the texture to obtain a color
const half4 colorSample = colorTexture.sample(textureSampler, in.textureCoordinate);
...