Начало разработки шейдеров

Я хочу начать разработку игр с использованием Microsoft XNA. Частично это разработка шейдеров, но я понятия не имею, с чего начать. Я знаю, что FX Composer от nVidia - отличный инструмент для разработки шейдеров, но я не нашел много полезного и обновленного контента о том, как на самом деле начать работу.

Какие уроки вы бы порекомендовали?

Ответов (9)

Решение

Разработка шейдеров в XNA (который, очевидно, использует DirectX) требует знания HLSL или сборки шейдеров. Я бы рекомендовал ознакомиться с первым, прежде чем углубляться во вторую.

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

Затем попытайтесь написать свой собственный HLSL, который делает то, что раньше делал фиксированный конвейер T&L , просто чтобы запачкать ваши руки. Это эквивалент программы "hello world" в мире вершинных / пиксельных шейдеров. Когда вы сможете это сделать и поймете, что написали, вы готовы перейти к более интересным вещам.

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

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

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

Для тех, кто немного более продвинут, есть пара хороших книг, которые доступны бесплатно в Интернете, в которых есть отличная информация от Nvidia здесь и здесь .

Не забывайте, что есть отличная серия книг под названием ShaderX, в которой рассказывается о некоторых удивительных вещах, связанных с шейдерами. Там в 1 , 2 , 3 , 4 , 5 и 6 уже в печати, и 7 в ближайшее время.

Удачи. Если у вас появятся шейдеры, я бы с удовольствием их увидел :)

Программа SAMS XNA Unleashed by Chad Carter является отличной отправной точкой для XNA и предполагает наличие небольшого количества знаний о методах разработки игр или сложной математике, прежде чем вы начнете. Он состоит из двух глав, посвященных базовым и расширенным шейдерам.

В качестве примечания, обратите внимание на учебники Google for WPF Shader, теперь они используют ту же технологию, чтобы разрешить клиентские шейдеры в приложениях WPF, и учебники для которых, я считаю, в значительной степени совместимы с XNA.

Я просто хотел бы повторить, насколько хороши книги по GPU Gems - поистине фантастический ресурс для любой серьезной разработки графики.

OJ в основном резюмировал действительно хороший процесс обучения, я бы просто добавил, что наличие хорошего фундамента в геометрической математике (как минимум, векторы / матрицы) нельзя недооценивать - но это не так сложно, как иногда думают люди. Изучение того, что такое скалярное произведение, кросс-произведение, нормальный вектор и матричное умножение, является хорошим первым шагом :). Постарайтесь точно понять, что происходит между Миром / Видом / Проекцией-Клипом / Пространством экрана, каково разделение перспективы и т. Д.

Когда я только начинал учиться, хорошим упражнением было реализовать весь конвейер T&L в программном обеспечении, в комплекте с отсечкой / отсечкой и т. Д. Это долгий процесс, который может показаться нецелесообразным, поскольку я уверен, что вы хотите просто погрузиться в веселье. разного, но правильное понимание того, что происходит, действительно полезно и окажется полезным, когда вы неизменно столкнетесь с более коварными и трудными для диагностики ошибками.

Старайтесь не оставаться в стороне от таких инструментов, как FX Composer на начальном этапе, они полезны для создания прототипов, но иметь прочную основу в основах гораздо полезнее в долгосрочной перспективе.

Я не использовал ни XNA, ни DirectX. Но для знакомства с основами программирования шейдеров с помощью Cg, Cg Tutorial - лучшая книга, которую я нашел.

Вам также следует взглянуть на RenderMonkey. Это хороший инструмент. Что касается книг, посмотрите "Рецепты программирования игр для XNA 2.0" от Римера Гроотянса ... отличная книга.

Я присоединяюсь к похвалам, данным OJ - действительно хороший ответ. Тем не менее, как только у вас появятся базовые знания, вы сможете многому и быстро научиться, загрузив один из следующих двух замечательных инструментов:

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

Повеселись

Несмотря на то, что уже было дано много хороших советов, если у вас есть тяжелая работа, чтобы обдумать задействованные шаги, Mental Mill предоставляет визуальный способ построения шейдеров (версия Artist Edition поставляется бесплатно с Fx Composer - сама также бесплатно!).

Хотя вам было бы лучше в долгосрочной перспективе изучать код HLSL напрямую, Mental Mill может сгенерировать эти файлы Fx для вас (чтобы вы могли следить за изменениями). Обратите внимание: как и все генераторы кода, он немного более подробный, чем вы, вероятно, сделаете, когда поймете HLSL!

Визуальная прогрессия эффектов от одного метода к другому очень впечатляет!

Одна мысль о визуальных редакторах шейдеров. С такими редакторами очень весело играть, но я бы очень, очень рекомендовал придерживаться работы с текстовым HLSL (там работают и RM, и FXC). Я работаю разработчиком игр и создал несколько шейдерных систем (например, в Battlefield 2 и Farcry 2) и, честно говоря, обнаружил, что HLSL более ценен, чем любая другая сеть графических шейдеров на сегодняшний день.

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

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

... хотя я предполагаю, что до этого дня мы увидим отложенное освещение и, возможно, полный программный рендеринг;)

Один из лучших способов начать работу с шейдерами - это прочитать Фрэнка Луна «Введение в программирование трехмерных игр с использованием шейдерного подхода DirectX 9.0ca». Автор сначала представляет DirectX и HLSL, а затем постепенно раскрывает мощь шейдеров. Он начинает с очень простых шейдеров, но к концу книги вы знаете, как создавать освещение, тени, системы частиц и т. Д. Great Book.

OJ посоветовал вам прочитать серию ShaderX, но материал там не для новичков, поэтому он не очень поможет вам, когда вы делаете первые шаги.

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