首页 > 其他分享 >[Unity URP]原神 Shader渲染还原 Part1 面部阴影

[Unity URP]原神 Shader渲染还原 Part1 面部阴影

时间:2023-02-14 23:33:41浏览次数:54  
标签:原神 half4 float Shader xz Part1 LightMap RightL


声明
本文章的代码仅作为学习交流使用

//面部阴影 half3 faceShadow; #if FACESHADOW_ON float3 Front = mul(unity_ObjectToWorld, half3(0,0,1)); //人物正面朝向 float3 Right = mul(unity_ObjectToWorld, half3(1,0,0)); //人物右侧朝向 //对LightMap进行采样,1是光照到左半边脸,2是光照到右半边脸 float2 flipUV = float2(1 - i.uv0.x, i.uv0.y);//反向采样用的uv half4 LightMap1 = SAMPLE_TEXTURE2D(_LightMap, sampler_LightMap, i.uv0); half4 LightMap2 = SAMPLE_TEXTURE2D(_LightMap, sampler_LightMap, flipUV); //计算光和人右侧/光和人正面的夹角 float RightL = dot(normalize(Right.xz), normalize(lDirWS.xz)); float FrontL = dot(normalize(Front.xz), normalize(lDirWS.xz)); //判断采用哪张采样图 //half4 Rroad = cross(Front, lDirWS).y > 0 ? LightMap1 : LightMap2; half4 Rroad = lerp(LightMap2, LightMap1, step(RightL,0)); //RightL大于0,说明右侧光,用反采样图(2号) //角度angle利用RightL的反余弦计算光和右侧夹角(此时范围为0-PI),之后变换区间(0-2),判断大于还是小于1,得到角度值(范围为0-1) float LR = -(acos(RightL)/3.14159265 - 0.5)*2; float angle = lerp(LR, -LR, step(LR,0)); //判断光照在脸上还是后面,后面就全黑(FrontL<0) half3 lightforward = step(0, FrontL); //如果角度值比采样图的值大则说明被光照到 half lighton = step(angle,Rroad.r);//如果R通道小于angle,返回0,R通道大于angle,返回1 //依据lightforward和lighton光照情况对阴影色和基础色进行插值 return half4(lerp(ShadowRamp1*baseCol, baseCol.rgb, lightforward*lighton),1.0);
         #endif
 

参考文章:

[卡通渲染]二、原神角色渲染还原 - Diffuse-1 - 知乎 (zhihu.com)

从零开始的原神角色渲染 - 知乎 (zhihu.com)

标签:原神,half4,float,Shader,xz,Part1,LightMap,RightL
From: https://www.cnblogs.com/lofu/p/17121234.html

相关文章

  • [无聊/科普向] 一篇关于《原神》抽卡概率/期望计算的正经介绍
    最近学深度学习上手Python后想试试用MATLAB画图,于是随便找了个话题写写,文章本身没啥含金量(注:本文的正确性建立在目前广为流传的一份角色池与武器池单抽出货概率数据......
  • Unity Shader 后处理(1):景深效果
    景深的产生原因:摄像机成像时,通过棱镜聚焦,光线通过棱镜打在传感器平面上。不同物距的成像结果也会不一样,只有焦平面上的物体上的任意一点,通过过棱镜后会在传感器平面上聚焦......
  • 第七章 类_Part1
    1.类和对象1.1类和对象的基本概念1.1.1C和C++中struct区别c语言struct只有变量c++语言struct既有变量,也有函数1.1.2类的封装​ 我们编写程序的目的是为了解决现......
  • Unity Shader 风格化水体渲染
    风格化渲染(stylizedrendering)的具体定义我没能找到,但是在一些文章中,风格化渲染就是指那些非写实的(NonPhotorealisticRendering)渲染。其中卡通风格的渲染(ToonShad......
  • Unity Shader 真实感水体渲染
    这两周用UnityShader做了点简单的水体渲染,有真实感的也有非真实感的,打算这几天总结整理一下贴出来。毛星云大牛有一篇详细的真实感水体渲染介绍:https://zhuanlan.zhihu.c......
  • 1.大并发服务器架构Part1
    要提升服务器性能,就要有服务器高性能编程技术,就需要自己编码实现。另外服务器性能的几个性能杀手:1数据拷贝,数据从内核态copy到用户态,或者在用户态之间co......
  • threejs 第二十用 shaderMaterial
    自己写shader就得用这个材质需要vertexfragment先<scriptid="vertex-Shader"type="x-shader/x-vertex">varyingvec2vUv;voidmain(){gl_P......
  • 由原神卡池引发的概率问题1
    引子因为最近3.4下半卡池如日中天,所以就讨论一下卡池概率的问题;由于本人只是一个弱弱的高中生,所以有问题还请指出;而且受水平和时间限制,只能讨论一下限定角色up池,而且没......
  • 由原神卡池引发的概率问题1
    引子因为最近3.4下半卡池如日中天,所以就讨论一下卡池概率的问题;由于本人只是一个弱弱的高中生,所以有问题还请指出;而且受水平和时间限制,只能讨论一下限定角色up池,而且没......
  • 超级无敌神仙炫酷无敌原神大王好题。
    都是神题,难度3000上下。有些都是看题解做的,就当涨知识见世面了。学OI没做这些题,简直就是打游戏不玩原神,看vtb不看東雪蓮,听歌不听曹万江,成功学不学cjx,看闲话不看韩神,只......