【Unity Shaders】学习笔记】的更多相关文章

本篇文章是对Unity Shader入门精要的学习笔记,插图大部分来自冯乐乐女神的github 如果有什么说的不正确的请批评指正 目录 渲染流水线 流程图 Shader作用 屏幕映射 三角形遍历 两大渲染测试 混合 CPU.GPU.图形接口和驱动的关系 CPU和GPU之间的通信 CPU和GPU并行工作的秘密:命令缓冲区 显示流畅的方法 着色器语言 ShaderLab Shader选用 顶点片元着色器 Unlit Shader 结构 一个简单的Shader 库文件 调试 注意点 3D数学 空间 渲…
1 高度纹理 使用一张纹理改变物体表面法线,为模型提供更多细节. 有两种主要方法: 1.高度映射:使用一张高度纹理(height map)来模拟表面位移(displacement).得到一个修改后的法线值. 2.法线映射:使用一张法线纹理直接存储表面法线. 1.1 高度纹理 高度图中存储的是强度值(intensity).越浅越说明向外凸起,越深越向里凹. 缺点是计算复杂,消耗性能. 高度图也会与法线映射一起使用.给出表面凹凸的额外信息. 1.2 法线纹理 法线纹理中存储的是法线方向.法线方向的范…
1.原理 1.1.Phong模型 计算高光反射需要表面法线.视角方向.光源方向.反射方向等. 在这四个矢量中,我们实际上只需要知道其中3个矢量即可,而第4个矢量(反射方向r)可以通过其他信息计算得到: 这样,我们就可以利用Phong模型来计算高光反射的部分: m(gloss)是材质的光泽度,也被反称为反光度.它用于控制高光区域的"亮点"有多宽,m(gloss)越大,亮点就越小. m(spscular)是材质的高光反射颜色,它用于控制该材质对于高光反射的强度和颜色. c(light)则是…
在光照无法达到的区域,模型的外观通常是全黑的,没有任何明暗变化,这会使模型的背光区域看起来就像一个平面. 使用半兰伯特光照可以解决这个问题. 逐顶点光照技术也被称为兰伯特光照模型.因为它符合兰伯特定律. Valve公司在开发半条命的时候提出了半兰伯特光照模型. 半兰伯特光照模型没有使用max操作来防止n和I的点积为负值,而是对其结果进行了一个α 倍的缩放再加上一个β 大小的偏移. 绝大多数情况下,α 和β的值均为0.5,即公式为: 对于模型的背光面,在漫反射模型中点积结果将映射到同一个值,即0值…
先给一个大致今天学习的图,然后后面是细节 1.下载Unity :官网下载需要版本 2.Unity安装:一定不要有中文路径:一台电脑可以安装不同版本的Unity,但是要安装在不同的文件夹下: 3. 新建工程文件 New:是新建工程: Open:打开已有Unity工程; 注意:Unity的工程文件路径也不要有中文,工程名也不要有中文: Unity中重要的六个面板: Scene:面板对场景中游戏物体位置,方向,大小进行编辑的一个面板: 手型:移动视角使用: 方向:移动场景内游戏物体的位置: 旋转:控制…
1 单张纹理 1.1 纹理 使用纹理映射(Texture Mapping)技术,我们把一张图片逐纹素(Texel)地控制模型的颜色. 美术人员建模时,会在建模软件中利用纹理展开技术把纹理映射坐标(Texture-Mapping Coordinates)存储在每个顶点上.纹理映射坐标定义了该顶点在纹理中的2D坐标. 纹理映射坐标通常是2维坐标(u,v).也被称为UV坐标.(u为横向,v为纵向) 顶点UV坐标通常被归一化到(0, 1)范围内,但纹理采样的时候常常也有不在(0,1)范围内的坐标. Op…
1.SQLITE的常识 SQLite是一个开源免费的数据库,一般用于嵌入系统或者小规模的应用软件开发中,你可以像使用Access一样使用它. sqlite的主要优点:零配置(Zero Configuration)紧凑(compactness)可移植(Portability)它是运行在Windows,Linux,BSD,Mac OS X和一些商用Unix系统,比如Sun的Solaris,IBM的AIX,同样,它也可以工作在许多嵌入式操作系统下,比如QNX,VxWorks,Palm OS, Symb…
1.父对象的初始位置设,即刚开始的空对象的根节点位置应当设置成(0,0,0) 这样设置可以避免以后出现奇怪的坐标. GameObject实际上就是一些组件的容器. unity 使用公用变量原因是,在Unity的Inpsector视图中可以修改这些共有变量.从而调节对象的参数. Rotate() 在默认的情况下是基于本地坐标进行旋转的,(本地坐标是每一个对象否具有的,一样有三个轴,并且这个坐标轴耕者自己的对象进行移动.是完全绑定在自己的对象上的)不过可以使用Space 来指定旋转参照的坐标系, S…
这个泡沫效果来自远古时代的Unity官方海岛Demo, 原效果直接复制3个材质球在js脚本中做UV动画偏移,这里尝试在shader中做动画并且一个pass中完成: // Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' //岸边浪花泡沫 //CloudLty 2016-9-6 Shader "Custom/foams2" { Properties//标记所以外部变量,让该变量按…
自己最近也在研究怎么用lua控制UI,然后看着网上介绍,决定选用XLua,毕竟TX爸爸出的,有人维护,自己琢磨着怎么用,于是弄出来一个能用的作为记录. 当然,XLua主要是用于热更新,我自己是拿来尝试用一下看看怎么和C#交互进行的. 然后是XLua的下载地址:https://github.com/Tencent/xLua 下载完了之后,把Assect文件夹下的东西放在工程里面,引入命名空间XLua就可以使用了. using System.IO; //引入这个空间是为了输入路径用 using Un…
纹理可以用来存储任何表面属性. 可以通过使用渐变纹理来实现插画风格的渲染效果. 这项技术是由Valve公司提出的.Valve使用它来渲染游戏中具有插画风格的角色. 我们使用半兰伯特模型计算漫反射. 因为我们使用的实际上是一个一维纹理: 所以在片元着色器中,我们使用fixed2(halfLambert, halfLambert)作为uv坐标进行纹理采样. 代码实现如下: Shader "Unity Shader Book/Chapter 7/RampTexture" { Properti…
本代码只适用于平行光. 1.逐顶点漫反射光照 1.1漫反射光照原理 1.2代码实现 在Properties语义块中声明一个漫反射颜色属性 Properties { //漫反射参数,用于调整漫反射效果 _Diffuse ("Diffuse", Color) = (1, 1, 1, 1) } 在SubShader语义块中定义一个Pass语义块. 在Pass的第一行指明光照模式. Tags{"LightMode" = "ForwardBase"} 在P…
在脚本中定义的类成员,如果是公共的话,在脚本与游戏对象绑定之后,是可以在Inspector中编辑的,例如下面这个脚本: using UnityEngine; using System.Collections; public class ScreenInfo : MonoBehaviour { public int screenWidth; public int screenHeight; // Use this for initialization void Start () { } // Up…
_MainTex_ST (1)简单来说,TRANSFORM_TEX(tex,name) (tex.xy * name##_ST.xy + name##_ST.zw)主要作用是拿顶点的uv去和材质球的tiling和offset作运算, 确保材质球里的缩放和偏移设置是正确的.(v.texcoord就是顶点的uv)下面这两个函数是等价的. o.uv = TRANSFORM_TEX(v.texcoord,_MainTex);o.uv = v.texcoord.xy * _MainTex_ST.xy +…
首先是shader的基础结构: Shader "Custom/Example { Properties//变量属性面板 { } SubShader { Tags { "RenderType"="Opaque" }//设置渲染状态和标签 LOD Pass { //开始cg代码片段 CGPROGRAM #pragma vertex vert//顶点着色器 #pragma fragment frag//片段着色器 #include "UnityCG.c…
1.TCP和IP IP:主要作用是在复杂的网络环境中将数据包发送给的最终的目标地址. 端口号:系统会分给系统端口号  一般知名的端口号在0-1023之间,而我们经常使用的自定义/动态分配的端口号则一般在49152~65535之间. TCP:三次握手和四次挥手   --优点 安全 UTP:优点:快速   缺点:有可能汇丢失消息…
首先,射线检测的API是这样的,网上找了一下,这个图片看得很清楚: 接下来是自己使用这个进行测试 using System.Collections; using System.Collections.Generic; using UnityEngine; //基本语法:public Ray ScreenPointToRay(Vector3 position); //其中参数position为屏幕位置参考点. //功能说明:此方法的作用是可以从Camera的近视口nearClip向前发射一条射线到…
官方文档>GameObject 首先建立测试对象: 在Father中添加两个脚本(GameObejctTest和Target),分别用来发送Message和接受Message: 在其它GameObject中添加名为Target的脚本. using System.Collections; using System.Collections.Generic; using UnityEngine; public class GameObjectTest : MonoBehaviour { // Star…
首先创建测试项目: 这里我选择了2D,其实都可以,之后可以在项目中修改. 修改方法: 进入正题. 首先看一下官方提供的>手册和>脚本API文档. 创建C#脚本文件并打开: 默认的脚本文件为以下格式: using System.Collections; using System.Collections.Generic; using UnityEngine; public class TestScript : MonoBehaviour { // Start is called before th…
最近看到了一个很新颖的摇杆,就是按下后,会出现在按下的位置,并且拖着走的时候,到一定距离整个摇杆也会跟着走,于是自己测试做了一下这种摇杆 首先,先说一下我的摇杆预设体结构 代码挂在哪里都无所谓,关键是需要知道我写的publice出去的GameObject对应的是哪些,用拖动或者代码查找都可以 到时候代码中会出现这些 public GameObject rockerOnOff;   public GameObject rockerStick;public GameObject rockerFath…
using UnityEngine; public class MouseLook : MonoBehaviour { , MouseX = , MouseY = } //定义一个枚举,移动xy,或者只是移动x,或者y public RotationAxes axes = RotationAxes.MouseXAndY; //声明一个枚举变量,方便在外面修改移动模式 public float sensitivityX = 15f; //定义一个移动速度 public float sensitiv…
之前在网上找过各种的逐个输出字,我可能理解能力不好,照着代码复制没有能使用成功,于是自己研究了很多网上说的思路,各种改良出了一个能用的,写完自己测试,觉得还真好用,于是记录下来 用法:将用代码组件挂上去,通过查找到代码组件,通过enabled来控制组件开关,每次更新文字时候,让组件进行一次关闭和开启,就能再次逐个显示 using UnityEngine; using System.Collections; using UnityEngine.UI; public class WordOutPut…
public class AngleTest : MonoBehaviour { public GameObject cube; //主要的物体 public GameObject radCube; //判断此物体与主要物体位置 Vector3 radCubeToCube; //红色方块到这个方块的向量 Vector3 crossOfcube; //存放叉乘的结果 float angleCross; //存放叉乘角度 float angleDot; //存放点乘角度 // Use this fo…
因为项目的问题,有个效果在iOS上面无法实现出来- 因为shader用的HardSurface的,在android上面跑起来没有问题- 以为在iOS上也不会有问题,但是悲剧啊,技能效果一片漆黑- 而且之所以在iOS上面跑6.8FPS,就是因为HardSurface造成的- 没办法临时抱佛脚,一边看视频教程,一边看着圣典的翻译,学一下吧- 但愿能学会......哎...... ShaderLab语法:Properties   Properties { Property [Property ...]…
[Unity Shaders]学习笔记——SurfaceShader(十一)光照模型 转载请注明出处:http://www.cnblogs.com/-867259206/p/5664792.html 如果你想从零开始学习Unity Shader,那么你可以看看本系列的文章入门,你只需要稍微有点编程的概念就可以. 水平有限,难免有谬误之处,望指出. LitSphere(Matcap) 发光球体光照模型就是将发光球体的纹理映射在球体上,来实现光照效果.这可以创造一些效果细腻的发光球体效果,但是它不受…
[Unity Shaders]学习笔记——SurfaceShader(十)镜面反射 如果你想从零开始学习Unity Shader,那么你可以看看本系列的文章入门,你只需要稍微有点编程的概念就可以. 水平有限,难免有谬误之处,望指出. Unity内置的高光函数 Unity内置了一种高光光照模型——BlinnPhone. 使用方法如下: Shader "Custom/BlinnPhong"{ Properties { _MainTex ("Base (RGB)", 2D…
[Unity Shaders]学习笔记——SurfaceShader(九)Cubemap 如果你想从零开始学习Unity Shader,那么你可以看看本系列的文章入门,你只需要稍微有点编程的概念就可以. 水平有限,难免有谬误之处,望指出. 上一节中讲述了制作Cubemap的方法.这一节讲讲怎么使用它. Simple Cubemap 先来看一下最简单的Cubemap. Shader "Custom/SimpleReflection" { Properties { _MainTint (&…
[Unity Shaders]学习笔记——SurfaceShader(八)生成立方图 转载请注明出处:http://www.cnblogs.com/-867259206/p/5630261.html 写作本系列文章时使用的是Unity5.3. 写代码之前: 当然啦,如果Unity都没安装的话肯定不会来学Unity Shaders吧? 阅读本系列文章之前你需要有一些编程的概念. 在VS里面,Unity Shaders是没有语法高亮显示和智能提示的,VS党可以参考一下这篇文章使代码高亮显示,也可以下…
[Unity Shaders]学习笔记——SurfaceShader(七)法线贴图 转载请注明出处:http://www.cnblogs.com/-867259206/p/5627565.html 写作本系列文章时使用的是Unity5.3. 写代码之前: 当然啦,如果Unity都没安装的话肯定不会来学Unity Shaders吧? 阅读本系列文章之前你需要有一些编程的概念. 在VS里面,Unity Shaders是没有语法高亮显示和智能提示的,VS党可以参考一下这篇文章使代码高亮显示,也可以下载…
[Unity Shaders]学习笔记——SurfaceShader(六)混合纹理 转载请注明出处:http://www.cnblogs.com/-867259206/p/5619810.html 写作本系列文章时使用的是Unity5.3. 写代码之前: 当然啦,如果Unity都没安装的话肯定不会来学Unity Shaders吧? 阅读本系列文章之前你需要有一些编程的概念. 在VS里面,Unity Shaders是没有语法高亮显示和智能提示的,VS党可以参考一下这篇文章使代码高亮显示,也可以下载…