【Unity】Shader编程 基础总结

Shader编程一直是一个比较难入门难上手的主题,本篇对Unity Shader编程的一些基础和要点进行了总结。

包括Shader编程相关知识图谱、Shader编程相关数据类型、Shader核心结构体等(后续继续补充)。

每个部分相互独立,可以单独参考,亦可作为一个整体参考。

博文首发:http://blog.csdn.net/duzixi

一、Shader编程知识图谱

个人对Shader编程的理解凝在四个字:色即是光。

无论是要手写Shader程序,还是利用各类Shader制作插件(如ShaderForge)制作Shader,关于“光”的知识是一定要有的。

(.xmind源文件下载地址:http://www.duzixi.com/doc/ShaderStudy.xmind

二、Shader编程数据类型

Shader编程中比较麻烦的一点是,同一个变量在不同的语法阶段表示的方式不同,常用变量类型对照如下:


硬件平台


CPU


(接口:Inspector面板设置)


GPU


变量类型


C#脚本语言


ShaderLab
属性


Cg语言


纹理贴图


Texture


2D


sampler2D


颜色


Color


Color


fixed4 / half4


3D贴图


Cubemap


Cube


sampleCUBE


4元素向量


Vector4


Vector


float4


浮点数


float


Float


float


浮点范围


float


Range


float


矩形纹理


Texture


Rect


sampleRect

三、Shader核心结构体

(1)顶点着色器输入结构体


成员类型


成员名


??
结构体也可以自定义,但是必须有位置信息


appdata_base


appdata_tan


appdata_full


appdata_img


float4


vertex


位置


1


1


1


1


float3


normal


法线


1


1


1


float4


tangent


切线


1


1


fixed4


color


顶点颜色


1


float4


texcoord


纹理坐标0


1


1


1


1


fixed4


texcoord1


纹理坐标1


1

(2)表面着色器输出结构体


SurfaceOutput


half3


Abedo


反射光


half3


Normal


法线


half3


Emission


自发光


half


Specular


高光


half


Alpha


透明度

时间: 2024-12-09 08:26:33

【Unity】Shader编程 基础总结的相关文章

Unity Shader编程(1)漫反射着色

Unity Shader编程(1)漫反射着色 在Unity中创建如下工程: 我们把Shader拖到Material上.Meterial拖到Cube上.这就完成了一个着色器的着色过程. Shader "Custom/Shader" { Properties { _MainTex ("Base (RGB)", 2D) = "white" {} } SubShader { Tags { "RenderType"="Opaq

【Unity Shader编程】之十四 边缘发光Shader(Rim Shader)的两种实现形态

本系列文章由@浅墨_毛星云 出品,转载请注明出处.   文章链接:http://blog.csdn.net/poem_qianmo/article/details/51764028 作者:毛星云(浅墨)    微博:http://weibo.com/u/1723155442 本文工程使用的Unity3D版本: 5.2.1  这篇文章主要讲解了如何在Unity3D中分别使用Surface Shader和Vertex & Fragment Shader来编写边缘发光Shader. 一.最终实现的效果

【Unity Shader编程】之十五 屏幕高斯模糊(Gaussian Blur)后期特效的实现

本系列文章由@浅墨_毛星云 出品,转载请注明出处.   文章链接:http://blog.csdn.net/poem_qianmo/article/details/51871531 作者:毛星云(浅墨)    微博:http://weibo.com/u/1723155442 本文工程使用的Unity3D版本: 5.2.1  本篇文章将分析如何在Unity中基于Shader实现高斯模糊屏幕后期特效. 首先放出最终的实现效果.如下几幅图,是在Unity中使用本文所实现的Shader得到的高斯模糊屏幕

Unity Shader 光照模型(基础公式和代码实现)

标准光照模型只关心直接光照(direct light).它把进入摄像机的光照分为4个部分: 自发光(emissive),这部分用于给定一个方向时,物体表面会向这个方向产生多少的光,当没有使用全局光照时,自发光物体不会照亮周围物体,只是本身看起来更亮而已.高光反射(specular),这个部分用于描述当光线从光源照到物体表面时,物体镜面反射产生的光.漫反射(diffuse)这个部分是光线从光源照到物体表面时,物体向各个方向产生的光.环境光(ambient)这个部分用来描述其他间接的光. 1 漫反射

Unity Shader 之 基础光照

摄像机是如何看这个世界的 游戏中摄像机所看到的世界与我们现实中所看到的几乎是一样的. 首先,光线从光源中发射出来. 然后,光线和场景中的一些物体相交(散射,吸收). 最后,摄像机吸收了一些光,产生一张图像. 光线与物体相交的结果有两个:散射(scattering)和吸收(absorption) 散射:只改变光线的方向,但不改变光线的密度和颜色,有两种方向:内部与外部,对应折射与反射. 折射(refraction):散射到物体内部,用漫反射(diffuse)模型来计算. 反射(reflection

Unity Shader编程(3)uv操作

1.shader示意图 2.uv常用操作 ①缩放 Shader "Custom/NewShader" { Properties { _MainTex ("Base (RGB)", 2D) = "white" {} _scaleX("scaleX",float)=1//X方向 _scaleY("scaleY",float)=1//Y方向 } SubShader { Tags { "RenderTyp

我写的书:Unity Shader编程

本来是准备在这里一篇篇发的,后来很多时候发现网上写各家的在线编辑都不是很统一,导致我写一遍后在其它地方还得重新编排.所以就一口气,用word写完了,在这里集成一本pdf版的书,供大家免费参考.所以,关于前面的系列文章我就不继续了,都在这本书里.有反馈的话可以通过书中的方式联系本人,我会对书中内容进行更新. 书籍下载地址: http://98jy.net/course/17/info

Unity Shader入门精要学习笔记 - 第3章 Unity Shader 基础

来源作者:candycat   http://blog.csdn.net/candycat1992/article/ 概述 总体来说,在Unity中我们需要配合使用材质和Unity Shader才能达到需要的效果.一个最常见的流程是. 1)创建一个材质 2)创建一个Unity Shader,并把它赋给上一步创建的材质 3)把材质赋给要渲染的对象 4)在材质面板中调整Unity Shader的属性,以得到满意的效果 下图显示了Unity Shader和材质是如何一起工作来控制物体的渲染的. Uni

【我的书】Unity Shader的书 — 目录(2015.09.04更新)

写在前面 感谢所有点进来看的朋友.没错,我目前打算写一本关于Unity Shader的书. 出书的目的有下面几个: 总结我接触Unity Shader以来的历程,给其他人一个借鉴.我非常明白学Shader的艰难,在群里也见了很多人提出的问题.我觉得学习Shader还是一件有规律可循的事情,但问题是中文资料难觅,而大家又不愿意去看英文...这对我有什么好处呢?强迫我对知识进行梳理,对细节问题把握更清楚. 第二个原因你懂的. 关于本书的定位问题: 面向Unity Shader初学者,但要: 有一定的