
Shader入门 读书笔记
ChgMaker
这个作者很懒,什么都没留下…
展开
-
shader入门精要读书笔记47 基于物理的渲染 理论和数学基础
111原创 2020-04-17 11:36:26 · 448 阅读 · 0 评论 -
shader入门精要读书笔记46 表面着色器
111原创 2020-04-15 16:23:19 · 232 阅读 · 0 评论 -
shader入门精要读书笔记45 Untiy中的 渲染优化技术(二)
一、减少需要处理片元数目这部分的优化策略是减少overdraw,overdraw就是一个像素被绘制多次。控制绘制顺序由于深度测试的存在,如果我们可以保证物体都是从前往后绘制,那么就可以很大程度上减少overdraw,这是因为后面绘制的物体没办法通过深度测试,因此就不会进行后面的渲染处理。渲染队列小于2500(Background、Geometry、AlphaTest)的对象都被认为是不透明...原创 2020-04-13 15:34:21 · 189 阅读 · 0 评论 -
shader入门精要读书笔记44 Untiy中的 渲染优化技术(一)
一、渲染优化技术几个方面CPU方面:使用批处理技术减少draw call数目GPU方面:(1)减少需要处理的顶点数目:—优化结合体—使用模型的LOD技术—使用遮挡剔除技术(2)减少需要处理的片元数目—控制绘制顺序—警惕透明物体—减少实时光照(3)减少计算复杂度—使用Shader的LOD技术—代码方面的优化节省内存带宽(1)减少纹理大小(2)利用分辨率缩放二、...原创 2020-04-12 18:04:54 · 143 阅读 · 0 评论 -
shader入门精要读书笔记43 使用噪声纹理的非均匀雾效
一、思路仍然需要屏幕后处理效果,和之前的雾效果实现基本一样(全局雾效计算),就是多算了一个噪声值混合雾效果的浓度 用来插值原始颜色和雾颜色。二、具体实现代码:摄像机脚本代码:using UnityEngine;using System.Collections;public class FogWithNoise : PostEffectsBase { public Shader ...原创 2020-04-10 12:13:00 · 253 阅读 · 0 评论 -
shader入门精要读书笔记42 水波效果
一、实现思想模拟水面的时候也是需要使用到噪声纹理的。我们使用噪声纹理作为一个高度图,用来不断修改水面的法线方向。为了模拟水不断流动的效果,我们使用和时间相关的变量来对噪声纹理进行采样,得到法线信息后,再进行正常的反射+折射计算,最后得到水面波动效果。...原创 2020-04-08 13:56:05 · 334 阅读 · 0 评论 -
shader入门精要读书笔记41 消融效果(使用噪声)
一、前言消融效果常见于角色死亡、地图烧毁等等。消融效果就是指在不同的区域开始,并且看似随机扩张,最后整个物体都消失不见。二、实现代码(具体见注释):Shader "Unity Shaders Book/Chapter 15/Dissolve" { Properties { _BurnAmount ("Burn Amount", Range(0.0, 1.0)) = 0.0 //控...原创 2020-04-05 01:11:55 · 217 阅读 · 0 评论 -
shader入门精要读书笔记40 素描风格的渲染
总结下头文件:HLSLSupport.cginc - (自动包含) 为跨平台的着色器编译宏和定义提供帮助。UnityShaderVariables.cginc - (自动包含)常用的全局变量。UnityCG.cginc - 常用的辅助函数AutoLight.cginc - 照明&阴影功能,如表面着色器在内部使用这个文件Light.cginc - 标准表面着色器照明模式,当你写su...原创 2020-04-03 14:59:25 · 272 阅读 · 1 评论 -
shader入门精要读书笔记39 卡通风格的渲染
11原创 2020-04-03 11:20:24 · 250 阅读 · 0 评论 -
shader入门精要读书笔记38 边缘检测(使用深度、法线纹理)
一、前言因为之前使用的边缘检测,通过屏幕后处理效果使用Sobel算子进行边缘检测的,这种很有可能会导致我们不需要的一些东西(比如阴影、纹理等等)所以我们尽可能使用在深度纹理和法线纹理上进行边缘检测,这些纹理检测不会受光照和纹理影响,仅仅保存了当前物体的模型信息,这样边缘检测就更加可靠。二、实现...原创 2020-03-31 22:42:36 · 304 阅读 · 0 评论 -
shader入门精要读书笔记37 全局雾效(重建世界坐标另一个方法)
一、前言Untiy内置的雾效可以产生基于距离的线性或指数雾效。而如果我们要在自己的Shader中实现雾效,我们可能会使用到 #pragma multi_compile_fog ,UNITY_FOG_COORDS,UNITY_TRANSFER_FOG,UNITY_APPLY_FOG等等 内置宏。基于屏幕后处理的全局雾效的实现:这种方法我们不需要更改场景内渲染物体的Shader代码,仅仅使用一...原创 2020-03-31 15:00:24 · 655 阅读 · 3 评论 -
shader入门精要读书笔记36 关于平台差异一些总结
P115页的渲染平台差异要注意,仔细考虑使用条件(抗锯齿、并且使用了渲染到纹理技术得到了纹理后续处理使用)。看结果是否颠倒情况满足考虑平台差异的使用。#if UNITY_UV_STARTS_AT_TOP //处理平台差异化,用来判断是否在DX平台,如果在dx平台开启了抗锯齿,y值会为负值, if (_MainTex_TexelSize.y < 0) o.uv_depth...原创 2020-03-30 13:28:02 · 243 阅读 · 0 评论 -
shader入门精要读书笔记35 使用深度纹理获取像素速度来控制运动模糊
一、运动模糊之前说的两种方式:运动模糊实现一种是累积缓存,来混和多张连续的图像,消耗性能。还有一种是采用速度缓存,这个缓存存储了各个像素当前的运动速度,然后使用该值决定模糊的方向和大小。速度缓存就是通过深度纹理逆运算得出NDC坐标再乘以逆矩阵从而还原出世界空间中的坐标,再使用上一帧的变换矩阵乘以坐标来得到上一帧的NDC坐标,然后根据两个NDC坐标计算像素速度,从而使用速度对主纹理进行相邻像...原创 2020-03-30 13:19:59 · 295 阅读 · 0 评论 -
shader入门精要读书笔记34 使用深度纹理和法线纹理
一、前言之前学习的实现的屏幕后处理效果都是在在屏幕图像上实现的各种操作,有时候我们也需要获取深度纹理和法线信息等等,例如在边缘检测时,我们检测的边缘信息受物体纹理和光照等外部信息影响,会得到很多我们不需要的边缘点,一种更好的方法是,我们得到深度和法线纹理在他们上进行边缘检测,这些图像不会受到纹理和光照的影响,而是仅仅保存了渲染物体的模型信息,这样的边缘检测更加可靠。...原创 2020-03-29 19:53:53 · 262 阅读 · 0 评论 -
shader入门精要读书笔记33 运动模糊
一、运动模糊运动模糊是一种真实世界的效果,摄像机曝光时场景发生变化,就会产生模糊的效果。这个效果可以使物体运动看起来更平滑,,在一些赛车等等的快速运动的游戏中,这个效果的添加很常见。运动模糊实现方法有很多种:一种是使用累积缓存,来混和多张连续的图像,我们取得他们的平均值作为最后的运动模糊图像。但这种会很消耗性能,取得多张图像意味着我们需要在同一帧里渲染很多次场景。另外一种是采用速度缓存,...原创 2020-03-25 23:07:10 · 399 阅读 · 0 评论 -
shader入门精要读书笔记32 Bloom效果
一、Bloom这是一种常见的屏幕效果,模拟真实摄像机的图像效果,使画面中较亮的区域扩散到周围的区域中,造成一种朦胧的效果。实现原理:先根据阙值提取图像中明亮区域,存储在一张纹理中,然后利用高斯模糊对这张纹理进行模糊处理,模拟光线扩散的效果,最后再与原图像进行混合,得到最终效果。二、代码摄像机脚本:using UnityEngine;using System.Collections;...原创 2020-03-25 00:14:03 · 209 阅读 · 0 评论 -
shader入门精要读书笔记31 高斯模糊
一、前言高斯模糊是卷积的另一个应用,模糊有很多实现方法:均值模糊、中值模糊等等,均值模糊就是卷积核中每个元素都相同,且相加为一,取的是卷积核面积大小的像素平均值。高斯模糊,使用的是高斯核,高斯核中每个元素都是用高斯方程计算出来的。(P253)因为高斯方程可以很好的模拟出每个像素对当前像素的影响程度,上面的这个变换,效果是一样的,但可以节省很多次的采样次数。我们使用两个Pass对横纵...原创 2020-03-24 15:15:39 · 282 阅读 · 0 评论 -
shader入门精要读书笔记30 边缘检测
一、边缘检测理论边缘检测是一种描边效果实现的方法,原理是通过检测算子对图像进行卷积。卷积核就是一个正方形的网格结构。在对某个像素进行卷积时,我们会把卷积核的中心放在该像素上,依次计算核中的每个元素值和每个像素的像素值的乘积,再把所有的相加,得到的结果就是该位置的新像素值。这样的过程可以实现很多效果,例如图像模糊、边缘检测等。常见的边缘检测算子(卷积核):以上别熬是的是两个方向的卷积核。...原创 2020-03-23 14:22:33 · 274 阅读 · 0 评论 -
shader入门精要读书笔记29 屏幕后处理 亮度、饱和度、对比度
一、使用屏幕后处理效果 进行更改 亮度、饱和度、对比度声明一个摄像机上的脚本BrightnessSaturationAndContrast,继承上一节的基类用来调用相关函数。思想大概就是:先创建一个函数,用来继承基类,那么我们就可以使用相关函数进行材质创建,调用函数。然后我们创建一个Shader赋值给上面脚本(脚本内使用Shader创建材质),用来进行特效处理。脚本代码:using U...原创 2020-03-22 23:00:35 · 238 阅读 · 0 评论 -
shader入门精要读书笔记28 屏幕后处理效果
一、前言屏幕后处理效果是游戏中实现屏幕特效的常见方法,使用渲染纹理来进行实现的。屏幕后处理就是在渲染完整个场景后,再对这个图像进行操作,实现特效,例如景深(Depth of Field),运动模糊(Motion Blur)等。二、建立一个屏幕后处理脚本函数:抓取屏幕图像:MonoBehaviour.OnRenderImage(RenderTexture src,RenderTextur...原创 2020-03-22 16:06:57 · 209 阅读 · 0 评论 -
shader入门精要读书笔记27 顶点动画的阴影效果
一、定点动画的一些注意事项上节说的取消批处理"DisableBatching"="True",是因为我们需要操作模型空间的信息,如果进行批处理,那么会合并模型以至于我们丢失模型的模型空间。所以之后如果要在顶点着色器中操作相关模型空间时,需要记得考虑是否需要关闭批处理。取消批处理会增加Draw Call,带来一定的性能下降,所以我们需要尽可能地避免使用模型空间下的一些绝对位置来进行计算。广告牌...原创 2020-03-20 15:37:01 · 307 阅读 · 0 评论 -
shader入门精要读书笔记26 顶点动画
一、流动河流Shader "Unity Shaders Book/Chapter 11/Water" { Properties { _MainTex ("Main Tex", 2D) = "white" {} //主纹理 _Color ("Color Tint", Color) = (1, 1, 1, 1) //整体颜色 _Magnitude ("Distortion Magn...原创 2020-03-20 01:34:06 · 117 阅读 · 0 评论 -
shader入门精要读书笔记25 纹理动画
一、前言Unity Shader中的一些内置时间变量二、纹理动画大概分为两种形式:序列帧动画、背景循环滚动动画。我们使用的图像需要勾选Alpha Is Transparency,因为是透明纹理。1.序列帧动画Shader "Unity Shaders Book/Chapter 11/Image Sequence Animation" { Properties { _Color ...原创 2020-03-18 01:01:21 · 228 阅读 · 0 评论 -
shader入门精要读书笔记24 高级纹理-程序纹理
一、前言程序纹理就是指由计算机生成的图像,我们可以通过各种参数来控制纹理的外观,这些属性不仅仅是颜色属性,还可以是完全不同类型的图案属性,可以使我们得到更丰富的动画和视觉效果。二、实现程序纹理简单思想:先创建一个材质,然后给它使用之前学过的单张纹理Shader,因为我们没有纹理,所以在应用材质的模型身上挂载脚本-程序纹理来进行创建赋值。using UnityEngine;using Sy...原创 2020-03-17 15:54:27 · 198 阅读 · 0 评论 -
shader入门精要读书笔记23 高级纹理-渲染纹理-镜子效果、玻璃效果
一、前言现代GPU允许我们把整个三维场景目标渲染到一个中间缓冲中,即渲染目标纹理(RTT)。多重渲染目标(MRT),这种技术指的是GPU允许我们把场景同时渲染到多个渲染目标纹理中,而不再需要为每个渲染目标纹理单独渲染完整的场景,延迟渲染就是其中的一个应用。Untiy,定义了渲染纹理(Render Texture),用来代替渲染目标纹理。Unity中使用渲染纹理有两种方式:1.一种方法是创...原创 2020-03-16 16:36:41 · 337 阅读 · 0 评论 -
shader入门精要读书笔记22 高级纹理-立方体纹理-环境映射反射折射
一、前言立方体纹理是环境映射的一种实现方法,立方体纹理共包含6张图像。采样是通过立方体中心出发向外部延伸,与6张纹理之一发生相交,采样结果就是由交点计算来的。立方体纹理好处:简单快速、鲜果比较好,缺点:当场景发生变化需要重新生成立方体纹理,而且不能进行自身反射,所以我们需要尽量使用凸面体。二、天空盒天空盒使用的就是立方体纹理映射技术。游戏中模拟背景的一种方法,它的Skybox材质,中使...原创 2020-03-15 15:28:59 · 589 阅读 · 0 评论 -
shader入门精要读书笔记21 阴影效果***
一、前言实时渲染中Unity使用的是Shadow Map技术,它会把摄像机位置与光源位置重合,那么场景中光源阴影区域就是摄像机看不见的地方。前向渲染路径中,场景中如果开启了平行光阴影效果,那么Unity会为光源计算它的阴影映射纹理,这个纹理就是一个深度图,用来记录从光源位置出发,能看到的场景中距离它最近的表面位置(深度信息)。Unity使用了一个一个额外的Pass来计算更新光源的阴影映射纹理...原创 2020-03-03 01:05:34 · 316 阅读 · 0 评论 -
shader入门精要读书笔记20 Unity中的光源类型与衰减计算
一、光源类型Unity中4中光源:平行光、点光源、聚光灯、面光源(只在烘焙时发生作用)。光源位置、方向、颜色、强度、衰减等等都与他们的属性息息相关,会影响到Shader。1.平行光他没有唯一的位置,它的几何属性只有方向。2.点光源表示由一个点发出的向所有方向延伸的光。照亮空间有限,存在位置等属性,存在衰减等等。3.聚光灯是由一块锥形区域定义的,从一个特定位置出发,向特定方向延伸的...原创 2020-03-01 15:30:50 · 390 阅读 · 0 评论 -
shader入门精要读书笔记19 Unity的渲染路径
一、前言渲染路径决定光照是如何应用到Untiy Shader中的,只有给Shader正确的选择和设置需要的渲染路径,Shader的光照计算才能被正确执行。UNTIY支持多种类型渲染路径:前向渲染路径、延迟渲染路径、顶点照明渲染路径。Unity5之后,顶点照明渲染路径北删除(但可以使用兼容),延迟渲染路径更新。大多数情况一个项目只使用一种渲染路径。整个项目渲染路径设置方法:Edit->...原创 2020-02-28 19:35:38 · 208 阅读 · 0 评论 -
shader入门精要读书笔记18 透明度测试、透明度混合 及 其他效果实现
一、透明度测试只要一个片元不满足条件(通常是小于某个阙值),那么它对应的片元就会被舍弃。函数:clip(),参数可以是1-4维的矢量,也可以是普通标量。作用:裁剪使用时的标量或者矢量条件。如果给定参数的任何一个分量是负数,就会舍弃当前像素的输出颜色。代码:Shader “Unity Shaders Book/Chapter 8/Alpha Test”{ Properties {...原创 2020-02-23 20:24:19 · 251 阅读 · 0 评论 -
shader入门精要读书笔记17 透明效果
一、前言实现透明效果,通常会采取在渲染模型时控制它的透明通道。一个物体被渲染到屏幕上时,一个片元除了颜色值和深度值外,还有一个透明度属性。透明度为1表示该像素完全不透明,透明度为0表示,像素完全不会显示。对于渲染顺序问题:对于不透明物体,不考虑渲染顺序也可以得到正确的排序效果,这是因为强大的深度缓冲的效果:根据深度缓冲中的值来判断该片元距离摄像机的距离,当渲染一个片元时,需要把它的深度值和...原创 2020-02-22 12:11:07 · 216 阅读 · 0 评论 -
shader入门精要读书笔记16 基础纹理-渐变纹理、遮罩纹理
一、渐变纹理也是由Value公司在制作<军团要塞2>提出,可以保证物体的轮廓线相比之前使用的传统漫反射光照更加明显,能够提供多种色调变化,常用于卡通渲染中。基本思想:在顶点着色器中将法线、顶点转换到世界空间,计算平铺、偏移后的纹理坐标,传递到片元着色器中;在片元着色器中,环境光如果没有使用单张纹理那么不必计算材质反射率,直接采用系统环境光。计算漫反射时采用半兰伯特模型,使用h...原创 2020-02-19 21:14:58 · 352 阅读 · 0 评论 -
shader入门精要读书笔记15 基础纹理-凹凸映射-世界空间中的计算
一、世界空间的计算基本思想:在顶点着色器中进行变换矩阵的计算。在片元着色器中进行法线纹理从切线空间到世界空间的转换。再进行计算光照。Shader "Untiy Shaders Book/Chapter 7/Normal Map In Tangent Space"{ Properties { _Color("Color Tint",Color)=(1,1,1,1) //整体模型...原创 2020-02-18 12:11:46 · 324 阅读 · 0 评论 -
shader入门精要读书笔记14 基础纹理-凹凸映射-切线空间中的计算
实现凹凸映射有两种主要的方法:1.一种是使用一张高度纹理来模拟表面位移,得到一个修改后的法线值,这种称作为高度映射。高度纹理使用一张高度图来实现凹凸映射,存储强度值,用于模拟表面局部的海拔高度,颜色越浅说明越向外边突起。看起来直观,缺点是运算复杂,需要消耗更多的性能。高度图通常会和法线映射一起使用,用于给出表面凹凸的额外信息。也就是说我们通常使用法线映射来修改光照。2.第二种使用一张法线...原创 2020-02-17 23:54:33 · 367 阅读 · 0 评论 -
shader入门精要读书笔记13 基础纹理-单张纹理
一、前言纹理映射:把图黏在模型表面,逐个纹素控制模型颜色。纹理展开技术:把纹理映射坐标(定义顶点在纹理中对应的2D坐标)存储在每个顶点上。UV坐标:Unity中的纹理坐标;DX和OpenGL差别(之前提到过):DX原点在左上角,OpenGL在左下角。UNTIY符合OpenGL的(左下角)。二、单张纹理1.实现:Shader "Untiy Shaders Book/Chapter 7/...原创 2020-02-15 17:44:38 · 279 阅读 · 0 评论 -
shader入门精要读书笔记12 各种简单光照模型实现
一、环境光和自发光控制环境光:Window->Lighting->Ambient Source/Ambient Color/Ambient Intensity在Shader中,可以通过UNITY_LIGHTMODEL_AMBIENT得到环境光信息。自发光:大多数物体没有自发光特性,Shader中很少计算。如果非要计算,只需在片元着色器输出最后的颜色之前,把材质的自发光添加到...原创 2020-02-13 16:03:06 · 308 阅读 · 0 评论 -
shader入门精要读书笔记11 基础光照模型
渲染包含了两大部分:1.决定一个像素的可见性2.决定这个像素上的光照计算一、光照模型背后的基本原理1.光源:在光学中,我们用 辐照度 来量化光(确定一个光源发出了多少光),光方向为L,光线间距为d垂直照射时,物体表面光线间距d,垂直时θ为0,也可以表示为d/cosθ。斜着照射时,物体表面光线间距为d/cosθ,θ为光线与物体法线夹角。物体表面光线越密集,辐照度越大,所以辐照度与d...原创 2020-02-09 14:44:52 · 424 阅读 · 0 评论 -
shader入门精要读书笔记10 其他相关内容(注意事项等)
一、Debug最讨厌康熙的第8个儿子。三种Untiy Shader的调试方法:1.使用假彩色图像假彩色图像是指用假彩色技术生成的一种图像(照片为真彩色图像),一张假彩色图像可以用来可视化一些数据。主要思想就是把需要调试的变量映射到[0,1]之间,输出到屏幕上,通过屏幕上的像素颜色判断值是否正确。可见112页详细介绍。2.使用 Visual Studiovs中提供了对Unity Sh...原创 2020-02-06 12:30:20 · 226 阅读 · 0 评论 -
shader入门精要读书笔记09 Unity shader基础概述
一、shader基本结构可以参考 笔记05基本结构介绍二、代码例子Shader “Unity Shaders Book/Chapter 5/Simple Shader”{ SubShader { Pass{ CGPROGRAM #pragma vertex vert #pragma fragment frag float4 vert(float4 v:...原创 2020-02-05 17:41:14 · 295 阅读 · 2 评论 -
shader入门精要读书笔记08 数学基础
一、法线变换法线也叫法矢量,不同于我们之前变换的顶点或者方向矢量,法线是需要进行特殊处理的一种方向矢量。模型中一个顶点会携带额外的信息。顶点法线就是其中一种信息。变换模型时除顶点外,顶点法线也需要变换。以便后续(片元着色器)处理。法线变换使用变换矩阵的逆转置矩阵来进行变换。如果变换矩阵是正交矩阵,那么我们可以直接使用变换矩阵进行法线变换。如果变换矩阵内只包含旋转变换,那么这就是正交矩...原创 2020-02-02 16:13:45 · 252 阅读 · 0 评论