My Blogs

Vulkan Tutorial 01 Overview

1 Origin of Vulkan 与早期图形API类似,Vulkan旨在为GPU提供跨平台抽象。但传统API设计时受限于当时以固定功能管线为主的图形硬件环境,开发者只能以标准格式提供顶点数据,在光照与着色功能上受制于GPU厂商。 随着显卡架构发展,可编程功能逐渐增强。这些新特性只能通过补丁式整合到现有API中,导致驱动层抽象不理想,需要大量猜测性代码将开发者意图映射到现代架构。这正是...

URP中实现实时面光源

1 Motivation Cozy Space是一个装修模拟类游戏。它具有以下特点: 灵活的房间户型设计:玩家可以构建任意的多边形房间 时间/天气系统:玩家可以修改游戏中的时间段与天气,从而影响房间内的光照与氛围 自由的家具摆放:玩家可以自由地摆放房间中的家具、装饰品 基于以下几点考虑,我最终选择使用实时面光源作为房间中的主要光照来源: 平行光不适合作为封闭室内...

在OpenGL中实现实时Area Light

LearnOpenGL - Area Lights 1 Introduction 虽然我们已经实现了三种经典的光源类型:平行光、点光源、聚光灯,但是这些光源存在一个相同的缺点:无法模拟现实世界中具有真实面积/形状的光源。 2 Problem Description 假设场景中放置了一个邻近几何体的矩形面光源,该光源需向周围发射光线。我们需要在着色点处,将面光源对应的球面多边形立...

LTC Area Light from Heitz's Paper

LTC.pdf - Google Drive 1 Introduction 基于物理的着色的核心在于求解光照方程,即对BRDF与场景光照在半球空间上的乘积进行积分。而本篇博客主要关注多边形光源的着色计算,这意味着需要对球面多边形区域上的BRDF进行积分。这里的球面多边形(spherical polygon)区域表示三维空间的多边形光源投影到着色点法线方向上的半球所形成的区域。 尽管多...

URP中的抗锯齿算法

0 Aliasing 在归纳各个抗锯齿算法之前,我们首先需要明白锯齿出现的原因:连续的几何信号在离散的像素网格上的采样不足,导致高频细节信息丢失,进而出现Aliasing。 具体来说,我们可以从两方面进行考虑: 采样率不足 渲染是对连续几何对象的离散化采样的过程,而三角形的边缘、纹理的细节都属于连续几何 当几何边缘的变化频率(斜边、曲线)超过了像...

URP中的抗锯齿算法

0 Aliasing 在归纳各个抗锯齿算法之前,我们首先需要明白锯齿出现的原因:连续的几何信号在离散的像素网格上的采样不足,导致高频细节信息丢失,进而出现Aliasing。 具体来说,我们可以从两方面进行考虑: 采样率不足 渲染是对连续几何对象的离散化采样的过程,而三角形的边缘、纹理的细节都属于连续几何 当几何边缘的变化频率(斜边、曲线)超过了像...