精选分类
DesignPatterns
CSharp
ComputerGraphics
Unity
文章列表
Kulla-Conty 多次散射补偿
# Kulla-Conty 多次散射补偿 # 单次反射的问题 经典的 BRDF 模型只描述单次表面反射。但真实微面之间会互相遮挡、反弹。 对于粗糙度较高的材质,由于模型忽略了光线在微表面间的多次弹射,所以会导致渲染结果比真实情况偏暗,且能量不守恒。 # 多次散射补偿 在游戏开发中,Kulla-Conty 近似方案是解决微表面模型能量流失的标准方法。Kulla-Conty 提供了一个简单且高效的经验公式来补偿这些丢失的多次散射能量。 在下文中,我们约定: nnn 为宏观表面法线 vvv 为观察方向 lll 为光照方向 μo=n⋅v\mu_o = n \cdot vμo=n⋅v...
more...Unity URP BRDF shader
# Unity URP BRDF shader 本篇主要内容是在 Unity URP 中实现 BRDF shader BRDF 理论部分在这篇文章中讲解。 Unity 版本:Unity 6.0 渲染路径:Forward / Forward+ # 代码 # BRDF 经典的 BRDF 模型只描述单次表面反射,这会导致渲染结果偏暗。为了解决这个问题,需要做多次散射补偿。 为了防止结果偏暗,本篇使用简单的经验参数近似。 符合物理的多次散射可以使用 Kulla-Conty 近似,其理论部分在这篇文章中讲解。 环境光照使用拟合预计算的 BRDF LUT MyBRDF.hlsl// GGX...
more...双向反射分布函数(BRDF)
# 双向反射分布函数(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) #...
more...CPP基础笔记
# 基础一 #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...
more...Lua + CSharp
# 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...
more...Lua
# Lua Lua 是一种轻量的脚本语言,用标准 C 语言编写并且开源 Lua 常用于游戏开发、应用脚本、应用插件等 Lua 可以很方便的嵌入别的程序里,可以直接使用宿主语言(通常是 C 或 C++)提供的功能 Lua 支持面向过程编程、自动内存管理、语言内置模式匹配、闭包(通过闭包和 table 可以支持面向对象编程)、多线程 Lua 代码文件的后缀名为 .lua 建议:VS Code 中有很多关于 Lua 的扩展,可以方便编程和调试 # 基本语法 # 注释 单行注释:使用 -- 开头 --print("Hello World")多行注释:使用 --[[开始,使用]]...
more...








