ПрограммированиеФорумГрафика

ZPrepass

Страницы: 1 2 3 4 5 Следующая »
#0
18:34, 1 окт 2024

Привет. Не могу найти инфу для чего это и что дает. Можно же сразу глубину всей сцены рендерить но не могу найти описания что этот предварительный проход дает и какие именно объекты рендерятся в таком проходе.

#1
18:58, 1 окт 2024

Target
> что этот предварительный проход дает и какие именно объекты рендерятся в таком проходе.
Так как запись идет только в глубину и с пустым пиксельным шейдером - то этот процесс очень быстрый.
Во втором проходе пиксели не прошедшие тест глубины - не будут вызывать пиксельный шейдер.
Считай ZPrepass простой альтернативой occlusion culling-а.

#2
19:24, 1 окт 2024

MrShoor
Как думаешь, с ффп карточками препасс даст перформанс или нет? Там все же не только в филлрейт был упор, но и число треугольников

#3
19:42, 1 окт 2024

Xa4
> Как думаешь, с ффп карточками препасс даст перформанс или нет?
Чем тяжелее пиксельный и чем тяжелее output merge стадия - тем больше профита от zprepass. Во времена FFP обычно эти стадии были достаточно легкими, поэтому там zprepass в большинстве случаев был либо бессмысленным либо наоборот тормозов добавлял.

#4
17:52, 3 окт 2024

innuendo
> И с чего бы то вдруг на первых радеонах сделали hiz?
Hierarchical Z-buffer (HiZ) на ранних видеокартах, включая Radeon, был внедрен для повышения производительности рендеринга и оптимизации обработки скрытых поверхностей. Суть HiZ заключается в том, чтобы на этапе рендеринга отсеивать фрагменты (пиксели), которые не будут видны в финальной картинке, поскольку их перекрывают другие объекты. Это уменьшает количество данных, которые необходимо обработать, и ускоряет работу графического процессора.

На первых Radeon HiZ был необходим, потому что игры и приложения становились все более сложными, с большим количеством объектов и полигонажа. Чем больше сложных сцен приходилось обрабатывать, тем выше была необходимость оптимизации. HiZ позволял сократить объем работы для рендеринга за счет раннего отказа от обработки тех фрагментов, которые гарантированно не будут видны, тем самым улучшая производительность и снижая нагрузку на память и вычислительные ресурсы.

На фоне растущих требований к графике в 3D-приложениях и играх HiZ стал важным инструментом для оптимизации, и производители графических процессоров, таких как AMD (с серией Radeon), активно внедряли его для того, чтобы справляться с растущими требованиями пользователей к производительности.

#5
22:31, 3 окт 2024

Xa4
> с ффп карточками
Некрофил детектед. Это шутка не обижайся. Зет-препасс позволяет снизить филлрейт при заливке пикселов. Особенно если шейдеры тяжелые. Ну а ффп... Третий дум имел пути для таких карточек и использовал препасс для всех путей рендера. Так что тогда смысл был. У меня он есть, nsight бодро рапортует, что был вызов отрисовки, в результате которого было отрисовано ноль пикселов))) Но честно, чисто прироста фпс от него не видел у себя никогда.

#6
12:29, 3 ноя 2024

Target
А глубину всей сцены сразу это как ?

#7
13:19, 3 ноя 2024

innuendo
Под "всей сцены" имелось ввиду то что в фрустуме, очевидно же.

#8
13:21, 3 ноя 2024

Target
А можно как то иначе делать по нормальному ? Очень интересно

#9
17:16, 3 ноя 2024

barnes
Разве в дум трии не идет амбиент проход ?

#10
19:09, 3 ноя 2024

innuendo
> Разве в дум трии не идет амбиент проход ?
Не. Он в ку4 был добавлен. В д3 в начале зет препасс, а потом тени-освещение. А один из типов лампочек как-раз и есть амбиент лайт. Чтото типа ламберта с учетом карты нормали без спекулара.

#11
(Правка: 11:24) 0:22, 4 ноя 2024

barnes
Очень подозрительно ....
Нету у тебя под рукой шейдера ambient.vpf?
Амбиент через Ламбер а  с картой нормалей это гениально
Кстати, напомни , как там инвариант разруливаося ?

#12
13:23, 4 ноя 2024

Щас найду. Но я арбфп практически не изучал. А ламбертов так то у меня куча

float LambertLighting (const in vec3 N, const in vec3 L) {
  return max(dot (N, L), 0.0);
}

float HalfLambert (in vec3 N, in vec3 L){  
     return dot ( N, L ) * 0.5 + 0.5;
}
vec3 Diffuse_Lambert (in vec3 color) {
  return color * (1.0 / PI);
}
#13
13:24, 4 ноя 2024

вот дум3 амбиент лайт

!!ARBvp1.0 OPTION ARB_position_invariant ;

# VPROG_INTERACTION
# 
# input:
# 
# attrib[8] TEX0  texture coordinates
# attrib[9] TEX1  normal
# attrib[10] TEX2  tangent[0]
# attrib[11] TEX3  tangent[1]
# COL      vertex color
#
# c[4]  localLightOrigin
# c[5]  localViewOrigin
# c[6]  lightProjection S
# c[7]  lightProjection T
# c[8]  lightProjection Q
# c[9]  lightFalloff S
# c[10]  bumpMatrix S
# c[11]  bumpMatrix T
# c[12]  diffuseMatrix S
# c[13]  diffuseMatrix T
# c[14]  specularMatrix S
# c[15]  specularMatrix T
# c[16]  vertex color modulate
# c[17]  vertex color add
# 
# c[20] model matrix 
# c[21] model matrix
# c[22] model matrix
#
# output:
# 
# texture[0] is the ambient cube map (was the normalization cube map)
# texture[1] is the per-surface bump map
# texture[2] is the light falloff texture
# texture[3] is the light projection texture
# texture[4] is the per-surface diffuse map
# texture[5] is empty (was the per-surface specular map)
# texture[6] is empty (was the specular lookup table)

# texcoord[0] is the surface bump map
# texcoord[1] is the surface diffuse map
# texcoord[2] is the light projection
# texcoord[3] is the light falloff
# texcoord[4] is the local normal to global normal transform
# texcoord[5] is the local normal to global normal transform
# texcoord[6] is the local normal to global normal transform

TEMP  R0, R1, R2;

PARAM  defaultTexCoord = { 0, 0.5, 0, 1 };

# textures 0 takes the base coordinates by the texture matrix
MOV    result.texcoord[0], defaultTexCoord;
DP4    result.texcoord[0].x, vertex.attrib[8], program.env[10];
DP4    result.texcoord[0].y, vertex.attrib[8], program.env[11];

# textures 1 takes the base coordinates by the texture matrix
MOV    result.texcoord[1], defaultTexCoord;
DP4    result.texcoord[1].x, vertex.attrib[8], program.env[12];
DP4    result.texcoord[1].y, vertex.attrib[8], program.env[13];

# texture 2 has one texgen
MOV    result.texcoord[2], defaultTexCoord;
DP4    result.texcoord[2].x, vertex.position, program.env[9];

# texture 3 has three texgens
DP4    result.texcoord[3].x, vertex.position, program.env[6];
DP4    result.texcoord[3].y, vertex.position, program.env[7];
DP4    result.texcoord[3].w, vertex.position, program.env[8];

# put into texture space
DP3    result.texcoord[4].x, vertex.attrib[9], program.env[20];
DP3    result.texcoord[4].y, vertex.attrib[10], program.env[20];
DP3    result.texcoord[4].z, vertex.attrib[11], program.env[20];

# put into texture space
DP3    result.texcoord[5].x, vertex.attrib[9], program.env[21];
DP3    result.texcoord[5].y, vertex.attrib[10], program.env[21];
DP3    result.texcoord[5].z, vertex.attrib[11], program.env[21];

# put into texture space
DP3    result.texcoord[6].x, vertex.attrib[9], program.env[22];
DP3    result.texcoord[6].y, vertex.attrib[10], program.env[22];
DP3    result.texcoord[6].z, vertex.attrib[11], program.env[22];

# generate the vertex color, which can be 1.0, color, or 1.0 - color
# for 1.0 : env[16] = 0, env[17] = 1
# for color : env[16] = 1, env[17] = 0
# for 1.0-color : env[16] = -1, env[17] = 1
MAD    result.color, vertex.color, program.env[16], program.env[17];

END


#======================================================================

!!ARBfp1.0 
OPTION ARB_precision_hint_fastest;

# env[0] is the constant diffuse modifier

TEMP  light, R0, localNormal;

PARAM  subOne = { -1, -1, -1, -1 };
PARAM  scaleTwo = { 2, 2, 2, 2 };

# load the local space surface normal
TEX  localNormal, fragment.texcoord[0], texture[1], 2D;
MOV localNormal.x, localNormal.a;      # rxgb normal map compression
MAD  localNormal, localNormal, scaleTwo, subOne;

# transform into ambient map space
DP3  R0.x, localNormal, fragment.texcoord[4];
DP3  R0.y, localNormal, fragment.texcoord[5];
DP3  R0.z, localNormal, fragment.texcoord[6];

# load the ambient value
TEX  light, R0, texture[0], CUBE;

# modulate by the surface diffuse map
TXP  R0, fragment.texcoord[1], texture[4], 2D;
MUL  light, light, R0;

# modulate by the light falloff
TXP  R0, fragment.texcoord[2], texture[2], 2D;
MUL  light, light, R0;

# modulate by the light projection
TXP  R0, fragment.texcoord[3], texture[3], 2D;
MUL  light, light, R0;

# modulate by the constant diffuse factor
MUL  light, light, program.env[0];

# modulate by the vertex color
MUL result.color.xyz, light, fragment.color;

END
#14
14:10, 4 ноя 2024

barnes
Да, хитрожопно :)

Страницы: 1 2 3 4 5 Следующая »
ПрограммированиеФорумГрафика