2023-08-22 Unity Shader 开发入门2 —— Shader 开发介绍
文章目录
- 一、必备概念
- 1 计算机图形程序接口
- 2 图形接口程序与其他概念的联系
- 二、Shader 开发
- 1 Shader
- 2 Shader 开发
- 3 需掌握的内容
一、必备概念
1 计算机图形程序接口
计算机图形程序接口(Graphics API)是一套可编程的开放标准,不论 2D 还是 3D 游戏都需要这部分的底层 API 支持。
它本质上是软件,并不是硬件,是前人提前写好的调用系统硬件(GPU)绘制图形的代码。可以简单理解成是显卡厂商定义的一系列的底层的进行图形操作的加速 API 接口。
由于目前各种游戏引擎的出现,即使没有系统的学习过图形学相关知识,也能够独立的通过游戏引擎开发游戏。但是必须知道的是,游戏引擎的一部分本质就是对图形程序接口的封装,游戏引擎通过图形程序接口帮助完成了图像渲染相关的工作,我们只需要把工作重心放在游戏逻辑开发上。
-
OpenGL(Open Graphics Library)
开放图形库。
它定义了一个跨平台、跨语言的编程接口规格的专业图形程序接口,可以用于 3D、2D 图形渲染,是一个功能强大、调用方便的底层图形库。
由于它跨平台、跨语言、出现时间早,因此它的应用极其广泛。
-
OpenGL ES(OpenGL for Embedded Systems)
用于嵌入式系统的开放图形库。
它是 OpenGL 的子级,主要针对手机、游戏主机等嵌入式设备而设计,免授权费、跨平台、功能完善。
GLES2.0、GLES3.0 指的就是 OpenGL ES 这套标准,他们也是 Android 和 IOS 手机上常用的图形处理标准。
Unity 在移动平台进行图形渲染处理时,就包含了 OpenGL ES 方案
-
Vulkan
“下一代”开放的图形显示 API,是与 DX12 能够匹敌的 GPU API 标准。
它有一套最新的图形加速 API 接口,目标是提供更灵活和丰富的底层操作接口,以替代 OpenGL 和 OpenGL ES 接口,可以把 Vulkan 看做是 OpenGL 的升级版。
目前新版本的 Unity 支持使用 Vulkan 方案。
-
Directx(Direct eXtension)
直接拓展,简称 DX。
它是由微软公司创建的多媒体编程接口。它不跨平台,只针对微软的相关产品,被广泛使用于 Windows 操作系统、xBox 游戏主机的图形应用程序开发中。
其中的 D3D 算是 DX 一部分,是对标 OpenGL 的图形程序接口
-
Metal
中文翻译过来是金属。
它是苹果公司为游戏开发者提供的图形技术,该技术能够为 3D 图像提高 10 倍渲染性能。
但不支持跨平台,主要针对 IOS、Mac OS 苹果自家的操作系统,只有苹果手机、电脑能够使用。
这些图形接口程序主要是用于命令硬件完成图像渲染相关工作的。总结为:
- OpenGL(跨平台,几乎所有平台都能使用)
- DX(针对微软相关平台,微软的 Windows)
- Metal(针对苹果相关平台,苹果的 Mac OS )
- Web GL(针对网页相关)
主要支持的平台总结为:
Windows电脑:DX、OpenGL、Vulkan
苹果电脑:Metal、OpenGL、Vulkan
安卓手机:OpenGL ES、Vulkan
苹果手机:OpenGL ES、Vulkan、Metal
网站网页:Web GL
在学习计算机图形学时,OpenGL是必学的内容,因为它出现早、跨平台、跨语言,在各主流平台中都占有一席之地。
现在使用游戏引擎开发游戏,在绝大多数情况下,不需要直接和图形程序接口打交道,但是在 Unity 当中发布应用程序时,经常会看到和它们相关的一些设置。因此必须要了解了它们的基本概念,才能清楚相关的设置是什么。
注意:图形程序接口还有不同的版本,比如 DX10、DX11、DX12,比如 OpenGL ES 2.0、OpenGL ES 3.0。
不同的设备、不同的操作系统支持的版本也是不同的。比如我们进行手机游戏开发时,我们可以去查询主流移动设备支持的图形程序接口的版本,来决定在发布时,对于图形程序接口版本的兼容选择。这样才能保证发布的应用程序能够支持更多的移动设备。
2 图形接口程序与其他概念的联系
-
渲染管线(流水线)和图形接口程序的关系
-
图形接口程序(OpenGL、DX 等)主要用于控制和管理渲染管线流程。
-
通过图形接口程序提供的 API,我们就可以配置和操作渲染管线中的某些阶段。设置输入数据、控制图形处理、应用各种渲染效果,最终实现图形渲染和呈现。
-
图形接口程序充当了开发者和图形硬件之间的中间层,将开发者的渲染命令和设置转化为硬件能够理解和执行的指令。
简单理解: 图形接口程序(OpenGL、DX等)提供了对渲染管线(流水线)的控制和管理功能,它是开发者和硬件打交道的中间层。
-
-
Shader 和图形接口程序的关系
-
Shader(着色器)是一种小型程序,用于自定义渲染数据的处理,从而决定最终的渲染效果。
-
图形接口程序(OpenGL、DX 等)为 Shader 开发提供了各种 API,Shader 开发需要针对不同的图形接口程序使用不同的 Shader 开发语言来调用相关 API。
-
图形接口程序会将 Shader 程序和渲染管线的各个阶段连接起来,它会把我们的数据和指令传递给硬件(GPU 等),从而实现图形渲染的最终呈现。
简单理解: Shader 属于图形接口程序(OpenGL、DX 等)的一部分。
-
-
不同图形接口程序对 Shader 开发的影响
使用的着色器语言不同:
-
OpenGL:GLSL(OpenGL Shading Language)
-
DX: HLSL(High-Level Shading Language)
-
Metal: MSL(Metal Shading Language)
-
WebGL: GLSL ES(OpenGL ES Shading Language)
坐标系原点不同:
-
OpenGL、WebGL、Metal: 原点位于屏幕左下角
-
DX:原点位于屏幕左上角(注意:最新的 DX12 可以改为左下角原点)
-
二、Shader 开发
1 Shader
Shader 的中文意思是着色器,是一种用于描述如何渲染图形和计算图形外观的程序,主要用于控制图形的颜色、光照、纹理和其他视觉效果。
着色器通常由着色器语言编写,这些着色器语言提供了指令和语法,用于编写描述光照、纹理映射、阴影、反射等图形外观的代码。
即:Shader 是着色器,是用于编写图形表现效果的程序代码。
2 Shader 开发
渲染管线(流水线)的基本概念是:将数据分阶段的变为屏幕图像的过程。
而 Shader 开发就是针对其中某些阶段(图 1 中绿色部分)的自定义开发,从而决定图形图像最终呈现到屏幕上的表现效果。
- 几何阶段 —— 顶点着色器 小阶段
- 光栅化阶段 —— 片元着色器 小阶段
因此,Shader 开发本质就是对渲染管线(流水线)中上一阶段传递过来的数据进行自定义处理后,再传递给下一阶段。
通过自定义处理,让图形图像最终能够以我们想要的方式显示到屏幕上。
3 需掌握的内容
-
数学
在渲染管线的几何阶段,最主要要处理的核心工作之一就是坐标转换:
- 向量
- 线性代数(矩阵计算)
-
语法
需要在顶点着色器和片元着色器两个小阶段自定义处理数据来达到各种不同的表现效果。
而想要实现自定义逻辑处理,就需要学习着色器开发的特定语言:
- ShaderLab(Unity)
- CG 语言(着色器开发)
-
着色器开发
渲染管线的本质是将数据最终呈现为屏幕图像。为了让最终的图像效果更加得好,更加符合需求,必须学习一些效果处理的计算规范:
- 计算光照效果的颜色
- 获取图片的纹理颜色
- 处理透明效果、阴影效果
等等。
相关文章:
2023-08-22 Unity Shader 开发入门2 —— Shader 开发介绍
文章目录 一、必备概念1 计算机图形程序接口2 图形接口程序与其他概念的联系 二、Shader 开发1 Shader2 Shader 开发3 需掌握的内容 一、必备概念 1 计算机图形程序接口 计算机图形程序接口(Graphics API)是一套可编程的开放标准,不论 2…...
UE5 运行时捕捉外部窗口并嵌入到主窗口
UE5 运行时捕捉外部窗口并嵌入到主窗口的一种方法 创建一个Slate类用于生成一个窗口 .h// Fill out your copyright notice in the Description page of Project Settings.#pragma once#include "CoreMinimal.h" #include "Widgets/SCompoundWidget.h"/*…...
uniapp 使用permission获取录音权限
使用前,需要先配置权限 android.permission.RECORD_AUDIO...
基于paddleocr的文档识别
1、版面分析 使用轻量模型PP-PicoDet检测模型实现版面各种类别的检测。 数据集: 英文:publaynet数据集的训练集合中包含35万张图像,验证集合中包含1.1万张图像。总共包含5个类别。 中文:CDLA据集的训练集合中包含5000张图像&a…...
魏副业而战:闲鱼卖货赚钱策略
我是魏哥,与其躺平,不如魏副业而战! 闲鱼卖货有人赚钱,有人不赚钱。 什么原因呢?闲鱼卖货的策略不对。 这不,社群成员小K找我反馈40单赚了150。 利润太低,不在正常范围之内。 魏哥建议继续…...
语法篇--XML数据传输格式
一、XML概述 1.1简介 XML,全称为Extensible Markup Language,即可扩展标记语言,是一种用于存储和传输数据的文本格式。它是由W3C(万维网联盟)推荐的标准,广泛应用于各种系统中,如Web服务、数据…...
【Redis】缓存雪崩、缓存击穿、缓存穿透
在使用 Redis 缓存时,常常会遇到三个主要的问题,分别是缓存雪崩、缓存击穿和缓存穿透。这些问题都可能导致缓存系统的性能下降或数据不一致性的问题。 一、缓存雪崩(Cache Avalanche) 缓存雪崩是指在某个时间点,缓存…...
通过示例学习 JavaScript 运算符 - 逻辑、比较、三元和更多 JS 运算符
JavaScript 有许多运算符,可用于对值和变量(也称为操作数)执行操作 根据这些 JS 运算符执行的操作类型,我们可以将它们分为七组: 目录 算术运算符赋值运算符比较运算符逻辑运算符三元运算符typeof操作员按位运算符 算术运算符 1. 加法运算符 2.减法运算符 3. 乘法运…...
基于微信小程序+Springboot校园二手商城系统设计和实现
博主介绍:✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、目前专注于大学生项目实战开发,讲解,毕业答疑辅导✌ 🍅文末获取源码联系🍅 👇dz…...
excel 动态表头与合并列
零、希望Springboot-java导出excel文件,包括动态表头与下边合并的列 使用 org.apache.poi 与自己封装工具类实现相关功能。代码如下 一、代码 1、依赖 implementation(group: org.apache.poi,name: poi-ooxml,version: 4.1.0)implementation(group: org.apache.po…...
jenkins自动部署微服务到docker
1、代码上传到git; 2、jenkins拉取git的代码,maven打包,使用插件生成镜像,自动上传docker; 两个插件,一个打包插件,一个创建镜像上传docker仓库.(将dockerfile内容搬到插件配置&…...
【蔚来汽车】蔚来20220713第三题-旅游规划 <模拟、滑动窗口>
【蔚来汽车】蔚来20220713第三题-旅游规划 牛牛对 n 个城市旅游情况进行了规划,已知每个城市有两种属性 x 和 y ,其中 x 表示去第 i 号城市的花费,y 表示在第 i 号城市游玩后会得到的开心值。 现在牛牛希望从中挑选出一些城市去游玩&…...
[解决方案]Antd TreeSelect/Select placeholder失效
🔎嘿,这里是慰慰👩🏻🎓,会发各种类型的文章,智能专业,从事前端🐾 🎉如果有帮助的话,就点个赞叭,让我开心一下!…...
微人事 部门管理 模块 (十五)
部门管理的树展示和搜索 数据展示页是个树,我们一次性把数据加载出来也可以通过点一次id加载查询出来出来子部门,我们用一次拿到说有json数据加载出来 数据不多可以用递归,数据很多就用懒加载的方式 由于子部门比较深就不适合,权…...
【Terraform学习】使用 Terraform 从 EC2 实例访问 S3 存储桶(Terraform-AWS最佳实战学习)
使用 Terraform 从 EC2 实例访问 S3 存储桶 实验步骤 前提条件 安装 Terraform: 地址 下载仓库代码模版 本实验代码位于 task_ec2_s3connet 文件夹中。 变量文件 variables.tf 在上面的代码中,您将声明,aws_access_key,aws_…...
ZDRE6VP4-1X/50MG24K4V比例压力阀放大器
DRE 6-11/100MG24K4M比、DRE 10-6X/200YMG24K4M、DRE 20-52/200YMG24K4M、DRE 20-6X/200YMG24K4M、ZDRE6VP1-1X/315MG24N9K4M、ZDRE6VP4-1X/50MG24K4V、Z3DRE6VP2-2X/50G24K4M、Z3DRE6VP1-2X/100G24K4M、Z3DRE10VP2-1X/100XYG24K4M、Z3DRE10VP1-1X/315XLG24K4V 功能: 设定值通…...
纠缠辅助的量子网络:原理、技术、发展与挑战
7月11日,中国科大网络空间安全学院和陆军院士工作室李忠辉博士为第一作者、薛开平教授为通讯作者的量子网络综述论文“Entanglement-Assisted Quantum Networks: Mechanics, Enabling Technologies, Challenges, and Research Directions”在通信领域知名期刊《IEEE…...
React Native 可触摸组件基础知识
在 React Native 中要实现可触摸的组件方式有三种,第一种方式就是使用TouchableHighlight组件,第二种方式就是使用TouchableOpacity组件,最后一种方式就是使用TouchableWithoutFeedback组件。 TouchableHighlight TouchableHighlight组件主…...
用户、权限和Vim编辑器
用户 用户分类 超级管理员:可以登录,拥有所有权限,用户Id为0 普通用户:可以登录,但只能操作家目录,用户Id为1000 程序用户:不能登录,用于管理程序,用户Id为1~999 添…...
git版本管理加合并笔记
目录 1.创建空文件夹,右键Bash here打开 2.打开链接,点击克隆下载,复制SSH链接 3.输入git SSH链接 回车 4.换成https在桌面上进行克隆仓库就正常了 5.去vscode里改东西 6.提交 7.创建dev分支 8.在dev里修改内容,提交&…...
404 Not Found 与 500 Internal Server Error 全方位解析
前言在日常开发与运维中,HTTP 状态码是我们最常打交道的一类信号。其中,404 与 500 两类错误几乎占据了线上问题的一半以上。你是否遇到过:用户反馈页面打不开,浏览器提示 404 Not Found,但实际上资源明明存在…...
为什么92%的DeepSeek私有化部署在K8s上遭遇OOMKilled?——GPU内存隔离、vLLM适配与cgroups v2调优三重解法
更多请点击: https://intelliparadigm.com 第一章:DeepSeek私有化部署的Kubernetes现状与OOMKilled困局 当前,DeepSeek系列大模型在企业私有化场景中广泛采用Kubernetes进行容器化编排部署。然而,实际落地过程中,内存…...
2026年邵阳高复机构大揭秘,哪家才是学子的理想之选?
高考失利后,复读成为许多学子重新追逐梦想的途径。在邵阳,众多高复机构如繁星般闪耀,而湘郡铭志学校高复部无疑是其中一颗璀璨的明星。接下来,让我们深入了解湘郡铭志学校高复部,同时对比其他知名高复机构,…...
数据中心机架内互连新范式:为何PCIe正取代以太网与InfiniBand?
1. 数据中心互连的十字路口:为什么是PCIe?在数据中心这个庞大而精密的数字世界里,服务器、存储和网络设备之间的“对话”效率,直接决定了整个系统的性能上限。过去十几年,我们习惯了用以太网(Ethernet&…...
通过curl命令直接测试Taotoken聊天补全接口的配置与排错方法
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 通过curl命令直接测试Taotoken聊天补全接口的配置与排错方法 对于开发者而言,在集成大模型API时,直接使用c…...
深入Windows内核的“心脏”:通过WRK源码理解ntoskrnl.exe与HAL的协作机制
深入Windows内核的“心脏”:通过WRK源码理解ntoskrnl.exe与HAL的协作机制 在计算机科学领域,操作系统内核堪称最复杂的软件工程之一。作为Windows操作系统的核心,ntoskrnl.exe与硬件抽象层(HAL)的协作机制长期以来都是开发者们津津乐道的话题…...
【独家首发】ElevenLabs中文语音优化白皮书:针对普通话声调、儿化音与连读现象的5层微调协议
更多请点击: https://intelliparadigm.com 第一章:ElevenLabs超写实语音生成教程 ElevenLabs 是当前业界领先的 AI 语音合成平台,其模型在语调自然度、情感表达力与跨语言一致性方面表现卓越。本章将指导你完成从 API 接入到高质量语音生成的…...
clawhealth:本地化Garmin健康数据同步与自动化分析工具实践
1. 项目概述:打造你的本地健康数据中心如果你和我一样,手腕上常年戴着一块Garmin手表,每天看着它记录步数、心率、睡眠,但总觉得这些数据只是躺在Garmin Connect的云端,自己没法真正“拥有”和分析,那么cla…...
实测:2026 年国内直连 AI 一站式平台,聊天 / 绘画 / 论文 / 视频全搞定,不用翻墙不花冤枉钱
最近 AI 圈真的太卷了。ChatGPT 5.4、Gemini 3.1、Claude Code 轮番上新,多模态、长文本、代码 Auto Mode 一个比一个强。但普通用户想用明白,真的太折腾。先说说我踩过的三大坑,句句大实话网络糟心到崩溃官网打不开、地区不可用、加载转圈、…...
冥想第一千八百七十八天(1878)
1.周二,5.12日,天气晴朗,下午阴,项目上全力以赴的一天。今天是休息日,下班带溪溪去游泳。 2.感谢父母,感谢朋友,感谢家人,感谢不断进步的自己。...
