【发布时间】:2018-06-02 04:10:38
【问题描述】:
所以,我正在构建一个隐形游戏,虽然使用带有相机的阴影缓冲区并获取像素很有效,但它在光线处于特定角度时效果不佳,并且在 Unity 中非常昂贵。我正在寻找一种方法来确定玩家通过着色器的亮度,但是,我不是程序员,我从未接触过着色器。我一直在寻找几个月,但我还没有找到一个价值,每个人都只是使用触发器,这对这个游戏没有影响。我正在尝试做一些类似于 Thief2 或 Splinter Cell 游戏的事情。我知道光线投射,但是它们也不够准确。
那么,为了获得合适的渐变,我该如何确定播放器的亮度?
这是迄今为止我用来收集光线的代码。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ShadowBufferScript : MonoBehaviour {
public RenderTexture shadowBuffer;
Texture2D tex2d;
public float percentageHidden;
public float relativeLuminance;
void Start()
{
tex2d = new Texture2D (shadowBuffer.width, shadowBuffer.height, TextureFormat.RGB24, false);
}
void FixedUpdate ()
{
tex2d = new Texture2D (shadowBuffer.width, shadowBuffer.height, TextureFormat.RGB24, false);
RenderTexture.active = shadowBuffer;
tex2d.ReadPixels (new Rect (0, 0, shadowBuffer.width, shadowBuffer.height), 0, 0);
tex2d.Apply ();
Color shadowBufferColor = tex2d.GetPixel (0, 0);
relativeLuminance = shadowBufferColor.r * 0.2126f + shadowBufferColor.g * 0.7152f + shadowBufferColor.b * 0.0722f;
percentageHidden = relativeLuminance * 100;
}
}
【问题讨论】:
-
您能否提供您需要帮助的具体代码行?
-
@user1506104 我没有特定的代码行,因为现有代码不适合,因为它会占用 CPU。我正在寻找更准确的新东西,比如在《小偷 2》或《细胞分裂》游戏中,以确定玩家的光照程度,正如他们在游戏中的测光表上显示的那样。我已经完成了触发器、光线投射和 getpixel,但是它们要么不足,要么太昂贵。我提出了我用来收集问题中的灯光的代码。
-
我认为这篇文章应该可以帮助您提供多种选择answers.unity.com/questions/24662/…
-
@AdrianSgro 我以前看过那个帖子,我们实际上执行了他们在那里所做的事情。 Volumes 和 Raycasts 不够准确,而且 RenderTexture 在 CPU 上非常昂贵。有人告诉我着色器可以工作,但是,当我一直在研究着色器时,我找不到一个值来告诉我“这就是你的角色的亮度”。 :(