Russian Qt Forum
Ноябрь 22, 2024, 01:02 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Стакан воды  (Прочитано 11871 раз)
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« : Июнь 05, 2020, 11:02 »

Добрый день

Как нарисовать (или отшейдить, отрендерить - мы знаем вумные слова) просто-напросто стакан воды?

Что собсно должен делать шейдер для воды (да и для стеклянного стакана, проблемы в принципе те же)? Ведь вода не "белая", а "прозрачная" как помню из школьного учебника. Да, но мы прекрасно видим сколько воды/водки налито в стакан. Или "вода имеет блики" (спекуляр). Так это может быть небольшое пятнышко, а то и вовсе ничего

И как использовать/организовать прозрачность? Многочисленные тьюториалы рекомендуют рисовать "от задних к передним" включая бленд, но как я сделаю это для того же стакана ? Он ведь одна модель, выходит нужно вычислять (на каждом кадре) какие полигоны "задние" (по отношению к камере) - гемор изрядный. Или использовать новую технику (тут ссылка мелькала), но там мало не покажется, причем нужна достаточно современная "карта". Так или иначе уже забот полно, а рез-т пока нулевой.

Как же так, мы вооружились до зубов современными технологиями и отдали не одну сотню баксов за "карточку", а выxодит что простейшую, элементарную задачу делать нечем  Плачущий

Или может я "не по адресу", тут "таким не занимаются", нужно спрашивать в др месте, напр на гамдев (где много спецов). Ну глянем что там на эту тему, вот напр
Цитировать
Ну что же вы все так и пытаетесь мне на вредить, я то думал что вы и в правду решили мне помочь но аказывается выслали на почту черт пойми что. Так я и непонел что там было. Иероглефы какие-то.
НО я посмотрел эту книгу. Скучноватая и пошейдарам там неособо много примеров. пробывал прикрутиь к примерам свой шейдер ничего не получилось. НО все равно интересная книга буду читать.
Ванька Жуков писал значительно лучше.

Ну ладно, так как же все-таки сделать стакан воды?

Спасибо
Записан
ViTech
Гипер активный житель
*****
Offline Offline

Сообщений: 858



Просмотр профиля
« Ответ #1 : Июнь 06, 2020, 13:09 »

А вода из-под крана или из чайника?
Записан

Пока сам не сделаешь...
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #2 : Июнь 06, 2020, 14:24 »

Меня больше интересует полный ли стакан, наполовину полный или наполовину пустой.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #3 : Июнь 07, 2020, 10:35 »

Мда, как-то неважно с эрудицией, может сбивает с толку имя раздела. Ну хорошо, а как вообще это сделать? (с OpenGL или без - в принципе  "детали реализации")
Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #4 : Июнь 07, 2020, 10:46 »

> Меня больше интересует полный ли стакан, наполовину полный или наполовину пустой.

А может там вообще спирт!
Записан

ArchLinux x86_64 / Win10 64 bit
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #5 : Июнь 07, 2020, 12:14 »

> Меня больше интересует полный ли стакан, наполовину полный или наполовину пустой.

А может там вообще спирт!
Вот не надо тут, в ТЗ была четко указана вода. И я уверен, что никакой OpenGL не сделает из воды спирт. Был тут один крутой девелопер, который вино из воды мог мутить, но он перешел на другой уровень.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #6 : Июнь 08, 2020, 10:15 »

Так бум чего-то пердлагать, или только так, глазками лупать ? Улыбающийся

Впрочем, спецы тоже не горят желанием думать, тем более делать. Нашелся лишь один паренек которого "зацепило". Вот его пробы (аттач). Ну конечно не perfect, но в общем - молодец. Прозрачность здесь не нужна, он поймал эту идею. Хотя может просто передрал ссылочку (я часто переоцениваю).

Да, собсно воды пока нет. Критикуем (хаем чужую корову).
Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #7 : Июнь 08, 2020, 10:17 »

А граненый сбацать слабо?
Записан

ArchLinux x86_64 / Win10 64 bit
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #8 : Июнь 08, 2020, 10:44 »

Я предлагаю заменить фон на совковую обстановочку, заменить стакан на граненный и налить туда жигулей. Слабо на OpenGL забацать? Могут твои "современные технологии" такое?
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #9 : Июнь 08, 2020, 11:10 »

Я предлагаю заменить фон на совковую обстановочку, заменить стакан на граненный и налить туда жигулей. Слабо на OpenGL забацать? Могут твои "современные технологии" такое?
Это обычная повседневная работа трехмерщика, к современным технологиям отношения не имеет (как и к данной теме). Хотите граненый стакан? Берете моделер (приложение), в нем есть типовой инструмент revolve (фигура вращения), он делает любые стаканы.  Хотите сменить обстановку - ну ее надо иметь (в виде моделей). Тогда рендерите ее 6 раз, и получившиеся 6 проекций склеиваете (кубиком или крестом). Это если хотите иметь обстановку в виде текстуры (карты отражения). Есть приложения облегчающие этот процесс. Ну или надыбать готовый имедж на просторах инета.

В общем, носить Ваши чемоданы никакие технологии не будут   Улыбающийся
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #10 : Июнь 09, 2020, 09:53 »

А ось i варенички
Код:
uniform samplerCube cubemap_texture;
uniform sampler2D lightmap_texture;

uniform vec3 view_position;
uniform vec3 light_source;
uniform mat3 light_matrix;

varying vec3 normal;
varying vec4 vertex;
varying vec3 normal_VS;

varying vec4 proj_coords;

#include "Constants.inc"
#include "CookTorrance.inc"
#include "Postprocess.inc"

const vec3 glass_color = vec3(95.0, 253.0, 215.0) / 255.0;

void main()
{
 vec3 vNormal = -normal;
 vec3 vLight  = light_source  - vertex.xyz;
 vec3 vView   = view_position - vertex.xyz;
 
 float fLightDistance = length(vLight);
 float fScattering    = pow( 1.0 / (1.0 + fLightDistance * 0.0002), 6.0 );
 
 vLight = normalize(vLight);
 vView  = normalize(vView);
 vec2 vLightShading = LightFunction(vNormal, vLight, vView, 0.8925);
 vLightShading.x = 0.8 + 0.2 * vLightShading.x;

 float VdotN    = max(0.0, dot(vView, vNormal));
 float fFresnel = 1.0 / pow(1.0 + VdotN, 3.35);

 vec3 vReflection = textureCube( cubemap_texture, reflect(vView, vNormal) ).xyz;

 float fRefractionR = textureCube( cubemap_texture, -refract(vView, vNormal, GLASS_ETA        ) ).r;
 float fRefractionG = textureCube( cubemap_texture, -refract(vView, vNormal, GLASS_ETA * 1.018) ).g;
 float fRefractionB = textureCube( cubemap_texture, -refract(vView, vNormal, GLASS_ETA * 1.035) ).b;
 vec3  vRefraction  = vec3(fRefractionR, fRefractionG, fRefractionB);

 vec3 vColor = mix(vRefraction, vReflection, fFresnel);
 vColor      = mix( vColor, glass_color * dot(vColor, LUMINANCE_VEC), 1.0 - VdotN );

 vec3 result = (light_matrix[0] * fScattering +
                light_matrix[1] * vLightShading.x) * vColor +
                light_matrix[2] * vLightShading.y ;

 gl_FragColor = vec4( result, 1.0);
}
Фрагмент GLSL кода которым поделился автор. Язык конечно угребочный (для железа), но С-подобный, смысл легко понятен.

Критикуем, улучшаем..
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #11 : Июнь 09, 2020, 10:22 »

О, как - вместо стакана какой-то угребочный код подсунули.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #12 : Июнь 09, 2020, 15:50 »

О, как - вместо стакана какой-то угребочный код подсунули.
Неужели Вам неизвестно что шейдеры уже лет 10 как священная корова OpenGL? Без них никуда, учить их - долг каждого, даже в Qt они поддерживаются.

Поразбираем код, там несложно, ну вот хотя бы
Код:
 float fRefractionR = textureCube( cubemap_texture, -refract(vView, vNormal, GLASS_ETA        ) ).r;
 float fRefractionG = textureCube( cubemap_texture, -refract(vView, vNormal, GLASS_ETA * 1.018) ).g;
 float fRefractionB = textureCube( cubemap_texture, -refract(vView, vNormal, GLASS_ETA * 1.035) ).b;
Что это за возня с компонентами RGB и маленькими числами около единички Непонимающий
Записан
Apktyc
Самовар
**
Offline Offline

Сообщений: 133


Просмотр профиля
« Ответ #13 : Июнь 09, 2020, 18:40 »

Предположим, что GLASS_ETA - IOR воздуха к IOR стакана. А коэффициенты - реализация дисперсии.
Но это не точно.

З.Ы. Жаль автор шейдера удалился с геймдева и не раскрыл его тайны.
« Последнее редактирование: Июнь 09, 2020, 18:45 от Apktyc » Записан
navrocky
Гипер активный житель
*****
Offline Offline

Сообщений: 817


Погроммист


Просмотр профиля
« Ответ #14 : Июнь 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
« Последнее редактирование: Июнь 10, 2020, 18:47 от navrocky » Записан

Гугль в помощь
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.144 секунд. Запросов: 22.