Unity Shader 纹理映射的实现

 1 // 纹理映射的编写
 2 Shader "TMoon/04-Texture" {
 3     Properties{
 4         _Color("Color",Color) = (1,1,1,1)
 5         _MainTex("Main Tex",2D) = "white"{}
 6     }
 7
 8     SubShader{
 9
10         Pass{
11
12             Tags {"LightMode" = "ForwardBase"}
13
14             CGPROGRAM
15
16             #include "Lighting.cginc"
17
18             #pragma vertex vert
19             #pragma fragment frag
20
21             fixed4 _Color;
22             sampler2D _MainTex;
23             float4 _MainTex_ST; //命名必须根据_MainTex 这里自动匹配面板的Tiling和Offset
24
25             // application to vertex
26             // 由应用程序传递给顶点函数
27             struct a2v {
28                 float4 vertex:POSITION;
29                 float3 normal:NORMAL;
30                 float4 texcoord:TEXCOORD0; // 模型的纹理坐标
31             };
32
33             // vertex to fragment
34             // 由顶点函数传递给片元函数
35             struct v2f {
36                 float4 svPos:SV_POSITION;
37                 float3 worldNormal:TEXCOORD0;
38                 float4 worldVertex:TEXCOORD1;
39                 float2 uv:TEXCOORD2;
40             };
41
42             v2f vert(a2v v) {
43                 v2f f;
44
45                 f.svPos = mul(UNITY_MATRIX_MVP, v.vertex);
46                 f.worldNormal = normalize(UnityObjectToWorldNormal(v.normal));
47                 // 将模型空间的顶点坐标变换到世界空间上
48                 f.worldVertex = mul(v.vertex, unity_WorldToObject);
49                 // 将纹理坐标赋值给v2f.uv并赋值面板贴图的旋转缩放
50                 f.uv = v.texcoord.xy * _MainTex_ST.xy + _MainTex_ST.zw;
51
52                 return f;
53             }
54
55             float4 frag(v2f f) : SV_Target{
56
57                 fixed3 lightDir = normalize(WorldSpaceLightDir(f.worldVertex));
58
59                 // tex2D 根据贴图获取模型纹理坐标身上对应的像素点颜色值
60                 fixed3 texColor = tex2D(_MainTex,f.uv.xy) * _Color.rgb;
61
62                 // 为漫反射混合上每个像素点的纹理颜色
63                 fixed3 diffuse = _LightColor0.rgb * texColor * max(dot(f.worldNormal, lightDir), 0);
64
65                 return fixed4(diffuse,1);
66             }
67
68             ENDCG
69         }
70     }
71
72     Fallback "VertexLit"
73 }
时间: 2024-10-12 16:22:29

Unity Shader 纹理映射的实现的相关文章

【Unity Shader】(四) ------ 纹理之法线纹理、单张纹理及遮罩纹理的实现

笔者使用的是 Unity 2018.2.0f2 + VS2017,建议读者使用与 Unity 2018 相近的版本,避免一些因为版本不一致而出现的问题. [Unity Shader](三) ------ 光照模型原理及漫反射和高光反射的实现 [Unity Shader](五) ------ 透明效果之半透明效果的实现及原理 在游戏中,我们除了能看到游戏物体的形体轮廓,还能看到物体的一些具体外观,包括颜色,凹凸等.而实现这一步的就是使用 纹理.与纹理相对应的技术就是 纹理映射技术 ,相当于把一张图

Unity Shader入门总结(一)

最近断断续续学习了一些Unity Shader的内容,总结一下,主要学习资料是siki学院的课程. Unity Shader基本结构 Shader "Unlit/002" //Shader路径 { Properties //Shader属性 可在面板修改 { _Int("Int",Int) = 2 _Float("Float",float) = 1.5 _Range("Range",range(0.0,2.0))= 1.0 _

unity shader序列帧动画代码,顺便吐槽一下unity shader系统

http://www.cnblogs.com/hellohuan/archive/2014/01/10/3512784.html 一.看到UNITY论坛里有些人求unity shader序列帧动画,写shader我擅长啊,就顺势写了个CG的shader.代码很简单,就是变换UV采样序列帧贴图,美术配置行数列数以及变换速度. Shader "HELLOHUAN/Hello_Sequence" { Properties { _Color ("Main Color", C

【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入门教程(一)

参考文献:http://www.360doc.com/content/13/0923/15/12282510_316492286.shtml Unity Shader是着色器,将纹理.网格信息输入,得到材质的一段程序,具体是个什么东西,还需要亲自实践才知道.一个Unity大神推荐我:如果要学计算机图形编程(游戏编程的基础),可以先学习UnityShader,往后再学习OpenGL和DX.不说废话,依我的风格,都是直接看实例,笔者的教程偏向于傻瓜式的,应该适合入门. 前提:安装了Unity和VS,

[Unity Shader笔记]渲染路径--Forward渲染路径

[Unity Shader笔记]渲染路径--Forward渲染路径 (2014-04-22 20:08:25) 转载▼ 标签: shader unity renderingpath forward 游戏 分类: UnityShader *ForwardBase.ForwardAdd的LightMode只能运行在Came为Forward.DeferredLighting的渲染模式下 *ForwardAdd这个Pass需要和ForwardBase一起使用,否则会被Unity忽视掉 * Forward

Unity3D for VR 学习(9): Unity Shader 光照模型 (illumination model)

关于光照模型 所谓模型,一般是由学术算法发起, 经过大量实际数据验证而成的可靠公式 现在还记得2009年做TD-SCDMA移动通信算法的时候,曾经看过自由空间传播模型(Free space propagation Model),目的为了得出移动信号的传播损耗.当时是基于普通的PC实时运算,非常非常耗时–如北京五环内的传播模型渲染GIS图用了超过20分钟. 光照模型来源有2类: 一类是基于学术论文的算法,如Lambert模型.Phong模型. 另一类基于算法的变种–在实际生产实践中修正得到的模型,

Unity shader教程-第一课:写shader和应用shader的流程

这是我们Unity shader(着色器)教程的第一课,在这节课中,你会学到怎么样来用程序来编写一个在Unity中能使用的着色器:漫反射着色器.这节课的内容主要让我们熟悉创建shader和应用shader的流程. 准备工作: 安装Unity版本4.6以上 创建一个新的工程 菜单GameObject | 3D Object | Plane创建出一个平面,作为我们的地面 菜单GameObject | 3D Object | Sphere创建出球来,反复多次创建多个 注意: 1. 创建地面后选中该物体

《Unity Shader 与 计算机图形学》第二章

提示:本篇将会非常长~ 本系列文章分为 硬件 编程入门 工程实践 上一篇 主要介绍了GPU的特征工作原理 以及渲染的底层流程 其实对于新架构而言还有所不同 Shader描述了如何渲染物体的信息,包括: Texture Setup.纹理设置 Material Property.材质设置 Render State.渲染状态 Blend Setup.混合设置 Pixel Shader.像素着色 Vertex Shader.定点着色 Render Target Setup 渲染目标设置 Shader并不