700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > Unity Shader 龙珠Z卡通渲染分析

Unity Shader 龙珠Z卡通渲染分析

时间:2019-05-28 12:57:37

相关推荐

Unity Shader 龙珠Z卡通渲染分析

Unity Shader 龙珠Z卡通渲染分析

一、角色渲染效果整体分析角色渲染效果整体分析二、轮廓线效果三、三阶梯度漫反射四、高光

一、角色渲染效果整体分析角色渲染效果整体分析

渲染效果整体截图

渲染思路分析

效果包括:轮廓线、三阶梯度漫反射、高光。

二、轮廓线效果

采用发现外扩的方式沿着法线向外扩一圈的效果,这里单独开了一个pass来渲染。

v2f vert (a2v v) {v2f o;float4 vPos = float4(UnityObjectToViewPos(v.vertex),1);float cameraDis = length(vPos.xyz);vPos.xyz +=normalize(normalize(vPos.xyz)) * v.color.b;float3 vNormal = mul((float3x3)UNITY_MATRIX_IT_MV,v.normal);float2 offset = TransformViewToProjection(vNormal).xy;offset += offset * cameraDis * v.color.g;float3 dir = normalize(v.vertex.xyz);float3 dir2 = v.normal;float D = dot(dir,dir2);dir = dir * sign(D);dir = dir * _Factor + dir2 * (1 - _Factor);v.vertex.xyz += dir * _Outline;o.pos = UnityObjectToClipPos(v.vertex);o.pos.xy += offset * _Outline * v.color.a;UNITY_TRANSFER_FOG(o, o.pos);return o;}

三、三阶梯度漫反射

角色渲染用到一共三张贴图,BaseTex基本的颜色贴图,SSSTex模拟次表面散射颜色效果贴图,ILMTex光照阴影贴图。

BaseTex控制基本贴图,SSSTex与阴影颜色相乘控制自阴影颜色,ILMTex贴图分析:R通道控制整体亮度以及高光强度,G通道控制光照阴影,B通道控制高光大小,A通道控制内部线。

三阶梯度是通过两层阴影效果以及原颜色构成,通过计算两层阴影显示的阈值来控制阴影以及原色的范围大小。

第二层阴影

float lColorG = max(floor((vrCr + color1)* 0.5 + (-_SecondShadowArea) + 1.0), 0.0);half3 _secondShadowColor = mainColor.xyz * _SecondShadowColor.rgb;fixed3 _firstShadowColor = mainColor.xyz * _FirstShadowColor.rgb;fixed3 secondShadowColor = (int(lColorG) != 0) ? _firstShadowColor.rgb * cSSS : _secondShadowColor.rgb * cSSS;

第一层阴影

float lColorGx = max(floor((i.color.r) * lightMapG + 1.5), 0.0);float2 tempXY = vrCr.rr * float2(1.20000005, 1.25) + float2(-0.100000001, -0.125);vrCr = (lColorGx != 0) ? tempXY.y : tempXY.x;vrCr = max(floor((vrCr + color1) * 0.5 + (-_FirstShadowArea) + 1.0), 0);lColorGx = int(vrCr);fixed3 firstShadowColor = (lColorGx != 0) ? mainColor.rgb : _firstShadowColor.rgb * cSSS;

内部线:将ILM贴图的A通道中的本村线乘到主颜色上。

四、高光

float lColorGy = int(max(floor(2 - spec - lightMapB), 0.0));float3 specColor = lightMapR * _LightSpecColor *_SpecIntensity * spec;specColor = (lColorGy != 0) ? float3(0.0, 0.0, 0.0) : specColor.rgb;

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。