Render.ru

NVidia родила Cg

#1
Это такой высокоуровневый шейдерный язык, который будет встроен в DirectX 9 и работать на всех современных картах.

Всё хорошо, если бы не одно но:

http://www.cgchannel.com/news/2002_6/cg/images/code.jpg

Уроды. Мало того, что с ошибкой (если это ошибка), так ещё и специально код SL перепоганили. Переписываем:

color cSpec = phong(Nf, V, phongExp);
Ci = Oi * (FinalColor+DiffuseColor * (AmbientLight+DiffuseLight)) + SpecularColor*cSpec;

А перепишем так:

Ci = Oi * (cFinal+cDiffuse * (lAmbient+lDiffuse)) + cSpecular*phong(Nf, V, phongExp);

Ну и у кого понятнее? Даже не смотря на мою венгерскую нотацию, которой я стараюсь избегать ;-)

В ШейдерМене этот шейдер (Фонг) вообще выглядит вот так:

normal Nf = faceforward(normalize(N), I);
vector V = -normalize(I);

Ci = diffusecolor * (ambientcolor * Ka * ambient() + Kd * diffuse(Nf)) + specularcolor * Ks * phong(Nf, V, 1/roughness);

Понятнее не придумаешь.

И нахрена им плодить новые шейдерные языки?
 
#2
Но по сравнению с ассемблерным кодом, разница не такая уж сильная.
Т.е. неаписание кросс-компилера -- наверное вполне реально.
Ясное дело, что на некотором подмножестве шейдеров.
Неужто можно будет настраивать шейдеры в real-time?
 
#3
> Т.е. неаписание кросс-компилера -- наверное вполне реально.
> Ясное дело, что на некотором подмножестве шейдеров.

Я тяну эту штуку - она бесплатная - посмотрим.

> Неужто можно будет настраивать шейдеры в real-time?

Cg - можно в майке и максе уже сейчас, но скорее всего только под geForce.
 
#5
Cg не встроен в DirectX, это компилер в нормальные директовые шейдеры. То, что отличаются от PRMan'овских, понятно, т.к. NV, как и любой другой монополист, старается продвинуть свое. Хардварные шейдеры есть в максе, но в майке, простите, через какую задницу? Майка вроде бы расширений OGL не пользует пока. А OpenGL 2.0 (в котором реализуется обрезанный рендерман), как стандарт, еще не утвердили и в ближайщие пару лет утвердят.
 
#6
На самом деле хоть в майке и нет именно pixel shaders(я надеюсь ПОКА нет - вообще я не понимаю причины, по которой их там нет), но вообще openGL'ные шейдера там есть. Очень простые, конечно, но есть. А как вы думаете рассчитываются те же Lambert/Phong/Blinn во вьюпортах, ы? ;)

По поводу OpenGL 2.0 - тут Кармак вроде писал, что хочет сделать 1-pass rendering pipeline for Doom3 based on OpenGL 2.0.
Так что может и не через два года, а полгода-год....?
 
#7
Причины, по которой нет в майке шейдеров, равно как и в LW, просты - все нормальные неигровые программы работают со стандартом OpenGL и не используют проприетарных расширений. Поэтому шейдеров нет ВООБЩЕ НИКАКИХ. Lambert, Phong, Blinn рассчитываются процессором. Да, Кармак собирается переписать движок под OGL2.0, ходят слухи, что выйдет D3 для обычных карт, а позже версия под 3DLabs P10 и другие карты, которые будут поддерживать OGL2.0 Может это будет и не через 2 года, но все равно времени потребуется достаточно. Все-таки если OpenGL стандартизируют, то он держится долго, в отличие от латанного-перелатанного DirectX.
 
Сверху