《真三》与我不得不说的三两事  (ಡωಡ)

《真三》系列在我心中有特殊的地位,小学五年级在姥姥家打开小舅的电脑,发现一款游戏(《真三》3),对于当时的我,从来没有玩过电脑游戏的我来说就像打开新世界的大门,在农村昏黄的白炽灯下,伴着鸡叫,我按下逐个键位尝试去操作,进入游戏后我化身关羽,在战场上任意厮杀。虽然游戏运行后非常卡(FPS极低,大概只有个位数),但对于初次接触电脑游戏的我来说,这简直太棒了!  回到家后我跟小伙伴们讲述《真三》有多么刺激,招式是怎样的,并且模仿那些武将的攻击动作。

当时家用电脑还不普及,我们胡同里七八个小伙伴只有两个人家里有电脑,其中一个就是我的隔壁。我经常去隔壁小伙伴家里看他玩游戏,甚是羡慕,回到家常常幻想我就是游戏中的人物,或是《血战上海滩》中持一把毛瑟与鬼子巷战的抗日战士,或是《魔兽争霸》中英勇无畏的牛头人,或是《侠盗猎车:罪恶都市》中黑白通吃、逍遥法外的克劳德。甚至在学校做值日时,手拿一把扫帚装作持枪模样,嘴里发出“嘚嘚哒”的子弹声......

时至今日,脑海中依旧浮现在昏黄灯下打《真三》,虽然巨卡但是很快乐的画面。

言归正传

《真三》赤壁之战中,火烧船的画面,火苗随机的摇曳:

我实现的效果,树上着火了,火苗随机的摇动:

核心思路:

在片段着色器中,给当前像素一个随机值,让这个像素根据这个随机值偏移。

如何输入随机值?

传入一个噪声图,用噪声图上某个像素的灰度表示随机值。

实现火苗的摇曳?

上个问题说到的噪波图,噪声图取得像素点根据时间偏移。

核心代码:

片段着色器:

float4 frag(VertexOutput i) : COLOR {//光照函数i.normalDir = normalize(i.normalDir);float3 normalDirection = i.normalDir;float3 lightDirection = normalize(_WorldSpaceLightPos0.xyz);float3 lightColor = _LightColor0.rgb;float attenuation = LIGHT_ATTENUATION(i);float3 attenColor = attenuation * _LightColor0.xyz;float NdotL = max(0.0,dot( normalDirection, lightDirection ));  float3 directDiffuse = max( 0.0, NdotL) * attenColor;float3 indirectDiffuse = float3(0,0,0);indirectDiffuse += UNITY_LIGHTMODEL_AMBIENT.rgb; //x,y方向流动float2 FlowUV = (i.uv0+float2((_SpeedX*_Time.g),(_Time.g*_SpeedY)));        float4 _NoiseMap_var = tex2D(_NoiseMap,TRANSFORM_TEX(FlowUV, _NoiseMap));//噪波强度float2 NoiseUV = (i.uv0+(float2(_NoiseMap_var.r,_NoiseMap_var.g)*_NoiseStrength));        float4 _MainTex_var = tex2D(_MainTex,TRANSFORM_TEX(NoiseUV, _MainTex));float3 diffuseColor = _MainTex_var.rgb;float3 diffuse = (directDiffuse + indirectDiffuse) * diffuseColor;float3 finalColor = diffuse;fixed4 finalRGBA = fixed4(finalColor,1);UNITY_APPLY_FOG(i.fogCoord, finalRGBA);return finalRGBA;}

需要注意的:

1.注意噪波图不要太平均,因为火苗是块状的。

2.火焰贴图需要有alpha通道,方便开启透明度融合

源码:

Shader "Custom/NoiseFlow" {Properties {_MainTex ("主纹理", 2D) = "bump" {}_NoiseMap ("噪声图", 2D) = "bump" {}_SpeedX("x方向速度",float)=0.02_SpeedY("y方向速度",float)=0.02_NoiseStrength ("噪波强度",float)=0.1}SubShader {Blend One One//Blend SrcAlpha  OneMinusSrcAlphaCull OffTags {"Queue"="Transparent"}Pass {Name "FORWARD"Tags {"LightMode"="ForwardBase"}CGPROGRAM#pragma vertex vert#pragma fragment frag#define UNITY_PASS_FORWARDBASE#include "UnityCG.cginc"#include "AutoLight.cginc"uniform float4 _LightColor0;uniform sampler2D _MainTex; uniform float4 _MainTex_ST;uniform sampler2D _NoiseMap; uniform float4 _NoiseMap_ST;struct VertexInput {float4 vertex : POSITION;float3 normal : NORMAL;float2 texcoord0 : TEXCOORD0;};struct VertexOutput {float4 pos : SV_POSITION;float2 uv0 : TEXCOORD0;float4 posWorld : TEXCOORD1;float3 normalDir : TEXCOORD2;};VertexOutput vert (VertexInput v) {VertexOutput o = (VertexOutput)0;o.uv0 = v.texcoord0;o.normalDir = UnityObjectToWorldNormal(v.normal);o.posWorld = mul(unity_ObjectToWorld, v.vertex);float3 lightColor = _LightColor0.rgb;o.pos = UnityObjectToClipPos( v.vertex );UNITY_TRANSFER_FOG(o,o.pos);TRANSFER_VERTEX_TO_FRAGMENT(o)return o;}uniform float _SpeedX;
uniform float _SpeedY;
uniform float _NoiseStrength;
float4 frag(VertexOutput i) : COLOR {//光照函数i.normalDir = normalize(i.normalDir);float3 normalDirection = i.normalDir;float3 lightDirection = normalize(_WorldSpaceLightPos0.xyz);float3 lightColor = _LightColor0.rgb;float attenuation = LIGHT_ATTENUATION(i);float3 attenColor = attenuation * _LightColor0.xyz;float NdotL = max(0.0,dot( normalDirection, lightDirection )); float3 directDiffuse = max( 0.0, NdotL) * attenColor;float3 indirectDiffuse = float3(0,0,0);indirectDiffuse += UNITY_LIGHTMODEL_AMBIENT.rgb; //x,y方向流动float2 FlowUV = (i.uv0+float2((_SpeedX*_Time.g),(_Time.g*_SpeedY)));        float4 _NoiseMap_var = tex2D(_NoiseMap,TRANSFORM_TEX(FlowUV, _NoiseMap));//噪波强度float2 NoiseUV = (i.uv0+(float2(_NoiseMap_var.r,_NoiseMap_var.g)*_NoiseStrength));        float4 _MainTex_var = tex2D(_MainTex,TRANSFORM_TEX(NoiseUV, _MainTex));float3 diffuseColor = _MainTex_var.rgb;float3 diffuse = (directDiffuse + indirectDiffuse) * diffuseColor;float3 finalColor = diffuse;fixed4 finalRGBA = fixed4(finalColor,1);UNITY_APPLY_FOG(i.fogCoord, finalRGBA);return finalRGBA;}ENDCG}}FallBack "Diffuse"
}

Shader——《真三国无双》城墙着火特效相关推荐

  1. unity实现war3真三国无双(一)资源提取

    以前一直用flash做webgame,没做过3D游戏,现在webgame的工作不好找了,打算转unity.自己玩过的3D游戏不太多,玩的最多的就属war3上的真三国无双了,所以打算用unity实现这个 ...

  2. CSU1020: 真三国无双

    1020: 真三国无双 Submit Page    Summary    Time Limit: 1 Sec     Memory Limit: 128 Mb     Submitted: 1042 ...

  3. 真三国无双8二十四项修改器风灵月影版

    点击下载来源:真三国无双8二十四项修改器风灵月影版 真三国无双8修改器风灵月影顾名思义,就是由风灵月影大神专门为<真三国无双8(Dynasty Warriors 8)>量身打造的一款游戏辅 ...

  4. ati自定义分辨率_真三国无双7游戏自定义分辨率的修改方法

    这是一个真三国无双7游戏自定义分辨率的修改方法介绍,一个非常详细的教程,玩家研究并且分享的,告诉玩家如何在游戏中修改自己需要的分辨率来迎合自己的本身的电脑,使游戏的画面效果达到最好,很实用的一个教程, ...

  5. 《真三国无双5》全人研究完整版

    <真三国无双5>全人研究完整版 2010-01-29 13:21 蜀国 赵云 系列传统主角 本作走的依然是平均路线 先说说子龙的优点吧 无双很赞 无双终结技很实用 无双连舞时攻击速度不错 ...

  6. 《真·三国无双ADVANCE》攻略

    <真·三国无双ADVANCE>攻略 基本操作 )?avz终!?   ?鱲?愈  地图画面 5_婛?6牂  方向键:移动游标 =wS(!鷉e蓿  A:选择移动目标 }c%?Q?  B:取消 ...

  7. csu 1020 真三国无双

    真三国无双 Time Limit:1000MS     Memory Limit:131072KB     64bit IO Format:%lld & %llu Submit Status ...

  8. 真三国无双3.9D蓝屏 (魔兽争霸3 蓝屏) 的处理方法

    刚才在玩真三国无双3.9D时,电脑突然蓝屏,并且发出刺耳的声音.看样子是声卡在发声的时候卡住了,导致了蓝屏.以前也遇到过类似的情况,只是后来重新装过XP系统之后就没有去重新设置一下 魔兽争霸3 的声音 ...

  9. Python开发一个《真三国无双20th纪念》人物羁绊计算器

    文章目录 <真三国无双20th纪念> 羁绊计算器源码 <真三国无双20th纪念> 目前 <真三国无双20th纪念> 这个手游在国内没有代理商,所以服务器是国际服,想 ...

  10. 无法启动此程序因为计算机中丢失d3dx9_36.dll,xp系统运行真三国无双游戏提示d3dx9_36.dll丢失的解决方法...

    真三国无双是一款备受许多xp系统用户喜欢的游戏,然而在玩的过程中,有不少xp系统用户反映说遇到提示d3dx9_36.dll丢失的情况,导致无法继续玩真三国无双游戏,这是怎么回事呢,现在随系统城小编一起 ...

最新文章

  1. Softmax和Cross-entropy是什么关系?
  2. HDU4135 HDU2841 HDU1695 求[1,m]中与n互素的数的个数
  3. js中的局部变量和全局变量
  4. linux注册函数机制,Linux可信计算机制模块详细分析之函数实现机制(1)字符设备驱动...
  5. STM32的备份寄存器测试
  6. 各银行汇款手续费之比较
  7. 为了程序员的颈椎,做机械键盘的 Cherry 发布了把椅子!
  8. 通过Kali linux 模拟CC攻击进行WEB压力测试实战
  9. Android mes系统源码,基于Android的MES监控系统设计与开发
  10. 腾讯云服务器linux系统有图形界面,腾讯云服务器如何搭建Ubuntu可视化界面?
  11. 如何下载ei和sci论文
  12. 图解大数据 | 大数据生态与应用导论
  13. 分享133个JSP源码,总有一款适合你
  14. 全局返回json数据简繁体字转换(返回数据里的中文全改成繁体字)
  15. HUB, 交换机,路由器,区别
  16. hdu 6441 (费马大定理+勾股数 数学)
  17. 北京大学MOOC 程序设计与算法(三)C++面向对象程序设计 期末考试
  18. 巴特沃斯滤波器、切比雪夫、椭圆滤波
  19. ios safari 描述文件 跳转到_iOS-app跳转safari及从safari跳回app功能实现
  20. 在cshtml文件中使用预编译语法

热门文章

  1. 【Educoder作业】问题求解——进制
  2. 国家电网公司通用车载监控终端技术解决方案,国网车载终端接入,国网统一车辆管理平台,国网统一车辆管理平台车载终端运行维护服务
  3. 凭什么杀程序员祭天?
  4. JS获取前一年或后一年的时间
  5. JAVA计算机毕业设计菜鸟驿站快递分发系统Mybatis+系统+数据库+调试部署
  6. 一场虚拟现实密室逃脱冒险,让你见识科技新加坡
  7. 大视频,经典电影想与海外亲人共享吗?酷达为您解难题
  8. 周末乐一个,转个无节操的活动
  9. 深入浅出IOC和DI---学习记录
  10. 中国将自主建造宇宙空间站