Unity Shader 入门笔记 (一)

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

Unity Shader 入门笔记 (一),图形学,unity,笔记,游戏引擎

前言

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

该笔记系列大多数资料和参考来自于冯乐乐著作的《Unity Shader入门精要》,书中非常详细的解释了Unity Shader的相关知识,也强烈建议支持正版入手学习,因为Unity版本原因可能书中有些代码并不能成功运行,也可以结合本系列找到解决方案。

除此之外,Unity的官方文档也是不错的学习资料,能和上述推荐学习资料相互补充。着色器 - Unity 手册

这个笔记系列更多的是记录学习Unity Shader的实践过程和核心知识,如果你也和我一样正在学习和了解Unity Shader,那么非常欢迎您和我一起讨论学习,共同进步。

Shader简介

Shader 程序, 通常称为着色器,是运行在GPU上的程序。Shader所在的阶段就是渲染流水线的一部分,更具体来说,Shader就是:

  • GPU流水线上可高度编程的阶段;
  • 有一些特定的着色器,如顶点着色器、片元着色器;
  • 依靠着色器我们可以控制流水线中的渲染细节,如用顶点着色器进行顶点变换以及传递数据,用片元着色器进行逐像素渲染。

出色的游戏画面依赖于Shader在内的所有渲染流水阶段的共同参与,Unity为我们提供一个既可以方便编写着色器,又可以设置渲染状态的地方:Unity Shader。

Shader 类型

Unity 中,着色器分为三大类。每个类别的用途不同,使用方式也不同。

Unity Shader 入门笔记 (一),图形学,unity,笔记,游戏引擎

Shader 程序(对象)

材质和Shader

Unity Shader 定义了渲染所需的各种代码(如顶点着色器和片元着色器)、属性和指令,材质允许我们调节这些属性,并将其最终赋值给相应模型。Unity的材质需要结合一个GameObject的Mesh组件或者Particle System组件工作。它决定了我们的游戏对象看起来是什么样的。

如下图所示,我们创建了一个使用卡通渲染着色器的材质,并赋给了Sphere对象。

Unity Shader 入门笔记 (一),图形学,unity,笔记,游戏引擎

最终得到了如下结果:

Unity Shader 入门笔记 (一),图形学,unity,笔记,游戏引擎

创建 Shader

在Unity中我们可以创建以下5种Unity Shader模板,在本学习笔记系列中大多数情况下会使用Unlit Shader:

Unity Shader 入门笔记 (一),图形学,unity,笔记,游戏引擎

创建后的Shader文件,可以在Unity的导入设置面板查看和设置相关基础信息,也可以通过Complied Code 编译不同图像编程接口如(OpenGL,D3D9等)最终编译成的Shader代码,查看生成的底层汇编指令,方便分析和优化:

Unity Shader 入门笔记 (一),图形学,unity,笔记,游戏引擎

Shader 结构

Unity中的Shader基于Unity 提供的ShaderLab编写,ShaderLab是Unity提供编写Unity Shader的说明性语言。

下面通过一段伪代码展示Unity Shader的基本结构:

Shader "ShaderName"{ //出现在材质面板下拉列表的名称,通过“/”控制显示位置
	Properties{
		//属性是材质和Shader的桥梁
        Name("Display Name", PropertyType) = DefaultValue
        Name("Display Name", PropertyType) = DefaultValue
	}

	SubShader{  //显卡A使用的子着色器
        Tags { "ExampleSubShaderTagKey" = "ExampleSubShaderTagValue" }
        // 代码块为子着色器指定 LOD(细节级别)值的信息
        LOD 100

        //渲染通道:一个子着色器内可以包含多个渲染通道
        Pass {
        	//[Name] 通过设置名称可以使用UsePass直接使用其他Shader的Pass
            Name "MyPassName"
        	//[标签]告诉引擎如何渲染物体
            Tags { "LightModel" = "ForwardBase"}
        	// 此处是 ShaderLab 命令。
            //  此处是 HLSL 代码。
        }
        
	}

	//一个着色器内可以定义多个子着色器
	SubShader{
        //显卡B使用的子着色器
	}

    //如果上面的SubShader在这块显卡上都不能运行,就使用这个最低级的Shader
    Fallback "Vertexlit"
    //Or
	// Fallback Off
}

以上就是编写UnityShader所需的基本结构了,关于Properties、SubShader、Pass更多相关信息具体可以参考官方文档学习和了解,里面有更为详细的解释这里就不重复赘述了。

总结

本篇笔记中,主要阐述了Unity Shader的相关基础知识和Shader代码的基础结构,以及Shader和材质的基本关系,接下来我们还将了解如何在pass中创建和使用顶点着色器和片元着色器,并真正编写一段可以成功运行的着色器程序。最后,非常感谢您能看到这里,如果该文章对你有所帮助和启发,也欢迎您能点赞支持,如果有任何疑问和优化建议也非常欢迎各位大佬能够在评论区友好交流,一起学习进步。文章来源地址https://www.toymoban.com/news/detail-821478.html

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

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

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

相关文章

  • 十八、Unity游戏引擎入门

    1、下载     首先需要下载Unity Hub,下载网址:https://unity.com/cn。     然后在其中下载Unity编辑器并安装,可选择最新版本。     接着需要选择适合的开发环境,例如Android Studio或Xcode,以便进行手机游戏开发。在安装完Unity后,需要根据项目需求下载对应的模块和插件,例

    2024年02月16日
    浏览(73)
  • 【UnityShader入门精要学习笔记】第三章(1)Unity Shader介绍

    本系列为作者学习UnityShader入门精要而作的笔记,内容将包括: 书本中句子照抄 + 个人批注 项目源码 一堆新手会犯的错误 潜在的太监断更,有始无终 总之适用于同样开始学习Shader的同学们进行有取舍的参考。 从本章节开始我们要学习Shader相关的知识了,诸位看客可能有的

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

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

    2024年02月02日
    浏览(50)
  • Unity Physics2D 2d物理引擎游戏 笔记

    2d 材质 里面可以设置 摩擦力 和 弹力 Simulated:是否在当前的物理环境中模拟,取消勾选该框类似于Disable Rigidbody,但使用这个参数更加高效,因为Disable会销毁内部产生的GameObject,而取消勾选Simulated只是禁用。 Kinematic 动力学刚体 动力学刚体不受重力和力的影响,而受用户的

    2023年04月24日
    浏览(121)
  • (五·二)计算机图形学 之 Unity代码调用Shader并修改属性值

    直接划重点: 在C#代码中,要先引用材质球(Material),然后通过材质球提供的方法比如: 我这里使用material.SetColor(\\\"_Color\\\", Color.red); 结构是SetColor(shader属性名称,属性值设置); _Color是在shader中,Properties{}里定义好的属性,名称要一直,然后就是给他赋值。 Shader代码: C#代码

    2024年02月15日
    浏览(39)
  • 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 入门(零基础到敢上手敲Shader)

    目录  创建Shader 一.Standard Surface Shader 二.Unlit Shader 三.Image Effect Shader 四.Compute Shader 五.Ray Tracing Shader 着色器语言 Shader默认代码格式和一些常用API讲解 标准表面着色器,它是一种基于物理的着色系统,可以理解为 它是通过对物理现象的简单模拟,可以实现生活中各种物品的效

    2024年02月04日
    浏览(40)
  • 2023-08-22 Unity Shader 开发入门2 —— Shader 开发介绍

    ​ 计算机图形程序接口(Graphics API)是一套可编程的开放标准,不论 2D 还是 3D 游戏都需要这部分的底层 API 支持。 ​ 它本质上是软件,并不是硬件,是前人提前写好的调用系统硬件(GPU)绘制图形的代码。可以简单理解成是显卡厂商定义的一系列的底层的进行图形操作的加

    2024年02月11日
    浏览(36)
  • Unity Shader入门精要学习——透明效果

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

    2024年02月17日
    浏览(47)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包