Romann 623 Опубликовано 26 Марта 2016 Поделиться Опубликовано 26 Марта 2016 (изменено) Вопрос по скиннингу. У нас есть несколько типов скиннинга. А какое имеет отношение скиннинг к шейдерам? Изменено 26 Марта 2016 пользователем Romann Мать: ASRock X470 Master SLI. Процессор: AMD Ryzen 9 3900X 12-Core(4200 MHz). Память: Patriot Memory 3200 C16 Series. DDR4-3200(1600МГц), 16Гбх2(32Гб). Видео: GeForce GTX 1060 6GB. Блок питания: CoolerMaster 750 Вт. Корпус: Zalman i3 Edge. Химера конечно сильный хищник, а все держится дома. Чего же ты пришел к ней домой и пытаешься её убить? © Болотный Доктор Ссылка на комментарий https://www.amk-team.ru/forum/topic/12673-sheydery/page/45/#findComment-1003147
Graff46 623 Опубликовано 28 Марта 2016 Поделиться Опубликовано 28 Марта 2016 На данный момент доступны ли шейдеры из OGSE с отражением при "намокании" поверхности? 2 Ссылка на комментарий https://www.amk-team.ru/forum/topic/12673-sheydery/page/45/#findComment-1003477
Romann 623 Опубликовано 3 Апреля 2016 Поделиться Опубликовано 3 Апреля 2016 доступны ли шейдеры из OGSE Скачай ОГСЕ и возьми, только одни шейдеры не пойдут, нужно рендер брать, а может и весь движок. Загляни сюда. Мать: ASRock X470 Master SLI. Процессор: AMD Ryzen 9 3900X 12-Core(4200 MHz). Память: Patriot Memory 3200 C16 Series. DDR4-3200(1600МГц), 16Гбх2(32Гб). Видео: GeForce GTX 1060 6GB. Блок питания: CoolerMaster 750 Вт. Корпус: Zalman i3 Edge. Химера конечно сильный хищник, а все держится дома. Чего же ты пришел к ней домой и пытаешься её убить? © Болотный Доктор Ссылка на комментарий https://www.amk-team.ru/forum/topic/12673-sheydery/page/45/#findComment-1004578
Anonim 680 Опубликовано 21 Апреля 2016 Поделиться Опубликовано 21 Апреля 2016 @KD87, шейдер террейна же deffer_impl_bump и deffer_impl_flat? Просто игра как будто не реагируют на мои изменения, хочу сделать намокание с отражением неба через s_sky0, s_sky1. вроде как всё сделал но сталкеру вообще пофиг что я там наделал, пытался даже нарошно вызвать вылет. 1 Ссылка на комментарий https://www.amk-team.ru/forum/topic/12673-sheydery/page/45/#findComment-1007602
KD87 721 Опубликовано 26 Апреля 2016 Автор Поделиться Опубликовано 26 Апреля 2016 (изменено) Самое интересное, что вроде бы кол-во байтов у вершины должно быть больше с увеличением кол-ва данных (индексов костей и интерполяторов), но как во втором скиннинге, так и в третьем и четвертом размер один - 28 байтов. Ну, коммент не имеет отношения к кол-ву байт. Приведенные структуры очевидно разного размера. А плотная компоновка структур влияет на скорость - есть определенный оптимальный размер кол-ва данных на вершину. Как раз в районе 28-32 байт, если мне память не изменяет. А какое имеет отношение скиннинг к шейдерам? А как ты считаешь осуществляется скиннинг? шейдеры из OGSE с отражением Доступны, только придется пользоваться и нашим движком. шейдер террейна же deffer_impl_bump и deffer_impl_flat Да. Изменения в этих шейдерах требуют перезапуска игры. К тому же, не факт, что s_sky0, s_sky1 доступны в этом шейдере. Скорее нет. Ага, проверил - текстуры с вышеозначенными именами доступны только в шейдере скайбокса (sky2). Изменено 26 Апреля 2016 пользователем KD87 Ссылка на комментарий https://www.amk-team.ru/forum/topic/12673-sheydery/page/45/#findComment-1008686
Anonim 680 Опубликовано 27 Апреля 2016 Поделиться Опубликовано 27 Апреля 2016 @KD87, На момент написания сообщения перепутал их с текстурами s_env0, s_env1. С ними та же история? Хотя в теории должны быть доступны. Ссылка на комментарий https://www.amk-team.ru/forum/topic/12673-sheydery/page/45/#findComment-1008728
KD87 721 Опубликовано 27 Апреля 2016 Автор Поделиться Опубликовано 27 Апреля 2016 Ты еще раз чего-то перепутал, таких текстур нет. Ссылка на комментарий https://www.amk-team.ru/forum/topic/12673-sheydery/page/45/#findComment-1008857
Anonim 680 Опубликовано 28 Апреля 2016 Поделиться Опубликовано 28 Апреля 2016 Как нет то? В шейдере воды используются Uniform samplerCube s_env0, 1 Ссылка на комментарий https://www.amk-team.ru/forum/topic/12673-sheydery/page/45/#findComment-1008885
KD87 721 Опубликовано 28 Апреля 2016 Автор Поделиться Опубликовано 28 Апреля 2016 Как нет то? А приведи код соответствующего шейдера. У меня под рукой нет особо ресурсов никаких, так будет проще разобраться. Ты на каком движке пытаешься это сделать? Ссылка на комментарий https://www.amk-team.ru/forum/topic/12673-sheydery/page/45/#findComment-1008986
Anonim 680 Опубликовано 29 Апреля 2016 Поделиться Опубликовано 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); Знаю что ввёл в заблуждение , нужно было сразу про юзер скай говорить, но как то из головы вылетело, упёрся в название семплера. Ссылка на комментарий https://www.amk-team.ru/forum/topic/12673-sheydery/page/45/#findComment-1009032
Anonim 680 Опубликовано 29 Апреля 2016 Поделиться Опубликовано 29 Апреля 2016 Ты на каком движке пытаешься это сделать? Дефолтный ТЧ с правками. Ссылка на комментарий https://www.amk-team.ru/forum/topic/12673-sheydery/page/45/#findComment-1009033
KD87 721 Опубликовано 1 Мая 2016 Автор Поделиться Опубликовано 1 Мая 2016 Скриптовый шейдер Хм. А как ты представляешь себе комбинацию скриптового шейдера и deffer_impl? Это движковый шейдер, а ты его перегружаешь. Надо очень тщательно писать шейдер и дать ему правильное имя. Как сделано у тебя? Ссылка на комментарий https://www.amk-team.ru/forum/topic/12673-sheydery/page/45/#findComment-1009535
varan 124 Опубликовано 1 Мая 2016 Поделиться Опубликовано 1 Мая 2016 (изменено) @KD87, можете подсказать по моей проблеме? Вытащил себе локацию бар из ОГСЕ, только геометрию, без АИ-сетки. Скопировал себе ваши шейдеры. при загрузке вылетает Если не копировать папку shaders, а только файл shaders.xr все работает, но картинка в баре вот такая все очень сильно затемнено. Ставил на оригинал 1.004. Сам ОГСЕ спокойно работает на максимальных настройках. В чем может быть причина? Без вашего движка не будет работать? Изменено 1 Мая 2016 пользователем varan Ссылка на комментарий https://www.amk-team.ru/forum/topic/12673-sheydery/page/45/#findComment-1009551
Хемуль36рус 1 790 Опубликовано 2 Мая 2016 Поделиться Опубликовано 2 Мая 2016 (изменено) Вопрос такой, вот скрин с обычными шейдерами без лучей в дали туманчик типа, все выглядит нормально. Вот то же самое, та же погода и тот же час, но шейдеры с лучиками, в дали не прозрачная серость, может можно как-то настроить её прозрачность, как на первом скрине? Изменено 2 Мая 2016 пользователем Хемуль36рус Intrel Core i5 9400F, msi gtx 1660 super ventus, RAM 16g-DDR4, HD 2000g, Win 10x64, SSD 256g, SSD m2 500g. Ссылка на комментарий https://www.amk-team.ru/forum/topic/12673-sheydery/page/45/#findComment-1009601
Romann 623 Опубликовано 2 Мая 2016 Поделиться Опубликовано 2 Мая 2016 Без вашего движка не будет работать? Естественно, если тянешь шейдеры, то рендер нужен, а там и весь движок. Мать: ASRock X470 Master SLI. Процессор: AMD Ryzen 9 3900X 12-Core(4200 MHz). Память: Patriot Memory 3200 C16 Series. DDR4-3200(1600МГц), 16Гбх2(32Гб). Видео: GeForce GTX 1060 6GB. Блок питания: CoolerMaster 750 Вт. Корпус: Zalman i3 Edge. Химера конечно сильный хищник, а все держится дома. Чего же ты пришел к ней домой и пытаешься её убить? © Болотный Доктор Ссылка на комментарий https://www.amk-team.ru/forum/topic/12673-sheydery/page/45/#findComment-1009620
Anonim 680 Опубликовано 2 Мая 2016 Поделиться Опубликовано 2 Мая 2016 @KD87,я привёл пример шейдера воды. У меня пока никак не сделано, террейн просто не реагирует на изменения, я пока просто затемнил геометрию и увеличил глосс, осталось только небо заставить отражаться. Добавить эти семплеры не проблема, но ведь террейн вообще в танке насколько я понял. Ладно, сам попробую разобраться. Ссылка на комментарий https://www.amk-team.ru/forum/topic/12673-sheydery/page/45/#findComment-1009684
KD87 721 Опубликовано 6 Мая 2016 Автор Поделиться Опубликовано 6 Мая 2016 У меня пока никак не сделан террейн просто не реагирует на изменения Ну так все-таки как-то же делал. Чтобы сказать, что не так, надо знать, как сделано. Без вашего движка не будет работать? Естественно. Половина шейдеров точно работать не будет. при загрузке вылетает Конечно, в ОГСЕ движок пропатчен на использование "чистого" SM 3.0, а не того огрызка, что по умолчанию в сталкере. Соответственно, многие инструкции в наших шейдерах работать не будут. @Хемуль36рус, если лучи сделаны не постпроцессом, надо смотреть шейдер, где рисуются лоды, и там учитывать лучи, по-другому как-то блендить. А если постпроцессом, то сам шейдер лучей и смотри, опять же с блендингом что-то делать надо. Ссылка на комментарий https://www.amk-team.ru/forum/topic/12673-sheydery/page/45/#findComment-1010151
Expropriator 2 119 Опубликовано 6 Мая 2016 Поделиться Опубликовано 6 Мая 2016 Есть сборка шейдеров 1603. В чём разница, визуально, от 1602? Еще такой вопрос: почему шейдеры не пакуются в db архив. Это единственное, что у меня не попадает в состав db. Ссылка на комментарий https://www.amk-team.ru/forum/topic/12673-sheydery/page/45/#findComment-1010157
DoK74rus 19 Опубликовано 14 Мая 2016 Поделиться Опубликовано 14 Мая 2016 (изменено) Всем привет, подскажите пожалуйста какую строку в файле bloom.ps отредактировать что бы блум не засвечивал изображение на 2-4 рендерах? Такое получается сделать только если на dx10-11 рендере включить r2_ls_bloom_fast, а на остальных рендерах при этом жуткое мыло. Платформа ЗП Изменено 14 Мая 2016 пользователем DoK74rus Ссылка на комментарий https://www.amk-team.ru/forum/topic/12673-sheydery/page/45/#findComment-1011624
Anonim 680 Опубликовано 16 Мая 2016 Поделиться Опубликовано 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 Ссылка на комментарий https://www.amk-team.ru/forum/topic/12673-sheydery/page/45/#findComment-1012109
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти