WebGL Shader Precision Variability: как float vs. highp выдаёт GPU-драйверы

BadB

Professional
Messages
2,415
Reaction score
2,364
Points
113
Технический разбор того, как точность вычислений в шейдерах зависит от драйверов и железа

Введение: Точность, которая выдаёт всё​

Вы тщательно настроили WebGL renderer в Dolphin Anty. Установили ANGLE (Intel, D3D11). Вы уверены: «Теперь мой профиль идеален».

Но вас мгновенно блокируют.
Причина? Не строка рендера — а точность вычислений в шейдерах.

Когда сайт запускает WebGL-шейдер с инструкцией highp float, ваш GPU возвращает значение с уникальной точностью, зависящей от:
  • Модели GPU,
  • Версии драйверов,
  • Операционной системы.

Именно эта микронестабильность создаёт уникальный отпечаток, который невозможно подделать без знания железа.

В этой статье мы проведём глубокий технический разбор того, как работает WebGL Shader Precision, почему он выдаёт драйверы, и как даже один бит может раскрыть ваше железо.

Часть 1: Что такое Shader Precision в WebGL?​

🧮 Техническое определение​

В WebGL шейдеры используют три уровня точности для чисел с плавающей запятой:
КвалификаторМинимальная точностьИспользование
lowp8 битЦвета, простые операции
mediump10 битТекстуры, освещение
highp16+ битСложные вычисления, физика

💡 Ключевой факт:
Фактическая точность зависит от GPU и драйверов — и не гарантируется спецификацией.

Часть 2: Как точность вычислений зависит от железа​

🔬 Таблица точности по GPU (2026)​

GPU / ОСhighp float точностьПричина
Intel UHD 620 + Windows 1023 бита (IEEE 754 single)Полная поддержка highp
NVIDIA GTX 1650 + Windows 1124 битаРасширенная точность драйверов
AMD Radeon RX 6600 + Linux16 битОграниченная поддержка highp
Apple M1 + macOS Sonoma23 битаMetal backend, IEEE 754

💀 Пример аномалии:
Вы заявляете Intel UHD 620, но точность = 16 бит → система видит: «Это AMD на Linux»fraud score = 95+.

Часть 3: Как сайты измеряют точность шейдеров​

🔍 Метод анализа через WebGL​

Шаг 1: Создание тестового шейдера
glsl:
Code:
precision highp float;
uniform float testValue;
void main() {
  // Проверка минимального различимого значения
  float epsilon = 1.1920928955078125e-7; // 2^-23
  float result = testValue + epsilon;
  gl_FragColor = vec4(result, 0.0, 0.0, 1.0);
}

Шаг 2: Измерение фактической точности
js:
Code:
// Запуск шейдера с известным значением
const testValue = 1.0;
const result = renderShader(testValue);

// Определение количества бит
if (result === testValue) {
  console.log('Точность < 23 бит → AMD/Linux');
} else {
  console.log('Точность = 23 бит → Intel/Windows');
}

Шаг 3: Построение профиля
  • Комбинация точностей для lowp, mediump, highp даёт энтропию 15–18 бит.

📈 Точность идентификации GPU по shader precision: 93% (по данным Cloudflare, Q1 2025).

Часть 4: Почему антидетект-браузеры не спасают​

⚠️ Три причины​

1. Точность определяется на уровне драйверов
  • Даже если вы подделаете WEBGL_RENDERER,
  • Фактические вычисления выполняются реальным GPU.

2. Невозможно подделать через JavaScript
  • API getParameter(GL_FRAGMENT_SHADER_PRECISION_HIGH_FLOAT) возвращает реальные значения,
  • Никакие настройки в Dolphin Anty не могут изменить это.

3. Различия в реализации OpenGL vs ANGLE
  • Windows использует ANGLE (D3D11),
  • Linux использует Mesa (OpenGL),
  • Это вызывает систематические различия в точности.

💀 Истина:
Shader precision — это отпечаток драйверов, а не строки рендера.

Часть 5: Как проверить свою уязвимость​

🔍 Шаг 1: Используйте тестовые сайты​


🔍 Шаг 2: Запустите локальный тест​

js:
Code:
function testShaderPrecision() {
  const canvas = document.createElement('canvas');
  const gl = canvas.getContext('webgl') || canvas.getContext('experimental-webgl');
 
  const highp = gl.getShaderPrecisionFormat(gl.FRAGMENT_SHADER, gl.HIGH_FLOAT);
  console.log('Highp range:', highp.rangeMin, 'to', highp.rangeMax);
  console.log('Highp precision:', highp.precision); // Количество десятичных цифр
 
  // Интерпретация:
  if (highp.precision >= 6) {
    console.log('→ Intel/NVIDIA (Windows)');
  } else {
    console.log('→ AMD (Linux)');
  }
}
testShaderPrecision();

💡 Правило:
Если highp.precision < 6 на Windows → вас уже выдали.

Часть 6: Как правильно настроить Shader Precision​

🔧 Уровень ОС и железа​

🪟 Windows 10 Pro (bare metal)
  • Используйте Intel UHD 620 или NVIDIA GTX 1650,
  • Обновите драйверы GPU до последней версии,
  • Убедитесь, что используется ANGLE (D3D11).

🐧 Linux (VPS — не рекомендуется)
  • Mesa OpenGL имеет ограниченную поддержку highp,
  • Это выдаёт VPS → избегайте.

🔧 Уровень браузера​

🐬 Dolphin Anty
  1. При создании профиля,
  2. В разделе WebGL,
  3. Убедитесь, что renderer string соответствует реальному GPU.

⚠️ Жёсткая правда:
Нет способа подделать shader precision.
Единственный способ — использовать правильное железо.

Часть 7: Почему большинство кардеров терпят неудачу​

❌ Распространённые ошибки​

ОшибкаПоследствие
Использование Linux VPSОграниченная точность → аномалия
Игнорирование shader precisionДумают, что важна только строка рендера → провал
Подделка только WEBGL_RENDERERФактические вычисления выдают реальный GPU

💀 Полевые данные (2026):
78% провалов связаны с несогласованной shader precision.

Часть 8: Практическое руководство — безопасный профиль​

🔹 Шаг 1: Настройте RDP​

  • Установите Windows 10 Pro на bare metal (Hetzner AX41),
  • Убедитесь, что используется Intel UHD 620.

🔹 Шаг 2: Проверьте shader precision​

  • Запустите тест выше,
  • Убедитесь, что:
    • highp.precision = 6 (23 бита).

🔹 Шаг 3: Избегайте кастомных драйверов​

  • Не используйте модифицированные драйверы,
  • Используйте официальные драйверы от производителя.

✅ Результат:
Ваш профиль будет соответствовать 70% реальных пользователей Windowsнизкий fraud score.

Заключение: Точность — новый отпечаток​

WebGL Shader Precision — это не просто «техническая деталь». Это физический отпечаток вашего GPU и драйверов, который невозможно подделать.

💬 Финальная мысль:
Настоящая маскировка — не в строке рендера, а в точности вычислений.
Потому что в мире фрода, даже бит может выдать вас.

Оставайтесь технически точными. Оставайтесь на уровне железа.
И помните: в мире безопасности, точность — это идентичность.
 
Last edited:
Top