unity-shader编写需要储备的知识(1)
发布日期:2021-05-07 17:59:06 浏览次数:11 分类:技术文章

本文共 1934 字,大约阅读时间需要 6 分钟。

首先是说一些关于着色器的一些基本知识

1.着色器类型类型,分别是固定管线着色器(将会淘汰)、顶点片元着色器、表面着色器。

顶点片元着色器:干预模型形态的着色器,例如带有波浪的水面,修改的就是波浪表面上每一个顶点的值。

表面着色器:干预像素的着色器,比如乌龟上面添加一个光照的纹理,使其有一种在水中游泳的感觉。

2.着色器与显卡的关系

显卡也就是GPU是图形运算处理中心两者的关系为

图形->添加到GPU(经过渲染管道进行渲染)->显示到屏幕上。
在这里插入图片描述
我们编写的shader程序就是顶点着色器与片元着色器。

3.相关知识杂谈

在不同的GPU中os、windows等,在不同类型的显卡中有不同的图形标准,如果不讲这些统一起来的话,有些东西只能在固定的GPU中运行,所以菜肴转趋动,通过驱动才可以统一标准—>DirectorX(图形标准),使不同的软件等在不同的显卡中也可以正常显示。

HLSL语言支持通过Director3D编写的着色器,只能在Director3D中使用

GLSL语言支持openGL上编shader程序。
Cg语言是NVDIAI和微软合作提供的语言,支持Director3D和openGL编写程序。我们编写shader程序一般都是用Cg语言,但是vs上是不会提示Cg语言的变量类型等信息的。

4.shader编程的基本结构

Shader “name”{// name shader 的名字

//定义一些属性,定义在这里的会在属性查看器里面显示;
[propeties]
//子着色器列表,一个shader必须至少有一个子着色器;
Subshaders;{。。。}
//如果子着色器显卡不支持,就会降级即fallback操作
{fallback}
}
1.Properties定义
name(“display name”,type) = 值
Name是变量名称、display name:显示到属性检查器中的名称
Type是变量的类型
值是默认值
注意: Name的规定就是使用下划线开始
例如

Properties    {
_Color ("Color", Color) = (1,1,1,1) _MainTex ("Albedo (RGB)", 2D) = "white" {
} _Glossiness("Smoothness", Range(0,1)) = 0.5 _Metallic("Metallic", Range(0,1)) = 0.0 }

2.subshader的属性组成

在这里插入图片描述
其中每一个子着色器都可以有多个通道
上图的标签使用方法及类型
在这里插入图片描述
3.pass通道
Subshader包装了一个渲染方案,这些方案的执行途径是Pass subshader可以由很多个pass,每一个pass 都能令几何体渲染一次
Pass的基本语法是
Pass{[Name and tags] [RenderSetup][Texture Setup]}
在其他着色器的pass块中如果想要引用此通道,可以通过名字来引用减少重复操作,需要注意的是Name命令必须是大写,也就是说但凡是通道的名字必须要大写(unity引擎的规定)
通道类型分别有Regularpass、usePass、GrabPasss三种
普通通道的渲染设置
在这里插入图片描述
上图是普通通道类型的作用

Usepass的用处

插入所有来自其他着色器的给定名字的通道;
UsePass“Shader/Name”,Name为 着色器通道
使用方法:“Specular/BASE”//插入Specular中为Bass 的通道;
GrabPass{};一种特殊通道类型,他会捕获物体所在位置的屏幕的内通婚,并且写入一个纹理中,这个纹理能够呗用于后续通道中完成高级图像特效 ,后续通道可以使用
——Grabtexture进行访问;
使用Grabpass{纹理名称}捕获 屏幕内容到指定纹理中,后续通道可以通过纹理名称访问

5.shader中常用类型

在这里插入图片描述

其中的options是描述纹理属性的

6.unity坐标系转换

在这里插入图片描述

7.Cg语言的常用语义修饰

在这里插入图片描述

8.Cg语言基本类型表达式

在这里插入图片描述

定点数:用整数表示小数,比如有一个32位的操作系统,那么数字35.2的35,就存在前16位,2存后16位,所以,所谓的定点数就是用整数来表示小数。
在Cg中颜色就是用fixed来表示的,比浮点数更加高效。

Sampler来表示纹理对象,如果要向shader中关联一副图片,纹理或者texture,就使用sampler/1D/2D/3DCUBE/RECT,1D/2D等都是纹理,CUBE可以代表天空盒

9.标准内置函数

在这里插入图片描述

转载地址:https://blog.csdn.net/lfanyize/article/details/104087184 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:unity—shader简单编程(2)
下一篇:unity-阴影、烘培、光照贴图

发表评论

最新留言

留言是一种美德,欢迎回访!
[***.207.175.100]2024年03月16日 10时42分07秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

java integer 不变模式_Java代码的变与不变 2019-04-21
java guava 使用_Java8-Guava实战示例 2019-04-21
python barrier option pricing_《Python金融数据分析》书内代码实战与讲解(二)金融衍生物定价... 2019-04-21
java自带工具_深入了解Java JDK自带工具,包括javac、jar、jstack等,实用~ 2019-04-21
gnome mysql client_解决MySQLWorkbenchgnome-keyring-daemon错误的方法分享 2019-04-21
java线程占用CPU_在windows下揪出java程序占用cpu很高的线程并完美解决 2019-04-21
java多态替换switch_使多态性无法解决那些switch / case语句的麻烦 2019-04-21
java httpclient 进度条_如何使用Apache HttpClient 4获取文件上传的进度条? 2019-04-21
下列不属于java语言特点的是_下列选项中,不属于Java语言特点的一项是( )。... 2019-04-21
java中小数的乘法_javascript的小数点乘法除法实例 2019-04-21
kappa一致性检验教程_SPSS在线_SPSSAU_Kappa一致性检验 2019-04-21
linux shell mysql备份_linux shell 备份mysql 数据库 2019-04-21
Java双向链表时间复杂度_链表是什么?有多少种链表?时间复杂度是? 2019-04-21
unity3d能和java系统整合吗_Android与Unity3d的整合 2019-04-21
minecraft666java_我的世界的666的世界 2019-04-21
辽宁师范大学java_辽宁师范大学心理学院 2019-04-21
java程序有连接数据库_Java程序连接数据库 2019-04-21
java reduce.mdn_reduce高级用法 2019-04-21
java shape用法_Java PShape.scale方法代码示例 2019-04-21
java字符串三目_java字符串连接运算符和三目运算符 2019-04-21