forked from Isayes/UnityAndroidThings
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
6 changed files
with
802 additions
and
0 deletions.
There are no files selected for viewing
130 changes: 130 additions & 0 deletions
130
UnityShader/逐顶点:像素漫反射光照/MatShader007/MatDiffusePixel.mat
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,130 @@ | ||
%YAML 1.1 | ||
%TAG !u! tag:unity3d.com,2011: | ||
--- !u!21 &2100000 | ||
Material: | ||
serializedVersion: 6 | ||
m_ObjectHideFlags: 0 | ||
m_PrefabParentObject: {fileID: 0} | ||
m_PrefabInternal: {fileID: 0} | ||
m_Name: MatDiffusePixel | ||
m_Shader: {fileID: 4800000, guid: 5e70cb9c73ce64b90b1123fa40bcaf7c, type: 3} | ||
m_ShaderKeywords: _EMISSION | ||
m_LightmapFlags: 1 | ||
m_CustomRenderQueue: -1 | ||
stringTagMap: {} | ||
m_SavedProperties: | ||
serializedVersion: 2 | ||
m_TexEnvs: | ||
- first: | ||
name: _BumpMap | ||
second: | ||
m_Texture: {fileID: 0} | ||
m_Scale: {x: 1, y: 1} | ||
m_Offset: {x: 0, y: 0} | ||
- first: | ||
name: _DetailAlbedoMap | ||
second: | ||
m_Texture: {fileID: 0} | ||
m_Scale: {x: 1, y: 1} | ||
m_Offset: {x: 0, y: 0} | ||
- first: | ||
name: _DetailMask | ||
second: | ||
m_Texture: {fileID: 0} | ||
m_Scale: {x: 1, y: 1} | ||
m_Offset: {x: 0, y: 0} | ||
- first: | ||
name: _DetailNormalMap | ||
second: | ||
m_Texture: {fileID: 0} | ||
m_Scale: {x: 1, y: 1} | ||
m_Offset: {x: 0, y: 0} | ||
- first: | ||
name: _EmissionMap | ||
second: | ||
m_Texture: {fileID: 0} | ||
m_Scale: {x: 1, y: 1} | ||
m_Offset: {x: 0, y: 0} | ||
- first: | ||
name: _MainTex | ||
second: | ||
m_Texture: {fileID: 0} | ||
m_Scale: {x: 1, y: 1} | ||
m_Offset: {x: 0, y: 0} | ||
- first: | ||
name: _MetallicGlossMap | ||
second: | ||
m_Texture: {fileID: 0} | ||
m_Scale: {x: 1, y: 1} | ||
m_Offset: {x: 0, y: 0} | ||
- first: | ||
name: _OcclusionMap | ||
second: | ||
m_Texture: {fileID: 0} | ||
m_Scale: {x: 1, y: 1} | ||
m_Offset: {x: 0, y: 0} | ||
- first: | ||
name: _ParallaxMap | ||
second: | ||
m_Texture: {fileID: 0} | ||
m_Scale: {x: 1, y: 1} | ||
m_Offset: {x: 0, y: 0} | ||
m_Floats: | ||
- first: | ||
name: _BumpScale | ||
second: 1 | ||
- first: | ||
name: _Cutoff | ||
second: 0.5 | ||
- first: | ||
name: _DetailNormalMapScale | ||
second: 1 | ||
- first: | ||
name: _DstBlend | ||
second: 0 | ||
- first: | ||
name: _GlossMapScale | ||
second: 1 | ||
- first: | ||
name: _Glossiness | ||
second: 0.5 | ||
- first: | ||
name: _GlossyReflections | ||
second: 1 | ||
- first: | ||
name: _Metallic | ||
second: 0 | ||
- first: | ||
name: _Mode | ||
second: 0 | ||
- first: | ||
name: _OcclusionStrength | ||
second: 1 | ||
- first: | ||
name: _Parallax | ||
second: 0.02 | ||
- first: | ||
name: _SmoothnessTextureChannel | ||
second: 0 | ||
- first: | ||
name: _SpecularHighlights | ||
second: 1 | ||
- first: | ||
name: _SrcBlend | ||
second: 1 | ||
- first: | ||
name: _UVSec | ||
second: 0 | ||
- first: | ||
name: _ZWrite | ||
second: 1 | ||
m_Colors: | ||
- first: | ||
name: _Color | ||
second: {r: 1, g: 1, b: 1, a: 1} | ||
- first: | ||
name: _Diffuse | ||
second: {r: 0.8888211, g: 1, b: 0.1478854, a: 1} | ||
- first: | ||
name: _EmissionColor | ||
second: {r: 0, g: 0, b: 0, a: 1} |
130 changes: 130 additions & 0 deletions
130
UnityShader/逐顶点:像素漫反射光照/MatShader007/MatDiffuseVertex.mat
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,130 @@ | ||
%YAML 1.1 | ||
%TAG !u! tag:unity3d.com,2011: | ||
--- !u!21 &2100000 | ||
Material: | ||
serializedVersion: 6 | ||
m_ObjectHideFlags: 0 | ||
m_PrefabParentObject: {fileID: 0} | ||
m_PrefabInternal: {fileID: 0} | ||
m_Name: MatDiffuseVertex | ||
m_Shader: {fileID: 4800000, guid: ab08d0636bc36431598d03a8f2f011dc, type: 3} | ||
m_ShaderKeywords: _EMISSION | ||
m_LightmapFlags: 1 | ||
m_CustomRenderQueue: -1 | ||
stringTagMap: {} | ||
m_SavedProperties: | ||
serializedVersion: 2 | ||
m_TexEnvs: | ||
- first: | ||
name: _BumpMap | ||
second: | ||
m_Texture: {fileID: 0} | ||
m_Scale: {x: 1, y: 1} | ||
m_Offset: {x: 0, y: 0} | ||
- first: | ||
name: _DetailAlbedoMap | ||
second: | ||
m_Texture: {fileID: 0} | ||
m_Scale: {x: 1, y: 1} | ||
m_Offset: {x: 0, y: 0} | ||
- first: | ||
name: _DetailMask | ||
second: | ||
m_Texture: {fileID: 0} | ||
m_Scale: {x: 1, y: 1} | ||
m_Offset: {x: 0, y: 0} | ||
- first: | ||
name: _DetailNormalMap | ||
second: | ||
m_Texture: {fileID: 0} | ||
m_Scale: {x: 1, y: 1} | ||
m_Offset: {x: 0, y: 0} | ||
- first: | ||
name: _EmissionMap | ||
second: | ||
m_Texture: {fileID: 0} | ||
m_Scale: {x: 1, y: 1} | ||
m_Offset: {x: 0, y: 0} | ||
- first: | ||
name: _MainTex | ||
second: | ||
m_Texture: {fileID: 0} | ||
m_Scale: {x: 1, y: 1} | ||
m_Offset: {x: 0, y: 0} | ||
- first: | ||
name: _MetallicGlossMap | ||
second: | ||
m_Texture: {fileID: 0} | ||
m_Scale: {x: 1, y: 1} | ||
m_Offset: {x: 0, y: 0} | ||
- first: | ||
name: _OcclusionMap | ||
second: | ||
m_Texture: {fileID: 0} | ||
m_Scale: {x: 1, y: 1} | ||
m_Offset: {x: 0, y: 0} | ||
- first: | ||
name: _ParallaxMap | ||
second: | ||
m_Texture: {fileID: 0} | ||
m_Scale: {x: 1, y: 1} | ||
m_Offset: {x: 0, y: 0} | ||
m_Floats: | ||
- first: | ||
name: _BumpScale | ||
second: 1 | ||
- first: | ||
name: _Cutoff | ||
second: 0.5 | ||
- first: | ||
name: _DetailNormalMapScale | ||
second: 1 | ||
- first: | ||
name: _DstBlend | ||
second: 0 | ||
- first: | ||
name: _GlossMapScale | ||
second: 1 | ||
- first: | ||
name: _Glossiness | ||
second: 0.5 | ||
- first: | ||
name: _GlossyReflections | ||
second: 1 | ||
- first: | ||
name: _Metallic | ||
second: 0 | ||
- first: | ||
name: _Mode | ||
second: 0 | ||
- first: | ||
name: _OcclusionStrength | ||
second: 1 | ||
- first: | ||
name: _Parallax | ||
second: 0.02 | ||
- first: | ||
name: _SmoothnessTextureChannel | ||
second: 0 | ||
- first: | ||
name: _SpecularHighlights | ||
second: 1 | ||
- first: | ||
name: _SrcBlend | ||
second: 1 | ||
- first: | ||
name: _UVSec | ||
second: 0 | ||
- first: | ||
name: _ZWrite | ||
second: 1 | ||
m_Colors: | ||
- first: | ||
name: _Color | ||
second: {r: 1, g: 1, b: 1, a: 1} | ||
- first: | ||
name: _Diffuse | ||
second: {r: 0.99964434, g: 0.9591359, b: 0.15293378, a: 1} | ||
- first: | ||
name: _EmissionColor | ||
second: {r: 0, g: 0, b: 0, a: 1} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,120 @@ | ||
# 逐顶点/像素漫反射光照 | ||
|
||
漫反射光照符合兰伯特定律 : 反射光线的强度 与 表面法线 和 光源方向 之间的夹角的余弦值成正比 . | ||
|
||
计算机图形第一定律 : 如果它看起来是对的 , 那么它就是对的 . | ||
|
||
逐顶点光照的计算量往往要小于逐像素光照 . | ||
|
||
逐顶点光照依赖于线性插值来得到像素光照 , 当光照模型中有非线性的计算的时候 , 逐顶点光照就会出问题 , 例如计算高光反射 . | ||
|
||
逐顶点光照会在渲染图元内部对顶点进行插值 , 渲染图元内部的颜色总是暗于顶点处的最高颜色 , 在某些情况下会产生明显的棱角现象 . | ||
|
||
```c | ||
// Upgrade NOTE: replaced '_World2Object' with 'unity_WorldToObject' | ||
|
||
Shader "Custom/DiffuseVertexLevel" { | ||
|
||
Properties { | ||
_Diffuse("Diffuse", Color) = (1, 1, 1, 1) | ||
} | ||
|
||
SubShader { | ||
Pass { | ||
Tags { "LightMode"="ForwardBase" } | ||
|
||
CGPROGRAM | ||
#pragma vertex vert | ||
#pragma fragment frag | ||
#include "Lighting.cginc" | ||
|
||
fixed4 _Diffuse; | ||
|
||
struct a2v { | ||
float4 vertex : POSITION; | ||
float3 normal : NORMAL; | ||
}; | ||
|
||
struct v2f { | ||
float4 pos : SV_POSITION; | ||
fixed3 color : COLOR; | ||
}; | ||
|
||
// 逐顶点的漫反射光照 | ||
v2f vert(a2v v) { | ||
v2f o; | ||
o.pos = mul(UNITY_MATRIX_MVP, v.vertex); | ||
fixed3 ambient = UNITY_LIGHTMODEL_AMBIENT.xyz; | ||
fixed3 worldNormal = normalize(mul(v.normal, (float3x3)unity_WorldToObject)); | ||
fixed3 worldLight = normalize(_WorldSpaceLightPos0.xyz); | ||
fixed3 diffuse = _LightColor0.rgb * _Diffuse.rgb * saturate(dot(worldNormal, worldLight)); | ||
o.color = ambient + diffuse; // 环境光 + 漫射光 | ||
return o; | ||
} | ||
|
||
fixed4 frag(v2f f) : SV_Target { | ||
return fixed4(f.color, 1.0); | ||
} | ||
|
||
ENDCG | ||
} | ||
} | ||
FallBack "Diffuse" | ||
} | ||
|
||
``` | ||
|
||
逐像素光照可以得到更加平滑的光照效果 , 但是有一个问题存在 : 当光照无法到达的区域 , 模型的外观通常是全黑的 , 没有任何的额明暗变化 , 失去了模型细节表现 , 因此有一种改善技术提出 , 即 , 半兰布特光照模型(没有任何物理依据 , 只是一个视觉加强技术) . | ||
|
||
```c | ||
Shader "Custom/DiffusePixelLevel" { | ||
|
||
Properties { | ||
_Diffuse("Diffuse", Color) = (1,1,1,1) | ||
} | ||
|
||
SubShader { | ||
Pass { | ||
|
||
CGPROGRAM | ||
#pragma vertex vert | ||
#pragma fragment frag | ||
#include "Lighting.cginc" | ||
|
||
fixed4 _Diffuse; | ||
|
||
struct a2v { | ||
float4 vertex : POSITION; | ||
float3 normal : NORMAL; | ||
}; | ||
|
||
struct v2f { | ||
float4 pos : SV_POSITION; | ||
float3 worldNormal : TEXCOORD0; | ||
}; | ||
|
||
v2f vert(a2v v) { | ||
v2f o; | ||
o.pos = mul(UNITY_MATRIX_MVP, v.vertex); | ||
o.worldNormal = mul(v.normal, (float3x3)_World2Object); | ||
return o; | ||
} | ||
|
||
// 逐像素漫反射光照 | ||
fixed4 frag(v2f f) : SV_Target { | ||
fixed3 ambient = UNITY_LIGHTMODEL_AMBIENT.xyz; | ||
fixed3 worldNormal = normalize(f.worldNormal); | ||
fixed3 worldLightDir = normalize(_WorldSpaceLightPos0.xyz); | ||
fixed3 diffuse = _LightColor0 * _Diffuse.rgb * (dot(worldNormal, worldLightDir) * 0.5 + 0.5); // 半兰伯特光照模型 | ||
fixed3 color = ambient + diffuse; | ||
return fixed4(color, 1.0); | ||
} | ||
|
||
ENDCG | ||
} | ||
} | ||
FallBack "Diffuse" | ||
} | ||
|
||
``` | ||
End. |
Oops, something went wrong.