星鸿阁

 找回密码
 立即注册
搜索
热搜: 活动 交友 动画
查看: 703|回复: 0

各项异性

[复制链接]

2249

主题

2759

帖子

9603

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
9603
发表于 2022-7-28 16:15:10 | 显示全部楼层 |阅读模式
  1. Shader "Study /Anisotropic"
  2. {
  3.         Properties
  4.         {
  5.                 _Diffuse("Diffuse", Color) = (1, 1, 1, 1)
  6.                 _Specular("Specular", Color) = (1, 1, 1, 1)
  7.                 _Gloss("Gloss", Range(8.0, 256)) = 20
  8.                 _Tangent ("Tangent", Range(0, 1)) = 0
  9.         }
  10.         SubShader
  11.         {
  12.                 Pass
  13.                 {
  14.                         Tags {"LightMode" = "ForwardBase"}
  15.                         CGPROGRAM

  16.                         #pragma vertex vert
  17.                         #pragma fragment frag
  18.                         #include "Lighting.cginc"

  19.                         fixed4 _Diffuse;
  20.                         fixed4 _Specular;
  21.                         float _Gloss;
  22.                         float _Tangent;

  23.                         struct a2v
  24.                         {
  25.                                 float4 vertex : POSITION;
  26.                                 float3 normal : NORMAL;
  27.                                 float4 tangent : TANGENT;
  28.                         };
  29.                         struct v2f
  30.                         {
  31.                                 float4 pos : SV_POSITION;
  32.                                 float3 worldNormal : TEXCOORD0;
  33.                                 float3 worldPos : TEXCOORD1;
  34.                                 float3 worldBinormal : TEXCOORD2;
  35.                         };

  36.                         //顶点着色器当中的计算
  37.                         v2f vert(a2v v)
  38.                         {
  39.                                 v2f o;
  40.                                 //转换顶点空间:模型=>投影
  41.                                 o.pos = UnityObjectToClipPos(v.vertex);
  42.                                 //转换顶点空间:模型=>世界
  43.                                 o.worldPos = mul(unity_ObjectToWorld, v.vertex).xyz;
  44.                                 //转换法线空间:模型=>世界
  45.                                 fixed3 worldNormal = UnityObjectToWorldNormal(v.normal);
  46.                                 o.worldNormal = worldNormal;
  47.                                 fixed3 worldTangent = UnityObjectToWorldDir(v.tangent.xyz);
  48.                                 o.worldBinormal = cross(worldTangent, worldNormal);
  49.                                 return o;
  50.                         }

  51.                         //片元着色器中的计算
  52.                         fixed4 frag(v2f i) : SV_Target
  53.                         {
  54.                                 //获取环境光
  55.                                 fixed3 ambient = UNITY_LIGHTMODEL_AMBIENT.xyz;
  56.                                 fixed3 AnisotropicworldNormal = normalize(lerp(i.worldNormal + i.worldBinormal, i.worldBinormal, _Tangent));
  57.                                 fixed3 lightDir =  normalize(UnityWorldSpaceLightDir(i.worldPos));
  58.                                 fixed3 viewDir =  normalize(UnityWorldSpaceViewDir(i.worldPos));
  59.                                 fixed3 reflectDir = normalize(lightDir + viewDir);
  60.                                 //计算反射信息
  61.                                 float Anisotropic = dot(AnisotropicworldNormal, reflectDir);
  62.                                 fixed3 specular = _LightColor0.rgb * _Specular.rgb * pow(max(0, sqrt(1 - (Anisotropic * Anisotropic))), _Gloss);
  63.                                 //Lanbert光照
  64.                                 fixed3 diffuse = _LightColor0.rgb * _Diffuse.rgb * saturate(dot(i.worldNormal, lightDir));
  65.                                 //对高光范围进行遮罩
  66.                                 specular *= saturate(diffuse * 2);
  67.                                 return fixed4(ambient + diffuse + specular, 1.0);
  68.                         }
  69.                         ENDCG
  70.                 }
  71.         }
  72.         FallBack "Specular"
复制代码


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|starfluidga

GMT+8, 2024-12-21 04:34 , Processed in 0.013166 second(s), 20 queries .

Made by Liga 星鸿阁

Copyright © 2020-2048, LigaStudio.

快速回复 返回顶部 返回列表