自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 卡通渲染总结《一》

卡通渲染属于非真实化渲染的一部分,主要在于其边缘的检测和内部色块着色。

2023-12-05 18:58:21 134

原创 实现了一个PRT渲染的效果

采用了经典的康奈尔盒子更直观展示光照的变化。

2023-12-02 21:45:18 55

原创 【延迟渲染小计】

延迟渲染个人小结

2023-12-18 16:45:21 350

原创 《Global illumination with radiance regression functions》

论文的主要思想是利用了神经网络的非线性特性去拟合全局光照中的间接光照部分,采用了基础的2层MLP去训练,最终能实现一些点光源、glossy材质的光照渲染。传统的PRT只能表示低频的全局光照信息,大部分不能处理glossy的BRDF反射,就算能处理也过于计算复杂。我们在拥有了能预测间接光照的模型后,就可以在实时渲染中计算完直接光照后进行叠加即可。总结一下最近看的这篇结合神经网络的全局光照论文。首先是原文的介绍: 4个三维向量:着色点位置。,再加上BRDF附带的albedo等参数。,间接光照对应视角方向。

2023-12-16 16:18:40 117

原创 Unity光照模型实践

上图中,左边两个为Phong基础漫反射模型,分别采用了逐顶点的光照着色和逐像素的光照着色,逐顶点的优势就是需要计算计算量较少,因为顶点数可能小于像素的数量。光照作为3D渲染中最重要的部分之一,如何去模拟真实环境的光照是重要的研究内容,但是现实环境光照过于复杂,有很多经典好用的光照模型去近似真实光照。这类模型能实现基本的光照效果,但是由于没有考虑物体材质,遮挡,光线弹射等原因无法实现更细致真实的光照效果。Blinn-Phong模型就是对高光计算的一个简化,引入半程向量取代反射光的计算 效果基本差不多。

2023-12-12 22:51:49 205

原创 卡通渲染总结《三》

接上回的描边技术,接下就是其绘画(The Painter)的技术。Painter 的目的是从 3D 模型中生成平面图像。使用这种方法,可以通过改变和以及着色计算的权重因子来产生各种样式。

2023-12-07 16:49:06 66

原创 实现了一个简单的卡通渲染效果

简单参考下实现了基本卡通着色渲染效果:主要包含了描边和内部色块开始构建了一个场景用于展示光线的变化,并放置了一个角色。npr_1接下去加入描边的效果,可以感觉到人物轮廓变明显了。npr_2然后再加入了内部的色块变化并调小了点描边的大小。可以看到人物有了一定的风格颜色。npr_3由于描边的方式是过程式几何轮廓线渲染,其核心是两个Pass,第一个用于渲染背面的面片也就是将其顶点延发现方向移动一定距离,第二个Pass渲染正面的内容。

2023-12-06 13:30:54 69

原创 卡通渲染总结《二》

关于技术的方面,一方面就是其轮廓边缘检测:主要的方法可以被分为基于图片空间和对象空间,对象空间比图片空间会多一些立体坐标位置的信息。

2023-12-05 22:04:43 106

原创 使用PCSS实现的实时阴影效果

PCSS的技术可以使得阴影呈现出近硬远软的效果,并且能够实时实现。其核心理念是通过模拟光源的面积来产生更自然、更柔和的阴影边缘。

2023-12-02 22:05:24 370

原创 透明物体天空盒场景渲染结果

天空盒渲染

2023-12-02 20:59:52 40

原创 【图形学数学基础】行列式几何

第一个向量是 (2.33, 0.67) 第二个向量是 (0.67,2.00) 两个向量构成了一个平行四边形,而这个平行四边形的有符号面积就是行列式的值,这个值可正可负,当其被翻转时就是负值。三维中,行列式表示平行六面体的体积,三个变换的基矢量(每一行) 作为边。参考:《3D数学基础-图形和游戏开发》

2023-04-14 17:06:55 146

原创 【图形学数学基础】变换

这是一个摘要

2023-04-12 15:47:07 97

原创 【图形学数学基础】矢量

矢量的大小指矢量的长度,矢量可以具有任意非负长度。矢量的方向描述矢量在空间中所指方向。点积可以给出两个矢量的大致方向,如果点积大于0则在同侧,等于零垂直,小于0夹角大于90度。是构成2D,3D数学的正式数学单元,在数学中称为向量,在几何物理中称为矢量。与点积不同,叉积只能在三维中使用,并且顺序是不可交换的,叉积产生的结果是。通常指的是垂直某物的矢量,由于垂直不需要长度,所以常用单位矢量。零矢量表示为0,其并未任何方向和长度,表示一种无位移的状态。两个矢量的点积是相应的分量乘积之和,得到的是一个。

2023-04-08 12:58:21 905

原创 【图形学数学基础】第一章

计算机图形学第一定律:只要看起来是对的,那么他就是对的。

2023-04-06 16:14:35 346

原创 【论文阅读】Cybersecurity Threats in Connected and Automated Vehicles based

自动化驾驶联邦学习

2022-10-05 08:41:48 495 1

原创 OpenFeign异步线程调用丢失请求头问题排查记录

openFeign异步调用线程出现了丢失Content-type

2022-04-27 22:10:05 1837 1

原创 JVM垃圾收集器学习总结【经典版】

JVM垃圾回收器总结

2022-04-05 20:40:43 560

原创 在系统经巨量流量洗涤后的记录与反思

高并发反思

2021-08-09 15:01:33 346

原创 PAT 甲级 1046 Shortest Distance (20 分)

题目分析就是有个环路 判断两点间最短距离 一开始想用二维数组 发现根本跑步起来 后来直接判断两点两个方向的距离 正向和负向 负向用总长度减去正向就好代码 #include "iostream" #include "cmath" using namespace std; int main() { int num; cin >> num; int sum[100010]; int total =

2021-08-02 17:12:07 59

原创 RPC 远程过程调用步骤

2021-07-21 14:38:18 89

原创 PAT 甲级 1143 Lowest Common Ancestor (30 分)

题目题目跳转 1143 Lowest Common Ancestor (30 分)分析看到这道题首先想到的是构建好一颗BST然后查找两个节点的路径从尾部进行遍历找到第一个相同节点就是公共的最小节点。但是有一个点始终是超时的过不去。后来找了资料换了种思路,寻找两个点范围内的点[u,v]范围内,就是最小公共节点。code#include <iostream>#include <stdio.h>#include <map>using namespace std

2021-02-16 14:26:29 140

原创 PAT 甲级 1155 Heap Paths (30 分)

题目题目跳转 1155 Heap Paths (30 分)分析题目大意是判断给定的层级遍历的二叉树是不是堆,是的话是最大堆还是最小堆。这里看完了算法笔记上对堆的分析,有一个要点,就是可以用数组表示堆 用n*2表示左节点2n+1表示右节点。然后就根据定义写30分就到手了。code#include <stdio.h>#include <iostream>#include <vector>using namespace std;const int M = 1

2021-02-15 12:56:25 117

原创 PAT 甲级 1139 First Contact (30 分)

题目题目跳转 1130 First Contact (30 分)分析这个题目有不少的细节,大意是两个人相爱的人通过自己的同性朋友来发送爱意,两个中间者必须也是朋友,然后输出这两个中间人的id。需要对同性朋友的判断,这里又因为ID可能是+0000或者-0000读取的话可能都是0判断不出来,可以用他们的长度来比较下相同就算是同性。结果的两个中间人需要按照主动示爱的人的性别放在前面,这里可能两个都是男的或者女的…那就别管了把前者的朋友放前面就好了。之前想着用"id:id"作为string存储关系,

2021-02-12 20:00:38 273 1

原创 PAT 甲级 1014 Waiting in Line (30 分)

题目分析题目的大意就是模拟银行排队办理业务的场景。有几个注意点用户在17点前已经在办理业务了,就算已经到17点也继续办下去客户每次都是选择最短的队列 之前选择了从0开始第一个队列 总有一个点过不去封装了一些方法 代码搞得很冗长了。。Code#include <stdio.h>#include <iostream>#include <vector>#include <queue>using namespace std;struc

2021-02-10 16:35:41 78

原创 PAT 甲级 1013 Battle Over Cities (25 分)

直接跳跃到了1013 因为前面的没有啥问题就过了题目分析这是一道用来图的题目,初步就是使用BFS查找在删除了一个节点后剩下的 整块数num需要连接线的最少值就是 num-1;Code#include <stdio.h>#include <iostream>#include <map>#include <vector>#include <algorithm>#include <queue>using namesp

2021-02-10 13:14:03 68

原创 PAT甲级 1004 Counting Leaves (30 分)

题目分析想着试试 最近用的BFS算法 加上队列 然后就ac了 代码有待优化 但看了下结果感觉还挺快的code#include <stdio.h>#include <iostream>#include <vector>#include <queue>using namespace std;struct Node{ int sun; int lnum; vector<int> leafs;} nodes[

2021-02-08 19:56:14 81

原创 PAT甲级 1003 Emergency (25 分)

题目思路没有用网上其他人写的dijkstra方法 采用了 dfs 算法code#include <stdio.h>#include <iostream>#include <math.h>using namespace std;// 每个城市对应物资 城市之间举例矩阵int goods[501], len[600][600] = {-1};// 城市数 道路数 当前位置 救援位置 最小路径数 最大补给数 最小长度int cityn,roadn,cur

2021-02-08 15:30:14 102

原创 PAT甲级 1002 A+B for Polynomials

code#include <stdio.h>#include <iostream>using namespace std;int main(){ double wei[1001] = {0}; int time = 0; for(int f=0;f<2;f++){ int n; cin >> n; for (int i = 0; i < n; i++) {

2021-02-07 20:59:36 73

原创 微服务之apollo获取配置原理源码分析

代码边缘如果网络的边缘是设备那么代码的边缘可能是调用api的地方最近有使用到携程的微服务配置服务apollo,根据介绍在客户端使用的是client来获取配置代码如下: Config config = ConfigService.getAppConfig(); config.addChangeListener(configChangeEvent -> { Set<String> changedKeys = configChangeEvent.c

2020-11-04 12:58:05 1056

原创 引入tkmapper产生的一个bug

在请求接口后返回一个问题nested exception is org.apache.ibatis.builder.BuilderException: Error invoking SqlProvider method (tk.mybatis.mapper.provider.base.BaseSelectProvider.dynamicSQL). Cause: java.lang.InstantiationException: tk.mybatis.mapper.provider.base.Bas

2020-10-30 17:12:45 166

原创 源码分析 Dubbo异常拦截导致的bug

介绍今天在初始化新建一个项目的时候,出现了一个问题让我思考了半天。项目是spring cloud 项目。刚开始的时候就是需要做一个全局的异常拦截操作,咔咔咔按照常规的写法写好了异常拦截@ControllerAdvice加上@ExceptionHandler简直不要太好用。但是在测试的时候出问题了。我使用消费者调用生产者的时候无法获取到我自定义的异常code和msg。在product项目抛出了一个继承RuntimeException的自定义异常BizException但是消费端返回的却只有父类的ms

2020-10-29 10:50:12 214

原创 Spring+注解+Redis 实现接口的幂等性

背景在一些业务场景中经常会出现一个请求还没执行完就有另一个相同的请求进入导致业务逻辑混乱的问题,对于这类问题可以使用分布式锁的手段根据业务的请求来判断是否相同来拦截,解决方案于是本人参考网上的内容写了一个分布式锁的注解方式拦截。具体流程如下:代码先创建一个注释import java.lang.annotation.*;import java.util.concurrent.TimeUnit;@Target({ElementType.METHOD}) // 作用类型为方法@Retenti

2020-10-28 13:00:05 246

原创 Oracle 数据库的行锁

描述最近在项目中碰到一个问题,就是一个模块请求另一个模块时,发现请求总是没有返回数据。第一时间查看服务器日志后发现是数据库的更新异常update语句居然无限期的阻塞住了自己本身对Oracle数据库并不熟,查看了下StackOverFlow人的回答,说是可以把相应锁住的sid查出来进行kill。 SELECT b.owner, b.object_name, a.session_id, a.locked_mode

2020-09-28 15:26:38 867

原创 一次防止重复请求出错的设计

关于校验重复请求的思考背景这几天碰到了一个问题,一个接口里面原先写了很多的业务,当然我们这里不讨论业务,姑且称业务为A、B、C,ABC是一个串行的业务,上层业务依赖于上层返回的数据。大致是下面这样。在我接手这部分代码时,已经是各种代码业务冗余在一起,并且这三个业务很可能其中一个会失败,这些都不说了,尤其是之前版本在并发时会产生一些奇怪的问题,接手这个的时候压力山大,差点选择放弃观察。不过转念一想,这也是一个没遇到过的问题,解一解也对自己有帮助(混口饭吃)。想法在看到原先的代码之前我都是觉得有

2020-09-07 16:35:46 125

原创 http 调用出错最终发现结果

接口请求问题描述在请求接口的时候使用postman请求能正常获得200状态码正常请求但是在使用java的httpclient发起post请求时却返回400 Bad Request明确了使用的header都一样 就一个Content-Type application/json分析原因是我使用了的调用方式将参数作为params传入在修改到body里后成功具体逻辑是这样 代码实现需要自己思考 //设置body信息 String reqJson = JSON.toJSONString(req

2020-07-31 14:44:26 264

原创 Guava EventBus 优雅使用案例

介绍EventBus 是谷歌Guava包里的一个类,使用起来相当于观察者模式,可以设置订阅和取消订阅,也可以进行事件分发。下面主要以Spring框架为例代码实现:代码文件夹结构总共6个类代码这是一个Listenter 用来监听事件import com.google.common.eventbus.EventBus;import org.springframework.stereotype.Component;import javax.annotation.PostConstruct;

2020-07-23 12:54:15 877 1

原创 MySQL中的 int(1) 和 int(10) 有什么区别?

答案是:没有什么区别!!!尝试你可能会认为这个后面的数字可以限定int的长度,但是并不能这样限定。首先我们创建一个表create table finally ( id int(20) PRIMARY key not null, gender int (1) not null ) ENGINE=INNODB 然后执行下面的插入语句insert into finally values (1000,1000);按照原先的道理,gender只能是一位,1000是不能插到数据库的,但是结果

2020-06-03 11:05:41 1437 1

原创 记录一次Netty源码追踪 探寻为什么Select的实现是KQueueSelectImpl。

发现问题在netty启动的时候会涉及到如下的代码ServerBootstrap bootstrap = new ServerBootstrap();bootstrap.group(bossGroup, workerGroup)// 以下省略无关代码netty的服务端会有两个线程组,第一个group用来处理连接,第二个group用来处理channel的IO事件。通过对一些例子的观察,大家都会声明一个NIO的线程组 private final EventLoopGroup bossGroup =

2020-06-02 11:32:53 496

原创 Java类不想被实例化的实现方式

在我们的的代码中会有一些类只想用于被使用它的静态方法,比如一些工具类,一些提供服务的类,所以他们并不需要实例化出来,在看了一些源码后发现了一些实现的方案。1 构造器变成私有2 在构造时抛出异常...

2020-05-24 08:01:28 756

原创 Reactor模式到底是什么?和NIO有什么关系?为什么Redis,Netty都用到了?

前言最近在学习Netty相关知识,碰到NIO和一大堆概念实在搞不清楚,为了搞清楚概念必须针对性的学习下了。多种模型首先,我们了解下select/poll/kqueue/epoll四种模型的特点,这些都是系统来进行实现的方法。这里关注下SelectSelect 主要是用来阻塞的接收客户端传来的请求,能同时监听1024个。NIO模型NIO也叫做同步非阻塞IO,有些地方也叫做New IO。对于传统的IO,每当获取到一个连接就会有一个线程与之所对应,就像一个顾客对应一位服务员,不管客户有没有需

2020-05-23 17:00:06 2147 2

空空如也

空空如也

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

TA关注的人

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