UnityShader——Phong光照模型 = Diffuse + Specular + Ambient
light(1, 1, 1) * stuff(0.2f, 0.3f, 0.5f) = (0.2f, 0.3f, 0.5f) 1 二.经验模型Phong
Phong = Ambient + Diffuse +Specular
1.Diffuse漫反射Shader "Unlit/Lambert" {SubShader{Tags { "RenderType" = "Opaque" }LOD 100Pass{CGPROGRAM#pragma vertex vert#pragma fragment frag#include "UnityCG.cginc"#include "Lighting.cginc"struct appdata{float4 vertex : POSITION;float3 normal : NORMAL;};struct v2f{float3 worldNormal:TEXCOORD0;float4 vertex : SV_POSITION;};v2f vert (appdata v){v2f o;o.vertex = UnityObjectToClipPos(v.vertex);o.worldNormal = mul(v.normal, (float3x3)unity_WorldToObject);return o;}fixed4 frag (v2f i) : SV_Target{//法线Nfixed3 worldNormal = normalize(i.worldNormal);//光源方向LightDirfixed3 worldLightDir = normalize(_WorldSpaceLightPos0.xyz);//diffuse分量计算fixed3 diffuse = max(0.0, dot(worldNormal, -worldLightDir));//叠加光源色fixed3 diffuseColor = diffuse * _LightColor0.xyz;return fixed4(diffuseColor, 0);}ENDCG}} }
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253加入Specular之后的Shader:
Shader "Unlit/Phong" {Properties{_SpecularGlass("SpecularGlassStrength", Range(0,64))=32}SubShader{Tags { "RenderType" = "Opaque" }LOD 100Pass{CGPROGRAM#pragma vertex vert#pragma fragment frag#include "UnityCG.cginc"#include "Lighting.cginc"struct appdata{float4 vertex : POSITION;float3 normal : NORMAL;};struct v2f{float3 worldNormal:NORMAL;float4 vertex : SV_POSITION;float3 worldPos : TEXCOORD1;};v2f vert (appdata v){v2f o;o.vertex = UnityObjectToClipPos(v.vertex);o.worldNormal = mul(v.normal, (float3x3)unity_WorldToObject);o.worldPos = mul(unity_ObjectToWorld, v.vertex).xyz;return o;}float _SpecularGlass;fixed4 frag (v2f i) : SV_Target{fixed3 worldNormal = normalize(i.worldNormal);fixed3 worldLightDir = normalize(_WorldSpaceLightPos0.xyz);fixed3 diffuse = max(0.0, dot(worldNormal, -worldLightDir));fixed3 diffuseColor = diffuse * _LightColor0.xyz;//计算reflect方向fixed3 reflectDir = normalize(reflect(worldLightDir, worldNormal));//计算view方向fixed3 viewDir = normalize(_WorldSpaceCameraPos.xyz - i.worldPos);//specular分量fixed3 specular = pow(max(0.0, dot(reflectDir, viewDir)), _SpecularGlass);fixed3 specularColor = specular * _LightColor0.xyz;return fixed4(diffuseColor + specularColor, 0);}ENDCG}} }
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 3.Ambient环境光环境光之间获取 乘上叠加物体颜色;
//环境光fixed3 ambient = UNITY_LIGHTMODEL_AMBIENT.xyz * _ObjColor; 12
给一个Obj颜色之后:
相关知识
Shader(六) 高光 Phont 和 BlinnPhone 光照模型案例
OpenGl光照之材质
OpenGL(七) 光照模型及设置
Direct3D研究院之光照、材质(七)
OpenGL中光照的设置
Shader(五) 逐顶点 逐像素 和 Lambert 光照模型案例
计算机图形学 Phong光照模型实验(OpenGL的基本使用)
基于预计算的实时环境光照(Real
Cesium中光照效果的实现与调整
Gazebo仿真中光源的设置
网址: UnityShader——Phong光照模型 = Diffuse + Specular + Ambient https://www.huajiangbk.com/newsview1356250.html
上一篇: 茉莉花对光照要求高吗? |
下一篇: 铜钱草的光照要求是什么? 爱问知 |
推荐分享

- 1君子兰什么品种最名贵 十大名 4012
- 2世界上最名贵的10种兰花图片 3364
- 3花圈挽联怎么写? 3286
- 4迷信说家里不能放假花 家里摆 1878
- 5香山红叶什么时候红 1493
- 6花的意思,花的解释,花的拼音 1210
- 7教师节送什么花最合适 1167
- 8勿忘我花图片 1103
- 9橄榄枝的象征意义 1093
- 10洛阳的市花 1039