- 博客(21)
- 收藏
- 关注
翻译 极坐标采样实现高质量户外大气散射
1、在接下来的光线积分推导种,我们始终以单次散射模型作为前提,即阳光在到达相机之前只会发生一次散射考虑如图中view ray上一点P,如果view ray不与地面相交或者相机在大气层之外,则O 或者 C就是view ray与大气层外边界的交点,衰减后达到P点的光线可表示为LSune−T(A→P)L_{Sun} e^{-T(A\rightarrow P)}LSune−T(A→P),其中LSunL...
2018-10-24 20:33:30 689
原创 UnityShader——阴影源码解析(一)
最近想着自己拿SRP写个能用的管线试试的,写到阴影的时候发现自己对Unity的阴影绘制流程并没有一个毕竟全面的了解,正好借此机会把Unity默认管线的阴影绘制过一遍一、非屏幕阴影 我们从最简单的入手,不要Cascade,不要 screen space shadowmap。在 Graphics setting 里关掉 Cascaded Shadow,场景只打一个 hard shadow 的平行...
2018-09-03 23:04:43 8526
原创 UnityShader——屏幕空间反射(一)
从Crytek提出SSR后,基本上成了各种大作标配,而自己不知道有意还是无意居然也一直没有自己写过SSR实现,CSDN居然也没找到一篇靠谱的文章,正好最近有点时间,自己写了写,啃了啃别人的源码,写在这权当笔记了。...
2018-06-05 19:20:00 7001
原创 UnityShader——GPU GEM大气散射源码解析
这段时间磨磨蹭蹭的总算是把大气散射这块啃了下,没有去看论文原文了,主要参考的就是 GPU Gem2 里的这篇文章,要想更系统的了解大气散射相关发展的话可以看乐乐姐的这篇专栏如果对渲染方程没有概念的话最好先阅读我之前的这篇博客 如图所示,大气散射其实就是图中绿色线条部分的光传播过程首先简单的介绍下大气的两个散射模型:Rayleigh Scattering: 由大气中的小...
2018-05-14 00:35:29 2886
原创 从零开始的SLua(二)—— SLua的C#函数导出
第四天,继续Slua 的第二个Demo, 这个Demo 演示的主要是将 c# 函数注入到 lua 中并在 lua 中调用,不对的地方还望大佬们指正// this exported function don't generate stub code if it had MonoPInvokeCallbackAttribute attribute, only register it [...
2018-03-23 16:50:44 2728
原创 从零开始的SLua(一)——热更新原理及SLua的第一个Demo剖析
换工作后改做手游需要使用Lua来进行热更新,以前也没接触过Lua,这篇博客算是记录一些学习心得和资料写这篇博客是接触Lua的第三天,有错误的地方还请大神们指正,Lua语法之类的就不提了,我们从热更新的原理机制开始:什么是热更新? 为什么要使用Lua进行热更新? Unity是如何使用Lua进行热更新的?知乎这个问题的觉得下面已经给出了不少解释,其中一个回答又很好的解释了为什么Unit...
2018-03-22 15:56:21 11894 1
原创 UnityShader——基于CustomRenderTexture的战争迷雾
Unity 2017版本推出了CustomRenderTexture,个人觉得是个很棒的东西,很多效果不需要再一层一层去申请 RenderTexture 然后 Blit, 而且 CRT 还提供了 UpdateZone 用来更新某一个区域,虽然性能上来说到底有没有提高没测试过不清楚,不过用起来是真的很方便,Unity.jp 的某位大佬用 CRT 实现的水波效果就非常有意思说到战争迷雾,战争迷雾的...
2018-03-12 15:56:42 3380
原创 UnityDecal——贴花方法总结
Unity里贴花的实现方法比较多,商店里的插件也是各种各样,最近正好又在弄这个,趁机会给自己总结下:1、构造贴片网格 思想很简单,就是在当前表面构建一个与表面完全贴合的新Mesh,并重新计算纹理贴图,从而实现贴片效果。 假设 P 为当前表面上的一点, 当前表面在该点的法线为 N, 点 P 为贴片的中心, 贴片的单位切向量为 T根据给定的点 P , N , T,T 与 N 叉乘可得出的副法线 B,
2017-12-04 20:04:58 14624 1
原创 UnityShader——球谐光照
昨天翻 Unit Europe 2017 发现一篇很有意思的演讲,作者因为游戏的特殊性,彻底摒弃了 Unity 原本的烘培系统,通过只烘培 Light Probe 的形式自己读取数据建立全局光照,文章提到了 GDC 的一篇讲 Light Probe 插值的演讲,过去翻了翻,果然,LightProbe里存储的是烘培后用球谐函数编码的全局光照,正好趁机会把球谐光照这块梳理下:理论出自02年SIG的一篇论
2017-10-25 12:29:43 8017 1
原创 读书笔记——并行处理器架构
本文是秦春林《全局光照技术》的一些阅读笔记,所有图片都是书里的,我啥版权都没。。一、CPU 1、冯诺依曼架构 冯诺依曼架构中,数据总是存储在内存中,数据从内存传递到处理器的总时间可描述为一个固定和一个依赖数据大小的可变开销,其中固定开销被称为延迟,实际上指通信上发送一条空消息所需时间。因此不管处理器速度多快,计算机都内存传输速度这个,通常使用 缓存、预取、多线程 等方法克服该瓶颈。1.1 缓
2017-09-21 12:06:43 1485
原创 UnityShader——Wireframe
昨天无意中看到群里有个小伙伴发的一张截图中有个 VR/Wireframe 的 shader,晚上便抽空下载了5.6.3 的 bulit-in 看看源码,Unity 还是良心,直接把理论资料注释在了代码的开头,是NVIDIA的一篇文章,像DX11本身提供了FillMode = D3D11_FILL_WIREFRAME选项,可以直接渲染网格,但NVIDIA认为这样渲染有诸多问题,文章比较了该技术和以前...
2017-08-29 11:53:56 6274 3
原创 UnityShader——挺进体积光
原本是想找找体积雾的,无意中发现了 GPU Gems 3上的一篇屏幕特效实现体积光散射的文章,实现了一波发现文章里公式列的很高大上,结果具体实现却出乎意料的简单,只是通过像素的屏幕位置和光源的屏幕位置计算光线方向,然后在一个循环中沿光线方向将上一个像素的颜色衰减后叠加到下一个像素,具体可参考 GPU Gems 原文,在 Unity 中效果如下: 周末又在Github发现一个500多星星的体积光
2017-08-23 19:54:55 5035 2
原创 图形学——Cell/Worley Noise
Cell Noise, 有的又叫 Worley Noise,基于 voronoi,由Steven Worley在1996年提出了新的算法,新的算法并不能用来对既定的特征点进行 voronoi 区域划分,因此更多的被用来生成噪声,因此又被称作Worley Noise1、理论 voronoi的原始实现在一个博客里有相关细节,iq的文章则是采用了Steven Worley的算法,算法步骤在网站有讲到,下
2017-08-21 19:35:33 1602
原创 图形学——Make Some Noise
周末逛Unity Assets 商店的时候发现一个免费的体积云,下下来看了下代码发现是procedural noise + ray maching做的, 看到noise代码那块发现自己噪声都忘的差不多了,正好趁机会梳理下吧。1、PerlinNoise 理论方面因为懒得翻论文就直接参考了乐乐姐的博客,其中perlin noise的主要描述如下: 1、定义一个晶格结构,每个晶格的顶点有一个“伪随机
2017-08-19 15:44:26 908
原创 UnityShader——玩弄GlobalFog
Unity 自带的 GlobalFog 通过一个屏幕特效实现了全局雾效,之前一直没太留意,最近正好有时间就把它的代码看了一遍顺便自己改了改玩,嗯,所以取了这么个标题。1、代码分析 Camera cam = GetComponent<Camera>(); Transform camtr = cam.transform; float
2017-08-18 16:03:06 2548
原创 UnityShader——初探Compute Shader
Compute Shader是基于DX11(SM4.5+)的在GPU上运行的程序,通过Compute Shader我们可以将大量可以并行的计算放到GPU中计算从而节省CPU资源,Unity 5.6版本提供的 Graphics.DrawMeshInstancedIndirect 接口可以非常方便的配合ComputeShader做大规模渲染。先将一些Compute Shader中不同于普通Shader的
2017-07-20 16:43:38 2251 2
原创 物理渲染学习笔记(三)——Cook-Torrance微表面模型
从 Phong 到 GGX, 光照模型林林总总,一直没能找机会梳理一遍, 这几天依次都自己实现了一遍,也正好总结下。Microfacet普通的着色模型假设着色的区域是一个平滑的表面,表面的方向可以用一个单一的法线向量来定义来定义。而 Microfacet 模型则认为 :1、着色的区域是一个有无数比入射光线覆盖范围更小的微小表面组成的粗糙区域。2、所有这些微小表 面都是光滑镜面反射的表面。因为这种
2017-07-12 20:32:09 7747 2
原创 物理渲染学习笔记(二)——光的传播
一、假设 首先我们假设介质又许多非常小并且随机分布的微粒组成,微粒之间的距离相比与微粒本身大小可视为无限大,因此每个微粒的光照行为是独立事件,但我们不描述单个微粒的光照过程,我们只描述光穿过介质时整体的概率分布。二、光子的交互 当一个光子穿越一堆微粒时,可能一个也碰不到直接通过,也有可能撞到微粒,撞到的概率与介质的系数 σt\sigma_t 相关,撞到的时候,有两种可能,吸收或者散
2017-07-04 22:29:56 1897
原创 [UNet]通过一个小测试了解Command和ClientRpc的功能
作者只是业余时间接触Unity 2个月的新人一枚,如有不对的地方,请各位大神指正!Unity 5.以后使用了新的网络模块UNet(其实我接触的晚压根没用过老的- -!),但是在使用过程中确实关于UNet的资料和讨论挺少的,于是自己做了个小项目测试了Command和ClientRpc两个命令。首先我们看看官方给出的定义:CommandsCommands are sen
2016-04-23 20:03:31 17014 4
转载 [转]OpenGL 2D纹理
1.创建纹理对象,并为他指定一个纹理.2.确定纹理如何应用到每个像素上.3.启用纹理贴图4.绘制场景,提供纹理和几何坐标过滤:由于我们提供的纹理图像很少能和最终的屏幕坐标形成对应,大小不同,所以需要设置过滤项目.允许我们进行插值或者匀和,指定放大缩小的函数.glTexParameter*(),使用过滤模式GL_NEAREST那么纹理单位最邻近的将被使用,GL_LIN
2016-01-23 11:12:14 724
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人