帝国全面战争 修改贴 如何去掉讨厌的弹道 也就是传说中的白尾巴

时间:2010/12/10 09:11:36 编辑:Ocean

  相信很多人看到炮弹或子弹后面拖着长长的白色弹道都很不爽
  这里转一个老外的修改教程大家可以时一试

  建议备份原文件

  首先解压缩main.pack里的东西到帝国安装目录下的data文件夹,然后把main.pack改名成extension.pack

  然后在...\data\fx\里找到projectiletrail.fx文件 用文本编辑器打开

  打开文件后 你应该能看到如下内容 如果内容不符(这也是有可能发生的) 请放弃

  #include "FXConfig.h"

  #include "Camera.fx_fragment"
  #include "ScreenEffects.fx_fragment"
  #include "fog.fx_fragment"

  struct VS_INPUT
  {
  float4        position                                        : POSITION;
  float3        tangent                                                : NORMAL;
  float4        colour                                                : COLOR0;
  float        width                                                : TEXCOORD0;
  float        t                                                        : TEXCOORD1;
  float        u                                                        : TEXCOORD2;
  float        min_apparent_width_distance        : TEXCOORD3;
  float        fade_out_distance                        : TEXCOORD4;
  float        cross_fade_start_distance        : TEXCOORD5;
  float        cross_fade_range                        : TEXCOORD6;
  };

  struct VS_OUTPUT
  {
  float4                position                                        : POSITION;
  float4                colour                                                : COLOR;
  float                u                                                        : TEXCOORD0;
  float                fade_out_distance                        : TEXCOORD1;
  float                distance                                        : TEXCOORD2;       
  float                t                                                        : TEXCOORD3;
  float4                proj_pos                                        : TEXCOORD4;
  float                cross_fade_start_distance        : TEXCOORD5;
  float                cross_fade_range                        : TEXCOORD6;
  };


  DECLARE_TEXTURE(normal_map);
  const bool                render_normal_map;

  VS_OUTPUT render_vertex(const VS_INPUT v)
  {
  VS_OUTPUT r;

  float3 to_camera        = camera_position - v.position;

  float3 normal                = normalize(cross(to_camera, v.tangent));

  float4 position                = v.position;

  float distance                = length(to_camera);

  float width = v.width;

  float apparent_width = width / min(distance, v.min_apparent_width_distance);

  width = apparent_width * distance;

  width *= 1.0f - v.t;

  position.xyz                += normal * (width * 0.5f) * v.u;

  r.proj_pos = r.position                        = mul(position, view_projection);
  r.colour.rgb                = v.colour.rgb;

  r.colour.a                        = lerp(v.colour.a, 0.0f, v.t);

  r.u                                        = v.u;
  r.t                                        = v.t;

  r.fade_out_distance                        = v.fade_out_distance;
  r.distance                                        = distance;
  r.cross_fade_start_distance        = v.cross_fade_start_distance;
  r.cross_fade_range                        = v.cross_fade_range;

  return r;
  }

  float4 render_pixel(VS_OUTPUT v) : COLOR
  {
  float dist_fade_out                = v.fade_out_distance / v.distance;
  dist_fade_out                        = clamp( dist_fade_out, 0.0f, 1.0f );

  float width_fade_out        = 1.0 - abs( v.u );

  float4 colour                        = v.colour;

  float cross_fade_t                = saturate((v.distance - v.cross_fade_start_distance) / v.cross_fade_range);

  if(render_normal_map)
  {
  float4 nn = tex2D(s_normal_map, v.proj_pos.xy/30 - float2(0, time_in_sec*0.05f));//float2(v.u/40, v.t*1 - time_in_sec*0.05f));
  colour.rgb = nn.rgb;
  cross_fade_t = 1.0f - cross_fade_t;
  }

  colour.a                        *= width_fade_out * dist_fade_out * cross_fade_t;

  return hdr_encode(colour);
  }

  technique projectile_alpha_sm2
  {
  pass p0
  {
  VertexShader = compile vs_2_0 render_vertex();
  PixelShader         = compile ps_2_0 render_pixel();

  ZWRITEENABLE                                = false;
  ALPHABLENDENABLE                        = TRUE;
  SRCBLEND                                        = SRCALPHA;
  DESTBLEND                                        = INVSRCALPHA;
  }
  }

  technique projectile_add_sm2
  {
  pass p0
  {
  VertexShader = compile vs_2_0 render_vertex();
  PixelShader         = compile ps_2_0 render_pixel();

  ZWRITEENABLE                                = false;
  ALPHABLENDENABLE                        = TRUE;
  SRCBLEND                                        = SRCALPHA;
  DESTBLEND                                        = ONE;
  }
  }

  technique projectile_subtract_sm2
  {
  pass p0
  {
  VertexShader = compile vs_2_0 render_vertex();
  PixelShader         = compile ps_2_0 render_pixel();

  ZWRITEENABLE                                = false;
  ALPHABLENDENABLE                        = TRUE;
  BLENDOP                                                = REVSUBTRACT;
  SRCBLEND                                        = SRCALPHA;
  DESTBLEND                                        = ONE;
  }
  }


  现在可以用下面的代码覆盖粘贴进去 注意不要单纯地清空文件 否则会造成跳出
  #include "FXConfig.h"

  #include "Camera.fx_fragment"
  #include "ScreenEffects.fx_fragment"
  #include "fog.fx_fragment"

  struct VS_INPUT
  {
  float4        position                                        : POSITION;
  float3        tangent                                                : NORMAL;
  float4        colour                                                : COLOR0;
  float        width                                                : TEXCOORD0;
  float        t                                                        : TEXCOORD1;
  float        u                                                        : TEXCOORD2;
  float        min_apparent_width_distance        : TEXCOORD3;
  float        fade_out_distance                        : TEXCOORD4;
  float        cross_fade_start_distance        : TEXCOORD5;
  float        cross_fade_range                        : TEXCOORD6;
  };

  struct VS_OUTPUT
  {
  float4                position                                        : POSITION;
  float4                colour                                                : COLOR;
  float                u                                                        : TEXCOORD0;
  float                fade_out_distance                        : TEXCOORD1;
  float                distance                                        : TEXCOORD2;       
  float                t                                                        : TEXCOORD3;
  float4                proj_pos                                        : TEXCOORD4;
  float                cross_fade_start_distance        : TEXCOORD5;
  float                cross_fade_range                        : TEXCOORD6;
  };


  DECLARE_TEXTURE(normal_map);
  const bool                render_normal_map;

  VS_OUTPUT render_vertex(const VS_INPUT v)
  {
  }

  float4 render_pixel(VS_OUTPUT v) : COLOR
  {
  }

  technique projectile_alpha_sm2
  {
  }

  technique projectile_add_sm2
  {
  }

  technique projectile_subtract_sm2
  {
  }

  一定要注意备份哦

相关攻略
相关游戏