unityShader流程对比及其总谱

本文探讨了Unity中的FixedFunction Shader和Surface Shader的差异。FixedFunction Shader关注于实现细节,适用于基于alpha测试的流程。而Surface Shader则简化了VertexShader和Fragment Shader的使用,自动生成底层代码。通过示例代码展示了基于Lambert渲染模型的Surface Shader,并提醒在设置物体透明时需要注意的 Blend 指令使用问题。
摘要由CSDN通过智能技术生成
1.Unity的3种Shader流程图


上面三种Shader在unity中都能够使用一种ShaderLab 的语法来进行编写Shader。基本的ShaderLab的基本结构如下


Shader  “ name” =
 {
[Properties]
[SubShader]
[FallBack]
}
Properties :  属性,他定义了一些引用变量,可以在 Unity简视面板上进行查看,设置。
SubShader :一个shader可以有多个Subshader,在执行的时候,只会执行一个图形硬件支持的SubShader,判断顺序从第一种以此往后边进行怕断,判断到哪一个subshader当前能够执行,就执行那一个。
FallBack:当上述所有的SubShader图形硬件都不能够执行的话就会执行FallBack。
2.Unity官方自带的Shader类型流程图


3.FiexdFunction shader 片段,主要的命令及其规则

4,来奉上FixedFunction Shader 的代码片段


Shader "ShaderDemo/FixedFunctionShader" {
Properties{
_Color("Main Color",color) = (1,1,1,1)  //漫反射的颜色
_Ambient("Ambient Color",color) = (0.3,0.3,0.3,0.3)
_Specuar("Specular Color",color) = (1,1,1,1) //高光的强度
_Shininess("Shininess",Range(0,8)) = 4 //高光的强度
_Emission("Emission",color) = (1,0,0,1) // 自发光的颜色


_MainTexture("Main Texture",2D) = "white"{}
_SecondTexture("Main Texture",2D) = "white"{}
_Constant("ConstantColor",color) = (1,1,1,1)
}


Subshader{


Tags { "Queue" = "Transparent" }
pass{


//进行混合渲染
Blend SrcAlpha OneMinusDstColor


material
{
diffuse[_Color]
ambient[_Ambient]
specular[_Specuar]
shininess[_Shininess]
emission[_Emission]
}


lighting on
separatespecular on




settexture[_MainTexture]
{
combine texture * primary double //混合之前的颜色
}


// primary  总是当前纹理 和顶点光照后的颜色进行混合
// previous 当前的纹路 和之前所以的纹理 和定点颜色进行混合
settexture[_SecondTexture]
{
constantcolor [_Constant]
combine texture * previous double ,texture * constant //混合之前的颜色  后面加 texture  只是通过贴图的alpha 来作为 透明通道
}
}
}
}

关键点的函数


基于alpha测试阶段的流程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值