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里修改内容,提交&…...
Qt Widget类解析与代码注释
#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//解释这串代码,写上注释 当然可以!这段代码是 Qt …...
《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》
在注意力分散、内容高度同质化的时代,情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现,消费者对内容的“有感”程度,正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中࿰…...
Spring AI与Spring Modulith核心技术解析
Spring AI核心架构解析 Spring AI(https://spring.io/projects/spring-ai)作为Spring生态中的AI集成框架,其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似,但特别为多语…...
C++ Visual Studio 2017厂商给的源码没有.sln文件 易兆微芯片下载工具加开机动画下载。
1.先用Visual Studio 2017打开Yichip YC31xx loader.vcxproj,再用Visual Studio 2022打开。再保侟就有.sln文件了。 易兆微芯片下载工具加开机动画下载 ExtraDownloadFile1Info.\logo.bin|0|0|10D2000|0 MFC应用兼容CMD 在BOOL CYichipYC31xxloaderDlg::OnIni…...
精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南
精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南 在数字化营销时代,邮件列表效度、用户参与度和网站性能等指标往往决定着创业公司的增长成败。今天,我们将深入解析邮件打开率、网站可用性、页面参与时…...
九天毕昇深度学习平台 | 如何安装库?
pip install 库名 -i https://pypi.tuna.tsinghua.edu.cn/simple --user 举个例子: 报错 ModuleNotFoundError: No module named torch 那么我需要安装 torch pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple --user pip install 库名&#x…...
Linux 内存管理实战精讲:核心原理与面试常考点全解析
Linux 内存管理实战精讲:核心原理与面试常考点全解析 Linux 内核内存管理是系统设计中最复杂但也最核心的模块之一。它不仅支撑着虚拟内存机制、物理内存分配、进程隔离与资源复用,还直接决定系统运行的性能与稳定性。无论你是嵌入式开发者、内核调试工…...
C++课设:简易日历程序(支持传统节假日 + 二十四节气 + 个人纪念日管理)
名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 专栏介绍:《编程项目实战》 目录 一、为什么要开发一个日历程序?1. 深入理解时间算法2. 练习面向对象设计3. 学习数据结构应用二、核心算法深度解析…...
Redis:现代应用开发的高效内存数据存储利器
一、Redis的起源与发展 Redis最初由意大利程序员Salvatore Sanfilippo在2009年开发,其初衷是为了满足他自己的一个项目需求,即需要一个高性能的键值存储系统来解决传统数据库在高并发场景下的性能瓶颈。随着项目的开源,Redis凭借其简单易用、…...
三分算法与DeepSeek辅助证明是单峰函数
前置 单峰函数有唯一的最大值,最大值左侧的数值严格单调递增,最大值右侧的数值严格单调递减。 单谷函数有唯一的最小值,最小值左侧的数值严格单调递减,最小值右侧的数值严格单调递增。 三分的本质 三分和二分一样都是通过不断缩…...
