My Blogs

Unity中实现Hex Tiling

1 Motivation 传统的方形纹理平铺通常会带来很明显的纹理重复的视觉问题,尤其是在地形渲染的情况下,如下图所示: 通过Hex Tiling的手段,则可以在很大程度上减弱该问题,如下图所示: 传统的纹理平铺基于方形网格),而 Hex Tiling 使用六边形网格。在六边形的边缘区域,通过计算像素到相邻六边形中心的距离,动态混合多个纹理变体,实现平滑过渡。 此外,使用...

Unity中的法线混合

Blending in Detail 1. 法线贴图 在了解法线混合之前,我们首先需要了解法线贴图自身的含义:法线贴图通过 RGB 通道的三个分量存储表面法线的方向信息,这些分量直接决定了光照计算的细节表现。 1.1 切线空间 法线贴图通常基于 切线空间(Tangent Space),而非模型或世界空间。也就是说,RGB通道分别表示切线空间中的三个轴向的向量: R通道 → ...

在Unity中实现三面映射Shader

Triplanar Mapping 实现思路 在常规的纹理映射中,我们用于采样纹理的UV来自于网格体。但某些情况下,网格体中并没有可用的UV,例如程序化几何体,或者实时生成的地形系统。此时,我们需要其他的方法来实现纹理映射,一种常见的思路是使用三面映射。 三面映射的核心思路是利用片段的世界空间坐标来生成UV,并在不同的轴向加以不同的权重,从而生成合适的UV。 实现细节 简...

PBR Chapter in LearnOpenGL

1 Theory 一个PBR光照模型需要满足下面三个条件才能被认为是“基于物理”的: 基于微表面模型 满足能量守恒 使用基于物理的BRDF 1.1 Microfacet Model 在微表面理论中,所有的表面在微观层面上都可以通过一些“微小”、“完美镜面反射”的微表面进行描述。根据表面的粗糙度不同,这些微表面的朝向也会有所区别: 如上图所示,表面越粗糙,那么微表...