【发布时间】:2021-12-02 16:02:33
【问题描述】:
我目前被困在我正在编写的着色器中。 我正在尝试创建一个雨水着色器。 我设置了 3 个模拟下雨的粒子系统,以及一个 相机来看看这个模拟。相机视图是我 用作纹理。在我的着色器中,我现在正在尝试制作法线贴图 从那个纹理贴图,但我不知道该怎么做。
Shader "Unlit/Rain"
{
Properties
{
_MainTex("Albedo (RGB)", 2D) = "white" {}
_Color("Color", Color) = (1,1,1,1)
_NormalIntensity("NormalIntensity",Float) = 1
}
SubShader
{
Tags { "RenderType" = "Opaque" }
LOD 100
Pass
{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
#include "Lighting.cginc"
#include "AutoLight.cginc"
struct VertexInput {
float4 vertex : POSITION;
float2 uv : TEXCOORD0;
float4 normal : NORMAL;
float3 tangent : TANGENT;
};
struct VertexOutput {
float2 uv : TEXCOORD0;
float4 vertex : SV_POSITION;
float2 uv1 : TEXCOORD1;
float4 normals : NORMAL;
float3 tangentSpaceLight: TANGENT;
};
sampler2D _MainTex;
float4 _MainTex_ST;
half4 _Color;
float _NormalIntensity;
VertexOutput vert(VertexInput v) {
VertexOutput o;
o.normals = v.normal;
o.uv1 = v.uv;
o.vertex = UnityObjectToClipPos( v.vertex );
// o.uv = TRANSFORM_TEX( v.uv, _MainTex ); // used for texture
return o;
}
float4 frag(VertexOutput i) : COLOR{
float4 col2 = tex2D(_MainTex, i.uv1);
return col2 * i.normals * 5;
}
ENDCG
}
}
}
This is what the camera sees. I set the TargetTexture for this camera to be a texture I created.
In my shader I then put that texture as an albedo property
所以我现在想做的是找到该纹理的法线来创建凹凸贴图。
【问题讨论】:
-
“基于”纹理贴图是什么意思?如果纹理贴图是一个渲染,那和法线有什么关系?
-
@Ruzihm 我在下面发布了一个答案:)
-
下面的答案应该是这篇文章的答案,下次请edit the question 包括澄清信息。 :)
-
好吧,对不起。我是新手 :) 你有这个问题的答案吗? :)
-
你可以试试interpreting it as a height map。没有像高度图这样的东西,没有真正令人满意的方法来根据它的外观来猜测它的形状。特别是以适合着色器的快速方式。如果着色器位于粒子系统本身而不是渲染纹理上,则可以让粒子系统创建着色器可以使用的法线贴图,因为粒子系统知道粒子速度、液滴大小等信息。这可能会更容易.