随笔分类 -  3D渲染知识

3D理论知识
摘要:https://blog.csdn.net/u011047171/article/details/46928463#t4 阅读全文
posted @ 2018-12-06 17:57 gameDesigner 阅读(1275) 评论(0) 推荐(0)
摘要:耦合的材质和取样器 大多数情况下,在shader中采样贴图时,贴图采样声明应该来自贴图设置-本质上,贴图和采样器是被绑在一起的。在用DX9风格 shader 语法时,这是一个默认行为: 使用 sampler2D,sampler3D,samplerCUBE HLSL关键字同时声明贴图和取样器。 大多数 阅读全文
posted @ 2018-02-23 17:45 gameDesigner 阅读(2916) 评论(0) 推荐(0)
摘要:在unity中,标准的shader语言是HLSL,一般的HLSL数据类型都是支持的。然而,Unity有一些额外的HLSL类型,对移动平台有更好的支持。 基础数据类型 在shader中,主要的计算数据类型是 浮点数据(在普通的变成语言中,比如C#中等于float)。几种浮点类型的变种是: float、 阅读全文
posted @ 2018-02-23 17:01 gameDesigner 阅读(3019) 评论(0) 推荐(0)
摘要:无论编写 表面着色器还是其他常规着色器程序时,HLSL资源可以别编译为不同的“着色器模型”。更高的着色器编译器目标允许使用更多现代GPU功能,但是可能造成在老的GPU或者平台上不能正常工作。 编译器目标通过指令 #pragma target 来指定,比如: 默认的编译器目标 默认情况下,unity将 阅读全文
posted @ 2018-02-22 16:25 gameDesigner 阅读(1769) 评论(0) 推荐(0)
摘要:在unity中,着色器编程使用了一列列的HLSL语言变种(也叫作Cg,但是大部分实际上两者都是一样的)。 目前,为了在不同平台下保持最好的跨平台性, 取样贴图时,最好使用DX9风格 的HLSL。 着色器编译器 在内部,不同的着色器编译器用来编译shader: Windows & Microsoft 阅读全文
posted @ 2018-02-22 15:37 gameDesigner 阅读(1260) 评论(0) 推荐(0)
摘要:除了使用Cg/HSL 着色器程序以外, OpenGL 着色器语言(GLSL)着色器可以直接书写shader。 然而,使用原生的GLSL只推荐作为测试使用,或者你清晰的知道你的目标平台是 Mac OS X,OpenGL ES移动设备,或者是Linux。在所有常见情况下,Unity会将 Cg/HLSL语 阅读全文
posted @ 2018-02-22 15:23 gameDesigner 阅读(2142) 评论(0) 推荐(0)
摘要:通常,保留大部分的着色代码是很方便的,但也允许产生稍微不同的着色“变体”。这通常被称为“mega shaders”或“uber shaders”,并通过为每个案例编译不同的预处理程序指令来编译shader代码。 在Unity中,可以使用指令 #pragma multi_compile 或者 #pra 阅读全文
posted @ 2018-02-22 14:45 gameDesigner 阅读(1577) 评论(0) 推荐(0)
摘要:unity有一系列的内置功能函数,这些函数非常实用,能够帮助用户更加简单的编写shader。 UnityCG.cginc中的函数 顶点变换函数 将一个点从物体空间转化到摄像机裁剪空间的坐标。这个函数等价于 mul(UNITY_MATRIX_MVP,float(pos,1.0)),应该应用在它的位置上 阅读全文
posted @ 2018-02-22 13:36 gameDesigner 阅读(766) 评论(0) 推荐(0)
摘要:目标平台 宏 SHADER_API_MOBILE 定义为所有的移动平台。 此外, SHADER_TARGET_GLSL 定义为所有使用GLSL语言的平台。(对使用OpenGL/GLES 始终为真) 着色器目标模型 SHADER_TARGET 定义了一个数值来匹配着色器目标编译模型(也就是说,与指令 阅读全文
posted @ 2018-02-22 12:57 gameDesigner 阅读(2385) 评论(0) 推荐(0)
摘要:Unity包含了好几个文件,这些文件可以在你自己的shader 程序中使用,提供预定义的变量和功能函数。这个操作通过标准的指令 :#include来引入。 着色器包含文件在unity中以.cginc扩展名结尾,内置的为: HLSLSupport.cginc - (自动包含)用于跨平台着色程序编译的帮 阅读全文
posted @ 2018-02-21 16:50 gameDesigner 阅读(471) 评论(0) 推荐(0)
摘要:对于 CG/HLSL 顶点程序,模型网格顶点数据被作为输入传递给顶点着色器函数。每个输入都需要一个语义来详细指定。比如,POSITION输入是 顶点的位置,NORMAL是顶点的法线。 通常,顶点数据输入被声明成一个结构体,而不是一个个的罗列他们。几个常用的顶点结构体都被丁艳在UnityCG.cgin 阅读全文
posted @ 2018-02-21 16:26 gameDesigner 阅读(4117) 评论(0) 推荐(0)
摘要:着色器在Properties代码块中声明 材质球的各种特性。如果你想要在着色器程序中使用这些特性,你需要在CG/HLSL中声明一个变量,这个变量需要与你要使用的特性拥有同样的名字和对的上号的类型。比如以下这些类型: 在CG/HLSL代码中,要使用他们,就需要声明如下变量: 属性的值如何提供给着色器 阅读全文
posted @ 2018-02-21 15:17 gameDesigner 阅读(624) 评论(0) 推荐(0)
摘要:在书写HLSL shader程序时,输入和输出变量需要拥有他们 含义来表明语义。这在HLSL shader中是一个标准的做法。 Vertex shader 输入语义 主顶点着色器函数(被指令 #pragma vertex 标记)需要在所有的输入参数中加上语义。这些对应于单个网格数据元素,比如顶点位置 阅读全文
posted @ 2018-02-21 14:26 gameDesigner 阅读(2344) 评论(0) 推荐(1)
摘要:在编写顶点着色器或者片段着色器时,需要用到CG或者HLSL语言,这里翻译unity官网的信息。 编译指令 #pragma vertex name - 编译函数名成vertex shader #pragma fragment name - 编译函数名成fragment shader #pragma g 阅读全文
posted @ 2018-02-21 10:22 gameDesigner 阅读(689) 评论(0) 推荐(0)
摘要:Unity新的shader叫做 基于物理渲染的shader,先介绍下新的shader具有的特性: 在表面上的各个点的光线渲染,都经过计算,以确保与从环境中接受到的光相等。粗糙表面受来自更为宽广区域的光线影响。 更平滑些的表面表现出更强、更小的高光区域。点A反射来源为摄像机正面的光线。点B接受来自天空 阅读全文
posted @ 2018-02-01 21:49 gameDesigner 阅读(223) 评论(0) 推荐(0)
摘要:GPU的绘图的几个阶段 1.裁剪阶段: 裁剪掉摄像机平截头体外的模型,由GPU自动完成。 我们把平截头体分别定义为 上、下、左、右、近、远,GPU裁剪的时候,就是要依次裁剪模型中,与这几个平面相反的平面。 2.光栅化阶段: 2.1背面消隐 2.2顶点插值 3.像素阶段: 顶点插值会被当做像素着色器的 阅读全文
posted @ 2018-01-29 23:01 gameDesigner 阅读(561) 评论(0) 推荐(0)
摘要:什么是投影? 我们在搭建3D游戏场景的时候,所有的物体都是3D的,然而我们通过屏幕观察的时候, 屏幕却是2D的平面,想要在2D屏幕表达3D的物体,那么就需要将3D的物体投影到2D的屏幕。 平截头体 我们在将3D世界的物体投影到2D屏幕的时候,不可能将所有的东西都投影过去,我们需要定义 一个范围,只有 阅读全文
posted @ 2018-01-29 22:44 gameDesigner 阅读(579) 评论(3) 推荐(0)
摘要:什么是索引呢?为什么需要索引呢? 在“顶点与顶点缓冲区”中,我们介绍了关于顶点的概念。GPU在拿到了顶点数据以后,需要将这些顶点绘制成为三角形, 但是,GPU却不知道要将这些顶点怎么样组合成为一个个的三角形,因为组合的可能有多种多样,并不唯一,因此我们 需要使用索引数据来告诉GPU,如何将这些顶点绘 阅读全文
posted @ 2018-01-29 21:45 gameDesigner 阅读(561) 评论(0) 推荐(0)
摘要:在3D编程中,顶点不单单只是点的空间位置坐标,一般还包含多种属性,一般会对其进行封装: 顶点缓冲区,其实就是我们将一系列的顶点数据存放到一个容器中,这个容器就叫做顶点缓冲区。 我们要使用GPU处理顶点数据,就需要按照下面的步骤进行操作: 1.创建顶点缓冲区 2.上传顶点数据 阅读全文
posted @ 2018-01-28 23:17 gameDesigner 阅读(316) 评论(0) 推荐(0)
摘要:三原色表示法:红光、蓝光、黄光。 用一个向量表示一个颜色:A =[r,g,b],颜色B=[a,b,c] 加法:两个颜色合成一个颜色 合成颜色Z =[a+r,b+g,c+b] 减法:与加法相反 标量乘法:让颜色整体变色 点积和叉积:对于颜色没有任何意义 分量乘法:结果为Z =[r*a,g*b,c*b] 阅读全文
posted @ 2018-01-28 23:03 gameDesigner 阅读(686) 评论(0) 推荐(0)