- 博客(233)
- 收藏
- 关注
原创 自由学习记录(148)
内容横跨微表面 BRDF、PBR 分层材质、实时渲染架构、Niagara VM、UE 性能分析与渲染工程实践。前半段聚焦 anisotropic GGX、Smith-GGX、Kelemen、Vis、G1/G2、clearcoat secondary lobe、fixed roughness、Filament、MoltenVK、Metal/Vulkan/OpenGL API 映射与 renderer vs engine 边界;中段转向 UE 工具链,包括 GPU Visualizer、ProfileGPU、U
2026-03-25 21:45:38
24
原创 自由学习记录(147)
本文探讨了微表面BRDF的理论基础与实现细节。首先分析了从微面法线分布D(h)到最终BRDF分母4(n·v)的转换过程,解释了Jacobian变换在方向空间转换中的作用。详细讨论了Cook-Torrance微表面模型的模块化结构,包括法线分布函数D、几何遮蔽函数G和菲涅尔项F的相互关系,特别指出Smith-GGX几何项与分母4(n·l)(n·v)的约分关系。文章还对比了理想镜面反射与粗糙表面的数学表达差异,阐述了BSSRDF相对于BRDF的非局部散射特性及其近似实现方法。最后介绍了HAL学术仓储系统的地位与
2026-03-25 12:28:43
173
原创 自由学习记录(146)
摘要:文章探讨了MATLAB与Python的异同,指出Python通过环境配置简化了代码运行(如GPT直接运行Python)。介绍了Python库管理机制(pip安装当前环境依赖)和Matplotlib性能问题(Windows下难以稳定60FPS)。详细解析了Gamma校正原理,说明显示器通过非线性响应(sRGB/gamma编码)呈现图像,解释了商业相机内置Gamma校正的原因。深入剖析了BRDF(双向反射分布函数)的物理模型,强调分母项的几何归一化作用,并通过Jacobian概念阐明变量替换时的密度转换规
2026-03-24 16:15:23
341
原创 自由学习记录(145)
PBR关键项:Cook-Torrance BRDF由NDF(GGX法线分布)、G(Smith几何遮挡,同时考虑视线与光线方向)、F(Fresnel菲涅尔,描述反射比率)三项构成。金属无漫反射,颜色来自镜面反射;F0对电介质约0.02~0.08,金属则为有色RGB值。能量守恒:kD = 1 - kS。IBL间接光:漫反射预卷积存入辐照度cubemap,镜面反射用分裂近似法结合预过滤环境图与BRDF LUT。感知与二维渲染:二维角色的gaze由知觉而非几何决定;高光优先服务"可读性"而非严格BRDF约束;阴
2026-03-23 17:52:45
348
原创 自由学习记录(144)
本文探讨了多线程渲染中的生产者-消费者模式问题,当渲染线程成为瓶颈时,主线程频繁休眠唤醒会影响帧率。文章比较了OpenGL VBO与DX11、Vulkan等现代API的异同,指出现代图形API已将多线程命令录制作为基础能力。同时分析了Gouraud着色与Phong着色的性能差异,以及延迟渲染与光线追踪的协同工作机制,强调在现代渲染管线中,延迟渲染生成G-Buffer为光追提供理想起点。文章还涉及线程调度、CPU/GPU资源分配等底层优化策略,为高性能图形编程提供了实用见解。
2026-03-22 20:00:55
334
原创 自由学习记录(143)
涉及GPU渲染管线的多个核心概念,包括PCIe带宽与显存带宽的区别与瓶颈分析、Early-Z与Z-Prepass优化策略、Alpha Test对Early-Z的破坏机制、SRV与UAV的读写权限差异、延迟渲染中PrePass与BasePass的职责划分(PrePass写深度、BasePass输出GBuffer、Lighting Pass计算光照),以及discard指令对GPU优化流程的负面影响。此外还涉及C#脚本性能优化建议(如移除空回调、使用StringBuilder)。罗书信(歌罗西书2:23、马
2026-03-22 13:53:34
510
原创 自由学习记录(142)
摘要:NVIDIA构建了从芯片设计到终端产品的全栈技术能力,其商业模式与IP授权商存在本质差异。Unity引擎的纹理处理涉及多种压缩格式和平台适配,SpriteAtlas系统取代了旧版SpritePacker。GPU渲染优化需关注材质管理、静态/动态批处理、SRPBatcher等技术。特效制作需严格控制面数、贴图尺寸和材质数量。性能优化策略包括缓存计算、预处理、限帧操作等空间换时间的方法,同时需注意资源加载、内存管理和渲染合批等问题。
2026-03-21 20:17:40
1007
原创 自由学习记录(141)
文章摘要:本文探讨了现代游戏引擎(如Unreal Engine)的多层架构设计,包括源代码层、构建规则层、依赖层、目标二进制层和分发层,并分析了各层无法完全统一的技术原因。同时深入讨论了游戏渲染中的阴影系统整合问题,特别是引擎原生阴影与自定义风格化阴影的协同工作机制。此外,文章还详细介绍了移动GPU市场的技术格局,对比了ARM Mali、Imagination PowerVR等GPU IP架构的特点,分析了SoC设计中CPU与GPU的集成关系,以及独立显卡与集成GPU的技术差异。最后探讨了半导体IP授权模式
2026-03-21 10:40:20
419
原创 自由学习记录(140)
本文主要探讨了移动端景深(DoF)优化、虚幻引擎材质渲染流程及技术细节。移动DoF通过高斯模糊分层处理近远景以降低性能消耗,但会牺牲帧率。文章详细解析了虚幻引擎中半透明材质与景深的交互机制,包括Before/After DOF渲染顺序的选择及其视觉影响。同时深入探讨了延迟/前向渲染架构下的材质处理差异,GBuffer压缩技术(如BC5对法线贴图的优化),以及静态参数节点与动态参数节点的应用场景。此外,还分析了布料着色模型(Cloth)的特性和实现难点,对比了Unlit与标准光照模型的适用场景,为实时渲染优化
2026-03-19 21:09:39
382
原创 自由学习记录(139)
文章摘要: 本文深入解析了GPU图形管线与PSO的关系,指出PSO不决定管线阶段顺序,而是配置各阶段程序与状态。重点介绍了UE5.7的Substrate材质系统革新,它采用模块化Slab堆叠结构取代传统固定着色模型,通过自适应GBuffer实现复杂分层材质渲染。同时剖析了BlendMode从简单混合到光学行为声明的语义升级,以及实时渲染中的采样策略(8-15空间采样+TAA累积)与硬件限制的平衡关系。最后探讨了Dither技术原理及毛发专用渲染路径与半透明的互斥性,揭示了现代引擎在物理精确与性能优化间的技术
2026-03-18 16:13:04
383
原创 自由学习记录(138)
摘要:本文详细解析了英语中"you're"的发音演变及其语法功能,同时深入探讨了Unreal Engine中FBX文件处理、材质系统和渲染管线的技术细节。在语言部分,分析了"you're"从/ɑːr/到/jʊər/的发音简化过程及其双重语法功能(进行时与状态描述),并指出其与your/there等同音词在拼写上的常见混淆。在技术部分,系统阐述了UE处理FBX文件的流程(从解析到资产转化)、材质系统的层级结构(包括参数传递和渲染路径选择)、以及现代渲染管线的复杂架构(涉
2026-03-18 12:34:19
403
原创 自由学习记录(137)
材质与几何:Material Graph 只作用于已有片元,无法改变几何本体。BumpOffset/POM 是视觉欺骗(shading illusion),不是真正的几何变形。延迟渲染:G-Buffer 记录的是像素级材质计算结果(插值+贴图采样后),而非顶点原始数据,通过 MRT 一次性写入。光照架构:Punctual Light 是数学抽象的无体积点光源。Clustered Lighting 将视锥体切成3D格子,GPU通过 Compute Shader 做光源剔除,相比 Tiled Shading
2026-03-17 08:36:48
379
原创 自由学习记录(136)
本文探讨了现代实时渲染技术中的核心概念与实现挑战。首先分析了曲率着色(Curvature Shading)的实现原理及其对GBuffer的依赖,指出渲染效果规模化需要底层架构支持。随后对比了不同BRDF模型的数学实现与引擎集成差异,强调完整渲染路径整合的必要性。文章详细解读了虚幻引擎中的阴影技术演进,包括CSM级联阴影和UE5的VSM虚拟阴影贴图系统。在光线追踪方面,阐述了ReSTIR算法的时空重采样原理及其在实时全局光照中的应用优势。最后讨论了延迟渲染管线的特性与局限,特别是MSAA抗锯齿在延迟渲染中的实
2026-03-16 21:52:18
446
原创 自由学习记录(135)
摘要:UObject是Unreal Engine的核心系统,主要解决反射、垃圾回收和资产序列化三大问题。其核心结构包含类信息、所属对象和名称等字段。UE通过UHT工具生成反射代码,使用宏标记实现跨模块访问。资产系统以UObject为基础,如材质实例通过继承链影响渲染管线。技术层面详细解析了材质系统的反射机制、渲染管线交互,以及Arc System Works的三渲二技术实现,包括法线重写、顶点控制和局部空间光照等关键方法,展示了如何在3D渲染中精确模拟2D动画效果。
2026-03-16 16:21:15
522
原创 自由学习记录(134)
Unreal Engine的Derived Data Cache (DDC)机制解析:DDC存储编译后的Shader等派生数据,默认路径为本地用户目录。团队项目应配置共享DDC(如网络路径或Zen服务)以避免重复编译。DDC体积随项目规模增长(10GB-200GB+),且不同UE版本间缓存可能失效。缓存采用分层查询机制(内存→本地→项目→服务器),但不会自动清理旧数据。插件开发需遵循UE模块结构,通过Build.cs定义依赖关系。材质参数分组功能在UE5.7中仍通过Group属性实现,而非节点框选。动画系统
2026-03-15 18:30:02
363
原创 自由学习记录(133)
本文摘要: 几何投影术语解析:介绍了"几何投影"在图形学中的规范术语表达,包括projective shadow、geometry-based shadowing等概念,解释了基于几何体遮挡关系的阴影计算原理。 实时阴影实现技术:详细说明了头发和面部阴影的渲染流程,包括ShadowCaster pass的使用方法、阴影接收在前向着色中的处理方式,以及URP中的标准阴影链路结构。 SDF生成原理:阐述了Signed Distance Field的生成过程,包括从二值图转换、距离场计算算法(
2026-03-14 20:31:52
340
原创 自由学习记录(132)
SRP限制:SRP可以自定义渲染流程、读取Camera参数,但无法替换Unity的Camera组件体系,因为整个引擎(剔除、编辑器、后处理等)都依赖它。卡通脸部阴影:头发投脸的普通ShadowMap效果差,原因是遮挡距离极近且占用texel太少。SRP可通过单独为头发建高精度ShadowMap、Stencil限定区域、额外RT写入mask等方式解决,但最实用的往往是手绘mask+光方向控制,而非提升物理阴影精度。Gamma与Tonemap:渲染在线性空间计算,最终需Gamma校正适配显示器。ACES是完
2026-03-13 16:24:08
380
原创 自由学习记录(131)
ECS(实体组件系统)通过SoA(结构数组)内存布局和迭代优化实现了高性能计算。其核心在于ArchetypeChunk机制,将相同组件组合的实体分组存储为16KB的SoA内存块,既保持数据连续性又便于动态增删。系统直接操作内存块指针,配合Burst编译器生成SIMD指令,实现单指令多数据并行处理。ECS抹平了C#与现代CPU的鸿沟,通过线性内存访问减少缓存失效,使CPU预取器能高效工作。Unity的HPC#(高性能C#子集)禁用引用类型、托管操作等特性,配合Burst编译器生成接近手写汇编的机器码。这种分层
2026-03-13 08:59:46
389
原创 自由学习记录(130)
UE项目结构优化:建议排除Intermediate/Binaries等生成目录,重点关注Source/Plugins等源码目录。VSCode多根工作区配置说明,引擎与项目目录的.vscode设置相互独立。Niagara粒子系统解析:对比CPU/GPU模拟性能差异,说明10万级粒子适合GPU处理。详细分析粒子更新成本(重力计算轻量、碰撞检测昂贵)及渲染瓶颈(overdraw问题)。图形渲染优化:强调应在前端(culling/LOD)而非pixel shading阶段解决问题,介绍GPU-driven
2026-03-12 10:11:57
1136
原创 自由学习记录(129)
摘要:本文详细解析了球谐函数(Spherical Harmonics)在实时渲染中的应用,重点介绍了二阶球谐函数(SphericalHarmonicsL2)的工作原理及其9个系数的含义。Unity中使用SphericalHarmonicsL2结构体存储RGB三通道共27个浮点数,通过SampleSH()函数根据物体法线方向还原间接光颜色。文章对比了不同阶数球谐函数的差异,指出L2阶在计算开销和视觉效果间的平衡优势。同时探讨了Unity中BakedGI系统的不同载体(Lightmap、LightProbe、A
2026-03-11 12:16:40
399
原创 自由学习记录(128)
本文讨论了图形渲染中的深度计算、边缘检测和材质处理等技术细节。在深度处理方面,分析了视空间Z与硬件深度缓冲的非线性关系,指出使用linearDepthDelta比rawDepthDelta能更准确反映实际距离变化。对于边缘检测,建议采用线性深度差值配合距离补偿,而非单纯提高深度纹理分辨率。在材质处理上,详细说明了Blender顶点属性到Unity着色器的映射方法,强调必须将属性烘焙到支持的顶点通道(如COLOR或TEXCOORD)才能在Unity中正确读取。文章还探讨了顶点着色器采样纹理的局限性,以及透视投
2026-03-10 16:45:42
452
原创 view下顶点映射到 clip space,这个“压进去”的过程才是深度精损的关键。
---x/w, y/w:把 3D 位置压成 2D 屏幕位置z/w:把大范围深度压成有限 depth rangerasterization:再把连续空间压成离散像素depth buffer:再压成有限 bit 的排序值整个管线从头到尾都在做“有损表示”,不是单纯做“精确计算”。
2026-03-10 12:16:57
453
原创 /w真的是完全符合人眼?人复杂的视觉只浓缩在一个小小的除法?
摘要:透视投影中的/w运算并非完全模拟人眼视觉系统,而是精准捕捉了3D到2D投影的核心几何规律。它基于针孔相机模型,通过齐次坐标将非线性透视转换为线性矩阵运算,最后通过/w除法实现"远小近大"效果。虽然人眼视觉还包含景深、双眼视差等复杂因素,但/w抓住了空间感的最关键部分。这种将复杂透视简化为矩阵运算加一次除法的设计,体现了射影几何的数学优雅,成为计算机图形学中最高效的基础解决方案。
2026-03-10 11:54:05
348
原创 自由学习记录(127)
摘要:本文深入解析了Unity SRP渲染管线的核心机制与深度处理技术。首先阐述了SRP顶层逻辑的"foreach camera->execute"架构,重点分析了RenderPipeline、ScriptableRenderer等关键类型。随后详细探讨了深度纹理处理中的常见问题,包括UV计算错误导致的深度采样偏差、不同深度空间比较错误等,并推荐使用SampleSceneDepth等官方宏。文章还深入剖析了_ZBufferParams的数学原理与Unity内部实现机制,解释了其如何
2026-03-09 17:54:46
363
原创 自由学习记录(126)
本文探讨了现代软件AI集成模式与游戏引擎渲染技术的两个关键领域。在生产力软件方面,主流产品主要通过三种方式整合AI:Copilot助手模式(如Office)、原生功能嵌入(如Photoshop)和自动化工作流(如Zapier),这种交互方式正从传统UI操作转向意图驱动的自然语言交互。在游戏引擎方面,详细分析了Unity和Blender的渲染管线差异,特别是SceneColor/Depth纹理的生成机制、深度缓冲的读取方式以及透明物体处理等核心技术问题。文章指出深度缓冲的非线性特性、移动端Tile架构限制以及
2026-03-07 18:38:24
409
原创 自由学习记录(125)
摘要:本文深入分析了Unity URP中DepthTexture选项的工作原理及其对渲染性能的影响。文章指出,DepthTexture操作本身并不昂贵,真正影响性能的是可能触发的DepthPrepass导致的几何管线重复执行。作者从渲染管线调度、GPU架构和引擎实现三个层面,阐释了DepthAttachment与_CameraDepthTexture的关系,并澄清了常见的认知误区:shader中写入深度的pass并不保证DepthTexture正确性,关键取决于URP特定LightMode的选择。文章强调开
2026-03-05 23:29:02
411
原创 Goo Engine Screenspace Info节点解释
GooEngine的ScreenspaceInfo节点提供了对屏幕空间数据的访问,其中SceneDepth输出当前像素在相机空间中的非线性深度值(Z缓冲值)。该节点通过投影ViewPosition到屏幕空间并采样深度缓冲实现,与Unity的_CameraDepthTexture和UE的SceneDepth功能相同。主要用于NPR渲染中的屏幕空间描边、深度边缘检测和遮挡判断等效果。GooEngine添加此节点是因为原生Blender无法直接访问深度缓冲,该节点的实现逻辑与主流引擎的深度纹理采样机制一致。
2026-03-05 00:41:58
779
原创 自由学习记录(124)
本文摘要: 文章包含两部分主要内容:1)日语语法解析,详细拆解了歌词中"ていたんだ"等复杂结构的语法功能与语义,包括过去进行时、方向助词、命令形等用法;2)计算机图形学技术分析,重点探讨了实时渲染中的环境光处理技术,包括Specular IBL的split-sum近似方法、Diffuse IBL的Lambert简化计算,以及BRDF LUT的生成与应用。特别对比了不同引擎(UE4、Unity)在环境光卷积、深度缓冲处理等方面的技术差异,并指出渲染管线架构对shader实现的底层约束。两部
2026-03-05 00:36:44
424
原创 lut的“half texel / half texel offset”
这里的 0.5/W、0.5/H 就是所谓的“half texel offset”:从 texel 的左下角边界移到 texel 中心的半格距离。这句话的意义是:LUT 的每个 texel 的值,代表的是“这一格中心对应的参数点”的预积分结果。为什么你这张 BRDF LUT 通常“不需要你再手动做 half texel”原本要修正对lut的采样,轻微偏移处理采样点0.5texel size。half texel 到底是什么。因为这个 repo 在。
2026-03-04 20:10:04
24
原创 F0A′+B才对,“B 是A 乘以 (1−V⋅H)5”,是后续简化概念的误解
本文分析了实时渲染中镜面IBL积分的近似计算方法。核心是将复杂的BRDF积分拆分为预计算部分和运行时计算:1) 环境贴图通过GGX重要性采样预滤波,吸收D项影响;2) F和G项通过Schlick近似拆分为F0A+B形式,预积分到2D LUT中。关键点在于:原始积分无法解析求解,通过分离求和近似将D项卷积到环境贴图mip链,Fresnel项利用线性结构拆解为可预积分的A/B两部分。最终运行时组合为specIBL≈prefilteredEnv(F0*R+G),其中R=(A-B')、G=B'来自预积分LUT。这种
2026-03-04 17:51:37
419
原创 半兰伯特就是hack,Disney diffuse却说依然是pbr,区分的依据是什么?
本文讨论了基于物理的渲染(PBR)中的关键概念和技术细节。首先明确了PBR的核心约束条件:能量守恒、互易性以及参数的物理语义。通过对比Half-Lambert和Disney Diffuse两种方法,分析了PBR近似与hack的区别标准。文章深入探讨了直接漫反射和间接光照的计算方法,解释了为什么需要单独处理环境漫反射(envDiffuse)和环境镜面反射(envSpec)。最后,详细剖析了渲染方程中的积分问题,包括半球积分的几何意义、Lambert BRDF中的1/π归一化因子,以及常见误用情况。特别强调要区
2026-03-03 15:24:57
605
原创 LUT(x,y)=∫Ω f_spec(x,y,ωi)dωi为什么娇贵?
它编码的是“函数”,不是“形状”AB LUT 不是调色贴图,它是:
2026-03-01 20:49:39
469
原创 自由学习记录(123)
文章摘要: 本文深入探讨了实时渲染中的关键技术问题,重点分析了基于物理的渲染(PBR)中的数学近似和优化方法。首先阐述了Split-Sum近似在环境光计算中的应用,通过将高维BRDF函数分解为LD(R,α)和DFG LUT两部分,实现了计算复杂度的显著降低。文章详细解析了NDF(法线分布函数)在不同粗糙度条件下的数学表达形式,包括GGX、Beckmann等分布函数。特别强调了Perceptual Roughness的概念,解释了UI参数r与物理参数α(r²)之间的映射关系及其在美术控制中的重要性。最后讨论了
2026-02-28 02:52:20
603
原创 各项异性不仅指方向不同,强度不同也算各项异性?
线性的严格定义是满足:这是对映射的约束,不是对“xyz是否按同样规律变化”的描述。例如:这是线性的。但 x、y、z 并没有“按相同规律变化”。再比如:这也是线性的。分量之间还发生了耦合。所以:线性 ≠ 每个分量按同一个公式变线性 =保持向量空间结构(加法与数乘)可以近似无脑当向量的情况:全流程都在同一固定坐标系里(没有换基/旋转),并且你不需要把它解释成几何量(只做黑盒拟合)。你只关心局部插值/存储,不做跨坐标系搬运。
2026-02-27 18:19:58
611
原创 自由学习记录(122)
本文摘要: "Charlie"是布料渲染中特殊的法线分布函数(NDF),由Estevez和Kulla提出,用于模拟粗糙布料的光散射特性,其数学表达式为(2+1/roughness)*pow(1-NH²,0.5/roughness)/2。 法线分布函数(NDF)与统计学正态分布完全不同,前者描述微表面法线方向分布,后者是概率分布模型。 在实时渲染中,SplitSum近似将复杂积分拆分为LD(环境光卷积)和FGD(BRDF预积分)两部分,分别用cubemap+mip和2D LUT实现,这是E
2026-02-26 13:38:27
651
原创 自由学习记录(121)
文章摘要:本文详细探讨了实时渲染中的环境反射技术,重点分析了BRDF积分优化、CubeMap预过滤和粗糙度对反射效果的影响。通过2D LUT纹理将复杂积分转化为查表+ALU运算,大幅提升性能。同时阐述了Unity不同管线中环境反射的实现差异,指出高分辨率CubeMap仅对低粗糙度材质有意义,而预过滤Mipmap本质是物理卷积而非简单降采样。最后从技术角度解释了GGX分布下粗糙度与反射角域的数学关系,为实时渲染优化提供了理论依据。全文融合图形学原理与工程实践,对PBR技术实现具有指导意义。
2026-02-24 15:02:34
661
原创 自由学习记录(120)
本文摘要:探讨HTML片段结构解析与DOM节点操作,分析Range对象在选区处理中的应用。讲解RadialTangent在图形渲染中的方向计算原理及其在材质高光控制中的关键作用。针对SkinnedMeshRenderer的坐标空间转换问题进行技术解析,并提供三种实现方案。介绍ShaderModel的核心定义与Unity中的兼容性处理策略。最后剖析Cascadeur动画工具的物理约束优化系统本质,澄清其并非基于云端大模型的生成式AI,而是本地运行的物理驱动姿态优化系统。全文涉及前端开发、图形渲染、游戏引擎等多
2026-02-21 18:30:53
639
原创 自由学习记录(119)
Unity ShaderLab 属性修饰符(如 [MainTexture]、[NoScaleOffset])的语义作用,强调其仅影响 Inspector 表现而不改变 GPU 侧执行逻辑;分析了 PBR 金属度工作流中 BaseColor、F₀ 与 Fresnel 的职责划分;对“假 Forward 单光源”结构进行了拆解,并对渲染调试流程(如查看 DrawCall 绑定纹理、Framebuffer Attachment)给出方法论说明。同时涉及 DX12、Apple Silicon GPU 架构分层,以及
2026-02-16 14:04:32
625
原创 自由学习记录(118)
核心区分在于:TBN是局部基底,PBR以N为主轴,而头发模型(如Kajiya–Kay)以T为主轴。Radial Tangent不是顶点属性插值,而是解析向量场 T=f(P)。dot是投影,cross生成正交方向。插值发生在顶点→像素管线,Tangent节点只是为BRDF提供方向,不控制插值本身。
2026-02-13 03:06:30
758
原创 自由学习记录(117)
摘要:本文深入探讨了PBR渲染中的多个技术细节,包括法线贴图扰动导致的世界空间法线变化、TBN矩阵的正确构造方法、各向异性高光的参数控制、微表面模型中D和V函数的物理意义与工程实现差异。文章还分析了实时渲染中的性能优化策略,指出合理使用if分支在特定场景下的优势,并澄清了albedo与BRDF的关系、皮肤渲染的各向异性处理等常见误区。最后,文章对比了原版Blender与GooEngine在屏幕空间效果实现上的差异,并强调了GBuffer数据作用域的合理划分原则。这些内容涵盖了从基础概念到高级优化的完整知识链
2026-02-09 23:23:59
617
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅