准备1:
加入以下脚本到摄像机让depth texture 有效,水面整体颜色变化基于深度。
using UnityEngine;
public class CameraDepthTextureMode : MonoBehaviour
{
[SerializeField]
DepthTextureMode depthTextureMode;
private void OnValidate()
{
SetCameraDepthTextureMode();
}
private void Awake()
{
SetCameraDepthTextureMode();
}
private void SetCameraDepthTextureMode()
{
GetComponent<Camera>().depthTextureMode = depthTextureMode;
}
}
准备2:
加入以下脚本到摄像机,得到一张在view空间的normal纹理

using UnityEngine;
public class NormalsReplacementShader : MonoBehaviour
{
[SerializeField]
Shader normalsShader;
private RenderTexture renderTexture;
private new Camera camera;
private void Start()
{
Camera thisCamera = GetComponent<Camera>();
// Create a render texture matching the main camera's current dimensions.
renderTexture = new RenderTexture(thisCamera.pixelWidth, thisCamera.pixelHeight, 24);
// Surface the render texture as a global variable, available to all shaders.
Shader.SetGlobalTexture("_CameraNormalsTexture", renderTexture);
// Setup a copy of the camera to render the scene using the normals shader.
GameObject copy = new GameObject("Normals camera");
camera = copy.AddComponent<Camera>();

本文介绍了如何在Unity中创建卡通水效果。通过在摄像机上添加特定脚本以获取深度纹理和法线纹理,结合详细的中文注解,实现水体颜色随深度变化。提供了一个包含完整shader和使用说明的UnityPackage,包括导入、设置Camera脚本和应用ToonWater材质等步骤。
318

被折叠的 条评论
为什么被折叠?



