unity学习笔记 unity shader unity数据存储方式 DoTween插件常用API

  • q8_144464
    了解作者
  • 1.1MB
    文件大小
  • 文件格式
  • 0
    收藏次数
  • VIP专享
    资源类型
  • 0
    下载次数
  • 2022-04-26 03:56
    上传日期
unity学习笔记 unity shader unity数据存储方式 DoTween插件常用API
整合.rar
  • 整合
  • DoTween插件常用API.txt
    18.8KB
  • unity shader.txt
    76.3KB
  • unity数据存取方式.txt
    10.8KB
  • shader笔记附件.pptx
    1.1MB
内容介绍
shader三种语言 基于OpenGl的GLSL 跨平台三维二维,独立于操作系统,使用广泛 基于DirectX的HLSL C++实现,移植性较差 NVIDIA公司的:Cg 属于一个更高层次,编译成前两个 被GLSL和HLSL广泛使用,保留C大部分语义 渲染过程 双重缓冲防止看到正在渲染的画面 应用阶段,CPU有绝对控制权,准备场景数据(模型,灯光啥的),不可见的先剔除了,设置渲染状态 最后输出渲染图元给GPU 几何阶段,GPU负责顶点坐标变换到空间中 最后输出定点信息 光栅化阶段,GPU用定点信息产生屏幕上的像素并最终渲染出图像 CPU——》GPU——》GPU CPU工作时:数据加载到显存,设置渲染状态,调用Draw CAll 先将数据从硬盘中加载到内存中,网格纹理等加载到显存中,因为GPU一般访问的是显存 设置渲染状态告诉GPU用什么渲染及参数 Draw Call告诉GPU去渲染哪个东西 硬盘——》RAM——》显存 GPU工作时: 几何阶段 收到顶点数据——》顶点着色器——》曲面细分着色器——》几何着色器——》裁减——》屏幕映射 可编程 可编程 可编程 可配置 顶点着色器: 每一个输入的顶点都会调用一次顶点着色器,主要完成坐标变换及逐顶点光照,顶点都是独立并行的,GPU无法得到顶点与顶点直接的关系 模型空间坐标系——》世界坐标系——》摄像机坐标系——》齐次裁剪空间(单位立方体)——》计算顶点颜色 裁剪: 完全在视野内:直接走 完全在视野外:切掉 部分在视野内:裁剪 屏幕映射: 裁剪后的齐次坐标——》屏幕坐标系(二维)和分辨率有关系 OpenGl和DX的屏幕坐标标准不同 光栅化阶段 三角形设置——》三角形遍历——》片元着色器——》逐片元操作——》屏幕图像 可编程 可配置 三角形设置: 几何阶段输出的都是三角网格的顶点,为了计算每条边上的像素坐标,就需要三角形边界表示方式,设置成一块一块的三角形面片,面片里一个块叫做一个片元 三角形遍历: 检查每个像素是否都被三角面片覆盖,每个片元的颜色、顶点位置等都由三角形面片的三个顶点插值计算得到 片元着色器: 顶点着色器输出的数据插值得到的结果及顶点纹理坐标输入到片元着色器,输出一个或多个颜色值,得到覆盖片元的纹理坐标 逐片元操作: 模板、深度测试决定每个片元的可见性,把这个片元的颜色值和已经储存在缓冲区的色彩合并 模板测试: 有一个模板缓冲,模板缓冲区存在的值和读取的值比较(齐次裁剪空间的立方体的XY平面),不满足测试则舍弃该片元,满足测试则更新缓冲区的值,通常用于限制渲染区域 深度测试: 缓冲深度值与读取值比较(齐次裁剪空间的立方体Z轴的值就是深度值),满足测试更新,不满足测试则舍弃 合并混合: 颜色缓冲中往往有上次渲染之后的颜色,使用这次的颜色完全覆盖之前的结果还是进行其他处理就是合并需要解决的,特别是半透明物体要用混合 CPU和GPU并行工作 命令缓冲区队列,CPU添加命令,GPU读取命令,添加和读取相互独立使得并行工作得以实现Draw Call就是一种命令缓冲区命令 当渲染一个对象时,需要一个mesh一个材质球,材质球放在这个对象的Mesh Renderer下的Materials中 随后创建一个shader,有好几种 Standard Surface Shader:顶点片元shader封装 Unlit Shaer:顶点片元shader Image Effect Shader:图片特效shader Compute Shader:计算shader Ray Tracing Shader:光追shader shader Variant Collection:这个是shader库文件 创建一个Unlit Shader 把材质选为刚创建的这个shader unity shader的基础:Shader Lab 它可以直接创建渲染,方便流程 shader的结构 Shader "Unlit/shaderTry" 它的路径及名字 { Properties 属性块 { _MainTex ("Texture", 2D) = "white" {} 定义_MainTex变量 挂在球上可以看得到 这里是个2D图片,默认白色,参数变量带_ _Int("Int",int) = 2 添加一个int属性默认值为2 随意定义,尽量保持名称一致 _Range("Range",range(0.0,5.0)) = 1.0 加一个Range属性,默认值1.0 _Color("Color",color) = (0,0,0) 颜色属性 _Vector("Vector",vector) = (1,4,3,8) 矩阵时候用 _Cube("Cube",cube) = "white" {} 天空盒变量 _3D("3D",3D) = "black" {} 3D图,基本不用 // create——》legacy——》cubemap创建天空盒 } SubShader { // 标签 可选 key = value 也可以在每个pass通道单独设置,这里优先级更高 Tags { "Queue" = "Transparent" // 渲染顺序设置 "RenderType"="Opaque" // 渲染类型设置 "DisableBatching" = "True" // 是否进行合批 "ForceNoShadowCasting" = "True" // 是否投射阴影 "IgnoreProjector" = "True" // 是否受Projector影响,通常用于透明物体 "CanUseSpriteAltas" = "False" // 是否用于图片的shader,通常用于UI "PreviewType" = "Plane" // 用作shader面板预览的类型 } // 可选 也可以每个通道单独定义 //Cull off/back/front // 裁剪 默认只渲染正面,off都渲染,back只渲染正面,front只渲染正面 //ZTest Always/Less/Greater/LEqual/GEqual/Equal/NotEqual // 深度测试 //Zwrite off/on // 深度写入 默认on //Blend SrcFactor DstFactor // 混合 原图和目标 //LOD 100 // 不同情况下用不同的LOD达到性能提升 // 必须 Pass // 可以有多个 { Name "Default" // pass通道名称 use pass通道名称(必须全大写) 方便在其他shader重复使用这个pass通道 Tags{ // pass通道独有Tag类型 "LightMode" = "ForwardBase" // 定义该pass通道在unity渲染流水中的颜色 "RequireOptions" = "SoftVegetation" // 用于满足条件时才渲染这个pass通道,可以写多个 } CGPROGRAM // CG语言所写代码,主要是顶点片元着色器 #pragma vertex vert #pragma fragment frag // make fog work #pragma multi_compile_fog #include "UnityCG.cginc" struct appdata { float4 vertex : POSITION; float2 uv : TEXCOORD0; }; struct v2f { float2 uv : TEXCOORD0; UNITY_FOG_COORDS(1) float4 vertex : SV_POSITION; }; sampler2D _MainTex; float4 _MainTex_ST; v2f vert (appdata v) { v2f o; o.vertex = UnityObjectToClipPos(v.vertex); o.uv = TRANSFORM_TEX(v.uv, _MainTex); UNITY_TRANSFER_FOG(o,o.vertex); return o; } fixed4 frag (v2f i) : SV_Target { // sample the texture fixed4 col = tex2D(_MainTex, i.uv); // apply fog UNITY_APPLY_FOG(i.fogCoord, col); return col; } ENDCG } } } Surface Shader 结构基本一致,但没有pass通道 模型空间:模型自己的坐标系 模型变换下去 世界空间:unity的坐标系 观察变换下去 观察者空间(摄像机坐标系):�
评论
    相关推荐
    • PDUnity2020:官方Unity项目活动存储
      РепозиторийпроектапоUnity Проект:“团结дляинженерныхзадач” Описаниепроекта Данныйпроектпризываетрешатьинже...
    • Unity Json读取存储
      Unity Json读取存储,是一个简单存储的事例。用法只需将LitJson.dll文件放入Unity Plugins文件夹中,想要进行读取存储只需更改代码。
    • Unity插件之CSV
      unity开发使用的csv简易插件,逗号分隔值(Comma-Separated Values,CSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本)。纯文本意味着该文件是一个字符序列...
    • unity-scripts
      这只是存储我简陋的Unity 3D代码的地方。
    • Unity Easy Save
      Unity Easy Save 万物皆可存储, 十分好用的 存储工具
    • Unity2DGames:我的Unity 2D游戏的存储
      Unity2DGames:我的Unity 2D游戏的存储库。 飞鸟 FlappyBird克隆是由Unity开发的,它是一项练习,目的是学习如何在C#中使用Unity开发视频游戏。 飞船 Unity开发的2D电子游戏是一种练习。
    • Unity数据存储项目源码
      Unity数据存储项目源码,DT教程第六章
    • Unity数据存储插件
      unity中.一键txt转换.cs文件 1.选择对应版本的插件拖入unity的新工程中的任意位置 2.将示例文本中的txt文件拖入unity工程 3.即可通过类名中的自动生成的方法得到txt中的数据
    • FYP:存储FYP的Unity项目
      五年计划 存储FYP的Unity项目
    • GaussDB_100_1.0.1-DATABASE-REDHAT-64bit.tar.gz
      guassdb100在redhat上安装包,单机部署的包,安装步骤请看我的文中介绍,经过大量实验搭建总结出来的文档