k01jan 816 Опубликовано 26 Августа 2013 Поделиться Опубликовано 26 Августа 2013 KD87, тоже не получилось. С шейдером glass бутылка была совсем невидимая, а с models\window стала маленькая и смещённая относительно второй текстуры(пробка и этикетка).В SDK для обеих вариантов - всё ОК.topdog, в архиве 2 варианта текстур и скрины из SDK и игры для вариантов с glass и models\window. Ссылка на комментарий
topdog 49 Опубликовано 26 Августа 2013 Поделиться Опубликовано 26 Августа 2013 @k01jan, попробуй вот эту текстуру. Мне кажется, на твоей настолько прозрачное стекло, что просто нечего отображать. http://rghost.ru/48383410 Пробуй с шейдером glass. Ссылка на комментарий
k01jan 816 Опубликовано 26 Августа 2013 Поделиться Опубликовано 26 Августа 2013 topdog, всё равео невидимая, блин.. Ссылка на комментарий
*Shoker* 322 Опубликовано 26 Августа 2013 Поделиться Опубликовано 26 Августа 2013 (изменено) @k01jan, в сталкере неправильно работает рендеринг прозрачных шейдеров на худе. Ты можешь разве что model_aref использовать но он вроде как края резко режет, так что бутылка у тебя скорее всего непрозрачная будет. Я сомневаюсь, что хоть где-то такое можно. Лучше опиши ситуацию, 90%, что есть приличное решение Ну цель собстно создать такой шейдер, чтобы использовать его на худе оружия, и чтобы он был виден только при просмотре сквозь другой шейдер. Конкретно попробовать ставить такой шейдер перед пятном колиматора, чтобы это пятно было видно лишь через эту шейдерную "линзу" -------------------- Кстати, а нечто подобное возможно в сталкере? Я о ночном прицеле. (Не так, как это делал тот же Meltac накладывая на готовую картинку круглое пятно а именно через модель) --------------------И ты случаем не смотрел те шейдера что я скинул? Если у тебя тоже вдруг заработало, то ты не разобрался почему? Изменено 26 Августа 2013 пользователем *Shoker* Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О Мастер аномалий на свою заднюю точку. Ссылка на комментарий
Malandrinus 615 Опубликовано 26 Августа 2013 Поделиться Опубликовано 26 Августа 2013 Shoker,Коллиматор можно сделать иначе =) А в общем случае такую задачу можно решить только с изрядной переделкой движка. Дело в том, что в шейдере просто нет нужной информации для решения этой задачи, каждый шейдер знает только о себе и своей поверхности. Значит, нужны правки, чтобы эту дополнительную информацию шейдеру предоставить + эту информацию нужно ещё и организовать. Вероятно ввести дополнительную очередь отрисовки, куда будет собираться рисование этих специальных стёкол с глубиной, потом этот результат использовать для фильтрации рисования невидимых объектов, передавая его как текстуру в шейдер. Кстати, а нечто подобное возможно в сталкере? Я о ночном прицеле. Опасаюсь, что без влезания в движок тоже не получится. Речь идёт фактически о постпроцессе не на весь экран, а локально. Кстати, в этом ролике видно, что разрабы Метро немного сжульничали. Увеличение делается изменением общего fov, а прицел только обеспечивает ночное зрение. Сделать же увеличение локально, т.е. вокруг и внутри прицела разный fov, - это требует отрисовки сцены два раза. Этого они видимо решили не делать. 1 Плагины Total Commander для работы с игровыми архивами: Архиваторный плагин (для работы с одиночным архивом): link1 link2 Системный плагин (для распаковки установленной игры): link1 link2 Ссылка на комментарий
plac 2 Опубликовано 29 Августа 2013 Поделиться Опубликовано 29 Августа 2013 (изменено) Здравствуйте.Я добавил шейдеры 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,miduniform half4 Ldynamic_color; // dynamic light color (rgb1) - spot/pointuniform half4 Ldynamic_pos; // dynamic light pos+1/range(w) - spot/pointuniform half4 Ldynamic_dir; // dynamic light direction - sununiform 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; // tangentfloat4 B : BINORMAL; // binormalfloat2 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; // tangentfloat3 B : BINORMAL; // binormalfloat4 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_HWSMAPstruct 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)};#elsestruct v_shadow_direct_aref{float4 hpos: POSITION; // Clip-space position (for rasterization)float depth: TEXCOORD0; // Depthfloat2 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#elsefloat2 tcdh : TEXCOORD0; // Texture coordinates#endiffloat4 position : TEXCOORD1; // position + hemihalf3 M1 : TEXCOORD2; // nmap 2 eye - 1half3 M2 : TEXCOORD3; // nmap 2 eye - 2half3 M3 : TEXCOORD4; // nmap 2 eye - 3#ifdef USE_PARALLAXhalf3 eye : TEXCOORD5; // vector to point in tangent space#ifdef USE_TDETAILfloat2 tcdbump : TEXCOORD6; // d-bump#ifdef USE_LM_HEMIfloat2 lmh : TEXCOORD7; // lm-hemi#endif#else#ifdef USE_LM_HEMIfloat2 lmh : TEXCOORD6; // lm-hemi#endif#endif#else#ifdef USE_TDETAILfloat2 tcdbump : TEXCOORD5; // d-bump#ifdef USE_LM_HEMIfloat2 lmh : TEXCOORD6; // lm-hemi#endif#else#ifdef USE_LM_HEMIfloat2 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#elsefloat2 tcdh : TEXCOORD0; // Texture coordinates#endiffloat4 position : TEXCOORD1; // position + hemihalf3 N : TEXCOORD2; // Eye-space normal (for lighting)#ifdef USE_TDETAILfloat2 tcdbump : TEXCOORD3; // d-bump#ifdef USE_LM_HEMIfloat2 lmh : TEXCOORD4; // lm-hemi#endif#else#ifdef USE_LM_HEMIfloat2 lmh : TEXCOORD3; // lm-hemi#endif#endif};//////////////////////////////////////////////////////////////////////////////////////////struct f_deffer {half4 position : COLOR0; // px,py,pz, m-idhalf4 Ne : COLOR1; // nx,ny,nz, hemihalf4 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 lightmapuniform sampler3D s_material; //uniform sampler1D s_attenuate; ////////////////////////////////////////////////////////////////////////////////////////////// Combine phase //uniform sampler2D s_diffuse; // rgb.a = diffuse.glossuniform sampler2D s_accumulator; // rgb.a = diffuse.specularuniform sampler2D s_generic; //uniform sampler2D s_bloom; //uniform sampler s_image; // used in various post-processinguniform 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_22low = 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_SUNhigh = 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#elsehigh = 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 Изменено 4 Мая 2015 пользователем warwer 1 Ссылка на комментарий
KD87 718 Опубликовано 29 Августа 2013 Автор Поделиться Опубликовано 29 Августа 2013 @plac, и common.h, и sload.h не являются шейдерами. Это библиотеки часто используемых функций. Чтобы ответить хоть как-то на твой вопрос, надо видеть сами шейдера. 1 Ссылка на комментарий
*Shoker* 322 Опубликовано 29 Августа 2013 Поделиться Опубликовано 29 Августа 2013 (изменено) Столкнулся с проблемой - для объекта нужен шейдер, который не отбрасывал бы тень, но при этом сам освещался по всем правилам. (как допустим руки на худе) Все стандартные шейдера либо кидают тень, либо полу-прозрачные. Возможно ли в сталкере сделать шейдер чтобы объект с ним не отбрасывал тень но и при этом был не прозрачным? (Либо был прозрачным настолько, чтобы это было незаметно) Не совсем понятно как вообще настраивается шейдер на предмет отбрасывать ли ему тень или нет. Я подозреваю что это зарыто в движке, и модель просто проверяется на степень прозрачности, надеюсь я ошибаюсь. Зарание спасибо. Изменено 29 Августа 2013 пользователем *Shoker* Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О Мастер аномалий на свою заднюю точку. Ссылка на комментарий
KD87 718 Опубликовано 30 Августа 2013 Автор Поделиться Опубликовано 30 Августа 2013 (изменено) Возможно ли в сталкере сделать шейдер чтобы объект с ним не отбрасывал тень Только если движок ковырять. модель просто проверяется на степень прозрачности Как связана модель с прозрачностью? Прозрачность у текстур только. Сделай непрозрачную текстуру, будет тебе непрозрачная модель с шейдером полупрозрачности. Как альтернативу, можно еще попробовать в обычный *.s-шейдер воткнуть что-то типа :sorting (3,true). Только мне сдается, все равно нормального освещения не получишь. Изменено 30 Августа 2013 пользователем KD87 Ссылка на комментарий
*Shoker* 322 Опубликовано 30 Августа 2013 Поделиться Опубликовано 30 Августа 2013 (изменено) Ну я к тому, что у моделей есть прозрачные шейдеры вроде model\xanomaly (невидимый кровосос), с ними модель не кидает тень но при этом сама прозрачность делается на уровней шейдеров, у текстуры даже нету альфа-канала. Вот сейчас смотрю в этом направлении как раз. Если юзать другие прозрачные шейдеры вроде model_aref то по идее тени не будет только там, где модель прозрачна на текстуре. Таким образом если модель полностью видима то она будет откидывать тень. (говорю вроде, потому что шейдеры проверял не я, так что ещё уточню этот вопрос) На самом деле я до сих пор не понимаю, как движок определяет что объект должен откидывать тень. Если бы я это понял то возможно что то придумал бы. Пока я знаю что если на объект повесить прозрачный шейдер то тени от него не будет. Но в таком случае получается движок определяет насколько прозрачен объект и если прозрачность больше определённого уровня, то он тень не кидает, я так это понял. (собстно тот же принцип что и с тенью от сетки-рябицы, там резкое обрубание текстуры по альфе и то что остаётся, откидывает тень) Если это так то наверно где то возможно есть регулятор, который определяет степень прозрачности, при которой модель считается "прозрачной" и тень не откидывает. А sorting разве не отвечает за "порядок отрисовки поверхности по отношению к самому объекту,", вроде как на тени влиять он не должен. ____________________________________Вообщем методом тыка добился определённых результатов, так и не понял как всё там в движке работает.Осталось решить лишь одну проблему:От тени избавится удалось (не подозреваю как), сама модель также корректно освещается и на неё накладываются тени ОДНАКО используемый мной шейдер использует hemi-освещение тоесть помимо обычного освещения на модель накладывается свет неба из за этого модель светится в темноте. В связи с этим два вопроса:1) Как правильно убрать hemi освещение? Я вижу эту часть в коде но у меня постоянно ошибка при компиляции шейдера при попытках там что то поправить.2) Используются ли СДКшные параметры в скриптовом шейдере? Допустим я в СДК настроил шейдер а потом сделал его в скриптах, будет ли мой скриптовый шейдер, что ниже, использовать параметры из СДК как дефолтные? ЗП, R2 Полное динамическое. Коды шейдеров: r2\model_xanomaly.sfunction 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; Изменено 30 Августа 2013 пользователем *Shoker* Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О Мастер аномалий на свою заднюю точку. Ссылка на комментарий
KD87 718 Опубликовано 30 Августа 2013 Автор Поделиться Опубликовано 30 Августа 2013 (изменено) Ну я к тому, что у моделей есть прозрачные шейдеры вроде model\xanomaly (невидимый кровосос), с ними модель не кидает тень но при этом сама прозрачность делается на уровней шейдеров, у текстуры даже нету альфа-канала. Это заблуждение. Посмотри пиксельный шейдер - ясно видно, что альфа-канал берется из текстуры. Видимость кровососа переключается через что-то типа SetVisible в движке. На самом деле я до сих пор не понимаю, как движок определяет что объект должен откидывать тень. Ясно, как. Если добавляется в основную очередь отрисовки, то есть если визуал не худ, не стекло, не дисторт-визуал - рисуем тень. В какую очередь пойдет объект частично можно контролировать в скриптовом шейдере (ну или в сдк): sorting - в очередь полупрозрачных объектов, если есть функция l_special - в очередь дисторт-объектов. А sorting разве не отвечает за "порядок отрисовки поверхности по отношению к самому объекту,", вроде как на тени влиять он не должен. sorting заставляет движок пихать модель в очередь полупрозрачных объектов. Они (в Сталкире) теней не отбрасывают. 1) Как правильно убрать hemi освещение? Я вижу эту часть в коде но у меня постоянно ошибка при компиляции шейдера при попытках там что то поправить. Ну учет хеми составляющей убери, в шейдере оно ж так и называется - hemi. 2) Используются ли СДКшные параметры в скриптовом шейдере? Допустим я в СДК настроил шейдер а потом сделал его в скриптах, будет ли мой скриптовый шейдер, что ниже, использовать параметры из СДК как дефолтные? Скорее нет, в движке это вроде разные шейдеры. Но попробуй. Изменено 30 Августа 2013 пользователем KD87 Ссылка на комментарий
*Shoker* 322 Опубликовано 30 Августа 2013 Поделиться Опубликовано 30 Августа 2013 (изменено) Так эти шейдера на 50% состоят из работы с hemi, стоит мне что то убрать так сразу ловлю ошибку компиляции, а на что заменять не понятно. Шейдер же должен что то возвращать. Я даже saturation() не смог убрать\заменить на ноль чтобы не словить вылет. Мне б хотя бы код какого нибудь простого шейдера, который просто рисовал модель с её текстурой и чтобы она освещалась игрой по всем правилам. Или хотя бы назвать подходящие шейдера чтобы я вписал их в .s-скрипт, т.к раз тень зависит только от сортировки то мне в принципе всё равно что шейдер будет содерждать, лишь бы бампы и прочее нормально на модели отображалось. (кстати тоже хороший вопрос, не сломаются ли бампы при использовании сортировки) Юзать просто СДК-шные заготовки вроде model\model не могу потому что если не прикрутить к ним скриптовый шейдер то в игре с использованием сортировки модель рисуется сквозь себя и освещается криво. Скорее нет, в движке это вроде разные шейдеры. Но попробуй. Судя по тому что я из своего .s шейдера убрал вообще всё, в том числе и sorting и он всё равно не кидает тень, я полагаю что таки используются, просто настройки из .s могут перекрывать те что в СДК. Ну либо в скриптовых шейдерах sorting по умолчанию не 0\1. Это заблуждение. Посмотри пиксельный шейдер - ясно видно, что альфа-канал берется из текстуры. Да, это уже я неправильно сказал. Под невидимым я имел ввиду полу-невидимый. Он юзает шейдер xanomaly а тот в свою очередь текстуру pfx_glass_6 для создания искажения, так что тут я ошибся. Изменено 30 Августа 2013 пользователем *Shoker* Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О Мастер аномалий на свою заднюю точку. Ссылка на комментарий
KD87 718 Опубликовано 30 Августа 2013 Автор Поделиться Опубликовано 30 Августа 2013 Мне б хотя бы код какого нибудь простого шейдера Дак не будет нормального освещения. Нормальное освещение реализуется во время deffered-пасса, а в нем не участвует полупрозрачная геометрия. А вся непрозрачная - бросает тень. Единственное, что можно попробовать - на основе любого полупрозрачного шейдера (хоть даже и воды) написать реализацию какой-нибудь модели освещения. Конечно, освещение можно реализовать только солнечное. 1 Ссылка на комментарий
*Shoker* 322 Опубликовано 30 Августа 2013 Поделиться Опубликовано 30 Августа 2013 (изменено) чёрт... Спасибо за ответ. Заменил в 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 можно было выключать в неосвещённых участках тогда бы оно выглядело бы нормально. Ну модель освещения свою я врятли осилю Кстати бамп полностью шейдерами реализован или также в deffered? А то заметил что нога у меня плосковато выглядит.(впрочем соответствует названию шейдера) С ним бы в принципе текущий вариант можно было бы попытаться использовать. Изменено 30 Августа 2013 пользователем *Shoker* Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О Мастер аномалий на свою заднюю точку. Ссылка на комментарий
KD87 718 Опубликовано 31 Августа 2013 Автор Поделиться Опубликовано 31 Августа 2013 (изменено) Кстати бамп полностью шейдерами реализован или также в deffered? А defferd-пасс это тоже шейдеры. Тут тоже ничего утешительного - хотя и можно рассчитать бамп для полупрозрачной геометрии, его некуда применять. В сталкире бамп корректирует позицию в пикселе г-буффера, благодаря этому потом при освещении ты видишь тени от бампа. А полупрозрачная геометрия в г-буффер в принципе ничего не может записать, так что и бамп считать для нее бесполезно. Впрочем, ты-то мутишь не через полупрозрачную геометрию, а через deffer_-шейдер каким-то образом. Уж я не знаю, как ты там убрал тень (тени не там считаются), приведи хоть код шейдеров, что ли. Изменено 31 Августа 2013 пользователем KD87 Ссылка на комментарий
*Shoker* 322 Опубликовано 31 Августа 2013 Поделиться Опубликовано 31 Августа 2013 (изменено) Дык весь код и привёл выше. Я сам не знаю как и что там работает. Подозреваю что тень пропала просто из за sorting 3. Но если sorting 3 использовать без скриптового шейдера то модель начинает просвечивать сквозь себя, а в комбинации со скриптовым всё норм. И кстати говоря я выше писал про то что у меня модель светится в темноте, так вот оказалось что это похоже не из за шейдера, а из за того, что у меня модель как бы спавнится на 200 метров выше игрока, и основная геометрия (кроме центровой кости) опускается анимацией вниз к игроку, и я сейчас заметил что со стандартным model\model модель точно также светится в темноте, тогда как если спавнить её на уровне игрока то освещается нормально. Видимо игра считает что модель находится далеко от игрока и применяет к ней упрощённое освещение. В связи с этим когда я поправлю модель вполне возможно что и тот шейдер выше будет нормально освещаться в темноте и не кидать тень. Сразу хочу сказать что тени пропали не из за этого, потому-что с обычным model\model та-же модель кидает тень как надо. UPD: Ну вообще разобрался что да как, тот шейдер без тени всё также глючит (таким образом получается что без правок движка нормальный без-теневой шейдер и впрямь не сделать) а вот model\model у меня освещался в темноте потому-что игра считала что модель у меня под солнцем т.к центр модели был в небе, из за этого вся модель освещалась hemi-светом. Изменено 31 Августа 2013 пользователем *Shoker* Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О Мастер аномалий на свою заднюю точку. Ссылка на комментарий
KD87 718 Опубликовано 31 Августа 2013 Автор Поделиться Опубликовано 31 Августа 2013 Дык весь код и привёл выше Ну с этим кодом вообще счастье, что хоть что-то работает. Пиксельный шейдер полупрозрачных объектов должен возвращать цвет в виде half4, а deffer_-шейдер возвращает три вектора half4, потому что рендеринг в г-буфер идет через MRT. 1 Ссылка на комментарий
Galil 18 Опубликовано 1 Сентября 2013 Поделиться Опубликовано 1 Сентября 2013 (изменено) Возможно нубский вопрос, но все же. Есть ли хоть небольшая надежда, что когда-нибудь появятся шейдеры для спецэффектов, которые будут реагировать на окружающее освещение(хотя бы ambient-освещение)? Изменено 1 Сентября 2013 пользователем Galil Cold Zone *** Youtube *** Стволы *** SC2TV Ссылка на комментарий
KD87 718 Опубликовано 1 Сентября 2013 Автор Поделиться Опубликовано 1 Сентября 2013 @Galil, ты про взрывы, что ли? Ссылка на комментарий
Galil 18 Опубликовано 1 Сентября 2013 Поделиться Опубликовано 1 Сентября 2013 При чем тут взрывы. Я имею ввиду когда, например, днем туман выглядит нормально, а ночью от этого тумана становится слишком светло. Т.е. партиклы всегда используют свою яркость независимо от окружающего освещения. Для таких эффектов как студень и электра это нормально. Но вот дым выглядит весьма странно, когда начинает светиться ночью. Тем более у blend-шейдера есть странная особенность перекрывать светящиеся партиклы как огонь или вспышки молний. Это вызывает еще больший конфуз. Cold Zone *** Youtube *** Стволы *** SC2TV Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти