精选分类

文章列表

2.3k 2 分钟

# Kulla-Conty 多次散射补偿 # 单次反射的问题 经典的 BRDF 模型只描述单次表面反射。但真实微面之间会互相遮挡、反弹。 对于粗糙度较高的材质,由于模型忽略了光线在微表面间的多次弹射,所以会导致渲染结果比真实情况偏暗,且能量不守恒。 # 多次散射补偿 在游戏开发中,Kulla-Conty 近似方案是解决微表面模型能量流失的标准方法。Kulla-Conty 提供了一个简单且高效的经验公式来补偿这些丢失的多次散射能量。 在下文中,我们约定: nnn 为宏观表面法线 vvv 为观察方向 lll 为光照方向 μo=n⋅v\mu_o = n \cdot vμo​=n⋅v...
12k 11 分钟

# Unity URP BRDF shader 本篇主要内容是在 Unity URP 中实现 BRDF shader BRDF 理论部分在这篇文章中讲解。 Unity 版本:Unity 6.0 渲染路径:Forward / Forward+ # 代码 # BRDF 经典的 BRDF 模型只描述单次表面反射,这会导致渲染结果偏暗。为了解决这个问题,需要做多次散射补偿。 为了防止结果偏暗,本篇使用简单的经验参数近似。 符合物理的多次散射可以使用 Kulla-Conty 近似,其理论部分在这篇文章中讲解。 环境光照使用拟合预计算的 BRDF LUT MyBRDF.hlsl// GGX...
3.5k 3 分钟

# 双向反射分布函数(BRDF) 双向反射分布函数(BRDF)是一个用于描述表面反射特性的函数。它是在微平面理论上建立的。 本篇仅包含理论,这篇文章展示了如何在 Unity 中实现 BRDF。 在下文中,我们约定: nnn 为宏观表面法线 vvv 为观察方向 lll 为光照方向 hhh 为半矢量(Half-vector),即 normalize(v+l)normalize(v + l)normalize(v+l) α\alphaα 为粗糙度参数(通常在引擎中定义为 α=roughness2\alpha = roughness^2α=roughness2) #...
3.5k 3 分钟

# 基于物理的渲染(Physics-Based Rendering, PBR) 基于物理的渲染指的是一种能对光在物体表面的真实物理反应提供精确渲染的方法。 广泛来说,所有的渲染在某种程度上都是 “基于物理的”,但 “基于物理的” 这个术语在实践中意味着我们将严格遵循物理模型,而不是 “现象学”。现象学通过主观经验感知特征,例如使用经验公式将高光放置在 “正确” 的位置。 #...
8.8k 8 分钟

# 基础一 #include<iostream> C++ 的头文件,包含了程序必须的相关信息 main() 的完整写法 main(int argc, const char* argv[]) using namespace std; 使用标准命名空间 endl 英语意思是 end of line 一行输出结束,然后输出下一行。它的作用相当于在末尾添加换行符 \n 指数 13e+8 表示: 13*10^8 16 进制 0xN (N 为任意数) 2 进制 0bN (N 为任意数) 8 进制 0N (N 为任意数) float 型数值后应加 f float 有 7...
34k 31 分钟

# 观前提醒 项目会在 GitHub 中开源,链接:https://github.com/Maikire/Unity/tree/main/UnityFramework/BehaviorTree # 行为树(Behavior Tree) 行为树(Behavior Tree, BT)是一种在游戏开发(尤其是...
4k 4 分钟

# C# 调用 Lua 在安装 Lua 的文件夹中找到 lua54.dll 并导入 CSharp 项目 使用 DllImport 导入 Lua 函数 注意:宏定义无法导出到 dll 中,应该使用宏对应的函数(在 Lua 源码中查找即可) using System;using System.Runtime.InteropServices;namespace LuaAndCSharp{ public class CSharp2Lua { private const string LuaLib = "lua54.dll"; #region...
20k 18 分钟

# Lua Lua 是一种轻量的脚本语言,用标准 C 语言编写并且开源 Lua 常用于游戏开发、应用脚本、应用插件等 Lua 可以很方便的嵌入别的程序里,可以直接使用宿主语言(通常是 C 或 C++)提供的功能 Lua 支持面向过程编程、自动内存管理、语言内置模式匹配、闭包(通过闭包和 table 可以支持面向对象编程)、多线程 Lua 代码文件的后缀名为 .lua 建议:VS Code 中有很多关于 Lua 的扩展,可以方便编程和调试 # 基本语法 # 注释 单行注释:使用 -- 开头 --print("Hello World")多行注释:使用 --[[开始,使用]]...
3.8k 3 分钟

# 正则表达式 (Regular Expression) 正则表达式是一种文本模式,用于模式匹配、查找、替换、验证、提取文本数据 正则表达式可以应用于各种编程语言和文本处理工具中 # 语法 # 常用字符 字符 描述 [ABC] 匹配 [] 中出现的所有字符。例如:[ABC] 匹配字符串 "AEBECE" 结果为 AEBECE [^ABC] 匹配除了 [^A] 中出现的所有字符。例如:[^ABC] 匹配字符串 "AEBECE" 结果为...
33k 30 分钟

王道 408 操作系统笔记 # 操作系统概述 # 概念、功能、目标 概念 作为系统资源的管理者(基本功能) 作为用户和计算机硬件之间的接口(用户接口) 命令接口 联机命令接口,又称交互式命令接口 脱机命令接口,又称批处理命令接口 程序接口:由系统调用组成 图形用户接口:GUI,图形用户界面 首选 系统调用 和 图形用户界面 实现对计算机资源的扩充 覆盖了软件的机器称为扩充机器或虚拟机 目标(方便用户使用) 方便性 有效性 可扩充性 开放性 # 特征 四大特征:并发、共享、虚拟、异步 (并发和共享是最基本的特征) 并发和并行 并发:多个事件交替发生,并发 = 串行 = 同步 =...