Anonim 680 Опубликовано 31 Января 2016 Ты можешь ставить любой пак. Поделиться этим сообщением Ссылка на сообщение
Anonim 680 Опубликовано 25 Февраля 2016 Обновил свой ПК, теперь и показать что-либо не стыдно. По поводу, вот вам немного богоподобных скринов с чистого ТЧ 5 Поделиться этим сообщением Ссылка на сообщение
Anonim 680 Опубликовано 22 Марта 2016 Удали combine_1.ps и в common.h замени combint_bloom на оригинальный. 1 Поделиться этим сообщением Ссылка на сообщение
Anonim 680 Опубликовано 21 Апреля 2016 @KD87, шейдер террейна же deffer_impl_bump и deffer_impl_flat? Просто игра как будто не реагируют на мои изменения, хочу сделать намокание с отражением неба через s_sky0, s_sky1. вроде как всё сделал но сталкеру вообще пофиг что я там наделал, пытался даже нарошно вызвать вылет. 1 Поделиться этим сообщением Ссылка на сообщение
Anonim 680 Опубликовано 27 Апреля 2016 @KD87, На момент написания сообщения перепутал их с текстурами s_env0, s_env1. С ними та же история? Хотя в теории должны быть доступны. Поделиться этим сообщением Ссылка на сообщение
Anonim 680 Опубликовано 28 Апреля 2016 Как нет то? В шейдере воды используются Uniform samplerCube s_env0, 1 Поделиться этим сообщением Ссылка на сообщение
Anonim 680 Опубликовано 29 Апреля 2016 Скриптовый шейдер local tex_env0 = "$user$sky0" // текущий куб local tex_env1 = "$user$sky1" // следующий куб shader:sampler ("s_env0") :texture (tex_env0) : clamp() shader:sampler ("s_env1") :texture (tex_env1) : clamp() Шейдер uniform samplerCUBE s_env0; uniform samplerCUBE s_env1; half3 env0 = texCUBE (s_env0, vreflect); half3 env1 = texCUBE (s_env1, vreflect); half3 env = lerp (env0,env1,L_ambient.w); Знаю что ввёл в заблуждение , нужно было сразу про юзер скай говорить, но как то из головы вылетело, упёрся в название семплера. Поделиться этим сообщением Ссылка на сообщение
Anonim 680 Опубликовано 29 Апреля 2016 Ты на каком движке пытаешься это сделать? Дефолтный ТЧ с правками. Поделиться этим сообщением Ссылка на сообщение
Anonim 680 Опубликовано 2 Мая 2016 @KD87,я привёл пример шейдера воды. У меня пока никак не сделано, террейн просто не реагирует на изменения, я пока просто затемнил геометрию и увеличил глосс, осталось только небо заставить отражаться. Добавить эти семплеры не проблема, но ведь террейн вообще в танке насколько я понял. Ладно, сам попробую разобраться. Поделиться этим сообщением Ссылка на сообщение
Anonim 680 Опубликовано 16 Мая 2016 @KD87, Таки дела, перенёс детальный бамп и стип параллакс из ЧН, код: sload.h #ifndef SLOAD_H #define SLOAD_H #include "common.h" ////////////////////////////////////////////////////////////////////////////////////////// // Bumped surface loader // ////////////////////////////////////////////////////////////////////////////////////////// struct surface_bumped { half4 base; half3 normal; half gloss; half height; }; #ifdef DBG_TMAPPING half4 tbase (float2 tc) { float2 tile = max(ddx(tc),ddy(tc)); return (1-max(tile.x,tile.y)); //*tex2D (s_base, tc); } #else half4 tbase (float2 tc) { return tex2D (s_base, tc); } #endif #if defined(ALLOW_STEEPPARALLAX) && defined(USE_STEEPPARALLAX) static const float fParallaxStartFade = 8.0f; static const float fParallaxStopFade = 12.0f; void UpdateTC( inout p_bumped I) { if (I.position.z < fParallaxStopFade) { const float maxSamples = 25; const float minSamples = 5; const float fParallaxOffset = -0.013; // Calculate number of steps float nNumSteps = lerp( maxSamples, minSamples, normalize(I.eye).z ); float fStepSize = 1.0 / nNumSteps; float2 vDelta = normalize(I.eye).xy * fParallaxOffset*1.2; float2 vTexOffsetPerStep = fStepSize * vDelta; // Prepare start data for cycle float2 vTexCurrentOffset = I.tcdh; float fCurrHeight = 0.0; float fCurrentBound = 1.0; /* for( int i=0; i<nNumSteps; ++i ) { if (fCurrHeight < fCurrentBound) { vTexCurrentOffset += vTexOffsetPerStep; fCurrHeight = s_bumpX.SampleLevel( smp_base, vTexCurrentOffset.xy, 0 ).a; fCurrentBound -= fStepSize; } } */ //[unroll(25)] // Doesn't work with [loop] for( ;fCurrHeight < fCurrentBound; fCurrentBound -= fStepSize ) { vTexCurrentOffset += vTexOffsetPerStep; fCurrHeight = tex2Dlod( s_bumpX, float4(vTexCurrentOffset.xy,0,0) ).a; } // Reconstruct previouse step's data vTexCurrentOffset -= vTexOffsetPerStep; float fPrevHeight = tex2D( s_bumpX, float3(vTexCurrentOffset.xy,0) ).a; // Smooth tc position between current and previouse step float fDelta2 = ((fCurrentBound + fStepSize) - fPrevHeight); float fDelta1 = (fCurrentBound - fCurrHeight); float fParallaxAmount = (fCurrentBound * fDelta2 - (fCurrentBound + fStepSize) * fDelta1 ) / ( fDelta2 - fDelta1 ); float fParallaxFade = smoothstep(fParallaxStopFade, fParallaxStartFade, I.position.z); float2 vParallaxOffset = vDelta * ((1- fParallaxAmount )*fParallaxFade); float2 vTexCoord = I.tcdh + vParallaxOffset; // Output the result I.tcdh = vTexCoord; #if defined(USE_TDETAIL) && defined(USE_STEEPPARALLAX) I.tcdbump = vTexCoord * dt_params; #endif } } #elif defined(USE_PARALLAX) || defined(USE_STEEPPARALLAX) void UpdateTC( inout p_bumped I) { half height = tex2D( s_bumpX, I.tcdh).w; // //height /= 2; //height *= 0.8; height = height*(parallax.x) + (parallax.y); // float2 new_tc = I.tcdh + height * normalize(I.eye); // // Output the result I.tcdh.xy = new_tc; } #else // USE_PARALLAX void UpdateTC( inout p_bumped I) { ; } #endif // USE_PARALLAX /*#ifdef USE_PARALLAX surface_bumped sload_i ( p_bumped I) // + texld, mad, nrm(3), mad = 1+1+3+1 = 6, 15+6=21, OK { surface_bumped S; half height = tex2D (s_bumpX, I.tcdh).w; // height = height*parallax.x + parallax.y; // float2 new_tc = I.tcdh + height*normalize (I.eye); // half4 Nu = tex2D (s_bump, new_tc); // IN: normal.gloss half4 NuE = tex2D (s_bumpX, new_tc); // IN: normal_error.height S.base = tbase (new_tc); // IN: rgb.a S.normal = Nu.wzyx + (NuE.xyz - 1.0h); // (Nu.wzyx - .5h) + (E-.5) S.gloss = Nu.x*Nu.x ; // S.gloss = Nu.x*Nu.x; S.height = NuE.z ; #ifdef USE_TDETAIL half4 detail = tex2D(s_detail,I.tcdbump) ; S.base.rgb = S.base.rgb * detail.rgb*2 ; S.gloss = S.gloss * detail.w * 2 ; #endif return S; } #else*/ surface_bumped sload_i ( p_bumped I) { surface_bumped S; UpdateTC(I); // All kinds of parallax are applied here. half4 Nu = tex2D (s_bump, I.tcdh); // IN: normal.gloss half4 NuE = tex2D (s_bumpX,I.tcdh); // IN: normal_error.height S.base = tbase (I.tcdh) ; // IN: rgb.a S.normal = Nu.wzyx + (NuE.xyz - 1.0h) ; S.gloss = Nu.x*Nu.x ; // S.gloss = Nu.x*Nu.x; S.height = NuE.z; /*#ifdef USE_TDETAIL half4 detail = tex2D(s_detail,I.tcdbump) ; S.base.rgb = S.base.rgb*detail.rgb *2 ; S.gloss = S.gloss * detail.w * 2 ; #endif*/ #ifdef USE_TDETAIL #ifdef USE_TDETAIL_BUMP half4 NDetail = tex2D( s_detailBump, I.tcdbump); half4 NDetailX = tex2D( s_detailBumpX, I.tcdbump); S.gloss = S.gloss * NDetail.x * 2; //S.normal += NDetail.wzy-.5; S.normal += NDetail.wzy + NDetailX.xyz - 1.0h; // (Nu.wzyx - .5h) + (E-.5) half4 detail = tex2D( s_detail, I.tcdbump); S.base.rgb = S.base.rgb * detail.rgb * 2; // S.base.rgb = float3(1,0,0); #else // USE_TDETAIL_BUMP half4 detail = tex2D( s_detail, I.tcdbump); S.base.rgb = S.base.rgb * detail.rgb * 2; S.gloss = S.gloss * detail.w * 2; #endif // USE_TDETAIL_BUMP #endif return S; } /*#endif*/ surface_bumped sload ( p_bumped I) { surface_bumped S = sload_i (I); S.normal.z *= 0.5; //. make bump twice as contrast (fake, remove me if possible) #if defined(ALLOW_STEEPPARALLAX) && defined(USE_STEEPPARALLAX) // S.base.yz = float2(0,0); #endif return S; } #endif deffer_base_bump.vs #include "common.h" p_bumped main ( v_static I ) { float4 w_pos = I.P ; float2 tc = unpack_tc_base (I.tc,I.T.w,I.B.w); // copy tc float hemi = I.Nh.w ; // Eye-space pos/normal p_bumped O; float3 Pe = mul (m_WV, w_pos ); O.hpos = mul (m_WVP, w_pos ); O.tcdh = float4 (tc.xyyy ); O.position = float4 (Pe, hemi ); #if defined(USE_R2_STATIC_SUN) && !defined(USE_LM_HEMI) O.tcdh.w = I.color.w; // (r,g,b,dir-occlusion) #endif // Calculate the 3x3 transform from tangent space to eye-space // TangentToEyeSpace = object2eye * tangent2object // = object2eye * transpose(object2tangent) (since the inverse of a rotation is its transpose) float3 N = unpack_bx4(I.Nh); // just scale (assume normal in the -.5f, .5f) float3 T = unpack_bx4(I.T); // float3 B = unpack_bx4(I.; // float3x3 xform = mul ((float3x3)m_WV, float3x3( T.x,B.x,N.x, T.y,B.y,N.y, T.z,B.z,N.z )); // The pixel shader operates on the bump-map in [0..1] range // Remap this range in the matrix, anyway we are pixel-shader limited // ...... [ 2 0 0 0] // ...... [ 0 2 0 0] // ...... [ 0 0 2 0] // ...... [-1 -1 -1 1] // issue: strange, but it's slower // issue: interpolators? dp4? VS limited? black magic? // Feed this transform to pixel shader O.M1 = xform[0]; O.M2 = xform[1]; O.M3 = xform[2]; /*#ifdef USE_PARALLAX O.eye = mul (float3x3(T,B,N),-(w_pos - eye_position)); #endif*/ #if defined(USE_PARALLAX) || defined(USE_STEEPPARALLAX) O.eye = mul (float3x3(T,B,N),-(w_pos - eye_position)); #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; Для детального бампа пропатчил второй рендер соответсвующей правкой из расширений. Так вот, в игре всё работает. Я для дебага добавил в common.h дефайны. Но ведь это не по людски, как я считаю. Нужно как в ЧН добавлять новые шейдеры с хвостами "db" и "steep", но так как в патче движка я далеко не ушёл, немогу это сделать. Можешь как-нибудь помочь? В огсе длл // HQ if (bump && hq) { if (C.bFlags & bDetailBump) strcat (ps,"_db"); if (C.bFlags & bParallax) strcat (ps,"_steep"); strcat (vs,"-hq"); strcat (ps,"-hq"); } Короче перенёс на 7 патч, сам код: #ifndef SLOAD_H #define SLOAD_H #include "common.h" ////////////////////////////////////////////////////////////////////////////////////////// // Bumped surface loader // ////////////////////////////////////////////////////////////////////////////////////////// struct surface_bumped { half4 base; half3 normal; half gloss; half height; }; #ifdef DBG_TMAPPING half4 tbase (float2 tc) { float2 tile = max(ddx(tc),ddy(tc)); return (1-max(tile.x,tile.y)); //*tex2D (s_base, tc); } #else half4 tbase (float2 tc) { return tex2D (s_base, tc); } #endif #if !defined(ALLOW_STEEP_PARALLAX) #define POM_MAX_SAMPLES int(1) #define POM_MIN_SAMPLES int(1) // #define POM_FINAL_INTERSECTION_LOOPS int (1) #elif ALLOW_STEEP_PARALLAX==1 #define POM_MAX_SAMPLES int(15) #define POM_MIN_SAMPLES int(3) // #define POM_FINAL_INTERSECTION_LOOPS int (3) #elif ALLOW_STEEP_PARALLAX==2 #define POM_MAX_SAMPLES int(30) #define POM_MIN_SAMPLES int(5) // #define POM_FINAL_INTERSECTION_LOOPS int (5) #elif ALLOW_STEEP_PARALLAX==3 #define POM_MAX_SAMPLES int(40) #define POM_MIN_SAMPLES int(10) // #define POM_FINAL_INTERSECTION_LOOPS int (7) #elif ALLOW_STEEP_PARALLAX==4 #define POM_MAX_SAMPLES int(60) #define POM_MIN_SAMPLES int(20) // #define POM_FINAL_INTERSECTION_LOOPS int (10) #endif #if defined(ALLOW_STEEPPARALLAX) && defined(USE_STEEPPARALLAX) static const float fParallaxStartFade = 8.0f; static const float fParallaxStopFade = 12.0f; void UpdateTC( inout p_bumped I) { if (I.position.z < fParallaxStopFade) { // const float maxSamples = 25; // const float minSamples = 5; const float fParallaxOffset = -0.013; // Calculate number of steps float nNumSteps = lerp( POM_MAX_SAMPLES, POM_MIN_SAMPLES, normalize(I.eye).z ); float fStepSize = 1.0 / nNumSteps; float2 vDelta = normalize(I.eye).xy * fParallaxOffset*1.2; float2 vTexOffsetPerStep = fStepSize * vDelta; // Prepare start data for cycle float2 vTexCurrentOffset = I.tcdh; float fCurrHeight = 0.0; float fCurrentBound = 1.0; /* for( int i=0; i<nNumSteps; ++i ) { if (fCurrHeight < fCurrentBound) { vTexCurrentOffset += vTexOffsetPerStep; fCurrHeight = s_bumpX.SampleLevel( smp_base, vTexCurrentOffset.xy, 0 ).a; fCurrentBound -= fStepSize; } } */ //[unroll(25)] // Doesn't work with [loop] for( ;fCurrHeight < fCurrentBound; fCurrentBound -= fStepSize ) { vTexCurrentOffset += vTexOffsetPerStep; fCurrHeight = tex2Dlod( s_bumpX, float4(vTexCurrentOffset.xy,0,0) ).a; } // Reconstruct previouse step's data vTexCurrentOffset -= vTexOffsetPerStep; float fPrevHeight = tex2D( s_bumpX, float3(vTexCurrentOffset.xy,0) ).a; // Smooth tc position between current and previouse step float fDelta2 = ((fCurrentBound + fStepSize) - fPrevHeight); float fDelta1 = (fCurrentBound - fCurrHeight); float fParallaxAmount = (fCurrentBound * fDelta2 - (fCurrentBound + fStepSize) * fDelta1 ) / ( fDelta2 - fDelta1 ); float fParallaxFade = smoothstep(fParallaxStopFade, fParallaxStartFade, I.position.z); float2 vParallaxOffset = vDelta * ((1- fParallaxAmount )*fParallaxFade); float2 vTexCoord = I.tcdh + vParallaxOffset; // Output the result I.tcdh = vTexCoord; #if defined(USE_TDETAIL) && defined(USE_STEEPPARALLAX) I.tcdbump = vTexCoord * dt_params; #endif } } #elif defined(USE_PARALLAX) || defined(USE_STEEPPARALLAX) void UpdateTC( inout p_bumped I) { half height = tex2D( s_bumpX, I.tcdh).w; // //height /= 2; //height *= 0.8; height = height*(parallax.x) + (parallax.y); // float2 new_tc = I.tcdh + height * normalize(I.eye); // // Output the result I.tcdh.xy = new_tc; } #else // USE_PARALLAX void UpdateTC( inout p_bumped I) { ; } #endif // USE_PARALLAX /*#ifdef USE_PARALLAX surface_bumped sload_i ( p_bumped I) // + texld, mad, nrm(3), mad = 1+1+3+1 = 6, 15+6=21, OK { surface_bumped S; half height = tex2D (s_bumpX, I.tcdh).w; // height = height*parallax.x + parallax.y; // float2 new_tc = I.tcdh + height*normalize (I.eye); // half4 Nu = tex2D (s_bump, new_tc); // IN: normal.gloss half4 NuE = tex2D (s_bumpX, new_tc); // IN: normal_error.height S.base = tbase (new_tc); // IN: rgb.a S.normal = Nu.wzyx + (NuE.xyz - 1.0h); // (Nu.wzyx - .5h) + (E-.5) S.gloss = Nu.x*Nu.x ; // S.gloss = Nu.x*Nu.x; S.height = NuE.z ; #ifdef USE_TDETAIL half4 detail = tex2D(s_detail,I.tcdbump) ; S.base.rgb = S.base.rgb * detail.rgb*2 ; S.gloss = S.gloss * detail.w * 2 ; #endif return S; } #else*/ uniform sampler2D s_detailBump; uniform sampler2D s_detailBumpX; surface_bumped sload_i ( p_bumped I) { surface_bumped S; UpdateTC(I); // All kinds of parallax are applied here. half4 Nu = tex2D (s_bump, I.tcdh); // IN: normal.gloss half4 NuE = tex2D (s_bumpX,I.tcdh); // IN: normal_error.height S.base = tbase (I.tcdh) ; // IN: rgb.a S.normal = Nu.wzyx + (NuE.xyz - 1.0h) ; S.gloss = Nu.x*Nu.x ; // S.gloss = Nu.x*Nu.x; S.height = NuE.z; /*#ifdef USE_TDETAIL half4 detail = tex2D(s_detail,I.tcdbump) ; S.base.rgb = S.base.rgb*detail.rgb *2 ; S.gloss = S.gloss * detail.w * 2 ; #endif*/ #ifdef USE_TDETAIL #ifdef USE_TDETAIL_BUMP half4 NDetail = tex2D( s_detailBump, I.tcdbump); half4 NDetailX = tex2D( s_detailBumpX, I.tcdbump); S.gloss = S.gloss * NDetail.x * 2; //S.normal += NDetail.wzy-.5; S.normal += NDetail.wzy + NDetailX.xyz - 1.0h; // (Nu.wzyx - .5h) + (E-.5) half4 detail = tex2D( s_detail, I.tcdbump); S.base.rgb = S.base.rgb * detail.rgb * 2; // S.base.rgb = float3(1,0,0); #else // USE_TDETAIL_BUMP half4 detail = tex2D( s_detail, I.tcdbump); S.base.rgb = S.base.rgb * detail.rgb * 2; S.gloss = S.gloss * detail.w * 2; #endif // USE_TDETAIL_BUMP #endif return S; } /*#endif*/ surface_bumped sload ( p_bumped I) { surface_bumped S = sload_i (I); S.normal.z *= 0.5; //. make bump twice as contrast (fake, remove me if possible) #if defined(ALLOW_STEEPPARALLAX) && defined(USE_STEEPPARALLAX) // S.base.yz = float2(0,0); #endif return S; } #endif Поделиться этим сообщением Ссылка на сообщение
Anonim 680 Опубликовано 6 Июля 2016 Такой шейдер можно сделать на основе шейдера воды. Но сначала нужно создать новый шейдер в gamemtl.xr, например effects\car. Потом в папке r2 и r1 создашь скриптовый шейдер effects_car.s, а уже в нём укажешь имена ps и vs шейдеров, например car.ps\car.vs. Опирайся на шейдер воды, только чуть-чуть его нужно будет доработать. При руках из плеч можно добиться результата как на твоём скрине. Пардон, не в gamemtl.xr, а в shaders.xr. 1 1 Поделиться этим сообщением Ссылка на сообщение
Anonim 680 Опубликовано 9 Июля 2016 @MADMAX666, чтобы работала мягкая вода нужны все шейдеры ps/vs/s в имени которых содержится "water", можешь их смело заменять, так как в скайграфиксе эти шейдера даже не тронуты, а также конфиг файл ogse_config.h, и ещё функция convert_to_screen_space, вернее всего она содержится в конце библиотеки часто вызываемых функций common.h. Ну и текстуры пены из Чистого неба water_foam.dds, или просто выключай пену в конфиге. Хотя вылета ты всё равно не избежишь Для работы софт частиц, нужны шейдеры particles.ps/vs, если мы говорим о "Доработке графики финалки"(лучше конечно взять софт частицы из седьмого патча, там @KD87 их доработал, но тогда ещё понадобятся ещё много файлов models_/particles_.ps/vs/s), ещё нужна всё таже функция convert_to_screen_space, опять же если мы говорим о "Доработках"(иначе функция proj2screen), ещё понадобится функция из Чистого Неба Contrast. Шейдеры частиц в скайграфиксе тоже никак не тронуты, можешь смело заменять. Для работы скрин спейс лучей нужны шейдера постпроцессинга combine_2aa/naa.ps, можешь их заменить, так как в скайграфиксе там ничго новго нету, окромя Глубины резкости(размытия горизонта), сам эффект есть и в родном шейдере сталкера, но он попросту заккоментирован(незнаю почему, по мне, с ним картинка лучше бы выглядела ), ещё нужен конфиг файл ogse_config.h и сам шейдер лучей ogse_sunshafts.h, ах да, ещё всё таже функция convert_to_screen_space. Подведём итог, чтобы совместить твои шейдеры, нужно переместить всё с заменой, кроме common.h, в него лишь добавить две функции. В "Доработках" в этом файле есть ещё немного правок, которые тебе наврятли понадобятся, плюс нигде не используемая структура combine, видимо @KD87 забыл её вырезать, но если хочешь повыпендриватся можешь в шейдерах combine_2aa/naa заменить название структуры с v2p на combine, а саму структуру v2p удалить . Но помни что без правок рендера про которые ты говорил в своём посте, не будут работать мягкие частицы(совсем не будут), мягкая вода и лучи заведутся и даже будут работать, но нужно будет захардкодить два дефайна #define SS_QUALITY 3 (от 1 до 3, аналогично консольной команде низко/средне/высоко), #define USE_SOFT_WATER. 4 Поделиться этим сообщением Ссылка на сообщение
Anonim 680 Опубликовано 11 Июля 2016 @MADMAX666, я же всё предельно понятно описал Подведём итог, чтобы совместить твои шейдеры, нужно переместить всё с заменой, кроме common.h, в него лишь добавить две функции. Поделиться этим сообщением Ссылка на сообщение
Anonim 680 Опубликовано 11 Июля 2016 Anonim, а разве лучи солнца не на R3 (dx10) работают только? Лучи, как и Steep Parallax и Detail Bump и Soft Water и Soft Particles, и ещё много из ЧН чего отлично работают на Р2, что в ЧН и реализовано. Отличия на Р2 ЧН и ТЧ мизерные. А вот уже Р3 со своим msaa далеко от них ушлёпал. 1 1 Поделиться этим сообщением Ссылка на сообщение
Anonim 680 Опубликовано 30 Июля 2016 Нашёл интересный документ по лайт шафтам, кому интересно - вот ссылка https://developer.amd.com/wordpress/media/2012/10/Mitchell_LightShafts.pdf В ЧН принцип почти такой же. Поделиться этим сообщением Ссылка на сообщение
Anonim 680 Опубликовано 30 Июля 2016 @MADMAX666, Если скрины с р2, то освещение в игре у тебя "потрачено" Поделиться этим сообщением Ссылка на сообщение
Anonim 680 Опубликовано 30 Июля 2016 Хотя, по бампам видно что это р2. Есть совет удалить шейдеры. Поделиться этим сообщением Ссылка на сообщение
Anonim 680 Опубликовано 30 Июля 2016 Тебе же говорят, удали user или шейдеры, а потом в теме отписывайся. Поделиться этим сообщением Ссылка на сообщение
Anonim 680 Опубликовано 30 Июля 2016 Блин, у тебя беда не только в моделях, судя по скринам. Ещё в освещении, его даже ужасным язык не повернется сказать. Второй совет, смени шейдеры на флоат 32 например, погоду свою стери с лица земли, вместе с user ом. И модели эти потраченные. Ещё бампы косячно выглядят, вероятно работа нового освещения. Поделиться этим сообщением Ссылка на сообщение
Anonim 680 Опубликовано 30 Июля 2016 (изменено) Тем кому интересно предлагаю пообщаться на тему сглаживания в Тч. Всем известно что его там как такового нет. Но есть определённый тип сглаживания, который весьма легко адаптировать к сталкеру.Я говорю о fxaa сглаживании. Это вроде как один (если не самый) из самых лёгких в реализации и менее прожорливый тип. Работает на стадии пост обработки, а значит подключить его легче простого.Но у него вроде есть минус, он немного мылит картинку.Перечитал много паперов по нему и в целом он мне приглянулся.Конечно некоторым мастерам как КД оно не вново, но может м они посвятят в нюансы. Изменено 30 Июля 2016 пользователем Вспышка Поделиться этим сообщением Ссылка на сообщение