Initial commit: Minecraft 光追着色器包(从零实现的 path tracing)
This commit is contained in:
@@ -0,0 +1,39 @@
|
||||
#include "/Lib/Settings.glsl"
|
||||
#include "/Lib/Utilities.glsl"
|
||||
// MinecraftPT — Waving Plants
|
||||
// Wind animation for grass, plants, leaves.
|
||||
|
||||
#ifndef WAVING_PLANTS_GLSL
|
||||
#define WAVING_PLANTS_GLSL
|
||||
|
||||
void WavingPlants(inout vec4 worldPos, float lightLevel){
|
||||
float time = frameTimeCounter * 0.05 * WAVING_SPEED;
|
||||
|
||||
// Wind direction
|
||||
vec2 wind = vec2(0.5, 0.3) * sin(time) + vec2(0.2);
|
||||
|
||||
// Amplitude by plant type
|
||||
float amplitude = GRASS_AMPLITUDE;
|
||||
#ifdef IS_LEAVES
|
||||
amplitude = LEAVES_AMPLITUDE;
|
||||
#endif
|
||||
|
||||
float dist = length(worldPos.xyz - gbufferModelViewInverse[3].xyz);
|
||||
float fade = 1.0 - saturate(dist / WAVING_RANGE);
|
||||
|
||||
vec3 vertexPos = worldPos.xyz;
|
||||
|
||||
// Vertex-based wave
|
||||
vec3 offset = vec3(wind * sin(vertexPos.x * 0.3 + vertexPos.z * 0.2 + time * 2.0), 0.0);
|
||||
offset *= vertexPos.y * amplitude * fade;
|
||||
|
||||
// Random per-vertex jitter (height-based)
|
||||
float heightFactor = vertexPos.y;
|
||||
float noise = sin(vertexPos.x * 12.9898 + vertexPos.z * 78.233 + time) * 0.5 + 0.5;
|
||||
offset.x += noise * amplitude * 0.5 * heightFactor * fade;
|
||||
offset.z += noise * amplitude * 0.3 * heightFactor * fade;
|
||||
|
||||
worldPos.xyz += offset;
|
||||
}
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user