unity

如何在Unity中分别实现Flat Shading(平面着色)、Gouraud Shading(高洛德着色)、Phong Shading(冯氏着色)

房东的猫 提交于 2020-01-17 16:30:24
写在前面:    先说一下为什么决定写这篇文章,我也是这两年开始学习3D物体的光照还有着色方式的,对这个特别感兴趣,在Wiki还有NVIDIA官网看了相关资料后,基本掌握了渲染物体时的渲染管道(The rendering pipe-line)流程,以及各种空间坐标系(MVP),但是在用Unity的Shaderlab写shader的时候,对于具体怎么实现各种着色有很大的疑问,决定苦心钻研一下,过了几个月吧,现在对写shader还是比较熟练的,也解决了之前的疑惑,写这篇算是一篇笔记,以后可能用到,或者初学者想参考一下都是很好的,那么言归正传。 看这篇教程所需要的基础: 有一定的shader编写基础,能看懂vertex&fragment代码。 了解3D的物体的顶点存储有什么信息。 有一定的Unity基础,能看懂基本的C#代码。 初学者,想学习这方面技术的(虽然本篇本来就很基础) 那么本篇文章正式开始 三种着色方式的区别:   物体在屏幕中每个像素点的颜色,取决于两部分,一个是物体本身顶点的信息,比如位置,法线方向,颜色等等。另一个就是着色方式,着色函数可以根据顶点然后填充中间的部分,比如说你有三个顶点,你就可以用着色函数获取一个面,至于这个面怎么显示,就有各种各样的方法,本篇讲述三种比较常见的方法。 Flat Shading(平面着色) :平面着色简单来讲,就是一个三角面用一个颜色

【译】Unity3D Shader 新手教程(2/6) —— 积雪Shader

♀尐吖头ヾ 提交于 2020-01-17 16:12:16
本文为翻译,附上 原文链接 。 转载请注明出处—— polobymulberry-博客园 。 如果你是一个shader编程的新手,并且你想学到下面这些酷炫的技术,我觉得你可以看看这篇教程: 实现一个积雪效果的shader 创建一个具有凹凸纹理的shader 为每个像素修改其对应纹理值 在表面着色器中修改模型的顶点数据 引论 这是我们系列教程的第二部分,我们将在此部分实现些有用的技术。在学习完 第一部分 的所有背景知识后,我们将利用所学的知识实现一个简单的积雪效果的shader。效果如下: 准备工作 我们想做的其实很简单,简单介绍一下: 随着Snow Level(表示积雪的程度,该值越大,积雪越深)的增大,我们将迎着下雪方向的岩石纹理区域都变成Snow Color(雪的颜色) 随着Snow Level的增大,我们想将该岩石模型稍微变大一点,尤其是雪的边缘厚度要增加,这样给人真正的“积”雪效果。 步骤1 – Bumped Diffuse Shader 我们创建一个新的Diffuse shader(默认新建的shader基本都是Diffuse shader),并向其中添加凹凸纹理效果( 来自 猫大 的原话:法线贴图是凸凹贴图(Bump mapping)的一种常见应用,简单说就是在不增加模型多边形数量的前提下,通过渲染暗部和亮部的不同颜色深度,来为原来的贴图和模型增加视觉细节和真实效果

【译】Unity3D Shader 新手教程(4/6) —— 卡通shader(入门版)

和自甴很熟 提交于 2020-01-17 15:59:14
本文为翻译,附上 原文链接 。 转载请注明出处—— polobymulberry-博客园 。 暗黑系 动机 如果你满足以下条件,我建议你阅读这篇教程: 你想了解更多有关表面着色器的细节知识。 你想实现一个入门级别的卡通效果shader(Toon Shader)。 你想知道渐变纹理(ramp texture)的使用方式。 你想了解边缘光照(rim lighting)的知识。 准备工作 我们想实现一个toon shader - 一种能让模型看起来具有卡通效果的shader,在图形学领域,这被称作非真实感图形学(Non Photorealistic Rendering)。 为了实现这种卡通效果,我们得做以下几件事: 减少原始模型上使用的颜色种类。 自定义光照模型,使明暗边界更清晰。 将模型的边缘绘制成黑色。 表面着色器的工作流程 在教程的第一部分我使用了一个简化版的表面着色器流程图,事实上关于表面着色器的工作流程还有很多内容。首先我们看一个相对完整的工作流程图: (译者注:上面很多部分都是可选的,如果我们不自定义这些部分,那将使用Unity自己提供的处理函数。这里尤其注意可选部分的使用格式。 #pragma surface surfaceFunction lightModel [optionalparams] 对于像素处理函数surfaceFunction

Unity Shader入门精要学习笔记 - 第17章 Unity的表面着色器探秘

筅森魡賤 提交于 2020-01-17 15:36:53
转自 冯乐乐的《Unity Shader 入门精要》 2010年的Unity 3 中,Surface Shader 出现了。 表面着色器的一个例子。 我们先做如下准备工作。 1)新建一个场景,去掉天空盒子 2)新建一个材质,新建一个Shader,赋给材质。 3)场景中创建一个胶囊体,上步材质赋给它 然后我们修改Shader代码: Shader "Unity Shaders Book/Chapter 17/Bumped Diffuse" { Properties { _Color ("Main Color", Color) = (1,1,1,1) _MainTex ("Base (RGB)", 2D) = "white" {} _BumpMap ("Normalmap", 2D) = "bump" {} } SubShader { Tags { "RenderType"="Opaque" } LOD 300 CGPROGRAM #pragma surface surf Lambert #pragma target 3.0 sampler2D _MainTex; sampler2D _BumpMap; fixed4 _Color; struct Input { float2 uv_MainTex; float2 uv_BumpMap; }; void surf (Input IN,

Unity同时打开多个工程

假如想象 提交于 2020-01-17 13:03:15
1)笔记 /Applications/Unity/Unity.app/Contents/MacOS/Unity -projectPath /Users/jianan/Documents/bycw_video/6_car/carRace20180727-Unity2017.4.8f1-ver2 来源: CSDN 作者: cocos+unity+node 链接: https://blog.csdn.net/themagickeyjianan/article/details/104016029

A星寻路的实现,基于Unity C#

依然范特西╮ 提交于 2020-01-17 07:52:45
算法简介 A*简单高效,可用于许多寻路算法中。 在这里我们共实现Node类,PriorityQueue类,NodeManager类和AStar类。 在Node类中,我们管理每个地图块的信息,包括是否为障碍、估值等。 PriorityQueue类用于储存处理完毕的和待处理的节点。 NodeManager类用来管理我们的Node类,在这里我们使用二维数组来管理。 AStar类则是我们的算法实现类。 步骤 将起始节点放置于OpenList中。 判断OpenList中是否还有元素,如有则继续。 从OpenList中拾取首个元素,使其成为当前节点,并获取它的相邻节点。 针对各个相邻节点,判断这些节点是否位于CloseList中,若否,则使用下列公式计算整体估值 (F) : F = G + H (其中G为起始节点到当前节点的整体估值,H为当前节点到目标节点的整体估值) 在相邻节点中储存这些估值并将当前节点设为相邻节点的父节点。 将相邻节点放入OpenList中并按照F进行排序。 将当前节点放入CloseList中并从OpenList中移除。 若当前节点不位于目标节点处则返回步骤2.。 算法实现 此处将按照顺序实现Node类、PriorityQueue类、NodeManager类及主类AStar类。 Node类 using System ; using UnityEngine ; using

unity 蒙皮的实现方式

只愿长相守 提交于 2020-01-17 06:24:36
原理: 蒙皮,三维动画术语,也用于3D游戏中。三维动画的一种制作技术。在三维软件中创建的模型基础上,为模型添加骨骼。由于骨骼与模型是相互独立的,为了让骨骼驱动模型产生合理的运动。把模型绑定到骨骼上的技术叫做蒙皮。 因为蒙皮动画要改动的是我们的骨骼的缩放,平移,渲染。是跟骨骼有关系的。但是我们的模型是一个mesh,是由很多顶点组成的,那么要让骨骼改动的时候mesh也变化的话就需要改动mesh上的顶点。那么自然就需要骨骼和顶点间有一个关联关系。 蒙皮一般是美术做出来的骨骼与顶点的关联关系,也就是说蒙皮就是骨骼与顶点间的关系。 实现方式: 在unity中,我们要获取这个关联关系可以通过Mesh下的boneWeights来获取,这里获取的是每个顶点的关联骨骼信息。就包括boneIndex0到3和weight0到3。分别是顶点的关联骨骼索引和关联骨骼索引的权重。unity支持4个关联骨骼。 要做蒙皮的话我们需要把骨骼的顶点与他的有关联的骨骼索引关联起来。所以需要做一次所有骨骼的坐标转换到动画做动画的坐标系,需要做一次矩阵左乘。 我们要获取骨骼的矩阵信息,首先需要获取骨骼坐标下的骨骼矩阵,通过Mesh的bindposes可以获取所有的骨骼坐标信息。然后左乘动画世界坐标bones[j].localToWorldMatrix * bindPoses[j]。这样可以转换到世界坐标下。

Unity3D学习交流(三)(萌新入)-安卓端触控方式的坑

有些话、适合烂在心里 提交于 2020-01-17 01:41:22
JoyStick 之前一直不知道发布到手机上怎么操作,看到网上有人说,桌面端上的鼠标点击和手机上的触控点击是一样的,把电脑上的WSAD键改成四个button就行,鼠标左键攻击也改成手机上的一个button,其他一些功能需要专门学习移动端的触控Touch方法,当时一想,改成button就很简单,Touch还是算了,懒得想,觉得很难。(不想用插件) 后面实际操作时,又想到玩手机游戏都是左边有摇杆,想想还是摇杆更好,就搜了大佬的教程,怎么判断移动呢,之前桌面端就利用 float x = Input.GetAxis(“Horizontal”); float z= Input.GetAxis(“Vertical”);现在手机上用摇杆,就用摇杆在X和Z方向的移动值传给float x,float z即可; 然后令我困扰一天的事情发生了,在使用左边摇杆控制人物移动,左边我点击攻击按钮就行攻击时,触控发生了冲突,我只要点击攻击按钮,左边的摇杆就变成朝我右手点击的按钮方向了,我很困扰为什么不能同时左边点击虚拟摇杆控制人物移动,右边点击按钮控制人物攻击,我用关键字搜索很多结果,也有我这样的问题,但没有明确的回答(现在想想知道了,因为太简单了。。emm),其中我看到一个关于双摇杆的实现,我觉得有点类似,都是两边触控,然后研究了一会,额,复杂,我不怎么看得懂,头疼,我只是想两边都能正常点击实现相应功能

Unity3D学习交流(四)(萌新入)-用UGUI和DOTween制作UI动画

最后都变了- 提交于 2020-01-17 01:36:42
1. 之前在跟视频学习做一个游戏的开始界面UI时,因为视频里用的 NGUI ,它自带Tween可以直接实现UI界面之间的动画切换;而我用的 UGUI ,因为是原生的,效果还行也懒得安装插件了,机缘巧合下载安装了 DOTween ,学习后发现DOTween很强大很好用; 比如在切换界面时,可以用transform.DOScale,transform.DoMove等; 我为了方便,类似NGUI上面的Tween这种,用DOTween写了两个脚本 (1).DOScale.cs using System . Collections ; using System . Collections . Generic ; using UnityEngine ; using DG . Tweening ; public class DoScale : MonoBehaviour { public Vector3 From = new Vector3 ( 0 , 0 , 0 ) ; public Vector3 To = new Vector3 ( 0 , 0 , 0 ) ; public float Duration = 0.3f ; //持续时间 public void DoScaleTo ( ) { transform . localScale = From ; transform .

opencvForUnity学习

隐身守侯 提交于 2020-01-16 18:30:20
目录 一、目的: 1、最近需要在Unity中使用到opencv,找了很多,opencvSharp、opencv做成dll给Unity调用,然后找到了这个插件 一、参考: 1、参考:OpenCVForUnity下载: ①总结:pass,要钱, 2、参考:OpenCVForUnity插件 配置基础开发环境 ①总结:good;可以下载并且可以运行 3、参考:#基于VR环境下的手指识别键盘输入# 利用OpenCV for Unity初步完成的手指识别效果(二) ①总结:待测试: 4、参考:OpenCVForUnity 图像分割,分离前景和背景 ①总结:待测试: 5、参考:#基于VR环境下的手指识别键盘输入# 利用OpenCV for Unity初步完成的手指识别效果(一) ①总结:待测试: 6、参考:用OpenCV For Unity读取图片 ①总结:待测试;内容:使用这个插件,环境配置好:OpenCVForUnity插件 配置基础开发环境,读取指定文件夹下面的图片,显示在RawImage中 ①参考后自己写: 7、参考:[Unity教程]如何使用OpenCV for Unity创建文档扫描程序(英文字幕) ①总结:待测试; 一、目的: 1、最近需要在Unity中使用到opencv,找了很多,opencvSharp、opencv做成dll给Unity调用,然后找到了这个插件 一、参考: 1