forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Проекты C++ (http://forum.boolean.name/forumdisplay.php?f=56)
-   -   Sigel (http://forum.boolean.name/showthread.php?t=4960)

HolyDel 17.03.2009 19:59

Ответ: Sigel
 
ну и отлично.

переписал систему расширений. теперь они по хитрому инициализирутся. сначала без суффикса, если нет то с ARB, если нет то с EXT. таким образом удалось инстансинг инициализировать на обоих видюхах (у NV он EXT а у ATI - ARB).

Убрал наконец возможность менять размеры окна. Ибо она больше мешает, чем помогает.

Теперь окно вылазит вперед, как и положено.

Сделал возможность рендера в несколько текстур сразу (движек держит до 16).

такие дела

IGR 17.03.2009 20:02

Ответ: Sigel
 
Вложений: 1
Цитата:

пока не работает на АТИ. скоро поправлю
эм... действительно !! :)

ABTOMAT 17.03.2009 20:25

Ответ: Sigel
 
На АТИ открывается вход в Матрицу! :pure_magic: :-D

IGR 17.03.2009 20:46

Ответ: Sigel
 

Цитата:

На АТИ открывается вход в Матрицу!
ага, ты какую таблетку буш синюю или красную ?? :lol:

ABTOMAT 17.03.2009 22:26

Ответ: Sigel
 
Галоперидол, пожалста ;)

moka 17.03.2009 23:35

Ответ: Sigel
 
HolyDel, к Deferred Shading готовишся? :)

HolyDel 17.03.2009 23:58

Ответ: Sigel
 
MoKa, не совсем. просто технология на глаза попалась, решил по быстрому сделать :)

на самом деле довольно много всего можно завязать на MRT. Например рендеринг в кубемапу за один проход (естественно не всю сцену, а какую нить спец геометрию). Или даже рендер в 3д текстуру, и так тоже можно, да. Или например партиклы на ГПУ, или какая нибудь хитрая анимация.
Вобщем технология очень полезная и ограничивает только фантазия.

jimon 18.03.2009 00:54

Ответ: Sigel
 
MoKa
а что собстенно от deferred shading надо ?
к примеру у меня в jengine уже сейчас можно отрендерить всю сцену (или часть сцены выборочно) с одним шейдером в несколько текстур за раз (mrt рулз), а потом уже работать с этими текстурами (я заюзал рендер через композиторы как в ogre и использую шейдеры cgfx)
такого подхода достаточно будет ?
но прокручивая всё это в голове я наткнулся на одну проблему, к примеру анимация происходит в вертексном шейдере, а нам надо отрендерить только канал глубины в фрагментном шейдере, как такое сделать если в материале вертексный и фрагментный шейдер не разделимы ?

impersonalis 18.03.2009 01:34

Ответ: Sigel
 
у меня с мрт ассоциируется только "магнитно-резонансная томография", подскажите что курить.

moka 18.03.2009 01:36

Ответ: Sigel
 
В FX (HLSL) материал, можно было делать инклюды. Можно сделать в одном файле много разновидностей вершинного, а в другом пиксельные, а в третьем только техники, где делать разные комбинации.
Jimon, от Deferred Shading'а требуется по сути уже готовая модель освещения, плюс гибкость для пользовательских шейдеров.

HolyDel 18.03.2009 01:40

Ответ: Sigel
 
jimon попробуй сделать ветвление.
условие на некую uniform переменную. когда она true - тогда рендериш цвет, когда false - тогда глубину.
это примерно.

moka 18.03.2009 01:44

Ответ: Sigel
 
Советую ещё Defin'ы покурить, ты можешь сделать ifdef'ов много, и заранее чтобы подготовить разные шейдера, открываешь инклуд файл с дефайнами, там везде ставишь нужные дефайны в зависимости от настроек (это делать нада программой писать, работу с текстовым файлом, почти как ini). И компилишь шейдер, каждый раз когда компилишь, идёт переучёт всего, в том числе и дефайнов.
Прошлый шейдер с этого же файла, но с другими дефайнами, который был скомпилен - естественно не пострадает.

jimon 18.03.2009 01:51

Ответ: Sigel
 
MoKa
да,но тебе так хочется иметь отдельную технику RenderZToTexture ?

HolyDel
в принципе можно, но тогда еще большая нагрузка на код шейдера

вот дефолтовый шейдер :
Код:

void DefaultMaterial_VS(in float4 Position : POSITION,in float2 UV : TEXCOORD0,out float4 oPosition : POSITION,out float2 oUV : TEXCOORD0,uniform float4x4 ProjMat,uniform float4x4 TexMat)
<
        string VL0 = "Position";
        string VL2 = "UV";
>
{
        oPosition = mul(ProjMat,Position);
        oUV = mul(TexMat,float4(UV.x,UV.y,0,1)).xy;
}
void DefaultMaterial_FS(in float2 UV : TEXCOORD0,out float4 oColor : COLOR,uniform sampler2D Diff : TEX0)
{
        oColor = tex2D(Diff,UV);
}
float4x4 ProjViewModelMatrix;
float4x4 TexMatrix;
sampler2D DiffuseTexture;
technique DefaultMaterial
<
        string PROJMAT = "ProjViewModelMatrix";
        string TEXMAT = "TexMatrix";
        string TEX0 = "DiffuseTexture";
>
{
        pass
        {
                VertexProgram = compile latest DefaultMaterial_VS(ProjViewModelMatrix,TexMatrix);
                FragmentProgram = compile latest DefaultMaterial_FS(DiffuseTexture);
        }
}"

VL0-VL4 это слои данных вертексов (position,normal,uv,color но можно и свои данные пихать)
TEX0-TEX8 слои текстур (до 32, ограничено настройками при компиляции)
техники могут быть разного уровня качества графики, тогда надо задать имя техники так DefaultMaterial__Q3 (где может быть Q0,Q1,Q2,Q3,Q4 от самого низкого до самого высокого качества) и двиг тогда выберет оптимальную технику

как видим уже тут у меня далеко не упрёшь, надо соблюдать формат аннотаций

HolyDel 18.03.2009 01:57

Ответ: Sigel
 
тогда никак. хотя если тебе надо тупо получить глубину, то просто юзай glMaskColor(0,0,0,0);
насколько мне известно, в таком случае пиксельный шейдер вообще не будет обрабатываться (хотя может и будет, все таки там discard (texkill) может быть).

moka 18.03.2009 02:03

Ответ: Sigel
 
jimon, заюзай struct - код будет намного читабельнее и удобнее (это насчёт передачи данных в вершинник, и перенос данных из вершинного в фрагментный).


Часовой пояс GMT +4, время: 14:20.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot