Shader
文章平均质量分 86
TO_ZRG
这个作者很懒,什么都没留下…
展开
-
Shader 基础之 Unity Shader概念
默认声明的keyword 都是global的,但是可以在声明keyword type的时候,加上后缀_local 来表示是local的,加上之后表示不可override的,也就是同名的不能复写它。3. 一个shader包含在多个material里面,打进assetbundle中,会导致有多份shader,同时也打断了合批,可以使用。Note:所有的分支都会编译成程序,写进shader里面,这会增加文件的大小,但是相比较多个变体来说,它还是小的。,当该集合中的所有关键字被禁用时,创建一个着色器变体。原创 2023-07-10 13:46:40 · 848 阅读 · 0 评论 -
GPU Gems 2 三:几何实例化的原理 四:分段缓冲 五:多流管理 六:遮挡查询
3.1 实例化是什么?为什么要实例化?实例化就是生成一个个体,比如一棵树,一簇草丛,实例化的目的是为了节省性能,因为每一棵树我们不能调用一次绘制API,我们需要把尽可能多的东西,合批,去渲染,实例化就是我们把一个东西生成多份,比如很多树,一次绘制。3.2 定义几何体:游戏物体就像类和子类的关系,每一个实例基本体有共同的属性,比如顶点缓存,实例类型,骨骼等,而具体到每一棵树又都有不同的属性,比如树叶的颜色,树叶的数量。几何体就是子类。一个批次中要渲染很多个几何体。3.3 实现渲染实现包原创 2022-01-21 19:04:31 · 818 阅读 · 0 评论 -
GPU Gems 2 二:使用基于GPU剪切图的地形渲染
2.1 几何剪切图简介要渲染整个地形的细节非常困难,比如吃鸡,从高空中落下,如果在最高处就渲染一块完整的地形,很显然是非常浪费时间和性能的。几何剪切图:顾名思义就是把地形剪切掉了,但是并不是不渲染,而是模糊的渲染,比如从高空中落下,每下降1000米为一个阶段,地形就会刷新一遍,这里用2D的高程图来代表地形的渲染。从高到低,每一个阶段都有一个n*n的剪切图,来代表当前阶段的地形图,每个剪切图都是一个环状的,中间的不用渲染是因为上个阶段已经渲染过了。它的难点在于怎样在不同的阶段之间形成平.原创 2022-01-18 21:36:23 · 418 阅读 · 0 评论 -
GPU Gems 2 一:场景管理
1.1 场景管理把要绘制的元素分层,一层一层的绘制,每一层共享一些共有的属性,比如一排树,一块草丛1.1.1 种植栅格围绕摄像机,设定一个固定大小的栅格,这个值可以变化,然后每个栅格单元存储了要绘制的数据,比如顶点,材质等,随着摄像机的移动,动态的增加删除栅格单元,这个过程是动态的,所以数据要动态的解压,以保证在摄像机移动之前,数据就已经填充到了潜在的栅格单元当中。1.1.2 种植策略我们通过单元格中的数据,可以判断当前单元是否可以种植我们想要种植的元素,比如斜坡太抖的地方不能种原创 2022-01-18 17:15:19 · 460 阅读 · 0 评论 -
Real-Time Rendering 第八章 Light and Color
8.1 Light Quantities基于物理渲染的第一步,就是如何量化光光是以电磁波的 形式传播的,每一种电磁波都有不同的波长(wavelength)在自然界中,电磁波的波长范围很广,从不到百分之一纳米长度的伽玛波到数万公里长的极低频(ELF)无线电波。下面是人眼可以观察到的波长:400nm-700nm在辐射学中,基本的单位是辐射通量( radiant flux), Φ.它表示辐射能随时间的流动,单位是瓦特 W.辐照度:单位面积上的辐射通量,用E表示立体角(so..原创 2021-12-12 09:36:16 · 224 阅读 · 0 评论 -
Real-Time Rendering 第七章 shadow
如果使用体积光或区域光 ,阴影就会由 完全阴影(umbra)和半阴影(penumbra)组成半阴影如果仅仅是模糊阴影的边缘是不行的,得不到正确的半阴影真确的soft shadow ,离阴影投射物体越近,阴影就越sharp,soft阴影的大小和hard 阴影的大小并不一样,它随着光源大小的增加而减小,soft shadow 让物体看起来更真实一些,但是hard shadow 渲染的更快7.1 Planar Shadows7.1.1 Projection Shadows投射到平面..原创 2021-12-05 21:53:03 · 685 阅读 · 0 评论 -
Real-Time Rendering 第六章 texture
在计算机图形学中,纹理化就是使用一些图片,函数或者其它的一些数据,修改表面表现的一个过程6.1 The Texturing Pipeline纹理是通过修改shader 中算法中的值,来最终改变渲染结果的纹理中的像素叫texel,纹理和屏幕上的pixel 区别开来,并没有其它含义纹理管线的流程是:首先 获取模型上的某一点的位置,这个位置是在模型坐标空间下的,因为随着模型动,纹理也在动,然后经过 projector 方法,获得了纹理坐标(uv坐标,从0-1),这个过程又叫mapping,然后经原创 2021-11-28 11:44:17 · 4418 阅读 · 0 评论 -
Real-Time Rendering 第五章 光照模型
5.1 Shading Modelsshading model:决定了渲染管线的功能,也就是渲染的方式,根据不同的光照,视角,来渲染出不同的模型表面颜色比如:Gooch shading model :根据顶点法线方向和光源的相对位置,来决定模型的表面颜色,法线朝向光源,暖色调,背向光源,冷色调模型的表面颜色一般受视角方向和光照方向的影响这就是一个简单的光照模型,其中表示限制值为0-1,这其中出现了两次差值,一次是Ccool和Cwarm的差值,然后是 hightlight 和 d.翻译 2021-11-14 23:10:48 · 440 阅读 · 0 评论 -
Real-Time Rendering 第三章 GPU架构以及着色器
从历史上来讲,图形加速开始于扫描三角形覆盖的像素,并显示出像素差值的颜色,也就是GPU真正用力的地方,包括访问图片的数据,并把材质的数据应用到物体表面,现在添加的一些用于差值和z-test的硬件提供了内置的功能,来检测该像素的可见性,因为这些功能经常使用,所以交给指定的硬件,专门来处理,依次来提高性能.渲染管线中的很多功能都对应了特定的图形处理硬件 ,所以要比CPU的速度更快第一代消费级的GPU芯片,包括顶点处理是英伟达在1999年发布的的GeForce256(NVIDIA’s GeForce256)翻译 2021-11-07 19:41:56 · 1261 阅读 · 0 评论 -
Real-Time Rendering 第二章 渲染管线
第一章遗留的东西:1.2.1 数学方法下表描述了常见的一些数学方法,注意表中的规则也有一些例外,主要是在其它文献中经常使用的符号,比如L表示亮度 E表示辐射度σs表示散射系数R表示角度和标量,向量用加粗的括号表示比如列向量是我们经常使用的,我们经常写成 Type Notation Examples angle lowercase Greek αi,φ,ρ,η...翻译 2021-11-01 00:08:55 · 224 阅读 · 0 评论 -
Real Time Rendering 第一章 简介
简介:Real time rendering是指在计算机上快速生成图像,它是计算机图形学中交互性最强的领域。当一副图像出现在屏幕上时,观众会做出一定的反应,而这个反应会影响屏幕上接下来出现的内容。当图像以足够快的速度渲染,观众就会产生连续的反应,从而形成一种动态的感受。图像显示的速度是以每秒帧数(FPS)或赫兹(Hz)来衡量的。在每秒一帧的情况下,几乎没有互动性;用户痛苦地等待每一个新图像的到来。在6帧/秒左右时,交互性开始增长。电子游戏的FPS一般是是30,60,72或更高,在这样的速度下,用..翻译 2021-10-24 20:01:44 · 745 阅读 · 1 评论 -
unity shader 基础之十一 动画、屏幕后处理、深度纹理
11.1 时间变量_Time,_SinTime,_CosTime,_unity_DeltaTime11.2 纹理动画一张贴图就是一张序列帧贴图,通过对uv偏移,获取不同uv下不同的图片floor(x),获取小于x的最大整数frac(x),获取x的小数部分11.3 顶点动画Disable Batching 标签,关闭合批,因为顶点动画是对单个顶点进行操作,合批会让多个单物体合并成一个物体,从而丢失了各自的模型空间11.4 广告牌动画广告牌的目的构建一个变化的原创 2021-10-17 20:52:37 · 1656 阅读 · 1 评论 -
unity shader 基础 之 九十 渲染路径、阴影、高级纹理
9.1 渲染路径在project setting 里面可以设置默认的渲染路径,但是在每个摄像机上面也可以设置,从而覆盖默认的渲染路径常见的LightMode:9.1.1 前向渲染前向渲染的光照模型分为两种:一种是LightMode="ForwardBase" 一种是LightMode="ForwardAdd"FB:只渲染一次,只进行最亮的逐像素光照渲染,以及所有逐顶点光照和SH光照需要添加的宏定义:#pragma multi_compile_fwdbase 获取相..原创 2021-10-05 09:44:39 · 624 阅读 · 0 评论 -
unity shader 之基础 七八 纹理采样、透明度渲染
7.1.1 逐纹素:对纹理贴图进行采样,采样后的结果就叫纹素7.1.2 unity使用的是OpenGL的标准,即:左下角是坐标原点7.1.3 _MainTex_ST:表示该纹理的偏移缩放属性,在属性面板上表现出tilling 和 offset ,float4 类型xy 存的是缩放 zw 存的是偏移7.1.4 通过 _MainTex_ST 重新计算uv texcord *_MainTex_ST.xy+_MainTex_ST.zw 或者使用内置方法 TRANSFORM_TEX...原创 2021-09-21 21:25:22 · 2478 阅读 · 0 评论 -
unity shader 之基础六 光照模型
1.基本的光照模型光照:在物理学上,光是太阳发出的一种电磁波,光照射到物体表面,会发生散射,一部分反射出去,一部分折射到物体内部,再散射出去1.1 光强(衡量光大小的变量)光的方向:用l(light)表示辐射度:垂直于 l 的平面单位面积上单位时间内通过的光的能量因为大多数物体表面和光照方向并不垂直,所以使用表面法线的余弦值,来表示辐射度,这里的法线和光照方向都是单位向量1.2反射和折射前面说的散射有两种方式,一种反射,一种折射,在shader中分别用 漫反射 和 高光.原创 2021-09-12 23:28:01 · 1331 阅读 · 0 评论 -
unity shader 之基础五 基本语法
1.顶点着色器的数据从哪来的我们通过定义语义告诉unity 我们想要的数据,这些数据是在渲染的时候,通过MeshRender 获得的,也就是MeshRender里面包含了我们需要的模型数据2.插值器通过TEXCORD_###NUM来定义插值器,不同的shader model ,可使用的插值器的数量是不同的,插值器是一个float4、half4、fixed4 ,所以尽可能的都利用其中的各个变量xyzw3.shader modelshader model 就是渲染模型,是direct x 定原创 2021-09-12 18:56:35 · 684 阅读 · 0 评论 -
unity shader之基础 一二三:渲染简介
一:渲染流水线:应用阶段:主要在CPU执行,准备好需要渲染的数据,输出渲染图元几何阶段:在GPU执行,主要处理顶点的坐标空间转换,把这些处理过的数据传递给下一阶段光栅化阶段:在GPU执行,对上一阶段产生的数据,进行着色,最终输出到屏幕上由于顶点数量要远小于片元数量的,所以一个片元的颜色、深度等,是对顶点进行线性插值得到的裁剪:把不在摄像机视野内的顶点裁剪掉三角形设置:根据顶点数据,生成三角形数据三角形遍历:根据像素和三角形的覆盖情况,获取片元片元着色器:进行着色逐片元原创 2021-09-12 17:55:16 · 1018 阅读 · 0 评论 -
unity shader 之基础四 数学
4.2笛卡尔坐标系笛卡尔坐标系分为二维和三维坐标系4.2.1二位坐标系OpenGL 和 DirectX 二位坐标系是不同的,OpenGL 和DirectX 是不同的图形访问接口,用来和硬件交互的二维坐标系 是可以相互转换的,既 任意一个二维坐标系,都可以用由另一个二维坐标系通过旋转 得到,从这种意义上来说,所有的二维坐标系 都是等价的4.2.2 三维坐标系三维坐标系中的x ,y ,z 轴叫做该坐标系的 基矢量如果这三个 基矢量 相互垂直 且 长度为1 ,则称...原创 2021-08-15 18:57:48 · 596 阅读 · 1 评论 -
unity 之 ShaderGraph 六
Procedural NodesCheckerboard 转存失败重新上传取消 Generates a checkerboard of alternating colors between inputs Color A and Color B based on input UV. NoiseGradient Noise Simple Noise Ge...原创 2019-11-19 14:25:08 · 178 阅读 · 0 评论 -
unity 之 ShaderGraph 五
PBR Master Node基于 physically based rendering. 包括 Metallic or Specular 两个工作流程提供给输入法线的值应该在切线空间中。使用Transform Node转换节点将其转换为切线空间。Values supplied to the input Normal are expected to be in tangent space....原创 2019-11-15 17:19:33 · 818 阅读 · 0 评论 -
unity 之 ShaderGraph 四
Channel NodesCombine Flip 控制输出颜色的每个通道.相当于自己创建一个颜色 调节各个通道的对比度 Split Swizzle 分离色调 在每个通道的基础上反转输入的颜色 Combine Node根据自己输入的RGBA值来创建一个新的颜色PortsName ...原创 2019-11-15 11:03:21 · 2079 阅读 · 0 评论 -
unity 之 ShaderGraph 三
Artistic NodesAdjustmentChannel Mixer Contrast 控制输入颜色的每个通道,相当于调节每个通道的值 调节对比度 Hue Invert Colors 调节色调偏移,根据range的不同模式 在每个通道的基础上反转输入的颜色。 Replace Color Saturation...原创 2019-11-14 11:52:00 · 1093 阅读 · 0 评论 -
unity 之ShaderGraph 二
Sub Graph AssetNode一个节点包含一个或多个 input, output 和操作 operation ,一个节点也可能有任意数量的控件,这些是节点上没有端口的控件。你可以折叠没有连接得节点,通过点击右上角的折叠按钮For components of a Node see:Port EdgePreview有些节点在节点上有预览.此预览将在图中显示该阶段的主...原创 2019-11-14 10:28:48 · 433 阅读 · 0 评论 -
unity 之 ShaderGraph 一
My first Shader Graph在开始之前,要确保你的工程设置正确,创建并应用好你自己的渲染管线, See Getting started with Shader Graph for more information.Create a new node:创建一个节点创建节点有两种方式:右键,在弹出菜单中选择Create Node . 空格键Connect nodes...原创 2019-11-13 14:40:30 · 2446 阅读 · 0 评论 -
unity 之 Writing Surface Shaders
Writing Surface Shaders编写与灯光交互的着色器是复杂的. 因为有不同的光类型,不同的阴影选项,不同的渲染路径(前向和延迟渲染),着色器应该以某种方式处理所有的复杂性Surface Shaders比vertex/pixel shader programs 更好. Note在Surface Shaders里面,没有定制语言, magic or ninjas;它只会生成所有...原创 2019-11-10 23:57:05 · 200 阅读 · 0 评论 -
unity 之 shader 语法二
ShaderLab: Legacy Lighting材质和光照参数用来控制内置的顶点光照,顶点光照是计算每个顶点的标准的Direct3D/OpenGL光照模型. Lighting on 是打开.Lighting受 Material块, ColorMaterial and SeparateSpecular 命令影响Note:当vertex programs 使用的时候 Material/Li...原创 2019-11-07 18:36:57 · 889 阅读 · 0 评论 -
unity 之 ShaderLab Syntax
ShaderLab Syntaxunity中所有的shader文件都是用“ShaderLab”语言编写的在该文件中,嵌套大括号语法声明了描述着色器的各种内容– for 例如哪些材质属性应该显示在材质inspector中,要做什么样的硬件备份,需要什么样的混合模式,真正的 “shader code” 是写在CGPROGRAM 片段里面Shader 是着色器文件的根命令。每个文件必须定义一个(...原创 2019-11-06 16:24:24 · 456 阅读 · 1 评论 -
unity 之 Shader语法一
Shader Reference在Unity中内置的渲染管道中的着色器是这样写的:表面着色器 顶点和片段着色器 固定功能着色器 无论何种类型,着色器代码总是由ShaderLab语言包装,它组织着色器结构. 下面是一个用shaderLab写的框架Shader "MyShader" { Properties { _MyTexture ("My Textu...原创 2019-11-11 19:53:22 · 383 阅读 · 0 评论