Название: Стакан воды Отправлено: Igors от Июнь 05, 2020, 11:02 Добрый день
Как нарисовать (или отшейдить, отрендерить - мы знаем вумные слова) просто-напросто стакан воды? Что собсно должен делать шейдер для воды (да и для стеклянного стакана, проблемы в принципе те же)? Ведь вода не "белая", а "прозрачная" как помню из школьного учебника. Да, но мы прекрасно видим сколько воды/водки налито в стакан. Или "вода имеет блики" (спекуляр). Так это может быть небольшое пятнышко, а то и вовсе ничего И как использовать/организовать прозрачность? Многочисленные тьюториалы рекомендуют рисовать "от задних к передним" включая бленд, но как я сделаю это для того же стакана ? Он ведь одна модель, выходит нужно вычислять (на каждом кадре) какие полигоны "задние" (по отношению к камере) - гемор изрядный. Или использовать новую технику (тут ссылка мелькала), но там мало не покажется, причем нужна достаточно современная "карта". Так или иначе уже забот полно, а рез-т пока нулевой. Как же так, мы вооружились до зубов современными технологиями и отдали не одну сотню баксов за "карточку", а выxодит что простейшую, элементарную задачу делать нечем :'( Или может я "не по адресу", тут "таким не занимаются", нужно спрашивать в др месте, напр на гамдев (где много спецов). Ну глянем что там на эту тему, вот напр Цитировать Ну что же вы все так и пытаетесь мне на вредить, я то думал что вы и в правду решили мне помочь но аказывается выслали на почту черт пойми что. Так я и непонел что там было. Иероглефы какие-то. Ванька Жуков писал значительно лучше. НО я посмотрел эту книгу. Скучноватая и пошейдарам там неособо много примеров. пробывал прикрутиь к примерам свой шейдер ничего не получилось. НО все равно интересная книга буду читать. Ну ладно, так как же все-таки сделать стакан воды? Спасибо Название: Re: Стакан воды Отправлено: ViTech от Июнь 06, 2020, 13:09 А вода из-под крана или из чайника?
Название: Re: Стакан воды Отправлено: Пантер от Июнь 06, 2020, 14:24 Меня больше интересует полный ли стакан, наполовину полный или наполовину пустой.
Название: Re: Стакан воды Отправлено: Igors от Июнь 07, 2020, 10:35 Мда, как-то неважно с эрудицией, может сбивает с толку имя раздела. Ну хорошо, а как вообще это сделать? (с OpenGL или без - в принципе "детали реализации")
Название: Re: Стакан воды Отправлено: kuzulis от Июнь 07, 2020, 10:46 > Меня больше интересует полный ли стакан, наполовину полный или наполовину пустой.
А может там вообще спирт! Название: Re: Стакан воды Отправлено: Пантер от Июнь 07, 2020, 12:14 > Меня больше интересует полный ли стакан, наполовину полный или наполовину пустой. Вот не надо тут, в ТЗ была четко указана вода. И я уверен, что никакой OpenGL не сделает из воды спирт. Был тут один крутой девелопер, который вино из воды мог мутить, но он перешел на другой уровень.А может там вообще спирт! Название: Re: Стакан воды Отправлено: Igors от Июнь 08, 2020, 10:15 Так бум чего-то пердлагать, или только так, глазками лупать ? :)
Впрочем, спецы тоже не горят желанием думать, тем более делать. Нашелся лишь один паренек которого "зацепило". Вот его пробы (аттач). Ну конечно не perfect, но в общем - молодец. Прозрачность здесь не нужна, он поймал эту идею. Хотя может просто передрал ссылочку (я часто переоцениваю). Да, собсно воды пока нет. Критикуем (хаем чужую корову). Название: Re: Стакан воды Отправлено: kuzulis от Июнь 08, 2020, 10:17 А граненый сбацать слабо?
Название: Re: Стакан воды Отправлено: Пантер от Июнь 08, 2020, 10:44 Я предлагаю заменить фон на совковую обстановочку, заменить стакан на граненный и налить туда жигулей. Слабо на OpenGL забацать? Могут твои "современные технологии" такое?
Название: Re: Стакан воды Отправлено: Igors от Июнь 08, 2020, 11:10 Я предлагаю заменить фон на совковую обстановочку, заменить стакан на граненный и налить туда жигулей. Слабо на OpenGL забацать? Могут твои "современные технологии" такое? Это обычная повседневная работа трехмерщика, к современным технологиям отношения не имеет (как и к данной теме). Хотите граненый стакан? Берете моделер (приложение), в нем есть типовой инструмент revolve (фигура вращения), он делает любые стаканы. Хотите сменить обстановку - ну ее надо иметь (в виде моделей). Тогда рендерите ее 6 раз, и получившиеся 6 проекций склеиваете (кубиком или крестом). Это если хотите иметь обстановку в виде текстуры (карты отражения). Есть приложения облегчающие этот процесс. Ну или надыбать готовый имедж на просторах инета.В общем, носить Ваши чемоданы никакие технологии не будут :) Название: Re: Стакан воды Отправлено: Igors от Июнь 09, 2020, 09:53 А ось i варенички
Код: uniform samplerCube cubemap_texture; Критикуем, улучшаем.. Название: Re: Стакан воды Отправлено: Пантер от Июнь 09, 2020, 10:22 О, как - вместо стакана какой-то угребочный код подсунули.
Название: Re: Стакан воды Отправлено: Igors от Июнь 09, 2020, 15:50 О, как - вместо стакана какой-то угребочный код подсунули. Неужели Вам неизвестно что шейдеры уже лет 10 как священная корова OpenGL? Без них никуда, учить их - долг каждого, даже в Qt они поддерживаются. Поразбираем код, там несложно, ну вот хотя бы Код: float fRefractionR = textureCube( cubemap_texture, -refract(vView, vNormal, GLASS_ETA ) ).r; Название: Re: Стакан воды Отправлено: Apktyc от Июнь 09, 2020, 18:40 Предположим, что GLASS_ETA - IOR воздуха к IOR стакана. А коэффициенты - реализация дисперсии.
Но это не точно. З.Ы. Жаль автор шейдера удалился с геймдева и не раскрыл его тайны. Название: Re: Стакан воды Отправлено: navrocky от Июнь 10, 2020, 18:41 Я думаю с таким надо прямиком топать на shadertoy.com и искать похожие примеры. Ихний местный гуру Inigo Quilez с демо-команды RGBA и основатель этого ресурса охотно помогает советами и даже кодом, когда видит что кто-то мучается с шейдерами и у него это плохо выходит...
Вот еще статья из гугла, вроде как описывает сам процесс и шаги: https://developer.nvidia.com/gpugems/gpugems2/part-ii-shading-lighting-and-shadows/chapter-19-generic-refraction-simulation Название: Re: Стакан воды Отправлено: Igors от Июнь 11, 2020, 11:36 Предположим, что GLASS_ETA - IOR воздуха к IOR стакана. А коэффициенты - реализация дисперсии. Ну чего он хотел - и так ясно. Пусть карта отражения = белое пятно на черном фоне. Тогда очень может быть что красная компонента "дотянется" до пятна, а зеленая нет (или наоборот), получится нечто типа радуги.Но это не точно. З.Ы. Жаль автор шейдера удалился с геймдева и не раскрыл его тайны. Да, в реальной жизни такие эффекты есть, за счет того что различные световые волны имеют разные коэффициенты преломления/отражения.Но разница эта очень мала, поэтому надо очень постараться чтобы увидеть радугу. К данной реализации это не имеет никакого отношения. Ну.. программист имеет имеет право на (творческий) вымысел :) Я думаю с таким надо прямиком топать на shadertoy.com и искать похожие примеры. Ихний местный гуру Inigo Quilez с демо-команды RGBA и основатель этого ресурса охотно помогает советами и даже кодом, когда видит что кто-то мучается с шейдерами и у него это плохо выходит... Какой энергичный, предприимчивый молодой человек :) Конечно просторы инета безграничны, и вероятность "найти лучшее" есть всегда. Но ведь найденное нужно как-то осмыслить и оценить, как у Вас с этим? :)Вот еще статья из гугла, вроде как описывает сам процесс и шаги: https://developer.nvidia.com/gpugems/gpugems2/part-ii-shading-lighting-and-shadows/chapter-19-generic-refraction-simulation Ссылку Вы дали хорошую, только вот за стакан воды там не берутся. Действительно, для подводного дна - все корректно (разумеется с ограничениями техники карт). Но то же самое для стакана - нет. Впрочем трудно упрекать автора - ведь та же ошибка делается (и рекомендуется) в "канонических" тьюториалах (видел парочку), откуда все переписывают. Причем очевидно что сквозь стакан мы видим ну совсем не то что должны, но.. так написано в "ссылочке" - и все молчат. Не раз замечал что "технология", увы, работает как "машина отупления". Люди старшего поколения свято верили что все что написано в газете - правда, это было вполне простительно, тогда было другое время. Но сейчас доверять всякой ссылке - ой :'( Название: Re: Стакан воды Отправлено: Igors от Июнь 15, 2020, 07:02 Как работает карта/текстура "окружения". Считается что любая точка (что мы сейчас шейдим) стоит в центре бесконечно большой сферы/куба на котором наша текстура. Позиция объекта игнорируется, используется только вектор напр-я, он вычисляется в зависимости от использования (view, reflect, refract). Эта работает хорошо в роли sky/background, но для близлежащих объектов нет. Ведь как-то "облететь окружение" или "зайти за него" нельзя, мы можем только находиться внутри него. Напр на картинках выше злополучная трубочка поведет себя очень странно и быстро исчезнет если облетать стакан камерой слева или справа.
В случае преломления (refract) мы не получим даже корректного sky. Ведь объект имеет по меньшей мере еще одну заднюю стенку которая тоже преломляет и которую тоже надо учитывать. А так получается что мы смотрим на небо сквозь бесконечную толщу стекла. В общем, всю эту затею с textureCube следует признать "попыткой с негодными средствами". Какой-то разумной альтернативы не видно, а главное - не видно приличных рез-тов, хотя бы картинок, про анимацию уж молчу, дальше набросков типа выше дело не идет. Вот тебе, бабушка, и "технология". Заставили учить встроенный язык, осваивать не маленькое API и его обертки (в том же Qt). Понимаю, если хотим задействовать технологию - ей придется овладеть, надо так надо. Но елы-палы, почему для совершенно стандартной, банальной, повседневной и.т.п. задачи данная технология никаких средств не предоставляет ??? :'( Название: Re: Стакан воды Отправлено: navrocky от Июнь 15, 2020, 19:44 Наверное не совсем то, что надо, но это стакан, правда без воды :)
https://www.shadertoy.com/view/4s2GDV Название: Re: Стакан воды Отправлено: Igors от Июнь 16, 2020, 06:34 Наверное не совсем то, что надо, но это стакан, правда без воды :) Да, видел там интересные, но увы, они все hard-coded, т.е. модель/специфика стакана вбита в код. Меня бы устроило напр так (https://streamable.com/lysj2w) но видимо придется "закатать губу" :'(https://www.shadertoy.com/view/4s2GDV |