IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> 暑假第二周 -> 正文阅读

[游戏开发]暑假第二周

什么是shader(着色器)
Shader是可编程图形管线的算法片段。主要分为两类 Vertex(顶点) Shader和
Fragment(片段) Shader。
什么是渲染管线(生产流水线)
渲染管线也称渲染流水线,是显示芯片内部处理图形信号相互独立的并行处理单元。
一个流水线是一序列可以并行和按照固定顺序进行的阶段。每个阶段都从他的前一阶段接受输出,然后把输出发给随后的阶段。整个流水线处理大量的顶点、集合图元和片段。

Culling Depth Test:裁剪和深度测试,有些面不会被看到,就为了减少计算机压力,将看不到的面进行裁剪。直接剔除。计算机没有无限远的概念,摄像机最近能看到什么地方叫做近切面。存在远切面。 超过这个范围则会进行相应的剔除。

Shader 和材质、贴图之间的关系
Shader(着色器)时加上就是一小段程序,将输入的顶点数据以指定的方式和输出的贴图或者颜色等组合起来,然后输出。绘图的硬件根据这个输出将图像绘制到屏幕上。 将输入的贴图或者颜色,加上相应的shader,shader对应的参数设置,打包在一起形成一个Material(材质)。
总结: 贴图相当于原材料,shader是生产过程中的方式方法,材质是最终形成的商品。

Shader三大主流编程语言
HLSL:基于DirectX
GLSL:基于OpenGL
CG:两个都能使用

着色器编写方式
作为表面着色器(unity默认使用)
作为顶点和片元着色器
作为固定函数着色器

ShaderLab 语法

// 有色顶点光照
Shader "Simple colored lighting"
{
    // 单个颜色属性
    Properties {
        _Color ("Main Color", Color) = (1,.5,.5,1)
    }
    // 定义一个子着色器
    SubShader
    {
        // 子着色器中的单个通道
        Pass
        {
            // 使用固定函数每顶点光照
            Material
            {
                Diffuse [_Color]
            }
            Lighting On
        }
    }
}

Shader “name”{}:定义着色器,着色器以指定的name(名称)显示,也可以是路径。花括号内可选填写属性(Properties ),子着色器,回退等。

Properties {} :花括号内定义属性代码块,这些属性将会出现在材质面板。

数字和滑动条:
name ("display name", Range (min, max)) = number
name ("display name", Float) = number
name ("display name", Int) = number
颜色和矢量:(颜色四个值为RGBA)
name ("display name", Color) = (number,number,number,number)
name ("display name", Vector) = (number,number,number,number)
纹理:
name ("display name", 2D) = "defaulttexture" {}     //2D纹理
name ("display name", Cube) = "defaulttexture" {}   //立方体贴图
name ("display name", 3D) = "defaulttexture" {}     //3D(体积)属性

属性的(name)名字通常由下划线开始。显示的名字(display name)是出现在面板上的名字。逗号后面是属性类型(Int, Float, Range(min,max),Color,vector,2D,Cube,3D)
属性特性:
[HideInInspector] - 不在材质检视面板中显示属性值。
[NoScaleOffset] - 对于具有此特性的纹理属性,材质检视面板不会显示纹理平铺/偏移字段。
[Normal] - 表示纹理属性需要法线贴图。
[HDR] - 表示纹理属性需要高动态范围 (HDR) 纹理。
[Gamma] - 表示在 UI 中将浮点/矢量属性指定为 sRGB 值(就像颜色一样),并且可能需要根据使用的颜色空间进行转换。请参阅着色器程序中的属性。
[PerRendererData] - 表示纹理属性将以 MaterialPropertyBlock 的形式来自每渲染器数据。材质检视面板会更改这些属性的纹理字段 UI。

Fallback(回退):

Shader "example" {
            // 此处为属性和子着色器...
            Fallback "otherexample"
        }

如果没有着色器能在此设备的硬件上运行,尝试使用另一个着色器。
Fallback Off
没有子着色器可以在设备硬件上运行,不会回退,也不会警告。、

SubShader
 每个UnityShader文件可以包含多个SubShader语义块,但至少要有一个。Unity会扫描所有的SubShader语义块,选择第一个能在平台上运行的SubShader.

SubShader
{
  //可选的
Tags { "Queue" = "Transparent" }
//状态设置 可选的
Cull Back 
  Pass
  {
  }
  //或更多Pass
}

状态设置


状态名称	        设置指令	                    解释
Cull	        Cull Back|Front|Off	        设置剔除模式,提出背面/正面/关闭
ZTest	        ZTest Less Greater|LEqual|
                GEqual|Equal|NoEqual|Always	设置深度测试时使用的函数
ZWrite	        ZWrite On|Off	            开启/关闭深度写入
Blend	        Blend SrcFactor DstFactor	开启并设置混合模式

渲染状态会应用到所有的Pass(渲染通道),如果不想某些物体双面渲染,可以在Pass语义块中进行单独设置。

SubShader标签(Tags,键值对类型)
结构:Tags{“TagName1”= “Value1” “Tagname2”=Value2}
作用:告诉unity渲染引擎,怎样以及何时渲染对象。
标签类型:

·	Queue:控制渲染顺序,指定该物体属于哪一个渲染队列,通过这种方式可以保证所有的透明物体可以在所有不透明物体后面被渲染。(可以自定义渲染队列)
·RenderType:对着色器进行分类,例如这只一个不透明的着色器,后者是以个透明的着色器等,可以用于着色器替换功能。
·DisableBatching: 是否对SubShader使用批处理。
·ForceNoShadowCasting:控制使用该SubShader的物体是否会投射阴影。
·IgnoreProjector:如果为”True”则不会受到Projector的影响。
·CanUseSpriteAtlas:如果着色器用于精灵,则将标签设置为“ False”,并且在将它们打包为地图集时将不起作用。
·PreviewType:知名材质面板将如何预览该材质,默认情况下,材质将显示为一个球星,我们可以通过把该标签的值预设为”Plane”,”SkyBox”来改变预览类型。

Pass语义块:
·我们可以在Pass语义块中定义Pass的名称: Name”MyPassName”通过此名称我们可以在其他shader中调用UsePass”MyShader/MYPASSNAME”(unity会把所有Pass名字转化称成大写)
·Pass也有标签,与SubShader不同,但也是用来告诉unity如何渲染物体的。

·LightMode:定义该Pass在Unity中渲染流水线角色。
·RequireOptions:用于指定满足某些条件时才渲染该Pass,值为一个由空格分隔的字符串。

·GrabPass:该Pass负责抓取屏幕并将结果储存在一张纹理中。

  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2021-08-03 11:32:18  更:2021-08-03 11:33:51 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/4 8:35:12-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码