forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Проекты C++ (http://forum.boolean.name/forumdisplay.php?f=56)
-   -   [TrueHorror] - разработка (http://forum.boolean.name/showthread.php?t=17293)

mr.DIMAS 22.10.2014 00:24

Ответ: [TrueHorror] - разработка
 
А как сделать, чтобы лучи света видно было? Ну типа в конусе спота чтобы как-бы была подсвеченная пыль, или в сфере поинта то же? Или это уже только системой частиц?

Arton 22.10.2014 00:49

Ответ: [TrueHorror] - разработка
 
Спрайты?
Спрайты с анимацией пыли и маской.

mr.DIMAS 22.10.2014 01:17

Ответ: [TrueHorror] - разработка
 
Та нет, мне нужно объемное распределение подсвеченой пылищи. Все таки походу системой частиц ваять придется.

Arton 22.10.2014 02:01

Ответ: [TrueHorror] - разработка
 
Спрайты с анимацией пыли и картой освещения? Которые обрезаются по маске из освещения.

Разве идея плоха? Мне кажется частицы здесь совсем необязательны.

Видишь звёзды внизу между планет, они сделаны спрайтами:


В движение хорошо смотрится.

Mr_F_ 22.10.2014 02:17

Ответ: [TrueHorror] - разработка
 
конусы спотов в сорс играх делали 1 билбордом с видом сбоку (крутящимся только вокруг одной оси) и одним с видом спереди, в L4D сделали покруче: многослойный фрустум из квада аля спереди + полностью боковой. но это +овердро.
ещё можно отрендерить в отдельную текстуру глубину конуса и в ещё одну - глубину флипанутого конуса, а потом в постэффекте на основе расстояния между этими двумя глубинами сделать эффект аля объёмный туман + мягко пересечь его с геометрией сцены, юзая её глубину.
вообще вариантов куча.

Arton 22.10.2014 02:23

Ответ: [TrueHorror] - разработка
 
Цитата:

Сообщение от Mr_F_ (Сообщение 288374)
конусы спотов в сорс играх делали 1 билбордом с видом сбоку (крутящимся только вокруг одной оси) и одним с видом спереди, в L4D сделали покруче: многослойный фрустум из квада аля спереди + полностью боковой. но это +овердро.
ещё можно отрендерить в отдельную текстуру глубину конуса и в ещё одну - глубину флипанутого конуса, а потом в постэффекте на основе расстояния между этими двумя глубинами сделать эффект аля объёмный туман + мягко пересечь его с геометрией сцены, юзая её глубину.
вообще вариантов куча.

А что быстрее будет? Второй способ или частицами как хочет mr.DIMAS?

Цитата:

конусы спотов в сорс играх делали 1 билбордом с видом сбоку (крутящимся только вокруг одной оси) и одним с видом спереди
Кажется там даже некоторые провода так сделаны.

Mr_F_ 22.10.2014 02:28

Ответ: [TrueHorror] - разработка
 
с частицами тоже вариант, но может тормозно выйти из-за овердро, если я правильно понял идею (понаставить кучу частиц и на каждой вычислять свет спота?)

mr.DIMAS 22.10.2014 21:16

Ответ: [TrueHorror] - разработка
 
будет ли прирост производительности если все шейдерные константы замапить напрямую в регистры и потом устанавливать их через вызовы setvertexshaderconstant/setpixelshaderconstant? и как быть например с таким:

Код:

float4x4 worldViewProjection;
float opacity;
float brightness;

например я делаю так

Код:

float4x4 worldViewProjection : register( c0 );
float opacity : register( c5 );
float brightness : register( c6 );

но каждый регистр может содержать четыре флоата, таким образом впустую пропадают куски регистров с5,с6.

кароч расскажите че да как.

mr.DIMAS 23.10.2014 03:14

Ответ: [TrueHorror] - разработка
 
и еще вопрос вдогонку: как мне отрисовывать фонарик перед камерой, так чтобы он не загораживался другими объектами - кароч поверх всех? вроде бы ответ прост: нарисуй все объекты, затри буфер глубины, и нарисуй фонарик. но нифига! буфер глубины у меня используется в дефереде для оптимизаций буфером трафарета. поэтому это не вариант. форвард рендер у меня в зачаточном состоянии - рисует только полупрозрачные объекты и без освещения. я уже перепробовал рисовать фонарик после всех с отключенной записью в буфер глубины, с отключенным буфером вообще. получается шлак - полигоны перемешиваются в кашу - один на другой накладываются. че делать?
в коде дума3 нашел интересный код

Код:

/*
===============
RB_EnterModelDepthHack
===============
*/
void RB_EnterModelDepthHack( float depth ) {
    qglDepthRange( 0.0f, 1.0f );

    float    matrix[16];

    memcpy( matrix, backEnd.viewDef->projectionMatrix, sizeof( matrix ) );

    matrix[14] -= depth;

    qglMatrixMode(GL_PROJECTION);
    qglLoadMatrixf( matrix );
    qglMatrixMode(GL_MODELVIEW);
}

/*
===============
RB_LeaveDepthHack
===============
*/
void RB_LeaveDepthHack() {
    qglDepthRange( 0, 1 );

    qglMatrixMode(GL_PROJECTION);
    qglLoadMatrixf( backEnd.viewDef->projectionMatrix );
    qglMatrixMode(GL_MODELVIEW);
}

может он как-то поможет?

update. перевел его на dx. и он работает, это классно.

вот мой вариант:

Код:

void Camera::EnterDepthHack( float depth )
{
    if( !inDepthHack ) {
        depthHackMatrix = projection;
    }
    inDepthHack = true;
    projection._43 -= depth;
    CalculateInverseViewProjection();
}

void Camera::LeaveDepthHack()
{
    inDepthHack = false;
    projection = depthHackMatrix;
    CalculateInverseViewProjection();
}

при рендере фонарика ставлю EnterDepthHack( 0.1 ) и все! он рендерится поверх всего и не "проваливается" ни в какие объекты.

mr.DIMAS 23.10.2014 21:02

Ответ: [TrueHorror] - разработка
 
взялся за тени. пока что делаю только для спота - ибо проще. что делаю:
1) создал текстуру шадоумапы - R32F
2) отрисовал туда глубину сцены из положения и направления спота с fov равным углу при вершине конуса спота.

как дальше быть при выборке из шадоумапы при учете освещения? как спроецировать текстурные координаты?

Mr_F_ 24.10.2014 02:55

Ответ: [TrueHorror] - разработка
 
проецируешь так же, как с картинкой фонарика.
дальше сравниваешь глубину (Z полученный при проекции): ближе текстуры? на свету. дальше? в тени. нужно ещё маленький оффсет прибавлять туда-сюда перед сравнением, а то точность не идеальна.

mr.DIMAS 25.10.2014 22:44

Ответ: [TrueHorror] - разработка
 
чет фигня получается если проецировать как для картинки фонарика, тень вращается вместе с камерой. че делать?

Mr_F_ 25.10.2014 23:02

Ответ: [TrueHorror] - разработка
 
не понял как вращается.
короче рендеришь тени с камеры, привязанной к персу (то бишь локальная ворлд матрица камеры должна домножаться на ворлд матрицу перса), и проецируешь матрицей той же самой камеры.

mr.DIMAS 25.10.2014 23:11

Ответ: [TrueHorror] - разработка
 
wat? а где тогда используется матрица спота?

Mr_F_ 25.10.2014 23:56

Ответ: [TrueHorror] - разработка
 
ну и пятно спота той же камерой проецируешь, что и тени, нафига тебе 2 разные матрицы, если это всё проецируется с одного лайта?


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

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