MikeNew
никакой роли бранчи (или их отсутствие) не играют в швах мипмаппинга. они образуются там, где у тебя есть разрыв в текстурных координатах. иннуэнды связывают швы с бранчингом, лишь потому что бранчинг — один из самых популярных способов получения разрыва в текстурных координатах, но вовсе не единственный и вовсе не любой бранчинг породит разрыв координат. общий принцип заключается в том, чтобы либо использовать в явном виде градиенты, либо располагать шов там, где вес у выборки в результирующем блендинге равен нулю. оба способа здесь реализованы: https://www.shadertoy.com/view/Xtl3zf
я практически уверен, что ты пытаешься блендить два текстурых слоя разного масштаба, а на линии, где у тебя получается излом, ты один из них подменяешь другим, а на его место ставишь слой с новым масштабом. так вот чтобы разрыва не было, надо сменяющиеся слои чередовать, чтобы UV второго слоя оставался непрерывным. короче, лень объяснять, читай код и комментарии.
PS но способ всё равно наркоманский, потому что в результате получится чёрт знает что произвольного масштаба.
Suslik
> иннуэнды связывают швы с бранчингом
мне до фени что там и как - бранчинг с texture без dFdx это зло
Suslik
> иннуэнды связывают швы с бранчингом, лишь потому что бранчинг — один из самых
> популярных способов получения разрыва в текстурных координатах, но вовсе не
> единственный и вовсе не любой бранчинг породит разрыв координат.
А texture в динамическом бранче вообще компелируется? Просто HLSL на этапе компиляции сразу пошлет с соответствующей ошибкой.
Suslik
> https://www.shadertoy.com/view/Xtl3zf
Сделаю сравнительные тесты.
Странно. Код один в один, а получается вот что:
Глянь пожалуйста, шейдер коротенький, невозможно же ошибиться:
Текстуры криво мешаются, скорее всего, из-за того, что зря расстояние берется из глубины float dist = gl_FragCoord.z / gl_FragCoord.w. Она же там не линейная. Лучше взять координаты вершины в вершинном шейдере и положение камеры и считать там расстояние. Это и быстрее будет.
__sergey
> Текстуры криво мешаются, скорее всего, из-за того, что зря расстояние берется
> из глубины float dist = gl_FragCoord.z / gl_FragCoord.w. Она же там не
> линейная. Лучше взять координаты вершины в вершинном шейдере и положение камеры
> и считать там расстояние. Это и быстрее будет.
Спасибо, надо будет попробовать.
Тем более что нашел хорошее применение способу борьбы с тайлингом посредство масштабирования тепкстур - изменение масштаба для текстур нормалей воды. Там он будет в самый раз смотреться, в отличие от террайна.
MikeNew
> float k = texture( texSampler_1024, vec3(uv* 0.005, NOISE_TEXTURE)).x;
> vec2 offa = sin(vec2(3.0,7.0)*ia); // can replace with any other hash
> vec2 offb = sin(vec2(3.0,7.0)*ib); // can replace with any other hash
MikeNew
> Код один в один
в том и идея, чтобы не один в один код копировать, а попытаться разобраться, что он делает. скопирует за тебя innuendo, тут всё схвачено. например, этот код существенно зависит от масштаба сцены, и ты даже не попытался понять, как и почему и тем более что с этим делать.
это, кстати, не мой код. в моём коде если магические константы и есть, то они явно вынесены наружу из утилитарных функций.
Suslik
> в том и идея, чтобы не один в один код копировать, а попытаться разобраться,
> что он делает. скопирует за тебя innuendo
до тебя так и не дошло ?
Тема в архиве.