- 博客(55)
- 资源 (1)
- 收藏
- 关注
原创 练习项目(十):非真实感渲染的几个小知识点
概述本篇内容比较简单,主要介绍非真实感渲染中的几种轮廓线实现方法,再介绍一下卡通着色和素描风格的渲染技术。 一、表面角度轮廓线实现思路:利用视线方向和顶点法线的点积,得到轮廓线的信息。点积越接近0,说明距离轮廓线越近。这种方式的优点是,只需要一个Pass就可以得到结果,简单、快速。但缺点也很明显,只适用于某些类型的模型,对于像Cube这样的模型就会有问题。由于这种方法渲染得到的轮廓线宽度不均,实际应用不多。效果如下:代码如下二、程序几何轮廓线实现思路:使用两个Pass渲染,第一个Pass
2021-02-28 12:57:16
350
原创 练习项目(九):反射、折射相关计算
概述反射、折射,在实现水面、玻璃等效果的时候,都多多少少会用到一些。本文主要简单介绍一些实现反射和折射的知识。使用天空盒来代表环境的信息。 一、简单的反射反射,表现为物体反射它周围的环境。根据观察者的视角,反射会影响到物体本身的颜色表现。镜子就是一个反射性物体,它会根据观察者的视角反射它周围的环境。在中学的物理课中,应该就学习过入射角、反射角等概念。反射的原理并不难,只是根据视角方向、法线方向,计算出反射方向,用来采样立方体贴图(此处是天空盒)。下图简单描述了这个过程:已知视角方向viewDir
2021-02-28 12:56:21
986
原创 练习项目(八):在URP中显示法线图
概述在Build in渲染管线下,获取深度图、法线图很简单。但是在URP下,获取深度图很简单,但是并没有提供对获取法线图的支持。本文主要参考Build in渲染管线下获取法线图的原理,在URP下获取法线图。 一、Build in渲染管线中获取法线图在Build in渲染管线中,获取法线图很简单,在脚本中添加如下代码,然后挂在相机上即可。这样,深度、法线信息就会存储在名为_CameraDepthNormalsTexture的图中,在Shader中可以采样该图获取深度、法线信息。Camera.main.
2021-02-28 12:55:20
1680
原创 练习项目(七):几种简单的阴影实现
概述再次说明一下,最近的几篇“练习项目”,都是在学习这个Github项目,使用URP重新实现一遍。对于本篇的内容,我也纠结了很久,纠结要不要写本篇博客。因为本篇的内容没有什么知识点,只是介绍了一些比较受限的阴影实现。最后还是决定要写下来,让这个“练习项目”完整一点。 一、用面片实现阴影说起来也是缘分,几年前刚毕业进入一家游戏公司,那时候做的是横版2D游戏,游戏内角色的阴影就是用这种方式实现的。后来也有几款游戏延续了这种实现方式。这种方式很简单,用一个圆形的面片代表阴影,放在要产生阴影的物体下方,跟随
2021-02-28 12:54:13
650
原创 练习项目(六):Back facing描边法
概述描边,在卡通渲染中是一个非常重要的主题。目前比较流行的描边方法有两种:一种是基于后处理的描边,这种方式相对不容易定制,适用于对复杂场景的描边;一种是过程式描边,通过两次绘制,一次绘制本体,一次绘制描边。本文主要介绍第二种描边方式,在《GUILTY GEAR Xrd》中称其为Back Facing法。一、基本的实现描边基本思路是通过两次绘制,一次绘制本体,一次绘制描边。这里就有个问题,两次绘制的顺序怎么处理呢?经过试验可以发现,两种顺序可以得到相同的结果。本文使用的顺序是先绘制本体,再绘制描边
2021-02-28 12:53:12
819
原创 练习项目(五):程序化生成多边形
概述本篇是“练习项目”系列的第五篇,主要练习程序化生成各种多边形的例子。这一篇博客,主要都是一些数学知识,这里推荐一个软件:GeoGebra。这个软件可以很方便地画出各种函数的几何表示,对于问题的分析很有帮助。实例1、圆形在UV坐标系中,根据给定的圆心和半径,判断当前片元的UV值到圆心的距离是否小于半径。主要的代码如下:float Circle(float2 center, float radius, float2 uv){ return 1 - step(radius, distance(
2021-02-28 12:52:01
513
原创 练习项目(四):深度图基础及应用
概述本篇是“练习项目”系列的第四篇,主要介绍一下深度图的原理,以及使用深度图实现一些炫酷的效果。这里再次说一下,本系列的文章,大部分是根据网上的博客,把项目从Build in管线转到新版的URP管线。前面三篇文章,基本没遇到什么因为管线不同而产生的困难。但到了深度图和后处理,新旧管线之间还是有相当大的不同的,在这里绕了不少弯路,希望这里多注意一下。一、原理深度纹理实际就是一张渲染纹理,只不过它里面存储的像素值不是颜色值,而是一个高精度的深度值。由于被存储在一张纹理中,深度纹理里面的深度值范围是[0,1
2021-02-28 12:42:46
2432
1
原创 练习项目(三):表面凹凸技术
概述本篇是“练习项目”系列的第三篇,主要介绍一下利用表面凹凸技术提升物体的表面细节。为了提升模型表面的细节,一个可以想到的方式是制作更加复杂的网格,但这是不可取的。一方面会增加美术人员的工作量;另一方面,也会对机器的性能造成很大的消耗。本篇文章,将介绍一些表面凹凸的技术,来达到提高表面细节的目的。一、凹凸贴图(Bump Mapping)这种技术,使用高度图来计算法线。给定一张高度图,通过计算相邻像素的高度差值来改变表面法向量。为了计算(u,v)处的法向量,要经过以下几步。第一步,在(u-1,v)和
2021-02-28 12:40:06
350
原创 练习项目(二):消融效果
概述本篇是“练习项目”系列的第二篇,主要介绍一下利用消融实现的效果。在游戏开发的过程中,有很多看起来很神奇的效果,都是使用消融的原理实现的。原理主要的原理,就是使用噪声图和透明度测试,根据噪声图中采样的值,对某些像素进行剔除。1、基本原理实现这里会实现一个最基础的项目,来简单了解消融的基本原理。主要的代码如下:float cutout = SAMPLE_TEXTURE2D(_NoiseTex, sampler_NoiseTex, input.uv.zw).r;AlphaDiscard(cuto
2021-02-28 12:38:45
704
原创 练习项目(一):顶点动画
概述之前是使用OpenGL练习图形学项目的,现在要转向在Unity 3d中练习图像学项目。由此,才有了这一系列的项目。本篇将从比较简单的顶点动画说起,开启图形学的篇章。原理主要的原理,就是在顶点着色器中,对顶点进行各种偏移。这种偏移,可以根据自己的需要,在模型空间、世界空间、裁剪空间等空间中进行。1、压扁效果开放两个属性,TopY和BottomY,代表物体的上部和底部(世界空间中的数值)。再开放一个滑动属性用来控制顶点运动的幅度。以TopY为基准,先计算出每个顶点的世界坐标,然后对顶点的Y坐标进
2021-02-28 12:32:55
1099
1
原创 法线贴图那些事儿
概述在学习法线贴图的过程中,有几个比较难以理解的概念,这里记录一下。特别说一下,本文的法线贴图是切线空间下的法线贴图。空间变换如上图所示,简单表达了在使用法线贴图的过程中,涉及到的几个空间变换:切线空间:从法线贴图中采样得到的法线,在切线空间中;对象空间:物体的本地坐标空间,顶点的相关信息,在对象空间;世界空间:光源位置、观察者位置等,在世界空间中。在空间变换的过程中,主要涉及到了两个变换矩阵:TBNTBNTBN矩阵:从切线空间变换到对象空间;ModelModel
2020-05-25 08:04:50
696
原创 令人迷惑的Gamma
概述首先我想说,接触到Gamma的概念也很长时间了,一直没有认真的去学习它。知其然而不知其所以然。最近恰巧学到了这一部分,就想彻底地搞懂它。CRT说起Gamma,肯定离不开CRT(阴极射线管)。CRT(阴极射线管)是大多数计算机显示器、视频监视器、电视接收器和示波器中使用的显示设备,由德国科学家 Karl Ferdinand Braun于1897年发明。它的特点是荧光屏被加热的阴极发...
2020-04-20 09:58:32
553
原创 深度缓冲中的深度值计算及可视化
概述在渲染管线中的顶点变换中,介绍了顶点在各个坐标空间的变换。变换到最后,是屏幕坐标空间。在OpenGL中,屏幕空间坐标的Z值即是深度缓冲中的深度值。深度缓冲包含了一个介于0.0和1.0之间的深度值,它将会与观察者视角所看见的场景中所有物体的z值进行比较。本文将介绍深度值的计算,以及从深度值反向计算出相机空间中的顶点的Z值。深度值计算在渲染管线中的顶点变换中,计算得到了透视投影矩阵:Mpe...
2020-04-09 16:41:16
635
原创 渲染管线中的顶点变换
概述在图形学渲染管线中,一个顶点坐标,大概要经历局部坐标系、世界坐标系、相机坐标系、裁剪坐标系,最后到窗口坐标系,显示在屏幕上。在这些过程中,从一个坐标系到另一个坐标系,都需要进行一定的变换。下面,将介绍每次变换的方式。注意,本文是针对OpenGL的。局部空间->世界空间这一变换过程,主要是将模型放置在世界空间中,进行一定的缩放、旋转或平移。这一步比较简单,只要将相应的矩阵作用到...
2020-04-08 17:49:37
1046
原创 导入图片时设置默认格式
导入图片时设置默认格式当我们将图片导入到工程中时,unity 3d会对图片进行处理,设置图片的默认格式。如下图所示,是图片导入到工程中,unity 3d进行的默认设置。 但是,一般情况下,这样的图片格式并不能满足我们的需求。所以我就想,有没有办法修改图片导入时设置的格式呢?答案是有的。 首先说一下思路: 1. 我们可以在Assets文件夹下建立一个文件夹,例如:G
2017-07-16 11:11:54
1310
1
原创 查找丢失组件的预制体
在制作游戏的过程中,我们经常会遇到预制体丢失组件的情况,如下图所示。 预制体丢失组件,一般情况下如果我们不去获取该组件,就不会报错或影响游戏的运行。但是在游戏加载该预制体时,会报警告,看到Console中有警告的话也是非常难受的。考虑到游戏中使用了上百的预制体,每个预制体又由数个甚至数十个子物体组成,手动寻找丢失组件的预制体的工作量太大,不具有很好的可操作性。
2017-03-02 08:13:27
1278
原创 移动到目标点的方法
考虑这样一个需求:敌人出生在A点,需要到达B点去攻击主角。之前,我是这样实现这个需求的(只考虑Z轴的移动): 1 using UnityEngine; 2 3 public class Test : MonoBehaviour 4 { 5 /// 6 /// 目标点 7 /// 8 Vector3 targetPos; 9
2017-02-25 21:14:32
503
原创 关于material和sharedMaterial的问题
在unity3d中,Renderer组件有两个属性:material和sharedMaterial,它们都可以用来获取Renderer的材质属性。但是它们之间却又很大的区别,下面通过示例来讲解一下。准备工作:unity3d中新建一个空场景;创建两个cube,分别命名为Cube0、Cube1;在Project中新建一个材质球,取名M0,shader选择Unlit/Color,shader的M
2016-11-18 21:23:28
2134
原创 LINQ To XML的一些方法
1、Elements()返回XML文档或片段的所有第一级元素。2、Descendants()返回XML文档或片段中的所有子元素(所有级别的子元素)。3、Attributes()返回当前选中元素的所有特性。
2016-02-15 09:00:23
346
转载 关于Unity3d中的LayerMask使用
http://blog.youkuaiyun.com/monzart7an/article/details/22605949
2015-11-12 17:02:17
571
原创 在unity的scene中画五角星
使用Gizmos的DrawLine方法画线。首先在场景中找到五角星的五个定点的坐标,按照一笔画的顺序命名为1,2,3,4,5,如图所示:接下来就是编写代码了,代码很少,如下所示:using UnityEngine;using System.Collections;public class fiveStars : MonoBehaviour { public Tr
2015-08-13 10:45:45
2156
原创 unity tips
1、在unity 的mecanim中,如果一个动画指向两个或两个以上的动画,那么在inspector中,transitions中可以看到所有的过渡路径,这些路径是有先后顺序的。
2015-07-28 16:03:32
410
原创 unity 3d 生成apk文件时,设置图标
如图所示:注意红线标注部分:如果安装到手机之后,程序的图标还是unity的默认图标,重启手机即可。
2015-04-09 13:57:48
6758
原创 别踩白块(u3d)
刚开始接触unity 3d,现在要从头学起,模仿《别踩白块》做一个游戏。下面开始正文了。在做之前,先想好需要哪些界面。需要一个开始界面和一个游戏界面。由于刚开始,先做的是游戏界面。截图如下:用了一个面板做天空北京,一个球体做地面,摄像机角度调整好,有那么一点3D的感觉。将整个游戏场景放在一个空对象GameUI中,方面后面的编程。固定场景搞定,下面开始动态的游戏物体--黑白块了。游戏素材
2015-04-05 09:18:17
4278
原创 第三人视角,摄像机跟随代码
using UnityEngine;using System.Collections;public class CameraFollow : MonoBehaviour { public Transform target; // The distance in the x-z plane to the target public float distance = 10.0f; //
2015-04-01 13:19:42
763
原创 SQL SERVER 2005 请求失败或服务未及时响应
出现的问题如图所示,在开始->程序->Microsoft SQL Server 2005->配置工具->SQL Server Configuration Manager中,打开后找到"SQL Server 2005 网络配置"->MSSQLSERVER 属性的协议 在右边的属性框中把“VIA协议”禁用即可!
2015-01-25 22:50:21
1289
1
原创 SQL SERVER 2005 错误:18456
安装好SQL SERVER 2005之后,Windows身份验证无法登陆,出现18456错误。而sql server 身份验证可以用sa用户登陆。解决办法:用sa用户登陆,执行SQL 语句:CREATE LOGIN [soros\longfei] FROM WINDOWS中间括号里面的是计算机名和你的用户名。
2015-01-24 20:52:32
565
翻译 QUdpSocket Class
翻译自:QT官网文档QUdpSocket类Header:#include qmake:QT += networkInherits:QAbstractSocket.注意:这个类的所有函数都是不可重入的(reentrant)。所有类的列表,包括继承类
2014-11-29 18:42:35
3963
转载 qt获取本机网络信息
networkinformation.h#include#include#include#include#include#includeclass NetworkInformation:public QWidget{ Q_OBJECT public: NetworkInformation(QWidget *parent=0); void getHostInfo
2014-11-29 15:45:17
545
原创 Qt开始学习的一些问题
1、需要将qmake、moc和qvfb的路径加入到系统的环境变量:qmake、moc:export PATH=$PATH:/usr/local/Trolltech/QtEmbedded-4.6.1-i386/binqvfb:export PATH=$PATH:/opt/QtEmbedded-4.4.3-i386/sdk/qtopiacore/host/bin2、遇到错误:Qt for
2014-11-18 16:53:21
647
转载 Ubuntu下嵌入式Qt开发环境配置全攻略
http://qpcwth.blog.163.com/blog/static/20993024620139151424822/在安装的过称中,出现y
2014-09-05 16:21:32
763
原创 链表的基本操作
#include#includetypedef int datatype;//存储结构定义typedef struct LNODE{ datatype data; struct LNODE *next;}Lnode, *LinkList;//打印链表void printlist(const LinkList l){ LinkList p=l->next; while
2014-08-28 10:56:40
595
原创 两种矩阵转置的代码
#include#include//#define MAX_TERMS 101#define MAX_COL 50typedef struct{ int row; int col; int value;}term;//term a[MAX_TERMS];/*void transpose(term a[], term b[]){ int n,i,j,currentb
2014-08-23 10:27:53
1166
原创 这个更新需要花去 50.6 M 磁盘上总计 /boot 的空间。请在 7737k 磁盘上留出 /boot 空间。清空您的回收站和临时文件,用“sudo apt-get clean
系统升级会下载多余的内核,删除即可。1
2014-08-13 08:34:58
4589
原创 多线程:pthread_exit,pthread_join,pthread_self
/*exit_join_id.c*/#include#includevoid* eji(void* agr){ printf("here is eji\n"); printf("PID= %u",(unsigned int)pthread_self()); pthread_exit("here all done!\n");}int main(int arg
2014-08-12 20:34:04
546
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人