在顶级游戏开发的过程中需要怎样的编程实力?

做游戏技术主要讲究的是套路,以及对套路的掌握程度。比如说你要搞个体积光,那么从用mesh+uv动画,到volumetric scattering你都得知道,而且要知道这些方案的优缺点,以及具体的实现细节,比如camera会不会到体积光里边之类的,这种细节的了解会让你更加有信心做出各种技术决策。

所以3a级游戏的大神技术也是对各种领域的套路玩得比较溜,这里我也分享一些做游戏20来年自己领悟出的一些套路吧。

美术用工具输出的3d模型,材质一定要做一个导出插件,否则做出来和进引擎效果不一样,就只能做做手游这种无光照的手绘贴图质量的产品了。

动画要想不滑步,就只能用animation driven的方法,这个需要跟策划做好深度的沟通,得让策划知道移动不是说配置一个速度就可以了,得去找动画师一起调整移动的动画。

动态天气的困难不是制作上的困难,是可以用lightmap的物件会少很多,性能不一定扛得住,这个要在项目初期一定得和制作团队沟通清楚。

球类游戏要达到非常自然的动画,一方面动画肯定是要动捕的,另一方面更重要的是搭建一套动画选择机制,然后根据运动中的球类位置来选择最合适的动画来匹配,再加上小部分的ik。

头上冒字和冒血这种hud就应该用hud的标准方法来制作,切记不能涂省事用ui的方法,对性能效率会有非常大的影响。

音频对最终品质影响很大,一般遵循46原则,即图像资源在最终包中占6成,音频资源占4成。给音频设计师配置一个独立的程序来达成音频的设计需求。

状态机最好是用可视化的方法来实现,游戏中80%的bug都是和状态没切对有关,有个可视化的状态机对于找bug非常方便。

control是最需要状态机化设计的(不同的情况下按同样的按键达成不同的逻辑)

做面部表情,如果不是捕捉就用骨骼简单搭搭就好,如果是捕捉,制作成本会变得非常的高(制作各种morphing target)

对最终画面影响最大的是镜头效果,所以尽量节省渲染时间留给镜头特效。一般影响最大的是校色,如果硬件平台允许尽量给美术提供带深度校色的工具。

有比较宽广视野的游戏,室外可以用一些很取巧的方法来模拟mie scattering和rayleigh scattering,加上哪怕是假的对画面的提升也是巨大的。

对于不同的数据采用不同的配置方法,不要什么数据都用excel,对于有可视化需求的配置,比如ui或者角色身上需要装配一些武器的,提供可视化的工具。对于需要描述父子关系的例如技能树解锁之类的用json或者xml来描述,对于纯数字逻辑的就用csv就好了。

场景的材质如果制作normal map对于你们团队比较复杂,多加一层detail map也能对效果获得较大的提升。

角色的材质,如果性能有限或者说制作成本无法承受的话specular map比normal map的效果要好。

如果角色会近距离看脸,脸部的眼睛一定要单独拿出来处理,脸可以糊,眼睛一定不能糊。

脚步声的标准做法是在地面上放一层低模做和脚的碰撞检测(脚步声如果追求真实,最少得有3个以上的样本随机)

如果要提升动画效果,考虑主角的前臂加上twist骨骼,左肩和右肩不要从脖子上搭建骨骼,要从胸口开始(做head lookat的时候效果会更好)

衣服的标准做法是通过贴图来控制哪些顶点受skin和物理影响的权重比,那张贴图还可以用一个通道来控制流汗的时候哪些地方的smothness要提高。

搭建一个运行时数据库,并且游戏中经常需要访问的数据都放入数据库,可以类似redis那样非常简单的提供一个set和get就行了,运行时数据库可以帮助你找到绝大多数bug。

制作ai尽量使用行为树,并且花时间一定要让策划具备编辑和调式行为树的能力。

顶点色可以各种花式使用,无论是用来bake ao还是决定detail map的权重,都可以用很低廉的代价来获得非常棒的效果。

动画不是在任何时候都可以blend的,要想效果好,牢记:左脚落地的时候只能blend到左脚落地开始的动画,右脚同上。

做上下楼梯的locomotion的时候,用椭球碰撞体会非常简单的获得还不错的效果。

如果画面会经常快速的运动,可以加入一个vector based motionblur,效果会出奇的好。

要想场景生动,一定要使用decal,一个方便美术的decal工具可以让美术一天之内让整个场景提升几个档次。

暂时想到这些,不说了,休息好了继续干活。

~~~~~继续更新一波套路

解决alpha透贴排序的标准方法是两次绘制,第一次在不透明队列里渲染一次alpha test(cutout),打开zwrite,第二次在transparent队列里开alpha blend不开zwrite,ztest lessequal渲染就能还原美术在maya里看到的效果。

弹簧是个非常好用的物理组件,其虎克系数可以有效的模拟力的衰减来做出很多感人的效果,从乳摇,臀摇,尾巴,头发马尾,布料,脸上被重拳击中的肌肉变化都可以看到弹簧的身影。

adobe fuse cc + mixamo可以非常快速的搭建模型和动画来帮助策划找到剧情的场景的感觉。

脚下ik从程序来讲是很方便实现的,大多数引擎都有ik功能,但是工作流程我发现很多公司都没有正确使用。正确的流程是对输出的动画有一个左右脚高低的分析工具,逐动画生成每个脚步离水平面的高度曲线,然后运行时根据脚步的高低来决定ik和skin的权重。

镜头的设置很重要,最好给美术一个和相机镜头类似的算法来反过来计算fovx和fovy,我看到很多产品的fov都是一水的60之类的。

对于类似铁丝网或者其他半透物体的mipmap的标准做法是先自动生成mipmap,然后要美术手动的来降低不同lod贴图的alpha,换句话说近处看有铁丝网,远看就只有框中间近乎全透了来降低锯齿感。

dx10以上的平台上特效的shader加一句根据当前depth和已经绘制的depth的差来控制alpha可以实现简单且效果不错的软粒子效果。

头发的物理效果可以参考衣服的做法,发根受skin影响多,发梢受物理多一些即可。(额前刘海受物理要关掉重力)

如果实时sss负担太重,可以简单的把模型厚度信息烘培在顶点色的某个通道上,然后只需三两行代码就可以让皮肤有sss效果。

看到好多项目用双面材质只是在shader中简单加一句cull none,这个是完全错误的实现。正确的做法是需要把三角形索引信息走vs传递进来,然后判断是否顺逆时针,对于反面需要把法线反转才能获得正确的渲染结果。

先更新到这。

完了,感觉思绪开始打开了,又更新一些,怕一会会忘。

动画驱动的模式下,转向最少需要8个动画,原地左转90,右转90,左转180,右转180,移动同样四个,然后根据控制器的输入来决定混合的权重,一般神海这种级别的产品光locomotion牵扯到的动画会在40-50个这种量级。

对于衣物和皮肤,detail normal十分重要,可以瞬间让你的衣服能看出针织的材质。

处理声音的时候,远处的声音混响需要程序来手动提升,近处降低混响,对临场感增加很多。

声音如果样本有限,也一定要做随机,哪怕就一个脚步声样本,播放的时候也应该随机pitch和volume。

给策划提供一个调整动画曲线的工具,横轴是动画时间,纵轴是动画播放的速度,策划通过这个工具可以调整出情绪非常饱满的动画效果(例如:攻击前摇动画速度变慢,攻击过程加速之类的)这个需要和动画师沟通清楚,要求他们只需要k好几个相关pose即可。

卡通渲染的时候有一步是非常关键也是很多公司都忽略的,就是手动调整模型法线,这一步得在美术工具内完成,通常是定义toon shading的光方向之后,通过调整法线来让一些部位有“看起来”较为舒服的受光,主要是鼻子,腋下和两个胯这三个位置。

游戏加载的正确做法是,在出包的时候对各资源的单位加载时间进行预计算(适合配置固定的主机游戏)。之后在运行时加载的时候,根据每一帧cpu的可用空闲时间来决定当前帧可以加载的资源类型和数量。

渲染阴影的时候,很多人都会忽略绘制阴影那个pass的优化,以前做上一代游戏机的时候所有会有实时阴影的模型都会做一个低模和专门的材质(如果有透贴阴影的需求)。

現実的なタイプのゲームの場合は、正しい方法を作ることは、その後、そのような地下水の汚れ、壁の亀裂、オープンフラッシュ撮影のような傷車などのデカールを、撮影するカメラを取りに戻ってくると内部のPSを引き出すことです。

専制君主のボディデザインされ、Paの本体はストライキの影響を受けていないマイルドブレンドアニメーションのヒットにより、アニメーション体の覇権を再生しながら、多くのARPGゲームがありますが、実際には、正しいアプローチは、層による新しいアニメーションのヒットですインフルエンザに対して、たくさんより快適になります。

ランチタイム!

グッド応答ああ、再び波=)

現実的なスタイルの質感は、実際には、多くの場合、あなたはPBRの多くはGoogle画像検索での変更をマップ見つけるでしょう、焼くにテクスチャを決めるかProcedualテクスチャを使用して、実際のハードウェアに応じて、時間の異なるターゲットプラットフォームをパッケージ化、物質生産を利用するためにターゲットプラットフォームを推奨しました外、物質はそれを改善することができます。

 

そこ主な理由は、彼らが行動の独自のコードを持っているアニメーション・ステート・マシンの駆動システム、AIの生産上の問題は、アニメーションについてなので、伝統的なAIのデザインのアイデアは、たとえば、私が欲しい、私のNPCの攻撃ごとに0.3秒より弱くなります一度、しかし、攻撃アニメーション自体はより0.3秒であり、そしてどのように行うには?またはロジック・ステート・マシンが攻撃0.3秒に応答することはできません。完全にデザインを分離するために、アニメーション駆動システムの下で、計画と通信するために、この時間が必要で、NPCの脳は、AI、NPC体格アニメーションステートマシン、AIは、状況の体格の下で適切に調整するように設計されている多くの時間です。行動ツリー内の物理的な検診の数にノードを追加するには、例えば、私は特定の方向に回転したい、そして、やがてあなたは、あなたの体は本当に指定した方向に行くかどうかを確認する必要がある。同時に、脳に身体にコマンドを送信優先順位を、優先順位は、例えば、長命令を有効に達成するための状態に私のボディーブローですが、私の脳は、時間、この命令の優先順位0.2があり、一度お互いを攻撃するために、私の指揮下にまだあります体はまだ彼らは指示を失って、攻撃することができない場合には、第2、0.2秒で復帰状態への打撃ならば、体の命令は、一度0.2秒を行うことができます。

 

使用の体積クラウド/霧/ライトは、事前に行われ、芸術を議論し、計算プロセスは、深サンプリングを多く含むので、その複数のスクリーンアセンブリは、このような領域が厳密に制御する必要がありますどのくらいの効果がある、そうでない場合は後半シフトが持っていたしなければなりません瞬間的には、ノッチをドロップすると、これらの効果に加えて、全体の製品を行います。

 

除数が無償で取得することができるといくつかのローエンド機で偽」、RGBMを比較して、色空間の32ビットの非常に費用対効果HDRの効果を得るために圧縮する除数で割ったRGB +輝度にいくつかの簡単な圧縮アルゴリズムを使用することができます「正しいアルファブレンド効果。これは芸術であるとラインで直接通信する必要はありません。(利用可能なモバイルプラットフォーム、良い結果で)

 

違いについての最大の問題は、差を計算し、計画は現実の生活の中でのスポーツのルールに沿って、より明確に通信する必要がある、唯一の物理的な差方法、物理的方法は、最終的な位置との差を保証する正確な方法ではありませんそして、時間、その差は完璧な効果を得ることができます。達成物理先端に非常にわずかな差がある:回転R0、位置P0、回転R1、位置P1、所要時間差、春にぶら下がっオブジェクト、ばね吊りの他方の端部との間の差から物体追加の目的は、運動二法則増加する位置P1は、:フレームあたり1は、XXの運動の角度を超えることができない; 2 *に向かって移動物体の実際の位置は、現在のトルクであり、差DAクラブアウト効果、のいずれか火の玉飛行やミサイルを追跡することは、これを使用することができます。

 

開発プロセスは常にオフに変更するので、時期尚早、画像の効果を向上させるためにいくつかのスペースを残してきたため、リソースのファイン最適化は、この事より良いアプローチは、厳密に心配することですが、途中でこれらの問題を修正しないようにしようパフォーマンスのボトルネックは終わりをもたらすことができる効果のいくつかは非常にやりがいのある、バージョンに統合されているあきらめなければなりませんでした。だから、と私たちは絵、そしてパフォーマンスの最適化に満足している後に、結果はまた、非常に良いことになった芸術兄のために、いくつかのエフェクトを追加します。

そんなに書くつもりはなかった、ただ頭を書き始める、マップか何かで、多くの同様の問題はまた、例えば、バック慎重にきちんと見て時間を持っていますが、そんなにので、散らかったコンテンツが表示され、ここに記載されていることができましたいくつかのヒントが疑問や実装の詳細のいくつかの詳細を知りたいために友人がある場合は、民間の手紙単一チャットへようこそ。

 

学生の要求

手の旅行体験の波を更新しますヽ(•ω•)ゝ

贴图进版本的时候做一个alpha通道的剥离,一方面可以比较方便的适配安卓ETC1压缩格式,另一方面后期要压包的时候alpha通道可以随意缩大小,美术基本无感知。

如果是UI资源比较重的游戏可以采取layout和资源分离的方式来获得大量的性能提升。针对unity引擎来说就是遍历ui里所有用到的material,把里面的贴图替换成4*4的空白贴图,另外建立一个从材质对应贴图的索引。因为手机是ssd的缘故所以磁盘io读取贴图的速度是非常快的,这样就可以把整个ui的layout都留在内存中不用切场景释放,不同场景对应加载不同的贴图做一个运行时的对应即可,加载ui的时间能提升80%。这一步建议新项目中前期使用,后期项目做这种级别的修改不划算,风险高。

如果是动画资源比较重的产品,建议使用自定义的动画格式,采取float16的四元数储存关键帧数据,然后加载时还原引擎需要的动画数据,以前做wii上的产品,1000个左右的人形动捕数据可以压缩到23m左右。

经历过很多手游项目的全屏大图比较多(推广图,loading图),有的会占到整个贴图量的30%甚至更多,这时候一定要优化大图的制作工艺,和美术沟通把背景,文字和前景拆开制作,一方面可以更好的压缩(方形,2的次幂),另一方面背景图可以采取比较极端的压缩参数。

加载的过程中往往最后会卡一下,这个是第一次shader提交到gpu产生编译消耗的时间,可以通过在屏幕上绘制一个透明的三角形来完成warmup,这一步基本上主流引擎都有接口,如果单帧消耗过高,可以考虑分布在若干帧里完成。

打击感的一个小trick,击中的一瞬间把时间tick调成0持续个0.1秒左右,又轻巧效果又好。

搭建UI框架的时候给每页ui增加一个fadein和fadeout的接口并且管理好状态机的切换,今后可以很方便策划或者美术增加ui打开和关闭的动态效果。

 

2018国庆更新

ナショナルデーは、現在人気のゲームのいくつかをプレイする時には、気持ちはまだ大きくなっている、ゲームプレイのデザインは非常に良いですが、違いは、まだ製品の比較的遠い全体的な質だったので、今回は私がに専念UI開発を更新する予定ルーチン。

 

家庭用ゲームでは、UIはとても効果的に生産・開発・品質UI UIの効率を向上させる、それが全体を行います、基本的にはプロジェクトが上記の金額の発展の-80%をUIに集中して70%になり、比較的重いものです製品は、コストや偉大なグレードの効果を高めるだろうか。

ビューの各UIポイントの制御は、カプセル化されているために別のクラスを取得し、ないこのレベルのパッケージ、少なくともにカプセル化することがあまりにも下、直接にまたはAnimationButton Buttonクラス:OKボタン一般的な、CancelButton一般クラスのこのレベル、 1は彼が最初にこれらの基底クラスを建てたときに、非常に最初から彼のUI設計を行ってしたくない場合はUIは、アニメーションを追加するよりも何も、プラス効果の詳細を調整しているため。

各コントロールは、個別の範囲に応じて設計することができと対話するには、例えば、小さな絵があり、それが困難なポイントですが、画像を拡大ではなく、あまりにも格好良いので、最良の方法は、小さなマップを使用することですが、応答を拡大しました範囲。プランナーはいつでも、各制御の応答範囲を見ることができるように、対応するスイッチを開発します。

比較的大きな痛いポイントでのUIの開発は時間のスタイルを再構築するか、変更する時間で、古いリソースの多くは、まだ使用するかどうかわからない、削除し、計画やプログラム、または芸術の前に、削除し、左、全体のようにすることはできませんより多くのそのような場合に説明していた最初にスタイルを変更することを躊躇しないで、より多くのを維持することはできませんより多くの肥大化プロジェクトを、開発し、アトラス一度やっているので、UIアトラス、新しいとすべてを再利用することはできません元あなたは時間とエネルギーの資源の10分のクリーンアップ時間は、リソースのバージョン管理は、常に物事の技術フェアシェアとなっています。

各ページへのUI意味のある名前を、私は長い間主張UIの問題として、いくつかの芸術計画プロセスを見てきました、そして最終的に我々は議論で別の何かを見つけ、UI名は同じ名前であってはなりませんそれ以外の場合は、どちら側から飛び越えるためのUIの使用で、後の段階では、文書が法律を書いていない伝えるのは難しいです。

ない単にので、新しいディスプレイの前に隠されたページを、スイッチングについて、UIをジャンプします。最初のためにもポップすることによって、現在のUIアニメーションに応じてUI、UIおよびコントロールセンターを切り替え、処理ロジックは、切り替えするかどうかを決定する、というように、トップ要素にだけ、現在のページ・ポイントを切り替えるかどうか要求を押さなければなりませんロジックは、処理に戻ります。

私は、彼は自分の時間の40%は誰の目の前に現れる人、ある表示階層の問題を扱う約30%で仕事を見つけ、子どもの発達プログラムのUIを見てきました。あなたが理解したくない場合は、ここでちょっとしたトリックを共有するために、正確に最初にすべきか、ポストにする必要があります誰が、それ自体が二つのものが、例えば、両方が含まれているために、新しいクラスを記述するために、同じことをする必要があります示し、 ITEMのアイコンがあり、上記のアイコンがハイライト開口部を描画するために、だけでなく、あなたが中に入るために、単一のクラスにこれら三つを説明する必要があり、上記開口ITEMの数を示し、例えば、言っGlowableCountableItems

絵に加えて、他のコントロールを使用しなければならないUIを二乗、あるいは逆に、あなただけの唯一の正方形の使用を考慮していない要素を使用して正方形に実行することはできません。

画面の適応を行い、親ノードを呼び出すことにより、含有量が多すぎる場合、あなたは、適応が行われている詳細に上記の要素を考慮して、親ノードがハングアップする必要があり、正方形の原則に従って停泊画像そのような方法を、スケール考慮していません

最後に、フォントキャッシュにマップを策定することであるため、フォントは、ボールド/イタリックなど同様の効果に追加しないフォント、フォント未満の3種類で、ゲームの一般的な制御、と混乱をしないでください。ライン上に、後に著作権、地方の裁判所を購入する必要があり、特殊なフォントを使用してください。

フォローする原則のUIローカライズの問題は、そうでない場合は、後の段階で大規模なUIのテキストを抽出する必要があり、自動的にデータベースに書き込まれた任意のテキストを入力して同様のLocalizableText、このような制御を、開発することである簡単な作業ではありません。

もう一つは、ローカライズワードアートに関連しては、特別なリソース、これと同様のLocalizablePictureTextをなされるべきで、それが遅く、時間の節約に局在しています。これらを総称して、それがどの国が安心してより多くのことができるために、海の後の製品であるかどうか、このインフラストラクチャでLocKit(略してローカライズキット)と呼ばれ、慌てる必要はありません。

有一些UI效果可以考虑用shader来完成,举个例子,类传奇的游戏装备图标都会有一圈光圈围着转,这个东西用shader可能就是10行之内的事,我看到过最奇葩的实现方法就是创建了10多个小珠子,每一帧计算这10多个小珠子的位置来实现,当时我就惊呆了。

输入法这个东西要谨慎处理,如果是单机游戏,都可以考虑在弹出输入法的时候让游戏暂停,因为你在输入的时候其实是没有办法和游戏进行其他交互的。

很多游戏都有某个窗口弹出来的时候,背景模糊掉之类的需求,这种的正确制作方法是实现一个类叫BackBufferPicture,然后这个类可以配置截图的参数和属性,这样在任何地方都可以很方便的来实现这样的效果。

同样也有很多需求是在UI中嵌入3D模型,这个也是要实现一个独立的类来实现,如果3D模型上还要增加一些UI来对3D模型进行一些说明,则应当用HUD的方式在3D中实现。另外UI中嵌入3D模型很多程序直接用正交投影,这样出来的效果就会比较奇怪,但是一时又说不上来,记住,任何情况下显示3D物体都请用透视投影。

释放UI的时候一定要记得释放Render To Texture的内存,现在动不动就是2K屏幕,一块FrameBuffer很耗内存的。

欢迎大家关注公众号“创小董”我会继续分享更多更真实的创业经历、经验、解决办法。

おすすめ

転載: blog.csdn.net/dong2008hong/article/details/93058149