Говоря коротко, разработка шейдера - это такой же процесс, как и создание любой другой программы: определенное время планируется для проектирования, реализации, тестирования и документирования.
Далее приводится несколько рекомендаций для разработчиков шейдеров. Это скорее советы, чем правила: вполне могут возникнуть ситуации, в которых соблюдение таких правил не имеет никакого смысла.
8.1.1. Понимание проблемы
Это кажется очевидным, однако необходимо периодически напоминать себе, что успех разработки шейдеров во многом зависит от того, как разработчик разобрался в проблеме, прежде чем писать код.
Прежде чем приступать к разработке, следует убедиться в том, что вы понимайте алгоритм рендеринга, планируемого для реализации. Если цель - сделать йейдер с отображением бугристости или шероховатости поверхности, нужно убедиться в понимании соответствующих математических формул еще до кодирования. Карандаш и бумага очень помогают все обдумать и уточнить основные подробности еще до начала написания кода.
Поскольку инструменты для разработки шейдеров пока не такие мощные, как средства разработки кода для запуска на обычных процессорах, лучше попробовать сначала реализовать модель алгоритма в программе, которая будет работать fta обычном процессоре, прежде чем кодировать на языке шейдеров OpenGL. Это предоставит в распоряжение разработчика мощные средства отладки: пошаговую отладку кода, точки останова и возможность наблюдать работу кода в действии. Конечно же, скоро все это станет доступным и для работы непосредственно на графическом ускорителе.
8.1.2. Постепенное усложнение
Многие шейдеры зависят от большого количества подробностей и данных, помогающих достичь ожидаемого эффекта. Разрабатывать шейдер лучше таким образом, чтобы можно было сначала разработать и протестировать самые большие и важные возможности, а после того как базовый шейдер заработает, добавлять другие условия и наращивать сложность. Например, есть задача: разработать шейдер, который будет сочетать эффект шума с присвоением изображению значений из нескольких текстурных карт, а потом еще создавать какие-нибудь особенные эффекты освещения. Эту задачу можно выполнить несколькими способами. Один As них - сначала создать эффекты освещения, используя простую модель шейдера. После успешного тестирования этой части шейдера можно постепенно добавлять другие эффекты, наложение текстурных карт и опять тщательно тестировать. После этого добавляется эффект шума - и опять выполняется тестирование.
Таким образом, сложная задача была разбита на несколько подзадач. После успешного завершения и тестирования одной подзадачи можно переходить к следующей.
8.1.3. Тестирование и повторение
Иногда невозможно представить эффект, создаваемый шейдером, например, в процессе работы со сложными математическими функциями. В других случаях его вообще сложно представить - например, шум. В этом случае можно попробовать параметризовать алгоритм и систематически изменять входные параметры. Заметки, сделанные при изменении параметров и наблюдении вызванного этим эффекта, станут хорошими комментариями к исходному коду шейдера для тех, кому потом придется разбираться в нем, добавлять новые возможности и отлаживать.