游戏
文章平均质量分 57
张山大人
这个作者很懒,什么都没留下…
展开
-
UnityShader-如果使用遮罩纹理更好控制光照模型下的照亮程度
遮罩纹理的作用传统的遮罩纹理只是为了在同一个采样或者光照模型下,某些会被照亮的区域,我们并不希望他被完全照亮时,我们就会使用遮罩纹理进行调节。遮罩纹理就起到了一个遮罩的作用,让这些区域变的更亮或者更暗一点。在目前的游戏项目中,遮罩纹理其实更像一个调节器,,更自由的控制颜色最终的生成,而不是仅仅根据模型去计算。给予美术人员更高的自由度。纹理的每个像素都有四个通道,在现代项目中,这四个通道会被赋予不同的值。每个值都将在模型的采样或者光照计算中发挥一定的调节作用。比如调节光照强度,边缘光的强度,高光反射指原创 2021-06-08 13:03:40 · 284 阅读 · 0 评论 -
UnityShader-如何使用渐变纹理在模型的表面区分出明显的色域
卡通渲染中的渐变纹理近年来一些卡通渲染中会使用到渐变纹理,在人物模型上营造出随着光照变化明显的明暗部分,比如塞尔达,塞尔达的卡通渲染就大量的应用了渐变纹理。如下图的面部。面部上明显的光暗轮廓就是通过在渐变纹理上的采样,与模型本身的纹理采样进行混合得到。配合上近乎轮廓颜色的描边,成就了一种极为立体的卡通渲染。后面有机会会完整的演示一次这种基于渐变纹理和描边的卡通渲染。渲染原理将模型法线与光照方向求出点积,进一步规范到0-1之间float gradient = dot(worldNorma原创 2021-06-08 11:28:03 · 369 阅读 · 0 评论 -
UnityShader-使用切线空间下的法线贴图
法线贴图在游戏中,如果墙面,草地这些,如果从模型的角度去展现凹凸感,那模型的细节难度会增加不少,同时而来的也是顶点的增加,这样是及其浪费的。我们通常使用法线贴图,使得模型随着环境或者光照的改变增加这种凹凸感,让我们可以用一个简单的面片也能展现出细节丰富的视觉效果为什么使用切线空间下的法线纹理自由度更高,当一张纹理可以用在不同的模型上时,可以只使用一套法线纹理,但是模型空间下,必须对每一个模型都创建一套对应的法线纹理可压缩,切线空间下法线纹理的z方向总是正方向,因此我们可以通过xy轴进行点积,之原创 2021-06-08 00:50:06 · 555 阅读 · 0 评论 -
UnityShader-阴影的原理介绍及实现过程
阴影形成的原理2.阴影投射原理详解因为三维的示意图不好画,所以这里的讲解都在二维空间中,但是不影响最终结果首先有一个大前提,上图的数值全部在一个坐标空间中,这里选取的是被投影的Plane片自身的模型空间,大家先不要管坐标系转换,先知道一点,他们现在在一个坐标空间下就可以了ly和lx是光照方向归一化之后的方向,可以理解为光照方向的单位向量三角形ABC和三角形ADE近似,则有:ACAE=BCDE\frac{AC}{AE}=\frac{BC}{DE}AEAC=DEBC,得到 AE=AC∗DEBC原创 2021-05-27 19:46:02 · 1520 阅读 · 0 评论 -
UnityShader-平行光和点光源的基础介绍和使用
平行光1. float4: _WorldSpaceLightPos0_WorldSpaceLightPos0 .w 为0,这是一个平行光,_WorldSpaceLightPos0 .xyz是这个平行光在世界中的位置_WorldSpaceLightPos0 .w 不为0,这是一个点光源,_WorldSpaceLightPos0 .xyz是这个点光源在世界中的位置几乎所有情况下,都应该以第一种情况为准,即_WorldSpaceLightPos0 存储的是平行光的位置,至于第二种情况是什么时候发生,博原创 2021-05-27 00:32:43 · 2030 阅读 · 0 评论 -
UnityShader-2D图像的边缘检测,基于Sobel算子
效果图原理检测一个像素是不是边缘点,我们可以通过检测他周围的颜色值,如果颜色值过度较大,则是一个边缘点,如果颜色值过渡较小,则就不是一个边缘点。我们可以通过检测每个像素周围八个像素的颜色值进行判断通过算子,算子记录的变化的梯度值,目前比较流行的就是sobel算子算子的原理我们会另外一篇博文去讲解,这里我们只需要知道,分别算出像素x、y与算子矩阵的结果,就可以知道这个点是不是边缘点Sobel算子Gx={ -1,0,1, -2,0,2, -1,0,1}Gy={ -1,-2,-1原创 2021-05-24 20:57:53 · 1670 阅读 · 7 评论 -
Java游戏服务器系列:Netty简单介绍
简介Java的底层API逐渐复杂,而开发者面对的开发场景需求也在逐渐增大。如果直接针对底层API进行编程,无疑是耗时耗力的。这时就催生了极多的编程框架,这些框架隐藏了API实现的复杂细节,以最简洁的方式给开发人员提供功能的实现接口。Netty就是一款针对于网络链接的框架,他的出现让服务器开发人员更加的集中关注于更多逻辑的实现,而不为了实现更好更多更稳定的链接而头疼。Netty的核心功能基于 NIO 实现。Netty的应用场景几乎适用于所有的长短链接场景,由于Java应用的广泛性,几乎所有的互联网公司或原创 2021-05-21 16:36:34 · 301 阅读 · 1 评论 -
Java游戏服务器系列:非阻塞I/O模型-NIO
原型说明背景在了解NIO (Non-Block I/O) 非阻塞I/O模型之前,我们可以先了解一下原始的BIO(Block I/O) 阻塞I/O模型,NIO模型能够以非阻塞的方式更好的利用服务器资源。组件说明(1)Channel:NIO模型中的管道,管道是链接建立和通信的重要组件,我们可以理解管道是一个容器环境,我们所有的I/O的建立读取都可以在这个容器中进行(2)Selector:NIO中的选择器,NIO是由事件驱动的,当有链接事件或者读取事件发生时,这个事件可以注册到这个选择器上,并且最终被原创 2021-05-21 14:52:19 · 181 阅读 · 0 评论 -
Java游戏服务器系列:最基本的阻塞I/O模型-BIO
原始的单线程阻塞I/O模型(1)模型图(2) 代码书写:const int PORT = 6666;//开始监听端口ServerSocket serverSocket = new ServerSocket(PORT);//阻塞自己监听是否有链接进入Socket socket = serverSocket.accept();//处理socketBufferedReader in = new BufferedReader(new InputStreamReader(socket.getInp原创 2021-05-21 12:52:42 · 154 阅读 · 1 评论 -
UnityShader-素描铅笔画风格 实现详解
效果图实现大致思路(1)几张铅笔画程度不同的素描原线图(2)根据模型顶点法线与场景中光照方向的夹角算点积。(3)点积越大,颜色越前,素描程度越低,点积越小,颜色越深,素描程度越大。(4)将点积分为七个不同的范围,其中最大的范围为纯白色(5)其余六个范围,按点积大小从上方素描原线图由浅至深进行采样(6)增加一个纯白贡献度,将不采样的部分及单次采样的部分向白色翻转,形成留白的效果详细代码解释(1) 定义属性 Properties{ //物体本身颜色 _Color("Main原创 2021-05-20 01:01:11 · 1037 阅读 · 0 评论