[toc] # zbining 算法 这个图写的很明白了,第一次记录视椎体内每个 tile 的灯光列表 第二次记录每个 z 区间内的灯光个数 然后就可以直接找到对应视锥,对应区块内的灯光索引,而不需要对整个空间 Cluster 化 # 代码解析 首先值得注意的是,URP 本身是支持了 XR 的双目渲染,所以添加了 ViewIndex 这一个属性,在本节解析中,将 view 的数量看为 1 即可。 首先先计算有多少 item,item 即除了 Directional 灯光外的灯光与灯光探针的总数量 123456var visibleLights =...

[toc] # URP 的渲染流程小析 renderingData 设置 Unity Cull Enqueue RenderFeature 的 Pass UniversalRenderer 的 Setup 灯光 PreSetup 设置 RenderingData 分配需要的贴图等数据并执行 (ExecuteCommandeBuffer) 将主要的 Pass 推入 RenderQueue (但不执行) Execute SetupRenderfeature 的 pass 执行每个 Pass 的 OnCameraSetup (同时 ExecuteCommandBuffer) 设置...

[toc] # 序 最近重新回顾了下 DirectX12 那本书,这本书第六章封装了一个比较简单的渲染结构,想以此来重新复习一下在这些流程中,我们都可以做些什么,以及每个接口和名词的含义是什么。 源代码: https://github.com/mymetalseed/SolDirectx_Demo/tree/main 代码是使用 Cmake 搞得,可以直接 make (但是估计只支持 WindowsXD) #...

[toc] # 入口 入口 : luaL_dofile () doFile 中会对读入的代码进行检查,但是最后会走到 f_parser 函数,其原型如下: # f_parser 1234567891011121314151617181920static void f_parser(lua_State* L, void* ud) { int i; Proto* tf; //最外层一个闭包 Closure* cl; struct SParser* p = cast(struct SParser*, ud); int c = luaZ_lookahead(p->z);...

[toc] # 概述 这系列文章会一步步的拆解 Lua 的实现原理,直到到达 Lua Wrap 与 Lua 本身的数据交互为止 # 宏孩儿实现 GC 对象判定 首先讨论一个问题,在 c 语言里,我们如何判断一个对象是否可 GC? 有 N 种方法吧,这里来讨论下 1. C 没有模板,所以没法 traits,C++ 可以 traits 撸几个特性模板 2. 写一大堆 if 3. 宏孩儿 这是从 Lua 源码中读来的,其实也是 C 语言实现面向对象的一种很棒的实践 下面均是从第 3 条出发,以 Lua 对象为例,步步引出 Lua 的默认对象 Lua 的一个基础类型是 Table...

[toc] # 在 Lua 项目下添加调试用入口 main.cpp 放到 lua-5.4.6 目录下 123456789101112131415161718192021222324252627282930313233343536373839#include <iostream>extern "C"{#include "lua.h"#include "lauxlib.h"#include...

[toc] # 综述 最小单元:按照下面这个流程走一遍就可以了 https://hybridclr.doc.code-philosophy.com/docs/beginner/quickstart# 测试热更新 # 代码热更示例 打包的 dll 放在这里 效果如下 让我们把代码改成下面的: 123456789101112131415using System.Collections;using System.Collections.Generic;using UnityEngine;public class Hello{ public static void Run()...

[toc] # 综述 常常听说 URP 里最多只能执行一个 Pass,但这其实是不对的,为啥呢? 就是因为 RenderFeature,URP 把实际上 Pass 执行的顺序抽象到了 CommandList 中了,即可以手动的在 C# 端控制 Pass 的执行顺序,而不需要硬写在代码里了。 并且一个 RenderFeature 里可以执行哪些 Pass 也都是自己决定的 接下来以毛玻璃后处理效果来记录 RenderFeature 用法 # RenderPass URP14.0 后必须在 Pass 的 CameraSetup 阶段中获取 cameraColorTargetHandle ,...

[toc] 前提:所说的都是《STL 源码剖析》这本书内的 CPP 源码的逻辑,书中使用的是 SGI C++,其他版本的基本上无法参考,但是大体思路应该可以借鉴 # 大体结构 六大组件的关系: Container 通过 Allocator 取得数据储存空间, Algorithm 通过 Iteator 存取 Container 内容, Functor 可以协助 Algorithm 完成不同的策略变化, Adapter 可以修饰或套接 Functor 前闭后开区间 STL 的迭代器是前闭后开的,即 first () 只想第一个元素,而 end 指向的则是 最后一个元素的后一位...

[toc] # 序 之前有看过一次这个 VirtualTexture 的演讲,最近又对这个产生了一些兴趣,也看了一些实现,但大都藏头露尾。 所以再次从一个二次观察的视角来看一次这个 GDC,应该会有新的发现吧 # 虚拟纹理映射 假设我们有一个无比巨大的地形贴图 如果想要保留贴图的细节并且又不想浪费内存,哪一个很直观的想法就是,动态加载贴图 VirtualTexture 就是这么诞生的 而虚拟纹理到物理纹理的映射就如下图所示 其中物理纹理就是用于存放当前内存中需要用到的对应虚拟纹理中的块 那么当物体在采样时,如何确定目标 UV 坐标是哪些呢? 这就需要用到中间的那部分了 Indirection...