forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Xors3D (http://forum.boolean.name/forumdisplay.php?f=126)
-   -   Странное. (http://forum.boolean.name/showthread.php?t=15405)

dsd 26.11.2011 21:27

Ответ: Странное.
 

Это анализ нормали.
float deg=dot(input.viewVec,input.normal);
if(deg>0.98){diffuse=float4(1,1,0,1);}
Причем как управлять позицией мне не ясно :)


Это анализ расстояния от пикселя в центре солнца
float3 sunpos=50*float3(0,1,0);
float3 pixpos=input.pos2.xyz;
float3 vecpixsun=sunpos-pixpos;
float dist=length(vecpixsun);
if(dist<4){diffuse=float4(1,1,0,1)}
И, да простит меня Мока, управление позицией элементарно, диаметр тоже легко изменить, ну и контур менее зависим от геометрии небосклона.

dsd 26.11.2011 23:44

Ответ: Странное.
 

А еще эти облачка плавно меняются :)

.Squid 27.11.2011 03:05

Ответ: Странное.
 
Погляди на оф.форуме. Там товарищ ascii1457 уже делал шейдеры неба с солнцем. Может наведет на какие-то мысли.

moka 27.11.2011 03:37

Ответ: Странное.
 
Да и я в RUST'е делал, с изменением размера динамично исходя из положеня, ведь в зените будет маленькое..
Вот вырезки из шейдера, за стиль приношу извенения, раньше опыта и дисциплины не хватало:

Код:

VecSky.xyz = normalize(PosCam-IN.pWorld);
DotSun = pow(max(dot(VecSun,VecSky.xyz),0.0f),SizeSun);
Color.rgb += DotSun;

VecSky.xyz - это тупо вектор от центра камеры к обрабатываемому пикселю.
VecSun - это вектор (переменная), которую ты посылаешь с кода. Вектор от камеры, где солнце находится, например { 0,1,0 } - это вертикально сверху.
SizeSun нада большим числом, попробуй сперва 10f например, потом поэксперементируй, я не помню уже.
Собственно и всё. На деле всё ОЧЕНЬ просто, и можно без проблем регулировать и положение и размер, и цвет да что угодно. Не мудри с нормалями - они не стабильны, используй как предложил вектор между камерой и позицией пикселя.

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

dsd 27.11.2011 03:53

Ответ: Странное.
 
Мока, я сделал по другому. Семантикой получаю направление света. Умножаю его на -1. Умножаю на масштаб вывернутой наизнанку сферы прикидывающейся небосводом. Це позиция светила на небесной сфере. Потом вычитая из позиции центра солнца позициею пикселя имею вектор. Длину которого узнать изноупроблем. Если длина меньше радиуса светила, то цвет подменяется на цвет солнца в этой точке.

Профит. Автоматически управляемое хорсом солнце одинакового диаметра независимо от позиции. И да, я не использую нормали, я просто рисую на сфере. Надо бы вкуриться в то как расписывают купола, но это будет уже не нормально :)

Просто снижение яркости картинки при взгляде на солнце это HDR? По моему это должно быть более сложным анализом картинки, основанном на 3-4 кадрах хотя бы за секунду, что ли.

moka 27.11.2011 04:00

Ответ: Странное.
 
Вложений: 4
Цитата:

Сообщение от dsd (Сообщение 211381)
Мока, я сделал по другому. Семантикой получаю направление света. Умножаю его на -1. Умножаю на масштаб вывернутой наизнанку сферы прикидывающейся небосводом. Це позиция светила на небесной сфере. Потом вычитая из позиции центра солнца позициею пикселя имею вектор. Длину которого узнать изноупроблем. Если длина меньше радиуса светила, то цвет подменяется на цвет солнца в этой точке.

Профит. Автоматически управляемое хорсом солнце одинакового диаметра независимо от позиции. И да, я не использую нормали, я просто рисую на сфере. Надо бы вкуриться в то как расписывают купола, но это будет уже не нормально :)

Получается что тебе надо обязательно ставить сферу на положение в шейдере как и размер сферы неба? А что с триангуляцией неба? Или например заюзать хочешь кубмапу? Мой вариант имхо, более независимый от тонкостей, и выдаёт не резкий результат (края не пиксильные).
Делай не расстояние пикселя к сфере солнца, а по векторам, как предлагаю, будет то же самое что у тебя, только без пикселизации на гранях, и абсолютной не зависимости от геометрии неба (куб, сфера, да хоть плэйн перед камерой, и т.п.).
Вектор солнца - также из семантики можно без проблем вычислить - это тупо нормализированная позиция солца - позиция камеры.

UPD:
Вот сделал скрины, далёкий 2008ой..

dsd 27.11.2011 04:08

Ответ: Странное.
 
Мока, наши деревья в этом вопросе сильно разные :)

Говоря про пикселезацию это ты намекаешь на то, что я края у солнца не смазал? Я там собирался какой-нить сложный градиент сочинить. Я скачал твой раст, завтра буду потрошить :)

moka 27.11.2011 04:16

Ответ: Странное.
 
Цитата:

Сообщение от dsd (Сообщение 211384)
Мока, наши деревья в этом вопросе сильно разные :)

Говоря про пикселезацию это ты намекаешь на то, что я края у солнца не смазал? Я там собирался какой-нить сложный градиент сочинить. Я скачал твой раст, завтра буду потрошить :)

Ну глянь скрины выше.

Да и это скорее я не как "лучше я думаю", а скорее с точки зрения кривости самой реализации. Если рассматривать реализацию чего-либо, алгоритма, механизма, шаблона, интерфейса, да чего угодно, то она должна как можно меньше зависеть от "потайных" правил. Например у тебя есть они - длина вектора ДОЛЖНА быть радиусом сферодомы неба. Сферодома - должна иметь достаточную триангуляцию, иначе будут артефакты.
Все эти "или", "если", и т.п. - плохой тон в любой сфере программирования. Старайся их избегать, либо реюзабельность идей и даже исходника - сомнительна и специфична, тем более другими людьми.

.Squid 28.11.2011 02:55

Ответ: Странное.
 
Мока, а можно машиной из Раста воспользоваться в примерах Хорса?

moka 28.11.2011 03:13

Ответ: Странное.
 
Цитата:

Сообщение от .Squid (Сообщение 211457)
Мока, а можно машиной из Раста воспользоваться в примерах Хорса?

Надо у m_512 (Михаил) спросить..

HolyDel 28.11.2011 09:17

Ответ: Странное.
 
а вас не стремает писать сложный шейдер для фона? не проще солнышко по старинке нарисовать поверх неба? или лучше небо поверх солнца?

Arles 28.11.2011 10:01

Ответ: Странное.
 
Крутые пацаны не ищут легких путей! )

dsd 28.11.2011 15:31

Ответ: Странное.
 

Я походу придумал как можно сжульничать и обойтись текстурами без расчетов.

moka 28.11.2011 16:40

Ответ: Странное.
 
Цитата:

Сообщение от HolyDel (Сообщение 211470)
а вас не стремает писать сложный шейдер для фона? не проще солнышко по старинке нарисовать поверх неба? или лучше небо поверх солнца?

Для неба, это вовсе не сложно, намного тяжелее вода, или тени, во много раз.

Можно сделать и текстурой уху, но никакой динамики толком не сделаешь, тем более зачем тебе текстура, если это тупо окружность? Тем более если хочешь использовать полноценный HDR, то использование цвета который ярче чем 1.0f, то именно процедурно это намного лучше реализовывать. Изменение размера тоже. Да и шустрее, чем выборки делать постоянные.
Вот например использовать текстуру для проекции спутников в небе - уже другой вариант, но и тут снова, если нужна реально красота и реалестичная атмосфера, тогда вообще нужно это дело делать используя атмосферный скаттеринг (подобие Volumetric Fog), чтобы атмосфера также влияла и на всё окружение (туман), и солнце уже можно делать тупо сферой в космосе, как и спутники.

В общем dsd - не занимайся извратами, серьёзно.. Это тебе пользы не принесёт.

dsd 28.11.2011 17:10

Ответ: Странное.
 
Книга Притчи > Глава 21 > Стих 29:
Человек нечестивый дерзок лицом своим, а праведный держит прямо путь свой.

Книга Притчи > Глава 28 > Стих 10:
Совращающий праведных на путь зла сам упадет в свою яму, а непорочные наследуют добро.

:-D


Часовой пояс GMT +4, время: 00:39.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot