Есть простенькое процедурное небо.
Мне нужно "перевернуть" его по оси Y, чтобы можно было отрисовывать в текстуру отражения воды.
Самому математических познаний не хватает, хотя чувствую что просто в паре-тройке мест где-то просто достаточно изменить знак переменной:
Вертексный шейдер:
Переверни uv.y = 1 - uv.y в шейдере для отражения.
А текстура неба, будет одной и тойже для всех.
ronniko
> Переверни uv.y = 1 - uv.y в шейдере для отражения.
К сожалению, в фрагментом шейдере это uv для процедурного неба не используется:
Фрагментный шейдер:
поэтому делается оно явно где-то в верктесном шейдере.
В общем, ваше процедурное небо должно быть зарисованно в текстуру, а потом эта текстура должна натягиваться на меши воды и неба.
Где текстура? Не вижу у тебя её ни где. Просто переверни её.
ronniko
iw4nna.rock
Mirrel
Ваши посты навели меня на мысль, что нужно быть проще и не нужно усложнять.
Поэтому я просто завел еще одну матрицы модели, перевернул полусферу неба по оси X на 180 градусов и использовал ее только для вычисления gl_Position. И получил то что хотел.
Все таки gamedev.ru - лучший сайт по геймдеву, если сам хоть немного пытаешься работать головой и не ждешь, что за тебя кто-то все сделает.
Всем спасибо!
Можно еще тебе на shadertoy, поиграть с твоей функцие convertColor генерации неба.
И найти как в ней инвертировать генерацию по у.
это не человек писал код, какой то тупняк генереный.
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));
}
Morkovkin
https://steps3d.narod.ru/tutorials/sky-tutorial.html
вот тут понятнее
fake.pdf
всё тупо и не по человечески, и текст топика и постановка вопроса. Какой идиот будет тратить время и шариться по этим туториалам с народ.ру, устаревшим, чтобы что?
Любая генерация в самом вертексном шейдере- это тупейшая дилетантская чушь. Всё должно генерится не реалтайм кодом, все вертексы.
Morkovkin
> всё тупо и не по человечески, и текст топика и постановка вопроса. Какой идиот будет тратить время и шариться по этим туториалам с народ.ру, устаревшим, чтобы что?
> Любая генерация в самом вертексном шейдере- это тупейшая дилетантская чушь. Всё должно генерится не реалтайм кодом, все вертексы.
Код со степс.3д на вес золота.
Если в результате генерация в вертексном шейдере дает хороший результат и не нагружает систему - почему нет?
И как генерить небо, которое меняет свет в зависимости от времени суток в реалтайме не реал-тайм кодом? Я чего-то не знаю?
MikeNew
Всё гуглится по procedural skydome.
Но щас такой image quality, что для этого чуть ли не отдельная тулза унжна.
Можно у юнити украсть https://github.com/UnityTechnologies/ScriptableRenderPipeline/tre… tion/HDRP/Sky
Тема в архиве.