游戏开发论坛

 找回密码
 立即注册
搜索
查看: 5734|回复: 0

??????????????????????

[复制链接]

1万

主题

1万

帖子

3万

积分

论坛元老

Rank: 8Rank: 8

积分
36572
发表于 2020-6-12 13:28:11 | 显示全部楼层 |阅读模式
???????????????????????????????????????????????????????????unity??????????????????

?????????????????????????????????????????????????????????????????????????????????????????????

?????????????????????????????????????????????????????

1.png
????????ff7???????2?

????????????????????????????????????????????????????????????????????????????PBR??

????????????????

????RT???????

????????????????????

??????????????????????unity?????No tonemapping ?

???????????????

2.png

??????????????shader????

3.png

??????????????????

4 (1).gif


5 (1).gif

6.jpg

???????????

7.png

???????????????????2???

1???
??????????????

2???
????????????

???????????????

8.png

9.png

????????????????????????????????????????????????????????????????????????????????????

??????????Matcap?????????????????????????????PBR?ibl?????????

??Matcap

??MaterailCapture??????????????????????xy?????????????????????????wiki???
http://wiki.unity3d.com/index.php/MatCap

10.png

?????????????????????????????????????normal?????????2???????

  1. //MatCap ???
  2. half2 MatCapUV ;
  3. matCapUV.x = dot(UNITY_MATRIX_IT_MV[0].xyz,v.normal);
  4. matCapUV.y = dot(UNITY_MATRIX_IT_MV[1].xyz,v.normal);
  5. matCapUV = matCapUV * 0.5 + 0.5;
  6. //MatCap ???
  7. // float3 N = normalize(UnityObjectToWorldNormal(v.normal));
  8. // float3 viewPos = UnityObjectToViewPos(v.vertex);
  9.   float2 MatCapUV (in float3 N,in float3 viewPos)
  10.   {
  11.     float3 viewNorm = mul((float3x3)UNITY_MATRIX_V, N);
  12.         float3 viewDir = normalize(viewPos);
  13.         float3 viewCross = cross(viewDir, viewNorm);
  14.         viewNorm = float3(-viewCross.y, viewCross.x, 0.0);
  15.         float2 matCapUV = viewNorm.xy * 0.5 + 0.5;
  16.         return matCapUV;
  17.   }
复制代码

????????????????VS????

11.jpg

????????????????????Matcap?????????????

???Matcap?????????Matcap??alpha???

12.png


  1. [HDR]_SpColor("Sp Color", Color) = (1.0,1.0,1.0,1.0)
  2. //?????????????????????
  3. float3 spmatCap= tex2D(_CapTex,matCapuv);
  4. spmatCap *=_SpColor.rgb

  5. o.color.rgb = spmatCap  ;
  6. o.color.a = spmatCap .r;
复制代码

13.jpg

3.1 ????MASK

????????????????????????????????????

A.????????

??????????????????????????????????
?????????2?????????

1???????????
2?????????????

  1. float3 thicknessTex= tex2D(_MaskTex, i.uv);
  2. float sThickness = thicknessTex.r * i.color.r; //??????????
复制代码

???????R?????????????????

??????????????????

14.png

B.??????

????????????????


  1. _FenierEdge("Fenier Range", Range(-2, 2)) = 0.0
  2. _FenierIntensity("Fenier intensity", Range(0, 10)) = 2.0
  3. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  4. float3 V = normalize(_WorldSpaceCameraPos - i.worldPos);
  5. float NoV = dot(N,V);

  6. float EdgeThickness (in float NoV)
  7. {
  8.    float ET = saturate((NoV-_FenierEdge)*_FenierIntensity);
  9.    return ET;
  10. }
复制代码

????????????????????

15.png

?????????????????????????????

16.png

  1. _FenierEdge("FenierRange", Range(-2, 2)) = 0.0
  2. _FenierIntensity("Fenierintensity", Range(0, 10)) = 2.0
  3. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  4. float3 V = normalize(_WorldSpaceCameraPos - i.worldPos);
  5. float NoV = dot(N,V);
  6. float3 thicknessTex= tex2D(_MaskTex, i.uv) ;
  7. float sThickness = thicknessTex.r * i.color.r; //??????????
  8. float fThickness = thicknessTex.g;// ???????

  9. float EdgeThickness (in float NoV ,in float eThickness )
  10. {
  11.    fThickness = (eThickness -0.5)*0.5;
  12.    float ET = saturate((NoV-_FenierEdge+fThickness)*_FenierIntensity);
  13.    return 1-ET*eThickness ;
  14. }
复制代码

3.2 ??????

??????matcap???????????UV??????????????????mask?????matcap??????????????matcap?????????????????????????????

17.png

  1. float Refintensity = Thickness*_Refintensity;
  2. float3 rfmatCap = tex2D(_RfCapTex,matCapuv+Refintensity);
  3. float3 rfmatColor= RFLerpColor(rfmatCap,Thickness)
  4. //_BaseColor??????????????????????????
  5. float3 RFLerpColor (in float3 rfmatCap,in float Thickness)
  6. {
  7.   float3 c1 = _BaseColor.rgb*0.5;
  8.   float3 c2 = rfmatCap*_BaseColor.rgb;
  9.   float cMask = Thickness;
  10.     return lerp(c1,c2,cMask ); //????? *v.color.rgb ????????????????????????
  11. }
复制代码

??????????????????????Mask ??alpha????????????????

18.png

??????????????????????????

19.png

  1. float alpha = saturate(max(spmatCap.r*_SpColor.a ,Thickness)*_BaseColor.a);
  2. //_SpColor ???????????????
  3. //alpha???????????????????????????????
  4. col.rgb = rfColor+spColor;//???????
  5. col.a = alpha;
复制代码

3.3 ??????

????????????????????????????????????????????????????

????? ??MASK ? Matcap??????? N(normal) ??? ?????????normalMap????????

20.png

  1. o.worldTangent =normalize(UnityObjectToWorldNormal(v.tangent));
  2. o.worldBinormal = cross(o.worldNorm, o.worldTangent) * v.tangent.w;   
  3. o.uv.zw = TRANSFORM_TEX(v.texcoord.xy,_NormalTex) ;//(??????UV???????????
  4. ??????????????)
  5. o.uv.xy = TRANSFORM_TEX(v.texcoord.xy,_MaskTex) ;
  6. //------?VSout----------------------------------------------------------------------------------------------

  7. void GetNormal(v2f i, inout float3 N)
  8.   {
  9.     float4 normalTex = tex2D(_NormalTex, i.uv.zw);
  10.     float3 normalTS = normalize(UnpackNormal(normalTex));
  11.     float3x3 tbn = float3x3(i.worldTangent, i.worldBinormal, i.worldNorm);
  12.     N = normalize(mul(normalTS, tbn));
  13.   }
复制代码

PS???????????????????RT???????????????????????????

?????????????????????????????????

21.jpg

4.1 ????

???????Matcap??????????????Matcap?????Photoshop????????????

22.png

???IBL?Phone?GGX?????? ?????????????

4.2 ???????

???????????????????????

??????????????????????

?????????3????

  • ????
  • ????
  • ??????


?????????????????????????????????

23.png

???????1????????????????????? ?????????

24.png

???? ??????????????????????????????????mask?????????????

??????

???????????????????????????????????????

25.png

??????mask??????????????????????????????

26.png

????????????K????????UV????????????????????

27.png

??????

28.png

?????---?????????? RenderQueue ?????????-1????????????????????????????

???????????????RenderQueue?

?????3000???????2999???????2998?

????????????????????????????????????????????????????????????????????????

4.3 ???????

???????????????????????????????????????

29.png

??PBR???????

???????????LightProbes???????????????????????????

???Blood
?????GWB????
????https://mp.weixin.qq.com/s/-ukjq_pJqCCAYHQEcmzO3w

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

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-12-4 07:42

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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