Unity中Shader光强与环境色
最佳答案 问答题库808位专家为你答疑解惑
文章目录
- 前言
- 一、实现下图中的小球接受环境光照
- 实现思路:
- 1、在Pass中使用前向渲染模式
- 2、使用系统变量 _LightColor0 获取场景中的主平行灯
- 二、返回环境中主环境光的rgb固定a(亮度),小球亮度还随之改变的原因
- 三、获取Unity中的环境光的颜色
- 1、Color模式下的
前言
Unity中Shader的光强与环境色
一、实现下图中的小球接受环境光照
实现思路:
1、首先使用前向渲染模式
2、获取到场景中的灯
1、在Pass中使用前向渲染模式
Tags{“LightMode”=“ForwardBase”}
2、使用系统变量 _LightColor0 获取场景中的主平行灯
_LightColor0
主平行灯的颜色值,rgb = 颜色x亮度; a = 亮度
需要引用 Lighting.cginc
测试代码:
Shader "MyShader/P1_5_2"
{Properties{_MainTex ("Texture", 2D) = "white" {}}SubShader{Tags { "RenderType"="Opaque" }Pass{Tags{"LightMode"="ForwardBase"}CGPROGRAM#pragma vertex vert#pragma fragment frag#include "UnityCG.cginc"#include "Lighting.cginc"struct appdata{float4 vertex : POSITION;float2 uv : TEXCOORD0;};struct v2f{float2 uv : TEXCOORD0;float4 vertex : SV_POSITION;};v2f vert (appdata v){v2f o;o.vertex = UnityObjectToClipPos(v.vertex);return o;}fixed4 frag (v2f i) : SV_Target{return _LightColor0;}ENDCG}}
}
效果:
二、返回环境中主环境光的rgb固定a(亮度),小球亮度还随之改变的原因
当我们在片元着色器结果处返回 fixed4(_LightColor0.rgb,1)这个结果时,会发现,小球的亮度还是会随着主环境光的亮度改变而改变
return fixed4(_LightColor0.rgb,1);
由上图 FrameDebugger调试数据可得
原因是: _LightColor0中的 rgb 值,不是单纯的rgb颜色,而是一个与 a(亮度)相乘后的结果。
三、获取Unity中的环境光的颜色
unity_AmbientSky — 环境光(Gradient)中的Sky Color.
unity_AmbientEquator — 环境光(Gradient)中的Equator Color.
unity_AmbientGround — 环境光(Gradient)中的Ground Color.
UNITY_LIGHTMODEL_AMBIENT — 环境光(Color)中的颜色,等同于环境光(Gradient)中的Sky Color.
1、Color模式下的
获取到 unity_AmbientSky ,与LightColor0 相乘后输出测试
测试效果:
2、Gradient模式下的
分别与这三个 一 一 对应
unity_AmbientSky — 环境光(Gradient)中的Sky Color.
unity_AmbientEquator — 环境光(Gradient)中的Equator Color.
unity_AmbientGround — 环境光(Gradient)中的Ground Color.
99%的人还看了
相似问题
猜你感兴趣
版权申明
本文"Unity中Shader光强与环境色":http://eshow365.cn/6-18857-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!
- 上一篇: 【数据结构C/C++】多维数组的原理、访问方式以及作用
- 下一篇: 月木天上-开发合作