精华内容
下载资源
问答
  • Unity 皮肤shader

    2018-12-06 10:53:17
    Unity3D使用的皮肤Shader资源,可在Unity3D中渲染出真实的毛发效果。
  • unityShader颜色法线金属皮肤干扰支持双面透明,适合模型贴图的各种需要
  • Unity Shader学习:预积分皮肤 思路:LUT+GGX+SSS 参考:https://zhuanlan.zhihu.com/p/70390192?utm_source=wechat_session https://www.bilibili.com/video/BV1CD4y127Pv ... Shader "Zzc/ZzcSkinTest" ...

    Unity Shader学习:预积分皮肤

    思路:LUT+GGX+SSS

    参考:https://zhuanlan.zhihu.com/p/70390192?utm_source=wechat_session

    https://www.bilibili.com/video/BV1CD4y127Pv

    https://blog.csdn.net/qq_36107199/article/details/103596547

    在这里插入图片描述
    在这里插入图片描述

    Shader "Zzc/ZzcSkinTest"
    {
        Properties
        {
            _MainTex ("Texture", 2D) = "white" {}
    		_NormalTex("NormalTex",2D)="white"{}
    		_SSSLUT("SSSLUT",2D)="white"{}
    		_ThicknessTex("ThicknessTex",2D)="white"{}
    		_CurveFactor("CurveFactor",Range(0,1))=1
    		_Smoothness("Smoothness",Range(0,1))=0.5
    		_FrontSurfaceDistortion("FrontSurfaceDistortion",float) = 1
    		_BackSurfaceDistortion("BackSurfaceDistortion",float) = 1
    		[HDR]_InteriorColor("InteriorColor",Color) = (1,1,1,1)
    		_InteriorColorPower("InteriorColorPower",float) = 1
    		_FrontSSSIntensity("FrontSSSIntensity",float) = 1
    		_BackSSSIntensity("BackSSSIntensity",float)=1
        }
        SubShader
        {
            Tags { "RenderType"="Opaque" "LightMode"="ForwardBase"}
    
            Pass
            {
                CGPROGRAM
                #pragma vertex vert
                #pragma fragment frag
    			#include "UnityStandardBRDF.cginc"
                #include "UnityCG.cginc"
    
                struct v2f
                {
                    float4 uv : TEXCOORD0;
                    float4 pos : SV_POSITION;
    				float4 T2W0:TEXCOORD1;
    				float4 T2W1:TEXCOORD2;
    				float4 T2W2:TEXCOORD3;
    				float3 worldOriNormal:TEXCOORD4;
    				float3 frontDir:TEXCOORD5;
    				float3 clipFrontDir:TEXOORD6;
                };
    
                sampler2D _MainTex;
                float4 _MainTex_ST;
    			sampler2D _NormalTex;
    			float4 _NormalTex_ST;
    			float _CurveFactor;
    			sampler2D _SSSLUT;
    			sampler2D _ThicknessTex;
    			float _Smoothness;
    
    			float4 _InteriorColor;
    			float _InteriorColorPower;
    			float _FrontSurfaceDistortion;
    			float _BackSurfaceDistortion;
    			float _FrontSSSIntensity;
    			float _BackSSSIntensity;
    
    			float4 _CameraFront;
    
                v2f vert (appdata_full v)
                {
                    v2f o;
                    o.pos = UnityObjectToClipPos(v.vertex);
                    o.uv.xy = TRANSFORM_TEX(v.texcoord, _MainTex);
    				o.uv.zw = TRANSFORM_TEX(v.texcoord, _NormalTex);
    				float3 worldPos=mul(unity_ObjectToWorld,v.vertex);
    				float3 worldNormal=UnityObjectToWorldNormal(v.normal);
    				o.worldOriNormal=worldNormal;
    				float3 worldTangent=UnityObjectToWorldDir(v.tangent);
    				float3 worldBitangent=cross(worldNormal,worldTangent)*v.tangent.w;
    				o.T2W0 = float4 (worldTangent.x,worldBitangent.x,worldNormal.x,worldPos.x);
                    o.T2W1 = float4 (worldTangent.y,worldBitangent.y,worldNormal.y,worldPos.y);
                    o.T2W2 = float4 (worldTangent.z,worldBitangent.z,worldNormal.z,worldPos.z);
    				o.frontDir=normalize(mul(unity_ObjectToWorld,float4(0,0,1,0)).xyz);
    				o.clipFrontDir=normalize(mul(UNITY_MATRIX_MV,float4(0,0,1,0)).xyz);
                    return o;
                }
    
    			half3 BentNormalsDiffuseLighting(float3 normal, float3 L, float Curvature)
    			{
    				float NdotLBlurredUnclamped = dot(normal, L);
    				return tex2D(_SSSLUT, float2(NdotLBlurredUnclamped * 0.5 + 0.5, Curvature)).xyz;
    			}
    
    			float fresnelReflectance( float3 H, float3 V, float F0 )
    			{
      				float base = 1.0 - dot( V, H );
      				float exponential = pow( base, 5.0 );
      				return exponential + F0 * ( 1.0 - exponential );
    			}
    
    			float SubSurfaceScattering(float3 viewDir,float3 lightDir,float3 normalDir,float frontSubSurfaceDistortion,float backSubSurfaceDistortion,float frontSSSIntensity,float backSSSIntensity) {
    				float3 frontLitDir = normalDir * frontSubSurfaceDistortion - lightDir;
    				float3 backLitDir = normalDir * backSubSurfaceDistortion + lightDir;
    				float frontSSS = saturate(dot(viewDir, -frontLitDir));
    				float backSSS = saturate(dot(viewDir, -backLitDir));
    				float result = saturate(frontSSS * frontSSSIntensity + backSSS*backSSSIntensity);
    				return result;
    			}
    
                fixed4 frag (v2f i) : SV_Target
                {
                    fixed4 col = tex2D(_MainTex, i.uv);
    				float4 tangentNormal=tex2D(_NormalTex,i.uv.zw);
    				float3 bump=UnpackNormal(tangentNormal);
    				float3 worldNormal=normalize(half3( dot(i.T2W0.xyz,bump),
                                                      dot(i.T2W1.xyz,bump),
                                                      dot(i.T2W2.xyz,bump)));
    				float3 worldPos=float3(i.T2W0.w,i.T2W1.w,i.T2W2.w);
    				float3 lightDir=normalize(UnityWorldSpaceLightDir(worldPos));
    				float3 viewDir=normalize(UnityWorldSpaceViewDir(worldPos));
    				float3 halfVector = normalize(lightDir + viewDir);
    
    				float NdotL = saturate(dot(worldNormal, lightDir));
    				float NdotV = saturate(dot(worldNormal, viewDir));
    				float NdotH = saturate(dot(worldNormal, halfVector));
    				float LdotH = saturate(dot(lightDir, halfVector));
    
    				float smoothness=_Smoothness;
    				float roughness=1-_Smoothness;
    				roughness*=roughness;
    
    				//curvature
    				//float deltaWorldNormal = length(fwidth(worldNormal));
    				//float deltaWorldPos = length(fwidth(worldPos));
    				//float curvature = (deltaWorldNormal / deltaWorldPos) * _CurveFactor;
    
    				//diffuse
    				float3 directDiffuse=BentNormalsDiffuseLighting(normalize(i.worldOriNormal),lightDir,_CurveFactor);
    				directDiffuse*=col.rgb;
    
    				//specular
    				float alpha = roughness;
    				float G_L = NdotL + sqrt((NdotL - NdotL * alpha) * NdotL + alpha);
    				float G_V = NdotV + sqrt((NdotV - NdotV * alpha) * NdotV + alpha);
    				float G = G_L * G_V;
    				//float3 F0 = 0.028;
    				fixed F = fresnelReflectance(halfVector, viewDir, 0.028);
    				float alpha2 = alpha * alpha;
    				float denominator = (NdotH * NdotH) * (alpha2 - 1) + 1;
    				float D = alpha2 / (UNITY_PI * denominator * denominator);
    				half3 specularColor = D * G * NdotL * F;
    				float3 ks=FresnelTerm(float3(1,1,1), LdotH);
    				specularColor*=ks;
    
    				//SSS Ear
    				float SSS = SubSurfaceScattering(viewDir, lightDir, worldNormal, _FrontSurfaceDistortion,_BackSurfaceDistortion,_FrontSSSIntensity,_BackSSSIntensity);
    				float3 SSSCol = lerp(_InteriorColor, float3(1,1,1), saturate(pow(SSS, _InteriorColorPower))).rgb*SSS;				
    				float thickness=tex2D(_ThicknessTex,i.uv).r;
    				SSSCol*=(1-thickness);
    				float FdotL=saturate(dot(lightDir,i.frontDir));
    				float CFdotF=abs(dot(float3(0,0,-1),i.clipFrontDir));
    				SSSCol*=(1-FdotL)*pow(CFdotF,5);
    
    				return float4(specularColor+directDiffuse+SSSCol,1);
                }
                ENDCG
            }
        }
    }
    
    
    展开全文
  • LOL中船长有一款叫做幽灵船长的皮肤,相信大家应该都知道,虽然不是什么好看的皮肤,没什么特效,但是还是有点意思的。我们都知道游戏中的换装无非就是换模型,换材质,换网格这几个套路。那么在untiy当中我们应该...

    LOL中船长有一款叫做幽灵船长的皮肤,相信大家应该都知道,虽然不是什么好看的皮肤,没什么特效,但是还是有点意思的。我们都知道游戏中的换装无非就是换模型,换材质,换网格这几个套路。那么在untiy当中我们应该怎么做才能有像幽灵船长这样的效果呢?其实我们只需要编写一个Shader脚本,就能实现这样类似的效果。在这里我分享下我的做法。先上效果图。

    哈哈,这是幽灵拉克丝,不是幽灵船长。效果差不多了,不要在意这些细节。那么这是怎么做的?其实也是很简单的。不会很难。接下来我们来看看具体怎么做。点击链接加入群聊【unity/cocos交流二群】

    首先我们咋一看是不是有点像在医院拍的X光的片子?那么这个效果我们也可以叫它X光效果。可以看出中间颜色比较深,边缘颜色比较浅,其实这就是利用法线与视线的向量点乘来进行计算的,其余细节接下来再说,然后根据这个点乘值进行着色。最终呈现出来。这边先上Shader代码:

    OK,代码就在上面了,关键点注释已经标注,其他的都是正常操作,这里需要说一个点,就是我们想要的是幽灵的效果/X光的效果,那么很明显它是输出颜色的。所以我们最终需要返回COLOR,然后还有一个就是我们需要进行颜色的混合,打开混合模式。同时深写模式要关掉。这样的话,效果才会更好。至于幽灵的效果程度,我们可以通过调节参数来实现。慢慢试下就可以达到自己想要的效果了。关于是如何通过视线与法线的点成来得到中间颜色深,边缘颜色浅的这个效果要说一下。点成dot = |A向量| * |B向量| * COS& ,当两个向量的模都为1时,正好点成dot = cos&了,所有我们就可以根据这个值,得到一个数,这个数字再和颜色值相乘,就能得到不同的颜色值了。这样就能达到我们想要的效果。好了,本次的分享就到这里了。不喜勿喷哦!

    展开全文
  • 【GPU精粹与Shader编程】(六) 《GPU Gems 3》:真实感皮肤渲染技术总结 【GPU精粹与Shader编程】(六) 《GPU Gems 3》:真实感皮肤渲染技术总结 【GPU精粹与Shader编程】(六) 《GPU Gems 3》:真实感皮肤渲染技术总结...

    【GPU精粹与Shader编程】(六) 《GPU Gems 3》:真实感皮肤渲染技术总结

    【GPU精粹与Shader编程】(六) 《GPU Gems 3》:真实感皮肤渲染技术总结

    【GPU精粹与Shader编程】(六) 《GPU Gems 3》:真实感皮肤渲染技术总结

    【GPU精粹与Shader编程】(六) 《GPU Gems 3》:真实感皮肤渲染技术总结

    【GPU精粹与Shader编程】(六) 《GPU Gems 3》:真实感皮肤渲染技术总结

    https://www.codercto.com/a/21964.html

    展开全文
  • shader总结一

    2017-09-14 14:49:36
    mesh render:根据物体样子给予皮肤和颜色 OpenGL: DirectX:提供了渲染图形的许多接口,让处理更加简化 shader:一种渲染命令,由OpenGL和directX进行解析,来控制渲染各种图形 GLSL shader语言用于OpenGL HLSL ...
    mesh filter:存储一个mesh网格,来支撑这个物体的轮廓
    mesh render:根据物体样子给予皮肤和颜色
    OpenGL和
    DirectX:提供了渲染图形的许多接口,让处理更加简化


    shader:一种渲染命令,由OpenGL和directX进行解析,来控制渲染各种图形

    GLSL shader语言用于OpenGL

    HLSL shader语言用于directX

    英伟达CG编写shader可以在OpenGL和directX通用


    Unity Shader的分类:

    使用的是ShaderLab编写unity中的的shader

    1 表面着色器 Surface Shader

    2 顶点/片元着色器 Vertex/Fragment Shader

    3 固定函数着色器 Fixed Function Shader 


    在unity中创建一个shader用vs编写:Shader "myShader"{   } 这里“”表示shader的名字,如果“siki/myshader”表示siki栏下面名为myshader。



    如果只写了一个空shader那么unity不知道如何渲染,调用shader就会显示出紫色

    在myshader{}中第一个是属性Properties{   }



                                      

    这些属性中Range是对数进行限制,默认为6,  这里2D表示2D纹理,我们可以看到在inspector面板上显示出来了这些信息,我们可以在面板上修改这些属性,因此properties中的作用仅仅是在面板上显示出来这些属性




    虽然在Properties中定义了但是在pass中要使用哪个还是再声明下,在属性中一行不加;在pass中要加分号

    属性中color用了4个变量所以使用float4,当然使用float都可以用half或fiexed来代替。比如half4 _Color;

    区别是使用float 用32位来存储用half使用16位存储从-6万到+6万,使用fixed使用11位存储,从-2到+2

    shader中包含多个SubShader,但最少一个,unity会选用一个能够在目标平台上运行的subShader如果都不行,就使用Fallback语义指定的shader


    每个图像都是由许多个三角面组成的,每个三角面由三个顶点组成

    顶点函数:将顶点坐标从模型空间到剪裁空间的转换              格式:#pragma  vertex  vert

    片元函数:确定每个像素的点的颜色                                          格式:#pragma  fragment  frag


    结构体的定义:


    这个a2v是自定义的名字,当传递多个数据的时候可以直接传递结构体


    片元函数和顶点函数是如何传递数据的呢:

    定义两个结构体v和f,在顶点函数参数传v返回f,在函数中变量赋值,在片元函数参数中传f进来



    光照模型:是一个公式,使用这个公式可以计算某个点的光照效果

    进入摄像机的光分为四类:

    1 自发光

    2 高光反射 specular

    3 漫反射(diffuse)

    4 环境光


    渲染流水线的任务是:从一个3维场景出发,生成一个2维图像,由cpu和Gpu共同完成

    渲染流程分为3个阶段:

    应用阶段:准备场景数据,粗粒度剔除,输出渲染的几何信息,即渲染图元,在cpu上实现,这里又分为三个阶段,1,把数据加载到显存上,2,设置渲染状态。3,调用Draw Call

    几何阶段:处理渲染图元,处理几何,在gpu上实现

    光栅化阶段:渲染出最终图像,gpu上实现


    渲染所需的数据会通过硬盘加载到内存中,网格纹理这些数据会又被加载到显存中,因为显卡对于显存的访问速度更快。

    渲染状态:这些状态定义了场景中网格是怎样被渲染的,例如使用了那个顶点/片元着色器,光源属性,材质等

    Draw Call:Cpu通过调用一个渲染命令来告诉Gpu,数据准备好,可以进行渲染,这个渲染命令就是Draw Call 



    顶点着色器:实现顶点的空间变换,顶点着色                        曲面细分着色器:细分图元

    裁剪:不在摄像机范围内的物体不需要被处理                        屏幕映射:把图元的x,y坐标转换到屏幕坐标系下

    三角形设置:计算三角网格表示数据的过程                            片元着色器:


    总结:如果问你3d流水线的流程或是渲染管线的工作原理?

    答:渲染管线主要分为三个阶段:应用程序阶段、几何阶段、光栅阶段。应用程序阶段是Cpu和内存交互,顶点坐标、法向量、纹理坐标、纹理等数据作为源数据等待处理。几何阶段,负责顶点坐标变换、光照、裁剪、投影以及屏幕映射,gpu上实现。光栅化阶段,渲染出最终图像,gpu上实现。



    1,cpu和gpu如何并行工作?

    命令缓冲区包含一个命令队列,cpu添加命令,gpu读取


    2,为什么Draw Call多了会影响帧率?

    每次调用它之前,cpu需要检查渲染状态等,如果太多,cpu会把大量时间浪费在提交Draw Call上

    3,如何减少Draw Call数量

    批处理方法,把许多小的Draw Call合并成一个大的Draw Call,同时避免使用过多材质,尽量在不同网格之间只用同一材质


    shader本身无法发生作用,必须和材质结合起来才能发生神奇的化学反应

    shaderLab:自动封装了渲染的许多设置,让开发者编写shader更容易,也即编写shader的格式


    世界空间:不解释

    模型空间:局部空间,把世界空间看做模型空间的父空间系

    模型变换(模型-世界变换)

    模型变换的实质就是将模型上的顶点在模型空间中的描述,转换为在世界空间中的描述。假设有一个模型坐标系表示为矩阵 M(基于世界坐标系来描述),一个顶点在该模型坐标系上的坐标表示为列向量 D。 那么,该顶点在世界坐标系中的坐标 D‘,有如下变换关系:M·D = D’。M 也称为模型矩阵。模型矩阵本质上是一系列缩放、旋转和平移矩阵的复合矩阵。

    视图空间

    视图空间,也称为视点空间或摄像机空间或观察空间,从摄像机的角度来看,视图坐标系 x-轴和 y-轴的正方向分别指向摄像机右方和上方,而 z-轴的负方向则指向摄像机的镜头指向。

    注意的是:观察空间和屏幕空间是不同的,从观察空间转到屏幕空间只需一个操作,就是投影

    视图变换(世界-视图变换):将某个顶点在世界空间中的描述,转换为在视图空间中的描述。

    模型视图矩阵(Model-View)

    为了渲染一个模型,我们通常会先将它从模型空间变换到世界空间,然后再从世界空间变换到视图空间。这两个过程都有对应的变换矩阵:模型矩阵和视图矩阵。我们可以将这两个矩阵结合起来用一个复合矩阵来表示,这样的一个复合矩阵我们称为模型视图矩阵。通过模型视图矩阵,我们可以将模型上的顶点从模型空间直接变换到摄像机的视图空间

    剪裁空间:
    每个相机看到的场景不同,看到的保留,看不到的去除,叫做剪裁


    屏幕空间:







    漫反射代码:

    在写shader的时候,出现的错误可能会在报错的那行的上面或者上上一行

    漫反射的公式:

    Shader "siki/myShader"{//两冒号是shader的名字
    
    SubShader{
    	Pass{
    		Tags{"LightMode" = "ForwardBase" } //只有正确而定义了LightMode才能得到unity的内置光照变量
    		CGPROGRAM
            #include "Lighting.cginc"  //包含unity的内置文件,才可以使用unity的内置变量
            #pragma vertex vert
            #pragma fragment frag
    
    		struct a2v {
    		float4 vertex : POSITION;//告诉unity把模型空间下的顶点坐标给vertex
    		float3 normal:NORMAL; //取得法线
            };
    
    	    struct v2f {
    		float4 position:SV_POSITION;//把剪裁空间下的位置传给Position
    		fixed3 color : COLOR;//用于接收最后的漫反射光的颜色
    	    };
    	 
    	    v2f vert(a2v v) {  //把结构体a2v传进来,v2f传出去
    		v2f f;
    		f.position = mul(UNITY_MATRIX_MVP,v.vertex);//mul()是计算两个矩阵和向量相乘,UNITY_MATRIX_MVP矩阵是把顶点坐标从模型空间转换到剪裁空间
    		fixed3 normalDir = normalize(mul(v.normal,(float3x3)unity_WorldToObject));
    		//由于拿到的法线是世界坐标下的,所以要转到模型空间下,通过mul相乘,由于World2Object是世界空间转模型空间矩阵,所以要想从模型空间转世界,把
    		//两个参数互选下位置,由于矩阵是4x4,normal是float3所以要把矩阵强转为3x3,normalize是将向量单位化
    		fixed3 lightDir = normalize(_WorldSpaceLightPos0.xyz); //平行光,所以光的位置就是光的方向
    		fixed3 diffuse = _LightColor0.rgb * max(dot(normalDir,lightDir),0);
    		//这里_LightColor0是取得平行光的颜色,dot是两个向量点积
    		f.color = diffuse;
    			return f;
    	}
        	fixed4 frag(v2f f): SV_Target {
    		return fixed4(f.color,1);   //由于拿到的颜色是float3,所以最后一位在加上一个1
    	}
        ENDCG
    		  }
    	}
    		Fallback "VertexLit"  
    }

    高光反射的公式:specular=直射光*pow(max(cos夹角,0),10)   夹角等于反射光的方向和相机和物体之间的连线方向的夹角

    通过max(cos夹角,0)取正数,通过pow(,10)来将它乘以10次幂将曲线的陡度提起来

    高光反射的效果:可以看到球体的上头有个亮点,这个亮点会随着视角的移动而移动,这就是高光反射


    Lambert模型较好的表现了粗糙表面的光照现象,如墙壁,纸张等,但是在用于诸如金属等有光泽效果的材质上则会显得呆板,表现不出光泽,主要原因是Lambert光照模型没有考虑表现这些表面的镜面反射效果。
    一个光滑物体被光照射时,可以从某个方向上看到很强的反射光,这是因为在接近镜面反射角的一个区域内,反射了入射光的全部或大部分光强,这种现象称为镜面发射。也可以理解为高光反射
    故此,提出一个计算镜面反射光强的光照模型,称为Phong模型,认为镜面反射的光强与反射光线和视线的夹角相关。

    BlinnPhong光照模型混合和了Lambert的漫反射和标准的高光,渲染有时比Phong高光更柔和、更平滑,此外它的处理速度相当快,因此成为许多CG软件中默认的光照渲染方法


    上面的代码用到的一些系统函数:



    写代码的时候要想把多行向右移动,选中代码,按Tab键即可



    展开全文
  • Unity skin shader

    2018-12-21 13:57:57
    untiy 皮肤插件最新版本,skinShader3.0 10美元asset商店买的,只用来测试使用。禁止商用
  • unity3d通透材质shader

    2017-10-01 10:43:51
    unity3d通透材质shader,次表面散射是一种非常常用的效果,可以用在很多材质上 如蜡烛,皮肤,牛奶,奶油奶酪,番茄酱,土豆受光散射等等表现通透材质效果。
  • unity shader入门教程视频

    热门讨论 2019-07-30 14:31:57
    Mesh Renderer:用来渲染一个模型的外观,就是样子, 按照 mesh给它皮肤,给它颜色 通过Material(材质)控制模型渲染的样子 Material 贴图(可以没有,可以是一个单纯的颜色) Shader 书籍 unity shader ...
  • Mesh Renderer:用来渲染一个模型的外观,就是样子, 按照 mesh给它皮肤,给它颜色 通过Material(材质)控制模型渲染的样子 Material 贴图(可以没有,可以是一个单纯的颜色) Shader 创建shader时的模板和打包...
  • S老师 Shader 学习

    2017-02-17 07:49:00
    Mesh Filter : 存储一个...Mesh Renderer:用来渲染一个模型的外观,就是样子, 按照 mesh给它皮肤,给它颜色 通过Material(材质)控制模型渲染的样子 Material 贴图(可以没有,可以是一个单纯的颜色) ...
  • 皮肤,牛奶,奶油奶酪,番茄酱,土豆等等 初衷是想做一个牛奶shader的,但后来就干脆研究了sss 这是在vray上的次表面散射效果 这是本文在unity中实现了的次表面散射效果: 左侧为BRDF(双向反射分布),右侧为...
  • 次表面散射是一种非常常用的效果,可以用在很多材质上,如皮肤,牛奶,奶油奶酪,番茄酱,土豆等等
  • HumanSkin shader是专门用于渲染皮肤表面的。由于皮肤是一个独特外观,并且不能通过常规shading来实现的。一个有趣的特点是,这种shader允许我们基于黑色和红色素重新创建皮肤纹理颜色。这样我们可以获得更多的颜色...
  • 双边滤波(Bilateral Filter),可能没有高斯滤波那样著名,但是如果说磨皮滤镜,那肯定是无人不知无人不晓了,用双边滤波就可以实现很好的皮肤滤镜效果,不管脸上有多少麻子,用完双边滤波,瞬间变身白富美。
  • 环绕照明(Wrap Lighting)是对Oren-Nayar光照模型的一个粗糙的近似。...在明暗交界线上叠加一些红色可以简单而廉价的给模拟皮肤散射提供更好的效果。 Shader代码 Shader "MyShaderTest/1_Wa...
  • 最近在做一个武器皮肤的系统,为了让每个玩家都获得一种独一无二的武器,我们决定给皮肤做变体生成,那么这张皮肤就不能直接用一张美术给的贴图,而要通过一些可变的参数,让每个皮肤产生不一样的效果。因此我们需要...
  • 首先要知道,如果想要制作阳光照射到水中动物的效果,我们需要的贴图纹理要有两张,一张是动物的皮肤纹理,另一张是波光的纹理,我是用的是下面的两张贴图纹理 解释一下为什么要是用背景为黑色的波光纹理,因为...
  • 在加入了漫反射与高光后...菲涅尔反射是玉/水/皮肤(油腻的师姐你在la儿)/瓷砖釉等会产生的效果,其特点是与视线垂直的地方反射弱,与视线相对比较平行的地方反射强。ShaderForge直接封装菲涅尔反射方法 提供Nrm(...
  • 模型网格,模型由哪些三角面组成,组成什么样子的模型,三角面的一些顶点信息)MeshRender 根据MeshFilter 存储的三角面顶点信息 用来渲染一个模型的外观,就是样子,按照Mesh给他颜色和皮肤。通过Material(材质)...
  • 【旧博客转移 - 2016年4月4日 13:13】 油腻的师姐: 以前玩过一款很火热的端游《剑灵》,剑灵刚出来的时候,某网页游戏广告视频中有句台词:“我不断的在寻找,有...像这样(皮肤表面的高光) 这样 ...
  • 继上次渲染的皮肤之后,这次再写一篇可在游戏中应用的shader。 先上效果图(PS:游戏中的效果会比截图更好)。 、 这个shader主要用了以下几张贴图,皮肤贴图,法线贴图,AO贴图(g通道存储的在人脸越薄的地方值越...
  • 如下图所示,下图(No SSSSS)是博主用unity5 的standard PBR shader来渲染的。我们缺的就是次表面散射,之前的文也说过了,皮肤其实是有些轻微的半透明的,大多数的漫反射光来自次表面散射 ,光线接触到皮肤时,有...
  • 经过几天的努力, 找了很多资料, 也看了很多论文, 终于实现了SSS效果.... 截图: (按F1 激活/禁用 diffuse color) 1.) 没有使用diffuse color的效果: 2.) 使用diffuse color后的效果: 注: 如果应用在人物皮肤...
  • Unity 关于真实皮肤笔记 参考链接: 1、https://www.google.com/search?q=unity+reality+Human+skin&oq=unity+reality+Human+skin&aqs=chrome..69i57j33.17932j0j15&sourceid=chrome&ie=UTF-8...
  • 大概原理是当光线从后面照进来的时候,中间是黑的,外周围是亮的,很像边缘光,但是明暗过渡又很微妙,所以硬要模拟的话,美术可以手绘一张贴图去控制皮肤的强弱,通透度。否者只能模拟一下这种效果,很奇怪,???? ...
  • 关键代码 let uniformsBuild = null let clockBuild = new THREE.Clock() uniformsBuild = { time: { value: 1.0 } } let material = new THREE.ShaderMaterial({ ... vertexShader: document....

空空如也

空空如也

1 2 3
收藏数 45
精华内容 18
关键字:

皮肤shader