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里修改内容,提交&…...
变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析
一、变量声明设计:let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性,这种设计体现了语言的核心哲学。以下是深度解析: 1.1 设计理念剖析 安全优先原则:默认不可变强制开发者明确声明意图 let x 5; …...
JavaScript 中的 ES|QL:利用 Apache Arrow 工具
作者:来自 Elastic Jeffrey Rengifo 学习如何将 ES|QL 与 JavaScript 的 Apache Arrow 客户端工具一起使用。 想获得 Elastic 认证吗?了解下一期 Elasticsearch Engineer 培训的时间吧! Elasticsearch 拥有众多新功能,助你为自己…...
鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/
使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题:docker pull 失败 网络不同,需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...
mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包
文章目录 现象:mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时,可能是因为以下几个原因:1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...
AI书签管理工具开发全记录(十九):嵌入资源处理
1.前言 📝 在上一篇文章中,我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源,方便后续将资源打包到一个可执行文件中。 2.embed介绍 🎯 Go 1.16 引入了革命性的 embed 包,彻底改变了静态资源管理的…...
使用Spring AI和MCP协议构建图片搜索服务
目录 使用Spring AI和MCP协议构建图片搜索服务 引言 技术栈概览 项目架构设计 架构图 服务端开发 1. 创建Spring Boot项目 2. 实现图片搜索工具 3. 配置传输模式 Stdio模式(本地调用) SSE模式(远程调用) 4. 注册工具提…...
mac 安装homebrew (nvm 及git)
mac 安装nvm 及git 万恶之源 mac 安装这些东西离不开Xcode。及homebrew 一、先说安装git步骤 通用: 方法一:使用 Homebrew 安装 Git(推荐) 步骤如下:打开终端(Terminal.app) 1.安装 Homebrew…...
uniapp 字符包含的相关方法
在uniapp中,如果你想检查一个字符串是否包含另一个子字符串,你可以使用JavaScript中的includes()方法或者indexOf()方法。这两种方法都可以达到目的,但它们在处理方式和返回值上有所不同。 使用includes()方法 includes()方法用于判断一个字…...
系统掌握PyTorch:图解张量、Autograd、DataLoader、nn.Module与实战模型
本文较长,建议点赞收藏,以免遗失。更多AI大模型应用开发学习视频及资料,尽在聚客AI学院。 本文通过代码驱动的方式,系统讲解PyTorch核心概念和实战技巧,涵盖张量操作、自动微分、数据加载、模型构建和训练全流程&#…...
Linux中《基础IO》详细介绍
目录 理解"文件"狭义理解广义理解文件操作的归类认知系统角度文件类别 回顾C文件接口打开文件写文件读文件稍作修改,实现简单cat命令 输出信息到显示器,你有哪些方法stdin & stdout & stderr打开文件的方式 系统⽂件I/O⼀种传递标志位…...
