Marvel's Guardians of the Galaxy
Before the story
Met Cosmo
Nova!
Mom
Failed to Convince the World-mind
Adam Warlock
Space Jump
Suit up!
Best Scene
A different Star-Lord
Final Battle
Boss Rocket
计算机辅助几何设计(2):Bézier样条曲线
1. 简介之前我们已经介绍过Bézier曲线的原理与实现方法,但由于Bézier曲线的一些问题,例如:
高多项式次数
$n+1$个Bézier控制点将生成一条$n$次多项式表达的Bézier曲线
全局,伪局部性
Bézier曲线在始末两控制点进行插值,在中间控制点进行拟合,当控制点增加时,曲线形态难以控制
因此我们引入的Bézier样条曲线来解决上述两个问题。在了解Bézier样条曲线的工作原理之前,需要弄清楚几何设计中连续性的基本概念。
1.1. 连续性的基本概念1.1.1. 参数连续性给定两条曲线:$$\begin{align}&\pmb x_1(t)\ \mathrm{over}\ [t_0,t_1]\\\\&\pmb x_2(t)\ \mathrm{over}\ [t_1,t_2]\end{align}$$若$\pmb x_1$和$\pmb x_2$在$t_1$处的0阶到$r$阶导数向量均重合,则若$\pmb x_1$和$\pmb x_2$在$t_1$处$C^r$连续
常见的参数连续性有:
$C^0$:位置变化连续
$C^1$:一阶导数在交界处连 ...
计算机辅助几何设计:Bézier曲线
1. 基本原理Bézier曲线于1962年,由法国工程师Pierre Bézier所提出,用于汽车的主体的几何造型设计。
二阶Bézier曲线如下图所示:
其几何构造流程如下:
依次选定控制点$A$、$B$、$C$
在$AB$上选定一动点$D$,设参数$t=\frac{AD}{AB}$,则$t\in[0,1]$
在$BC$上构造一点$E$,满足$\frac{AD}{AB}=\frac{BE}{BC}=t$
连接$DE$
在$DE$上构造一点$F$,满足$\frac{DF}{DE}=\frac{AD}{AB}=\frac{BE}{BC}=t$
当$t$从0到1变化时,点$F$构成的轨迹即为二阶Bézier曲线
从解析几何角度看,设控制点$A$、$B$、$C$坐标依次为$\pmb p_1$、$\pmb p_2$和$\pmb p_3$,则点$D$可表示为$\pmb p_4 = (1-t)\pmb p_1+t\pmb p_2$,点$E$表示为$\pmb p_5=(1-t)\pmb p_2+t\pmb p_3 ...
场景编辑器:鼠标拾取
鼠标拾取是引擎场景编辑器的一个非常基础的功能,通过点击屏幕像素选择场景中的物体,能够使用户更加方便地选择物体、编辑场景。利用空闲时间我将IlumEngine场景编辑器的鼠标拾取功能做了一个优化,从原来的基于Ray Casting方法到现在所使用的G-Buffer回读的方法,两种方法各有优劣,下面详细介绍这两种鼠标拾取的方法。
1. 基于Ray Casting的鼠标拾取方法基于Ray Casting的鼠标拾取是一种几何方法,其基本原理如下:
由鼠标点击的屏幕像素坐标,生成一条从摄像机发射的射线
对场景作求交计算(与Ray Tracing中的相交检测相同)
寻找与光线相交的最近包围盒,其对应的物体即为鼠标将选中的物体
已知我们已从窗口/UI系统中得到鼠标点击的像素坐标click_pos,首先将其转化为屏幕空间坐标:
12float x = (click_pos.x / scene_view_size.x) * 2.f - 1.f;float y = -((click_pos.y / scene_view_size.y) * 2.f - 1.f);
我们希望利用拾取点的屏幕 ...
实时渲染优化技术
前段时间初步完成了个人图形引擎IlumEngine的第一次性能优化。此次优化主要集中在几何渲染与纹理系统上,主要内容大致有:
Vertex/Index Buffer Packing
GPU Driven Rendering
GPU Based Culling
Frustum Culling
Hierarchy Z Buffer Occlusion Culling
Cone Back Face Culling
Multi Draw Indirect
Bindless Texture System
利用现代API灵活的可操作性,解决了几何阶段大量DrawCalls带来的CPU压力,以及提高顶点、索引数据的利用率,并且该架构也有利于后续集成实时光线追踪等功能
1. IlumEngine简介IlumEngine是我目前正在开发的一个玩具图形引擎,名字取自《星球大战》中凯伯水晶的产地伊冷(后传中被第一军团改造为弑星者基地),引擎使用Vulkan作为图形API(后续或重构为RHI层以支持DX12甚至向下兼容OpenGL),目的是锻炼软件系统工程能力和作为学习图形学经典技术复 ...