Jump to content

Cg (язык программирования)

(Перенаправлено с Nvidia Cg )
Кг/HLSL
Сцена, содержащая несколько различных 2D-шейдеров HLSL. Искажение статуи достигается чисто физически, а текстура прямоугольной рамы рядом с ней основана на интенсивности цвета. Квадрат на заднем плане был трансформирован и повернут . Частичная прозрачность и отражение воды на переднем плане добавляются шейдером, примененным окончательно ко всей сцене.
Семья язык штриховки
Разработчик нвидиа, майкрософт
Веб-сайт разработчик .nvidia /cg-инструментарий
Диалекты
Cg, HLSL, язык шейдеров PlayStation
Под влиянием
C , язык шейдеров RenderMan
Под влиянием
ГЛСЛ

Cg (сокращение от C для графики ) и язык шейдеров высокого уровня высокого уровня, (HLSL) — это два названия, данные языку шейдеров разработанному Nvidia и Microsoft для программирования шейдеров . Cg/HLSL основан на языке программирования C , и хотя они имеют один и тот же основной синтаксис, некоторые функции C были изменены и добавлены новые типы данных, чтобы сделать Cg/HLSL более подходящим для программирования графических процессоров . [ 1 ] [ 2 ]

Существуют две основные ветви языка Cg/HLSL: компилятор Nvidia Cg (cgc), который выводит DirectX или OpenGL , и Microsoft HLSL, который выводит шейдеры DirectX в формате байт-кода. [ 3 ] [ 4 ] CGC от Nvidia был объявлен устаревшим в 2012 году, без каких-либо дополнительных разработок или поддержки. [ 5 ]

Шейдеры HLSL могут обеспечивать множество специальных эффектов как в 2D, так и в 3D компьютерной графике . Язык Cg/HLSL изначально включал поддержку только вершинных и пиксельных шейдеров , но постепенно вводились и другие типы шейдеров:

Из-за технического прогресса в области графического оборудования некоторые области программирования 3D-графики стали довольно сложными. Чтобы упростить процесс, к видеокартам были добавлены новые функции, в том числе возможность изменять их конвейеры рендеринга с помощью вершинных и пиксельных шейдеров.

Вначале вершинные и пиксельные шейдеры программировались на очень низком уровне, используя только ассемблер графического процессора. Хотя использование языка ассемблера давало программисту полный контроль над кодом и гибкость, его было довольно сложно использовать. Требовался портативный язык более высокого уровня для программирования графического процессора, поэтому был создан Cg, чтобы преодолеть эти проблемы и упростить разработку шейдеров.

Некоторые из преимуществ использования Cg перед ассемблером:

  • Код высокого уровня легче изучать, программировать, читать и поддерживать, чем ассемблерный код.
  • Код Cg переносим на широкий спектр оборудования и платформ, в отличие от ассемблерного кода, который обычно зависит от оборудования и платформ, для которых он написан.
  • Компилятор Cg может оптимизировать код и автоматически выполнять задачи более низкого уровня, которые сложно выполнить и подвержены ошибкам при сборке.

Типы данных

[ редактировать ]

Cg имеет шесть основных типов данных. Некоторые из них такие же, как в C, а другие добавлены специально для программирования на графическом процессоре. Эти типы:

  • float — 32-битное число с плавающей запятой.
  • половина - 16-битное число с плавающей запятой
  • int — 32-битное целое число
  • фиксированный - 12-битное число с фиксированной запятой
  • bool — логическая переменная
  • сэмплер* — представляет объект текстуры

Cg также поддерживает векторные и матричные типы данных, основанные на базовых типах данных, таких как float3 и float4x4. Такие типы данных довольно распространены при программировании трехмерной графики. struct и В Cg также есть типы данных array , которые работают аналогично их эквивалентам в C.

Операторы

[ редактировать ]

Cg поддерживает широкий спектр операторов, включая общие арифметические операторы из C, эквивалентные арифметические операторы для векторных и матричных типов данных, а также общие логические операторы .

Функции и структуры управления

[ редактировать ]

Cg разделяет базовые структуры управления с C, например, if/else, while и for. Он также имеет аналогичный способ определения функций.

Семантика

[ редактировать ]

Препроцессор

[ редактировать ]

Cg реализует множество директив препроцессора C и систему расширения макросов. Он реализует #include. [ 7 ]

Возможности HLSL

[ редактировать ]
  • Пространство имен
  • Аннотация

Цели компиляции

[ редактировать ]

Программы Cg созданы для разных профилей шейдеров , которые соответствуют графическим процессорам с разными возможностями. [ 8 ] Эти профили решают, среди прочего, сколько инструкций может быть в каждом шейдере, сколько регистров доступно и какие ресурсы может использовать шейдер. Даже если программа правильная, работать с профилем может быть слишком сложно. [ 7 ]

По мере увеличения количества типов профилей и шейдеров Microsoft перешла на использование термина «Модель шейдеров» для группировки набора профилей, встречающихся в поколении графических процессоров. [ 9 ] Cg поддерживает некоторые новые профили до Shader Model 5.0, а также перевод в glsl или hlsl. [ 8 ]

Сравнение пиксельных шейдеров HLSL
Версия пиксельного шейдера от 1,0 до 1,3 [ 10 ] 1.4 [ 10 ] 2.0 [ 10 ] [ 11 ] 2.0а [ 10 ] [ 11 ] [ 12 ] 2.0б [ 10 ] [ 11 ] [ 13 ] 3.0 [ 10 ] [ 14 ] 4.0 [ 15 ]
4.1 [ 16 ]
5.0 [ 17 ]
Зависимый предел текстуры 4 6 8 Безлимитный 8 Безлимитный Безлимитный
Предел инструкций текстуры 4 6*2 32 Безлимитный Безлимитный Безлимитный Безлимитный
Регистр позиций Нет Нет Нет Нет Нет Да Да
Слоты инструкций 8+4 8+4 32 + 64 512 512 ≥ 512 ≥ 65536
Выполненные инструкции 8+4 6*2+8*2 32 + 64 512 512 65536 Безлимитный
Косвенные текстуры 4 4 4 Безлимитный 4 Безлимитный Безлимитный
Интерполированные регистры 2 + 4 2 + 6 2 + 8 2 + 8 2 + 8 10 32
Предсказание инструкций Нет Нет Нет Да Нет Да Нет
Индексные входные регистры Нет Нет Нет Нет Нет Да Да
Временные регистры 2 6 с 12 до 32 22 32 32 4096
Постоянные регистры 8 8 32 32 32 224 16×4096
Произвольное вращение Нет Нет Нет Да Нет Да Да
Инструкции по градиенту Нет Нет Нет Да Нет Да Да
Регистр счетчика циклов Нет Нет Нет Нет Нет Да Да
Регистрация лица (двустороннее освещение) Нет Нет Нет Нет Да Да Да
Динамическое управление потоком Нет Нет Нет Нет Нет Да (24) Да (64)
Побитовые операторы Нет Нет Нет Нет Нет Нет Да
Собственные целые числа Нет Нет Нет Нет Нет Нет Да

«32 + 64» для выполняемых инструкций означает «32 текстурные инструкции и 64 арифметические инструкции».

Сравнение вершинных шейдеров HLSL
Версия вершинного шейдера ПРОТИВ 1.1 [ 18 ] ПРОТИВ 2.0 [ 11 ] [ 18 ] [ 19 ] ПРОТИВ 2.0а [ 11 ] [ 18 ] [ 19 ] ПРОТИВ 3.0 [ 14 ] [ 18 ] ПРОТИВ 4.0 [ 15 ]
ПРОТИВ 4.1 [ 20 ]
ПРОТИВ 5.0 [ 17 ]
Количество слотов инструкций 128 256 256 ≥ 512 ≥ 65536
Максимальное количество выполненных инструкций 128 1024 65536 65536 Безлимитный
Предсказание инструкций Нет Нет Да Да Да
Временные регистры 12 12 16 32 4096
# константные регистры ≥ 96 ≥ 256 256 ≥ 256 16×4096
Статический контроль потока Нет Да Да Да Да
Динамическое управление потоком Нет Нет Да Да Да
Динамическая глубина контроля потока 24 24 64
Получение текстуры вершин Нет Нет Нет Да Да
Количество сэмплеров текстур 4 128
создания экземпляров геометрии Поддержка Нет Нет Нет Да Да
Побитовые операторы Нет Нет Нет Нет Да
Собственные целые числа Нет Нет Нет Нет Да

Стандартная библиотека

[ редактировать ]

Как и в C, Cg/HLSL имеет набор функций для общих задач программирования на графическом процессоре. Некоторые функции имеют эквиваленты на языке C, например математические функции abs и sin, в то время как другие специализируются на задачах программирования графического процессора, например функции отображения текстур tex1D и tex2D.

Библиотека времени выполнения Cg

[ редактировать ]

Программы Cg — это всего лишь вершинные и пиксельные шейдеры, и им нужны вспомогательные программы, которые выполняют остальную часть процесса рендеринга. Cg можно использовать с двумя графическими API : OpenGL или DirectX . Каждый из них имеет свой собственный набор функций Cg для взаимодействия с программой Cg, таких как установка текущего шейдера Cg, передача параметров и тому подобные задачи.

Помимо возможности компилировать исходный код Cg в ассемблерный код, среда выполнения Cg также имеет возможность компилировать шейдеры во время выполнения вспомогательной программы. Это позволяет среде выполнения компилировать шейдер с использованием последних оптимизаций, доступных для оборудования, на котором в данный момент выполняется программа. Однако этот метод требует, чтобы исходный код шейдера был доступен компилятору в виде обычного текста, что позволяет пользователю программы получить доступ к исходному коду шейдера. Некоторые разработчики считают это серьезным недостатком этого метода.

Чтобы избежать раскрытия исходного кода шейдера и при этом сохранить некоторые аппаратные оптимизации, была разработана концепция профилей. Шейдеры могут быть скомпилированы для разных графических аппаратных платформ (в соответствии с профилями). При выполнении вспомогательной программы загружается лучший/наиболее оптимизированный шейдер в соответствии с его профилем. Например, может существовать профиль для видеокарты, поддерживающей сложные пиксельные шейдеры, и другой профиль для карты, поддерживающей только минимальные пиксельные шейдеры. Создавая пиксельный шейдер для каждого из этих профилей, вспомогательная программа увеличивает количество поддерживаемых аппаратных платформ, не жертвуя при этом качеством изображения на мощных системах».

Составители и диалекты

[ редактировать ]

Диалект Cg когда-либо имел только один компилятор — набор инструментов Cg от Nvidia.

Microsoft выпустила два компилятора для HLSL. Исходным компилятором был FXC (Effect Compiler) с закрытым исходным кодом, который поддерживался до 2015 года. Он был устаревшим в пользу DXC с открытым исходным кодом на основе LLVM (DirectXShaderCompiler) с поддержкой новых функций HLSL. [ 21 ] Оба компилятора генерируют байт-код: в то время как старый FXC использовал DXBC, теперь DXC использует DXIL. DXC также может генерировать байт-код SPIR-V . [ 22 ]

Группа Khronos также написала компилятор HLSL на основе LLVM в форме интерфейса для glslang , их компилятора GLSL-to-SPIR_V. Поддержка SPIR-V означает, что шейдеры могут быть кроссплатформенными, не ограничиваясь стеком DirectX. [ 23 ] Ранее эту задачу выполняли преобразователи уровня исходного кода, такие как HLSL2GLSL , но результирующий код часто оказывался раздутым. [ 24 ]

Производные языки

[ редактировать ]

Язык шейдинга PlayStation основан на Cg/HLSL. [ 25 ]

Язык шейдеров ReshadeFX также основан на Cg/HLSL. Шейдеры, написанные в ReshadeFX, компилируются в OpenGL, DX или Vulkan и внедряются в игры в качестве фильтров постобработки. [ 26 ]

Приложения и игры, использующие Cg или HLSL

[ редактировать ]

См. также

[ редактировать ]
  1. ^ «Fusion Industries :: Часто задаваемые вопросы по Cg и HLSL ::» . 24 августа 2012 г. Архивировано из оригинала 24 августа 2012 г.
  2. ^ «Учебное пособие по компьютерной графике. Глава 1. Введение» . Developer.download.nvidia.cn .
  3. ^ «Написание шейдеров HLSL в Direct3D 9 (Windows)» . msdn.microsoft.com . 24 мая 2021 г.
  4. ^ «Часто задаваемые вопросы по CG» . NVIDIA DesignWorks . 8 марта 2011 года . Проверено 25 мая 2017 г.
  5. ^ «Cg Toolkit | Разработчик NVIDIA» . 8 марта 2011 г.
  6. ^ «Примечания к выпуску Cg 2.0» (PDF) . nvidia.com . Январь 2008 года.
  7. ^ Перейти обратно: а б Марк Дж. Килгард , художник на двух страницах , 2003.
  8. ^ Перейти обратно: а б «Документация профиля Cg» . Разработчик Нвидиа .
  9. ^ «Модели шейдеров и профили шейдеров — приложения Win32» . docs.microsoft.com . 30 июня 2021 г.
  10. ^ Перейти обратно: а б с д и ж «Различия пиксельных шейдеров» . msdn.microsoft.com . 08.02.2011.
  11. ^ Перейти обратно: а б с д и Пипер, Крейг (15 марта 2004 г.). «Язык шейдеров высокого уровня Microsoft DirectX (HLSL)» (PPT) . microsoft.com . стр. 5–8, 24–25.
  12. ^ Шимпи, Ананд Лал. «NVIDIA представляет GeForce FX (NV30)» .
  13. ^ Уилсон, Дерек. «ATI Radeon X800 Pro и XT Platinum Edition: появление R420» .
  14. ^ Перейти обратно: а б Модель шейдеров 3.0, Ашу Реге, NVIDIA Developer Technology Group, 2004 г.
  15. ^ Перейти обратно: а б Система Direct3D 10, Дэвид Блайт, Microsoft Corporation, 2006 г.
  16. ^ «Регистры — ps_4_1 (Windows)» . msdn.microsoft.com . 23 августа 2019 г.
  17. ^ Перейти обратно: а б «Регистры — ps_5_0 (Windows)» . msdn.microsoft.com . 23 августа 2019 г.
  18. ^ Перейти обратно: а б с д «Различия вершинных шейдеров» . msdn.microsoft.com . 08.02.2011.
  19. ^ Перейти обратно: а б Шимпи, Ананд Лал. «NVIDIA представляет GeForce FX (NV30)» .
  20. ^ «Регистры — vs_4_1 (Windows)» . msdn.microsoft.com . 23 августа 2019 г.
  21. ^ «Портирование с FXC на DXC» . Гитхаб .
  22. ^ «microsoft/DirectXShaderCompiler: в этом репозитории размещен исходный код компилятора шейдеров DirectX, основанного на LLVM/Clang» . Майкрософт. 21 октября 2020 г.
  23. ^ «glslang: эталонный интерфейс Khronos для GLSL/ESSL, частичный интерфейс для HLSL и генератор SPIR-V» . Группа «Хронос». 21 октября 2020 г.
  24. ^ Мэтт Тернер. Видео на YouTube .
  25. ^ Стенсон, Ричард; Эй, Крис. «Язык шейдеров PlayStation для PS4» . КРИ Европа 2013 .
  26. ^ «Язык шейдеров ReShade FX» . Гитхаб . 15 февраля 2022 г.
  27. ^ «Плагин Maya Cg | NVIDIA» .
  28. ^ «Обзор возможностей LightWave 11.6» .
  29. ^ «Unity — Руководство: Написание шейдеров» .

Дальнейшее чтение

[ редактировать ]
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: d0bbb248c6096aa46d5fc36df1916bff__1716397620
URL1:https://arc.ask3.ru/arc/aa/d0/ff/d0bbb248c6096aa46d5fc36df1916bff.html
Заголовок, (Title) документа по адресу, URL1:
Cg (programming language) - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)