unity5怎么样让材质自发光

unity5怎么样让材质自发光,第1张

继续上次笔记中所记录的东西,在Project视图中,ImportedAssets-Meshes-Materials下我们可以看到一个没有纹理的材质球,这个材质是跟随我们的3d Max模型来的默认材质。因为这里我们要添加自己的材质,所以我们直接把这个材质球删除。

删除后,我们看到本来的Prefab颜色也发生了改变。

接下来我们在Materials文件夹下,右键新建一个材质(Material),命名为Stone_Floor。现在这是一个空白的材质,我们要为他选择着色器,Unity提供了十分多样的着色器(shader),这里我们先不做深入的讨论,直接选择Bumped Specular(凹凸高光),这是十分常用的着色器。

Bumped Specular中可以从下往上看,BaseMap和Normal map(基础贴图和法线贴图);Shininess是反射度;Specular Color就是高光颜色;Main Color也就不需要解释了。。

十四讲我们实现了基本的Surface Shader,十五讲讲了光照模型的基础知识。这一讲说的是如何写光照模型。

自定义光照模型主要分为4步:

(0)架设框架,填写需要的参数

(1)计算漫反射强度

(2)计算镜面反射强度

(3)结合漫反射光与镜面反射光

代码配有中文注释,配合上上讲的光照公式,一步一步实现即可。

//

Author: 风宇冲

Shader "Custom/T_customLightModel" {

Properties

{

_MainTex ("Texture", 2D) = "white" {}

}

Subshader

{

//alpha测试,配合surf中的o.Alpha = c.a

AlphaTest Greater 0.4

CGPROGRAM

#pragma surface surf

lsyLightModel

//命名规则:Lighting接#pragma suface之后起的名字

//lightDir :点到光源的单位向量

viewDir:点到摄像机的单位向量

atten:衰减系数

float4 LightinglsyLightModel(SurfaceOutput s, float3 lightDir,half3 viewDir, half atten)

{

float4 c

//(1)漫反射强度

float diffuseF = max(0,dot(s.Normal,lightDir))

//(2)镜面反射强度

float specF

float3 H = normalize(lightDir+viewDir)

float specBase = max(0,dot(s.Normal,H))

// shininess 镜面强度系数,这里设置为8

specF = pow(specBase,8)

//(3)结合漫反射光与镜面反射光

c.rgb = s.Albedo * _LightColor0 * diffuseF *atten + _LightColor0*specF

c.a = s.Alpha

return c


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/bake/11741008.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-18
下一篇 2023-05-18

发表评论

登录后才能评论

评论列表(0条)

保存