表面着色器
来源:互联网 发布:网络直播唱歌 编辑:程序博客网 时间:2024/05/17 03:34
编写着色器与光照的交互是复杂的。光源有很多类型,不同的阴影选项,不同的渲染路径(正向forward和延迟deferred),着色器应该以某种方式处理所有的复杂点。
它如何工作
定义一个“表面函数(surface function)”,需要输入所有的uv或数据,并在输出结构中填充SurfaceOutPut。基本上描述了表面的特性(光照的颜色反射率。法线。散射与镜面等
)。通过表面着色器编译他,然后计算出需要填充输入什么,输出什么等东西,并产生真实的顶点和像素着色器,以及把渲染路径传递到正向或延迟渲染路径
表面着色器的标准输出结构:
struct SurfaceOutPut
{
half3 Albedo; //反射率,(环境光)
half 3Normal;//法线
half3 Emission;//自发光
half3 Specular;高光,也就是镜面
half Gloss;//光泽度
half Alpha;//透明度
};
表面着色器放在CGPROGRAM与ENDCG之间
他必须嵌在子着色器块里面。而不是pass(通道)里面。表面着色器将在多重通道内编译自己。
使用的#pragma surface 。。。指定,声明它是一个表面着色器。
#pragma surface surfaceFunction lightModel[optionalparams]
surfaceFunction表示cg函数中有表面着色器代码,格式void surf(Input IN,SurfaceOutPut o),Input 是自己定义的结构体,Input结构中应该包含所有包含纹理坐标和便面函数所需要的必要变量。
lightModel也就是光照模式,也可自定义,内置的是Lambert(漫反射)和BlinnPhong(高光)
可选参数:
alpha 透明混合模式,使用它可以写出半透明的着色器
alphatest:VariableName 透明测试模式。使用它可以写出镂空效果的着色器。镂空大小的变量是一个float型的变量
vertex:vertexFunction 自定义的顶点函数
finalcolor:ColorFunction 自定义的最终颜色函数,等等
表面着色器输入结构
Input这个输入结构通常拥有着色器需要的所有纹理坐标,纹理坐标必须命名为“uv”后接纹理名字
可以在输入结构中附加一些值
float3 viewDir 视图方向值。为了计算视差效果(parallax effect),边缘光照等,需要包含视图方向值。
float4 withCOLOR semantic 每个顶点颜色的插值
float4 screenPos 屏幕空间中的位置,为了反射效果,需要包含屏幕空间中的位置关系
float3 worldPos 世界空间中的位置
float 3 worldRefl 世界空间中的反射向量。若表面着色器不写入法线参数,将包含这个参数。
float3 worldNormal 世界空间中的法线向量。若表面着色器不写入法线参数,将包含这个参数。
float3 worldRefl;INTERNAL_DATA 世界空间中的反射向量,若表面着色器不写入法线参数,将包含这个参数。为了获得基于每个顶点法线贴图的反射需要使用师姐反射向量
float3 worldNormal; INTERNAL_DATA -世界空间中的法线向量(normal vector)。如果表面着色器(surface shader)不写入法线(o.Normal)参数,将包含这个参数。为了获得基于每个顶点法线贴图( per-pixel normal map)的法线向量(normal vector)需要使用世界法线向量(WorldNormalVector (IN, o.Normal))。
- 表面着色器
- 表面着色器笔记
- 表面着色器Surface Shader2
- 表面着色器案例分析
- [UnityShader2]表面着色器基础
- Unity Shaders表面着色器
- Shader(表面着色器)
- Unity3d Shader动态表面效果着色器
- 表面着色器的顶点动画
- Unity Shader 表面着色器(Surface Shader)
- Unity3d 表面着色器学习笔记
- [UnityShader2]表面着色器实例(一)
- [UnityShader2]表面着色器实例(二)
- [UnityShader2]表面着色器实例(三)
- 表面着色器示例 Surface Shader Examples
- 边缘发光的表面着色器
- 介绍了表面着色器的基本概念和一些写法
- 介绍了表面着色器的基本概念和一些写法
- WebService 之 WSDL文件 讲解
- android.content.res.Resources$NotFoundException:
- 解析 Qt 程序在Windows 下发布
- tar命令
- gradle入门
- 表面着色器
- Pomelo:网易开源基于 Node.js 的游戏服务端框架
- 贴一个进程双守护,利用文件锁的特性来实现
- google guava小例子
- hihocoder 1055 刷油漆(树形DP+背包)
- 解决用Xshell时不能和Windows传文件的问题
- android 网络获取json并且显示(2)
- C#学习笔记
- Cocos2dx崩溃日志跟踪