2023-08-22 Unity Shader 开发入门2 —— Shader 开发介绍

这篇具有很好参考价值的文章主要介绍了2023-08-22 Unity Shader 开发入门2 —— Shader 开发介绍。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、必备概念

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 中绿色部分)的自定义开发,从而决定图形图像最终呈现到屏幕上的表现效果。

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

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

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

3 需掌握的内容

  1. 数学

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

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

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

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

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

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

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

    等等。文章来源地址https://www.toymoban.com/news/detail-666812.html

到了这里,关于2023-08-22 Unity Shader 开发入门2 —— Shader 开发介绍的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Unity Shader入门精要学习——透明效果

    要么完全透明,要么完全不透明。 实现简单,实质上是一种剔除机制,通过将不满足条件(通常使用小于某个阈值来判定,一般使用clip方法)的片元舍弃的方法来达到完全透明效果。这些被舍弃的片元不会再进行任何的处理,也不会对颜色缓冲产生任何影响,其余满足条件

    2024年02月17日
    浏览(47)
  • UnityShader入门学习(三)——Unity的Shader

    Tags Tags可以写在SubShader的一开始(所有的Pass用),也可以写在Pass块的内部(该Pass用) 渲染设置 同Tags一样也可以写在Pass中或者写在Pass外面(SubShader一开始) Pass介绍 Pass里面可以定义Pass名称 Pass里面的Tags还可以有额外的设置 还有CG语言所写的代码,主要是顶点片元着色器,

    2024年02月16日
    浏览(41)
  • Unity中的渲染优化技术 -- Shader入门精要学习(15)

    本章中,我们将阐述一些 Unity 中常见的优化技术。这些优化技术都是和渲染相关的,例如,使用批处理、LOD 技术等。 游戏优化不仅是程序员的工作,更需要美工人员在游戏的美术上进行一定的权衡。例如,避免使用全屏的屏幕特效,避免使用计算复杂的 Shader,减少透明混合

    2024年01月18日
    浏览(39)
  • 【UnityShader入门精要学习笔记】第三章(2)Unity Shader的形式,章节答疑

    本系列为作者学习UnityShader入门精要而作的笔记,内容将包括: 书本中句子照抄 + 个人批注 项目源码 一堆新手会犯的错误 潜在的太监断更,有始无终 总之适用于同样开始学习Shader的同学们进行有取舍的参考。 (该系列笔记中大多数都会复习前文的知识,特别是前文知识非

    2024年02月02日
    浏览(50)
  • Unity Shader 入门笔记(二)

    前言 前一篇 Unity Shader 入门笔记 (一) 中,我们学习和了解了Shader程序是什么以及Unity Shader代码的主要结构和相关含义,本篇文章中我们将进一步学习和了解Shader程序如何编写。 1. 写一个简单的Shader程序 1.1. 代码运行效果 1.2. 代码解释 我们在上面的代码中使用了 POSITION ,

    2024年01月22日
    浏览(36)
  • Unity Shader 入门笔记(四)

    目录 前言 一、光照模型 1. 简介 2. 发展历程 3. 局部光照模型和全局光照模型 3.1. 局部光照模型 3.2. 全局光照模型 二、Unity Shader实现标准光照模型 1. 逐顶点的光照模型 1.1. 实现效果如下: 1.2. 实现代码参考: 2. 逐像素的光照 2.1. 实现效果: 2.2. 实现代码参考: 三、参考链接

    2024年02月19日
    浏览(39)
  • Unity Shader 入门笔记 (一)

    前言 这个笔记系列并不会过多涉及图形学数学基础和渲染流水线的相关知识,但要求你具备相关知识,因此强烈建议你在学习和查阅此笔记前了解基础的图形学基础知识和渲染流水线相关知识。这里强烈推荐 闫令琪 老师开设的 Games101课程 :Lecture 01 Overview of Computer Graphics_哔

    2024年01月24日
    浏览(35)
  • Unity Shader入门精要 第六章——Unity中的基础光照

    目录 一、标准光照模型(Phong光照模型) 1、环境光  2、自发光 3、漫反射 4、高光反射 (1)Phong模型 (2)Blinn模型 5、光照模型实现方法——逐顶点和逐像素 二、Unity Shader 漫反射光照模型的实现 1、实践:逐顶点 2、实践:逐像素 3、半兰伯特模型 4、漫反射光照模型效果展

    2024年02月04日
    浏览(48)
  • Unity_Shader入门详解

    在Unity中创建Shader,有Stander Shader、Unlit Shader、Image Effect Shader、Compute Shader、Ray Tracing Shader Stander Shader :Unity内置的标准着色器,支持高光、透明度、法线贴图等特性,比如金属,塑料,木材,皮肤,也支持光照、阴影、反射、折射、透明雾化等... Unlit Shader :不受光照影响的着

    2024年02月10日
    浏览(38)
  • 《Unity Shader 入门精要》笔记07

    Unity中通常使用两种方法来实现透明效果:第一种是试用 透明度测试(Alpha Test) ,这种方法其实无法得到真正的半透明效果;另一种是 透明度混合(Alpha Blending) 。 由于深度缓冲的存在,可以让不透明物体不考虑他们渲染顺序也能得到正确的排序效果。但是实现透明效果需

    2024年02月07日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包