Перейти к контенту

Рекомендуемые сообщения

KD87, тоже не получилось. С шейдером glass бутылка была совсем невидимая, а с models\window стала маленькая и смещённая относительно второй текстуры(пробка и этикетка).
В SDK для обеих вариантов - всё ОК.
topdog, в архиве 2 варианта текстур и скрины из SDK и игры для вариантов с glass и models\window.

Ссылка на комментарий

@k01jan, попробуй вот эту текстуру. Мне кажется, на твоей настолько прозрачное стекло, что просто нечего отображать.

http://rghost.ru/48383410

Пробуй с шейдером glass.

Ссылка на комментарий

@k01jan, в сталкере неправильно работает рендеринг прозрачных шейдеров на худе. 
Ты можешь разве что model_aref использовать но он вроде как края резко режет, так что бутылка у тебя скорее всего непрозрачная будет.

 

Я сомневаюсь, что хоть где-то такое можно. Лучше опиши ситуацию, 90%, что есть приличное решение   :)

 

Ну цель собстно создать такой шейдер, чтобы использовать его на худе оружия, и чтобы он был виден только при просмотре сквозь другой шейдер. Конкретно попробовать ставить такой шейдер перед пятном колиматора, чтобы это пятно было видно лишь через эту шейдерную "линзу"

 

--------------------

Кстати, а нечто подобное возможно в сталкере? Я о ночном прицеле. (Не так, как это делал тот же Meltac накладывая на готовую картинку круглое пятно а именно через модель)

 

--------------------
И ты случаем не смотрел те шейдера что я скинул? Если у тебя тоже вдруг заработало, то ты не разобрался почему?

Изменено пользователем *Shoker*

Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О

Мастер аномалий на свою заднюю точку.

Ссылка на комментарий

Shoker,
Коллиматор можно сделать иначе =) А в общем случае такую задачу можно решить только с изрядной переделкой движка. Дело в том, что в шейдере просто нет нужной информации для решения этой задачи, каждый шейдер знает только о себе и своей поверхности. Значит, нужны правки, чтобы эту дополнительную информацию шейдеру предоставить + эту информацию нужно ещё и организовать. Вероятно ввести дополнительную очередь отрисовки, куда будет собираться рисование этих специальных стёкол с глубиной, потом этот результат использовать для фильтрации рисования невидимых объектов, передавая его как текстуру в шейдер.
 

Кстати, а нечто подобное возможно в сталкере? Я о ночном прицеле.

Опасаюсь, что без влезания в движок тоже не получится. Речь идёт фактически о постпроцессе не на весь экран, а локально. Кстати, в этом ролике видно, что разрабы Метро немного сжульничали. Увеличение делается изменением общего fov, а прицел только обеспечивает ночное зрение. Сделать же увеличение локально, т.е. вокруг и внутри прицела разный fov, - это требует отрисовки сцены два раза. Этого они видимо решили не делать.

  • Нравится 1
 

Плагины Total Commander для работы с игровыми архивами:

Архиваторный плагин (для работы с одиночным архивом): link1 link2

Системный плагин (для распаковки установленной игры): link1 link2

 

Ссылка на комментарий

Здравствуйте.
Я добавил шейдеры by MacroN из билда 2218. (ТЧ)
Убрал шейдер блеска (sload), включил отбеливание изображения (из тех же шейдеров, так же проведены собственные изменения) и альтернативную модель освещения.
Проблема в том что вокруг актёра появился зелёный круг.
Он заметен только при тумане. Так же я выявил что баг зависит от common.h (отбеливание изображения).
Не могли бы вы подсказать как его исправить.

 

 

#ifndef COMMON_H


#define COMMON_H

// #define USE_SUPER_SPECULAR

#include "shared\common.h"
//////////////////////////////////////////////////////////////////////////////////////////
// *** options

// #define USE_GAMMA_22
// #define USE_SJITTER
// #define USE_SUNFILTER
//
// #define USE_MBLUR //- HW-options defined
// #define USE_HWSMAP //- HW-options defined

// #define USE_HWSMAP_PCF //- nVidia GF3+, R600+

// #define USE_BRANCHING //- HW-options defined
// #define USE_VTF //- HW-options defined, VertexTextureFetch
// #define FP16_FILTER //- HW-options defined
// #define FP16_BLEND //- HW-options defined
//
// #define USE_PARALLAX //- shader defined
// #define USE_TDETAIL //- shader defined
// #define USE_LM_HEMI //- shader defined
// #define USE_DISTORT //- shader defined
#define USE_SUNMASK //- shader defined
//#define DBG_TMAPPING
//////////////////////////////////////////////////////////////////////////////////////////
#ifndef SMAP_size
#define SMAP_size 2048
#endif
#define PARALLAX_H 0.02
#define parallax float2(PARALLAX_H, -PARALLAX_H/2)

#ifdef USE_R2_STATIC_SUN
# define xmaterial half(1.0h/4.h)
#else
# define xmaterial half(L_material.w)
#endif
//////////////////////////////////////////////////////////////////////////////////////////
uniform half4 L_material; // 0,0,0,mid
uniform half4 Ldynamic_color; // dynamic light color (rgb1) - spot/point
uniform half4 Ldynamic_pos; // dynamic light pos+1/range(w) - spot/point
uniform half4 Ldynamic_dir; // dynamic light direction - sun

uniform half4 J_direct [6];
uniform half4 J_spot [6];

half calc_fogging (half4 w_pos) { return dot(w_pos,fog_plane); }
half2 calc_detail (half3 w_pos) {
float dtl = distance (w_pos,eye_position)*dt_params.w;
dtl = min (dtl*dtl, 1);
half dt_mul = 1 - dtl; // dt* [1 .. 0 ]
half dt_add = .5 * dtl; // dt+ [0 .. 0.5]
return half2 (dt_mul,dt_add);
}



float3 calc_reflection (float3 pos_w, float3 norm_w)
{
return reflect(normalize(pos_w-eye_position), norm_w);
}

float3 calc_sun_r1 (float3 norm_w) { return L_sun_color*saturate(dot((norm_w),-L_sun_dir_w)); }
float3 calc_model_hemi_r1 (float3 norm_w) { return max(0,norm_w.y)*L_hemi_color; }
float3 calc_model_lq_lighting (float3 norm_w) { return L_material.x*calc_model_hemi_r1(norm_w) + L_ambient + L_material.y*calc_sun_r1(norm_w); }

//////////////////////////////////////////////////////////////////////////////////////////
struct v_static {
float4 P : POSITION; // (float,float,float,1)
float4 Nh : NORMAL; // (nx,ny,nz,hemi occlusion)
float4 T : TANGENT; // tangent
float4 B : BINORMAL; // binormal
float2 tc : TEXCOORD0; // (u,v)
float2 lmh : TEXCOORD1; // (lmu,lmv)
float4 color : COLOR0; // (r,g,b,dir-occlusion)
};

struct v_tree {
float4 P : POSITION; // (float,float,float,1)
float4 Nh : NORMAL; // (nx,ny,nz)
float3 T : TANGENT; // tangent
float3 B : BINORMAL; // binormal
float4 tc : TEXCOORD0; // (u,v,frac,???)
};

struct v_model {
float4 P : POSITION; // (float,float,float,1)
float3 N : NORMAL; // (nx,ny,nz)
float3 T : TANGENT; // (nx,ny,nz)
float3 B : BINORMAL; // (nx,ny,nz)
float2 tc : TEXCOORD0; // (u,v)
};

struct v_detail {
float4 pos : POSITION; // (float,float,float,1)
int4 misc : TEXCOORD0; // (u(Q),v(Q),frac,matrix-id)
};

#ifdef USE_HWSMAP
struct v_shadow_direct_aref
{
float4 hpos: POSITION; // Clip-space position (for rasterization)
float2 tc0: TEXCOORD1; // Diffuse map for aref
};
struct v_shadow_direct
{
float4 hpos: POSITION; // Clip-space position (for rasterization)
};
#else
struct v_shadow_direct_aref
{
float4 hpos: POSITION; // Clip-space position (for rasterization)
float depth: TEXCOORD0; // Depth
float2 tc0: TEXCOORD1; // Diffuse map for aref
};
struct v_shadow_direct
{
float4 hpos: POSITION; // Clip-space position (for rasterization)
float depth: TEXCOORD0; // Depth
};
#endif

//////////////////////////////////////////////////////////////////////////////////////////
struct p_bumped {
float4 hpos : POSITION;
#if defined(USE_R2_STATIC_SUN) && !defined(USE_LM_HEMI)
float4 tcdh : TEXCOORD0; // Texture coordinates, w=sun_occlusion
#else
float2 tcdh : TEXCOORD0; // Texture coordinates
#endif
float4 position : TEXCOORD1; // position + hemi
half3 M1 : TEXCOORD2; // nmap 2 eye - 1
half3 M2 : TEXCOORD3; // nmap 2 eye - 2
half3 M3 : TEXCOORD4; // nmap 2 eye - 3
#ifdef USE_PARALLAX
half3 eye : TEXCOORD5; // vector to point in tangent space
#ifdef USE_TDETAIL
float2 tcdbump : TEXCOORD6; // d-bump
#ifdef USE_LM_HEMI
float2 lmh : TEXCOORD7; // lm-hemi
#endif
#else
#ifdef USE_LM_HEMI
float2 lmh : TEXCOORD6; // lm-hemi
#endif
#endif
#else
#ifdef USE_TDETAIL
float2 tcdbump : TEXCOORD5; // d-bump
#ifdef USE_LM_HEMI
float2 lmh : TEXCOORD6; // lm-hemi
#endif
#else
#ifdef USE_LM_HEMI
float2 lmh : TEXCOORD5; // lm-hemi
#endif
#endif
#endif
};
//////////////////////////////////////////////////////////////////////////////////////////
struct p_flat {
float4 hpos : POSITION;
#if defined(USE_R2_STATIC_SUN) && !defined(USE_LM_HEMI)
float4 tcdh : TEXCOORD0; // Texture coordinates, w=sun_occlusion
#else
float2 tcdh : TEXCOORD0; // Texture coordinates
#endif
float4 position : TEXCOORD1; // position + hemi
half3 N : TEXCOORD2; // Eye-space normal (for lighting)
#ifdef USE_TDETAIL
float2 tcdbump : TEXCOORD3; // d-bump
#ifdef USE_LM_HEMI
float2 lmh : TEXCOORD4; // lm-hemi
#endif
#else
#ifdef USE_LM_HEMI
float2 lmh : TEXCOORD3; // lm-hemi
#endif
#endif
};

//////////////////////////////////////////////////////////////////////////////////////////
struct f_deffer {
half4 position : COLOR0; // px,py,pz, m-id
half4 Ne : COLOR1; // nx,ny,nz, hemi
half4 C : COLOR2; // r, g, b, gloss
};
//////////////////////////////////////////////////////////////////////////////////////////
struct p_screen {
float4 hpos : POSITION;
float2 tc0 : TEXCOORD0; // Texture coordinates (for sampling maps)
};
//////////////////////////////////////////////////////////////////////////////////////////
// Geometry phase / deferring //
uniform sampler2D s_base; //
uniform sampler2D s_bump; //
uniform sampler2D s_bumpX; //
uniform sampler2D s_detail; //
uniform sampler2D s_bumpD; //
uniform sampler2D s_hemi; //

uniform sampler2D s_mask; //

uniform sampler2D s_dt_r; //
uniform sampler2D s_dt_g; //
uniform sampler2D s_dt_b; //
uniform sampler2D s_dt_a; //

uniform sampler2D s_dn_r; //
uniform sampler2D s_dn_g; //
uniform sampler2D s_dn_b; //
uniform sampler2D s_dn_a; //

//////////////////////////////////////////////////////////////////////////////////////////
// Lighting/shadowing phase //
uniform sampler2D s_depth; //
uniform sampler2D s_position; //
uniform sampler2D s_normal; //
uniform sampler s_lmap; // 2D/cube projector lightmap
uniform sampler3D s_material; //
uniform sampler1D s_attenuate; //
//////////////////////////////////////////////////////////////////////////////////////////
// Combine phase //
uniform sampler2D s_diffuse; // rgb.a = diffuse.gloss
uniform sampler2D s_accumulator; // rgb.a = diffuse.specular
uniform sampler2D s_generic; //
uniform sampler2D s_bloom; //
uniform sampler s_image; // used in various post-processing
uniform sampler2D s_tonemap; // actually MidleGray / exp(Lw + eps)
//////////////////////////////////////////////////////////////////////////////////////////

// Defines //
#define def_gloss half(8.f /255.f)
#define def_aref half(128.f/255.f)
#define def_dbumph half(0.333f)
#define def_virtualh half(.05f) // 5cm
#define def_distort half(0.05f) // we get -0.5 .. 0.5 range, this is -512 .. 512 for 1024, so scale it
#define def_hdr half(20.h) //(8.h) // hight luminance range half(3.h)
#define def_hdr_clip half(0.75h) //
#define def_lum_hrange half(1.55h) // hight luminance range (было 0.55h)


// Defines //
//#define def_gloss half(2.f /255.f)
//#define def_aref half(200.f/255.f)
//#define def_dbumph half(0.333f)
//#define def_virtualh half(.05f) // 5cm
//#define def_distort half(0.05f) // we get -0.5 .. 0.5 range, this is -512 .. 512 for 1024, so scale it
//#define def_hdr half(8.h) // hight luminance range half(3.h)
//#define def_hdr_clip half(0.75h) //






//////////////////////////////////////////////////////////////////////////////////////////
#define LUMINANCE_VECTOR half3(0.3f, 0.48f, 0.22f)
void tonemap (out half4 low, out half4 high, half3 rgb, half scale)
{
rgb = rgb*scale;


const float fWhiteIntensity = 1.7;

const float fWhiteIntensitySQR = fWhiteIntensity*fWhiteIntensity;





#ifdef USE_GAMMA_22
low = half4(sqrt(rgb.xyz), 0);
#else

// low = half4(rgb,0);
low = half4( ( (rgb*(1+rgb/fWhiteIntensitySQR)) / (rgb+1) ),0 ); //macron shoc new

#endif




#ifdef USE_R2_STATIC_SUN
high = low/def_hdr; // 8x dynamic range


//high = half4 (rgb, dot(rgb,0.333f)-def_hdr_clip)
high = half4 (rgb/def_hdr, 0 ) ;// 8x dynamic range


#else

high = half4(rgb-def_lum_hrange, dot( min(rgb,def_lum_hrange), LUMINANCE_VECTOR ) );

#endif






/*
rgb = rgb*scale;

low = rgb.xyzz;
high = low/def_hdr; // 8x dynamic range
*/





}
half4 combine_bloom (half3 low, half3 high) {
return half4(low+high,1.h);
}

float3 v_hemi (float3 n) { return L_hemi_color*(.5f + .5f*n.y); }
float3 v_hemi_wrap (float3 n, float w) { return L_hemi_color*(w + (1-w)*n.y); }
float3 v_sun (float3 n) { return L_sun_color*dot(n,-L_sun_dir_w); }
float3 v_sun_wrap (float3 n, float w) { return L_sun_color*(w+(1-w)*dot(n,-L_sun_dir_w)); }
half3 p_hemi (float2 tc) {
half3 t_lmh = tex2D (s_hemi, tc);
return dot (t_lmh,1.h/3.h);
}

#define FXPS technique _render{pass _code{PixelShader=compile ps_3_0 main();}}
#define FXVS technique _render{pass _code{VertexShader=compile vs_3_0 main();}}

#endif

 

 

f19e5076ea.jpg

cf09fde9a5.jpg

50e00103cf.jpg

1f4884635b.jpg

387a97439d.jpg

d0b8d57d93.jpg

120e77b862.jpg

 

 

Изменено пользователем warwer
  • Нравится 1
Ссылка на комментарий

@plac, и common.h, и sload.h не являются шейдерами. Это библиотеки часто используемых функций. Чтобы ответить хоть как-то на твой вопрос, надо видеть сами шейдера. 

  • Нравится 1
Ссылка на комментарий

Столкнулся с проблемой - для объекта нужен шейдер, который не отбрасывал бы тень, но при этом сам освещался по всем правилам. (как допустим руки на худе) Все стандартные шейдера либо кидают тень, либо полу-прозрачные. 
Возможно ли в сталкере сделать шейдер чтобы объект с ним не отбрасывал тень но и при этом был не прозрачным? (Либо был прозрачным настолько, чтобы это было незаметно)

Не совсем понятно как вообще настраивается шейдер на предмет отбрасывать ли ему тень или нет.

Я подозреваю что это зарыто в движке, и модель просто проверяется на степень прозрачности, надеюсь я ошибаюсь. 
Зарание спасибо.

Изменено пользователем *Shoker*

Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О

Мастер аномалий на свою заднюю точку.

Ссылка на комментарий

Возможно ли в сталкере сделать шейдер чтобы объект с ним не отбрасывал тень

Только если движок ковырять.

 

модель просто проверяется на степень прозрачности

Как связана модель с прозрачностью? :)  Прозрачность у текстур только. Сделай непрозрачную текстуру, будет тебе непрозрачная модель с шейдером полупрозрачности. Как альтернативу, можно еще попробовать в обычный *.s-шейдер воткнуть что-то типа :sorting   (3,true). Только мне сдается, все равно нормального освещения не получишь.

Изменено пользователем KD87
Ссылка на комментарий

Ну я к тому, что у моделей есть прозрачные шейдеры вроде model\xanomaly (невидимый кровосос), с ними модель не кидает тень но при этом сама прозрачность делается на уровней шейдеров, у текстуры даже нету альфа-канала. 

Вот сейчас смотрю в этом направлении как раз.

 

Если юзать другие прозрачные шейдеры вроде model_aref то по идее тени не будет только там, где модель прозрачна на текстуре.

Таким образом если модель полностью видима то она будет откидывать тень. (говорю вроде, потому что шейдеры проверял не я, так что ещё уточню этот вопрос)

 

На самом деле я до сих пор не понимаю, как движок определяет что объект должен откидывать тень. Если бы я это понял то возможно что то придумал бы. Пока я знаю что если на объект повесить прозрачный шейдер то тени от него не будет. Но в таком случае получается движок определяет насколько прозрачен объект и если прозрачность больше определённого уровня, то он тень не кидает, я так это понял. (собстно тот же принцип что и с тенью от сетки-рябицы, там резкое обрубание текстуры по альфе и то что остаётся, откидывает тень) 
Если это так то наверно где то возможно есть регулятор, который определяет степень прозрачности, при которой модель считается "прозрачной" и  тень не откидывает. 

 

А sorting разве не отвечает за "порядок отрисовки поверхности по отношению к самому объекту,", вроде как на тени влиять он не должен.



____________________________________

Вообщем методом тыка добился определённых результатов, так и не понял как всё там в движке работает.
Осталось решить лишь одну проблему:

От тени избавится удалось (не подозреваю как), сама модель также корректно освещается и на неё накладываются тени 
ОДНАКО используемый мной шейдер использует hemi-освещение тоесть помимо обычного освещения на модель накладывается свет неба из за этого модель светится в темноте.
 
7ea0ba4ad4.jpg27a1cf6d48.jpg

 

 
В связи с этим два вопроса:

1) Как правильно убрать hemi освещение? Я вижу эту часть в коде но у меня постоянно ошибка при компиляции шейдера при попытках там что то поправить.
2) Используются ли СДКшные параметры в скриптовом шейдере? Допустим я в СДК настроил шейдер а потом сделал его в скриптах, будет ли мой скриптовый шейдер, что ниже, использовать параметры из СДК как дефолтные?
 
ЗП, R2 Полное динамическое. 

Коды шейдеров:
191aee4d64.jpg

 

 
r2\model_xanomaly.s
function normal (shader, t_base, t_second, t_detail)
shader:begin ("deffer_model_flat","deffer_base_flat")
shader:sampler ("s_base")      :texture (t_base)
end
 

Эти шейдеры с оригинала.


 
#include "common.h"
#include "skin.h"


p_flat  _main ( v_model I )
{
// world-space  N
float3  N_w  = mul (m_W, I.N);


// Eye-space pos/normal
p_flat  O;
float3 Pe = mul (m_WV,  I.P );
O.hpos  = mul (m_WVP, I.P );
O.N  = mul ((float3x3)m_WV, (float3)I.N);


//  Hemi cube lighting
float3 Nw = mul ((float3x3)m_W, (float3)I.N);
half3   hc_pos = (half3)hemi_cube_pos_faces;
half3 hc_neg = (half3)hemi_cube_neg_faces;
half3   hc_mixed= (Nw < 0) ? hc_neg : hc_pos;
float hemi_val= dot( hc_mixed, abs(Nw) );
hemi_val = saturate(hemi_val);


O.tcdh  = float4 (I.tc.xyyy);
O.position = float4 (Pe, hemi_val); //use L_material.x for old behaviour


#if defined(USE_R2_STATIC_SUN) && !defined(USE_LM_HEMI)
O.tcdh.w = L_material.y; // (,,,dir-occlusion)
#endif


#ifdef USE_TDETAIL
O.tcdbump = O.tcdh*dt_params; // dt tc
#endif


return O;
}


/////////////////////////////////////////////////////////////////////////
#ifdef  SKIN_NONE
p_flat main(v_model v)  { return _main(v);  }
#endif


#ifdef  SKIN_0
p_flat main(v_model_skinned_0 v)  { return _main(skinning_0(v)); }
#endif


#ifdef SKIN_1
p_flat main(v_model_skinned_1 v)  { return _main(skinning_1(v)); }
#endif


#ifdef SKIN_2
p_flat main(v_model_skinned_2 v)  { return _main(skinning_2(v)); }
#endif


#ifdef SKIN_3
p_flat main(v_model_skinned_3 v)  { return _main(skinning_3(v)); }
#endif


#ifdef SKIN_4
p_flat main(v_model_skinned_4 v)  { return _main(skinning_4(v)); }
#endif


FXVS;


 

#include "common.h"
#include "sload.h"


f_deffer  main ( p_flat I )
{
  f_deffer O;


  // diffuse
  half3 D = tbase (I.tcdh); // IN:  rgb.a


#ifdef USE_TDETAIL
D.rgb = 2*D.rgb*tex2D (s_detail, I.tcdbump).rgb;
#endif


// hemi,sun,material
half  ms = xmaterial ;
#ifdef USE_LM_HEMI
half4 lm  = tex2D (s_hemi, I.lmh);
// half  h   = dot (lm.rgb,1.h/3.h);
half  h   = get_hemi(lm);
# ifdef USE_R2_STATIC_SUN
//   ms  = lm.w ;
ms  = get_sun(lm);
# endif
#else
half  h = I.position.w ;
# ifdef USE_R2_STATIC_SUN
ms = I.tcdh.w ;
# endif
#endif


  // 2. Standart output
  O.Ne          = half4 (normalize((half3)I.N.xyz),  h );
  O.position    = half4  (I.position.xyz + O.Ne.xyz*def_virtualh/2.h,  ms );
  O.C = half4 (D.rgb, def_gloss ); // OUT: rgb.gloss


  return O;
}

 

 

 

#include "common.h"


p_flat  main ( v_static I )
{
// Eye-space pos/normal
p_flat  O;
float4 Pp  = mul (m_WVP, I.P );
O.hpos  = Pp;
O.N  = mul ((float3x3)m_WV, unpack_bx2(I.Nh));
float3 Pe = mul (m_WV,  I.P );


float2 tc  = unpack_tc_base (I.tc,I.T.w,I.B.w); // copy tc
O.tcdh = float4 (tc.xyyy );
O.position = float4 (Pe,  I.Nh.w );


#if defined(USE_R2_STATIC_SUN) && !defined(USE_LM_HEMI)
float  s = I.color.w ; // (r,g,b,dir-occlusion)
O.tcdh.w = s;
#endif


#ifdef USE_TDETAIL
O.tcdbump = O.tcdh * dt_params; // dt tc
#endif


#ifdef USE_LM_HEMI
O.lmh  = unpack_tc_lmap (I.lmh);
#endif


return O;
}
FXVS;

 

 

Изменено пользователем *Shoker*

Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О

Мастер аномалий на свою заднюю точку.

Ссылка на комментарий

Ну я к тому, что у моделей есть прозрачные шейдеры вроде model\xanomaly (невидимый кровосос), с ними модель не кидает тень но при этом сама прозрачность делается на уровней шейдеров, у текстуры даже нету альфа-канала.

Это заблуждение. Посмотри пиксельный шейдер - ясно видно, что альфа-канал берется из текстуры. Видимость кровососа переключается через что-то типа SetVisible в движке.

 

 

На самом деле я до сих пор не понимаю, как движок определяет что объект должен откидывать тень.

Ясно, как. Если добавляется в основную очередь отрисовки, то есть если визуал не худ, не стекло, не дисторт-визуал - рисуем тень. В какую очередь пойдет объект частично можно контролировать в скриптовом шейдере (ну или в сдк): sorting - в очередь полупрозрачных объектов, если есть функция l_special - в очередь дисторт-объектов.

 

 

А sorting разве не отвечает за "порядок отрисовки поверхности по отношению к самому объекту,", вроде как на тени влиять он не должен.

sorting заставляет движок пихать модель в очередь полупрозрачных объектов. Они (в Сталкире) теней не отбрасывают.

 

 

1) Как правильно убрать hemi освещение? Я вижу эту часть в коде но у меня постоянно ошибка при компиляции шейдера при попытках там что то поправить.

Ну учет хеми составляющей убери, в шейдере оно ж так и называется - hemi.

 

 

 

2) Используются ли СДКшные параметры в скриптовом шейдере? Допустим я в СДК настроил шейдер а потом сделал его в скриптах, будет ли мой скриптовый шейдер, что ниже, использовать параметры из СДК как дефолтные?

Скорее нет, в движке это вроде разные шейдеры. Но попробуй.

Изменено пользователем KD87
Ссылка на комментарий

Так эти шейдера на 50% состоят из работы с hemi, стоит мне что то убрать так сразу ловлю ошибку компиляции, а на что заменять не понятно. :( Шейдер же должен что то возвращать.

Я даже saturation() не смог убрать\заменить на ноль чтобы не словить вылет. 
 

Мне б хотя бы код какого нибудь простого шейдера, который просто рисовал модель с её текстурой и чтобы она освещалась игрой по всем правилам. Или хотя бы назвать подходящие шейдера чтобы я вписал их в .s-скрипт, т.к раз тень зависит только от сортировки то мне в принципе всё равно что шейдер будет содерждать, лишь бы бампы и прочее нормально на модели отображалось. (кстати тоже хороший вопрос, не сломаются ли бампы при использовании сортировки)

 

Юзать просто СДК-шные заготовки вроде model\model не могу потому что если не прикрутить к ним скриптовый шейдер то в игре с использованием сортировки модель рисуется сквозь себя и освещается криво. 

 

759de15197.jpg

 

Скорее нет, в движке это вроде разные шейдеры. Но попробуй.

Судя по тому что я из своего .s шейдера убрал вообще всё, в том числе и sorting и он всё равно не кидает тень, я полагаю что таки используются, просто настройки из  .s могут перекрывать те что в СДК. Ну либо в скриптовых шейдерах sorting по умолчанию не 0\1.

 

 

Это заблуждение. Посмотри пиксельный шейдер - ясно видно, что альфа-канал берется из текстуры. 

 

 

Да, это уже я неправильно сказал. Под невидимым я имел ввиду полу-невидимый. Он юзает шейдер xanomaly а тот в свою очередь текстуру pfx_glass_6 для создания искажения, так что тут я ошибся. 

Изменено пользователем *Shoker*

Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О

Мастер аномалий на свою заднюю точку.

Ссылка на комментарий

 

 


Мне б хотя бы код какого нибудь простого шейдера

Дак не будет нормального освещения. Нормальное освещение реализуется во время deffered-пасса, а в нем не участвует полупрозрачная геометрия. А вся непрозрачная - бросает тень. Единственное, что можно попробовать - на основе любого полупрозрачного шейдера (хоть даже и воды) написать реализацию какой-нибудь модели освещения. Конечно, освещение можно реализовать только солнечное.

  • Нравится 1
Ссылка на комментарий

:crazy: чёрт... 

Спасибо за ответ. 

 

Заменил в deffer_model_flat.vs

O.position = float4 (Pe, hemi_val); //use L_material.x for old behaviour

на 

O.position = float4 (Pe, 0.1); //use L_material.x for old behaviour

 

И таки снизил яркость модели (само собой слегка посвечивает в темноте... и да, как ты уже написал выше оказалось что нормального освещения там нету :(

Точнее оно освещается и источниками света и солнцем но вот если к солнцу стать спиной, неосвещённая часть модели становится тёмной и освещается только этим самым hemi. Вот если бы hemi можно было выключать в неосвещённых участках тогда бы оно выглядело бы нормально.

 

Ну модель освещения свою я врятли осилю :D
Кстати бамп полностью шейдерами реализован или также в deffered? А то заметил что нога у меня плосковато выглядит.(впрочем соответствует названию шейдера) С ним бы в принципе текущий вариант можно было бы попытаться использовать. 

Изменено пользователем *Shoker*

Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О

Мастер аномалий на свою заднюю точку.

Ссылка на комментарий

Кстати бамп полностью шейдерами реализован или также в deffered?

:)  А defferd-пасс это тоже шейдеры. Тут тоже ничего утешительного - хотя и можно рассчитать бамп для полупрозрачной геометрии, его некуда применять. В сталкире бамп корректирует позицию в пикселе г-буффера, благодаря этому потом при освещении ты видишь тени от бампа. А полупрозрачная геометрия в г-буффер в принципе ничего не может записать, так что и бамп считать для нее бесполезно.

 

Впрочем, ты-то мутишь не через полупрозрачную геометрию, а через deffer_-шейдер каким-то образом. Уж я не знаю, как ты там убрал тень (тени не там считаются), приведи хоть код шейдеров, что ли.

Изменено пользователем KD87
Ссылка на комментарий

Дык весь код и привёл выше. :D

 

Я сам не знаю как и что там работает. 
Подозреваю что тень пропала просто из за sorting 3.

Но если sorting 3 использовать без скриптового шейдера то модель начинает просвечивать сквозь себя, а в комбинации со скриптовым всё норм.

 

И кстати говоря я выше писал про то что у меня модель светится в темноте, так вот оказалось что это похоже не из за шейдера, а из за того, что у меня модель как бы спавнится на 200 метров выше игрока, и основная геометрия (кроме центровой кости) опускается анимацией вниз к игроку, и я сейчас заметил что со стандартным model\model модель точно также светится в темноте, тогда как если спавнить её на уровне игрока то освещается нормально. Видимо игра считает что модель находится далеко от игрока и применяет к ней упрощённое освещение. В связи с этим когда я поправлю модель вполне возможно что и тот шейдер выше будет нормально освещаться в темноте и не кидать тень.

 

Сразу хочу сказать что тени пропали не из за этого, потому-что с обычным model\model та-же модель кидает тень как надо. 



UPD: Ну вообще разобрался что да как, тот шейдер без тени всё также глючит (таким образом получается что без правок движка нормальный без-теневой шейдер и впрямь не сделать) а вот model\model у меня освещался в темноте потому-что игра считала что модель у меня под солнцем т.к центр модели был в небе, из за этого вся модель освещалась hemi-светом. 

Изменено пользователем *Shoker*

Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О

Мастер аномалий на свою заднюю точку.

Ссылка на комментарий

 

 


Дык весь код и привёл выше

Ну с этим кодом вообще счастье, что хоть что-то работает. Пиксельный шейдер полупрозрачных объектов должен возвращать цвет в виде half4, а deffer_-шейдер возвращает три вектора half4, потому что рендеринг в г-буфер идет через MRT.

  • Нравится 1
Ссылка на комментарий

Возможно нубский вопрос, но все же.

Есть ли хоть небольшая надежда, что когда-нибудь появятся шейдеры для спецэффектов, которые будут реагировать на окружающее освещение(хотя бы ambient-освещение)?

Изменено пользователем Galil
Ссылка на комментарий

При чем тут взрывы. Я имею ввиду когда, например, днем туман выглядит нормально, а ночью от этого тумана становится слишком светло. Т.е. партиклы всегда используют свою яркость независимо от окружающего освещения. Для таких эффектов как студень и электра это нормально. Но вот дым выглядит весьма странно, когда начинает светиться ночью.

Тем более у blend-шейдера есть странная особенность перекрывать светящиеся партиклы как огонь или вспышки молний. Это вызывает еще больший конфуз.

Ссылка на комментарий

Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий

Комментарии могут оставлять только зарегистрированные пользователи

Создать аккаунт

Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!

Зарегистрировать новый аккаунт

Войти

Есть аккаунт? Войти.

Войти
×
×
  • Создать...