Форумы на Наша-Life
Home user CP  
Календарь событий Найти других пользователей Часто задаваемые Вопросы Поиск  
Автор
Тема
Создать Новую Тему    Ответить
HarD_WareZ
(^_^)

Зарегистрирован: May 2005
Проживает: Russian Federation/Khabarovsk
Написал: 46 сообщений

Оценка: 4 Votes 4 чел.

Адаптация хл2 шейдеров под Д3.
Сообщение #204046
Знаю, знаю, не кидайте помидоры, тем лол, но вот у меня небольшой вопрос:

Основываясь на знании о том, что в GL-движках PS - называются fragment_programm, а VS - vertex_programm, т.е. в D3D9-приложениях вызов ПШ и ВШ идет через PS_INPUT и VS_INPUT(кажется так), а в ARB(его использует OGL-движки) - ARVfp1.0 и ARBvp1.0. В качестве испытания я взял шейдер фонарика из хл2 и попробовал перевести его в т.н. OpenGL-понятный формат, т.е. поместить код в созданый мною файл шейдера в папке glprogs в root'е дума. Но тут моя работа остановилась - матчасть явно хромает.

Поэтому, хотелось бы узнать у местного гуру по шейдерной технологии - DomenER'а, как сделать данную операцию и возможно ли такое вообще ?
Мне кажется, что вам надо следить за чем-то таким что запрещает модераторский состав форума.

Поправил HarD_WareZ 04-07-2005 в 07:08

Old Post 04-07-2005 06:55
HarD_WareZ отсутствует Посмотреть данные 'HarD_WareZ' Отправить Приватное Сообщение для 'HarD_WareZ' Посетить домашнюю страничку HarD_WareZ Найти другие сообщения 'HarD_WareZ' Добавить HarD_WareZ в Список Друзей
Править/Удалить Сообщение Ответить с Цитированием
Куршак
(Жижоба и ростки пшеницЫ)

Зарегистрирован: Jan 2005
Проживает: Россия/
Написал: 564 сообщений

Оценка: 24 Votes 24 чел.

Сообщение #204318
Хочешь переделать ХЛ2 на двигле ДЭнгин:? =)
Если жизнь бьет ключом, увернись и дай сдачи монтировкой.

@
Old Post 04-07-2005 12:51
Куршак отсутствует Посмотреть данные 'Куршак' Отправить Приватное Сообщение для 'Куршак' Посетить домашнюю страничку Куршак Найти другие сообщения 'Куршак' Добавить Куршак в Список Друзей
Править/Удалить Сообщение Ответить с Цитированием
HarD_WareZ
(^_^)

Зарегистрирован: May 2005
Проживает: Russian Federation/Khabarovsk
Написал: 46 сообщений

Оценка: 4 Votes 4 чел.

Сообщение #204659
Конкретно хочу воду увидеть на Д3-engine
Мне кажется, что вам надо следить за чем-то таким что запрещает модераторский состав форума.
Old Post 04-07-2005 22:17
HarD_WareZ отсутствует Посмотреть данные 'HarD_WareZ' Отправить Приватное Сообщение для 'HarD_WareZ' Посетить домашнюю страничку HarD_WareZ Найти другие сообщения 'HarD_WareZ' Добавить HarD_WareZ в Список Друзей
Править/Удалить Сообщение Ответить с Цитированием
DomenER
(Member)

Зарегистрирован: Feb 2004
Проживает: Russian Federation/
Написал: 286 сообщений

Оценка: 15 Votes 15 чел.

Сообщение #205085
Вот пример Complex_Glass_OpenGL - соответственно на OpenGL.
Fragment Program:

uniform float rainbowSpread;
uniform float ambient;
uniform float rainbowScale;
uniform float reflectionScale;
uniform float refractionScale;
uniform vec4 baseColor;
uniform float indexOfRefractionRatio;

uniform sampler2D Rainbow;
uniform samplerCube Environment;

varying vec3 vNormal;
varying vec3 vViewVec;

void main(void)
{
vec3 normal = normalize(vNormal);
vec3 viewVec = normalize(vViewVec);
// Look up the reflection
vec3 reflVec = reflect(-viewVec, normal);
vec4 reflection = textureCube(Environment, reflVec.xyz);
// We'll use Snell's refraction law:
// n * sin(theta ) = n * sin(theta )
// i i r r
// sin(theta )
// i
float cosine = dot(viewVec, normal);
float sine = sqrt(1.0 - cosine * cosine);
// sin(theta )
// r
float sine2 = clamp(indexOfRefractionRatio * sine, 0.0, 1.0); // same as saturate
float cosine2 = sqrt(1.0 - sine2 * sine2);
// Out of the sine and cosine of the angle between the
// refraction vector and the normal we can construct the
// refraction vector itself given two base vectors.
// These two base vectors are the negative normal and
// a tangent vector along the path of the incoming vector
// relative to the surface.
vec3 x = -normal;
vec3 y = normalize(cross(cross(viewVec, normal), normal));
// Refraction
vec3 refrVec = x * cosine2 + y * sine2;
vec4 refraction = textureCube(Environment, refrVec.xyz);
// Colors refract differently and the difference is more
// visible the stronger the refraction. We'll fake this
// effect by adding some rainbowish colors accordingly.
vec4 rainbow = texture2D(Rainbow, vec2( pow(cosine, rainbowSpread), 0.0));
vec4 rain = rainbowScale * rainbow * baseColor;
vec4 refl = reflectionScale * reflection;
vec4 refr = refractionScale * refraction * baseColor;
// There is more light reflected at sharp angles and less
// light refracted. There is more color separation of refracted
// light at sharper angles
gl_FragColor = sine * refl + (1.0 - sine2) * refr + sine2 * rain + ambient;
}

Этот же пример под DirectX:
PixelShader:

float refractionScale: register(c2);
float rainbowScale: register(c3);
float rainbowSpread: register(c4);
float4 baseColor: register(c5);
float ambient: register(c6);
float indexOfRefractionRatio: register(c0);
float reflectionScale: register(c1);
sampler Environment: register(s0);
sampler Rainbow: register(s1);
float4 main(float3 normal: TEXCOORD0, float3 viewVec: TEXCOORD1) : COLOR {
normal = normalize(normal);
viewVec = normalize(viewVec);

// Look up the reflection
float3 reflVec = reflect(-viewVec, normal);
float4 reflection = texCUBE(Environment, reflVec.xyz);

// We'll use Snell's refraction law:
// n * sin(theta ) = n * sin(theta )
// i i r r

// sin(theta )
// i
float cosine = dot(viewVec, normal);
float sine = sqrt(1 - cosine * cosine);

// sin(theta )
// r
float sine2 = saturate(indexOfRefractionRatio * sine);
float cosine2 = sqrt(1 - sine2 * sine2);

// Out of the sine and cosine of the angle between the
// refraction vector and the normal we can construct the
// refraction vector itself given two base vectors.
// These two base vectors are the negative normal and
// a tangent vector along the path of the incoming vector
// relative to the surface.
float3 x = -normal;
float3 y = normalize(cross(cross(viewVec, normal), normal));

// Refraction
float3 refrVec = x * cosine2 + y * sine2;
float4 refraction = texCUBE(Environment, refrVec.xyz);

// Colors refract differently and the difference is more
// visible the stronger the refraction. We'll fake this
// effect by adding some rainbowish colors accordingly.
float4 rainbow = tex1D(Rainbow, pow(cosine, rainbowSpread));

float4 rain = rainbowScale * rainbow * baseColor;
float4 refl = reflectionScale * reflection;
float4 refr = refractionScale * refraction * baseColor;

// There is more light reflected at sharp angles and less
// light refracted. There is more color separation of refracted
// light at sharper angles
return sine * refl + (1 - sine2) * refr + sine2 * rain + ambient;
}

Смотрим разницу. Ещё лучше всё делать на RM 1.6. У меня мало что получилось при конвертации шейдера воды на RM - шейдеры компилятся, но почти ничего не видно.

domener добавил 05-07-2005 в 18:07:42:
Я чисто случайно увидел новую тему. Поэтому лучше всего высылыть e-mail!
Прикрепленная картинка: [посмотреть в полный размер]
30e0a84e86bfbdc4bc10f568e97deaaf
http://s41.radikal.ru/i092/1107/8a/3667c72db156.gif
Old Post 05-07-2005 17:01
DomenER отсутствует Посмотреть данные 'DomenER' Отправить Приватное Сообщение для 'DomenER' Найти другие сообщения 'DomenER' Добавить DomenER в Список Друзей
Править/Удалить Сообщение Ответить с Цитированием
HarD_WareZ
(^_^)

Зарегистрирован: May 2005
Проживает: Russian Federation/Khabarovsk
Написал: 46 сообщений

Оценка: 4 Votes 4 чел.

Сообщение #205510
2Это может быть из-за твоего 8500 и его ограниченности в ALU. Ну а мне с 6600 нечего бояться
Мне кажется, что вам надо следить за чем-то таким что запрещает модераторский состав форума.
Old Post 06-07-2005 09:04
HarD_WareZ отсутствует Посмотреть данные 'HarD_WareZ' Отправить Приватное Сообщение для 'HarD_WareZ' Посетить домашнюю страничку HarD_WareZ Найти другие сообщения 'HarD_WareZ' Добавить HarD_WareZ в Список Друзей
Править/Удалить Сообщение Ответить с Цитированием
DomenER
(Member)

Зарегистрирован: Feb 2004
Проживает: Russian Federation/
Написал: 286 сообщений

Оценка: 15 Votes 15 чел.

Сообщение #207635
Вот PDF по шейдерам под OpenGL
http://www.ati.com/developer/gdc/GD...ng_Language.pdf
А вот по оптимизации:
http://www.ati.com/developer/gdc/GD...Performance.pdf
http://s41.radikal.ru/i092/1107/8a/3667c72db156.gif
Old Post 09-07-2005 16:08
DomenER отсутствует Посмотреть данные 'DomenER' Отправить Приватное Сообщение для 'DomenER' Найти другие сообщения 'DomenER' Добавить DomenER в Список Друзей
Править/Удалить Сообщение Ответить с Цитированием
 
Все время в GMT . Сейчас 14:28.
Создать Новую Тему    Ответить

Быстрый ответ
Ваше Имя:
Хотите Зарегистрироваться?
Ваш Пароль:
Забыли свой Пароль?
Вы можете оставлять свои комментарии анонимно, просто введя свои имя и оставив пустым поле пароля.
Ваш ответ:

[проверить размер]
[транслит в win] | [?]
[русская клавиатура]

Дополнительно: Подтверждение по E-Mail


Быстрый переход:
 
Оцените эту Тему:
 

Правила форума:
Создание Тем не разрешено
Создание Сообщений разрешено
Создавать Вложения не разрешено
Редактирование Сообщений не разрешено
Коды HTML запрещены
Коды форума разрешены
Смайлики разрешены
Коды [IMG] запрещены