shader
文章平均质量分 70
果冻喜之郎
个人学习笔记记录
展开
-
The Book of Shaders —— 形状
原文地址The Book of Shaders: Shapeshttps://thebookofshaders.com/07/?lan=ch 乱做一个:应用造型函数和绘图形状原创 2022-07-07 15:34:35 · 516 阅读 · 0 评论 -
UnityShader入门精要——PBS基于物理的渲染
1 PBS理论与数学基础材质折射率:如果光在传播时介质的折射率发生了变化,光的传播方向就会发生变化。特别是,如果折射率是突变的,就会发生光的散射现象。菲涅尔等式:光在不同介质的边界会被分割成两个方向:反射方向和折射方向。而有多少百分比的光会被反射(另一部分就是被折射了)则是由菲涅耳等式(Fresnel equations)来描述的。微表面反射:微表面的法线方向变化角度小,表面反射的光线方向变化也比较小,物体的高光反射更加清晰;粗糙表面则相反,得到的高光反射效果更模糊。微表面折射: 这些光被折射原创 2022-06-24 11:23:56 · 580 阅读 · 1 评论 -
UnityShader入门精要——表面着色器
表面着色器的CG代码是直接而且也必须写在SubShader块中,Unity 会在背后为我们生成多个Pass。当然,可以在SubShader一开始处使用Tags来设置该表面着色器使用的标签。我们也可以使用LOD命令设置该表面着色器的LOD值。然后,我们使用CGPROGRAM和ENDCG定义了表面着色器的具体代码。1 编译指令编译指令最重要的作用是指明该表面着色器使用的表面函数和光照函数,并设置一些可选参数。表面着色器的CG块中的第一句代码往往就是它的编译指令。编译指令的一般格式如下:其中,#pra原创 2022-06-23 13:45:40 · 1439 阅读 · 0 评论 -
UnityShader入门精要——Unity中的渲染优化技术(四)
1 减少纹理大小纹理压缩http://t.csdn.cn/zK5632 利用分辨率缩放过高的屏幕分辨率也是造成性能下降的原因之一,尤其是对于很多低端手机,除了分辨率高其他硬件条件并不尽如人意,而这恰恰是游戏性能的两个瓶颈:过大的屏幕分辨率和糟糕的GPU。因此,我们可能需要对于特定机器进行分辨率的放缩。当然,这样可能会造成游戏效果的下降,但性能和画面之间永远是个需要权衡的话题。在Unity中设置屏幕分辨率可以直接调用Screen. SetResolution。1 shader的LO原创 2022-06-22 14:26:46 · 650 阅读 · 0 评论 -
UnityShader入门精要——Unity中的渲染优化技术(三)
1 优化几何体尽可能减少模型中三角面片的数目,一些对于模型没有影响、或是肉眼非常难察觉到区别的顶点都要尽可能去掉。移除不必要的硬边以及纹理衔接,避免边界平滑和纹理分离。2 模型的LOD技术原理:当一个物体离摄像机很远时,模型上的很多细节是无法被察觉到的。因此,LOD允许当对象逐渐远离摄像机时,减少模型上的面片数量,从而提高性能。在Unity中,我们可以使用LOD Group组件来为一个物体构建一个 LOD。我们需要为同一个对象准备多个包含不同细节程序的模型,然后把它们赋给LOD Group组件中的不同等级,原创 2022-06-20 17:05:10 · 726 阅读 · 0 评论 -
UnityShader入门精要——Unity中的渲染优化技术(二)
最常见的优化技术——批处理。实现原理为减少渲染每一帧所需的drawcall数目。使用同一个材质的物体可以一起处理。1 动态批处理如果场景中有一些模型共享了同一个材质并满足一些条件,Unity就可以自动把它们进行批处理,从而只需要花费一个draw call就可以渲染所有的模型。动态批处理的基本原理是,每一帧把可以进行批处理的模型网格进行合并,再把合并后模型数据传递给GPU,然后使用同一个材质对其渲染。除了实现方便,动态批处理的另一个好处是,经过批处理的物体仍然可以移动,这是由于在处理每帧时Unity都会重新合原创 2022-06-20 16:29:26 · 1510 阅读 · 0 评论 -
UnityShader入门精要——Unity中的渲染优化技术(一)
和PC平台相比,移动平台上的GPU架构有很大的不同。由于处理资源等条件的限制,移动设备上的GPU架构专注于尽可能使用更小的带宽和功能,也由此带来了许多和PC平台完全不同的现象。由于芯片架构造成的不同,一些游戏往往需要针对不同的芯片发布不同的版本,以便对每个芯片进行更有针对性的优化。尤其是在Android平台上,不同设备使用的硬件,如图形芯片、屏幕分辨率等,大相径庭,这对图形优化提出了更高的挑战。相比与Android平台,iOS平台的硬件条件则相对统一。TBDR架构基础http://t.csdn.cn/3O9原创 2022-06-18 20:27:49 · 1008 阅读 · 0 评论 -
UnityShader入门精要——水波效果
水波纹效果在模拟实时水面的过程中,我们往往也会使用噪声纹理。此时,噪声纹理通常会用作一个高度图,以不断修改水面的法线方向。为了模拟水不断流动的效果,我们会使用和时间相关的变量来对噪声纹理进行采样,当得到法线信息后,再进行正常的反射+折射计算,得到最后的水面波动效果。我们使用一张立方体纹理(Cubemap)作为环境纹理,模拟反射。为了模拟折射效果,我们使用GrabPass来获取当前屏幕的渲染纹理,并使用切线空间下的法线方向对像素的屏幕坐标进行偏移,再使用该坐标对渲染纹理进行屏幕采样,从而模拟近似的折射效果。水原创 2022-06-06 21:47:34 · 2033 阅读 · 0 评论 -
UnityShader入门精要——消融效果
原理:噪声纹理+透明度测试使用噪声纹理采样的结果和某个控制消融程度的阈值比较,如果小于阈值,就使用clip函数把它对应的像素裁剪掉,这些部分就对应了图中被“烧毁”的区域。而镂空区域边缘的烧焦效果则是将两种颜色混合,再用pow函数处理后,与原纹理颜色混合后的结果。Shader "Unity Shaders Book/Chapter 15/Dissolve" { Properties { _BurnAmount ("Burn Amount", Range(0.0, 1.0)) = 0.0原创 2022-05-05 10:41:01 · 1542 阅读 · 1 评论 -
UnityShader入门精要——素描效果渲染
Shader "Unity Shaders Book/Chapter 14/Hatching" { Properties { _Color ("Color Tint", Color) = (1, 1, 1, 1) _TileFactor ("Tile Factor", Float) = 1 //纹理平铺系数,数值越大,素描线条越密集 _Outline ("Outline", Range(0, 1)) = 0.1 _Hatch0 ("Hatch 0", 2D) = "white...原创 2022-04-21 16:06:21 · 1966 阅读 · 0 评论 -
UnityShader入门精要——卡通风格渲染
卡通风格是游戏中常见的一种渲染风格。使用这种风格的游戏画面通常有一些共有的特点,例如物体都被黑色的线条描边,以及分明的明暗变化等。轮廓线渲染●基于观察角度和表面法线的轮廓线渲染。这种方法使用视角方向和表面法线的点乘结果来得到轮廓线的信息。这种方法简单快速,可以在一个Pass中就得到渲染结果,但局限性很大,很多模型渲染出来的描边效果都不尽如人意。●过程式几何轮廓线渲染。这种方法的核心是使用两个Pass渲染。第一个 Pass渲染背面的面片,并使用某些技术让它的轮廓可见:第二个Pass再正常渲染正面的原创 2022-04-19 15:16:38 · 3126 阅读 · 0 评论 -
UnityShader入门精要——程序纹理
程序纹理(Procedural Texture)指的是那些由计算机生成的图像,我们通常使用一些特定的算法来创建个性化图案或非常真实的自然元素,例如木头、石子等。使用程序纹理的好处在于我们可以使用各种参数来控制纹理的外观,而这些属性不仅仅是那些颜色属性,甚至可以是完全不同类型的图案属性,这使得我们可以得到更加丰富的动画和视觉效果。效果:代码:using UnityEngine;using System.Collections;using System.Collections.Generi原创 2022-03-19 12:59:33 · 3150 阅读 · 0 评论 -
UnityShader入门精要——立方体纹理
在图形学中,立方体纹理(Cubemap)是环境映射(Environment Mapping)的一种实现方法。环境映射可以模拟物体周围的环境,而使用了环境映射的物体可以看起来像镀了层金属一样反射出周围的环境。和之前见到的纹理不同,立方体纹理一共包含了6张图像,这些图像对应了一个立方体的6个面,立方体纹理的名称也由此而来。立方体的每个面表示沿着世界空间下的轴向(上、下、左、右、前、后)观察所得的图像。对立方体纹理采样:理坐标不同,对立方体纹理采样我们需要提供一个三维的纹理坐标,这个三维纹理坐标表示了我们原创 2022-03-16 22:12:09 · 957 阅读 · 0 评论 -
UnityShader入门精要——透明物体阴影
透明度测试:Shader "Unity Shaders Book/Chapter 9/Alpha Test With Shadow" { Properties { _Color ("Color Tint", Color) = (1, 1, 1, 1) _MainTex ("Main Tex", 2D) = "white" {} _Cutoff ("Alpha Cutoff", Range(0, 1)) = 0.5 } SubShader { Tags {"Queue"="Alph原创 2022-03-15 12:35:38 · 5922 阅读 · 0 评论 -
UnityShader入门精要——Unity的渲染路径
大多数情况下,一个项目只使用一种渲染路径,因此我们可以为整个项目设置渲染时的渲染路径。我们可以通过在Unity的Edit→Project Settings - 十Player →Other Settings→Rendering Path中选择项目所需的渲染路径。默认情况下,该设置选择的是前向渲染路径,如图9.1所示。但有时,我们希望可以使用多个渲染路径,例如摄像机A渲染的物体使用前向渲染路径,而摄像机B渲染的物体使用延迟渲染路径。这时,我们可以在每个摄像机的渲染路径设置中设置该摄像机使用的渲染路径,以覆盖P原创 2022-03-13 14:29:41 · 1417 阅读 · 0 评论 -
UnityShader入门精要——unity的渲染顺序
在Unity中,我们通常使用两种方法来实现透明效果:第一种 是使用透明度测试(Alpha Test),这种方法其实无法得到真正的半透明效果;另一种是透明度混合(AIlpha Blending)。透明度测试:它采用一种“霸道极端”的机制,只要一个片元的透明度不满足条件(通常是小于某个阈值),那么它对应的片元就会被舍弃。被舍弃的片元将不会再进行任何处理,也不会对颜色缓冲产生任何影响;否则,就会按照普通的不透明物体的处理方式来处理它,即进行深度测试、深度写入等。也就是说,透明度测试是不需要关闭深度写入的,它原创 2022-03-05 10:24:32 · 815 阅读 · 0 评论 -
UnityShader入门精要——边缘检测(2)
之前利用sobel算子得到的边缘检测结果,物体的阴影、纹理等位置也会被描上黑边,这不是我们想要的结果,本节将在深度和法线纹理上进行边缘检测,这些图像吐会收到纹理和光照的影响,而仅仅保存了当前渲染物体的模型信息。Robert算子:Roberts算子的本质就是计算左上角和右下角的差值,乘以右上角和左下角的差值,作为评估边缘的依据。在下面的实现中,我们也会按这样的方式,取对角方向的深度或法线值,比较它们之间的差值,如果超过某个阈值(可由参数控制),就认为它们之间存在一条边。后处理代...原创 2022-02-27 17:35:44 · 2442 阅读 · 0 评论 -
UnityShader入门精要——全局雾效
基于屏幕后处理的全局雾效的关键是,根据深度纹理来重建每个像素在世界空间下的位置。我们在模拟运动模糊时已经实现了这个要求,即构建出当前像素的NDC坐标,再通过当前摄像机的视角*投影矩阵的逆矩阵来得到世界空间下的像素坐标,但是,这样的实现需要在片元着色器中进行矩阵乘法的操作,而这通常会影响游戏性能。在本节中,我们将会学习一个快速从深度纹理中重建世界坐标的方法。这种方法首先对图像空间下的视锥体射线(从摄像机出发,指向图像上的某点的射线)进行插值,这条射线存储了该像素在世界空间下到摄像机的方向信息。然后,我们...原创 2022-02-26 12:41:33 · 5897 阅读 · 5 评论 -
UnityShader入门精要——运动模糊(2)
适用于场景静止、摄像机快速运动的情况原创 2022-02-24 16:11:38 · 3801 阅读 · 2 评论 -
UnityShader入门精要——获取深度和法线纹理
原理深度纹理实际就是一张渲染纹理,只不过它里面存储的像素值不是颜色值,而是一个高精度的深度值。由于被存储在一张纹理中,深度纹理里的深度值范围是[0, 1],而且通常是非线性分布的。这些深度值来自于顶点变换后得到的归一化的设备坐标(NDC)。回顾一下,一个模型要想最终被绘制在屏幕上,需要把它的顶点从模型空间变换到齐次裁剪坐标系下,这是通过在顶点着色器中乘以MVP变换矩阵得到的。在变换的最后一步,我们需要使用一个投影矩阵来变换顶点,当我们使用的是透视投影类型的摄像机时,这个投影矩阵就是非线性的,而正交投原创 2022-02-22 15:15:07 · 2384 阅读 · 1 评论 -
UnityShader入门精要——运动模糊
运动模糊是真实世界中的摄像机的一种效果。如果在摄像机曝光时,拍摄场景发生了变化,就会产生模糊的画面。运动模糊的实现有多种方法。一种实现方法是利用一块累积缓存(accumulation buffer )来混合多张连续的图像。当物体快速移动产生多张图像后,我们取它们之间的平均值作为最后的运动模糊图像。然而,这种暴力的方法对性能的消耗很大,因为想要获取多张帧图像往往意味着我们需要在同一帧里渲染多次场景。另一种应用广泛的方法是创建和使用速度缓存(velocity buffer),这个缓存中存储了各个像素当前的运原创 2022-02-21 16:26:35 · 2654 阅读 · 0 评论 -
UnityShader入门精要——Bloom效果
Bloom特效是游戏中常见的一种屏幕效果。这种特效可以模拟真实摄像机的一一种图像效果,它让画面中较亮的区域“扩散”到周围的区域中,造成-种朦胧的效果。Bloom的实现原理非常简单:我们首先根据一个阈值提取出图像中的较亮区域,把它们存储在一张渲染纹理中,再利用高斯模糊对这张渲染纹理进行模糊处理,模拟光线扩散的效果,最后再将其和原图像进行混合,得到最终的效果。(基于高斯模糊)后处理脚本:using UnityEngine;using System.Collections;public ..原创 2022-02-20 19:58:27 · 2427 阅读 · 0 评论 -
UnityShader入门精要——高斯模糊
均值模糊:它使用的卷积核中的各个元素值都相等,且相加等于1,即卷积后得到的像素值是其邻域内各个像素值的平均值。中值模糊:选择邻域内对所有像素排序后的中值替换掉原颜色。高斯模糊:使用的卷积核名为高斯核,是一个正方形大小的滤波核,其中每个元素的计算都是基于下面的高斯方程:其中,σ是标准方差(一般取值为1),x和y分别对应了当前位置到卷积核中心的整数距离。高斯方程很好地模拟了邻域每个像素对当前处理像素的影响程度一距离越近,影响越大。高斯核的维数越高,模糊程度越大。使用一个NxN的高..原创 2022-02-20 16:30:16 · 3848 阅读 · 1 评论 -
UnityShader入门精要——边缘检测
原理是利用边缘检测算子对图像进行卷积操作。在图像处理中,卷积操作指使用一个卷积核对一张图像中的每个像素进行一系列操作。常见的边缘检测算子:它们都包含了两个方向的卷积核,分别用于检测水平方向和竖直方向上的边缘信息。在进行边缘检测时,我们需要对每个像素分别进行一次卷积计算,得到两个方向上的梯度值Gx和Gy而整体的梯度可按下面的公式计算而得:由于上述计算包含了开根号操作,出于性能的考虑,我们有时会使用绝对值操作来代替开根号操作:当得到梯度G后,我们就可以据此来判断哪些像素对应了边...原创 2022-02-17 19:24:10 · 1752 阅读 · 1 评论 -
UnityShader入门精要——屏幕后处理效果(2)
调整屏幕的亮度、饱和度和对比度原创 2022-02-17 16:15:06 · 473 阅读 · 0 评论 -
UnityShader入门精要——屏幕后处理效果(1)
基本的屏幕后处理脚本系统OnRenderImage函数:得到渲染后的屏幕图像,即抓取屏幕,声明如下:MonoBehaviour.OnRenderImage(RenderTexture src,RenderTexture dest)当我们在脚本中声明此函数后,Unity 会把当前渲染得到的图像存储在第一一个参 数对应的源渲染纹理中,通过函数中的一- 系列操作后,再把目标渲染纹理,即第二个参数对应的渲染纹理显示到屏幕上。在OnRenderImage函数中,我们通常是利用Graphics.Blit原创 2022-02-17 15:39:24 · 898 阅读 · 0 评论 -
UnityShader入门精要——顶点动画
流动的河流Shader "Unity Shaders Book/Chapter 11/Water" { Properties { _MainTex ("Main Tex", 2D) = "white" {} //河流纹理 _Color ("Color Tint", Color) = (1, 1, 1, 1) //整体颜色 _Magnitude ("Distortion Magnitude", Float) = 1 //水流波动幅度 _Frequency ("Dist原创 2022-02-15 20:44:17 · 2004 阅读 · 0 评论 -
UnityShader入门精要——纹理动画(2)
滚动的背景Shader "Unity Shaders Book/Chapter 11/Scrolling Background" { Properties { _MainTex ("Base Layer (RGB)", 2D) = "white" {} //第一层(远)纹理背景 _DetailTex ("2nd Layer (RGB)", 2D) = "white" {} //第二层(近)纹理背景 _ScrollX ("Base layer Scroll Speed", Fl原创 2022-02-15 20:14:09 · 352 阅读 · 0 评论 -
UnityShader入门精要——纹理动画(1)
序列帧动画最常见的纹理动画之一就是序列帧动画。序列帧动画的原理非常简单,它像放电影一-样,依次播放一系列关键帧图像,当播放速度达到一定数值时,看起来就是一个连续的动画。它的优点在于灵活性很强,我们不需要进行任何物理计算就可以得到非常细腻的动画效果。而它的缺点也很明显,由于序列帧中每张关键帧图像都不一样,因此,要制作一张出色的序列帧纹理所需要的美术工程量也比较大。Shader "Unity Shaders Book/Chapter 11/Image Sequence Animation" { Pr原创 2022-02-15 19:56:29 · 954 阅读 · 0 评论 -
Unity Shader 入门精要——镜面效果、玻璃效果
在之前的学习中,一个摄像机的渲染结果会输出到颜色缓冲中,并显示到我们的屏幕上。现代的GPU允许我们把整个三维场景渲染到一个中间缓冲中,即渲染目标纹理(RenderTarget Texture, RTT), 而不是传统的帧缓冲或后备缓冲(back buffer)。 与之相关的是多重渲染目标(Multiple Render Target, MRT),这种技术指的是GPU允许我们把场景同时渲染到多个渲染目标纹理中,而不再需要为每个渲染目标纹理单独渲染完整的场景。延迟渲染就是使用多重渲染目标的一个应用。原创 2021-10-02 21:08:09 · 4286 阅读 · 0 评论 -
Unity Shader 入门精要——反射、折射
反射效果:代码:// Upgrade NOTE: replaced '_Object2World' with 'unity_ObjectToWorld'// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'Shader "Unity Shaders Book/Chapter 10/Reflection" { Properties { _Color ("Color Ti.原创 2021-10-02 20:03:24 · 2176 阅读 · 0 评论 -
Unity Shader入门精要——不透明物体阴影
效果:代码:Shader "Unity Shaders Book/Chapter 9/Shadow" { Properties { _Diffuse ("Diffuse", Color) = (1, 1, 1, 1) _Specular ("Specular", Color) = (1, 1, 1, 1) _Gloss ("Gloss", Range(8.0, 256)) = 20 } SubShader { Tags { "RenderType"="Opaque" }原创 2021-09-16 17:23:55 · 324 阅读 · 0 评论 -
Unity Shader入门精要——光照衰减
在前向渲染中我们提到Unity使用一张纹理作为查找表来在片元着色器中计算逐像素光照的衰减。这样的好处在于,计算衰减不依赖于数学公式的复杂性,我们只要使用一个参数值去纹理中采样即可。但使用纹理查找来计算衰减也有一些弊端。●需要预处理得到采样纹理,而且纹理的大小也会影响衰减的精度。●不直观,同时也不方便,因此- -旦把数据存储到查找表中,我们就无法使用其他数学公式来计算衰减。但由于这种方法可以在一-定程度 上提升性能,而且得到的效果在大部分情况下都是良好的,因此Unity默认就是使用这种纹理查找的方原创 2021-09-16 17:01:08 · 827 阅读 · 0 评论 -
Unity Shader 入门精要——前向渲染处理不同光照类型
效果图:代码:Shader "Unity Shaders Book/Chapter 9/Forward Rendering" { Properties { _Diffuse ("Diffuse", Color) = (1, 1, 1, 1) _Specular ("Specular", Color) = (1, 1, 1, 1) _Gloss ("Gloss", Range(8.0, 256)) = 20 } SubShader { Tags { "RenderType.原创 2021-09-16 16:51:56 · 323 阅读 · 0 评论 -
Unity Shader 入门精要——双面渲染透明效果
在现实生活中,如果一-个物体是透明的,意味着我们不仅可以透过它看到其他物体的样子,也可以看到它内部的结构。但在前面实现的透明效果中,无论是透明度测试还是透明度混合,我们都无法观察到正方体内部及其背面的形状,导致物体看起来就好像只有半个一样。这是因为,默认情况下渲染引擎剔除了物体背面(相对于摄像机的方向)的渲染图元,而只渲染了物体的正面。如果我们想要得到双面渲染的效果,可以使用Cull指令来控制需要剔除哪个面的渲染图元。命令 描述 Cull Off 关闭剔除功能,所有图元都会被渲染,由于.原创 2021-09-12 10:32:17 · 2598 阅读 · 2 评论 -
Unity Shader 入门精要 —— 透明度混合(开启深度写入),ShaderLab混合命令
上一节中由于关闭深度测试,最后渲染结果会造成模型内部存在半透明效果:解决方法:是使用两个Pass来渲染模型:第- 一个Pass开启深度写入,但不输出颜色,它的目的仅仅是为了把该模型的深度值写入深度缓冲中;第二个Pass进行正常的透明度混合,由于上一个Pass已经得到了逐像素的正确的深度信息,该Pass就可以按照像素级别的深度排序结果进行透明渲染。但这种方法的缺点在于,多使用一个Pass 会对性能造成一-定的影响。可以看出,使用这种方法,我们仍然可以实现模型与它后面的背景混合的效果,但模型内部之.原创 2021-09-11 18:14:17 · 1137 阅读 · 1 评论 -
Unity Shader 入门精要——透明度混合(关闭深度写入)
透明度混合:这种方法可以得到真正的半透明效果。它会使用当前片元的透明度作为混合因子,与已经存储在颜色缓冲中的颜色值进行混合,得到新的颜色。但是,透明度混合需要关闭深度写入,这使得我们要非常小心物体的渲染顺序。我们会把源颜色的混合因子SrcFactor设为SrcAlpha,而目标颜色的混合因子DstFactor设为OneMinusSrcAlpha.这意味着,经过混合后新的颜色是:DstColor(new)=SrcAlpha x SrcColor+(1 - SrcAlpha) x ...原创 2021-09-11 18:00:01 · 1049 阅读 · 0 评论 -
Unity Shader 入门精要——透明度测试
透明度测试:只要一个片元的透明度不满足条件(通常是小于某个阈值),那么它对应的片元就会被舍弃。被舍弃的片元将不会再进行任何处理,也不会对颜色缓冲产生任何影响;否则就会按照普通的不透明物体的处理方式来处理它。代码:Shader "Unity Shaders Book/Chapter 8/Alpha Test" { Properties { _Color ("Color Tint", Color) = (1, 1, 1, 1) _MainTex ("Main Tex", 2D) = "w原创 2021-09-11 17:19:30 · 376 阅读 · 0 评论 -
Unity Shader 入门精要——遮罩纹理
效果:代码:Shader "Unity Shaders Book/Chapter 7/Mask Texture" { Properties { _Color ("Color Tint", Color) = (1, 1, 1, 1) _MainTex ("Main Tex", 2D) = "white" {} //主纹理 _BumpMap ("Normal Map", 2D) = "bump" {} //法线纹理 _BumpScale("Bump Scale", F原创 2021-09-10 10:35:32 · 337 阅读 · 0 评论 -
Unity Shader 入门精要——渐变纹理
效果图:代码:Shader "CustomShader/Texture/RampShader"{ Properties { _RampTex ("Texture", 2D) = "white" {} _Color ("Color Tint", Color) = (1, 1, 1, 1) _Specular ("Specular", Color) = (1, 1, 1, 1) _Gloss ("Gloss", Range(8.0, 256)) = 20 } SubSh.原创 2021-09-09 22:12:19 · 736 阅读 · 1 评论