基于图像的光照-漫反射辐照度
前言 KongEngine的Vulkan接入还在进行中。好消息是已经能够实现一个基本的Vulkan渲染流程,将简单的带有贴图模型渲染到场景中了;坏消息是,这就是他目前利用Vulkan能做到的所有事了。 其实按照目前的进展,是可以准备一篇文章来讲讲接入Vulkan这段时间的一些内容了。不过思来想去,还是计划延后,等更加完善了再来详细说说。为了尽量实现我一周一篇文章的计划,也想填填以前的坑,今天这篇文章打算讲讲基于图像的光照技术:IBL。 什么是IBL IBL 即Image-Based Lighting,是基于物理的渲染(PBR)中一种重要的光照技术。传统的光照计算通常是基于光源的,例如点光源、方向光等,这些光源模型比较简单,难以模拟出复杂的真实世界光照环境。而 IBL 则是利用环境图像(通常是高动态范围图像,HDR)来捕捉场景周围的光照信息,将其作为场景中物体的光照来源,从而为物体提供更真实、更自然的光照效果。 IBL 的核心思想是将环境光照视为无数个微小的光源,这些光源分布在物体周围的各个方向上。通过对环境图像进行采样和处理,可以计算出物体表面从各个方向接收到的光线能量,进而模拟...
OpenGL优化技巧之DSA
前言 最近工作依旧是处于比较繁忙的阶段,由于我突然被委以一项不大不小但是进度十分紧急的任务,导致我每天所能挤出来更新的时间是越来越少了。KongEngine的重构有所进展,现在已经将最基础的模型渲染抽象了出来,并且实现了Vulkan渲染的一个简单流程,但是离最终目标还有一定距离。 以前的一些坑(IBL、SSAO)也没有什么精力来填了,这篇文章打算“水”一期,讲讲一个关于OpenGL优化的非常小的一个方面,Direct State Acess(DSA)。 为了聊明白Direct State Acess(以下简称DSA)是什么,以及为什么它可以作为一种优化OpenGL的方法,我们首先需要理解一个概念,即:OpenGL本质上是一个状态机。 OpenGL本质上是一个状态机 该如何理解这句话呢?我们来思考一下,状态机最核心的组成部分是各个不同的状态,以及状态之间的逻辑转换,对于到OpenGL可以做以下的理解: 状态:OpenGL有大量可配置的状态。例如,绘图模式(点、线、三角形等)、光照模型(是否启用光照、光源位置和属性等)、纹理参数(纹理过滤方式、纹理坐标模式等)、当前绑定的帧缓存以...
Gerstner波形
前言 好久不见,最近正处于工作比较忙的阶段,每天为了应付工作上的事情就已经筋疲力尽了。为了得到更好的渲染效率,KongEngine目前正处于比较大的重构之中。同时最近我开始为KongEngine增加对Vulkan的支持,一起都还处于最初的混沌之中,所以KongEngine的渲染特性目前没有什么增加,没有什么可写的。我计划等一起都尘埃落定在详细的介绍一下。 今天这篇文章,算是对之前水面渲染的一个小小的延伸,也是填了之前埋得一个小小的坑。 生成波浪 我在《水面效果-1》和《水面效果-2》这两篇文章中,我简单介绍了一种水面渲染效果的方法。这种方法最后的结果能输出出不错的水面效果,但是有一个比较大的缺陷就是,这种方法渲染出来的水面是平的。 尽管在这两篇文章中,我们尝试使用了几种方法来让水面产生波纹扰动,包括dudv map和normal map。但是水面的mesh最终只是一个平面,如果你以相对平行的视角去看的话,水面是没有起伏的。 如何解决这个问题呢?那有个很简单的思路,我们只要让水面不只是一个平面,让他是一个有波纹扰动的mesh就可以了。在《水面效果-2》的文章的最后提到了Gerstn...
DeepSeek-R1本地部署
前言 蛇年新年好。最近因为过年有很多其他事情需要忙,KongEngine的重构工作也暂停了,文章也有一阵子没有更新。今天是大年初六,总算是回到了深圳家,自己也可以稍微的放松了一下。 今年过年的这段时间,最大的新闻应该就是DeepSeek了。他前几次模型的发布还不显山不漏水的,这次R1推理大模型的发布和开源不仅仅震动了科技圈、AI圈,而是完完全全的出圈了。我在过年的时候也花了很长时间去使用它的应用,它确实展现了很惊艳的效果,但是由于各方面的原因,它的网站确确实实不够稳定,经常会卡住需要重试。于是我就想尝试着本地部署。 Ollama 这次部署我使用的是Ollama。 Ollama简介 Ollama 是一个开源的本地大型语言模型运行框架,旨在简化在本地运行大语言模型的过程,降低使用门槛。它支持 Llama 2、Mistral、Gemma 等众多主流开源模型,能将模型权重、配置和数据捆绑为 Modelfile 进行统一管理。 Ollama 具有自动硬件加速功能,可充分利用系统硬件资源,还支持多操作系统,提供简单的命令行界面和 REST API,拥有丰富的预构建模型库,具备轻量级、可扩展...
水面效果-2
前言 在之前的文章,我们已经结合了反射纹理和折射纹理,有了一个初步的水面效果了。今天这篇文章我们会继续深入,优化水面的效果。 菲涅尔现象 如果你对基于物理的渲染管线(PBR)比较熟悉的话,那很有可能你已经知道菲涅尔现象(Fresnel Effect)是什么了。简单的来说,当光线照射到两种不同介质(例如从空气照射到玻璃或者从水照射到空气)的分界面时,一部分光会被反射,一部分光会折射进入另一种介质。菲涅尔反射描述了反射光和折射光的比例与光线入射角之间的关系。 根据菲涅尔方程(Fresnel equations),反射率会随着入射角的变化而变化。当光线垂直(入射角为 0°)入射到界面时,反射率是一个固定的值;而当入射角增大时,反射率会逐渐增大。当入射角接近 90°(掠射角)时,反射率趋近于 1,几乎所有的光都会被反射。 在渲染水面时,当视线垂直于水面,可以看到水下一定的深度,此时光大部分折射进入水中,反射的较少。但当视线与水面夹角很小时(接近平行于水面看),水面就像一面镜子,反射很强。这就是菲涅尔现象在起作用。 下面的两张截图表现了这个效果。 那么该如何实现这种效果呢,很简单,在渲...
水面效果-1
前言 在经过了逐步的迭代,KongEngine中已经接入了不错的地形和体积云效果(体积云的相关文章我还在整理计划当中,打算后续和IBL连着一起写),所谓好山好水好风光,有了山和云,接下来我的计划便是将水的渲染纳入KongEngine的能力中。 水面的渲染 下面我们来介绍如何实现一个简单的水面渲染效果。 水面渲染的构成 水面的渲染主要由两部分构成:反射和折射,分别对应着水面之上和之下的内容。我在之前已经有文章分享过屏幕空间反射(SSR)的实现细节,但是对于水面来说,反射的范围一般来说是会更大的,包含的内容也会更多。如果仅仅是只能反射屏幕空间的内容的话渲染效果其实并不理想,因此对于水面我们这里使用另外一种方式来实现反射效果。 基础能力 为了实现水面的渲染,需要下面几个基础能力的帮助。 帧缓冲对象(Framebuffer Objects) 在实现前面的很多渲染效果的过程中,我们多次使用了帧缓冲对象,应该对这个很了解了。我们使用的延迟渲染技术就和帧缓冲对象是分不开的。 如果不熟悉这个的同学可以去翻看一下前面的文章,简单的来说帧缓冲对象能让我们将场景内容渲染到它上面,经过处理后再输出到屏...
浅谈数字人仿真的渲染技术(四)
前言 这篇文章是我在OGEEK上做过的《浅谈数字人仿真的渲染技术》分享的最后一部分,这一部分的内容主要包含的内容是**非真实感渲染(Non-photorealistic Rendering, NPR)**技术,通常这项技术会被用在渲染卡通风格的内容。 非真实感渲染 前面的渲染技术一般都是用于高真实度数字人的渲染,接下来我们来介绍一下NPR。 什么是NPR NPR,我们一般指的是非真实感渲染(Non-photorealistic Rendering),它是相对于**真实渲染(Photorealistic Rendering)**的。 真实感渲染的目的在于渲染出照片级别的高真实度画面;而非真实感渲染,他的目的多种多样,它可以模拟艺术化的绘制风格,呈现出手绘的效果。 这是游戏”犬神“的画面,它的渲染模拟出一种独特的水墨风格。 这是游戏”荒野之息“的画面,它就有点类似于日本动画的风格。 他们显然不是想游戏画面看起来和显示世界一模一样的,所以利用NPR来突出自己独特的美术基调,展现不同的美术风格,从而吸引玩家。 NPR在数字人的体现 在数字人的概念在互联网中异常火热的时候,业界也出现了...
浅谈数字人仿真的渲染技术(三)
前言 这篇文章是我在OGEEK上做过的《浅谈数字人仿真的渲染技术》分享的第三部分,在这一部分我会着重介绍数字人的毛发渲染的技术。 毛发 在前面的内容,我们大致了解了一些皮肤相关的技术,接下来我们再简单了解一些毛发的渲染算法。 和皮肤一样,其实毛发的构造比我们预想的也要复杂许多,它包括表皮的角质层,角质层里面的皮质,以及发髓。 角质层有坑坑洼洼的表面,而且头发的坑坑洼洼具有较为统一的指向性,从发根指向发尾,简化后的头发模型如下图所示。 Kajiya-Kay模型 下面我们来了解一下可能是游戏中毛发渲染最常用的毛发渲染模型,Kajiya-kay模型。 简介 首先需要说明的是,Kajiya-Kay模型是一个基于经验的模型,也就是说这个模型并不是根据头发的物理结构得出的,所以会有一些并不真实的地方。 作为一个1989年的shading model,它具有算法简单,便于理解,计算量小。且头发的主高光的性价比高,效果明显。 那么kajiya-kay模型的一个核心就是各向异性高光,不知道有没有对各向异性不熟悉的朋友,这里简单说明一下,各向异性就是物体的某些特征根据方向的不同而有所变化。 如下...
浅谈数字人仿真的渲染技术(二)
前言 新年好。这是接着上次关于数字人渲染技术的第二部分,今天的这部分的分享,我会开始介绍一些关于数字人渲染的实际技术。 数字人渲染技术介绍 接下来我们来聊一下数字人渲染技术方面的课题,我本身其实在这方面也不是什么大牛,在这里只是把一些我所学到的东西分享给大家。本次也不涉及到过深的技术讨论,如果想要对某个算法的细节想做更深的探讨,我们可以做后续的讨论。 在这里我提前预告一下,接下来的分享会包括哪些方面。 首先是会介绍一些数字人常用的渲染技术,比如皮肤,头发的渲染技术。在介绍这些渲染技术的时候,我主要会解释一下这个算法的构成,他是基于哪些理论而得出的算法,他的流程大致是怎样的,以及效果的一些展示。 本次分享不会包括的方面有: 数学公式推导,当今很多渲染的算法都会遵循实际的物理意义,大多包含较为复杂的数学公式的推导,以辅助实现最后的算法。我们今天的分享是浅谈,所以不会讲的那么深,要是专注于数学公式推导的话会花上非常多的时间,门槛也会提升很多,这块并不是今天的目的。 另外一个是不会Review相关的Shader代码或者材质蓝图连线,今天主要是希望大家理解好概念就好,代码这些在理解...
浅谈数字人仿真的渲染技术(一)
前言 在2022年12月,我受邀在OGEEK上做过一次关于数字人渲染技术的分享,名为《浅谈数字人仿真的渲染技术》。为了这次分享我查阅了大量资料做了很多准备,但是很不幸的是在分享的前两天我便感染了新冠,身体开始发烧外加喉咙开始隐隐作痛。为了不影响OGEEK的流程我便在病情还未恶化的时候将分享提前录了下来,以播片的形式参加。 这段经历确实还挺难忘,近期又翻到了这篇准备的PPT,和演讲的录屏,于是想将这部分内容做个记录,整理成文章分享出来。 由于PPT内容还是比较多的,哪怕是精简后的版本也还有50多页,于是乎会准备做成一个系列,当初精简掉的部分可能也会想办法补充回来,让内容尽量的充分。 数字人简介 数字人的定义 目前数字人缺乏一个统一的标准定义,我们从它的发展起源,从技术角度上选择一个最宽泛最简洁的标准:由计算机生成的人类。 中国人工智能产业发展联盟发布的《2020年虚拟数字人发展白皮书》中给了一个更加详细的定义:虚拟数字人意指具有数字化外形的虚拟人物,除了拥有人的外观、人的行为之外、还有拥有人的思想,具有识别外界环境、并能与人交流互动的能力。 那其实这个定义里面,也描述了数字人相关的...











