Sen's blog

请使用 Ctrl + F5 刷新页面以获取最新博客内容

UnityShade入门精要(11·噪声)

噪声 消融 噪声纹理+透明度测试 当小于一定阈值时就会被clip剔除掉,烧焦的部分是颜色混合 禁用剔除,因为消融后可能呈现背面,在frag中,为了制造烧焦的效果,smoothstep当噪声 - 阈值 <= LineWidth时,越趋近0,越为烧焦的颜色 为了正确的获得阴影,在ShadowCaster模式下,使用阴影三剑客,并且在frag中clip剔除片段 水波 水波和之前实现...

UnityShade入门精要(10·非真实感渲染)

卡通风格 描边 + 纯色高光 有很多种方法实现描边: 我们之前用的方法3,这次使用方法2,在第一个pass先渲染背面,顶点沿着法线方向偏移viewPos + viewNormal * _Outline;,在frag使用轮廓线颜色, 第二个pass,在光照模型的镜面反射部分,依旧通过法线和半程h的dot点乘结果,通过step如果dot值>阈值(夹角<阈值)返回1,否则返回0...

UnityShade入门精要(9·优化屏幕后期处理)

深度和法线纹理 我们还可以利用深度和法线纹理优化屏幕后期处理 深度贴图存储的是NDC(-1——1)map(0——1)后的z深度 如果为摄像机设置一张仅深度纹理,对于延迟渲染路径,unity是通过G缓冲直接得到的,对于前向渲染,通过深度缓冲可以直接得到 如果为摄像机设置一张深度+法线纹理,对于延迟渲染路径,unity是通过G缓冲直接得到的,对于前向渲染,通过一个单独的pass渲染到深度和...

UnityShade入门精要(7·动画效果)

动画效果 要实现动画效果往往和时间变量有关,内置的时间变量: 序列帧动画 依次播放一系列关键帧图像,当切换间隔时间达到一定数值时, 看起来就是一个连续的动画 我们需要准备一张包含关键帧的图像,它们的大小相同, 由千序列帧图像通常是透明纹理,我们应该向透明度章节一样,使用透明队列,禁用深度写入,开启blend混合模式 内置宏 TRANSFORM_TEX这里回顾一下,它进行下述过程,...

UnityShade入门精要(6·cubmap,环境映射,MRT,程序化纹理)

立方体纹理 如果要绘制天空盒需要使用立方体纹理(包含6张纹理的统称),映射到一个立方体上,立方体包裹住摄像机 从天空盒环境映射到物体上,从而让物体投影天空盒纹理,如何对立方体贴图采样? 需要3维纹理坐标,方向矢量从立方体中心出发,和立方体求交点即求纹理坐标 天空盒实例: 首先在unity创建天空盒非常简单,只需要新建材质,选择 Unity 自带的Skybox/6 Sided着色器,...

UnityShade入门精要(5·渲染路径,多光源,阴影)

渲染路径 渲染路径,决定了光照信息是如何在渲染管线中传递和什么位置进行光照计算的 unity主要有3 种渲染路径:前向渲染路径(ForwardRendering Path)、延迟渲染路径 (Deferred Rendering Path),顶点照明渲染路径 大多数情况下, 一个项目只使用一种渲染路径,因此我们可以为整个项目设置渲染时的渲染路径。我们可以通过在Unity 的Edit– P...

UnityShade入门精要(4·透明测试与混合)

透明效果 对于不透明物体,有两种方法可以保证正确绘制遮挡关系: 不启用深度测试,确保渲染顺序:从后往前渲染,因为每次渲染都会更新颜色缓冲区 启用深度测试,深度值比深度缓冲更小的会通过测试 透明效果 但是想要实现透明效果,就不那么简单了,在 Unity 中,我们通常使用两种方法来实现透明效果: 透明度测试(AlphaTest):只要一个片元的透明度不满足条件(比如小于某个...

版本管理工具

版本管理工具 当我们多人协同开发,要面临同一个项目的维护,我们希望有 追溯历史版本(包括谁做了什么修改),分工协作(增删改,避免代码冲突和重复),版本管理(发布版本、测试版本等),分支开发 等功能,因此我们使用 版本管理工具,其中最常使用的为git 和 svn: Git vs. SVN Git: 分布式版本控制系统,每个开发者都可以在本地完整地复制整个代码仓库,并且可以独立地进...

UnityShade入门精要(3·2DTexture)

Texture 想要完成贴图的效果,是通过纹理映射,找到顶点对应的纹理坐标,查询纹理上对应的纹素,根据纹素的颜色设置顶点的颜色 OpenGL和DirectX在二维纹理空间中的坐标系有差异,在OpenGL里,纹理空间的原点位于左下角,而在DirectX中,原点位千左上角。Unity使用的纹理空间是符合OpenGL的传统的, 也就 是说,原点位于纹理左下 在shader中,新增纹理等属性,...