Project1

标题: 给你的地图生成光影的程序…… [打印本页]

作者: garfeng    时间: 2016-6-19 17:31
标题: 给你的地图生成光影的程序……
本帖最后由 garfeng 于 2019-1-21 11:57 编辑

我上传到度盘的自写工具已全部被删除,如果需要请点此链接尝试其他网盘(暂时不需要梯子了)

下方提供的其他下载地址均已失效。


因为实在手残,不会画影子,所以写了这个程序。
起源于我上次发的:
求一个画光的方法……帖子附我自己画的蹩脚的光
https://rpg.blue/thread-393879-1-1.html

在这栋楼里遇到慷慨的@Kim_巧克力控 大大,去读Ta写的教程贴:
【教程】让地图加分的方法!-室内地图光影+无限图层
https://rpg.blue/thread-388527-1-1.html

发现光源确定后,物体的影子是可以算。

程序界面:



处理效果:
按顺序分别是:原图,光+影+原图,影子图,光图
(配合T大的ulds脚本使用)https://rpg.blue/thread-367901-1-1.html


使用中设置不同的透明度,并且ps下,会产生下面的效果:
(这张图我把光源位置设置错了,但还是可以看出效果的)
原图:

加上光后:

光:


----------------------------

这个大约是只能玩玩,比手动处理效果差太多:
以下是巧克力酱手动画的光影:

云泥之别。

所以想做的漂亮,还是得靠自己双手画。

----------------------------

Github:shadow
原理见:让地图加分的方法!室内地图光影+无限图层
其中,无限图层脚本见:ULDS by taroxd
生成效果并不是很好,因为程序无法从二维图片中提取xyz三个坐标,只能完全当二维来处理。


下载地址

结果输出目录
:设置后会存储在配置文件里,下次启动程序还是这个目录要处理的图片可以多选,建议把墙壁放在第一个。边缘偏移:没有光影的地方,比如墙顶,或黑色的地方(可以不设置)原始图片:用于给光生成纹路,为了避免像是蒙一层白(可以不设置)
光源设置:点光源中心的坐标,用格数来确定,比如在左上角顶点有一个宽1格,高2格的窗子,则需要把这里设置为
RUBY 代码复制
  1. x:0.5
  2. y :1
墙壁高度:墙壁底部距离图片上边缘的距离,比如有1格墙顶,2格墙壁,这里设置为3。
每一格大小:32,24,48(一般是这三种)比例:输出结果比输入的图片放大多少倍,如果是直接截图,则设置为1,如果是rmmv地图编辑器那里选择的“保存为图片”则设置为2衰减距离:距离光源多少像素的时候,将完全没有光了。毕竟一个光源能照亮的范围有限。输出文件前缀:自己随意设置。

注意事项:



作者: 仲秋启明    时间: 2016-6-19 18:04
本帖最后由 仲秋启明 于 2016-6-19 18:08 编辑

貌似需要VC++2015,安装完运行库后提示
This application failed to start because it could not find or load the Qt platform plugin "windows" in "".

Reinstalling the application may fix this problem.


这里有解决方案http://www.cnblogs.com/mmix2009/p/3536825.html
作者: shitake    时间: 2016-6-19 18:20
不错不错 然而好像要动态光影生成。。ORZ
作者: 威风镰鼬    时间: 2016-6-19 18:32
恭喜你发现镇站之宝

作者: shitake    时间: 2016-6-19 19:47
http://indienova.com/indie-game- ... of-sight-explained/
http://indienova.com/indie-game- ... ects-for-your-game/
至少js是不用OpenGL之类的东西就可以实现的,RGSS系的可以用扫描线段法做多边形填充,就是不知道效率如何。不过多光源的话就不知道会怎么样了
作者: 越前リョーマ    时间: 2016-6-19 20:30
很智能化的程序,就是感觉光太强了可能是LZ设置的数值问题……
作者: garfeng    时间: 2016-6-19 20:45
本帖最后由 garfeng 于 2016-6-19 20:55 编辑
shitake 发表于 2016-6-19 19:47
http://indienova.com/indie-game- ... of-sight-explained/
http://indienova.com ...


看到你发的地址了,我这边用的是差不多的原理,其实原理都一样。
但你发的地址那里,是俯视图,二维的,不用考虑物体的高度,所以纯二维坐标就能处理好了。
RM是45度角俯视,如果要在游戏里用js做,那就是一个三维的数组,=-=,不仅计算是三维的,每个图块都还要单独设置长宽高,否则出来会很假。三维用cpu做也可以,会很吃配置。
普遍的处理办法都是转GPU做,类比3D游戏都要求独立显卡才能运行流畅。

我现在的处理办法,也只是,提前处理好,看到不顺眼的可以ps掉……暂时只能如此了。
作者: Pickstar2    时间: 2017-3-25 19:25
真触啊,可以偷懒了
作者: king    时间: 2017-11-10 13:45
努力实验中……
  1. 光源设置:点光源中心的坐标,用格数来确定,比如在左上角顶点有一个宽1格,高2格的窗子
  2. x:0.5
  3. y :1
复制代码

不懂!什么意思……格子的参照?是工具中每一个格子设置的大小?
还是RM地图的格子?
具体位置的换算比例是什么?


作者: garfeng    时间: 2017-11-10 14:40
本帖最后由 garfeng 于 2017-11-10 14:42 编辑
king 发表于 2017-11-10 13:45
努力实验中……

不懂!什么意思……格子的参照?是工具中每一个格子设置的大小?

这个工具使用方法非常复杂,还要设置多层,地板,墙壁,物品需要分开画,否则无法区分。但是没办法,因为图本来就是二维的。
是工具里的一格。



我的另一个帖子:https://rpg.blue/thread-403401-1-1.html

有自动光影脚本可以用。





欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1