ПрограммированиеФорумГрафика

Перевернуть небо

#0
10:33, 3 июня 2024

Есть простенькое процедурное небо.
Мне нужно "перевернуть" его по оси Y, чтобы можно было отрисовывать в текстуру отражения воды.
Самому математических познаний не хватает, хотя чувствую что просто в паре-тройке мест где-то просто достаточно изменить знак переменной:
Вертексный шейдер:

+ Показать
#1
11:51, 3 июня 2024

Переверни uv.y = 1 - uv.y в шейдере для отражения.
А текстура неба, будет одной и тойже для всех.

#2
12:16, 3 июня 2024

ronniko
> Переверни uv.y = 1 - uv.y в шейдере для отражения.
К сожалению, в фрагментом шейдере это uv для процедурного неба не используется:
Фрагментный шейдер:

+ Показать

поэтому делается оно явно где-то в верктесном шейдере.

#3
12:43, 3 июня 2024

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

#4
14:07, 3 июня 2024

  Где текстура? Не вижу у тебя её ни где. Просто переверни её.

#5
14:40, 3 июня 2024

ronniko
iw4nna.rock
Mirrel
Ваши посты навели меня на мысль, что нужно быть проще и не нужно усложнять.
Поэтому я просто завел еще одну матрицы модели, перевернул полусферу неба по оси X на 180 градусов и использовал ее только для вычисления gl_Position. И получил то что хотел.

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

#6
15:07, 3 июня 2024

Можно еще тебе на shadertoy, поиграть с твоей функцие convertColor генерации неба.
И найти как в ней инвертировать генерацию по у.

#7
20:47, 3 июня 2024

это не человек писал код, какой то тупняк генереный.

vec3  perezFunc ( float t, float cosTheta, float cosGamma )
{
  float  gamma      = acos ( cosGamma );
  float  cosGammaSq = cosGamma * cosGamma;
  //float  aY =  0.17872 * t - 1.46303;
  //float  bY = -0.35540 * t + 0.42749;
  //float  cY = -0.02266 * t + 5.32505;
  //float  dY =  0.12064 * t - 2.57705;
  //float  eY = -0.06696 * t + 0.37027;
  //float  ax = -0.01925 * t - 0.25922;
  //float  bx = -0.06651 * t + 0.00081;
  //float  cx = -0.00041 * t + 0.21247;
  //float  dx = -0.06409 * t - 0.89887;
  //float  ex = -0.00325 * t + 0.04517;
  //float  ay = -0.01669 * t - 0.26078;
  //float  by = -0.09495 * t + 0.00921;
  //float  cy = -0.00792 * t + 0.21023;
  //float  dy = -0.04405 * t - 1.65369;
  //float  ey = -0.01092 * t + 0.05291;
 
  return vec3 ( (1.0 + ubo.A.x * exp(ubo.B.x/cosTheta)) * (1.0 + ubo.C.x * exp(ubo.D.x * gamma) + ubo.E.x * cosGammaSq),
                (1.0 + ubo.A.y * exp(ubo.B.y/cosTheta)) * (1.0 + ubo.C.y * exp(ubo.D.y * gamma) + ubo.E.y * cosGammaSq),
          (1.0 + ubo.A.z * exp(ubo.B.z/cosTheta)) * (1.0 + ubo.C.z * exp(ubo.D.z * gamma) + ubo.E.z * cosGammaSq));
}

#8
22:53, 3 июня 2024

Morkovkin
https://steps3d.narod.ru/tutorials/sky-tutorial.html
вот тут понятнее

#9
10:12, 4 июня 2024

fake.pdf
всё тупо и не по человечески, и текст топика и постановка вопроса. Какой идиот будет тратить время и шариться по этим туториалам с народ.ру, устаревшим, чтобы что?
Любая генерация в самом вертексном шейдере- это тупейшая дилетантская чушь. Всё должно генерится не реалтайм кодом, все вертексы.

#10
10:36, 4 июня 2024

Morkovkin
> всё тупо и не по человечески, и текст топика и постановка вопроса. Какой идиот будет тратить время и шариться по этим туториалам с народ.ру, устаревшим, чтобы что?
> Любая генерация в самом вертексном шейдере- это тупейшая дилетантская чушь. Всё должно генерится не реалтайм кодом, все вертексы.
Код со степс.3д на вес золота.
Если в результате генерация в вертексном шейдере дает хороший результат и не нагружает систему - почему нет?
И как генерить небо, которое меняет свет в зависимости от времени суток в реалтайме не реал-тайм кодом? Я чего-то не знаю?

#11
11:15, 4 июня 2024

MikeNew
Всё гуглится по procedural skydome.
Но щас такой image quality, что для этого чуть ли не отдельная тулза унжна.
Можно у юнити украсть https://github.com/UnityTechnologies/ScriptableRenderPipeline/tre… tion/HDRP/Sky

ПрограммированиеФорумГрафика

Тема в архиве.