_LightColor0的数值不正确。
原因出在——我在2017.4.40的built-in渲染管线下用了command buffer渲染模型。built-in管线下,渲染都是unity内部处理的,我们看不见,无法管理。可能就是unity对使用command buffer的情况没有很好地覆盖到,导致错误。最终我创建gameobject,挂上mesh filter和mesh renderer,就是最普通的渲染
,就没有这个错误了。
Lighting.hlsl引用
Common.hlsl、EntityLighting.hlsl、ImageBasedLighting.hlsl、Core.hlsl、Shadows.hlsl、
1.
常用的几个
内置文件
这些文件通常都被封装在cginc文件中,通过文件的包含来实现对文件中函数及
变量的引用,大家可以到unity的安装目录下找到对应的文件,当然我们也可以写一些自己的cginc文件放置到该目录中,方便自己使用,具体
方法可以参考Unity着色器代码复用。
A.UnityCG.cginc
1.这里包含了最常使用的帮助函数、宏和结构体。
2.UnityCG.cginc中一些
常用的结构体
appdata_base:(用于顶点着色器的输入),包含
变量:顶点位置、顶点法线、第一组纹理坐标
当您创建Unity3D模型时,Shader是用于控制模型外观和材质的组件。Shader可以定义模型的表面特征,例如颜色,纹理,透明度和光照效果。以下是一个简单的Unity3D模型Shader示例:
Shader "Custom/MyShader" {
Properties {
_MainTex ("Texture", 2D) = "white" {}
_Color ("Color", Color) = (1,1,1,1)
_Gloss ("Smoothness", Range(0,1)) = 0.5
_Metallic ("Metallic", Range(0,1)) = 0.0
SubShader {
Tags { "RenderType"="Opaque" }
LOD 100
CGPROGRAM
#pragma surface surf Standard
sampler2D _MainTex;
fixed4 _Color;
float _Gloss;
float _Metallic;
struct Input {
float2 uv_MainTex;
void surf (Input IN, inout SurfaceOutputStandard o) {
fixed4 c = tex2D (_MainTex, IN.uv_MainTex) * _Color;
o.Albedo = c.rgb;
o.Metallic = _Metallic;
o.Smoothness = _Gloss;
o.Alpha = c.a;
ENDCG
FallBack "Diffuse"
上面的代码定义了一个名为"Custom/MyShader"的Shader,该Shader包含了几个属性,包括主要纹理(_MainTex),颜色(_Color),光滑度(_Gloss)和金属度(_Metallic)。
此外,SubShader中定义了使用SurfaceOutputStandard结构的surf函数。此函数控制着表面的输出,其中o.Albedo表示表面颜色,o.Metallic表示金属度,o.Smoothness表示光滑度,o.Alpha表示透明度。
最后,FallBack定义了在无法使用此Shader时应该回退使用的默认Shader。
这只是一个简单的Shader示例,但它展示了如何使用属性和函数来控制Unity3D模型的外观。