Counter-Strike 2

Counter-Strike 2

Not enough ratings
Hammer里世界类环境搭建与动态天空
By CD意识.
Hammer里世界类环境搭建与动态天空
   
Award
Favorite
Favorited
Unfavorite
前言
创意: Luffaren
案例剖析教程制作:CD意识.
大概效果演示:b站[www.bilibili.com]
素材链接: 度盘/s/1tIvcqQ-ArIwrQLHa5-QsjA 提取码: tu43

本教程包含大量知识点的使用,类似于早期我发布的高达教程。请务必跟着教程做完一遍后,不看教程自己再做一遍,随后将遇到的问题重点记录来加深理解,这样一定会有所收获。
知识点与实体列表
知识点:
·skybox_swapper能够实时切换天空盒子
·env_fade用于制作一些过渡效果
·env_fog_controller的FARZ,fog start与end的一些使用技巧
·理解env_sun的部分参数和工作方式
·天空盒子(worldspawn)不会被回合重置
·env_sun同样不会被回合重置
·env_fog_controller不会被回合重置
·logic_timer的使用和对震荡器的理解
·logic_case的使用
·等等等......

核心功能实体:
·env_fog_controller
·env_sun
·skybox_swapper *6
·logic_timer *3
·logic_case

其余辅助实体:
·env_fade*2
·ambient_generic *2
·func_button
·logic_relay
·logic_auto
·出生点与环境光
第一部分:小试牛刀,里世界环境的搭建
准备工作:做一个盒子用于测试,做一个按钮用于触发。并且依次按照上面列表在地图上放置对应数量的实体。

首先进入里世界后要使环境天空变黑。

那么首先打开一个skybox_swapper实体(共6个),写入参数:
如上图,取名为skybox_swapper_black,使用的天空材质为blacksky(黑色天空材质)
进入开关按钮写下i/o:
现在按下按钮0.5s后天空会变成黑色了。但是我们进游戏测试后很快发现,天空变黑太突兀了,所以需要使用一个env_fade来过渡。

使用一个env_fade来制作过渡效果

打开一个env_fade实体,写入参数:
如上图,取名为fade_black,淡入淡出时间0.3s,全黑持续时间0.5s。
进入开关按钮写下i/o:
现在按下按钮后屏幕会突然黑一下,等淡出后天空已经变黑。

制作环境黑雾

打开一个env_fog_controller实体,写入参数:
进入开关按钮写下i/o:
进入logic_auto实体写下i/o:
注释:
FAR Z参数是渲染的距离半径,超过的都不会被渲染。该参数不会随着雾实体的turn off而消失,必须手动设置为-1关闭。同样的,雾实体打开后不会随着回合的刷新而重置成默认的关闭状态,必须使用logic_auto在每回合开始手动关闭来重置状态。这里FAR Z设置为760主要是配合黑色雾气750的半径,来做到雾气很浓无法被视野穿透的效果,其实真正做成此效果的原理是750End范围的黑雾+760FarZ范围以外的无渲染+黑色的天空共同作用的效果。


制作里世界红色的大太阳

打开一个env_sun实体,写入参数:
进入开关按钮写下i/o:
进入logic_auto实体写下i/o:
注释:
需要注意的是,env_sun与environment_light工作原理一样,太阳是被投射到3dskybox上的。真正影响太阳位置的是图中的两个红框参数。第一个pitch yaw roll决定了太阳投射的方向,需要调成图中箭头所指实体黄线朝着玩家的方向,第二个pich决定了太阳的角度,即人类抬头多少角度太阳会出现。部分天空贴图会阻止太阳出现。最后太阳一样不会被回合重置,必须手动重置实体。
Ps.太阳的材质贴图不会被软件识别打包,如果用了三方贴图请手动。务必记住这一点。


使新的一局恢复天空原来的样貌

因为worldspawn不会被回合刷新而重置的关系,我们必须手动恢复进入里世界环境变黑的天空,具体操作时拿出一个创建的skybox_swapper,命名并且配置参数如图:

框框写进你自己的天空材质名字,随后打开logic_auto写入i/o每回合开局触发一次重置:
*配置进入里世界后的音乐

打开2个ambient_generic,分别调参数,这里用了luf的音乐素材,第一个主音乐:
第二个辅音乐,主要是卤粉开头进入里世界的一段钟声:
[/previewimg]
打开一个logic_timer,配置参数,用于循环主音乐,初始禁用:
打开logic_relay,配置参数,这里是音乐的中继器作用:
进入开关按钮写下i/o:
现在,按下按钮,2个音乐将播放,钟声音频时间短所以响了一会儿就会自动放完结束,而主音乐长达774s,当放完时候,timer继续触发播放。

工作原理
按下按钮触发relay,relay 9s后播放辅音乐,同时激发logic timer的onuser1,logic timer收到i/o触发2条Onuser1,激活自己开始计时,同时播放主音乐,计时775s后触发自己的ontimer输出再次播放主音乐。


*添加里世界下雪的天气

拉一块固体覆盖住你要下雪的地方,转换为func_precipitation,配置参数:
密度为0这样初始就不会有效果,然后在按钮写入i/o:
这样近路里世界后就会显现下雪天气。当然你可以自己调节参数成你喜欢的天气 :)

目前第一阶段里世界的环境搭建教程已经基本结束,大致按下按钮后就是下图的效果+循环的音乐,能见度低带来的就是人类对僵尸防御难度的成倍提升。


第二部分:进阶,动态天空的制作
动态天空的逻辑树状图:
其核心原理是依靠skybox_swapper能够实时刷新天空盒子的特性,通过timer定时刷新帧数来使天空达到gif图片的效果

打开第一个logic_timer,
·调成如下图的属性参数
打开第二个logic_timer,
·调成如下图的属性参数
注释
Skybox_Swapper_truthrandom该计时器主要是用来控制天空动画的随机开启和关闭。计时器我们可以看到开启了oscillator(震荡),使计时像波浪一样在最低和最高之间来回往返,交替输出。具体说就是配合参数的randomtime,使该计时器的计时在5到20的区间内来回计时,并且因为随机参数的原因,当计时向20靠近时有可能不满20就触发了ontimerhigh的i/o,同理向5靠近时可能不到5又触发了ontimerlow的i/o,计时永远是≤15,从而达到一个随机的效果。值得一提的是,开启震荡,第一个输出永远是ontimerlow的i/o。


第二个skybox_swapper_t_timer该计时器用于控制动画帧数的高速切换,可以根据参数看到随机取一个0.025s至0.05s之间的数来输出切换。

打开第一个Skybox_Swapper_truthrandom写下i/o
这里我们的思路是当计时器震荡触发timerhigh时激活skybox_swapper_t_timer的 Onuser1来触发动画相关的输出,计时器震荡触发timerlow时激活skybox_swapper_t_timer的Onuser2来关闭动画。

先做Onuser1 开启动画的系列输出,和第一部分一样先给开启动画天空一个快速过渡的效果。

打开一个env_fade实体,写入参数:
这里的fade参数要比进入里世界时的fade更快,就相当于屏幕瞬间黑了一下,渲染出一种突然的气氛效果。

打开第二个skybox_swapper_t_timer写下i/o
当第一个震荡计时器开启动画时,这个计时器输出fade,同时自己开始计时输出。接下来我们做切换动画的功能。

打开一个logic_case,配置参数:
依次打开4个skybox_swapper,命名为skybox_swapper_t1~skybox_swapper_t4,使用的天空材质依次是素材的truthsky1~truthsky4,下面我们看看素材的图片:
共4帧,合起来的gif效果如下,是一个心脏胸腔快速规律跳动的效果:
但是规律的跳动效果远远不够,这里涉及到一些制作动画的技巧,当我们把4帧打乱来随机快速播放时,就能模拟出人濒死胸腔絮乱跳动的效果,为此我们需要logic case来上面随机播放动画。
打开logic case写下i/o:
分别是切换动画4帧图片对应的4种情况。
打开第二个计时器skybox_swapper_t_timer写下i/o:
让logic_Case每次被激活随机触发一个case,并且由于是PickRandomShuffle,在4种情况都被抽到前不会随机到重复的case。所以现在当skybox_swapper_t_timer被fireuser1时,天空便开始不停随机切换图片播放动画了。

开始制作逻辑Onuser2结束动画恢复正常的部分


打开第二个skybox_swapper_t_timer写下i/o
首先是切换图片的计时器禁用关闭,天空fade快速过渡一下,同时触发swapper由动画最后最后一帧变回黑色天空,最后0.1s再次出发一次变回黑色天空,防止高频切换图片导致卡帧,做一个保险。

最后打开开关逻辑,配置:
打开开关后,开始启用震荡计时器开始随机播放动画。
结语
最后说说一些要注意的事项吧,播放动画你可以看到会消耗大量的逻辑输出,而每张地图每回合的逻辑是有上限的,5w左右,所以当你地图很长很长时候,就需要调慢切换图片的计时器刷新时间,包括随机触发的计时器参数也要根据地图长度进行相应调整,当然你也可以控制震荡计时器的开关来达到地图哪些部分启用随机动画的效果。