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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
留言是一种美德,欢迎回访!
[***.207.175.100]2024年03月16日 10时42分07秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
java integer 不变模式_Java代码的变与不变
2019-04-21
java guava 使用_Java8-Guava实战示例
2019-04-21
java线程占用CPU_在windows下揪出java程序占用cpu很高的线程并完美解决
2019-04-21
java多态替换switch_使多态性无法解决那些switch / case语句的麻烦
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