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

KD87

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

Удали combine_1.ps и в common.h замени combint_bloom на оригинальный.

  • Спасибо 1

Поделиться этим сообщением


Ссылка на сообщение

@KD87, шейдер террейна же deffer_impl_bump и deffer_impl_flat? Просто игра как будто не реагируют на мои изменения, хочу сделать намокание с отражением неба через s_sky0, s_sky1. вроде как всё сделал но сталкеру вообще пофиг что я там наделал, пытался даже нарошно вызвать вылет.

  • Спасибо 1

Поделиться этим сообщением


Ссылка на сообщение

@KD87, На момент написания сообщения перепутал их с текстурами s_env0, s_env1. 

 

С ними та же история? Хотя в теории должны быть доступны.

Поделиться этим сообщением


Ссылка на сообщение

Как нет то? В шейдере воды используются

 

Uniform samplerCube s_env0, 1

Поделиться этим сообщением


Ссылка на сообщение

Скриптовый шейдер

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);

Знаю что ввёл в заблуждение  :), нужно было сразу про юзер скай говорить, но как то из головы вылетело, упёрся в название семплера.

Поделиться этим сообщением


Ссылка на сообщение

 

 

Ты на каком движке пытаешься это сделать?

Дефолтный ТЧ с правками.

Поделиться этим сообщением


Ссылка на сообщение

@KD87,я привёл пример шейдера воды.

 

У меня пока никак не сделано, террейн просто не реагирует на изменения, я пока просто затемнил геометрию и увеличил глосс, осталось только небо заставить отражаться. Добавить эти семплеры не проблема, но ведь террейн вообще в танке насколько я понял. Ладно, сам попробую разобраться.

Поделиться этим сообщением


Ссылка на сообщение

@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
 

 

 

Поделиться этим сообщением


Ссылка на сообщение

Такой шейдер можно сделать на основе шейдера воды. Но сначала нужно создать новый шейдер в gamemtl.xr, например effects\car. Потом в папке r2 и r1 создашь скриптовый шейдер effects_car.s, а уже в нём укажешь имена ps и vs шейдеров, например car.ps\car.vs. Опирайся на шейдер воды, только чуть-чуть его нужно будет доработать. При руках из плеч можно добиться результата как на твоём скрине.

Пардон, не в gamemtl.xr, а в shaders.xr.

  • Спасибо 1
  • Полезно 1

Поделиться этим сообщением


Ссылка на сообщение

@MADMAX666, чтобы работала мягкая вода нужны все шейдеры ps/vs/s в имени которых содержится "water", можешь их смело заменять, так как в скайграфиксе эти шейдера даже не тронуты, а также конфиг файл ogse_config.h, и ещё функция convert_to_screen_space, вернее всего она содержится в конце библиотеки часто вызываемых функций common.h. Ну и текстуры пены из Чистого неба water_foam.dds, или просто выключай пену в конфиге. Хотя вылета ты всё равно не избежишь  :D

Для работы софт частиц, нужны шейдеры particles.ps/vs, если мы говорим о "Доработке графики финалки"(лучше конечно взять софт частицы из седьмого патча, там @KD87 их доработал, но тогда ещё понадобятся ещё много файлов models_/particles_.ps/vs/s), ещё нужна всё таже функция convert_to_screen_space, опять же если мы говорим о "Доработках"(иначе функция proj2screen), ещё понадобится функция из Чистого Неба Contrast. Шейдеры частиц в скайграфиксе тоже никак не тронуты, можешь смело заменять.

Для работы скрин спейс лучей нужны шейдера постпроцессинга combine_2aa/naa.ps, можешь их заменить, так как в скайграфиксе там ничго новго нету, окромя Глубины резкости(размытия горизонта), сам эффект есть и в родном шейдере сталкера, но он попросту заккоментирован(незнаю почему, по мне, с ним картинка лучше бы выглядела  :az1000106: ), ещё нужен конфиг файл 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

Поделиться этим сообщением


Ссылка на сообщение

@MADMAX666, я же всё предельно понятно описал  :)

 

 

 

Подведём итог, чтобы совместить твои шейдеры, нужно переместить всё с заменой, кроме common.h, в него лишь добавить две функции.

Поделиться этим сообщением


Ссылка на сообщение

 

 

Anonim, а разве лучи солнца не на R3 (dx10) работают только?

Лучи, как и Steep Parallax и Detail Bump и Soft Water и Soft Particles, и ещё много из ЧН чего отлично работают на Р2, что в ЧН и реализовано.

 

Отличия на Р2 ЧН и ТЧ мизерные. А вот уже Р3 со своим msaa далеко от них ушлёпал.

  • Согласен 1
  • Не согласен 1

Поделиться этим сообщением


Ссылка на сообщение

@MADMAX666, Если скрины с р2, то освещение в игре у тебя "потрачено"  :D

Поделиться этим сообщением


Ссылка на сообщение

Хотя, по бампам видно что это р2. Есть совет удалить шейдеры.

Поделиться этим сообщением


Ссылка на сообщение

Тебе же говорят, удали user или шейдеры, а потом в теме отписывайся.

Поделиться этим сообщением


Ссылка на сообщение

Блин, у тебя беда не только в моделях, судя по скринам. Ещё в освещении, его даже ужасным язык не повернется сказать. Второй совет, смени шейдеры на флоат 32 например, погоду свою стери с лица земли, вместе с user ом. И модели эти потраченные. Ещё бампы косячно выглядят, вероятно работа нового освещения.

Поделиться этим сообщением


Ссылка на сообщение

Тем кому интересно предлагаю пообщаться на тему сглаживания в Тч. Всем известно что его там как такового нет. Но есть определённый тип сглаживания, который весьма легко адаптировать к сталкеру.
Я говорю о fxaa сглаживании. Это вроде как один (если не самый) из самых лёгких в реализации и менее прожорливый тип. Работает на стадии пост обработки, а значит подключить его легче простого.
Но у него вроде есть минус, он немного мылит картинку.
Перечитал много паперов по нему и в целом он мне приглянулся.
Конечно некоторым мастерам как КД оно не вново, но может м они посвятят в нюансы.

Изменено пользователем Вспышка

Поделиться этим сообщением


Ссылка на сообщение
  • Недавно просматривали   0 пользователей

    • Ни один зарегистрированный пользователь не просматривает эту страницу.
×
×
  • Создать...