Название: [Графика]clipping plane [for water shader](есть ответ) Отправлено: Sqwer от 14 Июня 2009, 06:37:49 При рендеринге в текстуру сцены как надводной и подводной поверхности объекты , находящиеся в обоих средах(на границах) рендятся полностью. Поскольку шейдер содержит обработку карт смещений по нормали, отренденная текстура на поверхности воды сжимается и расширяется. Это приводит к таким багам, что за колоннами появляются чёрные места.
Для решения данной проблемы нужно отсекать модель по водной поверхности clipping plane'ном, как для подводной так и надводной камеры(которые рендят в текстуры). И вот тут начинается лажа... клип плейн работает на все камеры. Название: Re: clipping plane [for water shader] Отправлено: Sqwer от 14 Июня 2009, 07:23:51 Проблема решена: надо поочерёдно вызывать оператор клипинг плейн , а затем восстанавливать его. Порядок вызова функций обычный (сначала первая нода, потом вторая).
Таким образом мы отрезаем подводную поверхность, фотографируем её уже без надводной части, уничтожаем клипинг плейн. Название: Re: clipping plane [for water shader](есть ответ) Отправлено: Sqwer от 14 Июня 2009, 14:48:15 Конечно вот:
С-клипим R-восстанавливаем Название: Re: clipping plane [for water shader](есть ответ) Отправлено: Viik от 14 Июня 2009, 18:54:21 Sqwer
Можно еще по другому сделать, чтобы не рендерить изображения отдельно для рефракции. Если у тебя есть деп сцены, то просто воду отрисовываеш в конце, когда все остальное уже отрисовалось. Перед отрисовкой воды, копируеш содержимое буфера в текстуру (Copy back buffer to texture), потом в шейдере при семплинге рефракции проверяеш глубину, если она меньше чем глубина поверхности воды в этой точке то рисуеш пиксель воды без рефракции, если больше то уже используеш рефракцию. Я еще добавлял такую штуку как силу преломления в зависимости от разницы глубины воды и содержимого буфера. Чем это выгодно? Работает для поверхностей с геометрической волной а не только для плоскости. Вторая выгода заключаеться в том что использование клипинг плейнов нарушает условие early Z culling-а. Ну и клипинг плейны не работают с шейдерами. Вот как это выглядит в результате: http://i6.photobucket.com/albums/y245/ViiKzzz/nice.jpg (http://i6.photobucket.com/albums/y245/ViiKzzz/nice.jpg) PS: "Мощьность мути" - клево звучит ;D Типа "Mud power" )) Название: Re: clipping plane [for water shader](есть ответ) Отправлено: Sqwer от 14 Июня 2009, 19:54:31 Цитировать Можно еще по другому сделать, чтобы не рендерить изображения отдельно для рефракции. Если у тебя есть деп сцены, то просто воду отрисовываеш в конце, когда все остальное уже отрисовалось. Так и делаю, только у меня отдельно RTT для глубины и RTT для цветовой сцены. ВОПРОС: поскольку у меня будут все материалы на шейдерах, есть ли в Квесте буфер RGB8+16F (конкретно A16B16G16R16F - это оно)чтобы сразу рендить картинку и глубину?Цитировать Перед отрисовкой воды, копируеш содержимое буфера в текстуру (Copy back buffer to texture) надо попробовать, но это вопрос больше оптимизацииЦитировать потом в шейдере при семплинге рефракции проверяеш глубину, если она меньше чем глубина поверхности воды в этой точке то рисуеш пиксель воды без рефракции, если больше то уже используеш рефракцию. Это самое первое , что мне в голову пришло. Да вот на GameDev.ru говорили, что "шейдеры крайне не выносят циклы и условия" я и отбросил этот вариант. Хотя по сути код в одну строчку дописывается.Цитировать Я еще добавлял такую штуку как силу преломления в зависимости от разницы глубины воды и содержимого буфера. Цитировать Чем это выгодно? Работает для поверхностей с геометрической волной а не только для плоскости. в точку!!!Цитировать Вторая выгода заключаеться в том что использование клипинг плейнов нарушает условие early Z culling-а. я б до этого сам не догадался СПАСИБОЦитировать Ну и клипинг плейны не работают с шейдерами. то- то же я клипинг на глубину поставил и у меня всё заглючило :))Цитировать Вот как это выглядит в результате: Вкусно... поделись текстурками нормалей, или хотябы скажи где взял.http://i6.photobucket.com/albums/y245/ViiKzzz/nice.jpg Цитировать PS: "Мощьность мути" - клево звучит Смеющийся Типа "Mud power" )) PS Я тож видел прикол с перчаткой 8) тот кадр в конце видео ;D.Название: Re: clipping plane [for water shader](есть ответ) Отправлено: Viik от 14 Июня 2009, 20:20:23 Цитировать Так и делаю, только у меня отдельно RTT для глубины и RTT для цветовой сцены. ВОПРОС: поскольку у меня будут все материалы на шейдерах, есть ли в Квесте буфер RGB8+16F (конкретно A16B16G16R16F - это оно)чтобы сразу рендить картинку и глубину? Ага, можно использовать и для ХДР и для депа. Но для глубины я использую отдельный буффер, одно канальную текстуру 16 или 32 бита, из нее данные читаються чаще и в процесе расчета самого цвета пикселей.Цитировать надо попробовать, но это вопрос больше оптимизации Это просто для того чтобы в текстуре было содержимое того что ты уже видиш на экране, до отрисовки воды.Цитировать Это самое первое , что мне в голову пришло. Да вот на GameDev.ru говорили, что "шейдеры крайне не выносят циклы и условия" я и отбросил этот вариант. Хотя по сути код в одну строчку дописывается. Ну сказать могут многое, важен контекст, где-то цыкли и условия перфоманс прибьют а где-то нет, например Нвидия и Ати работают с ними по разному. Не стоить верить таким категоричным заявлениям ;)Тем более что условие тебе здесь не нужно, просто читаеш оба варианта (с рефракцией и без) и лерпиш результат по разнице депа воды и депа сцены. Цитировать то- то же я клипинг на глубину поставил и у меня всё заглючило ) Если уж клипинг сильно нужен то можно использовать clip() в пиксельном шейдере, я его юзаю при рендере отражений.Цитировать Вкусно... поделись текстурками нормалей, или хотябы скажи где взял. DreamScape - генериш поверхность океана и виреем рендериш деп в текстуру, никакой магии сплошное мошенничество ;D Это чисто для прототипа делал, сейчас переделываем на процедурный расчет. Для начала можно и просто клауды в фотошопе сгенерить, главное их поскейлить по одной из осей чтобы возвышенности (волны) были полосами а не равномерно расходились во все стороны. Цитировать PS Я тож видел прикол с перчаткой тот кадр в конце видео . ;DВы мегамозги в этом , так поделились бы с новичками опытом, сделали полное описание реализации воды в квесте ! Я думаю все будут только за ! А я буду против ))) Есть разница между новичками и халявщиками, я тебе уже в личку писал что примеров реализации в инете немерянно, если они для тебя безполезны то учитцо-учитцо и еще раз учитцо пока они не станут полезны. Дать совет в каком направлении копать - без проблем, а разжовывать все так чтобы у вас голова не заболела - извинитесс, часу на то нема )))Название: Re: clipping plane [for water shader](есть ответ) Отправлено: Viik от 14 Июня 2009, 20:21:17 Viik ЭЭ это как? В смысле без интерполяции???Да и ещё рендил я глубину без интерполяции. Название: Re: clipping plane [for water shader](есть ответ) Отправлено: Viik от 14 Июня 2009, 21:51:58 Цитировать интерполированную Z координату вертекса эта та position.z/postion.w ? что загоняет значения в диапозон [-1...1]?я загонял абсолютные показатели глубины ИЛИ я не понял слово интерполированную с учётом данного контекста Цитировать Во всех уроках описан процесс создания воды с помощью шейдеров. В этих статьях авторы выкладывают кучу страниц кода, непонятного многим, т.к. не все изучали язык HLSL. Ну так блин я про это и говорю! Ты ведь хочешь чтобы зная и умея мало, получить много. Я хочу знать можно ли быстро и без проблем сделать воду используя только готовые шейдеры и непосредственно квест ? Можно, юзай воду поставляемую с квестом, не очень гибкая и все такое? - купи квест и стучи по голове разрабам чтобы сделали новую, или учи шейдера и все остальное и не ровняйся на "многих". Мне не понятно кто эти "многие", при том что я знаю "многих" людей которые знают и хлсл и многое другое, и потратили много лет своей жизни чтобы этому научиться и получить опыт. Меня уже запарило что люди начинают общение с фразы "можеш помочь?" и заканчивают "дай шейдер" или "напишите урок" а потом "только так чтобы я не парился и результат урока тупо вставил в свою сцену". Хочешь получить все готовое? - юзай то что есть или плати за работу других. Хочешь научиться? - учись, читай, набирай опыт но не проси других чтобы за тебя что-то делали. Название: Re: clipping plane [for water shader](есть ответ) Отправлено: Sqwer от 17 Июня 2009, 13:24:47 14:31:52
Отражение В отличае от прозрачности, геометрию отражения необходимо отрезать. Для этого применяются clip plane , который замечательно работает с FFP(фиксированным конвеером растеризации), но даёт ошибки при рендеринге шейдерных объектов. Вопрос с геймдева Цитировать да, еще вопрос: как в шейдере можно клип плейн сделать? Чтобы при рендеринге в карту глубины отсечь ненужное. Ответ: Цитировать Почти как на ФФП, только оттрансформировать вот так D3DXMatrixTranspose( &wmtr,&Main3DApp.matViewProj); D3DXMatrixInverse(&wmtr,NULL,&wmtr); D3DXPlaneTransform(&planeTr,&plane,&wmtr); Получается так, что всё же можно отклипить шейдерный объект! Или есть другие более дещёвые методы отсечения геометрии отражённой поверхности? Ниже представленно изображение воды на данный момент. 18:26:21 Получилось создать отсекающий шейдер. Плоскость отсечения - xy. (HLSL Код не оптимизирован, скомпелирован ShaderFX.) Название: Re: [Графика]clipping plane [for water shader](есть ответ) Отправлено: Sqwer от 21 Июня 2009, 12:43:06 Спекуляр нужен, али он только всё портит?
Название: Re: [Графика]clipping plane [for water shader](есть ответ) Отправлено: Ruslan от 21 Июня 2009, 12:48:24 На мой взгляд - лишний, много на себя берет.
Хотя, если его сделать в меру и добавить цвет солнца... |