- 博客(19)
- 收藏
- 关注
原创 深度测试和模板测试案例
透视投影使用的深度缓冲是非线性分布的,更多的精度分配给近处的物体,较少的精度分配给远处的物体。Sobel算子是一种常用的边缘检测算法,通过计算像素在水平和垂直方向上的梯度来识别边缘使用3x3卷积核对周围像素进行采样和加权计算梯度值越大,表示该位置的颜色/深度变化越剧烈,越可能是边缘。深度缓冲(Z-Buffer):存储每个像素距离相机的深度值,深度纹理:将深度缓冲转换为可采样的纹理,线性深度:将非线性深度值转换为线性范围 [0, 1]在视图空间进行偏移。视图空间是相机前方的空间,其Z轴指向相机的观察方向。
2025-10-26 22:46:41
1046
原创 BUMP图改进凹凸贴图映射
视差映射通常是在切线空间下进行的,因为高度图存储的高度信息是相对于切线空间的。因此,我们需要将世界空间的视线方向转换到切线空间,然后在切线空间进行视差偏移,最后再用偏移后的纹理坐标去采样法线贴图和漫反射贴图。视差遮蔽映射采用的是光线步进,当高度层次划分的越多,那么得到的结果越精确,但是随之而来的就是计算量的增大,为了优化计算量,我们可以动态的调节高度分层,避免了在所有情况下都使用最大采样次数,减少不必要的计算。读取法线贴图出来的法线是切线空间法线,需要世界空间转切线空间的矩阵,或者是逆矩阵。
2025-09-15 23:16:12
656
原创 unity实现简单的水墨渲染
ramp贴图和半Lambert光照模型,Noise贴图(主要是为了扰动)使混合更自然。第二个Pass同样进行顶点偏移,但偏移量更大(乘以_OutsideNoiseWidth),并且使用噪声纹理。在片段着色器中,根据噪声值进行裁剪(discard),从而形成断断。偏移量受到噪声纹理(_OutlineNoise)的影响,使得轮廓线宽度不均匀,模拟手绘效果。沿着顶点法线方向将顶点向外扩展,然后渲染成轮廓线颜色。可以阴影颜色,使其变浅,柔化阴影边缘,避免生硬的过渡。续续的轮廓线,模拟手绘的笔触。
2025-07-21 11:41:20
539
原创 URP——RenderFeature(unity2022.3.19f1c1)
RenderFeature 是 URP 中用于扩展渲染管线的模块化组件,它允许你在渲染流程的特定阶段插入自定义渲染操作。每个 RenderFeature 包含一个或多个 RenderPass(渲染通道)。
2025-07-11 21:44:49
1442
原创 unity 动态天空盒
特性真实世界渲染 (大气散射)卡通渲染 (风格化大气)首要目标物理精确性/ 真实感艺术风格/ 情感表达 / 平面感核心原理严格模拟瑞利散射、米氏散射忽略或极度简化物理原理,服务于美学需求色彩基于物理模型计算,过渡自然夸张、主观、非写实,常用高饱和、纯色、渐变深度感平滑的大气透视 (色彩偏移、对比度降低、模糊)简化、色阶化、图形化(色带、硬边模糊、轮廓)体积光柔和、弥散、符合物理形态几何化、图形化、硬边、强对比、可作为图案实现复杂度计算密集 (光线积分、物理参数)相对轻量。
2025-07-03 17:27:34
1553
原创 数据结构——树
char data;return 0;return pA;if(NULL!if(NULL!if(NULL!if(NULL!if(NULL!if(NULL!
2023-12-26 23:15:34
1060
1
原创 线性结构的两种常用应用之二 队列
int *pbase;int front;int rear;}queue;//入队queue Q;int val;init(&Q);printf("出队成功!你需要出队的元素=%d\n",val);elseprintf("出队失败!\n");return 0;
2023-12-19 20:45:18
968
1
原创 离散存储[链表]
N个节点离散分配,彼此通过指针相连。每个节点只有一个前驱节点,每个节点只有一个后续节点手节点没有前驱节点为节点,没有后续节点。专业术语:首节点:第一个有效节点尾节点:最后一个有效节点头结点:头节点的数据类型和首节点类型一样第一个有效节点,之前的那个节点头结点并不存放有效数据加头节点的目的主要是为了方便对链 表的操作头指针:指向头结点的指针变量尾指针:指向尾节点的指针变量。
2023-12-14 00:09:42
482
1
原创 数据结构与算法
数据结构=个体的储存+个体的关系储存算法 = 对存储数据的操作算法解题的方法和步骤衡量算法的标准1. 时间复杂度大概程序要执行的次数,而非执行的时间2.空间复杂度算法执行过程中大概所占用的最大内存3.难易程度4.健壮性(当输入非法数据时,算法也能适当的做出反应或进行处理,而不产生莫名其妙的输出结果)数据结构的地位数据结构是软件中最核心的课程程序=数据的储存 + 数据的操作 + 可以被计算机执行的语言。
2023-12-09 23:38:24
383
原创 malloc ()动态分配
动态分配和释放:动态构造一维数组 假设动态构造一个int型数组 int*p=(int *)malloc (int length); 1. malloc只有一个int型的形参表示要求系统分配的字节数。 2. malloc函数的功能是请求系统length个字节的内存空间,malloc ()动态分配如果请求分配成功,则返回第一个字节的地址,如果分配不成功则返回NULL
2023-12-07 23:01:40
819
原创 C语言结构体
为什么会出现结构体? 为了表示一些复杂的数据,而普通的基本类型变量无法满足要求。什么叫结构体? 结构体是用户根据实际需要定义的复合数据类型如何使用结构体?两种方式:struct student st={ , , }; struct student*p=&st; 1. st.id 2. p->id p指向的结构体变量中的ⅰd这个成员
2023-12-07 10:13:40
372
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅