![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
shader
Fatestay_DC
这个作者很懒,什么都没留下…
展开
-
实现棋盘图案
条纹我将采用模型表面的世界位置来生成棋盘纹理,这样我们以后就可以移动和旋转模型,并且生成的图案可以放在一起。 如果要图案化以随模型移动和旋转,则还可以使用对象空间坐标(来自appdata的坐标,不与任何东西相乘)。要在片段着色器中使用世界位置,我们将世界位置添加到顶点以对结构进行片段化,然后在顶点着色器中生成世界位置并将其写入结构中。//从顶点传递到片段着色器的数据同时被光栅化插值struct v2f{ float4 position : SV_POSITION; float3 worldPos原创 2020-11-05 18:23:09 · 464 阅读 · 0 评论 -
三向贴图
我之前做了一个有关平面贴图的教程。 该技术的最大缺点是,它只能从一个方向工作,并且我们绘制的表面如果未对准要映射的方向时会断裂(在上一个示例中为向上)。 改进自动uv生成的一种方法是,我们从不同的方向进行三次映射,并在这三种颜色之间进行混合。本教程将基于平面贴图着色器(这是一个未着色的着色器)建立的,但是您可以将该技术用于许多着色器,包括表面着色器计算投影平面要生成三组不同的UV坐标,我们首先更改获取UV坐标的方式。 从顶点着色器返回返回世界位置,然后在片段着色器中生成UV坐标。//从顶点传递到片段原创 2020-11-05 15:56:04 · 444 阅读 · 0 评论 -
颜色插值
通常,要在屏幕上绘制的输出中会有不止一种颜色。 组合两种颜色的一种简单方法是根据其他参数在它们之间进行插值。本教程将基于简单的纹理着色器,但是您可以将该技术与包括表面着色器在内的任何着色器一起使用。基于颜色的插值我们实现着色器的第一个版本将基于值在两个纯色之间进行插值。 因此,我们现在不需要连接到uv坐标或纹理的变量,而是添加了第二个颜色变量和一个简单的值,该值将确定材质是否显示第一个或者第二个颜色。 我们将该混合属性定义为“范围”,以便在编辑器中获得一个不错的滑块。//编辑器显示属性Proper原创 2020-11-03 19:08:08 · 4597 阅读 · 0 评论 -
平面映射
有时你的模型上没有纹理坐标,想使多个对象的纹理对齐,或者有不同的原因想生成自己的UV坐标……在本教程中,我们将从最简单的方法生成您自己的UV坐标,平面映射。本教程将基于简单的纹理着色器,但是您可以将该技术与包括表面着色器在内的任何着色器一起使用。基本步骤首先,从输入结构中删除uv坐标,因为我们将生成自己的纹理坐标。//顶点着色器读取的网格数据struct appdata{ float4 vertex:POSITION;};由于仍可以像以前一样在顶点之间插值UV坐标,因此我们可以在顶点着色原创 2020-11-03 18:07:54 · 522 阅读 · 0 评论 -
sprite shader
Unity渲染精灵的方式与渲染3D模型的方式很相似。大部分工作都是由精灵渲染组件完成的,接下来讨论组件的功能以及如何更改着色器用来执行默认sprite render的一些工作创建场景为了处理精灵着色器,我将场景更改为更简单。 摄像机改为正交投影,用精灵渲染器替换了先前示例中使用的立方体,并将我使用的图片资源转换为精灵。修改着色器Sprite Renderer组件会根据我们的图像自动生成一个网格并设置其UV坐标,因此它的工作方式就像我们以前使用的3D模型一样。它将精灵渲染器的颜色放入生成的网格原创 2020-11-03 11:47:35 · 540 阅读 · 0 评论 -
基础的透明效果
除了仅在屏幕上绘制颜色外,我们还可以保留屏幕上以前的某些颜色,使对象看起来是透明的。 我将说明如何在不带照明的基本着色器中实现此效果。为了使透明对象正确呈现,我们告诉unity对象是透明的。 为此,我们将更改渲染类型以及队列。 通过更改队列,我们确保渲染的材质晚于不透明的材质。 如果不是这种情况,则位于透明对象后面的不透明对象必须在透明对象的上方绘制,并将其完全覆盖。接下来,我们定义“混合模式”,它定义现有颜色和新颜色如何相互融合。 混合模式由2个关键字定义,第一个定义与新颜色相乘的值,第二个定义与旧颜原创 2020-11-02 19:49:05 · 162 阅读 · 1 评论 -
表面着色器
除了几乎从头开始编写着色器之外,unity还允许我们定义一些参数,并让unity生成执行复杂光照计算的代码。 这些着色器称为“表面着色器”。之前的basic shader转换到表面着色器使用表面着色器时,我们不必做其他的事情,因为unity会为我们生成它们。为了转换为你表面着色器,可以完全删除顶点着色器。可以删除顶点和片段函数的编译指示定义。可以删除输入以及将片段片段化的顶点。 可以删除进行纹理缩放的MainTex_ST变量,也可以删除UnityCG包含文件的包含。 然后我们删除pass的起点和终点,U原创 2020-11-02 19:21:25 · 219 阅读 · 0 评论 -
最基本的着色器程序
从前面三节课了解的shader基础概念以及结构 可以写出下面的基本着色器代码Shader "UnityShader/Basic_Unlit"{ //编辑器显示属性 Properties { _Color("Tint",Color) = (0,0,0,1) _MainTex("Texture",2D)="white"{} } SubShader { //这个材质完全不透明 并且与其他不透明的几何体同时渲染 Tags{"RenderType" = "Opaque" "Queue"原创 2020-11-02 09:55:04 · 359 阅读 · 0 评论 -
变量
讨论一下着色器需要起作用的变量以及如何将它们添加到代码中。 变量包括我们为每种材质进行设置的变量,作为网格数据一部分的变量以及从顶点传递到片段的数据。模型数据在较低的程序级别上,它们是定义将要呈现的内容的数据流,但在更高层次上将其想象为网格更容易理解。对于大多数情况,此数据必须包括顶点位置和它们之间的三角形。通常通过此传递的其他数据是顶点法线,uv坐标和顶点颜色。然后,在渲染之前,顶点阶段会处理每个顶点数据。位置和方向都在局部空间中,因此无论对象如何缩放或移动,我们都可以使用相同的顶点数据而无需额外准备原创 2020-10-30 10:56:40 · 75 阅读 · 0 评论 -
HLSL
Hlsl是编写unity着色器的“丰富多彩”部分的语言。这些部分包含自定义逻辑,并最终决定在屏幕上的何处绘制内容。这是Microsoft与其Direct3D API配合使用以编写gpu程序的语言。严格来讲,大多数Unity着色器被标记为用CG编写,而CG是Graphs的缩写,但是CG与hlsl共享了大多数语法和功能,并于2012年弃用。从理论上讲,Unity还支持编写为OpenGL设计的语言glsl shader,但是由于有更多hlsl的示例。最终这些语言将转换为我们要导出到的平台所需要的任何语言,无论如何原创 2020-10-29 20:49:01 · 850 阅读 · 0 评论 -
UnityShader结构
大多数现代着色器具有可变管线,该管线至少由顶点着色器和片段着色器组成。也可以在其中添加几何和曲面细分阶段,但你暂时不用知道这些。顶点着色器(有时也称为顶点阶段或函数)获取定义模型的数据,并将其转换为屏幕空间,以便可以对其进行渲染(使用矩阵乘法)。我们还可以使用自定义顶点着色器为顶点的位置设置动画,而无需更改网格数据并将更多数据传递给片段着色器。在定义了屏幕上顶点的位置之后,光栅化器将顶点之间的三角形变为像素。除了确定为对象渲染哪个像素外,光栅化器还对顶点着色器的输出中的所有数据进行插值,因此顶点之间的像素也原创 2020-10-29 19:44:42 · 135 阅读 · 0 评论 -
表面着色器附加顶点着色器片段 实现模型顶点动画
Shader "Custom/Animate" { Properties { _MainTex("Base (RGB)",2D) = "white"{} _tintAmount("Tint Amount",Range(0,1))=0.5 _ColorA("Color A",color)=(1,1,1,1) _ColorB("Co原创 2016-10-12 10:35:40 · 738 阅读 · 0 评论