Origin
zhuanlan.zhihu.com
Tags
简悦
项目
收藏夹
创建时间
收藏类型
Cubox 深度链接
更新时间
原链接
描述

INTRO

项目源代码:
使用 love2d 实现。主要是前段时间看到之前在 eastward 下面的回答,然后结合了下现在学会的知识,所以实现了这个效果。
notion image

光照部分

光照部分主要用了三张贴图:一张 albedo,一张 normal,一张 depth(height)
notion image
notion image
通过 depth map 可以获取一份伪造的深度信息,通过这份信息和像素位置可以获取光照方向。用光照方向点乘法线就可以获得光照量。这一部分比较简单。

阴影部分

这一部分是自己想出来的,但是想出来之后发现其实早在 2002 年就有人想到了这个做法。
简单的说,就是从要计算阴影的像素开始,每次一个像素步进到光源。那么,步进了 n 步之后,这个点的坐标应该是:(光源坐标 - 像素坐标) x (n / 总共需要步进的次数) + 像素坐标
通过这个公式可以获得步进 n 次后的 xyz 坐标。用 xy 坐标又可以取出位于 (x,y) 的深度信息。将 z 坐标和深度信息比较,如果 z 坐标小于深度信息,那么这个像素就应该是在阴影中,不会受到任何光照。
notion image
(最后只要根据需求加入各种特技即可)

▎本文由 简悦 SimpRead 转码。