自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(43)
  • 收藏
  • 关注

原创 1.Triangle

3D坐标转为2D坐标的处理过程是由OpenGL的图形渲染管线(Graphics Pipeline,大多译为管线,实际上指的是一堆原始图形数据途经一个输送管道,期间经过各种变化处理最终出现在屏幕的过程)管理的。在OpenGL中,任何事物都在3D空间中,而屏幕和窗口却是2D像素数组,这导致OpenGL的大部分工作都是关于把3D坐标转变为适应你屏幕的2D像素。2D坐标和像素也是不同的,2D坐标精确表示一个点在2D空间中的位置,而2D像素是这个点的近似值,2D像素受到你的屏幕/窗口分辨率的限制。

2024-06-22 22:19:42 516

原创 UnityShader参数语法总结

在Inspector面板中的字段或字段组之间增加垂直空间。[Space()]中的参数指定了要添加的像素单位(或Unity的GUI单位)的空间量。如果不指定数值,默认是8个像素。:它直接放置在要影响的变量或属性的上方。

2024-06-20 18:55:49 383

原创 3.2混合模式+剔除

二、混合模式有哪些类型?三、混合模式的实现方式?一、什么是混合模式?

2024-06-16 02:46:04 171

原创 3.1深度测试与模板测试

一、模板测试(Stencil Test)1.什么是模板测试从渲染管线出发从逻辑上理解从书面概念上理解2.语法表示3.ComparisonFunction4.更新值5.深入理解6.总结7.扩展二、深度测试(Z Test)1.什么是深度测试从渲染管线出发从逻辑上理解从书面概念上理解2.深度缓冲区(Z-Buffer)3.深度写入(Z Write)4.ZTest操作比较5.渲染队列6.Eary-Z技术7.深度值8.深入理解9

2024-06-12 02:42:24 551

原创 Unity中的伽马(Gamma)空间和线性(Linear)空间

伽马空间定义:通常用于描述图像在存储和显示时的颜色空间。在伽马空间中,图像的保存通常经过伽马转换,使图片看起来更亮。gamma并不是色彩空间,它其实只是如何对色彩进行采样的一种方式为什么需要Gamma:在游戏业界长期以来都忽视一个伽马矫正的问题,这就导致渲染出来的效果要么过曝,要么过暗,总是和真实世界不同。尽管是使用了同一shader渲染,但选择颜色空间不同和处理gamma矫正时做法不同,就导致结果不同CRT的亮度和施加电压不成线性人眼和响应不成线性。

2024-06-11 17:49:49 3643 4

原创 8.让画面动起来

动画效果往往都是把时间添加到一些变量的计算中,以便在时间变化的同时也可以随之变化。Unity shader提供了一系列关于时间的内置变量来允许我们方便地在Shader中访问运行时间,实现各种动画效果。

2024-06-09 23:58:44 485

原创 7.高级纹理

前面的基础纹理包括法线纹理、渐变纹理和遮罩纹理等。这些纹理都属于低纬(一维或二维)纹理。立方体纹理(Cubemap)实现环境映射渲染纹理(Render Texture)程序纹理(Procedure Texture)

2024-06-07 02:31:04 380

原创 6.更复杂的光照

一、Unity的渲染路径1.前向渲染路径2.顶点照明渲染路径3.延迟渲染路径4.选择哪种渲染路径二、Unity的光源类型1.光源类型有什么影响2.在前向渲染中处理不同的光源类型三、Unity的光照衰弱1.用于光照衰弱的纹理2.使用数学公式计算衰弱四、Unity的阴影1.阴影是如何实现的2.不透明物体的阴影3.使用帧调试器查看阴影绘制过程4.统一管理光照衰弱和阴影5.透明度物体的阴影五、本书使用的标准UnityShader

2024-06-04 22:20:48 260

原创 5.透明效果

一、为什么渲染顺序很重要二、Unity Shader的渲染顺序三、透明度测试四、透明度混合五、开启深度写入的半透明效果六、ShaderLab的混合命令1.混合等式和参数2.混合操作3.常见的混合类型七、双面渲染的透明效果1.透明度测试的双面渲染2.透明度混合的双面渲染

2024-06-04 02:42:51 241

原创 4.基础纹理

纹理类型中需要声明一个float4类型的变量_MainTex_ST,其中_MainTex_ST的名字不是任意起的,在unity中,需要使用纹理名_ST的方式来声明某个纹理的属性。Texture Type 纹理类型:选择合适的纹理类型,才能让unity知道我们的意图,传递正确的纹理,或对纹理进行优化。_MainTex_ST.xy存储的是缩放值,_MainTex_ST.zw存储的是偏移值。Clamp,如果纹理大于1,那么将会截取到1,如果小于0,那么就会截取到0。这些值可以在材质面板的纹理属性中调节。

2024-06-03 04:09:58 383

原创 3.基础光照

从宏观上讲渲染包含了两大部分:决定一个像素的可见性,决定一个像素的光照计算而光照模型就是用于决定在一个像素上决定怎样的渲染光照计算。

2024-06-02 03:40:57 669

原创 2.9深入GPU硬件架构及运行机制

1、GPU是如何与CPU协调工作的?2、GPU也有缓存机制吗?有几层?它们的速度差异多少?3、GPU的渲染流程有哪些阶段?它们的功能分别是什么?4、Early-Z技术是什么?发生在哪个阶段?这个阶段还会发生什么?5、SIMD和SIMT是什么?它们的好处是什么?co-issue呢?6、GPU是并行处理的么?若是,硬件层是如何设计和实现的?7、GPC、TPC、SM是什么?Warp又是什么?它们和Core、Thread之间的关系如何?8、顶点着色器(VS)和像素着色器(PS)可以是同一处理单元吗?

2024-06-02 00:21:54 855

原创 2.8Flowmap的实现

半条命2中水的流动求生之路2中的水的流动这种方式原理简单,容易实现,运算量少,如今也还在使用Flow map(流向图) ,一张记录了2D向量信息的纹理,Flow map上的颜色(通常为RG通道)记录该处向量场的方向,让模型上某一点表现出定量流动的特征。通过在shader中偏移uv再对纹理进行采样,来模拟流动效果。

2024-06-01 03:29:21 1223 2

原创 2.5Bump Mapping 凹凸映射

Parallax Mapping中文为视差映射,是一种类似于法线映射的技术,但原理不同,类似法线贴图,它是用以提供模型表面细节并赋予其遮挡关系的技术,并可以和法线贴图一起使用提供令人信服的逼真效果。法线映射虽然能展示较为逼真的模型表面细节,但毕竟法线映射只能改变法线进而改变光照,并不能让模型表面产生令人信服的遮挡效果。例如图中D点,采样到0.75层,实际是0.5层,就停止采样,返回偏移坐标。法线存在各个空间里都可以,但关键不只是存在哪里,还有后续的光照计算。:如何在知道A的uv值的情况下,算出B的uv值。

2024-05-31 22:08:25 860

原创 2.7HDR与LDR

补充:我们的电脑屏幕的最高亮度是通过上个世纪一系列经验累计得到的相对统一的亮度,对人眼来说比较安全的亮度强度,所以我们看电脑屏幕感觉对眼睛的伤害是比较小的,基本上是无伤害的,但当我们直视太阳光时,太阳光强度是会对我们的眼睛造成损伤的。LDR的颜色为0-1,HDR的颜色为超出1或低于1的颜色,想通过显示器表现更多颜色就得把HDR压缩成LDR,而这种映射关系即色调映射ToneMapping。HDR才有超过1的数值,才有光晕(bloom)的效果,高质量渲染的bloom能体现画面的渲染品质。

2024-05-31 04:15:46 2237 1

原创 2.6伽马校正

Gamma是指对线性三色值和非线性视频信号之间进行编码和解码的操作。

2024-05-31 01:41:14 693

原创 2.4传统的经验光照模型

在光照模型的定义中,当光线从光源照射到模型表面时,光线均匀被反射到各个方向,这种现象就是漫反射在漫反射的过程中,光线发生了发生了吸收和散射,而因此改变颜色和方向。

2024-05-30 22:12:43 958

原创 2.3基础语法

如果输入值小于 0 ,则丢弃当前像素,常用于判定范围(不仅仅针对 0,返回值为 void )常用于测试 alpha,如果么个分量代表到平面的距离,还可以用力爱模拟剪切平面 sign(x) 返回x 的正负性,如果 x 小于 0 返回 -1,如果 x 等于 0 返回 0, 如果 x 大于0 返回 1。在渲染中有极大的用处,当我们渲染远景的时候并不希望使用最高的Mipmap来渲染,在开放世界,半开放世界中有极大的性能消耗,这时我们就需要使用他准备不同等级的 Mipmap 远处使用的越小,占用的性能就与小。

2024-05-30 17:01:19 1056

原创 2.2模型与材质

点连接成线,线围成面,组成多边形至此一个模型空间下的模型形成。

2024-05-30 14:42:27 909

原创 2.1色彩空间

色彩空间至少需要满足三项重要指标1. 色域 (三个基色的坐标,由此形成三角形)2. Gamma (如何对三角形内进行切分)3. 白点 (色域三角形中心)

2024-05-29 21:04:01 805

原创 1.4当前PC及手机平台主流图形API介绍

电脑的工作原理:电脑是由各种不同的硬件组成,由驱动软件驱使硬件进行工作。所有的软件工程师都会直接或者间接的使用到驱动。定义:是一个图形库,用于渲染 2D,3D 矢量图形的跨语言,跨平台的应用程序编程接口(API)。针对 GPU。

2024-05-29 17:06:11 630

原创 1.3纹理介绍

一种可供着色器读写的结构化存储形式任何图片都可以作为纹理(但纹理就是图片并不正确,因为纹理并不一定是图片,处理包含具体储存的信息以外,还会包含纹理采样的一些设置)

2024-05-29 15:15:41 592

原创 2.unity shader基础

ShaderLab是Unity结合CG和HLSL的一些语义,开发出来的可编程管线语言,主要优势是能基于Unity实现跨平台。//UNITY_MATRIX_MVP:unity提供的宏,代表模型空间到裁切空间的变换矩阵。//i.tangent.w在OpenGL中是+1,在DirectX中是-1。有时候,主要是在处理法线纹理跟光照模型的时候,会用到TNB坐标系,也就是所谓的切线空间。//POSITION:unity的变量类型。//预编译,顶点/片元着色器指定函数。//定义属性,可以通过外部的c#语言传值。

2024-05-29 02:39:09 498

原创 1.2数学基础

MVP矩阵分别是模型(Model)、观察(View)、投影(Projection)三个矩阵。我们的顶点坐标起始于局部空间(Local Space),在这里它称为局部坐标(Local Coordinate),它在之后会变为世界坐标(World Coordinate),观察坐标(View Coordinate),裁剪坐标(Clip Coordinate),并最后以屏幕坐标(Screen Coordinate)的形式结束。OS = 模型原点为坐标系原点的空间坐标系 = 模型空间。

2024-05-28 21:26:14 801

原创 1.1渲染流水线

前面的渲染流程完成后,再对最后输出的缓冲区/渲染贴图进行处理,可以看成是应用于一个矩形面片贴图的图像处理。关于这些深度测试/模版测试/透明度测试先后顺序是什么样的?以及介绍,下面一篇很好的文章。检查每个像素是否在三角形内部,如果在,则生成一系列插值数据序列。计算三角形网格信息,计算例如顶点坐标和edge函数。

2024-05-28 00:40:29 680

原创 MVP矩阵变换详解

前言:MVP矩阵变换是一个重要的基本概念,以后也是常用,故先此深入理解一下。拜读了许多前辈的文章,自己也总结一下,日后温习。

2024-05-27 00:37:52 1141

原创 games101作业2

我们可以用 super-sampling来解决这个问题,即对每个像素进行 2 * 2 采样,并比较前后的结果 (这里并不需要考虑像素与像素间的样本复用)。需要注意的点有,对于像素内的每一个样本都需要维护它自己的深度值,即每一个像素都需要维护一个 sample list。最后,如果你实现正确的话,你得到的三角形不应该有不正常的黑边。在上次作业中,虽然我们在屏幕上画出一个线框三角形,但这看起来并不是那么的有趣。因为我们只知道三角形三个顶点处的深度值,所以对于三角形内部的像素,我们需要用插值的方法得到其深度值。

2024-05-26 04:55:26 416

原创 【13】: 几何(网格处理)、阴影图

即蓝色新顶点所在的位置与原来各个平面的垂直距离之和。曲面细分是指将一个模型的面合理的分成更多小的面,从而提升模型精度,使模型越来越光滑,提高渲染效果。曲面简化是指将一个模型的面合理的合成更少的面,从而降低模型精度,减小开销,如远处模型使用曲面简化。二次误差度量:希望把这个点放到一个位置上,使得这个点到原来的几个面的距离平方和最小。Loop细分是指Loop提出来的细分规则,只能针对于三角形。可以看出,老的顶点受到自己和相邻顶点度数的影响。边塌陷:将一条边的两个顶点合成为一个顶点。

2024-05-25 19:00:27 457

原创 【12】: 几何(曲线与曲面)

贝塞尔曲线:由控制点和线段组成的曲线,控制点是可拖动的支点。如图,蓝色为贝塞尔曲线,为控制点,曲线和初始与终止端点相切,并且经过起点与终点。

2024-05-25 17:50:33 382

原创 【11】:几何(基本表示方法)

水平集:与SDF很像,也是找出函数值为0的地方作为曲线,但不像SDF会空间中的每一个点有一种严格的数学定义,而是对空间用一个个格子去近似一个函数。如雪花是一个六边形,放大之后会发现每一个边上又是一个六边形,再放大六边形边上的六边形边上又是六边形,就这样无限套娃,有点递归的意思。其中(u,v)已知,映射关系已知,把所有的(u,v)映射到对应的(x,y,z),就可以把所有点组成曲面。显式几何:隐式曲面相对的,所有曲面的点被直接给出,或者可以通过映射关系直接得到。直接给出所有点的信息,再用这些点组成几何。

2024-05-24 15:38:34 881 1

原创 【10】:着色(插值、高级纹理映射)

为什么要插值?知道顶点->找到三角形内部的、颜色、法线插值什么?例如phong shading 需要知道每个像素的法线怎么插?重心坐标。

2024-05-23 23:33:01 535 1

原创 【9】:着色(着色频率、图形管线、纹理映射)

所谓的着色频率,其实就是着色的精细程度。后两者需要插值。以下三个模型,三角形的个数是完全一样的。唯一不一样的就是着色频率。可以很明显的看出,从左到右,随着着色频率变得精细,光暗效果更佳。既然需要插值,我们就需要知道怎么插值。显然,Blinn-Phong模型中需要用到法线。所以我们先说说法线是怎么插值的。

2024-05-23 21:07:45 707 1

原创 【8】:着色(光照与基本着色模型)

我们现在已经学会了MVP变换,也学会了光栅化。把模型放好(给出模型中各个点的坐标)把相机放好(把相机摆到标准位置)对着模型拍一张照片(视图变换,投影变换以及视口变换)在屏幕上画出这张照片(光栅化)总而言之,所谓渲染,其实就是照照片。只不过这个照片是电脑画出来的。

2024-05-23 17:19:29 727 1

原创 1.渲染流水线

编写着色器代码的高级着色器语言GLSL(OpenGL):跨平台性HLSL(DirectX):微软,平台有限CG(NVIDIA):真正意义跨平台unity中的着色器语言并非真正的着色器语言,尽管语法相同GPU流水线上的一些可高度编程的阶段,而由着色器编译出来的最终代码是会在GPU上运行的(对于固定管线来说,着色器有时等同于一些特定的渲染设置)有一些特定类型的着色器,如顶点着色器,片元着色器等。

2024-05-23 13:40:42 397

原创 【7】:光栅化(深度测试与抗锯齿)

在上节光栅化中,我们定义了一个inside函数,只要在三角形内部,我们就认定其为1,即涂成红色,否则就认为是0,不涂成红色。所谓锯齿,就是下图这种,如同阶梯状的小格子一种显而易见的抗锯齿的方法,就是增加分辨率。显然,我们像素约密约多,锯齿就约难以察觉。然而这就意味着我们要更换我们的显示器。比如原本你是1080P的显示器,现在升级成4K的,当然锯齿就会少很多了。然而这种更换硬件的办法,是要加钱的。我们能不能再不升级硬件的条件下,减少锯齿呢?有的!那就是增加模糊。

2024-05-23 01:13:01 1005

原创 【6】:光栅化(离散化三角形)

如何确定一个视锥?首先确定距离,也就是近平面和远平面的z坐标,n和f然后再确定形状。根据这两个参数,加上平面距离。我们就能求出任意平面的宽与高。例如:已知距离|n|,以及fovY,以及aspect ratio于是平面t(top, 也就是最大y坐标)可以由下面关系式求出平面的r(right,也就是最大x坐标)可以由下面关系式求出由此可见,视锥角度+宽高比+距离可以求出视锥上的任意平面。

2024-05-22 17:55:43 948 1

原创 games101作业1

本次作业的任务是填写一个和一个。给定三维下三个点 v0(2.0, 0.0, −2.0), v1(0.0, 2.0, −2.0), v2(−2.0, 0.0, −2.0), 你需要将这三个点的坐标变换为屏幕坐标并在屏幕上绘制出对应的线框三角形。以下是你需要在 main.cpp 中修改的函数。get_model_matrix(float rotation_angle): 逐个元素地构建模型变换矩阵并返回该矩阵。在此函数中,你只需要实现三维中绕 z 轴旋转的变换矩阵,而不用处理平移与缩放。

2024-05-22 15:41:34 777

原创 【5】:三维到二维变换(模型、视图、投影)

三维到二维变换(模型、视图、投影)

2024-05-22 03:21:48 3660

原创 【4】:基础变换(三维)

基础变换(三维)

2024-05-22 03:19:01 255

原创 【3】:基础变换(二维)

基础变换(二维)

2024-05-22 03:15:59 281

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除