又一玄幻大IP动画来袭,《牧神记》PV过度解读

近日,《伍六七》的第五季放出了定档PV,似乎预示着今年B站国创动画发布会离我们越来越远了,遥想去年此时,2小时的发布会一次性公布了50+部动画的PV,是近年来最多的一次。而压轴的《牧神记》PV绝对称得上“艳压群芳”,超高的质量让人惊呼还原了想象。

虽然没有发布会有点可惜,但定档PV“虽迟但到”,今天《牧神记》也确定将在10月27日播出,在看正片之前,让我们来“过度解读”下新老两支PV吧。

建模“玄机味”

许多人在去年《牧神记》的首支PV时,就有不少观众表示一眼就是玄机出品。那到底什么是“玄机味”呢?

在这次牧神记的定档PV中,第一个场景就让人惊艳,会让人感受到大墟荒凉的同时,却又从人物、动物上感受到一种精致感,这是一种神奇的体验。

从《牧神记》新的PV和玄机科技以往作品当中,我们可以看到在角色模型的制作上,玄机都特别注重细节处理和面部表情的自然呈现。从《秦时明月》到《斗罗大陆》《吞噬星空》,每一个角色的面部特征、表情变化都经过精心设计,以确保角色能够生动地表达情感。这一点在国内外动画制作中都是极具挑战性的,尤其是3D动画中的人物表情自然度,通常需要复杂的算法和大量的手动调整才能达到理想效果。

这种“精致感”是目前国内独一档的,属于玄机自己的建模味道。

忠于作品,尽力还原

为什么《牧神记》能收到大家的关注,主要还是因为它的特殊性。作者宅猪,用丰厚的知识储备和接近600万字的体量构建了一个复杂的、东西方融合的“东方玄幻”。《牧神记》的文化思想内涵之所以丰富,便在于其吸收中国传统文化的同时,亦受到一些西方作品如《异形》前传《普罗米修斯》的影响。所以如何去还原,如何在传统文化元素加持下来糅合东西方神话中的形象,是对玄机不小的考验。

去年的发布会上,玄机科技的沈乐平导演就用4个词概括了《牧神记》——众神空间、时空叠加、盆景世界、东方蒸汽。大家纷纷表示沈导这是真的看了好几遍啊!

《牧神记》是在神话背景中叙事的,小说中的许多形象大多有书可稽考,像土伯,完全符合传说中的虎头牛身、利角九曲。而佛祖、天帝、天公、地母元君(传说中后土的别称)等皆是常见的神明。其它的素材则来源于怪物传说,比如赤明时代的人很像《法苑珠林》里三头八臂,易怒好斗且骁勇善战的恶神阿修罗;大日星君“身材高大魁梧,像一头人形巨鸟,三目张开”则像《山海经》中的人面鸟;没有情感却具有强大力量的尸行者则是来源于西方《克苏鲁神话》。就像上图中的形象很有“克感”,但又有东方韵味,能感受到小说中那各个时代各个空间叠加影响后的感觉。

在《牧神记》中,盆景世界是秦牧通过修炼太微胎化而成的一个独立空间。这个世界虽然只有一丈见方,但内部却包含了一个完整的天地,拥有山川、草木、花鸟鱼虫等自然元素。这种将宏观宇宙缩小到微观盆景的设定,体现了东方文化中“一花一世界,一叶一菩提”的哲学思想。在去年的PV当中我们可以看到玄机对于盆景世界也兼容了东西方的表现形式。

而东方蒸汽变现会更加明显一些,像上图中的“飞船”就大概率出自天工族。天工族是《牧神记》中的一个神秘族群,以其精湛的工艺和对机械的独特理解而闻名。他们的设计往往融合了古代机关术和现代机械原理,创造出既实用又具有艺术价值的作品。到这个部分,更是来到了玄机的“舒适区”,非常还原原著中的感觉。

B站作为一个国内ACG文化的社区平台,是一个先行者,在国产动画发展当中有重要的地位。但在目前的市场当中,一直缺少稳定持续的输出,只有《凡人修仙传》的讨论度较高。这次《牧神记》来到之后,相信B站的国创区就不再“孤单”,周末会更加热闹了!

使用Scala的Flink和Kafka实时来一条统计PV的方法如下: 首先,我们需要创建一个Flink的流处理任务。在任务中,我们可以使用Flink提供的Kafka Consumer来消费Kafka中的消息流,并使用Flink的处理函数对消息进行处理。 在处理函数中,我们可以将消费到的每条消息的PV字段进行累加。假设每条消息中包含一个PV字段(表示Page Views,即页面访问量),我们可以定义一个累加器,并使用Flink的MapState来保存当前的PV值。 下面是一个简单的示例代码: ``` import org.apache.flink.api.common.functions.MapFunction import org.apache.flink.api.common.state.MapStateDescriptor import org.apache.flink.api.common.typeinfo.{TypeHint, TypeInformation} import org.apache.flink.streaming.api.scala._ import org.apache.flink.streaming.connectors.kafka.FlinkKafkaConsumer object PVStatistics { def main(args: Array[String]): Unit = { val env = StreamExecutionEnvironment.getExecutionEnvironment val kafkaProps = new Properties() kafkaProps.setProperty("bootstrap.servers", "localhost:9092") kafkaProps.setProperty("group.id", "pv-consumer-group") val inputTopic = "pv-topic" val kafkaConsumer = new FlinkKafkaConsumer[String](inputTopic, new SimpleStringSchema(), kafkaProps) val stream = env.addSource(kafkaConsumer) // 定义累加器和MapStateDescriptor val pvAccumulator = new IntCounter val pvStateDescriptor = new MapStateDescriptor[String, Int]("pv-state", TypeInformation.of(new TypeHint[String]{}), TypeInformation.of(new TypeHint[Int]{})) val pvStream = stream.map(new MapFunction[String, Int] { override def map(value: String): Int = { pvAccumulator.add(1) pvAccumulator.getLocalValue } }).keyBy(_ => "pv-key") .mapWithState[(String, Int), MapState[String, Int]] { // 更新PV值并返回累加结果 case (value, state: MapState[String, Int]) => val pv = state.get("pv") val newPv = pv + value state.put("pv", newPv) ((inputTopic, newPv), state) } pvStream.print() env.execute("PV Statistics") } } ``` 在上述代码中,我们定义了一个`pvAccumulator`作为累加器,并通过`pvStateDescriptor`创建了一个MapState来保存每个topic的PV值。 然后,我们使用`FlinkKafkaConsumer`创建了一个Kafka Consumer,并从指定的topic `pv-topic`中消费消息流。接着,我们使用`map`函数将每一条消息的PV字段累加到累加器中,并将累加结果输出为`(topic, pv)`的元组形式。 最后,我们使用`execute`方法执行Flink任务,即开始实时统计PV。 以上是使用Scala的Flink和Kafka实时统计PV的一个简单示例。实际情况中,你可能需要根据具体需求进行更详细的配置和调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值