LOADING

加载过慢请开启缓存 浏览器默认开启

图形学练习实践

程序化波浪:

通过在顶点着色器中,使用sin()函数和时间变量,对顶点的Y轴位置进行程序化偏移实现。

//顶点着色器里面进行扰动
float3 x_offset = sin(_Time.y * _Frequency) * _Amplitude;
float3 y_offset = sin(_Time.y * _Frequency + IN.positionOS.x * _WaveLength) * _Amplitude;

float3 modifiedPositionOS = IN.positionOS.xyz;
modifiedPositionOS.x += x_offset;
modifiedPositionOS.y += y_offset;

溶解特效:

通过采样噪声纹理,并以时间为变量,动态控制clip()函数的阈值达成。

//噪声贴图
half noiseValue = SAMPLE_TEXTURE2D(_NoiseMap, sampler_NoiseMap, parallax_uv).r;
half threshold = frac(_Time.y * _DissolveThreshold); // 用时间驱动
clip(noiseValue - threshold);

护盾效果:

基于菲涅尔反射公式法线扰动贴图时间参数偏差,实现能量护盾效果

//纹理流动效果
float2 scroll_offset = _ScrollSpeed.xy * _Time.y;
float2 final_uv = parallax_uv+ scroll_offset;
 //纹理贴图
half4 albedo = SAMPLE_TEXTURE2D(_BaseMap, sampler_BaseMap, final_uv);

软件光栅化器:

基于 GAMES101 教学内容独立实现。
包括三角形扫描、深度测试(Z-Buffer)、透视纹理映射、光照插值等基础功能。

代码:GAMES101/Assignment3/Code at main · chu123122/GAMES101

Blinn-Phong复刻

在Unity中用HLSL绕过内置管线,手动实现了Blinn-Phong光照模型,包括漫反射、高光和环境光和纹理贴图、法线贴图和视差贴图。

左(视差贴图+法线贴图) 右(无光照)

  //环境光计算
  half3 ambient = SampleSH(normalWS);
  //漫反射光计算
  half3 diffuse = energy * saturate( dot(normalWS, light_direction));
  //高光计算
  half3 specular = energy * pow(saturate(dot(normalWS, h)), _Shininess);

half3 finalColor = (ambient + diffuse) * baseMapColor.rgb + specular;

多线程路径追踪:

基于蒙特卡洛积分方法的路径追踪渲染器, 实现了漫反射、镜面反射、全局光照与软阴影。
使用 std::thread 进行分块并行渲染以加速计算。

代码:GAMES101/PA7.1 at main · chu123122/GAMES101