HLFX.Ru Forum
профиль •  правила •  регистрация •  календарь •  народ •  FAQ •  поиск •  новое •  сутки •  главная •  выход  
HLFX.Ru Forum HLFX.Ru Forum > Теория и практика > OpenGL > Нубские вопросы
Теория создания игры
2 голосов
Страницы (15): « Первая ... « 9 10 11 12 [13] 14 15 »   Предыдущая тема   Следующая тема
Автор
Тема Новая тема    Ответить
KiQ
Житель форума

Дата регистрации: Aug 2010
Проживает: Смоленск, Москва
Сообщений: 2087

Рейтинг



XaeroX но по идее оптимизация должна закладываться уже на уровне прототипа? Или не должна?

__________________
-Brain is dead-

Сообщить модератору | | IP: Записан
Сообщение: 213314

Старое сообщение 11-03-2023 14:29
- За что?
SNMetamorph
Житель форума

Дата регистрации: Jun 2018
Проживает: Ижевск
Сообщений: 560

Рейтинг



Цитата:
KiQ писал:
А допустим, кто-то захочет прикрутить в TriAPI шейдеры, логичнее для этого использовать какой-то универсальный язык, по типу того, что был в системе материалов в третьей кваке, а затем уже компилировать в зависимости от выбранного рендера.

А нету таких языков. Вот байт-код универсальный есть, да. SPIR-V называется. Но он в OpenGL поддерживается только в самых крайних версиях.

__________________
PrimeXT
GoldSrc Monitor
SMD Splitter
mdl-flip (gFlip analog)
Xash3D Modding Discord

Сообщить модератору | | IP: Записан
Сообщение: 213323

Старое сообщение 12-03-2023 12:13
- За что?
 XaeroX
Crystice Softworks

Дата регистрации: Oct 2005
Проживает: Торонто
Сообщений: 34498
Нанёс повреждений: 514 ед.
Возраст: 37

Рейтинг



Награды
 
[1 награда]


Цитата:
SNMetamorph писал:
А нету таких языков

Cg

__________________
Правдой дорожить, лжи не потакать,
Дальних не судить, ближним помогать,
С тишиной сойтись на исходе дня
Научи меня, Родина моя!

Сообщить модератору | | IP: Записан
Сообщение: 213324

Старое сообщение 12-03-2023 12:23
-
KiQ
Житель форума

Дата регистрации: Aug 2010
Проживает: Смоленск, Москва
Сообщений: 2087

Рейтинг



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

__________________
-Brain is dead-

Сообщить модератору | | IP: Записан
Сообщение: 213325

Старое сообщение 12-03-2023 17:52
- За что?
 XaeroX
Crystice Softworks

Дата регистрации: Oct 2005
Проживает: Торонто
Сообщений: 34498
Нанёс повреждений: 514 ед.
Возраст: 37

Рейтинг



Награды
 
[1 награда]


KiQ
Так я не понял, чем вас Cg не устраивает?
В Volatile шейдеры при сборке компилируются сразу в большое число профилей, часть из которых D3D, а часть GL. Соответственно, простые эффекты будут работать на условной GeForceFX, ну а сложные используют всё преимущество полноценного ветвления, неразвёртываемых циклов и других радостей модели 3+.

C++ Source Code:
1
enum {
2
  PROG_PROFILE_UNKNOWN,
3
  PROG_PROFILE_VS_2_0,
4
  PROG_PROFILE_VS_2_X,
5
  PROG_PROFILE_VS_3_0,
6
  PROG_PROFILE_VS_4_0,
7
  PROG_PROFILE_VS_5_0,
8
  PROG_PROFILE_ARBVP1,
9
  PROG_PROFILE_GP4VP,
10
  PROG_PROFILE_GP5VP,
11
  PROG_PROFILE_GLSLV,
12
  PROG_PROFILE_GLSLV3,
13
  PROG_PROFILE_PS_2_0,
14
  PROG_PROFILE_PS_2_X,
15
  PROG_PROFILE_PS_3_0,
16
  PROG_PROFILE_PS_4_0,
17
  PROG_PROFILE_PS_5_0,
18
  PROG_PROFILE_ARBFP1,
19
  PROG_PROFILE_GP4FP,
20
  PROG_PROFILE_GP5FP,
21
  PROG_PROFILE_GLSLF,
22
  PROG_PROFILE_GLSLF3,
23
  PROG_NUM_PROFILES
24
};

__________________
Правдой дорожить, лжи не потакать,
Дальних не судить, ближним помогать,
С тишиной сойтись на исходе дня
Научи меня, Родина моя!

Сообщить модератору | | IP: Записан
Сообщение: 213326

Старое сообщение 12-03-2023 18:10
-
KiQ
Житель форума

Дата регистрации: Aug 2010
Проживает: Смоленск, Москва
Сообщений: 2087

Рейтинг



XaeroX помню ещё пытался с Cg водичкой для халфы разобраться, и как-то сразу мне оно не зашло именно тем, что это C for graphics. Отсюда и издержки синтаксиса и в целом некая перегруженность. Я же имел в виду некий высокоуровневый универсальный язык, который может транслироваться в API-зависимые конструкции. В общем, скриптинг для шейдеров. Старый GLSL был к этому приближен, потом в него тоже ввели кучу нагромождений типа чтобы отвязать от фиксированного пайплайна. В итоге да, контроль есть, а удобства уже такого нет. Все эти раскладки переменных и т.д, которые нужно делать вручную. Это мне напомнило переход от LWJGL2 к LWJGL3. Да, дали значительно больше контроля, но теперь вместо условного Display.create() нужно прописывать по сути те же обёртки над GL, так и спрашивается, на кой чёрт такой фреймворк, который заставляет делать пользователя то же самое, только переименованными методами?

__________________
-Brain is dead-

Сообщить модератору | | IP: Записан
Сообщение: 213327

Старое сообщение 12-03-2023 19:03
- За что?
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 32188
Нанёс повреждений: 392 ед.

Рейтинг



Старый GLSL по прежнему можно использовать.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'

Сообщить модератору | | IP: Записан
Сообщение: 213329

Старое сообщение 13-03-2023 05:28
-
0r@ngE
Новичок

Дата регистрации: Oct 2005
Проживает: :закусывает::выпивает
Сообщений: 8
Возраст: 37

Рейтинг



Вопрос к XaeroX - гуглил "oblique frustum with inversed depth" и ничего толком не нашел, кроме, походу, твоей работы по линеаризации глубины в шейдере при юзании oblique frustum с инвертированной глубиной (потому что сам по себе oblique frustum там портит глубину и потому Unigine от него отказались)

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

У меня в рендере юзается инвертированный депс, и я пытаюсь запилить зеркало, если оно попадает во фрустум - отражаю камеру и рисую в рендертаргет, потом шлепаю на это зеркало.
Хочу клипать все по этому зеркалу чтоб не рисовалось то что за ним, и потому подумаю использовать oblique frustum, но кривизна рук и бедность мозга не позволяет получить результат.

Сообщить модератору | | IP: Записан
Сообщение: 213364

Старое сообщение 13-03-2023 19:32
- За что?
 XaeroX
Crystice Softworks

Дата регистрации: Oct 2005
Проживает: Торонто
Сообщений: 34498
Нанёс повреждений: 514 ед.
Возраст: 37

Рейтинг



Награды
 
[1 награда]


Цитата:
0r@ngE писал:
потому что сам по себе oblique frustum там портит глубину и потому Unigine от него отказались

Ничего он не портит, что за глупости? Прекрасно она линеаризуется, что я в статье и показал.
Собственно, я и писал статью для тех, кто пугается "порчи" глубины и не хочет закапываться в матан.
Цитата:
0r@ngE писал:
не подскажешь как подправить оригинальный код Эрика для модификации матрицы проекции если эта самая матрица уже с инвертированной глубиной ?

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

__________________
Правдой дорожить, лжи не потакать,
Дальних не судить, ближним помогать,
С тишиной сойтись на исходе дня
Научи меня, Родина моя!

Сообщить модератору | | IP: Записан
Сообщение: 213365

Старое сообщение 13-03-2023 19:45
-
0r@ngE
Новичок

Дата регистрации: Oct 2005
Проживает: :закусывает::выпивает
Сообщений: 8
Возраст: 37

Рейтинг



Цитата:
XaeroX писал:
К сожалению, у меня нет необходимых формул, но полагаю, что ты можешь проделать те же выкладки, что в статье, с учётом отличий в матрице проекции. Они вроде не критичные.


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

code:
// See: Oblique frustum: Eric Lengyel static void ClipProjectionMatrix(const Matrix& matView, Matrix& matProj, const Plane& inClipPlane) { Plane transformedPlane = matView.TransformPlane(inClipPlane); Vector clipPlane(transformedPlane.Normal()); clipPlane.SetScalar(3, -transformedPlane.Distance()); // Calculate the clip-space corner point opposite the clipping plane // as (Sgn(clipPlane.x), Sgn(clipPlane.y), 1, 1) and // transform it into camera space by multiplying it // by the inverse of the projection matrix float m0 = matProj.GetScalar(0, 0); float m5 = matProj.GetScalar(1, 1); float m8 = matProj.GetScalar(2, 0); float m9 = matProj.GetScalar(2, 1); float m10 = matProj.GetScalar(2, 2); float m14 = matProj.GetScalar(3, 2); Vector q ( (Sgn(clipPlane.GetScalar(0)) + m8) / m0, (Sgn(clipPlane.GetScalar(1)) + m9) / m5, 1.0f, (1.0f - m10) / m14 ); // Calculate the scaled plane vector Vector c = clipPlane * (1.0f / clipPlane.Dot4(q)); // Replace the third row of the projection matrix matProj.SetScalar(0, 2, -c.GetScalar(0)); matProj.SetScalar(1, 2, -c.GetScalar(1)); matProj.SetScalar(2, 2, -c.GetScalar(2)); matProj.SetScalar(3, 2, c.GetScalar(3)); }

Сообщить модератору | | IP: Записан
Сообщение: 213366

Старое сообщение 13-03-2023 19:52
- За что?
 XaeroX
Crystice Softworks

Дата регистрации: Oct 2005
Проживает: Торонто
Сообщений: 34498
Нанёс повреждений: 514 ед.
Возраст: 37

Рейтинг



Награды
 
[1 награда]


0r@ngE
Для начала рекомендую вернуть обычную (не инвертированную) матрицу проекции и убедиться, что oblique clipping в принципе работает. А уж потом можно будет доработать для инверсии.

__________________
Правдой дорожить, лжи не потакать,
Дальних не судить, ближним помогать,
С тишиной сойтись на исходе дня
Научи меня, Родина моя!

Сообщить модератору | | IP: Записан
Сообщение: 213367

Старое сообщение 13-03-2023 19:58
-
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 32188
Нанёс повреждений: 392 ед.

Рейтинг



Цитата:
0r@ngE писал:
Хочу клипать все по этому зеркалу чтоб не рисовалось то что за ним

При правильной реализации это автоматически получается.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'

Сообщить модератору | | IP: Записан
Сообщение: 213368

Старое сообщение 13-03-2023 20:05
-
0r@ngE
Новичок

Дата регистрации: Oct 2005
Проживает: :закусывает::выпивает
Сообщений: 8
Возраст: 37

Рейтинг



Цитата:
XaeroX писал:
Для начала рекомендую вернуть обычную (не инвертированную) матрицу проекции и убедиться, что oblique clipping в принципе работает. А уж потом можно будет доработать для инверсии.

Да вот сижу откручиваю инвертированную глубину назад чтоб проверить.

Цитата:
Дядя Миша писал:
При правильной реализации это автоматически получается.

В смысле? Мы модифицируем near plane чтоб оно клипалось, ибо clip planes умерли вместе с fixed pipeline. В этом и есть смысле oblique frustum. Проблема в том чтоб адаптировать его для проекционной матрицы которая построена для инвертированной глубины (считай far и near поменяны местами)

Сообщить модератору | | IP: Записан
Сообщение: 213372

Старое сообщение 13-03-2023 20:36
- За что?
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 32188
Нанёс повреждений: 392 ед.

Рейтинг



Цитата:
0r@ngE писал:
ибо clip planes умерли вместе с fixed pipeline

Да нет, они по прежнему работают. Ну по крайней мере в режиме совместимости.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'

Сообщить модератору | | IP: Записан
Сообщение: 213373

Старое сообщение 13-03-2023 20:42
-
0r@ngE
Новичок

Дата регистрации: Oct 2005
Проживает: :закусывает::выпивает
Сообщений: 8
Возраст: 37

Рейтинг



XaeroX

Открутил inversed depth (он тут у меня везде прибит гвоздями), вернул оригинальную функцию и теперь все клипается как положено.
Отличия моего кода от оригинального от Эрика только в том, что у него там OpenGL, и потому clip space depth в [-1;1] а у меня Vulkan и [0;1]

code:
// See: Oblique frustum: Eric Lengyel static void ClipProjectionMatrix(const Matrix& matView, Matrix& matProj, const Plane& inClipPlane) { Plane transformedPlane = matView.TransformPlane(inClipPlane); Vector clipPlane(transformedPlane.Normal()); clipPlane.SetScalar(3, -transformedPlane.Distance()); // Calculate the clip-space corner point opposite the clipping plane // as (Sgn(clipPlane.x), Sgn(clipPlane.y), 1, 1) and // transform it into camera space by multiplying it // by the inverse of the projection matrix float m0 = matProj.GetScalar(0, 0); float m5 = matProj.GetScalar(1, 1); float m8 = matProj.GetScalar(2, 0); float m9 = matProj.GetScalar(2, 1); float m10 = matProj.GetScalar(2, 2); float m14 = matProj.GetScalar(3, 2); Vector q ( (Sgn(clipPlane.GetScalar(0)) + m8) / m0, (Sgn(clipPlane.GetScalar(1)) + m9) / m5, -1.0f, (1.0f + m10) / m14 ); // Calculate the scaled plane vector Vector c = clipPlane * (1.0f / clipPlane.Dot4(q)); // Replace the third row of the projection matrix matProj.SetScalar(0, 2, c.GetScalar(0)); matProj.SetScalar(1, 2, c.GetScalar(1)); matProj.SetScalar(2, 2, c.GetScalar(2)); matProj.SetScalar(3, 2, c.GetScalar(3)); }


Задача в том, чтоб ее адаптировать под inversed depth (который уже в matProj), и вот тут я чот буксую к сожалению.

Подумал раз ты в Volatile Engine это сделал, может подскажешь

Отредактировано 0r@ngE 13-03-2023 в 20:45

Сообщить модератору | | IP: Записан
Сообщение: 213374

Старое сообщение 13-03-2023 20:43
- За что?
Тема: (Опционально)
Ваш ответ:



Переводчик транслита


[проверить длину сообщения]
Опции: Автоматическое формирование ссылок: автоматически добавлять [url] и [/url] вокруг интернет адресов.
Уведомление по E-Mail: отправить вам уведомление, если кто-то ответил в тему (только для зарегистрированных пользователей).
Отключить смайлики в сообщении: не преобразовывать текстовые смайлики в картинки.
Показать подпись: добавить вашу подпись в конец сообщения (только зарегистрированные пользователи могут иметь подписи).

Временная зона GMT. Текущее время 06:41. Новая тема    Ответить
Страницы (15): « Первая ... « 9 10 11 12 [13] 14 15 »   Предыдущая тема   Следующая тема
HLFX.Ru Forum HLFX.Ru Forum > Теория и практика > OpenGL > Нубские вопросы
Теория создания игры
2 голосов
Версия для печати | Отправить тему по E-Mail | Подписаться на эту тему

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

Правила Форума:
Вы not можете создавать новые темы
Вы not можете отвечать в темы
Вы not можете прикреплять вложения
Вы not можете редактировать ваши сообщения
HTML Код ВЫКЛ
vB Код ВКЛ
Смайлики ВКЛ
[IMG] Код ВКЛ
 

< Обратная связь - HLFX.ru >

На основе vBulletin
Авторское право © 2000 - 2002, Jelsoft Enterprises Limited.
Дизайн и программирование: Crystice Softworks © 2005 - 2024