unity shader入门(一) 基本结构和变量声明

2023-11-18


前言

本文所有内容来自
unity5shader着色器入门教程

Unity中shader相关的结构

Mesh filter组件:存储一个Mesh(网格。模型由哪些三角面组成,组成正方形还是圆形还是什么)
Mesh Renderer组件:渲染一个模型的外观
Material贴图(可以没有,可以是一个单纯的颜色)
shader(反光程度、光滑程度)

什么是openGL和DirectX

图像应用编程接口,用来进行渲染的。
应用程序会把shader和渲染命令传递给openGL或DX进行解析,然后控制GPU进行渲染。

GLSL是OpenGL的shader语言
HLSL是DirectX的shader语言(微软)
CG是跨平台的语言,在上面两种平台上都可以运行(nvidia)

unity shader的分类

在unity中对CG进行了一层封装,使用的是ShaderLab。

  1. 表面着色器 surface shader(比较简单 是对其他的着色器的封装)(光源多的时候适合用这个)
  2. 顶点/片元着色器 vertex/fragment shader(更基础 能实现的效果更多)
  3. 固定函数着色器 fixed function shader(已经被弃用)

编写一个unity shader

shader的基本结构

shader 和 meterial都是可以自己创建的
双击自己创建的shader就可以为其编写代码
shader基本结构如下

Shader "lhy/MyShader"{//这里指定shader的名字 不一定和文件名保持一致

	Properties{
		//属性(对标C#上的int、float之类
		_Color("_Color",Color)=(1,1,1,1)//第二个参数是属性的类型,是必须这么写的 前面带_的则是我们自定义的名称
		

	}

	SubShader{
		//子shader可以有很多个 用来控制效果的 用来在不同的显卡上运行 显卡会运行它能找到的第一个支持的效果
		Pass{//至少有一个pass块 (类似于C#中的方法
			CGPROGRAM//也可能是HLSLPROGRAM
			//使用CG语言编写shader代码


			ENDCG

		
		}
	}

	Fallback "VertexLit"//当上面的效果都不支持的时候,会使用这个默认效果 直接指定名字就可以了


}

shader的property类型

	Properties{
		//属性(对标C#上的int、float之类

		//color类型
		//一个小point:capsule使用的是fallback效果时,当你把下面这个东西命名为_Color的时候,会发现你修改这个颜色,capsule的颜色也会跟着变,这是因为VertexLit里也用了一样的名称
		_Color("_Color",Color)=(1,1,1,1)//第一个参数是会在unity里面显示的名称 第二个参数是属性的类型,是必须这么写的 前面带_的则是我们自定义的名称
		
										
		//向量类型
		_Vector("Vector",Vector)=(1,2,3,4)

		//整数类型
		_Int("Int",Int)=32432
		//小数类型
		_Float("Float",Float)=2.4

		//range类型
		_Range("Range",Range(1,11))=6

		//图片类型
		_2D("Texture",2D)="white"{}//不指定图片的情况下是白色的图片

		//cube类型 (天空是一个立方体,六面上可以贴图
		_Cube("Cube",Cube) = "white"{}

		//3D纹理
		_3D("Texture",3D)="black"{}

	}

在subshader中再次声明要用到的property

		SubShader{
		//子shader可以有很多个 用来控制效果的 用来在不同的显卡上运行 显卡会运行它能找到的第一个支持的效果
		Pass{//至少有一个pass块 (类似于C#中的方法
			CGPROGRAM//也可能是HLSLPROGRAM
			//使用CG语言编写shader代码
			float4 _Color;//要在这里使用上面的properties时,需要重新定义,名字要对应(subshader里面的color对应的是float4属性 它会自动获得上面的默认值
			float4 _Vector;
			float _Int;
			float _Float;
			float _Range;
			samplerCube _Cube;
			sampler2D _2D;
			sampler3D _3D;

			ENDCG
		}
	}

float和half和fixed的区别:都是小数,float是32位,half是16位(-6万到6万),fixed是11位(-2万到2万)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

unity shader入门(一) 基本结构和变量声明 的相关文章

  • 静态资源存放的位置

    存放的四个位置 classpath META INF resources classpath resources classpath static classpath public 如果要访问的话 是当前项目的根路径 静态资源名 因为这个图
  • C#中浮点数的比较

    前几天去面试 被问到怎么比较两个浮点数的大小 当时只说了个大概 看得出来面试官不是太满意 回来特意查了一下 在MSDN上发现了比较浮点数是否相等的不错的方法 Initialize two doubles with apparently id
  • 接口测试用例设计 - 实战篇

    目录 一 接口测试流程 二 分析接口文档中哪些元素 三 如何设计接口测试用例 3 1 为什么要设计测试用例 3 2 设计接口测试用例从哪些方面考虑 四 常用的接口测试用例覆盖方法 五 接口测试的接口优先级 5 1 优先级 针对所有接口 5
  • MATLAB代码显示内存不足的解决方法

    总结了下大家对于运行MATLAB代码 显示内存不足的问题 在网上进行调研 总结如下 一般out of memenry存在以下几种情况 1 变量需要的存储空间超过了可用的内存空间 2 数据需要的存储空间 超过内存中最大的可用连续存储空间 3
  • 最大子列和问题【简单易懂】

    问题 给定N个整数的序列 求函数的最大值 算法一 例如序列为 1 2 3 4 所以子列分别为 1 1 2 1 2 3 1 2 3 4 2 2 3 2 3 4 3 3 4 4 我们要做的就是依次将这些子列的和求出并比较 得出最大子列和 首先将
  • 2020算法设计与分析 官方考前模拟卷 参考答案

    算法设计与分析 样例试题 算法设计与分析总结笔记 注 此试题仅供了解题型 和期末考试试题没有任何直接关系 FBI Warning 这套题难度较大 千万不要坏了心态 xj大佬说要是考试那么难他直播粪坑蝶泳 Power By 王宏志教授 5 分
  • matlab的tfdata函数_matlab 入门基本操作命令与函数

    一 tf 函数 是传递函数的意思 一般学自动控制原理的时候经常用 在s域中 比如你要输入G s 1 s 2 2s 1 就可以在matlab中输入G tf 1 1 2 1 就OK了 不懂的话你可以在command窗口输入help tf 就行了
  • 为什么使用start方法启动Java的Thread线程?

    一 简介 在Java代码当中 当我们需要开启子线程去处理一些任务的时候 往往是调用Thread对象的start方法 这样Thread实例中的Runnable对象的run方法就会在一个新的线程当中执行 创建一个线程 Thread thread
  • 从注意力机制到Vison Transformer

    原视频链接 https www bilibili com video BV1Jh411Y7WQ spm id from 333 788 vd source f04f16dd6fd058b8328c67a3e064abd5 https www
  • 【Zabbix实战之运维篇】Zabbix的客户端自动注册配置

    Zabbix实战之运维篇 Zabbix的客户端自动注册配置 一 自动注册与自动发现介绍 1 自动注册介绍 2 自动发现介绍 3 主动模式与被动模式 二 客户端安装abbix agent2 1 下载zabbix agent2软件包 2 安装z
  • Python 设计真实反弹球算法及原理分析 (使用物理定律)

    文章简单地使用物理定律 编写程序模拟真实世界中的碰撞 在开始正式讲解之前 先看这两个代码 把球掉头 ball speed 0 ball speed 0 ball speed 1 ball speed 1 可以看到 这个代码直接把球的速度反了
  • 某电商数据分析:利用SQL做查询分析

    本文利用MYSQL在数据分析中的作用 将数据导入NAVICAT 对某电商展开数据分析工作 一 理解数据 字段说明 1 orderinfo表 1 orderid 订单编号 2 userid 用户编号 3 isPaid 订单状态 是否已支付 4
  • element ui 树形控件点击

    element 树形控件 点击当前节点 鼠标再离开后 当前节点就是个白色的背景颜色 我试了很多方法都不能完全性解决这个问题 最后是 gt gt gt el tree node focus gt el tree node content ba
  • Java笔试面试总结—try、catch、finally语句中有return 的各类情况

    前言 之前在刷笔试题和面试的时候经常会遇到或者被问到 try catch finally 语法块的执行顺序等问题 今天就抽空整理了一下这个知识点 然后记录下来 正文 本篇文章主要是通过举例的方式来阐述各种情况 我这里根据 try catch
  • 编译SandBoxie-plus自动生成文件脚本

    首先添加moc exe所在目录的PATH环境变量 moc exe MiscHelpers Common CheckableMessageBox h o MiscHelpers Common moc CheckableMessageBox c
  • 【科普】波特率和比特速率的理解

    什么是波特率 单位时间内传输的码元个数称为波特率 单位为 Baud 那码元又是什么呢 码元又称为 符号 即 symbol 维基百科上对码元的解释 持续一段固定时间的通信信道有效状态就是码元 这么解释比较抽象 可以解释码元的物理意义 在通信信
  • win7下exe提示无法正常启动(0xc0000906)

    本人遇见是 avast问题 卸了
  • 【特征工程】特征创建(属性创建)

    特征创建也称属性创建 包括 特征提取 映射数据到新的空间 二次特征 特征构造 1 特征提取 肯定就生成新的特征 2 将数据映射到新的空间 扩维或降维 也会形成性的特征 3 二次特征 通过基础特征构造出新的特征

随机推荐

  • 《Python编程无师自通》读书笔记

    不能越界访问函数内部定义的变量 global不能乱用 啥时候用元组 join连接 小点 但第一次见会觉得蛮有意思 Hangman 10 1的案例蛮有意思的 一搜才发现是十分经典的文字游戏 过程式编程的缺点以及函数式编程和面向对象编程的解决方
  • c++标准异常类的继承实现

    出处来自百度 查来学习之用 AbnomalTest cpp 定义控制台应用程序的入口点 include StdAfx h include
  • Qt中绘制折线

    Qt中绘制折线 基本流程 三要素 场景 图表 序列 创建场景 创建图表 图表添加到场景 创建序列 序列添加到图表 创建坐标轴并设置 坐标轴添加到图表 序列 坐标轴 图表配合 序列设值 1 必要配置 pro文件 QT charts 头文件 i
  • 常见操作String的方法(字符查找,索引查找)

    常见操作String的方法 字符查找 索引查找 在给定的字符串中查找字符或字符串是比较常见的操作 字符串查找分为两种形式 一种是在字符串中获取匹配字符 串 的索引值 另一种是在字符串中获取指定索引位置的字符 根据字符查找indexOf la
  • 分析排查Hystrix熔断降级未能真正生效的问题

    1 现象 压测无法进入hystrix熔断处理 检查feign hystrix enabled是开启的 hystrix设定的最大并发连接为100 降级最大并发连接为50 hystrix command default execution is
  • 算法:双指针

    双指针 双指针是一种思想或一种技巧并不是特别具体的算法 具体就是用两个变量动态存储两个结点 来方便我们进行一些操作 通常用在线性的数据结构中 特别是链表类的题目 经常需要用到两个或多个指针配合来记忆链表上的节点 完成某些操作 常见的双指针方
  • HTML 标签

    浏览器支持 所有浏览器都支持
  • Java-基于SSM+JSP的医院挂号管理系统

    项目背景 随着科学技术的飞速发展 社会的方方面面 各行各业都在努力与现代的先进技术接轨 通过科技手段来提高自身的优势 医院预约挂号系统当然也不能排除在外 医院预约挂号系统是以实际运用为开发背景 运用软件工程开发方法 采用jsp技术构建的一个
  • python+selenium自动化测试框架详解,我就讲一遍!

    前言 本文整理归纳以往的工作中用到的东西 现汇总成基础测试框架提供分享 框架采用python3 selenium3 PO yaml ddt unittest等技术编写成基础测试框架 能适应日常测试工作需要 1 使用Page Object模式
  • Debian查询硬件状态

    很早以前写过一个查询树霉派硬件状态的文章 用是Python写的一个小程序 里面用到了vcgencmd这个测温度的内部命令 但这个命令在debian里面没有 debian里只有lm sensors的外部命令 需要安装 apt get inst
  • Linux 重启后ext文件系统Inode 625047 has illegal blocks异常

    情况描述 系统重启后 发现报错 dev VolGroup00 LogVol00 contains a file system with errors check forced inode 625047 has illegal block s
  • 2021-03-31

    智能风控中的全场景化的模型组合包括哪些内容 近期某些网贷的广告 频上热搜 近有某东 远有某60 相信在大家的WX朋友圈更有大量 精彩 广告诱惑各位提前消费 于目前的政策而言 当下网贷行业的监管已达到最顶峰 网贷再也回不到巅峰时刻 但与此同时
  • 传统的项目经理可以担当Scrum Master吗

    原文链接作者 Amir Nasiri 一个习惯了传统项目管理方法的项目经理 可以在敏捷组织里担当ScrumMaster吗 这是一个很有意思的问题 也是所有项目经理在有朝一日面对敏捷方法 比如Scrum 的时候需要思考的问题 敏捷在落地实施时
  • QGis 二次开发教程(目录)

    目录 QGis 二次开发搭建 windows QGis QgsVectorLayer 图层加载 shp file矢量图层 QGis QgsVectorLayer 图层数据解析 获取经纬度集合和其他字段标量 QGis QgsVectorLay
  • Keras+CNN模型识别手写数字(mnist)详细分析

    CNN模型 CNN卷积神经网络 包含卷积层 卷积运算提取输入的不同特征 更多层的网络能从低级特征中迭代提取等复杂的特征 线性整流层 RELU 池化层 卷积后会得到维度很大的特征 将特征切成几个区域 取最大值或平均值 得到新的较小维度特征 全
  • tcp和udp,通信协议

    1 什么是tcp和udp 常用的网络通讯 浏览网页 软件聊天等等 都是基于tcp和udp传输的 2 tcp和udp的区别是什么 1 最大的区别是一个基于连接 一个基于非连接 举例说明 如果把人与人之间的通信比喻为进程之间的通信 写信和电话
  • 通俗易懂讲解区块链

    文章目录 一 区块链是什么 区块链的几个核心特点 1 去中心化 2 非常安全 3 不可篡改性 4 开放性 5 无第三方 6 匿名性 二 区块链与比特币的关系 三 通俗易懂解释区块链 1 民生领域 2 经济产业领域 3 政务领域 4 数字身份
  • B站马士兵python入门基础版详细笔记(6)

    前言 这篇文章是B站学习python入门基础班的视频的第五 六章内容 主要讲述的是列表 主要包括列表的创建 以及他的元素的增 删 查 改操作命令 一 列表的初始化 为什么要使用列表 列表就好比C语言中的数组 它可以在这个数组里面保存各种类型
  • 达梦数据库创建数据库实例、规划表空间

    1 创建数据库实例 1 1图形方式创建 到数据库安装目录 dm7 的 tool目录下 打开达梦数据库配置助手 dmdba localhost tool dbca sh 打开达梦数据库配置助手 选择创建数据库实例 点击 开始 如下图 创建数据
  • unity shader入门(一) 基本结构和变量声明

    文章目录 前言 Unity中shader相关的结构 什么是openGL和DirectX unity shader的分类 编写一个unity shader shader的基本结构 shader的property类型 在subshader中再次