UnityShader初级篇——单张纹理
来源:互联网 发布:牛尔的产品怎么样知乎 编辑:程序博客网 时间:2024/05/16 04:40
1.单张纹理的实现
Shader"Unity Shaders Book/Chapter 7/SingleTexture"{Properties{_Color ("Color Tint", Color) = (1,1,1,1)//"White是内置纹理名字,即全白纹理,{}是初始值"_MainTex("MainTex", 2D) = "White" {}_Specular ("Specular", Color) = (1,1,1,1)_Gloss ("Gloss", Range(8.0, 256)) = 20 }SubShader{Pass{ Tags{"LightMode" = "ForwardBase"} CGPROGRAM#pragma vertex vert#pragma fragment frag#include "LIghting.cginc"fixed4 _Color;sampler2D _MainTex;//需要用 “纹理名_ST” 的方式定义纹理的属性,S是缩放(scale),T是平移(transform)//_MainTex_ST.xy获取缩放值,_MainTex_ST.zw获取偏移值float4 _MainTex_ST;fixed4 _Specular;float _Gloss;struct a2v{float4 vertex : POSITION;float3 normal : NORMAL;float4 texcoord : TEXCOORD0;};struct v2f{ float4 pos : SV_POSITION; float3 worldNormal : TEXCOORD0; float3 worldPos : TEXCOORD1; float2 uv : TEXCOORD2;};v2f vert (a2v v){v2f o;o.pos = UnityObjectToClipPos(v.vertex);o.worldNormal = UnityObjectToWorldNormal(v.normal);o.worldPos = mul(unity_ObjectToWorld, v.vertex).xyz;//变换顶点纹理坐标,先缩放,在平移//o.uv = v.texcoord.xy * _MainTex_ST.xy + _MainTex_ST.zw;//或者直接使用内置宏TRANSFORM_TEX(顶点纹理坐标,纹理名)o.uv = TRANSFORM_TEX(v.texcoord, _MainTex);return o;}fixed4 frag (v2f i) : SV_Target{fixed3 worldNormal = normalize(i.worldNormal);fixed3 worldLightDir = normalize(UnityWorldSpaceLightDir(i.worldPos));//使用tex2D(需要被采集的纹理名,纹理坐标)进行纹理采样,再与颜色相乘,返回纹素值fixed3 albedo = tex2D(_MainTex, i.uv).rgb * _Color.rgb;//将环境光与纹理素相乘fixed3 ambient = UNITY_LIGHTMODEL_AMBIENT.xyz * albedo;//漫反射与纹理素相乘fixed3 diffuse = _LightColor0.rgb * albedo * saturate(dot(worldNormal,worldLightDir));fixed3 viewDir = normalize(UnityWorldSpaceViewDir(i.worldPos));fixed3 halfDir = normalize(worldLightDir + viewDir);fixed3 specular = _LightColor0.rgb * _Specular.rgb * pow(saturate(dot(worldNormal,halfDir)), _Gloss);return fixed4(ambient + diffuse + specular,1.0);;}ENDCG}}Fallback"Specular"}
阅读全文
0 0
- UnityShader初级篇——单张纹理
- UnityShader初级篇——渐变纹理
- UnityShader案例(四)——单张纹理
- UnityShader初级篇——遮罩纹理
- UnityShader初级篇——凹凸映射
- UnityShader初级篇——透明度测试
- UnityShader初级篇——透明度混合
- UnityShader初级篇——使用半兰伯特光照模型
- UnityShader初级篇——BlinnPhong光照模型
- UnityShader入门精要学习笔记(七):基础纹理之单张纹理
- 单张纹理
- UnityShader案例(五)——法线纹理
- UnityShader案例(六)——渐变纹理
- UnityShader案例(七)——遮罩纹理
- UnityShader初级篇——最简单的顶点/片元着色器
- UnityShader初级篇——使用假色彩图像调试代码
- UnityShader初级篇——实现逐顶点漫反射光照模型
- UnityShader初级篇——实现逐像素漫反射光照模型
- python3.5操作mysql数据库
- UE4的前世今生
- <python核心编程第二版>第六章原始字符串操作符小问题
- android组件之DrawerLayout(抽屉导航)-- 侧滑菜单效果
- Ubuntu通过PPA安装java失败
- UnityShader初级篇——单张纹理
- Java开发环境(二)
- spring核心
- 二分查找中的循环不变式
- CMake OpenCV3.3源代码的编译
- springMVC
- 阿里云服务器学生版无法远程
- 事务声明声明式事务和编程式事务介绍
- 用List和Map存数据的时候遇到的一个坑