Название: 3D текстура Отправлено: Const_47 от 13 Декабря 2008, 00:43:11 Кто нибуть пытался использовать в Квесте 3D текстуру. Вообще
это возможно на "чистом квесте"? Есть 100% работающий код, по крайней мере в Обезьяне. Проблема, как мне кажется, в channel texture, то есть она мою тектуру читает, но читает как 2D. Куда эту текстуру пихать? Или нужно как то специфически описать семплер в Hlsl? Название: Re: 3D текстура Отправлено: Viik от 13 Декабря 2008, 00:45:00 В квесте нет поддержки 3д текстур, но можно запихать ее в кубемапу, а работать как с обычной 3д текстурой, но кол-во слоев ограничено 6-ю.
Вместо sampler2D юзай sampler3D или samplerCUBE. Название: Re: 3D текстура Отправлено: Const_47 от 13 Декабря 2008, 00:57:15 Спасибо Viik.
Фигня короче,в идеале нужно 128x128x128. Как минимум 32x32x32. Ничего спицефического тупо нойс. Может есть идеи как такой нойс описать в hlsl, и не парится с каналами? Вопрос больше в том как сделать таким нойсом финальную закраску? Название: Re: 3D текстура Отправлено: Viik от 13 Декабря 2008, 12:19:35 Можно попробывать на ходу его сгенерить:
Код: float rand(float2 co){ Либо разложить эти 128х128 128 текстур в одну текстуру, переделать мапинг так чтобы 3-я координата указывала на нужный квадрат в текстуре и имитировать линейную фильтрацию, нужно будет читать не одно значение а два и потом их интерполировать. Название: Re: 3D текстура Отправлено: Const_47 от 13 Декабря 2008, 20:49:10 Вариант первый мне кажется более реальным.
128 текстур это жесть:))) Огромное спасибо. Щас потестю. Название: Re: 3D текстура Отправлено: Const_47 от 14 Декабря 2008, 00:30:53 Вообще идея с процедуркой, аля сгенерить на лету, очень хорошая. Она лутше той жести которая мне поначалу пришла в голову типа float Mass3Dcolor[64][64][64]; :)))
Но тот первый вариант работает не так как ожидалось. На самом деле это не Nois в хорошем смысле этого слова, то есть я согласен что это шум, при таком тайле все что угодно будет выглядеть как шум. Так сказать Пост Артифакт. Это полоски :))). Вот "покрутите" вот эти значения float2(12.9898,78.233) и 43758.5453, в меньшую сторону. Ничего лутшего чем передать как аргумент функции rand(), хy вершины в пиксельном шейдере мне в голову не пришло, иначе как мне привязать к пикселю? Может мои полоски из за этого. Может есть готовый алгоритм для генерации именно ноиса? Я пока Гуглю... Название: Re: 3D текстура Отправлено: Viik от 14 Декабря 2008, 01:50:34 Эту функцию делали для рендомного семплинга текстуры поэтому координаты пикселя поидее должы лучше всего подходить, странно что появляються полосы, скорее всего это "бандинг" - толи недостаток точности толи повторяемость величин, можно попробывать смешать эту штуку с еще одной случайной величиной, с цветной текстурой обычного гаусового нойза (можно сделать в фотошопе), сгенерить три цвета и какуюто альфу, потом затайлить эту текстуру в экранных координатах + еще и подавать в функцию рендома сумму первых двух и двух последних каналов цвета как аргументы.
А скейлить координаты пикселя не пробывал? Например свести их к 0..1 диапазону или наобор увеличить до десятков..сотен. Насколько я понял функцию использовали на величинах больше и меньше единицы, для семплинга глубины в ССАО. Название: Re: 3D текстура Отправлено: Const_47 от 14 Декабря 2008, 20:41:56 Вариант с использованием 2D текстуры из фотошопа для рендома скорее всего подойдет.
Ну и как мне достучатся к координатам пикселя? Первое что приходит в голову это в Вершинном mul(IN.Pos,WorldViewProjection) и передавать в Пиксельный как TEXCOORD:).Тогда мои координыты будут в диапазоне(-0.5) -(0.5)Но вот есть поблема. В моем случае это не подойдет, так как если пиксели моего обэкта будут, не в той части экрана, как мгновение скорее:)))(не знаю как это по руски доступно написать), у меня перегенерируется закраска обэкта, поскольку поменяются координаты его пикселей. Ну наверное при SSAO это то что нужно, такой динамичный шум. В моем случае скорее так, или In.Pos или mul(In.Pos,World). Но тогда как их звести к диапазону 0-1? Ну моно поскалить In.Pos.xyz*0,01. Но это не диапазон 0-1. Viik Огромное спасибо за общение. Название: Re: 3D текстура Отправлено: Viik от 15 Декабря 2008, 13:10:57 В случае юзания 3-х шейдеров можно использовать VPOS семантику, она дает координаты текущего пикселя на экране. В другом случае можно пропробывать сделать так:
float2 screenUV = worldViewProjPosition.xy * 0.5 + 0.5; Тобиш нужно из вертексного шейдера перетащить значение положения пикселя в пост перспективе. Просто продублировать значение в пост перспективе: output.clip_pos = mul(input.pos, mat_WorldViewProjection); output.worldViewProjPosition = output.clip_pos; Только вот насчет "y" не уверен, возможно его нужно сначала инвертнуть, до того как * 0.5 + 0.5 Название: Re: 3D текстура Отправлено: Viik от 15 Декабря 2008, 13:19:23 Не внимательно прочитал... примерно понимаю о чем речь. Тут тогда нужно совсем по другому делать. Если не секрет что за шейдинг используеться? Чето типа глиттеринга - пластик с вкраплениями, как бы искрами?
В любом случае если нойз должен быть "привязан" к геометрии, то вся эта экранная лабуда не подойдет. Попробуй в ту функцию rand подставить не координаты пикселя а УВешки объекта. Можно попробывать их еще и отскейлить. Название: Re: 3D текстура Отправлено: Const_47 от 15 Декабря 2008, 17:48:26 О шейдинге пока рано говорить. Когда увидел, что люди из такого нойса генерят, я прям опупел. Вот я и подумал, что можно здорово экономить на текстурах генеря процедурки.
Да нойс должен быть "привязан". Появилось несколько новых идей, пока тестю. Если обломаюсь окончательно, буду ковырять в этом направлении sdk. Название: Re: 3D текстура Отправлено: Const_47 от 25 Декабря 2008, 16:19:44 Проблема решена.
Спер алгоритм Perlin Noise 3D,2D,1D. Может ище кому пригодится. Код: #define BSIZE 32 |