疑似1人称視点で遊ぶ環境を作ってみました。
メリット
- 自分の身体が見えます。下を向くとおっぱいぷるんぷるんです。
- 3人称視点用のアニメーションがそのまま再生されます。
デメリット
- クロスヘアで狙いをつけるのが難しくなります。
- 手や武器が見えにくいです。
- 360度移動との相性が悪いです。
- 邪魔な頭を消すために見た目が透明になる特殊な頭防具を装備する必要があるため、本物の頭防具を装備できません。目のメガネや口のガスマスクなどは装備できます。
- 激しい動きをすると首なし胴体が見えてしまいます。
- 狙いをつけている最中とスニーク中は上半身がカメラの上下角と連動するため、首なし胴体がとても映り込みやすくなります。
Fallout4の設定を変更する
カメラが自分に近づきすぎると消えてしまうため、Fallout4の設定を変更する必要があります。
[Camera]
; カメラの位置を変更できるようにする
bApplyCameraNodeAnimations=0
; カメラが近づいたときに消えるのを防止
; Actor単位で消えるかどうかを設定するらしい
fActorFadeOutBoundMax=0
fActorFadeOutLimit=0
fMinTimeInvisible=0
; カメラが近づいたときに消えるのを防止?
fCameraCasterSize=-100
fCameraCasterTargetFurnitureSize=-100
fCameraCasterTargetPASize=-100
fCameraCasterTargetSize=-100
; リーンModで壁を突き抜けなくなる?
fCameraCollisionRigSphereRadius=1
; カメラが壁を突き抜けるのを防止
; 0にすると突き抜ける
;fOverShoulderOffsetCollisionScalar=0
[Display]
; カメラが近づいたときに消えるのを防止?
; Shape単位で消えるかどうかを設定するらしい
;fNearDistance=1.0000
この設定を使う方法はいくつかあります。
- fallout4custom.iniにこれらの設定を追加します。常に有効になります。
- Camera Tweaksのoptionalフォルダ内にあるCameraTweaks.iniをCameraTweaks.espのあるフォルダにコピーします。常に有効になります。
- Camera TweaksのAdjust INI機能を有効にします。疑似1人称視点の時のみ有効になります。
bApplyCameraNodeAnimations
1に設定するとカメラがプレイヤーを追従するようになります。少し遅れて付いてくるため、プレイヤーが停止すると遅れてカメラが停止します。これがバニラの挙動です。
1に設定してあるとカメラの位置に関する設定がほとんど無視されるようです。
カメラの位置をカスタマイズしたいのであれば0に設定する必要があるようです。
fOverShoulderOffsetCollisionScalar
カメラは障害物を超えられません。これがバニラの挙動です。
0に設定すると当たり判定が消えるようで、カメラが壁を突き抜けて向こう側が見えるようになります。
fNearDistance
物と物が近いときに消える距離を設定するようです。バニラでは15に設定されているようです。
壁にポスターが貼ってあるとすると、カメラから遠くなるほど壁とポスターの位置が近づいていき、まともに描画すると同じ位置に描画しようとしてちらついてしまうため、ちらつき防止処理を入れる必要があり、その処理をするかどうかのしきい値を描画上の距離として指定しているのだと思われます。
ちらつき防止処理は、おそらく描画上の裏側にある方を描画せずに透かすことで回避するのだと思います。
小さな値にすると、カメラが近づいた際に物が透けるのを防止する効果があるようです。これは、カメラも物として扱われており、カメラが物に近づいた際に、カメラが表で物が裏にあたるため、ちらつき防止処理が発動して物が透けるのだと思います。
疑似1人称視点においては自分の胴体や武器の見え方に影響します。15だと胸がよく見えるようにすると服や武器が消えてしまいます。9前後に設定すると丁度良い感じでした。
小さな値にすると風景でのちらつきが増大してしまうため、扱いが難しいです。ちらつき防止処理をそもそも行うかどうかの設定をカメラからの距離で指定できればいいのですが。
カメラのピッチに応じて設定を変更する機能を追加しました。これで下を向いているときだけfNearDistanceを小さくして胸が見えるようにして、前を向いたら元に戻すようにすると、いいとこ取りができます。
カメラの位置を調整する
Camera Tweaksでプロファイルを1つ選んで疑似1人称視点用とします。
Enable Fake FPSをONにして疑似1人称視点モードを有効にします。このモードは邪魔な頭を透明にして見えなくします。副作用として頭防具が脱げます。
このプロファイルに切り替えることで疑似1人称視点になります。別のプロファイルに切り替えれば3人称視点に戻すことができます。
使っているアニメーションに合わせて調整します。
動作に応じて設定を変更するダイナミック設定という機能があります。
ダイナミック設定がなしの場合
できるだけ自分の身体が見えるように、かつ首なし胴体が映り込んでしまわないようなカメラ位置を探って調整してみました。
カメラは常にプレイヤーの頭の位置にあるのではなく、プレイヤーが気をつけの姿勢の時の頭の位置にあるため、前傾姿勢を取ると胴体が映り込んでしまいます。できるだけ前に持っていなかいとなりません。
カメラを前後に動かす設定を見つけられませんでした。よって、擬似的にカメラが前にあるように見せかけるようにしました。
項目名 | 解説 | 推奨値 |
---|---|---|
Vertical | カメラの上下方向の座標です。目の高さになります。 上にするほど、カメラを下に向けた時に前(進行方向)に移動します。下にすると後ろに移動します。 カメラは完全に真下には向かず、斜め下を向くことになりますが、カメラが下にあるほどおっぱいがよく見えるようです。 | 10 |
Distance | カメラとプレイヤーの距離です。 距離を縮めるほどプレイヤーの身体がアップになります。 あまり近づけすぎるとカメラが身体にめり込んで身体が消えます。 遠すぎると前進などの動作によって胴体が映り込みやすくなります。 | 10 |
Distance Max Offset | カメラを離せる距離です。 離せては困るので無効にします。 | 0 |
Pitch Down Zoom | カメラを下に向けた時のカメラ距離です。 下に向けるほど適用度が大きくなり、一番下に向けたときに最大になるようです。 正面を向いている時はできるだけ身体に寄せておきたいが、下を向いたときに身体にめり込むのを防ぐために使えます。 | 0 |
Add Horizontal (Melee) | 近接武器で抜刀中のカメラの左右位置です。 | 7 |
Add Distance (Melee) | 近接武器で抜刀中のカメラ距離です。 | 0 |
Pitch Down Zoom (Melee) | 近接武器で抜刀中にカメラを下に向けた時のカメラ距離です。 | 0 |
Add Horizontal (Combat) | 抜刀中のカメラの左右位置です。 左右位置を中央から動かすと、狙いをつける際に照準がズレやすくなる点に留意します。(なぜズレるのか不明) | 4 |
Add Distance (Combat) | 抜刀中のカメラ距離です。 | -20 |
Pitch Down Zoom (Combat) | 抜刀中にカメラを下に向けた時のカメラ距離です。 | 30 |
Add Horizontal (Sneak) | 納刀&スニーク中のカメラの左右位置です。 | 10 |
Add Horizontal (Sneak Combat) | 納刀&スニーク中のカメラの左右位置です。 | 10 |
Add Distance (Sneak) | 納刀&スニーク中のカメラ距離です。 | -25 |
Add Distance (Sneak Combat) | 抜刀&スニーク中のカメラ距離です。 | -5 |
Pitch Down Zoom (Sneak) | スニーク中にカメラを下に向けた時のカメラ距離です。 | 10 |
Vertical Melee on Ready | レディ状態の近接はかなりの前傾姿勢になるため、カメラを前に移動します。 | 10 |
アニメーションは以下を統合したものを使っています。
- JUST NEW FEMALE ANIMATIONS
- mcgFemaleWalk
- Girly Animation
ダイナミック設定がありの場合
スケルトンのノードを調整してプレイヤーの位置を移動させることで、あたかもカメラが前後に移動しているようにします。
SSF – Skeleton Style Frameworkが必要になります。必要なのはdllファイルのみで、espファイルがなくても動作します。
1人称視点の場合はカメラ位置を変更できるのですが、3人称視点のカメラ位置を変更する方法がわかりませんでした。仕方がないのでプレイヤーの位置を変えることで、相対的にカメラ位置を変更しています。
SSFのおかげでカメラの位置(プレイヤーの位置)を動かせるのですが、行動によって最適な位置が異なり、家具を使ったりする際は元の位置に戻さないと見た目がおかしなことになります。そこで、各種行動に応じてリアルタイムに位置を調整します。
カメラの前後の位置が動いているので、上下は動かす必要がなくなるのがメリットです。そのかわりに下に向けると身体が近すぎて消えるので、Pitch Down Zoomで調整します。
カメラを下に最大限に動かした際に胴の空洞が見えないように調整すると、普段は身体が見えづらくなります。
項目名 | 推奨値 |
---|---|
Pitch Down Zoom | 15 |
Pitch Down Zoom (Combat) | 15 |
Add Vertical (Melee) | -20 |
Pitch Down Zoom (Melee) | -5 |
Camera Pos Y | 20 |
Camera Pos Y (Moving) | 20 |
Camera Pos Y (Sneak) | 20 |
Camera Pos Y (Sneak Moving) | 20 |
Camera Pos Y (Pistol) | 10 |
Camera Pos Y (Pistol Moving) | 25 |
Camera Pos Y (Rifle) | 15 |
Camera Pos Y (Rifle Moving) | 25 |
Camera Pos Y (Melee) | 20 |
Camera Pos Y (Melee Moving) | 40 |
Camera Pos Y (Sneak Combat) | 35 |
Camera Pos Y (Sneak Combat Moving) | 35 |
Camera Pos Y (Sneak Melee) | 45 |
Camera Pos Y (Sneak Melee Moving) | 45 |
仰向け
Tactical Action Extension Package Extendedの仰向けの時に使うプロファイルの設定です。
ダイナミック設定がなしの場合
項目名 | 推奨値 |
---|---|
Distance | 30 |
Pitch Down Zoom (Sneak) | -10 |
仰向けは内部的に抜刀&スニーク状態となっています。
ダイナミック設定がありの場合
項目名 | 推奨値 |
---|---|
Vertical | -10 |
Pitch Down Zoom (Sneak) | -80 |
Use HHS | OFF |
Camera Pos Y Override (Sneak) | -35 |
Camera Pos Y Override (Sneak Moving) | -35 |
実装の詳細
カメラ位置関連
Camera Pos Y OverrideはCamera Pos Yを強制的に上書きします。これは、ダイナミック設定が全プロファイル共通なので、プロファイル毎に個別に上書きできるようにするためです。
Use HHSがオフの場合、Camera Pos Xは無効になります。処理速度を稼ぐためです。
Use HHSがオンの場合、Camera Pos Yが後方に調整されます。
胴の映り込みを回避する
カメラを思いっきり前方に移動させるか、いっそのことFPSにしてしまうのが解決策です。カメラを下に向けたときに上半身が曲がって胴が映り込みやすくなる問題はPitch Down Zoomをマイナスにすると回避できます。
狙いを付ける時はAuto FPSを使うのがオススメです。上半身の映り込み、照準のズレ、狙いにくさが改善されます。
Use FPS Instead of Readyを有効にすると、レディ状態の時にFPSになります。
負傷時の銃器は常に上半身が曲がるようになるので、自動的にFPSになるようにしてあります。
スニーク中は常に上半身が曲がるようになるので、スニーク中にFPSにする機能を使うこともできます。ただし、FPSの最中は3人称専用アニメーション(TAEPEのスライディングなど)との相性が悪いです。
近接の遊びやすさを改善
近接武器で防御した際にZoomを-50することで、プレイヤーの動作が見えるようにしています。
納刀時の360度移動
納刀時はFPSにする機能を使うことで回避できます。この方法は軽いのでオススメです。
納刀時のカメラ距離を離すことで全身が映るようにする方法もあります。抜刀時のみ頭部を非表示にする機能と合わせて使います。
納刀時と抜刀時でプロファイルを別にして、納刀時は3人称視点にする方法があります。こちらはプロファイル切り替えが重いのがデメリットです。
頭部を非表示にするによる不具合
頭部を消すためのダミーの防具を身に着けていると、PapyrusのGetWornItem関数がダミー防具を返すため、身につけている物の判定がおかしくなります。例えばNuclear Winterの防寒具の判定が頭部は何もなしになってしまいます。
頭部の消し方をHead、Face、Head + Bodyから選べます。FaceにすることでHeadbandとNeckが残るため、ここに防寒具を使うことができます。
設定 | 内容 |
---|---|
Head | Hair Top、Hair Long、FaceGen Head、Headband、Eyes、Beard、Mouth、Neck |
Face | Hair Top、Hair Long、FaceGen Head、Beard、Mouth |
Head + Body | Hair Top、Hair Long、FaceGen Head、BODY、Headband、Eyes、Beard、Mouth、Neck、[U] Torso、[A] Torso |
胴を消す設定ではLooksMenuのMorphの表示が崩れることが多いことに留意してください。
Fallout4.iniの初期値
Fallout 4 Default Values for All Valid INI Settingsより一部引用します。
Fallout4.iniの初期値 (ini)
[Camera]
bApplyCameraNodeAnimations=1
bDebugCameraPathSelection=0
bDisableAutoVanityMode=0
bForceAutoVanityMode=0
bReturnTo1stPersonFromVanity=0
bTestLeftSideCameras=0
f1st3rdSwitchDelay=0.2500
f1stHorzDampeningSpringConstant=0.0001
f1stHorzDampeningVelocityDampening=0.4000
f1stPitchOffsetMouseFollowSpeed=15.0000
f1stPitchOffsetMouseMaxLag=4.0000
f1stPitchOffsetMultOffAccel=1.0000
f1stPitchOffsetMultOffMaxSpeed=1.0000
f1stPitchOffsetMultOnAccel=0.5000
f1stPitchOffsetMultOnMaxSpeed=0.6000
f1stPitchOffsetTarget=0.7500
f1stVertDampeningSpringConstant=0.0010
f1stVertDampeningVelocityDampening=0.6000
f3rdPersonAimDist=30.0000
f3rdPersonAimDollySpeed=6.0000
f3rdPersonAimFOV=50.0000
f3rdPersonAimFOVAnimateSec=0.1500
f3rdPersonPowerArmorCameraAdjust=-6.0000
fActorFadeOutBoundMax=100.0000
fActorFadeOutLimit=30.0000
fAutoVanityIncrement=0.3000
fCameraCasterBleedOutSize=17.0000
fCameraCasterDialogueSize=3.0000
fCameraCasterMinTargetHeight=30.0000
fCameraCasterSize=15.0000
fCameraCasterTargetFurnitureSize=40.0000
fCameraCasterTargetPASize=15.0000
fCameraCasterTargetSize=8.0000
fCameraCollisionRigCastLength=150.0000
fCameraCollisionRigSphereRadius=12.0000
fCameraCollisionRigSpring=30.0000
fCameraRecoveryMult=0.9000
fCharControllerCheckHeightOffset=124.0000
fChaseCameraMaxAngle=30.0000
fChaseCameraSpeed=10.0000
fCollisionRecoverySpeed=3.0000
fDefaultAutoVanityZoom=300.0000
fDefaultEyeHeight=120.0000
fFirstPersonDisablePOVLerpDPS=2.0000
fFirstPersonSittingAngleLimit=1.5708
fFirstPersonSittingRotationSpeedX=0.1000
fFirstPersonSittingRotationSpeedY=0.0500
fFreeCameraRotationSpeed=3.0000
fFreeCameraRunSpeed=2.0000
fFreeCameraTranslationSpeed=20.0000
fFreeCameraTriggerDeadzone=0.1000
fFreeRotationDialogueSpeed=0.1000
fFreeRotationSpeed=3.0000
fFurnitureCameraAngle=0.3927
fFurnitureCameraZoom=250.0000
fHorseDismountYawCorrection=0.3200
fHorseMaxAngleBeforeTurn=90.0000
fLookingSpeed=0.1000
fMinCurrentZoom=0.0000
fMinTimeInvisible=0.0500
fMouseWheelZoomIncrement=0.0750
fMouseWheelZoomMinDelta=0.0050
fMouseWheelZoomSpeed=3.0000
fOverlayNormalSnowStrength=0.4000
fOverlayNormalStrength=1.1000
fOverlayScale=0.0000
fOverlaySnowScale=0.0000
fOverShoulderCombatAddY=0.0000
fOverShoulderCombatPosX=0.0000
fOverShoulderCombatPosZ=0.0000
fOverShoulderHorseAddY=-300.0000
fOverShoulderHorsePosX=0.0000
fOverShoulderHorsePosZ=0.0000
fOverShoulderMeleeCombatAddY=0.0000
fOverShoulderMeleeCombatPosX=0.0000
fOverShoulderMeleeCombatPosZ=0.0000
fOverShoulderOffsetCollisionScalar=0.3000
fOverShoulderPosX=0.0000
fOverShoulderPosZ=0.0000
fPitchZeroBlendTime=0.7500
fPitchZoomOutMaxDist=100.0000
fShoulderDollySpeed=3.0000
fThumbstickZoomSpeed=0.0500
fTweenCamRotAngle=0.0500
fTweenCamRotClosingSpeed=10.0000
fTweenCamRotSpeed=4.0000
fTweenCamZoomFOVMod=10.0000
fTweenCamZoomSpeed=25.0000
fVanityModeMaxDist=150.0000
fVanityModeMinDist=0.0000
fVertibirdAutoVanityZoom=975.0000
fVertibirdVanityModeMaxDist=2000.0000
fVertibirdVanityModeMinDist=975.0000
fWorkbenchCameraPitch=0.5000
fWorkbenchCameraTranslateX=0.0000
fWorkbenchCameraTranslateY=50.0000
fWorkbenchCameraTranslateZ=-50.0000
fWorkbenchCameraYaw=-1.0000
fWorkbenchCameraZoom=100.0000
fWorldCameraDepthBlurScale=0.3000
fWorldCameraFocalDepth=45000.0000
fWorldCameraMaximumDepthBlur=0.4500
fWorldCameraNearDepthBlurScale=4.0000
fWorldTransitionHeight=10000.0000
iAnimatedTransitionMillis=1000
iBleedoutTransitionMillis=500
iDialogueTransitionMillis=500
iHorseTransitionMillis=500
sMapCloudNIF=Meshes\Sky\SkyrimWorldMapCloudBank.nif
sWorldCameraOverlayNormalSnowTexture=Data\Textures\Terrain\WorldMapOverlaySnow_n.dds
sWorldCameraOverlayNormalTexture=Data\Textures\Terrain\WorldMapOverlay_n.dds
sWorldDefaultWorldSpace=Commonwealth
[CameraPath]
bRecord=0
bStart=0
iFPS=30
iTake=0
sDirectoryName=TestCameraPath
sNif=Cameras\CameraTest.nif
sOffsetID=