unity shader 人物走入草丛,草的晃动特效特效怎么做?
在游戏中,草丛可以增加游戏的真实感,但是如果草丛没有动态效果,会使得游戏显得很生硬。因此,在游戏中,我们需要给草丛添加动态效果,让草丛随着人物的移动而摇曳起来。本文将介绍如何使用Unity Shader来实现人物走入草丛,草的晃动特效。
一、草丛模型的制作
首先,我们需要制作草丛的模型。在Unity中,我们可以使用Unity自带的草丛模型,也可以使用第三方模型。如果使用Unity自带的草丛模型,可以在菜单栏中选择GameObject->3D Object->Grass进行创建。如果使用第三方模型,需要将模型导入到Unity中。
二、草丛材质的制作
接下来,我们需要为草丛创建材质。在Unity中,材质是决定物体外观的重要因素之一。我们可以使用Unity自带的材质,也可以自己创建材质。在本例中,我们将创建一个新的材质。
创建新材质
在Unity中,我们可以在Project面板中右键点击空白处,选择Create->Material来创建新材质。
编辑材质
在Inspector面板中,我们可以编辑材质的属性。在本例中,我们需要编辑以下属性:
(1)Diffuse:设置草丛的颜色。
(2)Normal Map:设置草丛的法线贴图,用于模拟草丛的凹凸感。
(3)Alpha Cutoff:设置草丛的透明度,用于控制草丛的密度。
(4)Transparency:设置草丛的透明度,用于控制草丛的透明度。
三、草丛的晃动特效实现
在上面的两个步骤中,我们已经完成了草丛模型和材质的制作。接下来,我们需要使用Shader来实现草丛的晃动特效。
编写Shader
在Unity中,我们可以使用Shader来实现草丛的晃动特效。Shader是一种用于渲染3D图形的程序,它可以控制物体的外观和动态效果。在本例中,我们将使用Shader来实现草丛的晃动特效。
首先,我们需要创建一个新的Shader。在Unity中,我们可以在Project面板中右键点击空白处,选择Create->Shader来创建新Shader。
然后,我们需要编辑Shader的代码。在本例中,我们将使用Unity自带的Standard Shader作为基础,然后在其基础上添加草丛的晃动特效。下面是Shader的代码:
Shader "Custom/GrassShader"{
Properties{
_MainTex("Texture", 2D) = "white" {}
_BumpMap("Normal Map", 2D) = "bump" {}
_Cutoff("Alpha Cutoff", Range(0.0, 1.0)) = 0.5
_Transparency("Transparency", Range(0.0, 1.0)) = 1.0
_WaveAmplitude("Wave Amplitude", Range(0.0, 1.0)) = 0.1
_WaveFrequency("Wave Frequency", Range(0.0, 10.0)) = 1.0
_WindDirection("Wind Direction", Vector) = (1, 1, 0)
_WindSpeed("Wind Speed", Range(0.0, 10.0)) = 1.0
}
SubShader{
Tags{ "RenderType"="Opaque" }
LOD 100
CGPROGRAM
#pragma surface surf Standard
#pragma target 3.0
.
sampler2D _MainTex;
sampler2D _BumpMap;
float _Cutoff;
float _Transparency;
float _WaveAmplitude;
float _WaveFrequency;
float3 _WindDirection;
float _WindSpeed;
struct Input{
float2 uv_MainTex;
float2 uv_BumpMap;
float3 worldPos;
float3 worldNormal;
float3 worldTangent;
float3 worldBinormal;
float3 worldViewDir;
};
void surf(Input IN, inout SurfaceOutputStandard o){
// Diffuse
o.Albedo = tex2D(_MainTex, IN.uv_MainTex).rgb;
// Normal
o.Normal = UnpackNormal(tex2D(_BumpMap, IN.uv_BumpMap));
// Alpha
clip(o.Albedo.a - _Cutoff);
// Transparency
o.Alpha = _Transparency;
// Wave
float3 windDir = normalize(_WindDirection);
float3 windVec = windDir * _WindSpeed;
float3 worldPos = IN.worldPos;
float3 offset = worldPos.xz * _WaveFrequency;
float wave = _WaveAmplitude * (sin(dot(offset, windVec)) + 1) / 2;
worldPos.y += wave;
IN.worldPos = worldPos;
// Lighting
o.Metallic = 0;
o.Smoothness = 0.5;
o.Emission = 0;
}
ENDCG
}
FallBack "Diffuse"
}
解析Shader
上面的Shader代码中,我们定义了以下属性:
(1)_MainTex:草丛的颜色贴图。
(2)_BumpMap:草丛的法线贴图。
(3)_Cutoff:草丛的透明度。
(4)_Transparency:草丛的透明度。
(5)_WaveAmplitude:草丛的晃动幅度。
(6)_WaveFrequency:草丛的晃动频率。
(7)_WindDirection:草丛的风向。
(8)_WindSpeed:草丛的风速。
在surf函数中,我们实现了以下功能:
(1)Diffuse:设置草丛的颜色。
(2)Normal:设置草丛的法线贴图。
(3)Alpha:控制草丛的透明度。
(4)Transparency:控制草丛的透明度。
(5)Wave:实现草丛的晃动特效。
(6)Lighting:设置草丛的光照效果。
草丛的晃动特效实现
在Shader中,我们使用了sin函数来实现草丛的晃动特效。sin函数可以产生周期性的波形,我们可以通过改变参数来控制波形的幅度和频率。
草丛的晃动特效需要受到风向和风速的影响。我们可以通过改变_WindDirection和_WindSpeed来控制风向和风速。
四、示例
在本例中,我们将使用Unity自带的草丛模型,创建一个新的材质,并使用上面的Shader来实现草丛的晃动特效。
创建新材质
在Unity中,我们可以在Project面板中右键点击空白处,选择Create->Material来创建新材质。
编辑材质
在Inspector面板中,我们可以编辑材质的属性。在本例中,我们需要编辑以下属性:
(1)Diffuse:设置草丛的颜色。
(2)Normal Map:设置草丛的法线贴图。
(3)Alpha Cutoff:设置草丛的透明度,用于控制草丛的密度。
(4)Transparency:设置草丛的透明度,用于控制草丛的透明度。
创建Shader
在Unity中,我们可以在Project面板中右键点击空白处,选择Create->Shader来创建新Shader。
然后,我们需要编辑Shader的代码。在本例中,我们将使用上面的Shader代码。
将Shader应用到材质中
将Shader应用到材质中,我们需要在材质的Inspector面板中选择Shader。在本例中,我们选择Custom/GrassShader。
将材质应用到草丛模型中
将材质应用到草丛模型中,我们需要在Scene面板中选择草丛模型,然后将材质拖拽到Mesh Renderer组件的Material属性中。
测试效果
在Scene视图中,我们可以看到草丛已经具有了晃动特效。我们可以通过改变_WaveAmplitude和_WaveFrequency来控制草丛的晃动幅度和频率。我们也可以通过改变_WindDirection和_WindSpeed来控制风向和风速。
本文教程就到这里了,欢迎加入我的简介游戏开发学习交流群~