天空盒,以及新的Shader编译流程
前言最近黑猴很火爆啊,一直都在玩黑猴,周末才得闲把之前做完的天空盒总结一下,先来看一下效果:
实现了立方体贴图和球面环境映射两种天空盒的方式。此外,加入了docking功能,它现在看起来更像个编辑器了。
在本篇文章中,你可以看到:
如何使用Vulkan实现天空盒
一个新的Shader编译流程
内容不多,原理也很好理解。
上一篇文章:点光源的阴影 | 喜多喜多のBlog (kita-blog.vercel.app)
本篇:天空盒,以及新的Shader编译流程 | 喜多喜多のBlog (kita-blog.vercel.app)
上篇文章之后,本篇文章之前做的大家看上面的结果,可以看出来它是在ImGui界面上绘制了。
这是因为我将原本绘制到Swapchain Image上的场景改成了绘制到自己创建的backbuffer上,这样绘制完成后就可以在ImGui里以图像的形式绘制出来。
更像一个编辑器!
天空盒实现天空盒的基本想法天空盒相当于远处的一个“背景”,因此我们可以绘制一个立方体,让它的位置永远在相机空间的原点,它的六个面永远在深度值为1的地方,这样就可以获得一个天空盒了。
实现天空 ...
点光源的阴影
一、前言其实点光源的阴影我上周已经搞好了,只是在忙些其他事情,没来得及写文章总结,目前稍微闲了一点,就来说说我是如何实现的点光源的阴影。
先来看看效果:
本篇文章你将了解到:
Vulkan中的Push Constant
Cubemap
我如何实现的点光源阴影
本篇文章的代码在RickSchanze/ElbowEngine at 点光源的阴影 (github.com)
上一篇:点光源(Specialization Constant)以及变换 | 喜多喜多のBlog (kita-blog.vercel.app)
本篇:点光源的阴影 | 喜多喜多のBlog (kita-blog.vercel.app)
下一篇:天空盒,以及新的Shader编译流程 | 喜多喜多のBlog (kita-blog.vercel.app)
二、实现阴影的基本想法
我们首先从光源位置看向场景,记下此时距离最近的距离。比如对于上图的两个方向,上面那条记录的是C到光源的距离,下面记录的是B到光源的距离。
然后在渲染物体时,假如我现在在渲染A点,那么计算A到光源的距离,同时取A到光源这个方向的、刚才提到的记 ...
点光源(Specialization Constant)以及变换
一、前言由于之前ElbowEngine的代码一直都是在做重构(Vulkan官方教程直接写一起了,没有可复用性而言),因此没有增加新东西,也就没写东西,如今重构终于完成,也写了点东西,终于能水篇文章了。
这次带来的是在Vulkan中实现点光源和变换(也就是说子GameObject的变换会跟着父GameObject的变换一起变),至于为什么讲这么两个相差很大的东西,因为变换这块感觉没法单开一篇文章(至少目前为止)。
那么这篇文章讲介绍:
Vulkan中的Specilization Constant
如何在Vulkan中实现点光源
如何实现一个高效的变换系统
上一篇:Vulkan应用集成ImGui | 喜多喜多のBlog (kita-blog.vercel.app)
本篇:点光源(Specialization Constant)以及变换 | 喜多喜多のBlog (kita-blog.vercel.app)
下一篇:点光源的阴影 | 喜多喜多のBlog (kita-blog.vercel.app)
一、当前系统组织简介让我们在正式开始前先介绍一下当前已有的系统。
我将ElbowEngin ...
UGUI源码阅读(3)- Image网格顶点生成与实践
前言之前的文章里我们了解到了Image的Rebuild流程,今天我们来看看Image的网格顶点是如何生成了。
本篇文章里你能了解到:
上篇:UGUI源码阅读(2)–Image的更新流程 | 喜多喜多のBlog (kita-blog.vercel.app)
Image网格顶点生成上篇文章我们说过Image重写了OnPopulateMesh方法,这个方法负责网格顶点生成,其代码如下:
123456789101112131415161718192021222324252627protected override void OnPopulateMesh(VertexHelper toFill){ if (activeSprite == null) { base.OnPopulateMesh(toFill); return; } switch (type) { case Type.Simple: if (!useSpriteMesh) ...
UGUI源码阅读(2)--Image的更新流程
前言大家好!本篇文章是UGUI源码阅读文章的第二篇。
本篇文章主要介绍组件Image的更新流程,在本篇文章,我们将会了解:脏标记模式(设计模式)、Graphics类、GraphicsRegistry类、UI元素Rebuild流程等。
上一篇为:UGUI源码阅读(1)–从Button开始 | 喜多喜多のBlog (kita-blog.vercel.app)
下一篇为:UGUI源码阅读(3)- Image网格顶点生成与实践 | 喜多喜多のBlog (kita-blog.vercel.app)
Image简单介绍Image组件是UGUI中重要的用于显示图片的一个组件,如下:
一个Image由不同的顶点构成,上图坐下为Simple情况下生成的顶点情况,右下为Tiled情况下生成的顶点情况。
当我们设置sprite时发生了什么?我们设置图像时调用了下面的代码:
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647public Sprite sprite{ get ...
UGUI源码阅读(1)--从Button开始
前言本篇是阅读UGUI源码系列的第一篇,阅读他人的源码是提升自己的快速途径之一,考虑到之后去往实习时UI方面的工作应该会比较多,因此阅读一下UGUI源码对于工作应该会有很大的帮助。
通过阅读本篇,可以了解到:Button点击事件的执行流程,点击时如何检测到相应的UI元素等。
注意:本文采用的Unity版本是Unity6000.0.0f1c1
下一篇:UGUI源码阅读(2)–Image的更新流程 | 喜多喜多のBlog (kita-blog.vercel.app)
开始首先,我们编写一个脚本,用于Debug。
123456789public class UGUITest : MonoBehaviour{ [SerializeField] private Button _testButton; public void OnButtonClick() { Debug.Log("Button Clicked!"); }}
正确的设置后,在唯一的Debug.Log()语句处打上断点,开始调试!
可 ...
Vulkan应用集成ImGui
前 言大家好!这是我的第一篇博客。
在我开发ElbowEngine时,一个调试界面是及其重要的。最后我选择了ImGui,这里来向已有代码中集成ImGui。
代码变化在RickSchanze/ElbowEngine at 集成Imgui (github.com),其中”集成ImGui”分支便是本篇文章讲述的所有集成工作的代码。
之前的效果在集成之前,我已经成功实现了向glfw窗口中显示3D模型,如下:
虽然目前的代码架构还比较丑陋,不过之后会不断重构优化。
关键代码在RHI/Platform/Vulkan文件夹中,Vulkan基础设施包括Instance、PhysicalDevice、Device、SwapChain、Surface都在VulkanContext中,渲染相关的部分在类GraphicsPipeline中,目前GraphicsPipeline通过虚函数RecordCommand来烘焙渲染命令,并在VulkanContext的Draw函数中每帧提交。
引擎入口在Tool/EngineApplication中,其中的Run负责每帧调用渲染指 ...
第一篇博客
这是我的第一篇博客,用来测试一些功能是否正常。以上。