【UnityShader入门精要】【总结记录】【第二章-2】

在这里插入图片描述

☀️博客主页:CSDN博客主页
💨本文由 萌萌的小木屋 原创,首发于 CSDN💢
🔥学习专栏推荐:面试汇总
❗️游戏框架专栏推荐:游戏实用框架专栏
⛅️点赞 👍 收藏 ⭐留言 📝,如有错误请指正
📆 未来很长,值得我们全力奔赴更美好的生活✨
------------------❤️分割线❤️-------------------------

在这里插入图片描述Unity 小科普

老规矩,先介绍一下Unity的科普小知识:​​​

Unity 是行业领先的实时3D开发平台。
包括游戏开发,电影,AR/VR,虚拟现实在内的所有创作者,可以将梦想照进现实。
Unity提供了一套完整完善的软件解决方案,可用于创作,运营和模拟任何2D和3D的内容,进本全平台支持。
实际上Unity就是一个游戏引擎,大名鼎鼎的原神就是用它制作的。


顶点着色器

  • 输入进来的每个顶点都会调用一次顶点着色器,不可以创建或者销毁任何顶点,而且无法获得顶点与顶点之间的关系
  • 完成坐标变换,逐顶点光照,输出后续阶段所需要的数据

最基础的任务

  • 把顶点坐标从模型空间转换到齐次裁剪空间

裁剪

一个图元和摄像机视野的关系由3种

  • 完全在视野内,部分在视野内,完全在视野外

屏幕映射

  • 屏幕映射不会对输入的z坐标做任何操作
  • 屏幕坐标系和z坐标一起构成一个坐标系,叫做窗口坐标系,一起传递到光栅化阶段
  • OpenGL把屏幕左下角当成最小窗口坐标值,DirectX则是左上角最小值

三角形设置

  • 上个阶段得到三角形每条边的两个端点,需要得到三角网格对像素的覆盖情况,必须计算每条边上的像素坐标,该过程叫做三角形设置

三角形遍历

  • 检查每个像素是否被三角网格覆盖,如果有,就生成一个片元,也叫扫描变换
  • 这一步输出是一个片元序列
  • 一个片元不是真正意义上得像素,包含了很多状态得集合,包括但不限于屏幕坐标,深度信息,伐先,纹理坐标

片元着色器

  • 可编程着色器阶段
  • 前面得光栅化阶段实际上并不会影响屏幕上每个像素得颜色值,而是会产生一系列得数据信息,用来表述一个三角网格是怎样覆盖每个像素得,每个片元就负责存储这样得一系列数据。
  • 输入是上个阶段对顶点信息插值得到得结果
  • 输出是一个或者多个颜色值
  • 可以完成纹理采样
  • 局限在于,仅可影响单个片元,当执行片元着色器时,它不可以将自己得任何结果直接发送给邻居,但是片元着色器可以访问到导数信息

逐片元操作

  • DirectX中这一阶段被称为输出合并阶段
  • 决定每个片元得可见性,涉及很多测试工作,如深度测试,模板测试
  • 如果一个一个片元通过了所有的测试,就需要把这个片元得颜色值和已经存储在颜色缓冲区中得颜色进行合并,或者混合
  • 该阶段高度可配置性在这里插入图片描述

模板测试

  • GPU首先读取(使用读取掩码)模板缓冲区中改片元位置得模板值,然后将该值和读取得模板值进行比较,比较函数可以由开发者指定,不论片元有没有通过测试,我们都可以根据模板测试和下面得深度测试结果来修改该模板缓冲区

深度测试

  • 通过模板测试之后进行深度测试
  • 可高度配置
  • 比较该片元深度值和深度缓冲区中得深度值,该函数也是由开发者设置得
    和模板测试不同得是,如果该片元没有通过测试,就没有权力修改缓冲区中的值,如果通过了,开发者可以指定是否要用这个片元的深度值覆盖掉原来的
  • 对于不透明物体,开发者可以关闭混合操作,这样片元着色器计算得到的颜色值就会直接覆盖颜色缓冲区中的像素值,但对于半透明物体,我们就需要使用混合操作来让这个物体看起来是透明的

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Unity Shader是一种用于渲染图形的程序,它可以控制对象的表面颜色、纹理、透明度、反射等属性,从而实现特殊的视觉效果。对于游戏开发者来说,掌握Shader编写技巧是非常重要的。 以下是关于Unity Shader入门精要: 1. ShaderLab语言 ShaderLab是Unity中用于编写Shader的语言,它是一种基于标记的语言,类似于HTML。ShaderLab可以用于定义Shader的属性、子着色器、渲染状态等信息。 2. CG语言 CG语言是Unity中用于编写Shader的主要语言,它是一种类似于C语言的语言,可以进行数学运算、向量计算、流程控制等操作。CG语言可以在ShaderLab中嵌入,用于实现Shader的具体逻辑。 3. Unity的渲染管线 Unity的渲染管线包括顶点着色器、片元着色器、几何着色器等组件,每个组件都有不同的作用。顶点着色器用于对对象的顶点进行变换,片元着色器用于计算每个像素的颜色,几何着色器用于处理几何图形的变形和细节等。 4. 模板和纹理 在Shader中,我们可以使用纹理来给对象添加图案或者贴图,也可以使用模板来控制对象的透明度、反射等属性。纹理可以通过内置函数tex2D()来获取,模板可以通过内置函数clip()来实现裁剪。 5. Shader的实现 Shader的实现需要注意以下几点: - 在ShaderLab中定义Shader的属性、子着色器、渲染状态等信息。 - 在CG语言中实现Shader的具体逻辑,包括顶点着色器、片元着色器等内容。 - 使用纹理和模板来实现特定的视觉效果。 - 在对象上应用Shader,通过调整Shader的属性来达到不同的效果。 以上是关于Unity Shader入门精要,希望对你有所帮助。如果你想更深入地了解Shader的编写技巧,可以参考官方文档或者相关教程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我是小狼君

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值