更复杂的光照(二) Unity 的光源类型 Unity 一共支持 4 种光源类型:平行光(directional light)、点光源(point light)、聚光灯(spot light)和面光源(area light)。面光源仅在烘焙时才可发挥作用,因此不在本节讨论范围内。 光源类型有什么影响 Shader 中使用的光源属性最常用的有光源的位置、方向(更具体的说就是到某点的方向)、颜色、强度以及衰减(更具体的说 2022-02-18 Unity Shader #Light
更复杂的光照(一) Unity 的渲染路径 在 Unity 里,**渲染路径(Rendering Path)**决定光照是如何运用到 Unity Shader 中的。我们需要为每个 Pass 指定它使用的渲染路径,只有这样才能让 Unity 正确地为我们准备光源和处理后的光照信息等数据,也就是说,我们只有为 Shader 正确地选择和设置了需要的渲染路径,该 Shader 的光照计算才能被正确执行。 Unity 支持 2022-02-17 Unity Shader #Light
透明效果(二) 开启深度写入的半透明效果 在上一篇中,我们给出了一种由于关闭深度写入而造成排序错误的情况。一种解决办法是使用两个 Pass 来渲染模型:第一个 Pass 开启深度写入,但不输出颜色,它的目的仅仅是为了把该模型的深度值写入到深度缓冲中;第二个 Pass 进行正常的透明度混合,由于上一个 Pass 已经得到了逐像素的正确的深度信息,该 Pass 就可以按照像素级别的深度排序结果进行透明渲染。但这个方法 2022-01-27 Unity Shader #Alpha
透明效果(一) 透明效果 在实时渲染中要实现透明效果,通常会在渲染模型时控制它的透明通道(Alpha Channel)。当开启透明混合后,当一个物体被渲染到屏幕上时,每个片元除了颜色值和深度值之外,它还有另一个属性——透明度。当透明度为 1 时,表示该像素是完全不透明的,而当其为 0 时,则表示该像素完全不会显示。 在 Unity 中,我们通常使用两种方法来实现透明效果:第一种是使用透明度测试(Alpha Tes 2022-01-25 Unity Shader #Alpha
基础纹理(二) 渐变纹理 纹理其实可以用于存储任何表面属性。一种常见的用法就是使用渐变纹理来控制漫反射光照的结果。下面我们将学习如何使用一张渐变纹理来控制漫反射光照。 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666 2022-01-24 Unity Shader #Texture
基础纹理(一) 基础纹理 纹理最初的目的就是使用一张图片来控制模型的外观。使用纹理映射(texture mapping)技术,我们可以把一张图“黏”在模型表面,逐**纹素(texel)**地控制模型的颜色。 在美术人员建模的时候,通常会在建模软件中利用纹理展开技术把**纹理映射坐标(texture-mapping corrdinates)**存储在每个顶点上。纹理映射坐标定义了该顶点在纹理中对应的2D坐标。通常, 2022-01-22 Unity Shader #Texture
标准光照模型 标准光照模型 虽然光照模型有很多种类,但在早期游戏引擎中往往只使用一个光照模型,这个模型被称为标准光照模型。标准光照模型在BRDF理论被提出之前就已经被广泛使用了。标准光照模型只关心直接光照(direct light),也就是那些直接从光源发射出来照射到物体表面后,经过物体表面的一次反射直接进入摄像机的光线 它的基本方法是,把进入到摄像机内的光线分为4个部分,每个部分使用一种方法来计算它的贡献度。 2022-01-19 Unity Shader #Math #Light
Clip Space 裁剪空间 顶点从观察空间转换到裁剪空间(clip space,也被称为齐次裁剪空间)所用的矩阵叫做裁剪矩阵(clip matrix),也被称为投影矩阵(projection matrix)。 裁剪空间的目标是能够方便地对渲染图元进行裁剪:完全位于这块空间内部的图元将会被保留,完全位于这块空间外部的图元将会被剔除,而与这块空间边界相交的图元就会被裁剪。那么,这块空间是如何决定的呢?答案是由**视锥体 2022-01-17 Unity Shader #Math
Spatial Transform 坐标空间的变换 在渲染流水线中,我们往往需要把一个点或者方向矢量从一个坐标空间转换到另一个坐标空间,这个过程的是怎么实现的? 我们要想定义一个坐标空间,必须指明其原点位置和三个坐标轴的方向。而这些数值实际上是相对于另一个坐标空间的。也就是说坐标空间会形成一个层次结构——每个坐标空间都是另一个坐标空间的子空间,反过来说,每个空间都有一个父坐标空间。对坐标空间的变换实际上就是在父空间和子空间之间对点和 2021-12-26 Unity Shader #Math