title: art-高光贴图制作
categories: Art
tags: [art, 高光, 贴图, 制作, ta]
date: 2019-01-23 14:26:18
comments: false
art-高光贴图制作
前篇
- 次世代游戏贴图 制作高光贴图 08 - https://www.youtube.com/watch?v=WwJmwRKbaCo
流程
一般喜欢在图层中干, 保留原图
-
先把 颜色贴图 变成黑白图. 也就是把 饱和度 调为 -100 ( 效果和 图像 -> 调整 -> 去色 一样 )
-
调整 色阶
- 部分不需要的话可以给 组 加个蒙版.
这里用 钢笔工具 随便圈个路径, 然后生成矢量蒙版
- 部分不需要的话可以给 组 加个蒙版.
应用高光贴图
shader
这里只用了 ForwardBase 的 pass. 所以只有一个光源起作用
Shader "test/testSpecularTex"
{Properties {_MainTex ("Texture", 2D) = "white" {}_Diffuse ("Diffuse", Color) = (1, 1, 1, 1)_SpecularTex ("SpecularTex", 2D) = "white" {}_SpecularPower("SpecularPower", float) = 1_SpecularColor ("SpecularColor", Color) = (1, 1, 1, 1)}SubShader {pass{Tags { "LightMode"="ForwardBase" }CGPROGRAM#pragma vertex vert#pragma fragment frag#include "UnityCG.cginc"#include "Lighting.cginc"#include "AutoLight.cginc"fixed4 _Diffuse;sampler2D _MainTex;sampler2D _SpecularTex;float _SpecularPower;float4 _SpecularColor;struct a2v {float4 vertex : POSITION;float3 normal : NORMAL;float2 uv : TEXCOORD0;};struct v2f {float2 uv : TEXCOORD0;float4 pos : SV_POSITION;fixed3 worldNormal : TEXCOORD1;float4 worldPos : TEXCOORD2;};v2f vert(a2v v) {v2f o;o.worldPos = mul(unity_ObjectToWorld, v.vertex);o.pos = mul(UNITY_MATRIX_VP, o.worldPos);o.worldNormal = mul((float3x3)unity_ObjectToWorld, v.normal);o.uv = v.uv;return o;}//漫反射光照模型——逐像素光照fixed4 frag(v2f i) : COLOR {float attenuation = LIGHT_ATTENUATION(i);fixed3 ambient = UNITY_LIGHTMODEL_AMBIENT.xyz;float3 worldLightDir=normalize(UnityWorldSpaceLightDir(i.worldPos));float3 worldNormal=normalize(i.worldNormal);float3 worldViewDir=normalize(UnityWorldSpaceViewDir(i.worldPos));// blinn-phong 高光模型float3 specularTexCol = tex2D(_SpecularTex, i.uv).rgb;float3 halfVector = normalize(worldLightDir + worldViewDir);float specular = pow(max(0, dot(worldNormal, halfVector)) , _SpecularPower);float3 specularColor =_LightColor0.rgb* specularTexCol * specular * _SpecularColor.rgb * attenuation * 10;fixed3 halfLambert = dot(worldNormal, worldLightDir)*0.5+0.5;//利用半兰伯特公式计算漫反射光fixed3 diffuse = _LightColor0.rgb * _Diffuse.rgb * halfLambert * attenuation;//加上环境光的影响fixed3 color = ambient + diffuse + specularColor;float3 texColor = tex2D(_MainTex, i.uv).rgb;return fixed4(color*texColor, 1.0);}ENDCG}}FallBack "Diffuse"
}
辅助: 结合id贴图
高光部位一般是贴图的部分区域 ( 假设整个模型都在一个贴图上的情况 ), 这时可以把不需要高光的区域部位涂成 黑色 , 不过这样手动涂不太科学, 细调时才手动涂. 比较科学的姿势时结合 ID贴图 或者 substance painter 导出一个 遮罩图, 这样可以准确的再对应的 uv 块上填充 黑色或白色
ID贴图方式
这个流程稍微有点多, 具体参考: substance-Substance_Painter记录 中的 ID贴图
painter 遮罩图方式 ( 建议 )
个人感觉这种方式会更快点, 直接在对应的uv块上填充 黑/白 色
-
添加一个 填充层 , 随便填一个颜色, 因为这个颜色只是用来参考.
-
在 填充层 中添加一个 black mask, 然后再给 mask 右键添加一个 paint
选中 paint, 用 polygon fill 工具填充需要高光区域部位为 白色
-
然后 右键 mask -> export mask to file 导出 遮罩图 给ps用
-
导出的 分辨率 要与原贴图的一致, 可以这里设置
-
在ps中使用蒙版
具体参考: photoshop-photoshop记录 中的 使用制作好的遮罩图做蒙版