English

陈屹扬的项目展示

宾夕法尼亚大学, 计算机图形与游戏技术硕士
邮箱: yiyangch@seas.upenn.edu

基于SDF的软光追

使用C++和DirectX 12,主要在compute shader中实现基于SDF的软光追,具体见Github仓库

Vulkan草渲染

基于论文Responsive Real-Time Grass Rendering for General 3D Scenes,使用C++和Vulkan API编写程序渲染草。其中草用贝塞尔曲线表示,并实时计算草受力(风力等)的形变,具体见Github仓库


用于几何优化的创作工具

基于"Shape-Up: Shaping Discrete Geometry with Projections"和"Anderson Acceleration for Geometry Optimization and Physics Simulation"这两篇论文,用c++编写了一个创作工具,输入模型,执行操作,输出模型。操作包括planarization和ARAP deforamtion等。

我们制作了独立程序和Maya插件两个版本。

独立程序视频

presentation视频

PPT


基于物理的渲染器

使用C++和Qt制作了一个基于物理的CPU渲染器。实现了Path Tracing算法,并且使用multiple importance sampling (MIS)来估计路径上每个顶点的贡献。

此程序首先加载一个json格式的场景文件,然后指定采样次数、深度限制和积分器进行渲染。在积分器的选项中,"Surface Normals"只是用来计算法线方向,"Full Lighting"是使用了Path tracing算法的积分器,"Direct Lighting"积分器只使用MIS计算直接光照,可以认为是深度限制固定为1的"Full Lighting"。

同时编写了一个使用相同算法的GPU渲染器。

以下是展示视频,分别是CPU渲染器和GPU渲染器,其中CPU渲染器剪掉了部分渲染过程。


Mini Minecraft

使用Qt作为框架,使用OpenGL制作了一个简单的“我的世界(Minecraft)”游戏。玩家可以用飞行模式或地面模式自由移动,破坏方块或创造方块。地图随机生成,没有边界。下面的视频展示了我们所实现的所有功能。


Maya和Houdini的LSystem插件

制作了一个简单的Maya的LSystem插件和一个Houdini的LSystem插件。输入语法,迭代次数,角度和步长,就可以生成模型。


模型与骨骼编辑器

使用Qt作为框架,制作了一个简易编辑器,用于加载并编辑网格模型与骨架,还实现了鼠标点击选择物体,加中点,三角化,模型细分,蒙皮等操作。


UE4小游戏

使用UE4引擎制作了两个小游戏

这个游戏有点类似于“纪念碑谷”,利用了特定视角下的视觉错觉。你需要不断改变视角,发现新的“连通的”道路,并最终到达终点


这是一个VR游戏,可以视为3D版的三维弹球。你需要使用控制器击打球,防止其落到你身后,并使球撞到各种物体与机关,以获得分数。


有趣的渲染效果

使用OpenGL实现了一些有趣的渲染效果。

顶点变换:

后处理:


顺向运动学(FK)与反向运动学(IK)

实现了FK和一些IK方法,比如几何方法,CCD算法和矩阵伪逆算法。在人物的走路循环中应用了IK。


固定的注视点渲染

在Unity中通过丢弃并重建像素,实现了一种简单的固定注视点渲染的方法。