Unity shader之金属质感衣服
一套QQ飞车的衣服,模仿其效果写的shader,效果如下:
部分shader如下:
Shader "qq/Cloth"
{
Properties
{
_MainTex ("Base (RGB)", 2D) = "white" {}
_NormalMap("Normal Map", 2D) = "bump" {}
_AlphaTex("Alpha", 2D) = "white" {} _SpecularColor ("Specular Color", Color) = (,,,) _Cubemap("Cubemap", Cube) = "" {}
_HighLightMask ("High Light Mask", 2D) = "white" {}
} SubShader
{
Tags
{
"Queue" = "Geometry"
"IgnoreProjector" = "True"
"RenderType" = "Geometry"
}
LOD // 裙子的不透明区域
Pass
{
Tags
{
"LightMode" = "ForwardBase"
} Cull Off CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#pragma multi_compile_fwdbase #include "UnityCG.cginc"
#include "AutoLight.cginc"
#include "Lighting.cginc" sampler2D _MainTex;
sampler2D _NormalMap;
sampler2D _AlphaTex;
fixed4 _SpecularColor;
samplerCUBE _Cubemap;
sampler2D _HighLightMask; struct appdata
{
float4 vertex : POSITION;
float2 uv : TEXCOORD0;
float3 normal : NORMAL;
float4 tangent : TANGENT;
}; struct v2f
{
float4 pos : SV_POSITION;
float2 uv : TEXCOORD0;
float4 T2W1 : TEXCOORD1;
float4 T2W2 : TEXCOORD2;
float4 T2W3 : TEXCOORD3;
}; v2f vert(appdata v)
{
v2f o;
o.pos = UnityObjectToClipPos(v.vertex);
o.uv = v.uv; float3 worldTangent = UnityObjectToWorldDir(v.tangent.xyz);
float3 worldNormal = UnityObjectToWorldNormal(v.normal);
float3 binormal = cross(normalize(worldNormal), normalize(worldTangent)) * v.tangent.w;
float3 worldPos = mul(unity_ObjectToWorld, v.vertex).xyz;
o.T2W1 = float4(worldTangent.x, binormal.x, worldNormal.x, worldPos.x);
o.T2W2 = float4(worldTangent.y, binormal.y, worldNormal.y, worldPos.y);
o.T2W3 = float4(worldTangent.z, binormal.z, worldNormal.z, worldPos.z);
return o;
} fixed4 frag(v2f i) : SV_TARGET
{
fixed4 albedo = tex2D(_MainTex, i.uv);
fixed3 alphaCol = tex2D(_AlphaTex, i.uv);
fixed alpha = alphaCol.g; float3 worldPos = float3(i.T2W1.w, i.T2W2.w, i.T2W3.w);
fixed3 worldView = normalize(UnityWorldSpaceViewDir(worldPos)); float3 tangentNormal = UnpackNormal(tex2D(_NormalMap, i.uv));
float3x3 tanToWorld = float3x3(i.T2W1.xyz, i.T2W2.xyz, i.T2W3.xyz);
float3 worldNormal = normalize(mul(tanToWorld, tangentNormal)); fixed3 ambient = albedo.xyz * UNITY_LIGHTMODEL_AMBIENT.xyz; // 漫反射 半兰伯特光照模型
fixed3 worldLight = worldView;
//float dotLN = dot(worldLight, worldNormal) * 0.5 + 0.5;
float dotLN = dot(worldLight, worldNormal) * 0.25 + 0.75; // [-1, 1] -> [0.5, 1]
fixed3 diffuse = albedo.xyz * _LightColor0.xyz * dotLN; // 金边
float3 refDir = reflect(-worldView, worldNormal);
fixed3 refCol = texCUBE(_Cubemap, refDir);
fixed3 maskCol = tex2D(_HighLightMask, i.uv);
diffuse = diffuse * ( + refCol.r * maskCol.r * * ( - alphaCol.r)); // 高光
fixed3 realWorldLight = normalize(UnityWorldSpaceLightDir(worldPos));
fixed3 halfDir = normalize(worldView + realWorldLight);
float specD = abs(dot(halfDir, worldNormal));
fixed3 specular = albedo.xyz * _SpecularColor * pow(specD, ); clip(alpha - 0.95);
fixed4 col = fixed4(ambient + diffuse + specular, alpha); return col;
} ENDCG
} // 裙子的半透明区域
Pass
{
Tags
{
"LightMode" = "ForwardBase"
}
Blend SrcAlpha OneMinusSrcAlpha
ZWrite Off
Cull Off CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#pragma multi_compile_fwdbase #include "UnityCG.cginc"
#include "AutoLight.cginc"
#include "Lighting.cginc" sampler2D _MainTex;
sampler2D _AlphaTex; struct appdata
{
float4 vertex : POSITION;
float2 uv : TEXCOORD0;
}; struct v2f
{
float4 pos : SV_POSITION;
float2 uv : TEXCOORD0;
}; v2f vert(appdata v)
{
v2f o;
o.pos = UnityObjectToClipPos(v.vertex);
o.uv = v.uv;
return o;
} fixed4 frag(v2f i) : SV_TARGET
{
fixed4 albedo = tex2D(_MainTex, i.uv);
fixed3 alphaCol = tex2D(_AlphaTex, i.uv);
fixed alpha = alphaCol.g;
clip(0.95 - alpha);
fixed4 col = fixed4(albedo.rgb, alpha);
return col;
} ENDCG
} } Fallback "Diffuse"
}
cloth
转载请注明出处:https://www.cnblogs.com/jietian331/p/10830238.html
Unity shader之金属质感衣服的更多相关文章
- Unity Shader入门精要学习笔记 - 第10章 高级纹理
转载自 冯乐乐的 <Unity Shader入门精要> 立方体纹理 在图形学中,立方体纹理是环境映射的一种实现方法.环境映射可以模拟物体周围的环境,而使用了环境映射的物体可以看起来像镀了层 ...
- 【Unity Shader】Unity Chan的卡通材质
写在前面 时隔两个月我终于来更新博客了,之前一直在学东西,做一些项目,感觉没什么可以分享的就一直没写.本来之前打算写云彩渲染或是Compute Shader的,觉得时间比较长所以打算先写个简单的. 今 ...
- Unity3D学习(六):《Unity Shader入门精要》——Unity的基础光照
前言 光学中,我们是用辐射度来量化光. 光照按照不同的散射方向分为:漫反射(diffuse)和高光反射(specular).高光反射描述物体是如何反射光线的,漫反射则表示有多少光线会被折射.吸收和散射 ...
- 小强学渲染之Unity Shader编程HelloWorld
第一个简单的顶点vert/片元frag着色器 1)打开Unity 5.6编辑器,新建一个场景后ctrl+s保存命名为Scene_5.默认创建的场景是包含了一摄像机,一平行光,且场景背景是一天空盒而 ...
- 【Unity Shader】(三) ------ 光照模型原理及漫反射和高光反射的实现
[Unity Shader](三) ---------------- 光照模型原理及漫反射和高光反射的实现 [Unity Shader](四) ------ 纹理之法线纹理.单张纹理及遮罩纹理的实现 ...
- Unity3D for VR 学习(9): Unity Shader 光照模型 (illumination model)
关于光照模型 所谓模型,一般是由学术算法发起, 经过大量实际数据验证而成的可靠公式 现在还记得2009年做TD-SCDMA移动通信算法的时候,曾经看过自由空间传播模型(Free space propa ...
- 【转】《Unity Shader入门精要》冯乐乐著 书中彩图
为方便个人手机学习时候查阅,从网上转来这些彩图. 如属过当行为,联系本人删除. 勘错表 http://candycat1992.github.io/unity_shaders_book/unity_s ...
- Unity Shader入门精要学习笔记 - 第17章 Unity的表面着色器探秘
转自 冯乐乐的<Unity Shader 入门精要> 2010年的Unity 3 中,Surface Shader 出现了. 表面着色器的一个例子. 我们先做如下准备工作. 1)新建一个场 ...
- Unity Shader入门精要学习笔记 - 第6章 开始 Unity 中的基础光照
转自冯乐乐的<Unity Shader入门精要> 通常来讲,我们要模拟真实的光照环境来生成一张图像,需要考虑3种物理现象. 首先,光线从光源中被发射出来. 然后,光线和场景中的一些物体相交 ...
随机推荐
- tornado的安装
centos6.4 安装tornado框架连接工具 xshell 工具 1.如果在windows下有tornado的安装包首先现在上装到linux下的上传工具:yum install lrzsz ...
- 火狐RESTClient和HttpRequester, Chrome的Postman使用详解
Chrome下有著名的Postman,那火狐也有它的左膀右臂,那就是RESTClient和HttpRequester.这两款工具都是火狐的插件,主要用来模拟发送HTTP请求,HTTP请求最常用的两种方 ...
- 项目管理模式:外瀑布内敏捷(有人称为“信封法”)--转自知乎大神:CORNERSTONE
作者:CORNERSTONE 链接:https://www.zhihu.com/question/265968122/answer/878124580 来源:知乎 著作权归作者所有.商业转载请联系作者 ...
- Java-Class-C:com.ylbtech.api.platfrom.util.RedisUtils.class
ylbtech-Java-Class-C:com.ylbtech.api.platfrom.util.RedisUtils.class 1.返回顶部 2.返回顶部 3.返回顶部 4.返回顶 ...
- 关于类中的参数类型和return返回值
基础有些忘了,现在重新巩固一下 先定义一个Person类 class Person(): def __init__(self,name,age,height): self.name=name, sel ...
- 使用Jedis操作Redis-使用Java语言在客户端操作---set类型
原文地址:http://www.cnblogs.com/lixianyuan-org/p/9509696.html 1 //测试set数据类型 2 /** 3 * 在Redis中,我们可以将Set类型 ...
- on() 不支持hover事件
因为 .hover() 是 jQuery 自己定义的事件… 是为了方便用户绑定调用 mouseenter 和 mouseleave 事件而已,它并非一个真正的事件,所以当然不能当做 .bind() 中 ...
- vbs 之 解决打开Excel文件格式与扩展名指定格式不一致的问题
' Q:解决打开Excel文件格式与扩展名指定格式不一致的问题' A: 使用工作簿saveAs时,往往忽略掉它的第二个参数FileFormat,添加即可. 比如: set bookDiff = oEx ...
- 4.2.1 Vector bit-select and part-select addressing
Frm:IEEE Std 1364™-2001, IEEE Standard Verilog® Hardware Description Language Bit-selects extract a ...
- Codeforces 1173B Nauuo and Chess
题目链接:http://codeforces.com/problemset/problem/1173/B 思路参考:https://www.cnblogs.com/blowhail/p/1099123 ...