Unity3D表面着色器(Surface Shader)资料整合

一、Shader 表面着色器语法

Unity 的表面着色器 (Surface Shader) 是一种代码生成方法,用它来编写光照着色器比用低级的顶点/像素着色器程序容易得多

二、编写一个灰度效果的Shader

三、Shader 内置 Shader 之 Normal-Diffuse

Normal-Diffuse 是一个简单的光照模型,光照强度随着物体表面和光入射角夹角的减小而减小。光照强度只和入射角度有关,与摄像机无关。

四、Shader 内置 Shader 之 Bumped Diffuse 学习

Bumped Diffuse 基于 Lambert 光照模型,同时使用了 normal mapping 技术来增加物体表面细节。相对于通过增加剖分来表现物体表面细节的方式,normal mapping 并不改变物体的形状,而是使用一张称为 Normal Map 的特殊纹理来达到这种效果。在 normal map 中,每个象素的颜色代表了该像素所在物体表面的法线,然后通过这个法线(而不是通过物体模型计算而来的法线)来计算光照。可以说
Normal Map 在计算光照的过程中“高效地修改”了整个模型。

五、Shader 内置 Shader 之 Vertex Lit 学习

最简单的一种Shader之一,所有照射在该物体上的光在一个Pass里面渲染完,光源只在顶点计算。所以不会有任何基于像素渲染得效果

六、Shader 内置 Shader 之 Specular 学习

Specular 使用和 Diffuse 相同的光照模型,但是它添加了一个和观察角度相关的反射高光。一个被称为 Blinn-Phong 的光照模型。这个光照模型包含了一个反射强光,使它与物体表面角度,光的入射角度以及观察者角度都有关系。实际上这种高光计算方法是对实时光源模糊反射的一种具有可行性的模拟。模糊的等级通过 Shininess 变量控制。

七、Shader 内置 Shader 之 Bumped Specular 学习

和 Specular 一样的光照模型,相比 Specular 而言,它额外使用一张 Tangent Space Normal Map 纹理贴图来描述物体表面法向量的变化以及增加物体表面的细节。一般而言,这个 shader 的渲染代价会比较大。

八、Shader 内置 Shader 之 Diffuse Detail 学习

这是一个普通的 diffuse shader 加上一些额外数据的 shader。它允许你定义第二张纹理,称为 Detail Texture。当 Camera 靠近时,Detail Texture 逐渐显示出来,这个着色器一般用于地形。Detail 纹理是覆盖在主纹理上面的。Detail 纹理中深色的部分将会使得主纹理变深,而淡色的部分将会使主纹理变亮,Detail
纹理通常是浅灰色。(与Decal 里面 Decal 纹理不同的是,Decal 纹理是 RGBA,通过 alpha 控制 Decal Texture 与 Main Texture 的融合,而 Detail 的纹理是 RGB,直接是两张纹理的 rgb 通道分别相乘再 *2,就是说,Detail 纹理中颜色数值等于 0.5 时不会改变主纹理颜色,大于 0.5 时会变亮,小于 0.5 时会加深)

九、Shader 内置 Shader 之 Parallax Diffuse 学习

Parallax Normal mapped 与传统的 normal mapped 一样,但是对“深度”的模拟更佳。额外的深度效果是通过 Height Map(高度图)来实现的。Height Map 在 Normal map 的 alpha 通道里面保存。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-11-05 13:35:04

Unity3D表面着色器(Surface Shader)资料整合的相关文章

【浅墨Unity3D Shader编程】之六 暗黑城堡篇: 表面着色器(Surface Shader)的写法(一)

本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接:http://hpw123.net/plus/view.php?aid=165 作者:毛星云(浅墨)    微博:http://weibo.com/u/1723155442 邮箱: [email protected] QQ交流群:330595914 更多文章尽在:http://www.hpw123.net 本文主要讲解了Unity中SurfaceShader的具体写法,以及几个常用的CG函数的用法. 在这里先说明一下,表面着色器将分为

【日常记录】Unity3D 中的 Surface Shader 是不支持在 Pass中使用的

如题 搞了好久,一直报错: Shader error in 'custom_outline_effect': Parse error: syntax error, unexpected TOK_PASS, expecting TOK_SETTEXTURE or '}' at line 69 只要是把 #pragma surface ... 写在 Pass中就算出错 1 Pass { // Pass 中无法使用 surface 渲染模式,也就是说surface不支持在多Pass中使用 2 CGPR

unity3d游戏开发学习分享之表面着色器讲解

一.三种着色器的书写格式: 1.surface shaders, 指的是表面着色器 2.vertex and fragment shaders and 指的是顶点和片段着色器 3.fixed function shaders. 指固定功能着色器 二.顶点着色器与片段着色器 我们可以这么理解,在Unity的三维空间中,所有复杂模型都是由无数个三角形构成的,那么顶点(Vertex)就是说,这些构成复杂模型的三角形的顶点,而片段(fragment)就是这些三角形的填充区域了. 三.表面着色器(Surf

编写Unity3D着色器的三种方式

不管你会不会写Unity3D的shader,估计你会知道,Unity3D编写shader有三种方式,这篇东西主要就是说一下这三种东西有什么区别,和大概是怎样用的. 先来列一下这三种方式: fixed function shader vertex and fragment shader surface shader 为什么Unity3D要提供三种shader的编写方式呢?那是因为三种方式的编写的难易度有区别,对应着不同的使用人群.其实我觉得这是Uniy3D想得有点多了,着色器不单止是为了实现效果,

【浅墨Unity3D Shader编程】之七 静谧之秋篇: 表面着色器的写法(二)——自定义光照模式

本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接:http://hpw123.net/plus/view.php?aid=183 作者:毛星云(浅墨)    微博:http://weibo.com/u/1723155442 邮箱: [email protected] QQ交流群:330595914 更多文章尽在:http://www.hpw123.net 本文主要讲解了Unity中SurfaceShader的自定义光照模式的写法. 上篇文章中我们已经说到,表面着色器将分为两次讲解,上

Unity3D Shader官方教程翻译(十九)----Shader语法,编写表面着色器

Writing Surface Shaders Writing shaders that interact with lighting is complex. There are different light types, different shadow options, different rendering paths (forward and deferred rendering), and the shader should somehow handle all that compl

Unity3D着色器Shader编程入门(一)

自学Unity3D也有大半年了,对Shader一直不敢入坑,最近看了些资料,以及通过自己的实践,对Shader还是有一点了解了,分享下仅作入门参考. 因Shader是对图像图像渲染的,学习前可以去了解下图形图像学及GPU编程相关的知识.强烈推荐<GPU 编程与CG 语言之阳春白雪下里巴人>,这本书网上有电子版. 还有一本是关于Unity3D的Shader开发的<Unity着色器和屏幕特效开发秘笈>该书是<Unity Shaders and Effects Cookbook&g

Unity3D教程宝典之Shader篇:第十四讲Surface Shader

转载自风宇冲Unity3D教程学院 用Shader来实现光照是比较复杂的,有不同的光类型,不同的阴影选项,不同的Render Path(forward和Deferred). Unity只是把光照模型封装处理了,Shader的代码还是用CG/HLSL编写的. 例一:最简单的Surface Shader Shader "Custom/T_3_0" { Properties { _MainTex ("Base (RGB)", 2D) = "white"

Unity Surface Shader 示例分析

对于Unity中的表面着色器(Surface Shader),它的代码整体结构如下所示: Shader "name" { Properties { // 第一部分 } SubShader { // 第二部分 } Fallback "Diffuse" // 第三部分 } 第一部分 Properties 数据块 它的作用是充当数据的接口,将外部的数据(资源)引入进来,以供着色器内部使用.在这里,我们可以定义的数据类型如下所示: (1) _MainTex ( "