- 博客(63)
- 资源 (1)
- 收藏
- 关注
原创 FXAA Fast approXimate Anti-Aliasing
计算并存储像素亮度,或回退使用绿色通道。查找并混合高对比度像素。检测并平滑长边缘。结合FXAA与渲染缩放。这是关于创建自定义可编程渲染管线的教程系列的第17部分,主要内容是实现FXAA抗锯齿算法。本教程使用Unity 2019.4.20f1制作,并升级到2022.3.5f1。应用FXAA与未应用FXAA的图像对比(放大视图)
2025-10-19 00:36:24
695
原创 Render Scale Scaling Up and Down
通过滑块调整渲染缩放比例。支持每个摄像机使用不同的渲染缩放比例。在所有后期特效处理后重新缩放到最终目标。这是关于创建自定义可编程渲染管线的教程系列的第16部分,主要内容是将渲染分辨率与目标缓冲区大小解耦。本教程使用 Unity 2019.4.16f1 制作,并升级到 2022.3.5f1比较不同渲染缩放比例(放大视图)1. Variable Resolution 可变分辨率应用程序通常以固定分辨率运行。部分应用允许通过设置菜单调整分辨率,但这需要图形系统的完全重新初始化。
2025-10-18 22:38:59
807
原创 Particles Color and Depth Textures
支持翻页书效果、近似淡入淡出、柔化及扭曲粒子。确定正交与透视投影中的片段深度。复制并采样颜色与深度缓冲区。这是关于创建自定义可编程渲染管线的教程系列第15篇。我们将依托颜色和深度纹理,实现基于深度的粒子淡化和扭曲效果。本教程基于Unity 2019.4.14f1版本创建,并升级至2022.3.5f1版本用粒子效果营造凌乱氛围。
2025-10-18 19:04:22
701
原创 Multiple Cameras Camera Blending and Rendering Layers
与前一相机图层混合仅对叠加相机有意义。底层相机会与相机目标的初始内容(可能是随机数据或之前帧的累积结果,除非编辑器提供了已清除的目标)进行混合。因此首个相机应使用One Zero混合模式。为支持替换、叠加及更特殊的图层选项,我们将为相机添加可配置的最终混合模式(在启用后期特效时使用)。为此创建一个新的可序列化CameraSettings配置类(类似阴影设置),将源和目标混合模式封装在内部的FinalBlendMode结构体中以便管理,默认设为One Zero混合模式。
2025-10-18 01:07:07
926
原创 Color Grading Playing with Colors
实施色彩分级复刻多种URP/HDRP色彩分级工具使用颜色查找表这是关于创建自定义可编程渲染管线的教程系列第13部分。本次我们将添加多种色彩分级工具。本教程基于Unity 2019.4.10f1版本创建,并已升级至2022.3.5f1版本通过调整色彩来营造特定氛围。
2025-10-17 01:10:06
631
原创 HDR Scattering and Tone Mapping
渲染到HDR纹理减少泛光萤火虫现象添加散射泛光效果支持多种色调映射模式这是关于创建自定义可编程渲染管线的教程系列第12部分。本教程增加了对高动态范围渲染、基于散射的泛光以及色调映射的支持。本教程基于Unity 2019.4.8f1版本创建,并已升级至2022.3.5f1版本。暗部、亮部与极亮区域的组合效果。
2025-10-16 23:45:00
956
原创 Post Processing Bloom
我们当前使用的Blit方法会绘制一个覆盖整个屏幕空间的四边形网格(两个三角形)。但通过仅绘制单个三角形也能获得相同效果,这样计算量更少。我们甚至无需向GPU发送单三角形网格,可以直接通过程序化方式生成。这样做能带来显著改进吗?最直观的好处是将顶点数从六个减少到三个。但更重要的意义在于它消除了四边形两个三角形相接的对角线。由于GPU是以小块形式并行渲染片元的,三角形边缘的某些片元会被浪费。四边形包含两个三角形时,对角线上的片元块会被重复渲染,导致效率低下。
2025-10-15 00:24:07
992
原创 Point and Spot Shadows Perspective Shadows
实现点光源与聚光灯的烘焙与实时阴影混合配置第二张阴影图集采用透视投影进行阴影渲染与采样使用自定义立方体贴图本教程是创建自定义可编程渲染管线系列的第十部分,新增了对点光源与聚光灯实时阴影的支持。本教程基于Unity 2019.4.1f1创建,并升级至2022.3.5f1版本。100% realtime shadows 100% 实时阴影。
2025-10-12 22:38:04
1113
原创 Point and Spot Lights Lights with Limited Influence
支持更多光源类型,而非仅定向光。引入实时点光源与聚光灯。烘焙点光源与聚光灯的照明和阴影。每个对象最多渲染8个其他光源。本教程是创建自定义可编程渲染管线系列的第九部分,新增了对实时与烘焙点光源、聚光灯的支持,但尚未实现实时阴影。本教程基于Unity 2019.2.21f1创建,并升级至2022.3.5f1版本。A party of point and spot lights 一组点光源与聚光灯。
2025-10-07 22:06:34
928
原创 Complex Maps Masks, Details, and Normals
创建电路状材质。添加对MODS遮罩贴图的支持。引入次级细节贴图。执行切线空间法线贴图。这是关于创建自定义可编程渲染管线的教程系列的第八部分。通过添加对遮罩、细节和法线贴图的支持,使得创建复杂表面成为可能。本教程使用Unity 2019.2.21f1制作,并升级至2022.3.5f1版本。(注:MODS是Metallic/Occlusion/Detail/Smoothness的缩写,即金属度/环境光遮蔽/细节/光滑度遮罩贴图)
2025-10-07 01:30:36
606
原创 LOD and Reflections Adding Details
使用LOD组在LOD层级间实现交叉淡入淡出通过采样反射探针实现环境反射支持可选的非涅尔反射这是关于创建自定义可编程渲染管线的教程系列第七部分。内容涵盖细节层级(LOD)系统和简单反射效果,这些功能可以为我们的场景增添细节表现。本教程基于Unity 2019.2.21f1版本创建,并已升级至2022.3.5f1版本A bunch of LOD groups and reflection probes 一组LOD组和反射探针。
2025-10-06 19:02:26
1113
原创 Shadow Masks Baking Direct Occlusion
烘焙静态阴影。将实时光照与烘焙阴影结合。混合实时和烘焙阴影。支持最多四个阴影遮罩灯光。这是关于创建自定义可编程渲染管线的教程系列的第六部分。它使用阴影遮罩技术来烘焙阴影,同时仍计算实时光照。本教程基于 Unity 2019.2.21f1 版本制作,并已升级至 2022.3.5f1 版本Realtime shadows nearby, baked shadows farther away. 近处使用实时阴影,远处使用烘焙阴影。
2025-10-06 17:26:54
1057
原创 Baked Light Light Maps and Probes
烘焙光照:光照贴图与光照探针烘焙静态全局光照采样光照贴图、光照探针和LPPV创建元通道支持自发光表面这是关于创建自定义可编程渲染管线的教程系列第五部分。本教程实现了将静态光照烘焙到贴图和探针中的功能。本教程基于Unity 2019.2.18f1版本创建,并已升级至2022.3.5f1。场景由单一混合模式光源照明,并带有少量自发光效果。
2025-10-06 01:35:42
944
原创 Directional Shadows Cascaded Shadow Maps
渲染与采样阴影贴图支持多个带阴影的定向光源使用级联阴影贴图技术实现阴影的混合、淡化和过滤这是关于创建自定义可编程渲染管线的教程系列第四部分,主要介绍如何增加对级联阴影贴图的支持。本教程基于Unity 2019.2.14f1版本创建,并已升级至2022.3.5f1版本。
2025-10-04 19:05:19
820
原创 Directional Lights Direct Illumination
使用法线向量计算光照。支持最多四个方向光。应用双向反射分布函数(BRDF)。制作受光照影响的透明材质。创建带有预设的自定义着色器图形用户界面。本教程是关于创建自定义可编程渲染管线的系列教程的第三部分,重点增加了对多方向光照着色的支持。本教程基于Unity 2019.2.12f1版本制作,并已升级至2022.3.5f1版本。如果我们想要创建更真实的场景,就需要模拟光线与物体表面的交互方式。这要求我们使用比当前无光照着色器更为复杂的着色器来实现。
2025-10-02 03:53:18
938
原创 Draw Calls Shaders and Batches
编写HLSL着色器。支持SRP批处理器、GPU实例化和动态批处理。实现按对象配置材质属性,并随机绘制多个对象。创建透明和镂空材质。本教程是关于创建自定义可编程渲染管线的系列教程的第二部分,主要讲解着色器编写与高效绘制多个物体的方法。本教程基于Unity 2019.2.9f1版本创建,并已升级至2022.3.5f1版本。
2025-10-01 16:20:22
840
原创 自定义渲染管线 Custom Render Pipeline
翻译:Render a camera's view 渲染一个相机视图执行 Perform culling, filtering, and sortingSeparate opaque, transparent, and invalid passes 分离不透明、透明及无效渲染通道Work with more than one camera 支持多相机协作渲染本教程是关于创建的系列教程的第一部分。
2025-09-28 16:01:57
774
原创 光线追踪12 - Defocus Blur(虚焦模糊)
对于真实相机,如果需要更多光线,可以使光圈更大,并且远离焦距的物体将产生更多的模糊效果。对于我们的虚拟相机,我们可以拥有完美的传感器并且从不需要更多光线,因此只在需要虚化模糊时使用光圈。由于此圆盘的大小控制了我们获得的虚化模糊程度,这应该是相机类的一个参数。然而,在我们的模型中,这两个值将相等,因为我们将将像素网格放在焦平面上,距离摄像机中心焦距远。为了渲染相机外部的图像,我们不需要模拟相机内部的任何部分,这将增加不必要的复杂性。距离镜头焦距的位置),在那个平面上,3D世界中的所有物体都是完全聚焦的。
2024-03-07 15:19:24
1992
原创 光线追踪11 - Positionable Camera(可定位相机)
u是指向相机右侧的单位向量,v是指向相机上方的单位向量,w是指向视线方向相反的单位向量(由于我们使用右手坐标系),相机中心位于原点。由于我们的图像不是正方形的,水平和垂直的视野是不同的。与以前一样,当我们的固定相机面向-Z时,我们的任意视角相机面向-w。请记住,我们可以选择使用世界坐标系的上方向(0,1,0)来指定vup,但不是必须的。我们将摄像机放置的位置称为"lookfrom",我们注视的点称为"lookat"。我们将使用一个90°的视野来测试这些变化,以两个相互接触的球体构成的简单场景为例。
2024-03-07 15:14:46
1228
原创 光线追踪10 - Dielectrics( 电介质 )
其中θ和θ′是相对于法线的角度,η和η′(pronounced “eta” and “eta prime”)是折射率(一般情况下,空气为1.0,玻璃为1.3-1.7,钻石为2.4)。我们知道右侧每一项的值,除了cosθ。在这种情况下,所有光线都被反射回来,因为通常是在固体物体内部发生的,所以被称为“全内反射”。一个麻烦的实际问题是,当光线处于折射率较高的介质中时,斯涅尔定律没有真实解,因此无法发生折射。使用介电球体的一个有趣且简单的技巧是注意到,如果使用负半径,几何形状不受影响,但表面法线指向内部。
2024-03-07 15:08:09
1254
原创 光线追踪9 - Meta 金属
当光线击中一个表面(例如特定的球体)时,hit_record中的材质指针将被设置为指向主函数(main())中设置的球体所赋予的材质指针。对于我们已经拥有的Lambertian(漫反射)情况,它可以始终根据其反射率R进行散射和衰减,或者有时候以概率1−R进行散射,但不进行衰减(未散射的光线会完全被材质吸收)。由于我们只是指定了一个指向类的指针,编译器不需要知道类的细节,从而解决了循环引用的问题。球体越大,反射越模糊。hit_record的作用是避免使用大量的参数,以便我们可以在其中存储任何所需的信息。
2024-03-07 12:18:05
867
原创 光线追踪8- Diffuse Materials 漫反射材料
您使用的图像查看器可能期望接收的是伽马空间中的图像,而我们提供的是线性空间中的图像,这就是为什么我们的图像看起来过于暗淡的原因。作为一个简单的近似,我们可以使用“gamma 2”作为我们的转换,这是从伽马空间到线性空间的转换所使用的幂次。在交点处,这个表面有两个完全不同的面,因此任何交点只能有两个唯一的与之相切的单位球(一个单位球对应于表面的每个面)。这种非常直观的材质是最简单的漫反射材质,事实上,许多最早的光线追踪论文使用了这种漫反射方法(在采用稍后将要实现的更精确方法之前)。这里存在一个潜在的问题。
2024-03-06 22:05:48
1296
原创 光线追踪7 - 抗锯齿(Antialiasing)
那是因为我们的眼睛自然而然地完成了我们希望光线追踪完成的任务:将落在所渲染图像的特定(离散的)区域上的(连续函数的)光线进行积分。为了确保最终结果的颜色分量保持在正确的[0,1]范围内,我们将添加并使用一个小的辅助函数:interval::clamp(x),用于限制值x在指定范围内。该函数将使用一个新的辅助函数pixel_sample_square(),该函数生成一个随机样本点,在以原点为中心的单位正方形内。对于由多个样本组成的单个像素,我们将从像素周围的区域选择样本,并将得到的光(颜色)值进行平均。
2024-03-06 21:50:27
1383
原创 光线追踪6 - Moving Camera Code Into Its Own Class
最终,相机将遵循我们能想到的最简单的使用模式:它将不带参数进行默认构造,然后拥有它的代码将通过简单赋值来修改相机的公共变量,并最终通过调用initialize()函数来初始化一切。最后,拥有者代码可以调用initialize(),或者让相机在render()开始时自动调用这个函数。新的相机类将包含两个公共方法initialize()和render(),以及两个私有辅助方法get_ray()和ray_color()。在继续之前,现在是将我们的相机和场景渲染代码整合到一个新的类中:相机类。
2024-03-06 21:43:52
362
原创 光线追踪5- Surface normals and multiple objects
对于初始光线,这个区间是正数t,但正如我们将看到的,将tmin与tmax定义为区间可以简化我们的代码。虽然使用球体数组的方式很诱人,但一个非常简洁的解决方案是为光线可能碰到的任何物体创建一个"抽象类",并将球体和球体列表都视为可击中的物体。在本书中,我们有比几何类型更多的材质类型,所以我们将选择较少的工作量,并将确定放在几何时间。在我们的代码中,我们将使用 shared_ptr,因为它允许多个几何体共享一个公共实例(例如,一组使用相同颜色材质的球体),并且使内存管理自动化并更易于理解。
2024-03-06 20:52:48
956
原创 光线追踪4- Adding a sphere
需要注意的一点是,我们正在测试光线是否与球体相交,通过求解二次方程并判断是否存在解来进行判断,但含有负值的解同样完全有效。如果您将球体的中心位置改为 z=+1,您将得到完全相同的图像,因为该解并不能区分相机前方的物体和相机后方的物体。在图形学中,你几乎总是希望将公式表达为向量的形式,这样所有涉及 x、y、z 的部分都可以简单地用一个 vec3 类来表示。如果我们将这个数学公式硬编码到我们的程序中,我们可以通过在z轴上将一个小球放置在-1位,并将与其相交的像素块标记为红色来测试我们的代码。
2024-03-06 20:29:31
955
原创 光线追踪3-Rays, a Simple Camera, and Background
viewport是3D世界中的一个虚拟矩形,包含了图像像素位置的网格。然而,由于我们已经有一个给定的长宽比,更容易设置图像的宽度和长宽比,然后使用这个信息计算其高度。虽然我们的3D空间遵循上述规定,但这与我们的图像坐标冲突,我们希望将第一个像素设在左上角,并从上到下逐渐移动到右下角的最后一个像素。在这个图中,我们有视口(viewport),用于7*5分辨率图像的像素网格,视口左上角Q,像素P0,0位置,视口向量Vu(viewport_u),视口向量Vv(viewport_v),以及像素增量向量Δu和Δv。
2024-03-06 17:57:51
1028
原创 光线追踪1 输出一张 ppm 格式图
红色从完全关闭(黑色)向右边逐渐变亮(鲜红),绿色从顶部完全关闭逐渐变暗(黑色)至底部。将红光和绿光混合会产生黄色,因此我们预期右下角应该是黄色的。根据约定,每个红/绿/蓝分量在内部使用取值范围为0.0到1.0的实值变量表示。在打印输出之前,必须将它们缩放为0到255之间的整数值。之后有x * y个(r,g,b)三元组,它会按照顺序读取,并且在图像的左上角开始一行一行扫描设置像素值。3 2 分别表示列数和行数,或者理解为x轴的长度和y轴的长度,或理解为图形的宽和高。这些行按照从上到下的顺序进行输出。
2024-03-06 17:19:15
501
原创 NURBS 曲面
准线可以是开曲线,也可以是闭曲线。, 设d是柱面高度方向的单位矢量。柱面p(u, v)的表达式是将准线p(u)沿方向d平行扫描距离h得到的。记扫描方向的参数为v, 且。曲面u方向的次数为p。由于曲面v方向的次数为1,所以v=[0,0,1,1]。曲面的v方向参数是直母线。因此一般柱面也可视为直母线一个端点沿着准线运动平移扫掠生成的曲面。故柱面可视为准线平移扫描生成的曲面。是三维空间的4个点,双线性曲面是通过四条边界线。一个在u次方向p次、v方向q次的NURBS曲面。为准线控制多边形顶点,相应的权因子为。
2024-03-06 17:03:59
894
原创 圆弧的NURBS表示
可用一段二次NURBS表示。,在标准有理二次Bezier曲线上插入一个t=1/2 的节点。来定义一段标准型,有理二次Bezier曲线,即定义了圆心角为。随着的增大,凸包性质将会变得越来越差。二次NURBS 圆弧权因子。的圆弧,需要6个控制点。为起始角,逆时针为正角,为起始角,逆时针为正角,为控制顶点,权因子为。为起始角,逆时针为正角,时,可以采用首末端点。
2024-03-06 16:35:11
1147
原创 NURBS 曲线的定义及几何性质
(n=6), 如图所示,假定标准型NURBS曲线的其余权因子为2,节点矢量使用Hartley-Judd算法计算,绘制三次(k=3)NURBS曲线., 且顺序K个权因子不同时为0。首末权因子都为1的NURBS曲线称为标准型NURBS曲线,否则称为非标准型NURBS曲线。是k次规范B样条基函数。对于NURBS开曲线,常将两断节点的重复度取为k+1。称为权因子,分别与控制点。NURBS 的数学定义为。举例:给定7个控制点。
2024-03-06 16:01:42
1303
原创 曲线节点插入
的过程为“节点插入”。节点插入实质是改变了节点矢量,导致增加了一个新的控制点,而曲线在几何和参数方面均不发生改变。, 则 i=5, 因为 k=3, r=0, n=7, 所以 i-k=2, i-r+1=6, n+1=8。曲线节点插入,会增加控制点数,原理是顺序将单个节点值拆入到定义的节点矢量中。在保持曲线形状不变的情况下,试计算插入节点后的新控制点。式中,i 为节点插入原节点区间的左端节点的下标序号,r表示所插节点t在原节点矢量。因此,原始的B样条曲线 p(t) 就可用这组新的B样条基函数和未知新控制点。
2024-03-06 15:54:01
704
原创 Bezier 曲线的拼接
把控制多边形近似看做样条曲线的外切多边形,并使曲线的分段连接点与控制多边形的顶点或边对应起来。生成曲面时,先固定u,变化v 得到一簇Bezier 曲线,然后固定v , 变化u得到另一簇Bezier曲线,两簇曲线交织生成双三次Bezier曲面。里森费尔德(Riesenfeld)算法 假定偶次b样条曲线的所有n-k个分段连接点对应于控制多边形上除两端各k/2条边外其余n-k条边的中点。假定样条曲线的n-k个分段连接点对应于控制多边形上除两端各 (k+1)/2 个顶点外其余的n-k个控制点。
2024-03-06 15:05:52
1664
原创 曲线曲面 - 连续性, 坐标变换矩阵
指相邻两段曲线在结合点处的一阶导数成比例、二阶导数成比例,即曲率一致,但大小不一定相等;, 指相邻两段曲线在结合点处的一阶导数成比例、但大小不一定相等;与参数连续性不同的是,几何连续性只要求参数成比例而非相等。, 指相邻两段曲线在结合点处具有相同的一阶导数;, 指相邻两段曲线在结合点处具有相同的二阶导数;, 指相邻两段曲线在结合点处具有相同的坐标;,指相邻两段曲线在结合点处具有相同的坐标。零阶参数连续性,记为。一阶参数连续性,记为。二阶参数连续性,记为。一阶几何连续性,记为。二阶几何连续性,记为。
2024-03-01 22:40:29
989
1
原创 unity 万向锁,四元素
最后,将旋转增量与当前旋转四元数相乘,得到新的旋转四元数,并将其赋值给物体的旋转属性,实现旋转效果。然而,当绕两个轴进行旋转时,会出现一种情况,即第二个轴与第一个轴重合,导致第三个轴的旋转轴发生了变化,从而导致旋转的不稳定或无法实现所期望的旋转,这种情况就被称为万向锁。在这种情况下,第二次旋转会与第一次旋转重合,导致第三次旋转的轴变成了原来的x轴,从而导致旋转的不稳定或无法实现所期望的旋转。总之,要避免万向锁问题,就需要使用更稳定和准确的旋转方式,或者通过限制旋转角度或改变旋转顺序来解决问题。
2023-06-14 15:59:14
645
原创 unity 动画 - Animator 的使用
目录一、Recap:Shadow Mapping 阴影贴图(内容回顾)--Issues From Shadow Mapping And Solutions 阴影贴图的问题和解决方法二、The math behind shadow mapping 阴影贴图背后的数学知识三、Percentage closer soft shadows 软阴影(PCSS)四、Basic Filtering Techniques 基础Filtering技术一、阴影贴图Shadow mapping 作者:沙.
2023-06-14 15:55:43
324
原创 让树叶摇动起来
Shader "XW/Tree/TreeLeaf_Simple"{ Properties { _Color("Main Color", Color) = (1,1,1,1) _clipAlpha("clip Alpha", Range(0 , 1) ) = 0.5 _MainTex("Base (RGB) Trans (A)", 2D) = "white" {} _Cutoff("Alpha Cutoff", R...
2023-06-14 15:48:38
416
原创 Unity 制作动画 - Animation 的使用
如果你在当前帧修改了多个属性,可以点击菜单中的Key All Modified(将所有修改的属性记录关键帧)或Key All Animated(记录属性列表中所有属性的数值,即使与上一帧相同数值的属性也会被记录)来一次性将所有修改的属性保存。在录制模式下,不管是在场景中移动、旋转、缩放物体,还是在Inspector面板中修改物体组件的属性(Unity动画支持的属性),Unity都会自动在动画Clip的当前时间上添加关键帧保存。也可以通过修改当前帧数输入框中的数字,修改时间轴的位置。
2023-06-14 15:47:40
7152
微信小程序商城完整前端+ php 后台,有数据库,带配置说明,亲测可用
2018-04-12
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅