unity3d游戏开发学习分享之表面着色器讲解
一、三种着色器的书写格式:
1、surface shaders, 指的是表面着色器
2、vertex and fragment shaders and 指的是顶点和片段着色器
3、fixed function shaders. 指固定功能着色器
二、顶点着色器与片段着色器
我们可以这么理解,在Unity的三维空间中,所有复杂模型都是由无数个三角形构成的,那么顶点(Vertex)就是说,这些构成复杂模型的三角形的顶点,而片段(fragment)就是这些三角形的填充区域了。
三、表面着色器(Surface Shader)标准的输出结构:
struct SurfaceOutput
{
half3 Albedo; //反射度
half3 Normal; //法线
half3 Emission; //物体自发光
half Specular; //镜面
half Gloss; //光泽
half Alpha; //透明
};
四、我们的表面着色器应该去用 #pragma surface surfaceFunction lightModel [optionalparams] 指令,这起到一个声明的作用。
1、surfaceFunction:接下来,该段表示了在Cg函数中有着表面着色器(surface shader)的代码。格式应该如下:void surf (Input IN,inout SurfaceOutput o), Input是自定义结构,该结构其中应该包括我们所有的纹理坐标(texture coordinates)以及表面函数(surfaceFunction)需要的额外必要变量。
2、lightModel:就是说使其能够在光照的模式下应用,其内置是Lambert(diffuse)和 BlinnPhong(specular)。
五、着色器附加输入结构:
1、float3 viewDir:视图方向(view direction) 的值。这里由于我们需要去计算视差效果(Parallax effects)以及边缘光照(rim lighting)等等,所以我们要包含视图方向(view direction)的值。
2、float4 COLOR:各个顶点中(per-vertex)颜色插值。
3、float4 screenPos:屏幕空间中的位置信息。这里因为我们可以去使用反射效果,所以说我们就需要在其中包含屏幕空间中位置的信息。
4、float3 worldPos:世界空间位置。
5、float3 worldRefl:世界空间反射向量。这里的话,如果我们的表面着色器(surface shader)不通过法线(o.Normal)参数,那么其将自行包含该参数。
6、float3 worldNormal:世界空间法线向量(normal vector)。这里指的是如果表面着色器(surface shader)不通过法线法线(o.Normal)参数,那么它将包含这个参数。
7、float3 worldRefl(INTERNAL_DATA):世界空间反射向量。指表面着色器(surface shader)如果不写入法线(o.Normal)参数,那么将自行包括该参数。我们为了能成功获取到每个顶点法线贴图( per-pixel normal map)的反射向量(reflection vector),所以我们就需要去应用世界的反射向量(WorldReflectionVector (IN, o.Normal))。
8、float3 worldNormal(INTERNAL_DATA):世界空间法线向量(normal vector)。这里说表面着色器(surface shader)如果不写入法线(o.Normal)参数,那么就会包含这个参数。同样的,我们为了成功获取每个顶点法线贴图( per-pixel normal map)的法线向量(normal vector),我们需要去应用世界法线向量(WorldNormalVector (IN, o.Normal))。
六、光照模式声明
该模式指的是以Lighting开头并且与名称组合到一起的规范函数。我们可以在着色器文件(shader file)或导入的文件(included files)中任何地方来声明它。这个函数如下所示:
1、half4 LightingName(SurfaceOutput s, half3 lightDir, half atten):指的是正向渲染路径中(forward rendering path)所应用的模式,顺便提醒大家,它并不是取决于视图方向的(view direction)。
2、half4 LightingName(SurfaceOutput s, half3 lightDir, half3 viewDir, half atten):在正向渲染路径(forward rendering path)所应用的光照模式。它是取决于视图方向的(view direction)。
3、half4 LightingName_PrePass(SurfaceOutput s, half4 light):这是在延时光照路径(deferred lighting path)中使用的。
当定向解码光照贴图用于向前/延迟光照中的光照函数,或类似的函数中时,需要进行定制。
1、half4 LightingName_DirLightmap (SurfaceOutput s, fixed4 color, fixed4 scale, bool surfFuncWritesNormal):这是使用的不依赖于视图方向(view direction)的光照模式(light model)。
2、half4 LightingName_DirLightmap (SurfaceOutput s, fixed4 color, fixed4 scale, half3 viewDir, bool surfFuncWritesNormal, out half3 specColor):这是使用的依赖于视图方向(view direction)的光照模式(light model)。
unity3d游戏开发学习分享之表面着色器讲解的更多相关文章
- 从一点儿不会开始——Unity3D游戏开发学习(一)
一些废话 我是一个windows phone.windows 8的忠实粉丝,也是一个开发者,开发数个windows phone应用和两个windows 8应用.对开发游戏一直抱有强烈兴趣和愿望,但奈何 ...
- unity3d游戏开发学习之使用3dmax创建导弹模型
在着手研究Unity3D的游戏开发时,3D模型能够考虑从unity的assets store去获取,也能够从网上搜索下载,同一时候咱们也能够尝试下自己动手去做一些简单的模型. 这里就依据unity3d ...
- 【Unity】1.3 Unity3D游戏开发学习路线
分类:Unity.C#.VS2015 创建日期:2016-03-23 一.基本思路 第1步--了解编辑器 首先了解unity3d的菜单,视图界面.这些是最基本的基础,可以像学word操作一样,大致能明 ...
- 从一点儿不会开始——Unity3D游戏开发学习(二) ——GUI控件之Button
一些废话 我在上一篇“一点儿不会”的系列随笔中说大概一周会发个2~3篇关于Unity的学习笔记.可这就两周过去了,我还停留在一篇的进度上,主要是这两周发生了一些事情导致我更新缓慢.其实截至目前为止,上 ...
- Unity3D游戏开发和网络游戏实战书籍及配套资源和一些视频教程分享
目录 1. 按 2. pdf 3. 配套资源 3.1. Unity网络游戏实战第二版 3.2. Unity网络游戏实战第一版 4. 视频教程 5. 更多坦克大战代码 1. 按 本文主要分享了: Uni ...
- Unity3D游戏开发之开发游戏带来的问题
昨日曾就某投资人把移动团队失败原因之中的一个归于选择Unity引擎进行了一番评论,工具本身无罪,但怎样理解工具.正确使用Unity引擎确实须要讨论,在选择Unity之前你也许须要了解下这个引擎实际开发 ...
- [Unity3D]Unity3D游戏开发之飞机大战项目解说
大家好,我是秦元培,欢迎大家继续关注我的博客,我的博客地址是blog.csdn.net/qinyuanpei. 首先感谢大家对我博客的关注,今天我想和大家分享的是一个飞机大战的项目.这是一个比較综合的 ...
- [Unity3D]Unity3D游戏开发《反对》说到游戏(上)——目标跟踪
朋友,大家好.我是秦培,欢迎关注我的博客.我的博客地址blog.csdn.net/qinyuanpei. 首先博主要自我反省,过了这么久才来更新博客,这段时间主要是在忙着写期末的作业,所以博主基本上没 ...
- [Unity3D]Unity3D游戏开发3D选择场景中的对象,并显示轮廓效果强化版
大家好,我是秦培,欢迎关注我的博客,我的博客地址blog.csdn.net/qinyuanpei. 在上一篇文章中,我们通过自己定义着色器实现了一个简单的在3D游戏中选取.显示物体轮廓的实例. 在文章 ...
随机推荐
- AFNetworking、ASIHTTPRequest中SSL的使用
首先介绍下AFNetworking中的使用: 2.0要注意个地方:IOS7及其以后,採用AFHTTPSessionManager,IOS7之前採用AFHTTPRequestOperationManag ...
- Oracle某些功能实现语句处理方法
触发器以及序列CREATE OR REPLACE TRIGGER t_MSTB_BDS_DATA BEFORE INSERT ON MSTB_BDS_DATA FOR EACH ROW DECLARE ...
- ubantu下安装软件
Linux系统中,软件通常以源代码或者预编译包的形式提供.(1)软件源代码需要编译为二进制的机器代码才能够使用,安装比较耗时,不过您可以自行调节编译选项,决定需要的功能或组件,或者针对硬件平台作一些优 ...
- vue前端导出zip包
1. npm install jszip /npm install script-loader / npm install file-saver 2.功能代码 require('script-loa ...
- vue实现前端导出excel表格
1.在src目录下创建一个文件(vendor)进入Blob.js和Export2Excel.js 2.npm install -S file-saver 用来生成文件的web应用程序 3.npm in ...
- 一款由jquery实现的超炫的页面加载特效
今天为大家带来一款由jquery实现的超炫的页面加载特效.连续的几个页面分开特效.最后由三维的线条由远至近消失,然后由近至远出现.效果超级梦炫.一起看下效果图: 在线预览 源码下载 实现的代码. ...
- Servlet入门(第一个Servlet的Web程序)
新建maven项目,注意项目的类型 project名为ServletExample 点击Finish.建立maven项目完毕例如以下 生成后的文件夹没有java源代码文件夹.依照maven的约定,还要 ...
- 在input中回车后页面提交导致出现HTTP 错误 405.0 - Method Not Allowed
前些时间在做一个搜索功能时发现一个比較有意思的现象,场景是这种:在一个模态窗体中是一个订单列表.页面的顶部有若干个状态筛选框和一个搜索keyword输入框,当焦点在keyword输入框时按回车,本来是 ...
- hive 定时加载分区
#!/bin/bash #每天定时位外部表加载分区 #服务器当天的时间 #加载环境变量 source /etc/profile; #如果没有指定日期用当前日期如果指定的日期使用指定的日期 echo ' ...
- CAS (2) —— Mac下配置CAS到Tomcat(客户端)
CAS (2) -- Mac下配置CAS到Tomcat(客户端) tomcat版本: tomcat-8.0.29 jdk版本: jdk1.8.0_65 cas版本: cas4.1.2 cas-clie ...