Jump to content
Korean Random
SkepticalFox

Blender Tank Viewer

Recommended Posts

, по скриншотам смотрю, что используется Blender Render. C Cycles Renderом будет работать? 

Share this post


Link to post

Short link
Share on other sites

C Cycles Renderом будет работать?

Для Суслика материалы я еще не настраивал.

Вы можете помочь нам и создать blend-файл с настроенными нодами для каких-нибудь танков.

 

Вот информация по текстурам: http://www.koreanrandom.com/forum/topic/28240-blender-tank-viewer/?p=301948

Вот фрагментный шейдер rextimmy из wtv 1.0.17

pbs.frag

#version 150 core

uniform sampler2D diffuseMap0;
uniform sampler2D normalMap;
uniform sampler2D glossMap;
uniform sampler2D detailMap;
uniform sampler2D exclusionMap;
uniform sampler2D camoMap;
uniform sampler2D shadowMap;
#ifdef DUAL_TEXTURE
uniform sampler2D diffuseMap1;
in vec2 TexCoord1;
#endif
uniform int camoEnabled;
uniform int dxt1NormalMap;
uniform int detailMetallic;
uniform float detailPower;
uniform vec4 detailTile;
uniform vec3 lightAmbient;
uniform vec3 lightDiffuse;
uniform vec4 camoTiling;
uniform vec4 camoColor0;
uniform vec4 camoColor1;
uniform vec4 camoColor2;
uniform vec4 camoColor3;
uniform int shadowEnabled;
uniform float shadowDivide;
uniform float shadowSamples;
uniform float alphaRef;

in vec2 TexCoord0;
in vec3 Normal;
in vec3 LightDir;
in vec3 EyeDir;
in vec4 ShadowCoord;
in vec3 LightDirTangent;
in vec3 EyeDirTangent;

const float PI = 3.14159265358;
const float PI_OVER_FOUR = 0.785398163395;
const float PI_OVER_TWO = 1.570796;

out vec4 oFragColor;

//TODO - fix shadow code, it's a mess and VERY inefficient,too much branching etc
vec2 poissonDisk[16] = vec2[]( 
   vec2( -0.94201624, -0.39906216 ), 
   vec2( 0.94558609, -0.76890725 ), 
   vec2( -0.094184101, -0.92938870 ), 
   vec2( 0.34495938, 0.29387760 ), 
   vec2( -0.91588581, 0.45771432 ), 
   vec2( -0.81544232, -0.87912464 ), 
   vec2( -0.38277543, 0.27676845 ), 
   vec2( 0.97484398, 0.75648379 ), 
   vec2( 0.44323325, -0.97511554 ), 
   vec2( 0.53742981, -0.47373420 ), 
   vec2( -0.26496911, -0.41893023 ), 
   vec2( 0.79197514, 0.19090188 ), 
   vec2( -0.24188840, 0.99706507 ), 
   vec2( -0.81409955, 0.91437590 ), 
   vec2( 0.19984126, 0.78641367 ), 
   vec2( 0.14383161, -0.14100790 ) 
);

float lookup(in float samples,in int index,in float depthCheck)
{
	vec2 disk = poissonDisk[index]/90.0f;
	vec2 coord = ShadowCoord.xy;
	coord.xy += disk;
	float shadow = 0.0;
	if ( texture( shadowMap, (coord/ShadowCoord.w) ).r  < depthCheck )
		shadow =  (1.0/samples *0.29);
	
	return shadow;
}

float tap4(in float depthCheck)
{
	float shadow=1.0;
	shadow -= lookup(4.0,0,depthCheck);
	shadow -= lookup(4.0,1,depthCheck);
	shadow -= lookup(4.0,2,depthCheck);
	shadow -= lookup(4.0,3,depthCheck);
	return shadow;
}

float tap8(in float depthCheck)
{
	float shadow=1.0;
	shadow -= lookup(8.0,0,depthCheck);
	shadow -= lookup(8.0,1,depthCheck);
	shadow -= lookup(8.0,2,depthCheck);
	shadow -= lookup(8.0,3,depthCheck);
	shadow -= lookup(8.0,4,depthCheck);
	shadow -= lookup(8.0,5,depthCheck);
	shadow -= lookup(8.0,6,depthCheck);
	shadow -= lookup(8.0,7,depthCheck);
	return shadow;
}

float tap16(in float depthCheck)
{
	float shadow=1.0;
	shadow -= lookup(16.0,0,depthCheck);
	shadow -= lookup(16.0,1,depthCheck);
	shadow -= lookup(16.0,2,depthCheck);
	shadow -= lookup(16.0,3,depthCheck);
	shadow -= lookup(16.0,4,depthCheck);
	shadow -= lookup(16.0,5,depthCheck);
	shadow -= lookup(16.0,6,depthCheck);
	shadow -= lookup(16.0,7,depthCheck);
	shadow -= lookup(16.0,8,depthCheck);
	shadow -= lookup(16.0,9,depthCheck);
	shadow -= lookup(16.0,10,depthCheck);
	shadow -= lookup(16.0,11,depthCheck);
	shadow -= lookup(16.0,12,depthCheck);
	shadow -= lookup(16.0,13,depthCheck);
	shadow -= lookup(16.0,14,depthCheck);
	shadow -= lookup(16.0,15,depthCheck);
	return shadow;
}


float calcShadow()
{
	float shadow = 1.0;
	if(shadowEnabled ==1)
	{
		if (ShadowCoord.w > 0.0)
		{
			vec3 n = normalize( Normal );
			vec3 l = normalize( LightDir );
			float cosTheta = clamp( dot( n,l ), 0.0,1.0 );
			float bias = 0.005*tan(acos(cosTheta));
			bias = clamp(bias,0.0,0.0019);
			int samples =int(shadowSamples);
			float depthCheck = (ShadowCoord.z-bias)/ShadowCoord.w;
			if(samples == 4)
				shadow = tap4(depthCheck);
			else if(samples == 8)
				shadow = tap8(depthCheck);
			else if(samples == 16)
				shadow = tap16(depthCheck);
		}
	}

	return shadow;
}

float saturate(float a)
{
    return min(1.0,max(0.0,a));
}

vec4 saturate( vec4 v ) { return clamp( v, 0.0, 1.0 ); }

void main(void)
{
	vec4 albedo = texture(diffuseMap0,TexCoord0);
	vec3 normalBump;
	float alphaCheck=albedo.a;
	if(dxt1NormalMap==1)
	{
		normalBump = (texture(normalMap, TexCoord0).rgb * 2.0) - 1.0;
	}
	else
	{
		vec4 normal = texture(normalMap, TexCoord0);
		normalBump.xy	= normal.ag * 2.0 - 1.0;
		normalBump.z = sqrt(1.0 - dot(normalBump.xy, normalBump.xy));
		//sneaky alpha hiding in red channel of normal map
		alphaCheck = normal.r;
	}
	if(alphaCheck < alphaRef)
	{
		discard;
	}
#ifdef DUAL_TEXTURE
	albedo *= texture(diffuseMap1,TexCoord1);
#endif
	vec2 gloss = texture(glossMap,TexCoord0).rg;
	//if(detailMetallic)
	//{
	//	vec2 newCoord = TexCoord0;
	//	newCoord *= detailTile.xy;
	//	vec4 detail = texture(detailMap, newCoord);
	//	albedo =mix(albedo,detail,detailPower);
	//}
	if(camoEnabled==1)
	{
		vec4 exclusion = texture(  exclusionMap, TexCoord0);
		vec2 newCoord = TexCoord0;//can't modify TexCoord0
		newCoord *= camoTiling.xy;
		newCoord += camoTiling.zw;
		vec4 alpha	= texture( camoMap, newCoord);
		vec4 result= mix(albedo,camoColor0,alpha.r*camoColor0.a);
		result = mix(result,camoColor1,alpha.g*camoColor1.a);
		result = mix(result,camoColor2,alpha.b*camoColor2.a);
		result = mix(result,camoColor3,alpha.a*camoColor3.a);
		albedo = mix(albedo,result,exclusion.x);
	}


	normalBump = normalize(normalBump);

	vec3 eye = normalize(EyeDirTangent);
	vec3 n = normalBump;
	vec3 ldir = normalize(LightDirTangent);
	vec3 h = normalize(ldir + eye);
	float NdotL = saturate( dot( n, ldir ));
	float NdotH = saturate( dot( n, h ));
	float HdotL = dot(h,ldir);
	float NdotV = saturate( dot(n,eye));
	float HdotV = saturate( dot(h,eye));

	float specular_power = gloss.r*65; 
	float specular_colour = gloss.g;

 	float normalisation_term = ( specular_power + 2.0 ) / 8.0;
 	float blinn_phong = pow( NdotH, specular_power );
 	float specular_term = normalisation_term * blinn_phong;
 
	float cosThetha = NdotL;

 
 	float base = 1.0f -HdotL;  
 	float exponential = pow( base, 5.0f );
 	float fresnel_term = specular_colour + ( 1.0 - specular_colour ) * exponential;
 
 	float alpha = 1.0f / ( sqrt( PI_OVER_FOUR * specular_power + PI_OVER_TWO ) );
 	float visibility_term = ( NdotL * ( 1.0 - alpha ) + alpha ) * ( NdotV * ( 1.0f - alpha ) + alpha ); 
 	visibility_term = 1.0f / visibility_term;
 
	float shadow = calcShadow();
	vec3 specular = vec3(0);
	if(shadow >0.8)
		specular =   gloss.g*specular_term * cosThetha * fresnel_term * visibility_term * lightDiffuse;
 
	vec3 diffuse = lightDiffuse * NdotL + lightAmbient;
 
 	oFragColor.rgb = diffuse*shadow * albedo.rgb + specular;
 	oFragColor.a = 1.0;

}
Edited by ShadowHunterRUS

Share this post


Link to post

Short link
Share on other sites

Для Суслика материалы я еще не настраивал.

Вы можете помочь нам и создать blend-файл с настроенными нодами для каких-нибудь танков.

 

Вот информация по текстурам: http://www.koreanrandom.com/forum/topic/28240-blender-tank-viewer/?p=301948

Развертка модели делается аддоном?

----

Апдэйт

Я видел эти коменты :) Если меня наконец-то пустят дома к компу и я не усну раньше, то попробую.

Edited by AcuteNC

Share this post


Link to post

Short link
Share on other sites

Развертка модели делается аддоном?

Развертка хранится в primitives и мой аддон её отлично загружает.

А то пиды нормально пишутся только на си

Что-то на питоне алгоритм был быстрее)))

Я не смог в C++ оптимизацию(

Share this post


Link to post

Short link
Share on other sites

 

 

Что-то на питоне алгоритм был быстрее))) Я не смог в C++ оптимизацию(

 

Да быть не может. И не надо там ни какой оптимизации. Может ты на вызове или передаче данных время теряешь?  

Share this post


Link to post

Short link
Share on other sites

кто-нибудь блендер даст, похоже в нём проблема, без копирования папки тож вылетает

(File->User Preferences...)-нажимаю и прога закрывается

Edited by Pilot_25

Share this post


Link to post

Short link
Share on other sites

.

 

 

Edited by tricsi

Share this post


Link to post

Short link
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...