Unity3D渲染的重要编程——着色器编程

Unity3D渲染的重要编程——着色器编程

日期: 2017-11-09
浏览次数: 45

众所周知,Unity3D的所有渲染工作是都离不开着色器的,也就是Shader。它实际上就是一小段程序,它负责将输入的Mesh以指定的方式和输入的贴图或者颜色等组合作用,然后输出。绘图单元可以依据这个输出来将图像绘制到屏幕上。输入的贴图或者颜色等,加上对应的Shader,以及对Shader的特定的参数设置,将这些内容打包存储在一起,得到的就是一个Material。之后,我们便可以将材质赋予合适的renderer来进行渲染了。讲到最后Shader就是一段规定好输入颜色贴图和输出渲染器能够读懂的点和颜色的程序。

一、Shader种类

Shader大体上是分为三类:

1、Surface Shader——表面着色器

包含光照运算,3D场景

2、Vertex and Fragment Shader ——顶点/片段着色器

不包含光照运算,2D场景,特效

3、Fixed Function Shader ——固定函数着色器

不推荐

Unity3D渲染的重要编程——着色器编程


顶点/片段着色器

 二、Shader基本结构

随便用个文本编辑器打开刚才新建的Shader:

 Unity3D渲染的重要编程——着色器编程


Unity3D渲染的重要编程——着色器编程


属性Properties{}

举例:_Name(“Display Name”, type) = defaultValue[{options}]

_Name:变量名

Display Name:显示名

type:类型则有以下几种

Unity3D渲染的重要编程——着色器编程

 defaultValue:默认值则跟类型相对应

Unity3D渲染的重要编程——着色器编程 

options:可选项

2D / Rect / Cube – 填入OpenGL的TexGen的模式,至少为{}

实例:

定义一个默认值为半透明蓝色的颜色Main Color _MainColor (“Main Color”, Color) = (0, 0, 1, 0.5)

定义一个默认值为纯白色的纹理Main Texture _MainTex (“Main Texture”, 2D) = “white” {}


 子着色器SubShader

1、Tags标签

Tags { "TagName1" = "Value1" "TagName2" = "Value2" }

作用:控制渲染引擎“何时”、“如何”将子Shader 内容进行呈现

渲染类型:

Tags { “RenderType”=“Opaque” }  //渲染输出的是非透明物体

Tags { “RenderType”=“Transparent” } //渲染输出的是透明物体

渲染顺序队列:

Tags { “Queue” = “Transparent” } //指定在渲染透明物体的顺序队列

2、细节层次LOD

LOD: Level of Detail

数字越大,细节越高,消耗越大

“LOD 100”是非常低的值,与VertexLit(顶点光照)Shader的LOD值相同

3、CGPROGRAM…ENDCG

标记CG 程序

实现语言为Microsoft 的HLSL 语言(大多数与NVIDIA 的CG语言相同)

4、#pragma

作用:指示编译对应Shader 函数

#pragma vertex vert //函数名为vert 的Vertex Shader

#pragma fragment frag //函数名为frag的Fragment Shader

5、sampler2D

sampler2D 是与纹理绑定的数据容器接口,为CG/HLSL 中2D贴图的类型

相应还有sampler1D、sampler3D、samplerCUBE 等格式

注意:因为CG 程序需要访问属性( properties )的变量,CG程序中的变量必须使用和之前变量相同的名字进行声明

6、include

作用:导入Unity 包含Shader 预定义的变量和函数的文件

#include “UnityCG.cginc” //导入Unity 通用CG 预定义文件

7、appdata与v2f

appdata : 输入到Vertex Shader 的数据

v2f : 从Vertex Shader 输出,输入到Fragment Shader 的数据

“float4”定义一个四维浮点数向量,浮点数精度为32-bit

“: POSITION“是Shader参数的“语义”,表示这个为Vertex的空间坐标

“SV_POSITION”描述Vertex的像素位置

8、vert与frag

UnityObjectToClipPos() //将Vertex 的对象空间转换为摄像机的剪裁空间(屏幕2D坐标)

“fixed4”定义一个四维浮点数向量,浮点数精度为11-bit,值域从-2.0到+2.0

“SV_Target”描述像素pixel → Color

“return fixed4(1,0,0,1)”表示最后frag返回的是纯红色的像素


相关新闻 / News More
  • 点击次数: 45
    2017 - 11 - 09
    众所周知,Unity3D的所有渲染工作是都离不开着色器的,也就是Shader。它实际上就是一小段程序,它负责将输入的Mesh以指定的方式和输入的贴图或者颜色等组合作用,然后输出。绘图单元可以依据这个输出来将图像绘制到屏幕上。输入的贴图或者颜色等,加上对应的Shader,以及对Shader的特定的参数设置,将这些内容打包存储在一起,得到的就是一个Material。之后,我们便可以将材质赋予合适的renderer来进行渲染了。讲到最后Shader就是一段规定好输入颜色贴图和输出渲染器能够读懂的点和颜色的程序。一、Shader种类Shader大体上是分为三类:1、Surface Shader——表面着色器包含光照运算,3D场景 2、Vertex and Fragment Shader ——顶点/片段着色器不包含光照运算,2D场景,特效3、Fixed Function Shader ——固定函数着色器不推荐顶点/片段着色器 二、Shader基本结构随便用个文本编辑器打开刚才新建的Shader: 属性Properties{}举例:_Name(“Display Name”, type) = defaultValue[{options}]_Name:变量名Display Name:显示名type:类型则有以下几种 defaultValue:默认值则跟类型相对应 options:可选项2D / Rect / Cube – 填入OpenGL的TexGen的模式,至少为{}实例:定义一个默认值为半透明蓝色的颜色Main Color _MainColor (“Main Color”, Color) = (0, 0, 1, 0.5)定义一个默认值为纯白色的纹理Main Texture _MainTex (“Main Texture”, 2...
  • 点击次数: 37
    2017 - 12 - 08
    主界面界面里有一部分功能并没有完善,但我还是贴出了最新的界面,公开给大家是想告诉大家,每个人的工具界面都不一样,都有自己整理的工具,所以这里我将分享 界面源码参考: Transform相对变换位置、方向、大小   参考以上脚本,举例设置位置,方向,大小各一个。可以自己搭配出更适合自己的操作,使用它的优点是,它的操作可以直接忽略子物体会引起的变化。快速切换对象激活关闭 快捷键Ctrl+1,可以快速的激活或关闭选中对象。使用鼠标点击属性面板左上角来切换会比较麻烦。快速编组对象 快捷键Ctrl+4,为多选的几个对象添加父节点并编组,等价于新建一个空物体,并将多个对象拖进来。快速命名子节点 快速命名选中对象的所有子节点名字,对于强迫症严重的程序可以使用改方法进行快速命名。计算三角面和顶点 计算三角面和顶点,这个工具可以查看场景中所有对象的点面的数量,也可以查看指定对象包含的点面,便于对场景的控制。
  • 点击次数: 45
    2018 - 01 - 12
    1:在场景里拉一个”Cube”,把摄像机以及需要运动的物体附加到这个“Cube”上面。2:创建一个镜头。3:点击过场动画,创建一个“Matinee”。4:选中镜头在左边栏右击创建一个“New Camera Group”,做右边时间轴设定要动画的时间。5:选中“Movement”按回车键,在右边处会出现一个关键帧。6:回到场景拖动摄像机设定运动轨迹。7:选中刚才所创建的Cube,在右击创建一个New Empty Group,右击右击选择添加新“Movement Track”。8:鼠标左键选中关键帧1按回车键,按住Ctrl不放拖动会出现另外一个关键帧,把它拖到合适的位置,可以创建多个关键帧,创建好关键帧以后双击关键帧2。(轮子也是同样的操作,先把轮子附加到“Cube”固定好位置再做动画)9:创建导演组,右击选择“New Director Group”。10:左击空白处按回车键分别选择两个动画。11:打开蓝图创建一个“BeginPlay”,在右侧世界大纲试图找到刚才所创建的“Matinee8”,直接拖进蓝图里面,创建一个Play,然后把他们链接起来,点编译。12:点击播放预览一下确认没问题就可以导出视频了。13:点击过场动画,选中刚才所创建的“Matinee”,点击Movie进行简单的设置就可以导出视频了。
  • 点击次数: 32
    2018 - 02 - 02
    也许你是一位开发者,想为自己的HTC Vive游戏制作酷炫的宣传片;或者你是游戏主播,想为观众带来高质量的VR直播体验;甚至你是一位VR的爱好者。无论如何,如果你对MixedReality(混合现实)感兴趣,请继续看下去。本文将介绍如何用HTC Vive拍摄高质量MR视频。什么是Mixed Reality(混合现实)影片?Mixed Reality影片就是透过VR中的影像+人像合成的影片。相较一般方法录制的VR影片,Mixed Reality视频更适合用来做游戏直播和制作宣传影片。 如果还是不清楚,可以看看以下这支影片,就是透过Mixed Reality所制作的影片效果。 http://v.qq.com/x/page/x0194621p8b.html 制作Mixed Reality影片需要准备的道具1.) 绿幕环境 2.) 相机/摄影机(建议参数:1080p/60fps) 3.) 4K屏幕:为了合成1080p的影片,屏幕需要能放得下多个1080p窗口(建议参数:4K/60Hz) 4.) HDMI分配器 5.) HTC Vive 一组  6.) 第三个HTC Vive手柄(购买网站:https://www.htcvive.com/cn/accessory/controller/ ) 7.) VR Ready 电脑(建议参数:操作系统: Windows 7 SP1, Windows 8.1, or Windows 10、处理器: Intel® i5-4590 / AMD FX 8350 equivalent or greater 、内存: 4 GB RAM 、图形: NVIDIA GeForce® GTX 970 / AMD Radeon™ R9 290 eq...
  • 您的称呼
  • *
  • 公司名称:
  • *
  • 地址:
  • *
  • 联系电话
  • *
  • 传真:
  • *
  • E-mail:
  • *
  • 邮政编码:
  • *
  • 楼盘名称
  • *
  • 留言内容
  • *
     
上海市普陀区中江路388弄国盛中心SOHO1号楼301室
深圳市南山区深南大道9966号威盛科技大厦2703室

64683109
18665895116
sales@vrwaibao.com
关注我们
移动手机端
微信公众号
在线留言
联系我们
Copyright ©2017 - 2020 置景科技