简介
为了渲染一个巨大的地形,可能需要使用一个超大分辨率的纹理。大到装不进GPU的显存。128K*128K的纹理将消耗大概64GB的GPU显存。当GPU上的内存空间有限时,操作系统会使用虚拟内存来进行内存管理,根据需要将数据从驱动程序交换到CPU内存中。虚拟纹理提供相似的功能。
应用程序会决定每个mipmap层级中的哪些区域(瓦片tile)应当驻留在GPU显存中。一个tile通常为64kb,其分辨率取决于具体的纹理格式。在理想情况下,所需要的纹素数量应当与正在渲染的最终图像的分辨率成比例,并且与纹理本身分辨率无关。
优点能够把地表贴花预渲染到地形纹理
缺点高精度代表要分配更多的RT尺寸和内容,占用大量的显存和带宽
硬件支持虚拟纹理
简介没想好
AOAO贴图SSAO计算一个球面所受到的光,但是实际上面所受到的光是半球面SSAO+HBAO计算多大面积可见,属于基于半球面的积分GTAO光从各个角度的结果不一样Ray-Tracing AO每帧每个像素发射一两根射线,在时序上进行数据的收集,完成球面采样的近似
雾效
抗锯齿
后处理常见的三种后处理
降低计算复杂度
渲染管线处理顺序,先阴影,再渲染物体,最后后处理
透明物体排序,由远及近,三个棍子重叠则根据中心点进行排序
移动端的Tile base rendering移动端存储芯片容易发热,使用TBR进行优化减少对 FrameBuffer 的读写
可以得到哪几个Tile被点光源照射到
FrameGraphUnitySRP的设计思想
V-Sync Technology防止画面割裂为了防止出现这种情况,在FrameBuffer全部写完后才计算下一帧
简介记录学习程序动画的记录
来源learn.unity.comDocs Animation RiggingProcedural Animation Video NotesMoveen tutorialyoutube
效果
你的浏览器不支持播放该视频
你的浏览器不支持播放该视频
类型Multi-Parent Constraint提供像父子对象的约束
Damped Transform阻尼变换约束允许阻尼从源游戏对象到受约束游戏对象的位置和旋转变换值。“保持目标”选项强制受约束对象始终瞄准源对象
ChainIK Constraint允许反转对游戏对象层次结构的控制,以便提供行为类似于链的操作。通过定义根和尖端游戏对象,链 IK 约束将能够找到并约束其间包含的所有游戏对象
TwistChain Constraint允许控制游戏对象链层次结构两端的世界旋转。根部和尖端旋转沿着链插值到游戏对象之间,以创建平滑的动画层次结构
Two Bone IK两个骨骼 IK 是一种约束,它将由 2 个骨骼组成的简单 FK 层次结构转换为可由目标游戏对象(类似手的控件)和提示游戏对象(类似肘的控件...
简介记录 Precomputed Radiance Transfer Global Illumination 的研究
预览
你的浏览器不支持播放该视频
来源预计算辐照度全局光照(PRTGI)从理论到实战 - AKG4e3的文章 - 知乎Unity移动端可用实时GI方案细节补充 - 方木君的文章 - 知乎10.3 球面函数和半球函数 - Justin的文章 - 知乎体探针漏光解决方案 - jackie 偶尔不帅的文章 - 知乎全局光照技术:从离线到实时渲染
思路
场景几何信息
探针获取 CubeMap,存储的数据过大,通过只存储指定数量的 Surfel 数据节省内存
实时光照计算
运行时计算每个 Surfel 受到的 radiance
为了计算屏幕像素得到光照,而不是单个 Surfel 的光照,需要将 Surfel 代表的环境光照信息编码到 Probe 上,像素着色时访问 Probe 得到其周围环境光照信息
光照信息编码
通过球谐函数和球谐系数和构成函数,可以得到给定方向上的光照颜色(对 radiance 进行编码)
根据 “当进行球面对称的核函数与原始信号函数的卷积...
简介记录常用的 Sprite Shader
Glow(发光)叠加自发光颜色
Outline(描边)
12345678910111213141516171819202122232425half spriteLeft = tex2D(_MainTex, i.uv + half2(destUv.x, 0)).a;half spriteRight = tex2D(_MainTex, i.uv - half2(destUv.x, 0)).a;half spriteBottom = tex2D(_MainTex, i.uv + half2(0, destUv.y)).a;half spriteTop = tex2D(_MainTex, i.uv - half2(0, destUv.y)).a;half result = spriteLeft + spriteRight + spriteBottom + spriteTop;#if OUTBASE8DIR_ONhalf spriteTopLeft = tex2D(_MainTex, i.uv + half2(destUv.x, destUv....
hybridclrhybridclrC#原生热更方案TEngine具体使用框架
热更流程InitResourcesUpdateVersion获取最新版本数据 PackageVersion(PackageManifest_DefaultPackage.version)文件保存最新版本(2023-10-14-1140)
UpdateManifest流程更新 Mainfest 清单
LoadCacheManifestOperation
GetSandboxPackageHashFilePath(获取沙盒内包裹的哈希文件路径)
比对本地 hash 文件的md5值 和 文件计算出的 md5 码是否一致
不一致则清除本地缓存文件
一致则加载 Manifest 文件,根据其中的内容,初始化 AssetBundle和Asset、Asset和GUID的关系
QueryBuildInPackageVersion
获取服务器上的 Version 文件
服务器上的 Hash 文件覆盖本地沙盒内的 Hash 文件
LoadBuildinManifestOperation
服务器上的 Manife...