当前位置: 首页 > news >正文

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 苹果自家的操作系统,只有苹果手机、电脑能够使用。

​ 这些图形接口程序主要是用于命令硬件完成图像渲染相关工作的。总结为:

  1. OpenGL(跨平台,几乎所有平台都能使用)
  2. DX(针对微软相关平台,微软的 Windows)
  3. Metal(针对苹果相关平台,苹果的 Mac OS )
  4. 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 中绿色部分)的自定义开发,从而决定图形图像最终呈现到屏幕上的表现效果。

  • 几何阶段 —— 顶点着色器 小阶段
  • 光栅化阶段 —— 片元着色器 小阶段
image-20230821194527218
图1 渲染管线中的阶段

​ 因此,Shader 开发本质就是对渲染管线(流水线)中上一阶段传递过来的数据进行自定义处理后,再传递给下一阶段

​ 通过自定义处理,让图形图像最终能够以我们想要的方式显示到屏幕上。

3 需掌握的内容

  1. 数学

    在渲染管线的几何阶段,最主要要处理的核心工作之一就是坐标转换:

    • 向量
    • 线性代数(矩阵计算)
  2. 语法

    需要在顶点着色器和片元着色器两个小阶段自定义处理数据来达到各种不同的表现效果。

    而想要实现自定义逻辑处理,就需要学习着色器开发的特定语言:

    • ShaderLab(Unity)
    • CG 语言(着色器开发)
  3. 着色器开发

    渲染管线的本质是将数据最终呈现为屏幕图像。为了让最终的图像效果更加得好,更加符合需求,必须学习一些效果处理的计算规范:

    • 计算光照效果的颜色
    • 获取图片的纹理颜色
    • 处理透明效果、阴影效果

    等等。

相关文章:

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等平台优质作者、目前专注于大学生项目实战开发,讲解,毕业答疑辅导✌ 🍅文末获取源码联系🍅 👇&#x1f3…...

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失效

🔎嘿,这里是慰慰👩🏻‍🎓,会发各种类型的文章,智能专业,从事前端🐾 🎉如果有帮助的话,就点个赞叭,让我开心一下!&#x1f…...

微人事 部门管理 模块 (十五)

部门管理的树展示和搜索 数据展示页是个树,我们一次性把数据加载出来也可以通过点一次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里修改内容,提交&…...

Failed to load property source from location ‘classpath:/application.yml‘

项目场景: 今天到公司启动项目,突然发现项目起不起来了 问题描述 出现 Failed to load property source from location ‘classpath:/application.yml’ 错误 原因分析: 刚开始以为是 application.yml 中格式错误,但是发现同…...

Ajax复习

Ajax复习 一、简介 ​ AJAX 全称为 Asynchronous JavaScript And XML,就是异步的 JS 和 XML。 ​ 一句话总结:无刷新通信。 二、 特点 优点 无刷新通信 允许你根据用户事件来更新部分页面内容 缺点 没有浏览历史,不能回退 存在跨域问题…...

里式替换原则(LSP)

目录 简介: 作用: 过程: 总结: 简介: 里式替换原则(Liskov Substitution Principle,简称LSP)的提出者是美国计算机科学家Barbara Liskov。Barbara Liskov是一位计算机科学家,麻省理工学院教授,也是美国第一个计算机…...

mysql------做主从复制,读写分离

1.为什么要做主从复制(主从复制的作用) 做数据的热备,作为后备数据库,主数据库服务器故障后,可切换到从数据库继续工作,避免数据丢失。 架构的扩展。业务量越来越大,I/O访问频率过高,单机无法满…...

Anaconda虚拟环境跨系统迁移

旧设备运行代码 conda activate name conda env export > environment.yml注意:如果当前路径已经有了 environment.yml 文件,conda 会重写这个文件 新设备运行代码 # 将environment.yml 拷贝到新设备中conda env create -f environment.yml...

第四章 IRIS 编程简介 - Macros

文章目录 第四章 IRIS 编程简介 - MacrosMacrosInclude Files这些代码元素如何协同工作 第四章 IRIS 编程简介 - Macros Macros ObjectScript 还支持定义替换的宏。定义可以是一个值、整行代码或(使用 ##continue 指令)多行。使用宏来确保一致性。例如…...

大厂考核重点:mysql索引面试题

很多同学面对Mysql索引相关的面试题都是死记硬背的,这肯定是不行的,也不容易记住,所以大家还是要循循渐进,从理解开始,慢慢掌握,当然对于想要准备面试题的同学,这几个问题是需要记住并理解的&am…...

MySQL使用binlog日志做数据恢复

MySQL的binlog日志是MySQL日志中非常重要的一种日志,记录了数据库所有的DML操作。通过binlog日志我们可以进行数据库的读写分离、数据增量备份以及服务器宕机时的数据恢复。 定期备份固然可以在服务器发生宕机的时候快速的恢复数据,但传统的全量备份不可…...

USB Type-C端口集成式ESD静电保护方案 安全低成本

Type-C端口是根据USB3.x和USB4协议传输数据的,很容易受到电气过载(EOS)和静电放电(ESD)事件的影响。由于Type-C支持随意热插拔功能,其内部高集成度的芯片,更容易受到人体静电放电的伤害和损坏。…...

Shiro学习总结

第一章 入门概述 1.概念 shiro是一个Java安全框架,可以完成:认证、授权、加密、会话管理、与web集成、缓存… 2.优势 ● 易于使用,构建简单 ● 功能全面 ● 灵活,可以在任何应用程序环境中工作,并且不需要依赖它们…...

网站域名推广/西安seo排名优化推广价格

作者:螃蟹来源:itxxz.com/a/javashili/tuozhan/2014/0601/7.html设计模式作为工作学习中的枕边书,却时常处于勤说不用的尴尬境地,也不是我们时常忘记,只是一直没有记忆。Spring作为业界的经典框架,无论是在…...

开发网站需求设计/搜索引擎营销简称seo

IDE:Atom 插件:autocomplete-solidity 代码自动补齐 linter-solium,linter-solidity代码检查错误 language-ethereum支持solidity代码高亮 1. 合约文件结构 版本号 : import 合约 :contract pragma solidity ^0.4.0;…...

礼品做便宜的网站/网页制作代码

Docker 安装 Tomcat 推荐电商源码 方法一、docker pull tomcat 查找 Docker Hub 上的 Tomcat 镜像: 可以通过 Sort by 查看其他版本的 tomcat,默认是最新版本 tomcat:latest。 此外,我们还可以用 docker search tomcat 命令来查看可用版本&#xff1…...

wordpress betheme/seo推广哪家服务好

最近在用到svm做一些科研的工作,但是在用到svm的时候,发现在不同的svm参数下,精度差别不是一般的大。 熟悉svm的大家应该都知道,svm中参数很多,其中最主要得还是-c和-g参数,所以我就主要 调整这两个参数。 …...

哪个网站做员工增员/网络市场营销策划书

点开解题链接,发现有一个弹框,而且!!!!关不掉!! 查看一下源码 嗯~发现问题了,在注释的地方,发现了一串字符编码,这个形式,有点熟悉啊…...

网站开发是什么经营范围/推广竞价托管公司

日志记录当然不是一个迷人的话题,但它是一个至关重要的话题-至少对于DevOps和Ops团队而言。 虽然Web上有很多材料描述如何更改ASCII标语,但是如何有效地管理日志输出却没有太多内容。 默认情况下,Spring Boot将在控制台上输出日志&#xff0c…...