Форум: "Игры";
Текущий архив: 2007.04.15;
Скачать: [xml.tar.bz2];
ВнизСолнце на OpenGL Найти похожие ветки
← →
Pa5ha (2006-04-30 00:15) [0]Как сделать солнце, чтоб если на него смотришь, то весь экран заливается светом? А то вот просто билборд не смотрится.
Причем в играх сделано не с помощью гаммаконтроля, текстуры, а как-то по-другому. А то вот не знаю.
← →
XProger © (2006-04-30 00:19) [1]Рисуем прозрачный белый полигон на весь экран. С блендингом режима - сложение.
← →
Pa5ha (2006-04-30 01:03) [2]Не, не так. Я хочу, чтоб из центра свет расходился. Как быть? Т.е. как в одной гаме, где мне нравится солнце. Т.е. када в центре ничо не видно по краям ещё просвечивает. К тому же там как-бы лучи солнечного света.
← →
XProger © (2006-04-30 01:10) [3]Солнце жёлто-белое? От него идут лучи (биллборд). При аддитивном наложении будет так как ты сказал.
← →
Pa5ha (2006-04-30 01:18) [4]но лучи блин, при 1280х1024 просто идеальные. Градиент аднака. А если текстуру 128х128 (а в игре именно такая) растянуть на весь экран, то пиксели, ессно будут видны. Да и там не текстура юзается. Текстура тока солнце обозначает. Это я её сдуру на весь экран растянул.
← →
Думкин © (2006-04-30 05:01) [5]> Pa5ha (30.04.06 01:18) [4]
Ну укажи гамму, чтобы и другие заценили. А то мне вот в одной игре кот понравился, но все что предложат - не то.
А лучи - их видно только в атмосфере и на частицах. Как и луч лазера.
← →
antonn © (2006-04-30 06:29) [6]блум какой-то, видимо... только прогрессирующий:)
← →
Pa5ha (2006-04-30 19:59) [7]Думкин, RCFsim601 :)
ладно, думаю дальше. А вообще, есть примеры, как солнце можно сделать? В коде?
← →
Fosgen (2006-05-04 10:04) [8]Млин, ну есть же готовое решение - называется Lens FX - имитация бликов (на стекле, оптике, в глазу) от источников света.
Принцип работы:
1. Если источник света не загораживается никаким предметом - рисуется билборд на "поверхности" экрана - т.е. с нулевой глубиной размещения. Если загораживается - рисуется только один маленький билборд.
2. Координата билборда совпадает с проецированными на плоскость экрана координатами источника света. Если источник света загорожен от камеры - координаты билборда, соответствуют пространственным координатам источника света.
3. могут быть вторичные билборды - с радиально (относительно центра экрана и проходя от источника света) размещенными бликами разной формы\размера\оттенка... Они только в случае видимого источника света.
4. Текстуры для билбордов могут быть как заранее заготовлены, так и расчитываемы в ран-тайме.
Пример резализации - в последних версиях GLScene - есть готовый эффект LensFX с расчетом текстур в ран-тайме.
http://www.delphi3d.net/download/lensflare.zip - давно качал, не знаю живая ли еще ссылка.
http://www.delphi3d.net/download/corona.zip - на ту же тему.
← →
Lambda (2006-05-04 12:51) [9]Fosgen, твое решение - явно не то, чего просит человек. Причем здесь блики? Ему, как правильно заметил antonn, нужен блум.
Посмотреть на реализацию можно здесь http://www.delphi3d.net/download/hdr_fbo.zip
Правда, Том написал алгоритм честного расчета HDR, котрый совершенно не годится для динамичных игр :), так что тебе, Pa5ha, придется оптимизировать алгоритм.
Советую почитать, как сделать качественный фейк. Смотреть здесь:
http://www.dyingduck.com/sotc/making_of_sotc.html
← →
grisme © (2006-05-04 19:21) [10]> Pa5ha (30.04.06 00:15)
Тебе нужен Glow-эффект. Принцип его сказал XProger © (30.04.06 00:19) [1]
← →
XProger © (2006-05-04 21:47) [11]grisme, глоу немного иначе делается :)
- рендерим сцену в текстуру мелкого размера (до 128х128)
- смазываем это дело несколько раз до нужной кондиции
- рендерим сцену на весь экран
- поверх всего этого с аддитивным наложением накладываем прозрачный полигон с нашей текстуркой
В итоге получим glow или bloom эффект (как хотите ;)
← →
Pa5ha (2006-05-04 21:49) [12]А как сделать чтоб на гф2 работало? :)
GLScene не знаю.
> Fosgen (04.05.06 10:04) [8]
мне нужен не алгоритм проверки видимости блика а собственно отрисовка солнца, чтоб красиво. На шейдерах, конечно, красиво, но мощности и ресурсы не позволяют :) Как Прогер сказал сделать то не проблема. Я так сделал. Просто при больших размерах появляется зернистость текстуры. При маленькой текстуре экран светом не заливается. Текстура из игры. В игре зернистости нет. Воть =)
← →
Fosgen (2006-05-05 10:10) [13]>Lambda
Для тех кто трудный и недоступный - поясняю: принцип создания эффекта LensFX - именно то что надо человеку - создание Glow, Streak, Galo эффектов от солнца.
Для тех кто не знает соответствия английских терминов русским понятиям описываю:
Glow - большой светящийся ореол вокруг источника света
Streak - лучи, видимые глазом\оптикой, от источника света
Galo - светящийся круг, вокруг источника света.
Есть еще ряд эффектов, но все строятся по одному и тому же принципу - при помощи прозрачных билбордов. Как сказал XProger:"С блендингом режима - сложение".
Можно еще постобработкой отрендереного изображения, но это со своими сложностями связано.
>Pa5ha
А чтобы было красиво - и заодно - реалистично - НУЖЕН алгоритм проверки видимости источника света. Про видимость блика я не писал - внимательно прочти. А-то у тебя солнце стеной закроется, а ослепляющий (Glow) эффект от него - останется?
Насчет зернистости текстуры - либо посмотри алгоритмы в примерах, на которые я дал ссылки - там вроде есть расчет текстур в рантайме. Не сильно затратный по ресурсам. Либо тебе нужен вариант эдакого антиалиасинга.
← →
Lambda (2006-05-05 11:44) [14]Fosgen, я уже понял, что с адекватным восприятием у тебя определенные проблемы, поэтому еще раз отсылаю тебя к первому посту Pa5ha:
> Как сделать солнце, чтоб если на него смотришь, то весь
> экран заливается светом?
ГДЕ ты видишь "большой светящийся ореол вокруг источника света"?
Ты со своими "уникальными" идеями давно устарел, потому что glow теперь уже трактуется иначе, чем 5 лет назад, которые ты, очевидно, провел под общим наркозом.
Требуемый bloom-эффект (понятно, что фейковый) без использования шейдеров (Pa5ha, давно пора обновить систему :)) можно получить только по методу XProger [11].
← →
grisme © (2006-05-05 14:13) [15]XProger © (04.05.06 21:47) [11]
Глоу,насколько я помню, это же эффект "свечения",а не размытия.:-X
← →
Fosgen (2006-05-05 14:31) [16]>grisme ©
Размытие для немного другого эффекта - эдакого "затуманивания" сцены.
>XProger ©
Только сдается мне что glow-эффект и bloom-эффект - несколько разные вещи... Glow - исключительно от источников света зависит. А Bloom - скорее "атмосферный" эффект.
>Lambda
А ты вообще шел бы лесом... Адекватный ты наш... Посмотрел бы как в последних версиях 3D MAX"а трактуется glow... Сравнивая две трактовки я почему-то (интересно - почему?) выбираю - MAX. А ты - никуда не уперся со своей трактовкой, однако.
← →
XProger © (2006-05-05 14:48) [17]Fosgen, эти методом можно создать оба эффекта (пусть и LDR bloom, но всё же)
← →
Fosgen (2006-05-05 16:14) [18]>XProger
Согласен. Только визуально эффекты-то будут разные все же... И если для bloom"а требуется "размытие" всей сцены, то для Glow - размытие текстуры "свечения".
← →
Lambda (2006-05-05 16:25) [19]Fosgen, лесом будешь сам топать к своей бабушке, чтобы рассказать ей, что такое glow. Сегодня это частный случай HDR-эффектов. И здесь, неадекватный ты наш, не форум 3D-моделеров, а форум программистов графики, поэтому я (интересно, почему?), выбираю трактовку, имеющую прямое отношение к реализации требуемого эффекта в игре, а не в среде моделирования.
Ты человеку хоть что-нибудь посоветовал, кроме не относящихся к теме бликов? Нет? Тогда не разводи флейм.
Pa5ha, думаю ты уже понял, что совет XProger"а для тебя будет лучшим решением, ну а если разживешься картой с поддержкой шейдеров, то тебе прямая дорога сюда [9]. Удачи
← →
XProger © (2006-05-05 16:51) [20]Суть то одна - рендерим всё светящееся и размываем :)
← →
Lambda (2006-05-05 17:06) [21]Именно :)
← →
Pa5ha (2006-05-05 18:14) [22]Я понимаю, что Вы имеете ввиду, но это чуточку не то. Как рисовать билборды, как рисовать хало и как проверять их видимость я знаю. Меня интересует только сам вот такой эффект, который Вы сможете найти по ниже приведенным ссылкам +)
http://sampo.ru/~pashav/files/effect/1.jpg - солнце-билборд с текстурой.
http://sampo.ru/~pashav/files/effect/2.jpg - начинает заливаться светом. Прошу заметить, что экран заливается светом по направлению от солнца, а не просто полигон на вест экран выводится.
http://sampo.ru/~pashav/files/effect/3.jpg - продолжает
http://sampo.ru/~pashav/files/effect/4.jpg - вот так выглядит солнце, которое я хочу сделать. Экран почти полностью залит светом. Причем заливается, прошу заметить от солнца, а не просто весь экран.
Все картинки весят по 10 кб. Некоторые 9. Radio Control Flight Simulator 6.01.
А есть реализация Lens flare не на ГЛСцене?
← →
XProger © (2006-05-05 18:37) [23]bloom с доп текстурами (полигон на весь экран)
← →
Pa5ha (2006-05-05 22:23) [24]А можно чуточку подробнее?
ЗЫ.: Солнце занимает не весь экран, а маленькую его часть (обычно)
← →
Fosgen (2006-05-06 08:50) [25]Епрст... Pa5ha, а ты мой пост [8], где по-пунктам расписано внимательно причитал?
А то тут всякие типа Lambda, воду мутят... Ты их слушай побольше - вообще ничего не поймешь, он только крутыми терминами кидается, и пристебывается к чему попало. Потому как все за чужими исходниками охотится - ко мне тут подъезжал - пытался под видом помощи и интереса "выцыганить" сорцы моего проекта - обломался и очень за это обиделся. С тех пор - все связанное со мной обливает грязью. Так что ты на нашу перепалку внимания не обращай.
Я точно знаю как относительно дешевым способом делать твой эффект. Частично это пересекается с тем что тебе написал XProger.
Так вот - повторяю:
На твоих скриншотах имеется самый стандартный Glow эффект. Причем создается он именно так как я описывал - с учетом экранных координат источника света. Потому и получается что заливается ОТ источника света - т.е. от солнца. Для этого "размывать" всю картинку не надо - только текстуру для билборда.
http://nehe.gamedev.net/data/lessons/delphi/lesson36.zip - ссылка на пример по радиальному размытию (Radial Blur) для текстуры.
http://nehe.gamedev.net/data/lessons/delphi/lesson44.zip - реализация ВСЕХ эффектов Lens Flare (не на GLScene), связанных с источниками света, включая требуемый тебе Glow. Реализация - с учетом "перекрытия" источника света.
Что тебе мешает билборд Glow, для создания "слепящего" эффекта - масштабировать так как тебе надо, до требуемых величин? Таким образом получишь - увеличивающуюся "заливку" начинающуюся от солнца...
Мда... И шейдеры тут как мне кажется - нафиг не нужны...
← →
Lambda (2006-05-06 14:15) [26]Fosgen, если с головой проблемы, то нафига на форум свои помои выливать? Я ведь могу не полениться и нашу, хм.., переписку выложить на всеобщее обозрение (модератору: разумеется не на форуме :)). Не хочешь оценить реакцию здравомыслящих людей на "происки охотника за чужими сорцами"?
В принципе, о сложностях твоих отношений с собственным мыслительным аппаратом, говорит хотя бы твоя фраза из [25] поста:
> Так вот - повторяю:
> На твоих скриншотах имеется самый стандартный Glow эффект.
>
Ну что тут еще можно сказать... А то Pa5ha не знал, что у него там имеется. Вообще-то человек интересовался тем, как ему это реализовать.
Ну а теперь по-существу :)
Pa5ha, еще раз перечитай подробное изложение [11] алгоритма создания эффекта? Потом скажи спасибо XProger"у ;)
← →
Fosgen (2006-05-06 20:03) [27]2: Lambda - давай выкладывай. Только сдается мне что если я выложу у себя на ресурсе, наши варианты будут несколько отличаться и опять же никто не докажет у кого - верный. Самое веселое - ты хоть понял что взбеленился именно тогда когда тебе в исходниках отказали? И до сих - пор это для тебя самое больное место - видать я точно угадал... И вообще, может пояснишь - если мой проект такой отстой, то чего же ты в первых писмах писал "в принципе, идея меня заинтересовала" (цит.) и вообще - чего лез в участники, если как ты позже писал: "нафиг не надо ни
игрокам, ни, тем более, издателю"? Вот уж у кого проблемы с головой - сам себ противоречишь, али просто заврался? И кстати такое поведение как твое, при переписке демонстрируют исключительно подонки - я тебя кстати ни в одном письме не оскорблял и никаких эпитетов к тебе не применял. И уж тем более - не блокировал тебе возможность ответить на любые возражения. А такие твои поступки - уже просто показатель трусости.
>Pa5ha, я думаю тебе уже достаточно вариантов предложили. Решай сам какой тебе более удобен - любой из них - рабочий. Потом, можешь отмахнуться - какой дал тот эффект, что тебе требовался. А то мы тут глотки рвем друг-другу, а может все дело в неточном понимании твоих задач.
← →
Pa5ha (2006-05-14 13:11) [28]
> Что тебе мешает билборд Glow, для создания "слепящего" эффекта
> - масштабировать так как тебе надо, до требуемых величин?
> Таким образом получишь - увеличивающуюся "заливку" начинающуюся
> от солнца...
про этот косяк я уже писал. При масштабировании появляются пиксели текстуры. Это была моя первая идея :)
http://nehe.gamedev.net/data/lessons/delphi/lesson44.zip - скачал, но к сожалению не смог оценить без набора текстур то, что хотел показать автор. У меня просто хало появляется и исчезает без эффектов =)
Радиальное размытие - интересно, можно попробовать поиграться.
Я очень ценю мнение XProger-a, но без примера я буду пытаться сделать что-нить стоящее этим методом, не зная что должно получиться в итоге до второго пришествия ;)
← →
XProger © (2006-05-14 14:36) [29]http://img118.imageshack.us/img118/2658/bloom7qj.jpg - пример работы простенького эффекта Bloom (авторTWINc)
Суть такая, рендерим всё что светится в тектуру, размазываем текстуру и выводим поверх уже отрисованного изображения с аддитивным блендингом.
Неоптимизированный пример:
procedure render_bloom;
const
BLUR_COUNT = 8; // кол-во проходов смазывания
var
sbuf : array [0..bw - 1, 0..bw - 1] of TRGBA;
procedure Blur;
var
idx : Integer;
x, y : Integer;
R, G, B : Integer;
dbuf : array [0..bw - 1, 0..bw - 1] of TRGBA;
procedure get(x, y: Integer);
begin
if (x > -1) and (y > -1) and (x < bw) and (y < bw) then
begin
inc(R, sbuf[x, y].R);
inc(G, sbuf[x, y].G);
inc(B, sbuf[x, y].B);
inc(idx);
end;
end;
begin
for y := 0 to bw - 1 do
for x := 0 to bw - 1 do
begin
idx := 0;
R := 0;
G := 0;
B := 0;
get(x - 1, y - 1);
get(x, y - 1);
get(x + 1, y - 1);
get(x + 1, y);
get(x, y);
get(x - 1, y);
get(x - 1, y + 1);
get(x, y + 1);
get(x + 1, y + 1);
dbuf[x, y].R := R div idx;
dbuf[x, y].G := G div idx;
dbuf[x, y].B := B div idx;
dbuf[x, y].A := 255;
end;
Move(dbuf, sbuf, SizeOf(dbuf));
end;
var
i : Integer;
begin
glViewport(0, 0, bw, bw);
// рисуем
glBindTexture(GL_TEXTURE_2D, Buffer);
glCopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 0, 0, bw, bw, 0);
glGetTexImage(GL_TEXTURE_2D, 0, GL_RGBA, GL_UNSIGNED_BYTE, @sbuf);
for i := 1 to BLUR_COUNT do
Blur;
glTexImage2D(GL_TEXTURE_2D, 0, 4, bw, bw, 0, GL_RGBA, GL_UNSIGNED_BYTE, @sbuf);
glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
glViewport(0, 0, glWidth, glHeight);
// рисуем
glBlendFunc(GL_SRC_ALPHA, GL_ONE);
// рисуем полигон с текстурой Buffer на весь viewport
end;
bw - размер текстуры
← →
Fosgen (2006-05-15 10:42) [30]2 Pa5ha:
Возьми билборд, отмасштабируй до нужного размера, затем - "размой" по примеру Xproger"а и получишь то что надо...
Страницы: 1 вся ветка
Форум: "Игры";
Текущий архив: 2007.04.15;
Скачать: [xml.tar.bz2];
Память: 0.55 MB
Время: 0.041 c